@tricoteuses/assemblee 1.0.6 → 1.1.0

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.
Files changed (135) hide show
  1. package/lib/api.js +3 -9
  2. package/lib/api.mjs +4 -5
  3. package/lib/bugs/acteur-00010/plugin.test.js +3 -50
  4. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  5. package/lib/bugs/acteur-00010.js +2 -57
  6. package/lib/bugs/acteur-00010.mjs +1 -6
  7. package/lib/bugs/agenda-00002/plugin.test.js +3 -53
  8. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
  9. package/lib/bugs/agenda-00002.js +3 -148
  10. package/lib/bugs/agenda-00002.mjs +1 -28
  11. package/lib/bugs/agenda-00008/plugin.test.js +3 -52
  12. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  13. package/lib/bugs/agenda-00008.js +2 -61
  14. package/lib/bugs/agenda-00008.mjs +1 -5
  15. package/lib/bugs/agenda-00011/plugin.test.js +5 -99
  16. package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
  17. package/lib/bugs/agenda-00011.js +4 -105
  18. package/lib/bugs/agenda-00011.mjs +3 -29
  19. package/lib/bugs.js +3 -164
  20. package/lib/bugs.mjs +1 -26
  21. package/lib/cleaners/actes_legislatifs.js +11 -115
  22. package/lib/cleaners/actes_legislatifs.mjs +7 -82
  23. package/lib/cleaners/acteurs.js +12 -92
  24. package/lib/cleaners/acteurs.mjs +7 -38
  25. package/lib/cleaners/amendements.js +10 -103
  26. package/lib/cleaners/amendements.mjs +4 -58
  27. package/lib/cleaners/documents.js +5 -67
  28. package/lib/cleaners/documents.mjs +1 -37
  29. package/lib/cleaners/dossiers_legislatifs.js +5 -61
  30. package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
  31. package/lib/cleaners/index.js +1 -9
  32. package/lib/cleaners/index.mjs +1 -1
  33. package/lib/cleaners/organes.js +1 -33
  34. package/lib/cleaners/organes.mjs +1 -17
  35. package/lib/cleaners/reunions.js +4 -119
  36. package/lib/cleaners/reunions.mjs +1 -64
  37. package/lib/cleaners/scrutins.js +10 -102
  38. package/lib/cleaners/scrutins.mjs +1 -48
  39. package/lib/cleaners/xml.js +8 -42
  40. package/lib/cleaners/xml.mjs +6 -8
  41. package/lib/datasets.js +14 -113
  42. package/lib/datasets.mjs +6 -46
  43. package/lib/dates.js +7 -37
  44. package/lib/dates.mjs +9 -14
  45. package/lib/dossiers_legislatifs.js +6 -68
  46. package/lib/dossiers_legislatifs.mjs +5 -36
  47. package/lib/file_systems.js +56 -139
  48. package/lib/file_systems.mjs +1 -9
  49. package/lib/git.js +4 -53
  50. package/lib/git.mjs +1 -12
  51. package/lib/index.js +1 -15
  52. package/lib/index.mjs +1 -1
  53. package/lib/inserters.js +23 -146
  54. package/lib/inserters.mjs +6 -87
  55. package/lib/loaders.js +44 -316
  56. package/lib/loaders.mjs +12 -135
  57. package/lib/organes.js +1 -7
  58. package/lib/organes.mjs +1 -4
  59. package/lib/parsers/documents.js +22 -151
  60. package/lib/parsers/documents.mjs +19 -81
  61. package/lib/parsers/index.js +1 -4
  62. package/lib/parsers/index.mjs +1 -1
  63. package/lib/parsers/recherche_amendements.js +302 -527
  64. package/lib/parsers/recherche_amendements.mjs +8 -31
  65. package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
  66. package/lib/raw_types/acteurs_et_organes.js +5 -124
  67. package/lib/raw_types/acteurs_et_organes.mjs +5 -105
  68. package/lib/raw_types/agendas.js +6 -89
  69. package/lib/raw_types/agendas.mjs +9 -65
  70. package/lib/raw_types/amendements.d.ts +2 -0
  71. package/lib/raw_types/amendements.js +10 -90
  72. package/lib/raw_types/amendements.mjs +11 -69
  73. package/lib/raw_types/dossiers_legislatifs.d.ts +16 -115
  74. package/lib/raw_types/dossiers_legislatifs.js +26 -435
  75. package/lib/raw_types/dossiers_legislatifs.mjs +26 -412
  76. package/lib/raw_types/scrutins.js +6 -81
  77. package/lib/raw_types/scrutins.mjs +9 -57
  78. package/lib/scripts/bugs_helper.js +2 -181
  79. package/lib/scripts/bugs_helper.mjs +2 -39
  80. package/lib/scripts/clean_data.js +27 -143
  81. package/lib/scripts/clean_data.mjs +15 -34
  82. package/lib/scripts/clean_reorganized_data.js +76 -240
  83. package/lib/scripts/clean_reorganized_data.mjs +36 -99
  84. package/lib/scripts/diff_amendements.js +19 -79
  85. package/lib/scripts/diff_amendements.mjs +17 -35
  86. package/lib/scripts/document_dossiers_legislatifs.js +17 -142
  87. package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
  88. package/lib/scripts/get_today_reunions.js +4 -22
  89. package/lib/scripts/get_today_reunions.mjs +1 -7
  90. package/lib/scripts/merge_scrutins.js +3 -47
  91. package/lib/scripts/merge_scrutins.mjs +1 -9
  92. package/lib/scripts/parse_textes_lois.js +15 -44
  93. package/lib/scripts/parse_textes_lois.mjs +18 -19
  94. package/lib/scripts/raw_types_from_amendements.js +3 -95
  95. package/lib/scripts/raw_types_from_amendements.mjs +1 -16
  96. package/lib/scripts/reorganize_data.js +74 -294
  97. package/lib/scripts/reorganize_data.mjs +22 -133
  98. package/lib/scripts/retrieve_deputes_photos.js +6 -119
  99. package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
  100. package/lib/scripts/retrieve_documents.js +4 -192
  101. package/lib/scripts/retrieve_documents.mjs +2 -50
  102. package/lib/scripts/retrieve_open_data.js +44 -116
  103. package/lib/scripts/retrieve_open_data.mjs +14 -19
  104. package/lib/scripts/retrieve_pending_amendments.js +4 -98
  105. package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
  106. package/lib/scripts/retrieve_senateurs_photos.js +18 -114
  107. package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
  108. package/lib/scripts/retrieve_textes_lois.js +3 -122
  109. package/lib/scripts/retrieve_textes_lois.mjs +3 -21
  110. package/lib/scripts/test_load.js +2 -10
  111. package/lib/scripts/test_load.mjs +2 -1
  112. package/lib/scripts/test_load_big_files.js +2 -10
  113. package/lib/scripts/test_load_big_files.mjs +2 -1
  114. package/lib/scripts/validate_json.js +4 -119
  115. package/lib/scripts/validate_json.mjs +2 -36
  116. package/lib/shared_types/codes_actes.js +1 -24
  117. package/lib/shared_types/codes_actes.mjs +3 -10
  118. package/lib/strings.js +1 -5
  119. package/lib/strings.mjs +1 -1
  120. package/lib/types/acteurs_et_organes.js +9 -84
  121. package/lib/types/acteurs_et_organes.mjs +10 -63
  122. package/lib/types/agendas.js +8 -90
  123. package/lib/types/agendas.mjs +11 -66
  124. package/lib/types/amendements.d.ts +2 -0
  125. package/lib/types/amendements.js +12 -92
  126. package/lib/types/amendements.mjs +15 -70
  127. package/lib/types/dossiers_legislatifs.js +8 -96
  128. package/lib/types/dossiers_legislatifs.mjs +10 -72
  129. package/lib/types/legislatures.js +1 -3
  130. package/lib/types/legislatures.mjs +1 -2
  131. package/lib/types/scrutins.js +8 -82
  132. package/lib/types/scrutins.mjs +11 -58
  133. package/lib/urls.js +3 -27
  134. package/lib/urls.mjs +3 -21
  135. package/package.json +1 -1
@@ -1,57 +1,31 @@
1
1
  "use strict";
2
2
 
3
3
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
-
5
4
  require("core-js/modules/es.object.define-property.js");
6
-
7
5
  require("core-js/modules/es.object.to-string.js");
8
-
9
6
  require("core-js/modules/es.promise.js");
10
-
11
7
  require("core-js/modules/es.array.slice.js");
12
-
13
8
  require("core-js/modules/es.function.name.js");
14
-
15
9
  require("core-js/modules/es.array.from.js");
16
-
17
10
  require("core-js/modules/es.string.iterator.js");
18
-
19
11
  require("core-js/modules/es.symbol.js");
20
-
21
12
  require("core-js/modules/es.symbol.description.js");
22
-
23
13
  require("core-js/modules/es.symbol.iterator.js");
24
-
25
14
  require("core-js/modules/es.array.iterator.js");
26
-
27
15
  require("core-js/modules/web.dom-collections.iterator.js");
28
-
29
16
  require("core-js/modules/es.array.is-array.js");
30
-
31
17
  require("core-js/modules/es.symbol.async-iterator.js");
32
-
33
18
  require("core-js/modules/es.symbol.to-string-tag.js");
34
-
35
19
  require("core-js/modules/es.json.to-string-tag.js");
36
-
37
20
  require("core-js/modules/es.math.to-string-tag.js");
38
-
39
21
  require("core-js/modules/es.object.create.js");
40
-
41
22
  require("core-js/modules/es.object.get-prototype-of.js");
42
-
43
23
  require("core-js/modules/es.array.for-each.js");
44
-
45
24
  require("core-js/modules/web.dom-collections.for-each.js");
46
-
47
25
  require("core-js/modules/es.object.set-prototype-of.js");
48
-
49
26
  require("core-js/modules/es.array.reverse.js");
50
-
51
27
  require("core-js/modules/es.weak-map.js");
52
-
53
28
  require("core-js/modules/es.object.get-own-property-descriptor.js");
54
-
55
29
  Object.defineProperty(exports, "__esModule", {
56
30
  value: true
57
31
  });
@@ -59,71 +33,38 @@ exports.BugsHelper = void 0;
59
33
  exports.checkoutFix = checkoutFix;
60
34
  exports.main = main;
61
35
  exports.mergeFix = mergeFix;
62
-
63
36
  require("core-js/modules/es.array.includes.js");
64
-
65
37
  require("core-js/modules/es.string.includes.js");
66
-
67
38
  require("core-js/modules/es.object.keys.js");
68
-
69
39
  require("core-js/modules/es.array.concat.js");
70
-
71
40
  require("core-js/modules/es.array.join.js");
72
-
73
41
  require("core-js/modules/es.number.constructor.js");
74
-
75
42
  require("core-js/modules/es.string.ends-with.js");
76
-
77
43
  require("core-js/modules/es.regexp.exec.js");
78
-
79
44
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
80
-
81
45
  var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
82
-
83
46
  var _commandLineUsage = _interopRequireDefault(require("command-line-usage"));
84
-
85
47
  var _file_systems = require("../file_systems");
86
-
87
48
  var _bugs = require("../../src/bugs");
88
-
89
49
  var git = _interopRequireWildcard(require("../../src/git"));
90
-
91
50
  var _datasets = require("../../src/datasets");
92
-
93
51
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
94
-
95
52
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
96
-
97
53
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
98
-
99
54
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
100
-
101
55
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
102
-
103
56
  function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
104
-
105
57
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
106
-
107
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return generator._invoke = function (innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; }(innerFn, self, context), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; this._invoke = function (method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, define(Gp, "constructor", GeneratorFunctionPrototype), define(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
108
-
58
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = "function" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || "@@iterator", asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator", toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, ""); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, "_invoke", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if ("throw" !== record.type) { var result = record.arg, value = result.value; return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, "_invoke", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = "suspendedStart"; return function (method, arg) { if ("executing" === state) throw new Error("Generator is already running"); if ("completed" === state) { if ("throw" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) { if ("suspendedStart" === state) throw state = "completed", context.arg; context.dispatchException(context.arg); } else "return" === context.method && context.abrupt("return", context.arg); state = "executing"; var record = tryCatch(innerFn, self, context); if ("normal" === record.type) { if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } "throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (undefined === method) { if (context.delegate = null, "throw" === context.method) { if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel; context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if ("function" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) { if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; } return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) { var ctor = "function" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, "toString", function () { return "[object Generator]"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) { keys.push(key); } return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) { "t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); } }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if ("throw" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if ("root" === entry.tryLoc) return handle("end"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"), hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error("try statement without catch or finally"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if ("throw" === record.type) throw record.arg; return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if ("throw" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, "next" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }
109
59
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
110
-
111
60
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
112
-
113
61
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
114
-
115
62
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
116
-
117
63
  function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
118
-
119
64
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
120
-
121
65
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
122
-
123
66
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
124
-
125
67
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
126
-
127
68
  function parseArgs(argv) {
128
69
  var optionsDefinitions = [{
129
70
  description: "pathname to the directory containing the dataset",
@@ -188,57 +129,45 @@ function parseArgs(argv) {
188
129
  var options = (0, _commandLineArgs["default"])(optionsDefinitions, {
189
130
  argv: argv
190
131
  });
191
-
192
132
  if (options.dataset) {
193
133
  if (!(0, _datasets.validDataset)(options.dataset)) {
194
134
  console.error("--dataset ".concat(options.dataset));
195
135
  options.help = true;
196
136
  }
197
137
  }
198
-
199
138
  if (options.schema) {
200
139
  if (!(0, _datasets.getSchemas)().includes(options.schema)) {
201
140
  console.error("--schema ".concat(options.schema));
202
141
  options.help = true;
203
142
  }
204
143
  }
205
-
206
144
  if (options.commit) {
207
145
  if (!_fsExtra["default"].existsSync(options.commit)) {
208
146
  console.error("".concat(options.commit, " does not exist"));
209
147
  options.help = true;
210
148
  }
211
149
  }
212
-
213
150
  if (options.debug) options.verbose = true;
214
-
215
151
  if ("help" in options) {
216
152
  var usage = (0, _commandLineUsage["default"])(sections);
217
153
  console.warn(usage);
218
154
  return null;
219
155
  }
220
-
221
156
  return options;
222
157
  }
223
-
224
158
  var BugsHelper = /*#__PURE__*/function () {
225
159
  function BugsHelper(options) {
226
160
  _classCallCheck(this, BugsHelper);
227
-
228
161
  _defineProperty(this, "options", void 0);
229
-
230
162
  _defineProperty(this, "bugs", void 0);
231
-
232
163
  this.options = options;
233
164
  this.bugs = new _bugs.SchemaBugs(this.options);
234
165
  }
235
-
236
166
  _createClass(BugsHelper, [{
237
167
  key: "check",
238
168
  value: function () {
239
169
  var _check = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
240
170
  var analysis, _iterator, _step, file, content;
241
-
242
171
  return _regeneratorRuntime().wrap(function _callee$(_context) {
243
172
  while (1) {
244
173
  switch (_context.prev = _context.next) {
@@ -246,69 +175,51 @@ var BugsHelper = /*#__PURE__*/function () {
246
175
  analysis = {};
247
176
  _context.next = 3;
248
177
  return this.bugs.preCheck();
249
-
250
178
  case 3:
251
179
  if (this.options.verbose) console.log("check ".concat(this.options.data));
252
180
  _iterator = _createForOfIteratorHelper((0, _file_systems.getFiles)([this.options.data]));
253
181
  _context.prev = 5;
254
-
255
182
  _iterator.s();
256
-
257
183
  case 7:
258
184
  if ((_step = _iterator.n()).done) {
259
185
  _context.next = 15;
260
186
  break;
261
187
  }
262
-
263
188
  file = _step.value;
264
189
  content = (0, _file_systems.load)(file);
265
190
  _context.next = 12;
266
191
  return this.bugs.check(content, file);
267
-
268
192
  case 12:
269
193
  analysis[file] = _context.sent;
270
-
271
194
  case 13:
272
195
  _context.next = 7;
273
196
  break;
274
-
275
197
  case 15:
276
198
  _context.next = 20;
277
199
  break;
278
-
279
200
  case 17:
280
201
  _context.prev = 17;
281
202
  _context.t0 = _context["catch"](5);
282
-
283
203
  _iterator.e(_context.t0);
284
-
285
204
  case 20:
286
205
  _context.prev = 20;
287
-
288
206
  _iterator.f();
289
-
290
207
  return _context.finish(20);
291
-
292
208
  case 23:
293
209
  _context.next = 25;
294
210
  return this.bugs.postCheck(analysis);
295
-
296
211
  case 25:
297
212
  _context.next = 27;
298
213
  return this.show(analysis);
299
-
300
214
  case 27:
301
215
  if (!this.options.output) {
302
216
  _context.next = 30;
303
217
  break;
304
218
  }
305
-
306
219
  _context.next = 30;
307
220
  return this.store(analysis);
308
-
309
221
  case 30:
310
222
  return _context.abrupt("return", 0);
311
-
312
223
  case 31:
313
224
  case "end":
314
225
  return _context.stop();
@@ -316,11 +227,9 @@ var BugsHelper = /*#__PURE__*/function () {
316
227
  }
317
228
  }, _callee, this, [[5, 17, 20, 23]]);
318
229
  }));
319
-
320
230
  function check() {
321
231
  return _check.apply(this, arguments);
322
232
  }
323
-
324
233
  return check;
325
234
  }()
326
235
  }, {
@@ -328,7 +237,6 @@ var BugsHelper = /*#__PURE__*/function () {
328
237
  value: function () {
329
238
  var _show = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(analysis) {
330
239
  var _i, _Object$keys, filename, bug, _i2, _Object$keys2, name, result, log;
331
-
332
240
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
333
241
  while (1) {
334
242
  switch (_context2.prev = _context2.next) {
@@ -336,20 +244,16 @@ var BugsHelper = /*#__PURE__*/function () {
336
244
  for (_i = 0, _Object$keys = Object.keys(analysis); _i < _Object$keys.length; _i++) {
337
245
  filename = _Object$keys[_i];
338
246
  bug = analysis[filename];
339
-
340
247
  for (_i2 = 0, _Object$keys2 = Object.keys(bug); _i2 < _Object$keys2.length; _i2++) {
341
248
  name = _Object$keys2[_i2];
342
249
  result = bug[name];
343
-
344
250
  if (result != null) {
345
251
  log = void 0;
346
-
347
252
  if (result["status"] == "needs-fixing") {
348
253
  log = console.error;
349
254
  } else if (this.options.verbose) {
350
255
  log = console.log;
351
256
  }
352
-
353
257
  if (log != undefined) {
354
258
  log("".concat(name, " finds ").concat(filename, " ").concat(result["status"]));
355
259
  log(result["info"].join("\n"));
@@ -357,7 +261,6 @@ var BugsHelper = /*#__PURE__*/function () {
357
261
  }
358
262
  }
359
263
  }
360
-
361
264
  case 1:
362
265
  case "end":
363
266
  return _context2.stop();
@@ -365,11 +268,9 @@ var BugsHelper = /*#__PURE__*/function () {
365
268
  }
366
269
  }, _callee2, this);
367
270
  }));
368
-
369
271
  function show(_x) {
370
272
  return _show.apply(this, arguments);
371
273
  }
372
-
373
274
  return show;
374
275
  }()
375
276
  }, {
@@ -377,32 +278,26 @@ var BugsHelper = /*#__PURE__*/function () {
377
278
  value: function () {
378
279
  var _store = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(analysis) {
379
280
  var name2reports, _i3, _Object$keys3, filename, bug, _i4, _Object$keys4, name, _i5, _Object$keys5, _name, reports, n, lines, status2lines, _i6, _Object$keys6, _filename, report, status, l, _iterator2, _step2, info, _i7, _arr, _arr$_i, _status, label, output;
380
-
381
281
  return _regeneratorRuntime().wrap(function _callee3$(_context3) {
382
282
  while (1) {
383
283
  switch (_context3.prev = _context3.next) {
384
284
  case 0:
385
285
  name2reports = {};
386
-
387
286
  for (_i3 = 0, _Object$keys3 = Object.keys(analysis); _i3 < _Object$keys3.length; _i3++) {
388
287
  filename = _Object$keys3[_i3];
389
288
  bug = analysis[filename];
390
-
391
289
  for (_i4 = 0, _Object$keys4 = Object.keys(bug); _i4 < _Object$keys4.length; _i4++) {
392
290
  name = _Object$keys4[_i4];
393
291
  if (!(name in name2reports)) name2reports[name] = {};
394
292
  name2reports[name][filename] = bug[name];
395
293
  }
396
294
  }
397
-
398
295
  _i5 = 0, _Object$keys5 = Object.keys(name2reports);
399
-
400
296
  case 3:
401
297
  if (!(_i5 < _Object$keys5.length)) {
402
298
  _context3.next = 30;
403
299
  break;
404
300
  }
405
-
406
301
  _name = _Object$keys5[_i5];
407
302
  reports = name2reports[_name];
408
303
  n = _name.split("-")[1];
@@ -413,30 +308,24 @@ var BugsHelper = /*#__PURE__*/function () {
413
308
  "already-fixed": []
414
309
  };
415
310
  _i6 = 0, _Object$keys6 = Object.keys(reports);
416
-
417
311
  case 10:
418
312
  if (!(_i6 < _Object$keys6.length)) {
419
313
  _context3.next = 24;
420
314
  break;
421
315
  }
422
-
423
316
  _filename = _Object$keys6[_i6];
424
317
  report = reports[_filename];
425
-
426
318
  if (!(report == null || report["status"] == "ok")) {
427
319
  _context3.next = 15;
428
320
  break;
429
321
  }
430
-
431
322
  return _context3.abrupt("continue", 21);
432
-
433
323
  case 15:
434
324
  if (!(report["status"] in status2lines)) console.error("".concat(_filename, " status ").concat(report["status"], " unknown"));
435
325
  status = report["status"];
436
326
  l = status2lines[status];
437
327
  if (status == "will-be-fixed") l.push("* ".concat((0, _datasets.diffUpstream)(_filename)));else l.push("* ".concat((0, _datasets.masterUrl)(_filename)));
438
328
  _iterator2 = _createForOfIteratorHelper(report["info"]);
439
-
440
329
  try {
441
330
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
442
331
  info = _step2.value;
@@ -447,30 +336,24 @@ var BugsHelper = /*#__PURE__*/function () {
447
336
  } finally {
448
337
  _iterator2.f();
449
338
  }
450
-
451
339
  case 21:
452
340
  _i6++;
453
341
  _context3.next = 10;
454
342
  break;
455
-
456
343
  case 24:
457
344
  for (_i7 = 0, _arr = [["needs-fixing", "The following files must be fixed"], ["already-fixed", "The following files no longer need a fix"], ["will-be-fixed", "The following files have been successfully fixed"]]; _i7 < _arr.length; _i7++) {
458
345
  _arr$_i = _slicedToArray(_arr[_i7], 2), _status = _arr$_i[0], label = _arr$_i[1];
459
346
  lines.push("### ".concat(label));
460
347
  lines = lines.concat(status2lines[_status]);
461
348
  }
462
-
463
349
  output = "".concat(this.options.output, "/").concat(_name, ".md");
464
-
465
350
  _fsExtra["default"].writeFileSync(output, lines.join("\n"), {
466
351
  encoding: "utf8"
467
352
  });
468
-
469
353
  case 27:
470
354
  _i5++;
471
355
  _context3.next = 3;
472
356
  break;
473
-
474
357
  case 30:
475
358
  case "end":
476
359
  return _context3.stop();
@@ -478,11 +361,9 @@ var BugsHelper = /*#__PURE__*/function () {
478
361
  }
479
362
  }, _callee3, this);
480
363
  }));
481
-
482
364
  function store(_x2) {
483
365
  return _store.apply(this, arguments);
484
366
  }
485
-
486
367
  return store;
487
368
  }()
488
369
  }, {
@@ -495,14 +376,11 @@ var BugsHelper = /*#__PURE__*/function () {
495
376
  case 0:
496
377
  _context4.next = 2;
497
378
  return this.bugs.preFix();
498
-
499
379
  case 2:
500
380
  _context4.next = 4;
501
381
  return this.bugs.fix((0, _file_systems.getFiles)([this.options.data]));
502
-
503
382
  case 4:
504
383
  return _context4.abrupt("return", 0);
505
-
506
384
  case 5:
507
385
  case "end":
508
386
  return _context4.stop();
@@ -510,11 +388,9 @@ var BugsHelper = /*#__PURE__*/function () {
510
388
  }
511
389
  }, _callee4, this);
512
390
  }));
513
-
514
391
  function fix() {
515
392
  return _fix.apply(this, arguments);
516
393
  }
517
-
518
394
  return fix;
519
395
  }()
520
396
  }, {
@@ -529,12 +405,9 @@ var BugsHelper = /*#__PURE__*/function () {
529
405
  _context5.next = 4;
530
406
  break;
531
407
  }
532
-
533
408
  return _context5.abrupt("return", this.check());
534
-
535
409
  case 4:
536
410
  return _context5.abrupt("return", this.fix());
537
-
538
411
  case 5:
539
412
  case "end":
540
413
  return _context5.stop();
@@ -542,24 +415,18 @@ var BugsHelper = /*#__PURE__*/function () {
542
415
  }
543
416
  }, _callee5, this);
544
417
  }));
545
-
546
418
  function main() {
547
419
  return _main.apply(this, arguments);
548
420
  }
549
-
550
421
  return main;
551
422
  }()
552
423
  }]);
553
-
554
424
  return BugsHelper;
555
425
  }();
556
-
557
426
  exports.BugsHelper = BugsHelper;
558
-
559
427
  function checkoutFix(_x3) {
560
428
  return _checkoutFix.apply(this, arguments);
561
429
  }
562
-
563
430
  function _checkoutFix() {
564
431
  _checkoutFix = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(options) {
565
432
  var c, v;
@@ -568,14 +435,11 @@ function _checkoutFix() {
568
435
  switch (_context6.prev = _context6.next) {
569
436
  case 0:
570
437
  c = options.commit;
571
-
572
438
  if (!(c == undefined)) {
573
439
  _context6.next = 3;
574
440
  break;
575
441
  }
576
-
577
442
  return _context6.abrupt("return");
578
-
579
443
  case 3:
580
444
  v = options.verbose;
581
445
  git.run(c, "checkout --quiet master", v);
@@ -585,7 +449,6 @@ function _checkoutFix() {
585
449
  git.run(c, "merge --no-ff -m 'Merge upstream' upstream/uid", v);
586
450
  if (/bugfixes/.test(git.run(c, "branch", v))) git.run(c, "branch -D bugfixes", v);
587
451
  git.run(c, "checkout --quiet -b bugfixes", v);
588
-
589
452
  case 11:
590
453
  case "end":
591
454
  return _context6.stop();
@@ -595,11 +458,9 @@ function _checkoutFix() {
595
458
  }));
596
459
  return _checkoutFix.apply(this, arguments);
597
460
  }
598
-
599
461
  function mergeFix(_x4) {
600
462
  return _mergeFix.apply(this, arguments);
601
463
  }
602
-
603
464
  function _mergeFix() {
604
465
  _mergeFix = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(options) {
605
466
  var c, v;
@@ -608,14 +469,11 @@ function _mergeFix() {
608
469
  switch (_context7.prev = _context7.next) {
609
470
  case 0:
610
471
  c = options.commit;
611
-
612
472
  if (!(c == undefined)) {
613
473
  _context7.next = 3;
614
474
  break;
615
475
  }
616
-
617
476
  return _context7.abrupt("return");
618
-
619
477
  case 3:
620
478
  v = options.verbose;
621
479
  git.run(c, "checkout --quiet tmp", v);
@@ -624,7 +482,6 @@ function _mergeFix() {
624
482
  git.run(c, "checkout --quiet master", v);
625
483
  if (!git.test(c, "diff --quiet tmp master", v)) git.run(c, "merge --ff-only tmp", v);
626
484
  git.run(c, "branch -D tmp", v);
627
-
628
485
  case 10:
629
486
  case "end":
630
487
  return _context7.stop();
@@ -634,72 +491,55 @@ function _mergeFix() {
634
491
  }));
635
492
  return _mergeFix.apply(this, arguments);
636
493
  }
637
-
638
494
  function main(_x5) {
639
495
  return _main2.apply(this, arguments);
640
496
  }
641
497
  /* istanbul ignore if */
642
-
643
-
644
498
  function _main2() {
645
499
  _main2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(argv) {
646
500
  var options, directorySchema, _iterator3, _step3, d, helper, status;
647
-
648
501
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
649
502
  while (1) {
650
503
  switch (_context8.prev = _context8.next) {
651
504
  case 0:
652
505
  options = parseArgs(argv);
653
-
654
506
  if (!(options === null)) {
655
507
  _context8.next = 3;
656
508
  break;
657
509
  }
658
-
659
510
  return _context8.abrupt("return", 1);
660
-
661
511
  case 3:
662
512
  directorySchema = [];
663
-
664
513
  if (!options.schema) {
665
514
  _context8.next = 8;
666
515
  break;
667
516
  }
668
-
669
517
  directorySchema = [[options.data, options.schema]];
670
518
  _context8.next = 14;
671
519
  break;
672
-
673
520
  case 8:
674
521
  if (!options.dataset) {
675
522
  _context8.next = 12;
676
523
  break;
677
524
  }
678
-
679
525
  directorySchema = (0, _datasets.datasetDirectorySchema)(options.dataset);
680
526
  _context8.next = 14;
681
527
  break;
682
-
683
528
  case 12:
684
529
  console.error("either --schema or --dataset is required");
685
530
  return _context8.abrupt("return", 1);
686
-
687
531
  case 14:
688
532
  _context8.next = 16;
689
533
  return checkoutFix(options);
690
-
691
534
  case 16:
692
535
  _iterator3 = _createForOfIteratorHelper(directorySchema);
693
536
  _context8.prev = 17;
694
-
695
537
  _iterator3.s();
696
-
697
538
  case 19:
698
539
  if ((_step3 = _iterator3.n()).done) {
699
540
  _context8.next = 42;
700
541
  break;
701
542
  }
702
-
703
543
  d = _step3.value;
704
544
  options.schema = d[1];
705
545
  options.data = d[0];
@@ -709,64 +549,46 @@ function _main2() {
709
549
  helper = new BugsHelper(options);
710
550
  _context8.next = 34;
711
551
  break;
712
-
713
552
  case 29:
714
553
  _context8.prev = 29;
715
554
  _context8.t0 = _context8["catch"](25);
716
-
717
555
  if (_context8.t0 instanceof _file_systems.GetFileNotFoundError) {
718
556
  _context8.next = 33;
719
557
  break;
720
558
  }
721
-
722
559
  throw _context8.t0;
723
-
724
560
  case 33:
725
561
  return _context8.abrupt("continue", 40);
726
-
727
562
  case 34:
728
563
  if (options.verbose) console.log("working on files ".concat(options.data, " with schema ").concat(options.schema));
729
564
  _context8.next = 37;
730
565
  return helper.main();
731
-
732
566
  case 37:
733
567
  status = _context8.sent;
734
-
735
568
  if (!(status != 0)) {
736
569
  _context8.next = 40;
737
570
  break;
738
571
  }
739
-
740
572
  return _context8.abrupt("return", status);
741
-
742
573
  case 40:
743
574
  _context8.next = 19;
744
575
  break;
745
-
746
576
  case 42:
747
577
  _context8.next = 47;
748
578
  break;
749
-
750
579
  case 44:
751
580
  _context8.prev = 44;
752
581
  _context8.t1 = _context8["catch"](17);
753
-
754
582
  _iterator3.e(_context8.t1);
755
-
756
583
  case 47:
757
584
  _context8.prev = 47;
758
-
759
585
  _iterator3.f();
760
-
761
586
  return _context8.finish(47);
762
-
763
587
  case 50:
764
588
  _context8.next = 52;
765
589
  return mergeFix(options);
766
-
767
590
  case 52:
768
591
  return _context8.abrupt("return", 0);
769
-
770
592
  case 53:
771
593
  case "end":
772
594
  return _context8.stop();
@@ -776,11 +598,10 @@ function _main2() {
776
598
  }));
777
599
  return _main2.apply(this, arguments);
778
600
  }
779
-
780
601
  if (process.argv[1].endsWith("bugs_helper.ts")) main(process.argv).then(function (status) {
781
602
  process.exit(status);
782
603
  })["catch"](function (error) {
783
604
  console.error(error);
784
605
  process.exit(1);
785
606
  });
786
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0T3B0aW9uIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJnZXREYXRhc2V0cyIsImdldFNjaGVtYXMiLCJCb29sZWFuIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJkYXRhc2V0IiwidmFsaWREYXRhc2V0IiwiY29uc29sZSIsImVycm9yIiwiaGVscCIsInNjaGVtYSIsImluY2x1ZGVzIiwiY29tbWl0IiwiZnMiLCJleGlzdHNTeW5jIiwiZGVidWciLCJ2ZXJib3NlIiwidXNhZ2UiLCJjb21tYW5kTGluZVVzYWdlIiwid2FybiIsIkJ1Z3NIZWxwZXIiLCJidWdzIiwiU2NoZW1hQnVncyIsImFuYWx5c2lzIiwicHJlQ2hlY2siLCJsb2ciLCJkYXRhIiwiZ2V0RmlsZXMiLCJmaWxlIiwibG9hZCIsImNoZWNrIiwicG9zdENoZWNrIiwic2hvdyIsIm91dHB1dCIsInN0b3JlIiwiT2JqZWN0Iiwia2V5cyIsImZpbGVuYW1lIiwiYnVnIiwicmVzdWx0IiwidW5kZWZpbmVkIiwiam9pbiIsIm5hbWUycmVwb3J0cyIsInJlcG9ydHMiLCJuIiwic3BsaXQiLCJsaW5lcyIsIk51bWJlciIsInN0YXR1czJsaW5lcyIsInJlcG9ydCIsInN0YXR1cyIsImwiLCJwdXNoIiwiZGlmZlVwc3RyZWFtIiwibWFzdGVyVXJsIiwiaW5mbyIsImxhYmVsIiwiY29uY2F0Iiwid3JpdGVGaWxlU3luYyIsImVuY29kaW5nIiwicHJlRml4IiwiZml4IiwiY2hlY2tvdXRGaXgiLCJjIiwidiIsImdpdCIsInJ1biIsInRlc3QiLCJtZXJnZUZpeCIsIm1haW4iLCJkaXJlY3RvcnlTY2hlbWEiLCJkYXRhc2V0RGlyZWN0b3J5U2NoZW1hIiwiZCIsImhlbHBlciIsIkdldEZpbGVOb3RGb3VuZEVycm9yIiwicHJvY2VzcyIsImVuZHNXaXRoIiwidGhlbiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9idWdzX2hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBjb21tYW5kTGluZVVzYWdlIGZyb20gXCJjb21tYW5kLWxpbmUtdXNhZ2VcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMsIEdldEZpbGVOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyBTY2hlbWFCdWdzIH0gZnJvbSBcIi4uLy4uL3NyYy9idWdzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vLi4vc3JjL2dpdFwiXG5pbXBvcnQge1xuICB2YWxpZERhdGFzZXQsXG4gIGdldERhdGFzZXRzLFxuICBnZXRTY2hlbWFzLFxuICBkYXRhc2V0RGlyZWN0b3J5U2NoZW1hLFxuICBkaWZmVXBzdHJlYW0sXG4gIG1hc3RlclVybCxcbn0gZnJvbSBcIi4uLy4uL3NyYy9kYXRhc2V0c1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJwYXRobmFtZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGRhdGFzZXRcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBuYW1lOiBcImRhdGFcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgSFRNTCBjb21wdGVzIHJlbmR1cyBkZSBzZWFuY2VcIixcbiAgICAgIG5hbWU6IFwiY3JcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3RvcnkgdG8gY29tbWl0XCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwib25seSBjb25zaWRlciB0aGlzIGJ1Z1wiLFxuICAgICAgbmFtZTogXCJidWdcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGNoZWNrIG91dHB1dHMgd2lsbCBiZSBzdG9yZWRcIixcbiAgICAgIG5hbWU6IFwib3V0cHV0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogYGRhdGFzZXQgKHBvc3NpYmxlIHZhbHVlcyBtdXN0IGluY2x1ZGUgZXhhY3RseSBvbmUgb2YgJHtnZXREYXRhc2V0cygpfSlgLFxuICAgICAgbmFtZTogXCJkYXRhc2V0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogYHNjaGVtYSAocG9zc2libGUgdmFsdWVzIGFyZSAke2dldFNjaGVtYXMoKX0pYCxcbiAgICAgIG5hbWU6IFwic2NoZW1hXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJkaXJlY3RvcnkgaW4gd2hpY2ggYnVncyBhcmUgZm91bmQgKGRlZmF1bHQgLilcIixcbiAgICAgIG5hbWU6IFwiYnVncy1kaXJcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiZGVidWcgaW5mb3JtYXRpb25cIixcbiAgICAgIG5hbWU6IFwiZGVidWdcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJjaGVja1wiLFxuICAgICAgbmFtZTogXCJjaGVja1wiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImZpeFwiLFxuICAgICAgbmFtZTogXCJmaXhcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlbHBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlByaW50IHRoaXMgdXNhZ2UgZ3VpZGUuXCIsXG4gICAgfSxcbiAgXVxuICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiQ3Jvc3MgY2hlY2sgZGF0YSBjb25zaXN0ZW5jeSBhbmQgZml4IHByb2JsZW1zXCIsXG4gICAgICBjb250ZW50OiBcIlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVhZGVyOiBcIk9wdGlvbnNcIixcbiAgICAgIG9wdGlvbkxpc3Q6IG9wdGlvbnNEZWZpbml0aW9ucyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcblxuICBpZiAob3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgaWYgKCF2YWxpZERhdGFzZXQob3B0aW9ucy5kYXRhc2V0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgLS1kYXRhc2V0ICR7b3B0aW9ucy5kYXRhc2V0fWApXG4gICAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2NoZW1hKSB7XG4gICAgaWYgKCFnZXRTY2hlbWFzKCkuaW5jbHVkZXMob3B0aW9ucy5zY2hlbWEpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAtLXNjaGVtYSAke29wdGlvbnMuc2NoZW1hfWApXG4gICAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG9wdGlvbnMuY29tbWl0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtvcHRpb25zLmNvbW1pdH0gZG9lcyBub3QgZXhpc3RgKVxuICAgICAgb3B0aW9ucy5oZWxwID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLmRlYnVnKSBvcHRpb25zLnZlcmJvc2UgPSB0cnVlXG5cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZXhwb3J0IGNsYXNzIEJ1Z3NIZWxwZXIge1xuICBvcHRpb25zOiBhbnlcbiAgYnVnczogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuYnVncyA9IG5ldyBTY2hlbWFCdWdzKHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIGFzeW5jIGNoZWNrKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgYW5hbHlzaXM6IGFueSA9IHt9XG4gICAgYXdhaXQgdGhpcy5idWdzLnByZUNoZWNrKClcbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIGNvbnNvbGUubG9nKGBjaGVjayAke3RoaXMub3B0aW9ucy5kYXRhfWApXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGdldEZpbGVzKFt0aGlzLm9wdGlvbnMuZGF0YV0pKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gbG9hZChmaWxlKVxuICAgICAgYW5hbHlzaXNbZmlsZV0gPSBhd2FpdCB0aGlzLmJ1Z3MuY2hlY2soY29udGVudCwgZmlsZSlcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5idWdzLnBvc3RDaGVjayhhbmFseXNpcylcbiAgICBhd2FpdCB0aGlzLnNob3coYW5hbHlzaXMpXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRwdXQpIGF3YWl0IHRoaXMuc3RvcmUoYW5hbHlzaXMpXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGFzeW5jIHNob3coYW5hbHlzaXM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgT2JqZWN0LmtleXMoYW5hbHlzaXMpKSB7XG4gICAgICBjb25zdCBidWcgPSBhbmFseXNpc1tmaWxlbmFtZV1cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhidWcpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1Z1tuYW1lXVxuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICBsZXQgbG9nXG4gICAgICAgICAgaWYgKHJlc3VsdFtcInN0YXR1c1wiXSA9PSBcIm5lZWRzLWZpeGluZ1wiKSB7XG4gICAgICAgICAgICBsb2cgPSBjb25zb2xlLmVycm9yXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nID0gY29uc29sZS5sb2dcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxvZyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZyhgJHtuYW1lfSBmaW5kcyAke2ZpbGVuYW1lfSAke3Jlc3VsdFtcInN0YXR1c1wiXX1gKVxuICAgICAgICAgICAgbG9nKHJlc3VsdFtcImluZm9cIl0uam9pbihcIlxcblwiKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9yZShhbmFseXNpczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmFtZTJyZXBvcnRzOiBhbnkgPSB7fVxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgT2JqZWN0LmtleXMoYW5hbHlzaXMpKSB7XG4gICAgICBjb25zdCBidWcgPSBhbmFseXNpc1tmaWxlbmFtZV1cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhidWcpKSB7XG4gICAgICAgIGlmICghKG5hbWUgaW4gbmFtZTJyZXBvcnRzKSkgbmFtZTJyZXBvcnRzW25hbWVdID0ge31cbiAgICAgICAgbmFtZTJyZXBvcnRzW25hbWVdW2ZpbGVuYW1lXSA9IGJ1Z1tuYW1lXVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMobmFtZTJyZXBvcnRzKSkge1xuICAgICAgY29uc3QgcmVwb3J0cyA9IG5hbWUycmVwb3J0c1tuYW1lXVxuICAgICAgY29uc3QgbiA9IG5hbWUuc3BsaXQoXCItXCIpWzFdXG4gICAgICBsZXQgbGluZXM6IGFueSA9IFtcbiAgICAgICAgYCMjIEJ1ZyBbJHtuYW1lfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvdHJpY290ZXVzZXMtYXNzZW1ibGVlLXFhL2lzc3Vlcy8ke051bWJlcihcbiAgICAgICAgICBuLFxuICAgICAgICApfSlgLFxuICAgICAgICBgVGhpcyByZXBvcnQgd2FzIGNyZWF0ZWQgYnkgdGhlICoqY2hlY2sqKiBmdW5jdGlvbiBvZiBbJHtuYW1lfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvdHJpY290ZXVzZXMtYXNzZW1ibGVlLy0vYmxvYi9tYXN0ZXIvc3JjL2J1Z3MvJHtuYW1lfS50cykuYCxcbiAgICAgIF1cbiAgICAgIGNvbnN0IHN0YXR1czJsaW5lczogYW55ID0ge1xuICAgICAgICBcIm5lZWRzLWZpeGluZ1wiOiBbXSxcbiAgICAgICAgXCJ3aWxsLWJlLWZpeGVkXCI6IFtdLFxuICAgICAgICBcImFscmVhZHktZml4ZWRcIjogW10sXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIE9iamVjdC5rZXlzKHJlcG9ydHMpKSB7XG4gICAgICAgIGNvbnN0IHJlcG9ydCA9IHJlcG9ydHNbZmlsZW5hbWVdXG4gICAgICAgIGlmIChyZXBvcnQgPT0gbnVsbCB8fCByZXBvcnRbXCJzdGF0dXNcIl0gPT0gXCJva1wiKSBjb250aW51ZVxuICAgICAgICBpZiAoIShyZXBvcnRbXCJzdGF0dXNcIl0gaW4gc3RhdHVzMmxpbmVzKSlcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGAke2ZpbGVuYW1lfSBzdGF0dXMgJHtyZXBvcnRbXCJzdGF0dXNcIl19IHVua25vd25gKVxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXBvcnRbXCJzdGF0dXNcIl1cbiAgICAgICAgbGV0IGwgPSBzdGF0dXMybGluZXNbc3RhdHVzXVxuICAgICAgICBpZiAoc3RhdHVzID09IFwid2lsbC1iZS1maXhlZFwiKSBsLnB1c2goYCogJHtkaWZmVXBzdHJlYW0oZmlsZW5hbWUpfWApXG4gICAgICAgIGVsc2UgbC5wdXNoKGAqICR7bWFzdGVyVXJsKGZpbGVuYW1lKX1gKVxuICAgICAgICBmb3IgKGNvbnN0IGluZm8gb2YgcmVwb3J0W1wiaW5mb1wiXSkgbC5wdXNoKGAgICogJHtpbmZvfWApXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtzdGF0dXMsIGxhYmVsXSBvZiBbXG4gICAgICAgIFtcIm5lZWRzLWZpeGluZ1wiLCBcIlRoZSBmb2xsb3dpbmcgZmlsZXMgbXVzdCBiZSBmaXhlZFwiXSxcbiAgICAgICAgW1wiYWxyZWFkeS1maXhlZFwiLCBcIlRoZSBmb2xsb3dpbmcgZmlsZXMgbm8gbG9uZ2VyIG5lZWQgYSBmaXhcIl0sXG4gICAgICAgIFtcIndpbGwtYmUtZml4ZWRcIiwgXCJUaGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgZml4ZWRcIl0sXG4gICAgICBdKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCMjIyAke2xhYmVsfWApXG4gICAgICAgIGxpbmVzID0gbGluZXMuY29uY2F0KHN0YXR1czJsaW5lc1tzdGF0dXNdKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3V0cHV0ID0gYCR7dGhpcy5vcHRpb25zLm91dHB1dH0vJHtuYW1lfS5tZGBcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMob3V0cHV0LCBsaW5lcy5qb2luKFwiXFxuXCIpLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZml4KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgYXdhaXQgdGhpcy5idWdzLnByZUZpeCgpXG4gICAgYXdhaXQgdGhpcy5idWdzLmZpeChnZXRGaWxlcyhbdGhpcy5vcHRpb25zLmRhdGFdKSlcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgYXN5bmMgbWFpbigpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2hlY2spIHJldHVybiB0aGlzLmNoZWNrKClcbiAgICBlbHNlIHJldHVybiB0aGlzLmZpeCgpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrb3V0Rml4KG9wdGlvbnM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjID0gb3B0aW9ucy5jb21taXRcbiAgaWYgKGMgPT0gdW5kZWZpbmVkKSByZXR1cm5cbiAgY29uc3QgdiA9IG9wdGlvbnMudmVyYm9zZVxuICBnaXQucnVuKGMsIFwiY2hlY2tvdXQgLS1xdWlldCBtYXN0ZXJcIiwgdilcbiAgaWYgKC90bXAvLnRlc3QoZ2l0LnJ1bihjLCBcImJyYW5jaFwiLCB2KSkpIGdpdC5ydW4oYywgXCJicmFuY2ggLUQgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJjaGVja291dCAtLXF1aWV0IC1iIHRtcCBtYXN0ZXJcIiwgdilcbiAgaWYgKC9NZXJnZSBidWdmaXhlcy8udGVzdChnaXQucnVuKGMsIFwibG9nIC0tb25lbGluZSAtMVwiLCB2KSkpXG4gICAgZ2l0LnJ1bihjLCBcInJldmVydCAtLW1haW5saW5lIDEgLS1uby1lZGl0IEhFQURcIiwgdilcbiAgZ2l0LnJ1bihjLCBcIm1lcmdlIC0tbm8tZmYgLW0gJ01lcmdlIHVwc3RyZWFtJyB1cHN0cmVhbS91aWRcIiwgdilcbiAgaWYgKC9idWdmaXhlcy8udGVzdChnaXQucnVuKGMsIFwiYnJhbmNoXCIsIHYpKSlcbiAgICBnaXQucnVuKGMsIFwiYnJhbmNoIC1EIGJ1Z2ZpeGVzXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJjaGVja291dCAtLXF1aWV0IC1iIGJ1Z2ZpeGVzXCIsIHYpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXJnZUZpeChvcHRpb25zOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IG9wdGlvbnMuY29tbWl0XG4gIGlmIChjID09IHVuZGVmaW5lZCkgcmV0dXJuXG4gIGNvbnN0IHYgPSBvcHRpb25zLnZlcmJvc2VcbiAgZ2l0LnJ1bihjLCBcImNoZWNrb3V0IC0tcXVpZXQgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJtZXJnZSAtLW5vLWZmIC1tICdNZXJnZSBidWdmaXhlcycgYnVnZml4ZXNcIiwgdilcbiAgZ2l0LnJ1bihjLCBcImJyYW5jaCAtRCBidWdmaXhlc1wiLCB2KVxuICBnaXQucnVuKGMsIFwiY2hlY2tvdXQgLS1xdWlldCBtYXN0ZXJcIiwgdilcbiAgaWYgKCFnaXQudGVzdChjLCBcImRpZmYgLS1xdWlldCB0bXAgbWFzdGVyXCIsIHYpKVxuICAgIGdpdC5ydW4oYywgXCJtZXJnZSAtLWZmLW9ubHkgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJicmFuY2ggLUQgdG1wXCIsIHYpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHJldHVybiAxXG4gIGxldCBkaXJlY3RvcnlTY2hlbWEgPSBbXVxuICBpZiAob3B0aW9ucy5zY2hlbWEpIHtcbiAgICBkaXJlY3RvcnlTY2hlbWEgPSBbW29wdGlvbnMuZGF0YSwgb3B0aW9ucy5zY2hlbWFdXVxuICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YXNldCkge1xuICAgIGRpcmVjdG9yeVNjaGVtYSA9IGRhdGFzZXREaXJlY3RvcnlTY2hlbWEob3B0aW9ucy5kYXRhc2V0KVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJlaXRoZXIgLS1zY2hlbWEgb3IgLS1kYXRhc2V0IGlzIHJlcXVpcmVkXCIpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBhd2FpdCBjaGVja291dEZpeChvcHRpb25zKVxuICBmb3IgKGNvbnN0IGQgb2YgZGlyZWN0b3J5U2NoZW1hKSB7XG4gICAgb3B0aW9ucy5zY2hlbWEgPSBkWzFdXG4gICAgb3B0aW9ucy5kYXRhID0gZFswXVxuICAgIGlmIChvcHRpb25zLmRlYnVnKVxuICAgICAgY29uc29sZS5sb2coYHdvcmtpbmcgb24gJHtvcHRpb25zLmRhdGF9IHdpdGggc2NoZW1hICR7b3B0aW9ucy5zY2hlbWF9YClcbiAgICBsZXQgaGVscGVyXG4gICAgdHJ5IHtcbiAgICAgIGhlbHBlciA9IG5ldyBCdWdzSGVscGVyKG9wdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIEdldEZpbGVOb3RGb3VuZEVycm9yKSkge1xuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKVxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGB3b3JraW5nIG9uIGZpbGVzICR7b3B0aW9ucy5kYXRhfSB3aXRoIHNjaGVtYSAke29wdGlvbnMuc2NoZW1hfWAsXG4gICAgICApXG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgaGVscGVyLm1haW4oKVxuICAgIGlmIChzdGF0dXMgIT0gMCkgcmV0dXJuIHN0YXR1c1xuICB9XG4gIGF3YWl0IG1lcmdlRml4KG9wdGlvbnMpXG4gIHJldHVybiAwXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcImJ1Z3NfaGVscGVyLnRzXCIpKVxuICBtYWluKHByb2Nlc3MuYXJndilcbiAgICAudGhlbigoc3RhdHVzKSA9PiB7XG4gICAgICBwcm9jZXNzLmV4aXQoc3RhdHVzKVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OytDQUxBLG9KOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWNBLFNBQVNBLFNBQVQsQ0FBbUJDLElBQW5CLEVBQXdDO0VBQ3RDLElBQU1DLGtCQUFrQixHQUFHLENBQ3pCO0lBQ0VDLFdBQVcsRUFBRSxrREFEZjtJQUVFQyxhQUFhLEVBQUUsSUFGakI7SUFHRUMsSUFBSSxFQUFFLE1BSFI7SUFJRUMsSUFBSSxFQUFFQztFQUpSLENBRHlCLEVBT3pCO0lBQ0VKLFdBQVcsRUFDVCx3RUFGSjtJQUdFRSxJQUFJLEVBQUUsSUFIUjtJQUlFQyxJQUFJLEVBQUVDO0VBSlIsQ0FQeUIsRUFhekI7SUFDRUosV0FBVyxFQUFFLHFDQURmO0lBRUVFLElBQUksRUFBRSxRQUZSO0lBR0VDLElBQUksRUFBRUM7RUFIUixDQWJ5QixFQWtCekI7SUFDRUosV0FBVyxFQUFFLHdCQURmO0lBRUVFLElBQUksRUFBRSxLQUZSO0lBR0VDLElBQUks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
607
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZUFyZ3MiLCJhcmd2Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0T3B0aW9uIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJnZXREYXRhc2V0cyIsImdldFNjaGVtYXMiLCJCb29sZWFuIiwic2VjdGlvbnMiLCJoZWFkZXIiLCJjb250ZW50Iiwib3B0aW9uTGlzdCIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJkYXRhc2V0IiwidmFsaWREYXRhc2V0IiwiY29uc29sZSIsImVycm9yIiwiaGVscCIsInNjaGVtYSIsImluY2x1ZGVzIiwiY29tbWl0IiwiZnMiLCJleGlzdHNTeW5jIiwiZGVidWciLCJ2ZXJib3NlIiwidXNhZ2UiLCJjb21tYW5kTGluZVVzYWdlIiwid2FybiIsIkJ1Z3NIZWxwZXIiLCJidWdzIiwiU2NoZW1hQnVncyIsImFuYWx5c2lzIiwicHJlQ2hlY2siLCJsb2ciLCJkYXRhIiwiZ2V0RmlsZXMiLCJmaWxlIiwibG9hZCIsImNoZWNrIiwicG9zdENoZWNrIiwic2hvdyIsIm91dHB1dCIsInN0b3JlIiwiT2JqZWN0Iiwia2V5cyIsImZpbGVuYW1lIiwiYnVnIiwicmVzdWx0IiwidW5kZWZpbmVkIiwiam9pbiIsIm5hbWUycmVwb3J0cyIsInJlcG9ydHMiLCJuIiwic3BsaXQiLCJsaW5lcyIsIk51bWJlciIsInN0YXR1czJsaW5lcyIsInJlcG9ydCIsInN0YXR1cyIsImwiLCJwdXNoIiwiZGlmZlVwc3RyZWFtIiwibWFzdGVyVXJsIiwiaW5mbyIsImxhYmVsIiwiY29uY2F0Iiwid3JpdGVGaWxlU3luYyIsImVuY29kaW5nIiwicHJlRml4IiwiZml4IiwiY2hlY2tvdXRGaXgiLCJjIiwidiIsImdpdCIsInJ1biIsInRlc3QiLCJtZXJnZUZpeCIsIm1haW4iLCJkaXJlY3RvcnlTY2hlbWEiLCJkYXRhc2V0RGlyZWN0b3J5U2NoZW1hIiwiZCIsImhlbHBlciIsIkdldEZpbGVOb3RGb3VuZEVycm9yIiwicHJvY2VzcyIsImVuZHNXaXRoIiwidGhlbiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9idWdzX2hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBjb21tYW5kTGluZVVzYWdlIGZyb20gXCJjb21tYW5kLWxpbmUtdXNhZ2VcIlxuaW1wb3J0IHsgbG9hZCwgZ2V0RmlsZXMsIEdldEZpbGVOb3RGb3VuZEVycm9yIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyBTY2hlbWFCdWdzIH0gZnJvbSBcIi4uLy4uL3NyYy9idWdzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vLi4vc3JjL2dpdFwiXG5pbXBvcnQge1xuICB2YWxpZERhdGFzZXQsXG4gIGdldERhdGFzZXRzLFxuICBnZXRTY2hlbWFzLFxuICBkYXRhc2V0RGlyZWN0b3J5U2NoZW1hLFxuICBkaWZmVXBzdHJlYW0sXG4gIG1hc3RlclVybCxcbn0gZnJvbSBcIi4uLy4uL3NyYy9kYXRhc2V0c1wiXG5cbmZ1bmN0aW9uIHBhcnNlQXJncyhhcmd2OiBzdHJpbmdbXSk6IGFueSB7XG4gIGNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJwYXRobmFtZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGRhdGFzZXRcIixcbiAgICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgICBuYW1lOiBcImRhdGFcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgSFRNTCBjb21wdGVzIHJlbmR1cyBkZSBzZWFuY2VcIixcbiAgICAgIG5hbWU6IFwiY3JcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3RvcnkgdG8gY29tbWl0XCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwib25seSBjb25zaWRlciB0aGlzIGJ1Z1wiLFxuICAgICAgbmFtZTogXCJidWdcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcInBhdGhuYW1lIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGNoZWNrIG91dHB1dHMgd2lsbCBiZSBzdG9yZWRcIixcbiAgICAgIG5hbWU6IFwib3V0cHV0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogYGRhdGFzZXQgKHBvc3NpYmxlIHZhbHVlcyBtdXN0IGluY2x1ZGUgZXhhY3RseSBvbmUgb2YgJHtnZXREYXRhc2V0cygpfSlgLFxuICAgICAgbmFtZTogXCJkYXRhc2V0XCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogYHNjaGVtYSAocG9zc2libGUgdmFsdWVzIGFyZSAke2dldFNjaGVtYXMoKX0pYCxcbiAgICAgIG5hbWU6IFwic2NoZW1hXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJkaXJlY3RvcnkgaW4gd2hpY2ggYnVncyBhcmUgZm91bmQgKGRlZmF1bHQgLilcIixcbiAgICAgIG5hbWU6IFwiYnVncy1kaXJcIixcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImluY3JlYXNlIHZlcmJvc2l0eVwiLFxuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IFwiZGVidWcgaW5mb3JtYXRpb25cIixcbiAgICAgIG5hbWU6IFwiZGVidWdcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJjaGVja1wiLFxuICAgICAgbmFtZTogXCJjaGVja1wiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcImZpeFwiLFxuICAgICAgbmFtZTogXCJmaXhcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcImhlbHBcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlByaW50IHRoaXMgdXNhZ2UgZ3VpZGUuXCIsXG4gICAgfSxcbiAgXVxuICBjb25zdCBzZWN0aW9ucyA9IFtcbiAgICB7XG4gICAgICBoZWFkZXI6IFwiQ3Jvc3MgY2hlY2sgZGF0YSBjb25zaXN0ZW5jeSBhbmQgZml4IHByb2JsZW1zXCIsXG4gICAgICBjb250ZW50OiBcIlwiLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVhZGVyOiBcIk9wdGlvbnNcIixcbiAgICAgIG9wdGlvbkxpc3Q6IG9wdGlvbnNEZWZpbml0aW9ucyxcbiAgICB9LFxuICBdXG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zLCB7XG4gICAgYXJndjogYXJndixcbiAgfSlcblxuICBpZiAob3B0aW9ucy5kYXRhc2V0KSB7XG4gICAgaWYgKCF2YWxpZERhdGFzZXQob3B0aW9ucy5kYXRhc2V0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgLS1kYXRhc2V0ICR7b3B0aW9ucy5kYXRhc2V0fWApXG4gICAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2NoZW1hKSB7XG4gICAgaWYgKCFnZXRTY2hlbWFzKCkuaW5jbHVkZXMob3B0aW9ucy5zY2hlbWEpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAtLXNjaGVtYSAke29wdGlvbnMuc2NoZW1hfWApXG4gICAgICBvcHRpb25zLmhlbHAgPSB0cnVlXG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG9wdGlvbnMuY29tbWl0KSkge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtvcHRpb25zLmNvbW1pdH0gZG9lcyBub3QgZXhpc3RgKVxuICAgICAgb3B0aW9ucy5oZWxwID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLmRlYnVnKSBvcHRpb25zLnZlcmJvc2UgPSB0cnVlXG5cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuZXhwb3J0IGNsYXNzIEJ1Z3NIZWxwZXIge1xuICBvcHRpb25zOiBhbnlcbiAgYnVnczogYW55XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMuYnVncyA9IG5ldyBTY2hlbWFCdWdzKHRoaXMub3B0aW9ucylcbiAgfVxuXG4gIGFzeW5jIGNoZWNrKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgYW5hbHlzaXM6IGFueSA9IHt9XG4gICAgYXdhaXQgdGhpcy5idWdzLnByZUNoZWNrKClcbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIGNvbnNvbGUubG9nKGBjaGVjayAke3RoaXMub3B0aW9ucy5kYXRhfWApXG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGdldEZpbGVzKFt0aGlzLm9wdGlvbnMuZGF0YV0pKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gbG9hZChmaWxlKVxuICAgICAgYW5hbHlzaXNbZmlsZV0gPSBhd2FpdCB0aGlzLmJ1Z3MuY2hlY2soY29udGVudCwgZmlsZSlcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5idWdzLnBvc3RDaGVjayhhbmFseXNpcylcbiAgICBhd2FpdCB0aGlzLnNob3coYW5hbHlzaXMpXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRwdXQpIGF3YWl0IHRoaXMuc3RvcmUoYW5hbHlzaXMpXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIGFzeW5jIHNob3coYW5hbHlzaXM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgT2JqZWN0LmtleXMoYW5hbHlzaXMpKSB7XG4gICAgICBjb25zdCBidWcgPSBhbmFseXNpc1tmaWxlbmFtZV1cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhidWcpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1Z1tuYW1lXVxuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICBsZXQgbG9nXG4gICAgICAgICAgaWYgKHJlc3VsdFtcInN0YXR1c1wiXSA9PSBcIm5lZWRzLWZpeGluZ1wiKSB7XG4gICAgICAgICAgICBsb2cgPSBjb25zb2xlLmVycm9yXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgbG9nID0gY29uc29sZS5sb2dcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxvZyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZyhgJHtuYW1lfSBmaW5kcyAke2ZpbGVuYW1lfSAke3Jlc3VsdFtcInN0YXR1c1wiXX1gKVxuICAgICAgICAgICAgbG9nKHJlc3VsdFtcImluZm9cIl0uam9pbihcIlxcblwiKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9yZShhbmFseXNpczogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmFtZTJyZXBvcnRzOiBhbnkgPSB7fVxuICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgT2JqZWN0LmtleXMoYW5hbHlzaXMpKSB7XG4gICAgICBjb25zdCBidWcgPSBhbmFseXNpc1tmaWxlbmFtZV1cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhidWcpKSB7XG4gICAgICAgIGlmICghKG5hbWUgaW4gbmFtZTJyZXBvcnRzKSkgbmFtZTJyZXBvcnRzW25hbWVdID0ge31cbiAgICAgICAgbmFtZTJyZXBvcnRzW25hbWVdW2ZpbGVuYW1lXSA9IGJ1Z1tuYW1lXVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMobmFtZTJyZXBvcnRzKSkge1xuICAgICAgY29uc3QgcmVwb3J0cyA9IG5hbWUycmVwb3J0c1tuYW1lXVxuICAgICAgY29uc3QgbiA9IG5hbWUuc3BsaXQoXCItXCIpWzFdXG4gICAgICBsZXQgbGluZXM6IGFueSA9IFtcbiAgICAgICAgYCMjIEJ1ZyBbJHtuYW1lfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvdHJpY290ZXVzZXMtYXNzZW1ibGVlLXFhL2lzc3Vlcy8ke051bWJlcihcbiAgICAgICAgICBuLFxuICAgICAgICApfSlgLFxuICAgICAgICBgVGhpcyByZXBvcnQgd2FzIGNyZWF0ZWQgYnkgdGhlICoqY2hlY2sqKiBmdW5jdGlvbiBvZiBbJHtuYW1lfV0oaHR0cHM6Ly9naXQuZW4tcm9vdC5vcmcvdHJpY290ZXVzZXMvdHJpY290ZXVzZXMtYXNzZW1ibGVlLy0vYmxvYi9tYXN0ZXIvc3JjL2J1Z3MvJHtuYW1lfS50cykuYCxcbiAgICAgIF1cbiAgICAgIGNvbnN0IHN0YXR1czJsaW5lczogYW55ID0ge1xuICAgICAgICBcIm5lZWRzLWZpeGluZ1wiOiBbXSxcbiAgICAgICAgXCJ3aWxsLWJlLWZpeGVkXCI6IFtdLFxuICAgICAgICBcImFscmVhZHktZml4ZWRcIjogW10sXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIE9iamVjdC5rZXlzKHJlcG9ydHMpKSB7XG4gICAgICAgIGNvbnN0IHJlcG9ydCA9IHJlcG9ydHNbZmlsZW5hbWVdXG4gICAgICAgIGlmIChyZXBvcnQgPT0gbnVsbCB8fCByZXBvcnRbXCJzdGF0dXNcIl0gPT0gXCJva1wiKSBjb250aW51ZVxuICAgICAgICBpZiAoIShyZXBvcnRbXCJzdGF0dXNcIl0gaW4gc3RhdHVzMmxpbmVzKSlcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGAke2ZpbGVuYW1lfSBzdGF0dXMgJHtyZXBvcnRbXCJzdGF0dXNcIl19IHVua25vd25gKVxuICAgICAgICBjb25zdCBzdGF0dXMgPSByZXBvcnRbXCJzdGF0dXNcIl1cbiAgICAgICAgbGV0IGwgPSBzdGF0dXMybGluZXNbc3RhdHVzXVxuICAgICAgICBpZiAoc3RhdHVzID09IFwid2lsbC1iZS1maXhlZFwiKSBsLnB1c2goYCogJHtkaWZmVXBzdHJlYW0oZmlsZW5hbWUpfWApXG4gICAgICAgIGVsc2UgbC5wdXNoKGAqICR7bWFzdGVyVXJsKGZpbGVuYW1lKX1gKVxuICAgICAgICBmb3IgKGNvbnN0IGluZm8gb2YgcmVwb3J0W1wiaW5mb1wiXSkgbC5wdXNoKGAgICogJHtpbmZvfWApXG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtzdGF0dXMsIGxhYmVsXSBvZiBbXG4gICAgICAgIFtcIm5lZWRzLWZpeGluZ1wiLCBcIlRoZSBmb2xsb3dpbmcgZmlsZXMgbXVzdCBiZSBmaXhlZFwiXSxcbiAgICAgICAgW1wiYWxyZWFkeS1maXhlZFwiLCBcIlRoZSBmb2xsb3dpbmcgZmlsZXMgbm8gbG9uZ2VyIG5lZWQgYSBmaXhcIl0sXG4gICAgICAgIFtcIndpbGwtYmUtZml4ZWRcIiwgXCJUaGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgZml4ZWRcIl0sXG4gICAgICBdKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYCMjIyAke2xhYmVsfWApXG4gICAgICAgIGxpbmVzID0gbGluZXMuY29uY2F0KHN0YXR1czJsaW5lc1tzdGF0dXNdKVxuICAgICAgfVxuICAgICAgY29uc3Qgb3V0cHV0ID0gYCR7dGhpcy5vcHRpb25zLm91dHB1dH0vJHtuYW1lfS5tZGBcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMob3V0cHV0LCBsaW5lcy5qb2luKFwiXFxuXCIpLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZml4KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgYXdhaXQgdGhpcy5idWdzLnByZUZpeCgpXG4gICAgYXdhaXQgdGhpcy5idWdzLmZpeChnZXRGaWxlcyhbdGhpcy5vcHRpb25zLmRhdGFdKSlcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgYXN5bmMgbWFpbigpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY2hlY2spIHJldHVybiB0aGlzLmNoZWNrKClcbiAgICBlbHNlIHJldHVybiB0aGlzLmZpeCgpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrb3V0Rml4KG9wdGlvbnM6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjID0gb3B0aW9ucy5jb21taXRcbiAgaWYgKGMgPT0gdW5kZWZpbmVkKSByZXR1cm5cbiAgY29uc3QgdiA9IG9wdGlvbnMudmVyYm9zZVxuICBnaXQucnVuKGMsIFwiY2hlY2tvdXQgLS1xdWlldCBtYXN0ZXJcIiwgdilcbiAgaWYgKC90bXAvLnRlc3QoZ2l0LnJ1bihjLCBcImJyYW5jaFwiLCB2KSkpIGdpdC5ydW4oYywgXCJicmFuY2ggLUQgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJjaGVja291dCAtLXF1aWV0IC1iIHRtcCBtYXN0ZXJcIiwgdilcbiAgaWYgKC9NZXJnZSBidWdmaXhlcy8udGVzdChnaXQucnVuKGMsIFwibG9nIC0tb25lbGluZSAtMVwiLCB2KSkpXG4gICAgZ2l0LnJ1bihjLCBcInJldmVydCAtLW1haW5saW5lIDEgLS1uby1lZGl0IEhFQURcIiwgdilcbiAgZ2l0LnJ1bihjLCBcIm1lcmdlIC0tbm8tZmYgLW0gJ01lcmdlIHVwc3RyZWFtJyB1cHN0cmVhbS91aWRcIiwgdilcbiAgaWYgKC9idWdmaXhlcy8udGVzdChnaXQucnVuKGMsIFwiYnJhbmNoXCIsIHYpKSlcbiAgICBnaXQucnVuKGMsIFwiYnJhbmNoIC1EIGJ1Z2ZpeGVzXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJjaGVja291dCAtLXF1aWV0IC1iIGJ1Z2ZpeGVzXCIsIHYpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXJnZUZpeChvcHRpb25zOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYyA9IG9wdGlvbnMuY29tbWl0XG4gIGlmIChjID09IHVuZGVmaW5lZCkgcmV0dXJuXG4gIGNvbnN0IHYgPSBvcHRpb25zLnZlcmJvc2VcbiAgZ2l0LnJ1bihjLCBcImNoZWNrb3V0IC0tcXVpZXQgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJtZXJnZSAtLW5vLWZmIC1tICdNZXJnZSBidWdmaXhlcycgYnVnZml4ZXNcIiwgdilcbiAgZ2l0LnJ1bihjLCBcImJyYW5jaCAtRCBidWdmaXhlc1wiLCB2KVxuICBnaXQucnVuKGMsIFwiY2hlY2tvdXQgLS1xdWlldCBtYXN0ZXJcIiwgdilcbiAgaWYgKCFnaXQudGVzdChjLCBcImRpZmYgLS1xdWlldCB0bXAgbWFzdGVyXCIsIHYpKVxuICAgIGdpdC5ydW4oYywgXCJtZXJnZSAtLWZmLW9ubHkgdG1wXCIsIHYpXG4gIGdpdC5ydW4oYywgXCJicmFuY2ggLUQgdG1wXCIsIHYpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKGFyZ3Y6IGFueSk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoYXJndilcbiAgaWYgKG9wdGlvbnMgPT09IG51bGwpIHJldHVybiAxXG4gIGxldCBkaXJlY3RvcnlTY2hlbWEgPSBbXVxuICBpZiAob3B0aW9ucy5zY2hlbWEpIHtcbiAgICBkaXJlY3RvcnlTY2hlbWEgPSBbW29wdGlvbnMuZGF0YSwgb3B0aW9ucy5zY2hlbWFdXVxuICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YXNldCkge1xuICAgIGRpcmVjdG9yeVNjaGVtYSA9IGRhdGFzZXREaXJlY3RvcnlTY2hlbWEob3B0aW9ucy5kYXRhc2V0KVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJlaXRoZXIgLS1zY2hlbWEgb3IgLS1kYXRhc2V0IGlzIHJlcXVpcmVkXCIpXG4gICAgcmV0dXJuIDFcbiAgfVxuICBhd2FpdCBjaGVja291dEZpeChvcHRpb25zKVxuICBmb3IgKGNvbnN0IGQgb2YgZGlyZWN0b3J5U2NoZW1hKSB7XG4gICAgb3B0aW9ucy5zY2hlbWEgPSBkWzFdXG4gICAgb3B0aW9ucy5kYXRhID0gZFswXVxuICAgIGlmIChvcHRpb25zLmRlYnVnKVxuICAgICAgY29uc29sZS5sb2coYHdvcmtpbmcgb24gJHtvcHRpb25zLmRhdGF9IHdpdGggc2NoZW1hICR7b3B0aW9ucy5zY2hlbWF9YClcbiAgICBsZXQgaGVscGVyXG4gICAgdHJ5IHtcbiAgICAgIGhlbHBlciA9IG5ldyBCdWdzSGVscGVyKG9wdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIEdldEZpbGVOb3RGb3VuZEVycm9yKSkge1xuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKVxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGB3b3JraW5nIG9uIGZpbGVzICR7b3B0aW9ucy5kYXRhfSB3aXRoIHNjaGVtYSAke29wdGlvbnMuc2NoZW1hfWAsXG4gICAgICApXG4gICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgaGVscGVyLm1haW4oKVxuICAgIGlmIChzdGF0dXMgIT0gMCkgcmV0dXJuIHN0YXR1c1xuICB9XG4gIGF3YWl0IG1lcmdlRml4KG9wdGlvbnMpXG4gIHJldHVybiAwXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcImJ1Z3NfaGVscGVyLnRzXCIpKVxuICBtYWluKHByb2Nlc3MuYXJndilcbiAgICAudGhlbigoc3RhdHVzKSA9PiB7XG4gICAgICBwcm9jZXNzLmV4aXQoc3RhdHVzKVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU8yQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLCtDQVozQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBLFNBQVNBLFNBQVMsQ0FBQ0MsSUFBYyxFQUFPO0VBQ3RDLElBQU1DLGtCQUFrQixHQUFHLENBQ3pCO0lBQ0VDLFdBQVcsRUFBRSxrREFBa0Q7SUFDL0RDLGFBQWEsRUFBRSxJQUFJO0lBQ25CQyxJQUFJLEVBQUUsTUFBTTtJQUNaQyxJQUFJLEVBQUVDO0VBQ1IsQ0FBQyxFQUNEO0lBQ0VKLFdBQVcsRUFDVCx3RUFBd0U7SUFDMUVFLElBQUksRUFBRSxJQUFJO0lBQ1ZDLElBQUksRUFBRUM7RUFDUixDQUFDLEVBQ0Q7SUFDRUosV0FBVyxFQUFFLHFDQUFxQztJQUNsREUsSUFBSSxFQUFFLFFBQVE7SUFDZEMsSUFBSSxFQUFFQztFQUNSLENBQUMsRUFDRDtJQUNFSixXQUFXLEVBQUUsd0JBQXdCO0lBQ3JDRSxJQUFJLEVBQUUsS0FBSztJQUNY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