@tricoteuses/assemblee 1.1.12 → 1.2.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 (69) hide show
  1. package/README.md +5 -5
  2. package/lib/bugs/agenda-00011.js +4 -5
  3. package/lib/bugs/agenda-00011.mjs +1 -2
  4. package/lib/bugs.js +3 -1
  5. package/lib/cleaners/actes_legislatifs.js +3 -1
  6. package/lib/cleaners/acteurs.js +3 -1
  7. package/lib/cleaners/amendements.js +3 -1
  8. package/lib/cleaners/documents.js +3 -1
  9. package/lib/cleaners/dossiers_legislatifs.js +3 -1
  10. package/lib/cleaners/reunions.js +2 -1
  11. package/lib/cleaners/scrutins.js +3 -1
  12. package/lib/cleaners/xml.js +3 -1
  13. package/lib/dates.js +1 -1
  14. package/lib/dossiers_legislatifs.d.ts +2 -1
  15. package/lib/dossiers_legislatifs.js +45 -2
  16. package/lib/dossiers_legislatifs.mjs +7 -1
  17. package/lib/file_systems.js +4 -1
  18. package/lib/index.d.ts +2 -2
  19. package/lib/index.js +13 -1
  20. package/lib/index.mjs +3 -3
  21. package/lib/inserters.js +3 -1
  22. package/lib/loaders.js +4 -1
  23. package/lib/parsers/documents.js +3 -1
  24. package/lib/parsers/recherche_amendements.js +4 -5
  25. package/lib/parsers/recherche_amendements.mjs +1 -2
  26. package/lib/raw_types/acteurs_et_organes.js +2 -1
  27. package/lib/raw_types/agendas.js +2 -1
  28. package/lib/raw_types/amendements.d.ts +1 -1
  29. package/lib/raw_types/amendements.js +3 -2
  30. package/lib/raw_types/amendements.mjs +2 -2
  31. package/lib/raw_types/debats.js +2 -1
  32. package/lib/raw_types/dossiers_legislatifs.js +2 -1
  33. package/lib/raw_types/questions.js +2 -1
  34. package/lib/raw_types/scrutins.js +2 -1
  35. package/lib/scripts/bugs_helper.js +3 -1
  36. package/lib/scripts/clean_reorganized_data.js +4 -2
  37. package/lib/scripts/clean_reorganized_data.mjs +2 -2
  38. package/lib/scripts/diff_amendements.js +3 -1
  39. package/lib/scripts/document_dossiers_legislatifs.js +2 -1
  40. package/lib/scripts/merge_scrutins.js +4 -1
  41. package/lib/scripts/parse_textes_lois.js +3 -1
  42. package/lib/scripts/raw_types_from_amendements.js +3 -1
  43. package/lib/scripts/reorganize_data.js +4 -2
  44. package/lib/scripts/reorganize_data.mjs +2 -2
  45. package/lib/scripts/retrieve_deputes_photos.js +4 -3
  46. package/lib/scripts/retrieve_deputes_photos.mjs +1 -2
  47. package/lib/scripts/retrieve_documents.js +342 -521
  48. package/lib/scripts/retrieve_documents.mjs +180 -229
  49. package/lib/scripts/retrieve_open_data.js +4 -4
  50. package/lib/scripts/retrieve_open_data.mjs +2 -3
  51. package/lib/scripts/retrieve_pending_amendments.js +3 -1
  52. package/lib/scripts/retrieve_senateurs_photos.js +5 -4
  53. package/lib/scripts/retrieve_senateurs_photos.mjs +2 -3
  54. package/lib/scripts/retrieve_textes_lois.js +7 -4
  55. package/lib/scripts/retrieve_textes_lois.mjs +5 -2
  56. package/lib/scripts/validate_json.js +3 -1
  57. package/lib/types/acteurs_et_organes.js +2 -1
  58. package/lib/types/agendas.js +2 -1
  59. package/lib/types/amendements.d.ts +1 -1
  60. package/lib/types/amendements.js +3 -2
  61. package/lib/types/amendements.mjs +2 -2
  62. package/lib/types/debats.js +2 -1
  63. package/lib/types/dossiers_legislatifs.js +2 -1
  64. package/lib/types/questions.js +2 -1
  65. package/lib/types/scrutins.js +2 -1
  66. package/lib/urls.d.ts +8 -2
  67. package/lib/urls.js +153 -23
  68. package/lib/urls.mjs +97 -22
  69. package/package.json +3 -5
@@ -1,14 +1,15 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/es.object.define-property.js");
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
+ require("core-js/modules/es.array.slice.js");
4
5
  require("core-js/modules/es.function.name.js");
5
6
  require("core-js/modules/es.array.from.js");
6
- require("core-js/modules/es.string.iterator.js");
7
+ require("core-js/modules/es.regexp.exec.js");
8
+ require("core-js/modules/es.symbol.js");
9
+ require("core-js/modules/es.symbol.description.js");
7
10
  require("core-js/modules/es.symbol.iterator.js");
8
- require("core-js/modules/es.array.iterator.js");
9
- require("core-js/modules/web.dom-collections.iterator.js");
10
11
  require("core-js/modules/es.array.is-array.js");
11
- require("core-js/modules/es.promise.js");
12
+ require("core-js/modules/es.object.define-property.js");
12
13
  require("core-js/modules/es.symbol.async-iterator.js");
13
14
  require("core-js/modules/es.symbol.to-string-tag.js");
14
15
  require("core-js/modules/es.json.to-string-tag.js");
@@ -21,553 +22,373 @@ require("core-js/modules/es.object.set-prototype-of.js");
21
22
  require("core-js/modules/es.array.reverse.js");
22
23
  require("core-js/modules/es.weak-map.js");
23
24
  require("core-js/modules/es.object.get-own-property-descriptor.js");
24
- require("core-js/modules/es.array.concat.js");
25
- require("core-js/modules/es.array.map.js");
26
- require("core-js/modules/es.date.to-string.js");
27
25
  require("core-js/modules/es.object.to-string.js");
28
- require("core-js/modules/es.regexp.to-string.js");
29
- require("core-js/modules/es.array.slice.js");
26
+ require("core-js/modules/es.promise.js");
30
27
  require("core-js/modules/es.array.join.js");
31
- require("core-js/modules/es.regexp.exec.js");
28
+ require("core-js/modules/es.string.iterator.js");
29
+ require("core-js/modules/es.array.iterator.js");
30
+ require("core-js/modules/web.dom-collections.iterator.js");
31
+ require("core-js/modules/es.array.find.js");
32
+ require("core-js/modules/es.array.concat.js");
32
33
  require("core-js/modules/es.string.starts-with.js");
33
- require("core-js/modules/es.array.includes.js");
34
- require("core-js/modules/es.string.includes.js");
35
- require("core-js/modules/es.string.ends-with.js");
36
- require("core-js/modules/es.symbol.to-primitive.js");
37
- require("core-js/modules/es.date.to-primitive.js");
38
- require("core-js/modules/es.symbol.js");
39
- require("core-js/modules/es.symbol.description.js");
40
- require("core-js/modules/es.number.constructor.js");
34
+ require("core-js/modules/es.date.to-string.js");
35
+ require("core-js/modules/es.regexp.to-string.js");
36
+ var _assert = _interopRequireDefault(require("assert"));
37
+ var _child_process = require("child_process");
41
38
  var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
42
- var _commandLineUsage = _interopRequireDefault(require("command-line-usage"));
43
- var git = _interopRequireWildcard(require("../../src/git"));
39
+ var _crypto = require("crypto");
44
40
  var _fsExtra = _interopRequireDefault(require("fs-extra"));
45
41
  var _path = _interopRequireDefault(require("path"));
46
- var _file_systems = require("../file_systems");
42
+ var _dossiers_legislatifs = require("../dossiers_legislatifs");
43
+ var git = _interopRequireWildcard(require("../git"));
44
+ var _loaders = require("../loaders");
47
45
  var _urls = require("../urls");
48
46
  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); }
49
47
  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; }
50
48
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
51
- 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); }
52
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
53
- 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."); }
54
- function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
55
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
56
49
  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 methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, "throw" === methodName && delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method) || "return" !== methodName && (context.method = "throw", context.arg = new TypeError("The iterator does not provide a '" + methodName + "' method")), 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; }
57
- 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); } }
58
- 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); }); }; }
59
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
60
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
61
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
62
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
63
- 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; } } }; }
50
+ 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(_e) { throw _e; }, 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(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
64
51
  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); }
65
52
  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; }
66
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
67
- 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, _toPropertyKey(descriptor.key), descriptor); } }
68
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
69
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
70
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
71
- function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
72
- var fetch = require("node-fetch");
73
- function parseArgs(argv) {
74
- var optionsDefinitions = [{
75
- alias: "c",
76
- help: "commit documents",
77
- name: "commit",
78
- type: Boolean
79
- }, {
80
- help: "dry run",
81
- name: "dry-run",
82
- type: Boolean
83
- }, {
84
- help: "retry failed documents",
85
- name: "retry-failed",
86
- type: Boolean
87
- }, {
88
- help: "retry all documents",
89
- name: "retry",
90
- type: Boolean
91
- }, {
92
- alias: "l",
93
- defaultValue: "16",
94
- name: "legislature",
95
- type: String
96
- }, {
97
- alias: "r",
98
- help: "push commit to given remote",
99
- name: "remote",
100
- type: String
101
- }, {
102
- alias: "s",
103
- help: "don't log anything",
104
- name: "silent",
105
- type: Boolean
106
- }, {
107
- help: "textes dir",
108
- name: "textes",
109
- type: String
110
- }, {
111
- alias: "v",
112
- help: "verbose logs",
113
- name: "verbose",
114
- type: Boolean
115
- }, {
116
- defaultOption: true,
117
- help: "files or globs to documents",
118
- multiple: true,
119
- name: "data",
120
- type: String
121
- }];
122
- var sections = [{
123
- header: "Retrieve documents",
124
- content: "Retrieve documents"
125
- }, {
126
- header: "Options",
127
- optionList: optionsDefinitions
128
- }];
129
- var options = (0, _commandLineArgs["default"])(optionsDefinitions, {
130
- argv: argv
131
- });
132
- if ("help" in options) {
133
- var usage = (0, _commandLineUsage["default"])(sections);
134
- console.warn(usage);
135
- return null;
136
- }
137
- return options;
53
+ 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); } }
54
+ 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); }); }; }
55
+ var optionsDefinitions = [{
56
+ alias: "c",
57
+ help: "commit documents",
58
+ name: "commit",
59
+ type: Boolean
60
+ }, {
61
+ alias: "f",
62
+ help: "retrieve all documents, even already retrieved ones",
63
+ name: "full",
64
+ type: Boolean
65
+ }, {
66
+ alias: "l",
67
+ defaultValue: "16",
68
+ help: 'legislatures to retrieve, "*" for all',
69
+ name: "legislature",
70
+ type: String
71
+ }, {
72
+ alias: "n",
73
+ help: "try to also retrieve documents that were previously not found",
74
+ name: "not-found",
75
+ type: Boolean
76
+ }, {
77
+ alias: "p",
78
+ help: "pull repositories before proceeding",
79
+ name: "pull",
80
+ type: Boolean
81
+ }, {
82
+ alias: "r",
83
+ help: "push commit to given remote",
84
+ multiple: true,
85
+ name: "remote",
86
+ type: String
87
+ }, {
88
+ alias: "s",
89
+ help: "don't log anything",
90
+ name: "silent",
91
+ type: Boolean
92
+ }, {
93
+ alias: "u",
94
+ help: "UID of first Assemblée's document or division to retrieve",
95
+ name: "uid",
96
+ type: String
97
+ }, {
98
+ alias: "v",
99
+ help: "verbose logs",
100
+ name: "verbose",
101
+ type: Boolean
102
+ }, {
103
+ defaultOption: true,
104
+ help: "directory containing Assemblée open data files",
105
+ name: "dataDir",
106
+ type: String
107
+ }];
108
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions);
109
+ function retrieveDocuments() {
110
+ return _retrieveDocuments.apply(this, arguments);
138
111
  }
139
- var Retrieve = /*#__PURE__*/function () {
140
- function Retrieve(options) {
141
- _classCallCheck(this, Retrieve);
142
- _defineProperty(this, "options", void 0);
143
- this.options = options;
144
- }
145
- _createClass(Retrieve, [{
146
- key: "getDivisions",
147
- value: function getDivisions(division) {
148
- var divisions = [division];
149
- if (division.divisions != undefined) {
150
- var _iterator = _createForOfIteratorHelper(division.divisions),
151
- _step;
152
- try {
153
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
154
- var d = _step.value;
155
- divisions = divisions.concat(this.getDivisions(d));
112
+ function _retrieveDocuments() {
113
+ _retrieveDocuments = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
114
+ var dataDir, documentsDir, _iterator, _step, filename, firstUid, skip, _iterator2, _step2, document, _iterator3, _step3, documentOrDivision, documentDir, filenameBySha256, indexPath, index, _iterator4, _step4, _loop, _ret;
115
+ return _regeneratorRuntime().wrap(function _callee$(_context2) {
116
+ while (1) switch (_context2.prev = _context2.next) {
117
+ case 0:
118
+ (0, _assert["default"])(!options.commit || options.uid, 'Options "commit" & "uid" are incompatible');
119
+ dataDir = options.dataDir;
120
+ documentsDir = _path["default"].join(dataDir, "Documents");
121
+ if (options.pull) {
122
+ (0, _child_process.execSync)("git reset --hard origin/master", {
123
+ cwd: documentsDir,
124
+ env: process.env,
125
+ encoding: "utf-8",
126
+ stdio: ["ignore", "ignore", "pipe"]
127
+ });
128
+ (0, _child_process.execSync)("git pull --rebase", {
129
+ cwd: documentsDir,
130
+ env: process.env,
131
+ encoding: "utf-8",
132
+ stdio: ["ignore", "ignore", "pipe"]
133
+ });
156
134
  }
157
- } catch (err) {
158
- _iterator.e(err);
159
- } finally {
135
+ _fsExtra["default"].ensureDirSync(documentsDir);
136
+ if (!(options.full && !options.uid)) {
137
+ _context2.next = 24;
138
+ break;
139
+ }
140
+ _iterator = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(documentsDir));
141
+ _context2.prev = 7;
142
+ _iterator.s();
143
+ case 9:
144
+ if ((_step = _iterator.n()).done) {
145
+ _context2.next = 16;
146
+ break;
147
+ }
148
+ filename = _step.value;
149
+ if (!(filename[0] === ".")) {
150
+ _context2.next = 13;
151
+ break;
152
+ }
153
+ return _context2.abrupt("continue", 14);
154
+ case 13:
155
+ _fsExtra["default"].removeSync(_path["default"].join(documentsDir, filename));
156
+ case 14:
157
+ _context2.next = 9;
158
+ break;
159
+ case 16:
160
+ _context2.next = 21;
161
+ break;
162
+ case 18:
163
+ _context2.prev = 18;
164
+ _context2.t0 = _context2["catch"](7);
165
+ _iterator.e(_context2.t0);
166
+ case 21:
167
+ _context2.prev = 21;
160
168
  _iterator.f();
161
- }
162
- }
163
- return divisions;
164
- }
165
- }, {
166
- key: "getDivisionsOrDocument",
167
- value: function getDivisionsOrDocument(document) {
168
- var _ref,
169
- _this = this;
170
- if (document.divisions != undefined) return (_ref = []).concat.apply(_ref, _toConsumableArray(document.divisions.map(function (d) {
171
- return _this.getDivisions(d);
172
- })));else return [document];
173
- }
174
- }, {
175
- key: "commitAndPush",
176
- value: function () {
177
- var _commitAndPush = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(repositoryDir) {
178
- return _regeneratorRuntime().wrap(function _callee$(_context) {
179
- while (1) switch (_context.prev = _context.next) {
180
- case 0:
181
- if (!(this.options.commit == undefined)) {
182
- _context.next = 2;
183
- break;
184
- }
185
- return _context.abrupt("return");
186
- case 2:
187
- git.commit(repositoryDir, "Nouvelle moisson");
188
- if (!(this.options.remote == undefined)) {
189
- _context.next = 5;
190
- break;
191
- }
192
- return _context.abrupt("return");
193
- case 5:
194
- git.run(repositoryDir, "push ".concat(this.options.remote, " HEAD:master"));
195
- case 6:
196
- case "end":
197
- return _context.stop();
169
+ return _context2.finish(21);
170
+ case 24:
171
+ firstUid = options.uid;
172
+ skip = Boolean(firstUid);
173
+ _iterator2 = _createForOfIteratorHelper((0, _loaders.iterLoadAssembleeDocuments)(dataDir, options.legislature));
174
+ _context2.prev = 27;
175
+ _iterator2.s();
176
+ case 29:
177
+ if ((_step2 = _iterator2.n()).done) {
178
+ _context2.next = 81;
179
+ break;
198
180
  }
199
- }, _callee, this);
200
- }));
201
- function commitAndPush(_x) {
202
- return _commitAndPush.apply(this, arguments);
203
- }
204
- return commitAndPush;
205
- }()
206
- }, {
207
- key: "getUrls",
208
- value: function getUrls(divisionOrDocument, format) {
209
- var ext = format == "html" ? "raw" : "pdf";
210
- var urls = ["http://www.assemblee-nationale.fr/dyn/docs/".concat(divisionOrDocument.uid, ".").concat(ext)];
211
- if (format == "html") {
212
- urls.push((0, _urls.urlFromDocument)(divisionOrDocument, _urls.DocumentUrlFormat.RawHtml));
213
- urls.push((0, _urls.urlFromDocument)(divisionOrDocument, _urls.DocumentUrlFormat.Html));
214
- } else if (format == "pdf") {
215
- urls.push((0, _urls.urlFromDocument)(divisionOrDocument, _urls.DocumentUrlFormat.Pdf));
216
- }
217
- return urls;
218
- }
219
- }, {
220
- key: "needsDownload",
221
- value: function () {
222
- var _needsDownload = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(filePath, uid) {
223
- var isNotEmpty, retryFailed, urlPath, url;
224
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
225
- while (1) switch (_context2.prev = _context2.next) {
226
- case 0:
227
- if (!_fsExtra["default"].existsSync(filePath)) {
228
- _context2.next = 6;
229
- break;
230
- }
231
- isNotEmpty = _fsExtra["default"].statSync(filePath).size > 0;
232
- retryFailed = "retry-failed" in this.options;
233
- if (!(!retryFailed || isNotEmpty)) {
234
- _context2.next = 6;
235
- break;
236
- }
237
- if (this.options.verbose) {
238
- if (isNotEmpty) {
239
- urlPath = "".concat(filePath, ".url");
240
- if (_fsExtra["default"].existsSync(urlPath)) url = _fsExtra["default"].readFileSync(urlPath).toString();else url = "<unknown url>";
241
- console.log("".concat(uid, ": Cached OK ").concat(filePath, " from ").concat(url));
242
- } else {
243
- console.log("".concat(uid, ": Cached FAIL ").concat(filePath));
244
- }
245
- }
246
- return _context2.abrupt("return", false);
247
- case 6:
248
- return _context2.abrupt("return", true);
249
- case 7:
250
- case "end":
251
- return _context2.stop();
181
+ document = _step2.value.document;
182
+ _iterator3 = _createForOfIteratorHelper((0, _dossiers_legislatifs.walkDocumentAndDivisions)(document));
183
+ _context2.prev = 32;
184
+ _iterator3.s();
185
+ case 34:
186
+ if ((_step3 = _iterator3.n()).done) {
187
+ _context2.next = 71;
188
+ break;
252
189
  }
253
- }, _callee2, this);
254
- }));
255
- function needsDownload(_x2, _x3) {
256
- return _needsDownload.apply(this, arguments);
257
- }
258
- return needsDownload;
259
- }()
260
- }, {
261
- key: "get",
262
- value: function () {
263
- var _get = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(url, filePath, format, uid) {
264
- var response, page, status, _Retrieve$sanityCheck, _Retrieve$sanityCheck2;
265
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
266
- while (1) switch (_context3.prev = _context3.next) {
267
- case 0:
268
- if (this.options.verbose) console.log("".concat(uid, ": fetch(").concat(url, ")"));
269
- _context3.next = 3;
270
- return fetch(url);
271
- case 3:
272
- response = _context3.sent;
273
- _context3.next = 6;
274
- return response.buffer();
275
- case 6:
276
- page = _context3.sent;
277
- if (!response.ok) {
278
- status = response.status;
279
- if (response.status !== 404) {
280
- if (this.options.verbose) {
281
- console.error("Error while getting page \"".concat(url, "\" (uid: ").concat(uid, "):\n\nError:\n").concat(JSON.stringify({
190
+ documentOrDivision = _step3.value;
191
+ if (!(documentOrDivision.uid.substring(4, 6) === "SN")) {
192
+ _context2.next = 38;
193
+ break;
194
+ }
195
+ return _context2.abrupt("continue", 69);
196
+ case 38:
197
+ if (!skip) {
198
+ _context2.next = 44;
199
+ break;
200
+ }
201
+ if (!(documentOrDivision.uid === firstUid)) {
202
+ _context2.next = 43;
203
+ break;
204
+ }
205
+ skip = false;
206
+ _context2.next = 44;
207
+ break;
208
+ case 43:
209
+ return _context2.abrupt("continue", 69);
210
+ case 44:
211
+ documentDir = (0, _loaders.pathFromDocumentUid)(documentsDir, documentOrDivision.uid);
212
+ _fsExtra["default"].ensureDirSync(documentDir);
213
+ filenameBySha256 = {};
214
+ indexPath = _path["default"].join(documentDir, "index.json");
215
+ index = _fsExtra["default"].pathExistsSync(indexPath) ? _fsExtra["default"].readJsonSync(indexPath) : {};
216
+ _iterator4 = _createForOfIteratorHelper((0, _urls.iterDocumentOrDivisionUrls)(documentOrDivision));
217
+ _context2.prev = 50;
218
+ _loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
219
+ var _step4$value, format, type, url, fileInfos, filename, response, filePath, arrayBuffer, buffer, sha256, existingFilename;
220
+ return _regeneratorRuntime().wrap(function _loop$(_context) {
221
+ while (1) switch (_context.prev = _context.next) {
222
+ case 0:
223
+ _step4$value = _step4.value, format = _step4$value.format, type = _step4$value.type, url = _step4$value.url;
224
+ if (index[format] === undefined) {
225
+ index[format] = [];
226
+ }
227
+ fileInfos = index[format].find(function (fileInfos) {
228
+ return fileInfos.url === url;
229
+ });
230
+ if (fileInfos === undefined) {
231
+ fileInfos = {};
232
+ index[format].push(fileInfos);
233
+ }
234
+ fileInfos.url = url;
235
+ filename = "".concat(type, ".").concat(format === _urls.DocumentUrlFormat.Pdf ? "pdf" : "html");
236
+ if (!(fileInfos.status === 200 && !options.full)) {
237
+ _context.next = 9;
238
+ break;
239
+ }
240
+ filenameBySha256[fileInfos.sha256] = filename;
241
+ return _context.abrupt("return", "continue");
242
+ case 9:
243
+ if (!(fileInfos.status === 404 && !options["not-found"])) {
244
+ _context.next = 11;
245
+ break;
246
+ }
247
+ return _context.abrupt("return", "continue");
248
+ case 11:
249
+ if (!options.silent) {
250
+ console.log("Retrieving document or division ".concat(documentOrDivision.uid, " at ").concat(url, "\u2026"));
251
+ }
252
+ _context.next = 14;
253
+ return fetch(url);
254
+ case 14:
255
+ response = _context.sent;
256
+ filePath = _path["default"].join(documentDir, filename);
257
+ if (!response.ok) {
258
+ _context.next = 24;
259
+ break;
260
+ }
261
+ _context.next = 19;
262
+ return response.arrayBuffer();
263
+ case 19:
264
+ arrayBuffer = _context.sent;
265
+ buffer = Buffer.from(arrayBuffer);
266
+ if (format === _urls.DocumentUrlFormat.Pdf && !buffer.subarray(0, 4).toString().startsWith("%PDF")) {
267
+ // Instead of a PDF, the received data may be an HTML page with a message like
268
+ // "Document non encore publié".
269
+ if (!options.silent) {
270
+ console.warn(" PDF \"".concat(url, "\" not found."));
271
+ }
272
+ _fsExtra["default"].removeSync(filePath);
273
+ delete fileInfos.filename;
274
+ delete fileInfos.sha256;
275
+ } else {
276
+ sha256 = (0, _crypto.createHash)("sha256").update(buffer).digest("hex");
277
+ existingFilename = filenameBySha256[sha256];
278
+ if (existingFilename === undefined) {
279
+ _fsExtra["default"].createWriteStream(filePath).write(buffer);
280
+ fileInfos.filename = filename;
281
+ filenameBySha256[sha256] = filename;
282
+ } else {
283
+ fileInfos.filename = existingFilename;
284
+ }
285
+ fileInfos.sha256 = sha256;
286
+ }
287
+ _context.next = 28;
288
+ break;
289
+ case 24:
290
+ if (response.status === 404) {
291
+ if (!options.silent) {
292
+ console.warn(" Page \"".concat(url, "\" not found."));
293
+ }
294
+ } else {
295
+ console.error(" Error:\n".concat(JSON.stringify({
282
296
  code: response.status,
283
297
  message: response.statusText
284
298
  }, null, 2)));
285
299
  }
286
- }
287
- _fsExtra["default"].writeFileSync(filePath, "");
288
- } else {
289
- ;
290
- _Retrieve$sanityCheck = Retrieve.sanityCheckFormat(page, format);
291
- _Retrieve$sanityCheck2 = _slicedToArray(_Retrieve$sanityCheck, 2);
292
- page = _Retrieve$sanityCheck2[0];
293
- status = _Retrieve$sanityCheck2[1];
294
- _fsExtra["default"].writeFileSync(filePath, page);
300
+ _fsExtra["default"].removeSync(filePath);
301
+ delete fileInfos.filename;
302
+ delete fileInfos.sha256;
303
+ case 28:
304
+ fileInfos.status = response.status;
305
+ case 29:
306
+ case "end":
307
+ return _context.stop();
295
308
  }
296
- return _context3.abrupt("return", status);
297
- case 9:
298
- case "end":
299
- return _context3.stop();
300
- }
301
- }, _callee3, this);
302
- }));
303
- function get(_x4, _x5, _x6, _x7) {
304
- return _get.apply(this, arguments);
305
- }
306
- return get;
307
- }()
308
- }, {
309
- key: "download",
310
- value: function () {
311
- var _download = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(textesDir, divisionOrDocument, format) {
312
- var uid, filePath, success, info, url, _iterator2, _step2, status, urlPath;
313
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
314
- while (1) switch (_context4.prev = _context4.next) {
315
- case 0:
316
- uid = divisionOrDocument.uid;
317
- filePath = "".concat(textesDir, "/uid/").concat(uid, ".").concat(format);
318
- _context4.next = 4;
319
- return this.needsDownload(filePath, uid);
320
- case 4:
321
- if (_context4.sent) {
322
- _context4.next = 6;
323
- break;
324
- }
325
- return _context4.abrupt("return", 0);
326
- case 6:
327
- if (this.options.verbose) console.log("".concat(uid, ": Checking ").concat(filePath));
328
- success = false;
329
- info = "";
330
- _iterator2 = _createForOfIteratorHelper(this.getUrls(divisionOrDocument, format));
331
- _context4.prev = 10;
332
- _iterator2.s();
333
- case 12:
334
- if ((_step2 = _iterator2.n()).done) {
335
- _context4.next = 29;
336
- break;
337
- }
338
- url = _step2.value;
339
- if (!("dry-run" in this.options)) {
340
- _context4.next = 19;
341
- break;
342
- }
343
- info += " * ".concat(url, "\n");
344
- return _context4.abrupt("continue", 27);
345
- case 19:
346
- info += " * ".concat(url, " ");
347
- case 20:
348
- _context4.next = 22;
349
- return this.get(url, filePath, format, uid);
350
- case 22:
351
- status = _context4.sent;
352
- info += "".concat(status, "\n");
353
- if (!(status == "OK")) {
354
- _context4.next = 27;
355
- break;
356
- }
357
- success = true;
358
- return _context4.abrupt("break", 29);
359
- case 27:
360
- _context4.next = 12;
361
- break;
362
- case 29:
363
- _context4.next = 34;
364
- break;
365
- case 31:
366
- _context4.prev = 31;
367
- _context4.t0 = _context4["catch"](10);
368
- _iterator2.e(_context4.t0);
369
- case 34:
370
- _context4.prev = 34;
371
- _iterator2.f();
372
- return _context4.finish(34);
373
- case 37:
374
- urlPath = "".concat(filePath, ".url");
375
- if (success) {
376
- _fsExtra["default"].writeFileSync(urlPath, url);
377
- } else if (_fsExtra["default"].existsSync(urlPath)) {
378
- _fsExtra["default"].unlinkSync(urlPath);
379
- }
380
- if (!(info != "" && !this.options.silent)) {
381
- _context4.next = 44;
382
- break;
383
- }
384
- console.log("* ".concat(Retrieve.urlFromUid(uid), ": Retrieving ").concat(filePath, "\n").concat(info.slice(0, -1)));
385
- return _context4.abrupt("return", 1);
386
- case 44:
387
- return _context4.abrupt("return", 0);
388
- case 45:
389
- case "end":
390
- return _context4.stop();
309
+ }, _loop);
310
+ });
311
+ _iterator4.s();
312
+ case 53:
313
+ if ((_step4 = _iterator4.n()).done) {
314
+ _context2.next = 60;
315
+ break;
391
316
  }
392
- }, _callee4, this, [[10, 31, 34, 37]]);
393
- }));
394
- function download(_x8, _x9, _x10) {
395
- return _download.apply(this, arguments);
396
- }
397
- return download;
398
- }()
399
- }, {
400
- key: "retrieveDocuments",
401
- value: function () {
402
- var _retrieveDocuments = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() {
403
- var gitDir, textesDir, _iterator3, _step3, filename, document, _iterator4, _step4, divisionOrDocument, status, _i2, _arr2, format;
404
- return _regeneratorRuntime().wrap(function _callee5$(_context5) {
405
- while (1) switch (_context5.prev = _context5.next) {
406
- case 0:
407
- gitDir = "".concat(this.options.textes, "/.git");
408
- if (_fsExtra["default"].existsSync(gitDir)) {
409
- _context5.next = 4;
410
- break;
411
- }
412
- console.error("".concat(gitDir, " is expected to exist but does not"));
413
- return _context5.abrupt("return", 1);
414
- case 4:
415
- textesDir = _path["default"].join(this.options.textes, this.options.legislature);
416
- _fsExtra["default"].ensureDirSync("".concat(textesDir, "/uid"));
417
- _iterator3 = _createForOfIteratorHelper((0, _file_systems.getFiles)(this.options.data));
418
- _context5.prev = 7;
419
- _iterator3.s();
420
- case 9:
421
- if ((_step3 = _iterator3.n()).done) {
422
- _context5.next = 45;
423
- break;
424
- }
425
- filename = _step3.value;
426
- document = (0, _file_systems.load)(filename);
427
- if (!(/^....SN/.test(document.uid) || /^DECL/.test(document.uid))) {
428
- _context5.next = 14;
429
- break;
430
- }
431
- return _context5.abrupt("continue", 43);
432
- case 14:
433
- _iterator4 = _createForOfIteratorHelper(this.getDivisionsOrDocument(document));
434
- _context5.prev = 15;
435
- _iterator4.s();
436
- case 17:
437
- if ((_step4 = _iterator4.n()).done) {
438
- _context5.next = 35;
439
- break;
440
- }
441
- divisionOrDocument = _step4.value;
442
- if (!/-COMPA$/.test(divisionOrDocument.uid)) {
443
- _context5.next = 21;
444
- break;
445
- }
446
- return _context5.abrupt("continue", 33);
447
- case 21:
448
- status = 0;
449
- _i2 = 0, _arr2 = ["html", "pdf"];
450
- case 23:
451
- if (!(_i2 < _arr2.length)) {
452
- _context5.next = 32;
453
- break;
454
- }
455
- format = _arr2[_i2];
456
- _context5.t0 = status;
457
- _context5.next = 28;
458
- return this.download(textesDir, divisionOrDocument, format);
459
- case 28:
460
- status = _context5.t0 |= _context5.sent;
461
- case 29:
462
- _i2++;
463
- _context5.next = 23;
464
- break;
465
- case 32:
466
- if (status && !this.options.silent) console.log("---");
467
- case 33:
468
- _context5.next = 17;
469
- break;
470
- case 35:
471
- _context5.next = 40;
472
- break;
473
- case 37:
474
- _context5.prev = 37;
475
- _context5.t1 = _context5["catch"](15);
476
- _iterator4.e(_context5.t1);
477
- case 40:
478
- _context5.prev = 40;
479
- _iterator4.f();
480
- return _context5.finish(40);
481
- case 43:
482
- _context5.next = 9;
483
- break;
484
- case 45:
485
- _context5.next = 50;
486
- break;
487
- case 47:
488
- _context5.prev = 47;
489
- _context5.t2 = _context5["catch"](7);
490
- _iterator3.e(_context5.t2);
491
- case 50:
492
- _context5.prev = 50;
493
- _iterator3.f();
494
- return _context5.finish(50);
495
- case 53:
496
- if ("dry-run" in this.options) {
497
- _context5.next = 56;
498
- break;
499
- }
500
- _context5.next = 56;
501
- return this.commitAndPush(textesDir);
502
- case 56:
503
- return _context5.abrupt("return", 0);
504
- case 57:
505
- case "end":
506
- return _context5.stop();
317
+ return _context2.delegateYield(_loop(), "t1", 55);
318
+ case 55:
319
+ _ret = _context2.t1;
320
+ if (!(_ret === "continue")) {
321
+ _context2.next = 58;
322
+ break;
507
323
  }
508
- }, _callee5, this, [[7, 47, 50, 53], [15, 37, 40, 43]]);
509
- }));
510
- function retrieveDocuments() {
511
- return _retrieveDocuments.apply(this, arguments);
512
- }
513
- return retrieveDocuments;
514
- }()
515
- }], [{
516
- key: "sanityCheckFormat",
517
- value: function sanityCheckFormat(page, format) {
518
- if (format == "pdf") {
519
- var length = Math.min(page.length, 4);
520
- var head = page.slice(0, length).toString();
521
- if (!head.startsWith("%PDF")) return [Buffer.from(""), "bad pdf ".concat(encodeURIComponent(head), "...")];
522
- } else if (format == "html") {
523
- var _length = Math.min(page.length, 50);
524
- var _head = page.slice(0, _length).toString();
525
- if (!_head.includes("DOCTYPE") && !_head.includes("<?xml")) {
526
- return [Buffer.from(""), "bad html ".concat(encodeURIComponent(_head.slice(0, 4)), "...")];
527
- }
528
- }
529
- return [page, "OK"];
530
- }
531
- }, {
532
- key: "urlFromUid",
533
- value: function urlFromUid(uid) {
534
- var url = "https://git.en-root.org/tricoteuses/data.tricoteuses.fr/Dossiers_Legislatifs_XV/-/tree/master/documents";
535
- return "[".concat(uid, "](").concat(url, "/uid/").concat(uid, ".json)");
536
- }
537
- }]);
538
- return Retrieve;
539
- }();
540
- function main(_x11) {
541
- return _main.apply(this, arguments);
542
- }
543
- /* istanbul ignore if */
544
- function _main() {
545
- _main = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(argv) {
546
- var options, retrieve;
547
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
548
- while (1) switch (_context6.prev = _context6.next) {
549
- case 0:
550
- options = parseArgs(argv);
551
- if (!(options === null)) {
552
- _context6.next = 3;
324
+ return _context2.abrupt("continue", 58);
325
+ case 58:
326
+ _context2.next = 53;
327
+ break;
328
+ case 60:
329
+ _context2.next = 65;
330
+ break;
331
+ case 62:
332
+ _context2.prev = 62;
333
+ _context2.t2 = _context2["catch"](50);
334
+ _iterator4.e(_context2.t2);
335
+ case 65:
336
+ _context2.prev = 65;
337
+ _iterator4.f();
338
+ return _context2.finish(65);
339
+ case 68:
340
+ _fsExtra["default"].writeJsonSync(indexPath, index, {
341
+ encoding: "utf-8",
342
+ spaces: 2
343
+ });
344
+ case 69:
345
+ _context2.next = 34;
346
+ break;
347
+ case 71:
348
+ _context2.next = 76;
349
+ break;
350
+ case 73:
351
+ _context2.prev = 73;
352
+ _context2.t3 = _context2["catch"](32);
353
+ _iterator3.e(_context2.t3);
354
+ case 76:
355
+ _context2.prev = 76;
356
+ _iterator3.f();
357
+ return _context2.finish(76);
358
+ case 79:
359
+ _context2.next = 29;
360
+ break;
361
+ case 81:
362
+ _context2.next = 86;
363
+ break;
364
+ case 83:
365
+ _context2.prev = 83;
366
+ _context2.t4 = _context2["catch"](27);
367
+ _iterator2.e(_context2.t4);
368
+ case 86:
369
+ _context2.prev = 86;
370
+ _iterator2.f();
371
+ return _context2.finish(86);
372
+ case 89:
373
+ if (!options.commit) {
374
+ _context2.next = 91;
553
375
  break;
554
376
  }
555
- return _context6.abrupt("return", 1);
556
- case 3:
557
- retrieve = new Retrieve(options);
558
- return _context6.abrupt("return", retrieve.retrieveDocuments());
559
- case 5:
377
+ return _context2.abrupt("return", git.commitAndPush(documentsDir, "Nouvelle moisson", options.remote));
378
+ case 91:
379
+ return _context2.abrupt("return", 0);
380
+ case 92:
560
381
  case "end":
561
- return _context6.stop();
382
+ return _context2.stop();
562
383
  }
563
- }, _callee6);
384
+ }, _callee, null, [[7, 18, 21, 24], [27, 83, 86, 89], [32, 73, 76, 79], [50, 62, 65, 68]]);
564
385
  }));
565
- return _main.apply(this, arguments);
386
+ return _retrieveDocuments.apply(this, arguments);
566
387
  }
567
- if (process.argv[1].endsWith("retrieve_documents.ts")) main(process.argv).then(function (exitCode) {
568
- process.exit(exitCode);
388
+ retrieveDocuments().then(function (exitCode) {
389
+ return process.exit(exitCode);
569
390
  })["catch"](function (error) {
570
- console.error(error);
391
+ console.log(error);
571
392
  process.exit(1);
572
393
  });
573
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbWFuZExpbmVBcmdzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbWFuZExpbmVVc2FnZSIsImdpdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2ZzRXh0cmEiLCJfcGF0aCIsIl9maWxlX3N5c3RlbXMiLCJfdXJscyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwiX3NsaWNlZFRvQXJyYXkiLCJhcnIiLCJpIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIlR5cGVFcnJvciIsIl9pIiwiX3MiLCJfZSIsIl94IiwiX3IiLCJfYXJyIiwiX24iLCJfZCIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwibGVuZ3RoIiwiZXJyIiwiQXJyYXkiLCJpc0FycmF5IiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsImV4cG9ydHMiLCJPcCIsImhhc093biIsIiRTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJpbm5lckZuIiwib3V0ZXJGbiIsInNlbGYiLCJ0cnlMb2NzTGlzdCIsInByb3RvR2VuZXJhdG9yIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiY3JlYXRlIiwiY29udGV4dCIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJmbiIsImFyZyIsInR5cGUiLCJDb250aW51ZVNlbnRpbmVsIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwibWV0aG9kIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJQcm9taXNlSW1wbCIsImludm9rZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWNvcmQiLCJyZXN1bHQiLCJfX2F3YWl0IiwidGhlbiIsInVud3JhcHBlZCIsImVycm9yIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJzdGF0ZSIsIkVycm9yIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlIiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJtZXRob2ROYW1lIiwidW5kZWZpbmVkIiwiaW5mbyIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwibG9jcyIsImVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsIml0ZXJhYmxlIiwiaXRlcmF0b3JNZXRob2QiLCJpc05hTiIsImRpc3BsYXlOYW1lIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImdlbkZ1biIsImN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJpdGVyIiwia2V5cyIsInZhbCIsIm9iamVjdCIsInJldmVyc2UiLCJwb3AiLCJza2lwVGVtcFJlc2V0IiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJvb3RSZWNvcmQiLCJydmFsIiwiZXhjZXB0aW9uIiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiZmluYWxseUVudHJ5IiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwiX25leHQiLCJfdGhyb3ciLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9hcnJheVdpdGhvdXRIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJmcm9tIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm8iLCJhbGxvd0FycmF5TGlrZSIsIml0IiwiRiIsInMiLCJuIiwiZSIsIl9lMiIsImYiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwic3RlcCIsIl9lMyIsIm1pbkxlbiIsInRvU3RyaW5nIiwidGVzdCIsImxlbiIsImFycjIiLCJfY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiX2RlZmluZVByb3BlcnRpZXMiLCJ0YXJnZXQiLCJwcm9wcyIsImRlc2NyaXB0b3IiLCJfdG9Qcm9wZXJ0eUtleSIsIl9jcmVhdGVDbGFzcyIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1ByaW1pdGl2ZSIsIlN0cmluZyIsImlucHV0IiwiaGludCIsInByaW0iLCJ0b1ByaW1pdGl2ZSIsInJlcyIsIk51bWJlciIsImZldGNoIiwicGFyc2VBcmdzIiwiYXJndiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJkZWZhdWx0T3B0aW9uIiwibXVsdGlwbGUiLCJzZWN0aW9ucyIsImhlYWRlciIsImNvbnRlbnQiLCJvcHRpb25MaXN0Iiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsInVzYWdlIiwiY29tbWFuZExpbmVVc2FnZSIsImNvbnNvbGUiLCJ3YXJuIiwiUmV0cmlldmUiLCJnZXREaXZpc2lvbnMiLCJkaXZpc2lvbiIsImRpdmlzaW9ucyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZCIsImNvbmNhdCIsImdldERpdmlzaW9uc09yRG9jdW1lbnQiLCJkb2N1bWVudCIsIl9yZWYiLCJfdGhpcyIsIm1hcCIsIl9jb21taXRBbmRQdXNoIiwiX2NhbGxlZSIsInJlcG9zaXRvcnlEaXIiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiY29tbWl0IiwicmVtb3RlIiwicnVuIiwiY29tbWl0QW5kUHVzaCIsImdldFVybHMiLCJkaXZpc2lvbk9yRG9jdW1lbnQiLCJmb3JtYXQiLCJleHQiLCJ1cmxzIiwidWlkIiwidXJsRnJvbURvY3VtZW50IiwiRG9jdW1lbnRVcmxGb3JtYXQiLCJSYXdIdG1sIiwiSHRtbCIsIlBkZiIsIl9uZWVkc0Rvd25sb2FkIiwiX2NhbGxlZTIiLCJmaWxlUGF0aCIsImlzTm90RW1wdHkiLCJyZXRyeUZhaWxlZCIsInVybFBhdGgiLCJ1cmwiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJmcyIsImV4aXN0c1N5bmMiLCJzdGF0U3luYyIsInNpemUiLCJ2ZXJib3NlIiwicmVhZEZpbGVTeW5jIiwibG9nIiwibmVlZHNEb3dubG9hZCIsIl94MiIsIl94MyIsIl9nZXQiLCJfY2FsbGVlMyIsInJlc3BvbnNlIiwicGFnZSIsInN0YXR1cyIsIl9SZXRyaWV2ZSRzYW5pdHlDaGVjayIsIl9SZXRyaWV2ZSRzYW5pdHlDaGVjazIiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJidWZmZXIiLCJvayIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb2RlIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJ3cml0ZUZpbGVTeW5jIiwic2FuaXR5Q2hlY2tGb3JtYXQiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfZG93bmxvYWQiLCJfY2FsbGVlNCIsInRleHRlc0RpciIsInN1Y2Nlc3MiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwidDAiLCJ1bmxpbmtTeW5jIiwic2lsZW50IiwidXJsRnJvbVVpZCIsImRvd25sb2FkIiwiX3g4IiwiX3g5IiwiX3gxMCIsIl9yZXRyaWV2ZURvY3VtZW50cyIsIl9jYWxsZWU1IiwiZ2l0RGlyIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsImZpbGVuYW1lIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsIl9pMiIsIl9hcnIyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwidGV4dGVzIiwicGF0aCIsImpvaW4iLCJsZWdpc2xhdHVyZSIsImVuc3VyZURpclN5bmMiLCJnZXRGaWxlcyIsImRhdGEiLCJsb2FkIiwidDEiLCJ0MiIsInJldHJpZXZlRG9jdW1lbnRzIiwiTWF0aCIsIm1pbiIsImhlYWQiLCJzdGFydHNXaXRoIiwiQnVmZmVyIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5jbHVkZXMiLCJtYWluIiwiX3gxMSIsIl9tYWluIiwiX2NhbGxlZTYiLCJyZXRyaWV2ZSIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsInByb2Nlc3MiLCJlbmRzV2l0aCIsImV4aXRDb2RlIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3JldHJpZXZlX2RvY3VtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgY29tbWFuZExpbmVVc2FnZSBmcm9tIFwiY29tbWFuZC1saW5lLXVzYWdlXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vLi4vc3JjL2dpdFwiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmxldCBmZXRjaCA9IHJlcXVpcmUoXCJub2RlLWZldGNoXCIpXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGxvYWQsIGdldEZpbGVzIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQgeyBEb2N1bWVudFVybEZvcm1hdCwgdXJsRnJvbURvY3VtZW50IH0gZnJvbSBcIi4uL3VybHNcIlxuXG5mdW5jdGlvbiBwYXJzZUFyZ3MoYXJndjogc3RyaW5nW10pOiBhbnkge1xuICBjb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gICAge1xuICAgICAgYWxpYXM6IFwiY1wiLFxuICAgICAgaGVscDogXCJjb21taXQgZG9jdW1lbnRzXCIsXG4gICAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlbHA6IFwiZHJ5IHJ1blwiLFxuICAgICAgbmFtZTogXCJkcnktcnVuXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgaGVscDogXCJyZXRyeSBmYWlsZWQgZG9jdW1lbnRzXCIsXG4gICAgICBuYW1lOiBcInJldHJ5LWZhaWxlZFwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlbHA6IFwicmV0cnkgYWxsIGRvY3VtZW50c1wiLFxuICAgICAgbmFtZTogXCJyZXRyeVwiLFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICB9LFxuICAgIHtcbiAgICAgIGFsaWFzOiBcImxcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogXCIxNlwiLFxuICAgICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gICAge1xuICAgICAgYWxpYXM6IFwiclwiLFxuICAgICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJzXCIsXG4gICAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgfSxcbiAgICB7XG4gICAgICBoZWxwOiBcInRleHRlcyBkaXJcIixcbiAgICAgIG5hbWU6IFwidGV4dGVzXCIsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSxcbiAgICB7XG4gICAgICBhbGlhczogXCJ2XCIsXG4gICAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgIH0sXG4gICAge1xuICAgICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICAgIGhlbHA6IFwiZmlsZXMgb3IgZ2xvYnMgdG8gZG9jdW1lbnRzXCIsXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgIG5hbWU6IFwiZGF0YVwiLFxuICAgICAgdHlwZTogU3RyaW5nLFxuICAgIH0sXG4gIF1cbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAge1xuICAgICAgaGVhZGVyOiBcIlJldHJpZXZlIGRvY3VtZW50c1wiLFxuICAgICAgY29udGVudDogXCJSZXRyaWV2ZSBkb2N1bWVudHNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIGhlYWRlcjogXCJPcHRpb25zXCIsXG4gICAgICBvcHRpb25MaXN0OiBvcHRpb25zRGVmaW5pdGlvbnMsXG4gICAgfSxcbiAgXVxuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucywge1xuICAgIGFyZ3Y6IGFyZ3YsXG4gIH0pXG5cbiAgaWYgKFwiaGVscFwiIGluIG9wdGlvbnMpIHtcbiAgICBjb25zdCB1c2FnZSA9IGNvbW1hbmRMaW5lVXNhZ2Uoc2VjdGlvbnMpXG4gICAgY29uc29sZS53YXJuKHVzYWdlKVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNcbn1cblxuY2xhc3MgUmV0cmlldmUge1xuICBvcHRpb25zOiBhbnlcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBhbnkpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gIH1cblxuICBnZXREaXZpc2lvbnMoZGl2aXNpb246IGFueSkge1xuICAgIGxldCBkaXZpc2lvbnMgPSBbZGl2aXNpb25dXG4gICAgaWYgKGRpdmlzaW9uLmRpdmlzaW9ucyAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZCBvZiBkaXZpc2lvbi5kaXZpc2lvbnMpXG4gICAgICAgIGRpdmlzaW9ucyA9IGRpdmlzaW9ucy5jb25jYXQodGhpcy5nZXREaXZpc2lvbnMoZCkpXG4gICAgfVxuICAgIHJldHVybiBkaXZpc2lvbnNcbiAgfVxuXG4gIGdldERpdmlzaW9uc09yRG9jdW1lbnQoZG9jdW1lbnQ6IGFueSkge1xuICAgIGlmIChkb2N1bWVudC5kaXZpc2lvbnMgIT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIFtdLmNvbmNhdChcbiAgICAgICAgLi4uZG9jdW1lbnQuZGl2aXNpb25zLm1hcCgoZDogYW55KSA9PiB0aGlzLmdldERpdmlzaW9ucyhkKSksXG4gICAgICApXG4gICAgZWxzZSByZXR1cm4gW2RvY3VtZW50XVxuICB9XG5cbiAgYXN5bmMgY29tbWl0QW5kUHVzaChyZXBvc2l0b3J5RGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbW1pdCA9PSB1bmRlZmluZWQpIHJldHVyblxuICAgIGdpdC5jb21taXQocmVwb3NpdG9yeURpciwgXCJOb3V2ZWxsZSBtb2lzc29uXCIpXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbW90ZSA9PSB1bmRlZmluZWQpIHJldHVyblxuICAgIGdpdC5ydW4ocmVwb3NpdG9yeURpciwgYHB1c2ggJHt0aGlzLm9wdGlvbnMucmVtb3RlfSBIRUFEOm1hc3RlcmApXG4gIH1cblxuICBnZXRVcmxzKGRpdmlzaW9uT3JEb2N1bWVudDogYW55LCBmb3JtYXQ6IHN0cmluZykge1xuICAgIGNvbnN0IGV4dCA9IGZvcm1hdCA9PSBcImh0bWxcIiA/IFwicmF3XCIgOiBcInBkZlwiXG4gICAgbGV0IHVybHM6IGFueSA9IFtcbiAgICAgIGBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvZHluL2RvY3MvJHtkaXZpc2lvbk9yRG9jdW1lbnQudWlkfS4ke2V4dH1gLFxuICAgIF1cbiAgICBpZiAoZm9ybWF0ID09IFwiaHRtbFwiKSB7XG4gICAgICB1cmxzLnB1c2godXJsRnJvbURvY3VtZW50KGRpdmlzaW9uT3JEb2N1bWVudCwgRG9jdW1lbnRVcmxGb3JtYXQuUmF3SHRtbCkpXG4gICAgICB1cmxzLnB1c2godXJsRnJvbURvY3VtZW50KGRpdmlzaW9uT3JEb2N1bWVudCwgRG9jdW1lbnRVcmxGb3JtYXQuSHRtbCkpXG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gXCJwZGZcIikge1xuICAgICAgdXJscy5wdXNoKHVybEZyb21Eb2N1bWVudChkaXZpc2lvbk9yRG9jdW1lbnQsIERvY3VtZW50VXJsRm9ybWF0LlBkZikpXG4gICAgfVxuICAgIHJldHVybiB1cmxzXG4gIH1cblxuICBzdGF0aWMgc2FuaXR5Q2hlY2tGb3JtYXQocGFnZTogQnVmZmVyLCBmb3JtYXQ6IHN0cmluZyk6IFtCdWZmZXIsIHN0cmluZ10ge1xuICAgIGlmIChmb3JtYXQgPT0gXCJwZGZcIikge1xuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4ocGFnZS5sZW5ndGgsIDQpXG4gICAgICBjb25zdCBoZWFkID0gcGFnZS5zbGljZSgwLCBsZW5ndGgpLnRvU3RyaW5nKClcbiAgICAgIGlmICghaGVhZC5zdGFydHNXaXRoKFwiJVBERlwiKSlcbiAgICAgICAgcmV0dXJuIFtCdWZmZXIuZnJvbShcIlwiKSwgYGJhZCBwZGYgJHtlbmNvZGVVUklDb21wb25lbnQoaGVhZCl9Li4uYF1cbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PSBcImh0bWxcIikge1xuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4ocGFnZS5sZW5ndGgsIDUwKVxuICAgICAgY29uc3QgaGVhZCA9IHBhZ2Uuc2xpY2UoMCwgbGVuZ3RoKS50b1N0cmluZygpXG4gICAgICBpZiAoIWhlYWQuaW5jbHVkZXMoXCJET0NUWVBFXCIpICYmICFoZWFkLmluY2x1ZGVzKFwiPD94bWxcIikpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBCdWZmZXIuZnJvbShcIlwiKSxcbiAgICAgICAgICBgYmFkIGh0bWwgJHtlbmNvZGVVUklDb21wb25lbnQoaGVhZC5zbGljZSgwLCA0KSl9Li4uYCxcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3BhZ2UsIFwiT0tcIl1cbiAgfVxuXG4gIGFzeW5jIG5lZWRzRG93bmxvYWQoZmlsZVBhdGg6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHtcbiAgICAgIGNvbnN0IGlzTm90RW1wdHkgPSBmcy5zdGF0U3luYyhmaWxlUGF0aCkuc2l6ZSA+IDBcbiAgICAgIGNvbnN0IHJldHJ5RmFpbGVkID0gXCJyZXRyeS1mYWlsZWRcIiBpbiB0aGlzLm9wdGlvbnNcbiAgICAgIGlmICghcmV0cnlGYWlsZWQgfHwgaXNOb3RFbXB0eSkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBpZiAoaXNOb3RFbXB0eSkge1xuICAgICAgICAgICAgY29uc3QgdXJsUGF0aCA9IGAke2ZpbGVQYXRofS51cmxgXG4gICAgICAgICAgICBsZXQgdXJsXG4gICAgICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyh1cmxQYXRoKSlcbiAgICAgICAgICAgICAgdXJsID0gZnMucmVhZEZpbGVTeW5jKHVybFBhdGgpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIGVsc2UgdXJsID0gXCI8dW5rbm93biB1cmw+XCJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3VpZH06IENhY2hlZCBPSyAke2ZpbGVQYXRofSBmcm9tICR7dXJsfWApXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3VpZH06IENhY2hlZCBGQUlMICR7ZmlsZVBhdGh9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBhc3luYyBnZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZmlsZVBhdGg6IHN0cmluZyxcbiAgICBmb3JtYXQ6IHN0cmluZyxcbiAgICB1aWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIGNvbnNvbGUubG9nKGAke3VpZH06IGZldGNoKCR7dXJsfSlgKVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKVxuICAgIGxldCBwYWdlOiBhbnkgPSBhd2FpdCByZXNwb25zZS5idWZmZXIoKVxuICAgIGxldCBzdGF0dXNcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXNcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDQwNCkge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEVycm9yIHdoaWxlIGdldHRpbmcgcGFnZSBcIiR7dXJsfVwiICh1aWQ6ICR7dWlkfSk6XFxuXFxuRXJyb3I6XFxuJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgeyBjb2RlOiByZXNwb25zZS5zdGF0dXMsIG1lc3NhZ2U6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSxcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIFwiXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIDtbcGFnZSwgc3RhdHVzXSA9IFJldHJpZXZlLnNhbml0eUNoZWNrRm9ybWF0KHBhZ2UsIGZvcm1hdClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVBhdGgsIHBhZ2UpXG4gICAgfVxuICAgIHJldHVybiBzdGF0dXNcbiAgfVxuXG4gIHN0YXRpYyB1cmxGcm9tVWlkKHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB1cmwgPVxuICAgICAgXCJodHRwczovL2dpdC5lbi1yb290Lm9yZy90cmljb3RldXNlcy9kYXRhLnRyaWNvdGV1c2VzLmZyL0Rvc3NpZXJzX0xlZ2lzbGF0aWZzX1hWLy0vdHJlZS9tYXN0ZXIvZG9jdW1lbnRzXCJcbiAgICByZXR1cm4gYFske3VpZH1dKCR7dXJsfS91aWQvJHt1aWR9Lmpzb24pYFxuICB9XG5cbiAgYXN5bmMgZG93bmxvYWQoXG4gICAgdGV4dGVzRGlyOiBzdHJpbmcsXG4gICAgZGl2aXNpb25PckRvY3VtZW50OiBhbnksXG4gICAgZm9ybWF0OiBzdHJpbmcsXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdWlkID0gZGl2aXNpb25PckRvY3VtZW50LnVpZFxuICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7dGV4dGVzRGlyfS91aWQvJHt1aWR9LiR7Zm9ybWF0fWBcbiAgICBpZiAoIShhd2FpdCB0aGlzLm5lZWRzRG93bmxvYWQoZmlsZVBhdGgsIHVpZCkpKSByZXR1cm4gMFxuICAgIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkgY29uc29sZS5sb2coYCR7dWlkfTogQ2hlY2tpbmcgJHtmaWxlUGF0aH1gKVxuICAgIGxldCBzdWNjZXNzID0gZmFsc2VcbiAgICBsZXQgaW5mbyA9IFwiXCJcbiAgICBsZXQgdXJsXG5cbiAgICBmb3IgKHVybCBvZiB0aGlzLmdldFVybHMoZGl2aXNpb25PckRvY3VtZW50LCBmb3JtYXQpKSB7XG4gICAgICBpZiAoXCJkcnktcnVuXCIgaW4gdGhpcy5vcHRpb25zKSB7XG4gICAgICAgIGluZm8gKz0gYCAgKiAke3VybH1cXG5gXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvICs9IGAgICogJHt1cmx9IGBcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5nZXQodXJsLCBmaWxlUGF0aCwgZm9ybWF0LCB1aWQpXG5cbiAgICAgIGluZm8gKz0gYCR7c3RhdHVzfVxcbmBcbiAgICAgIGlmIChzdGF0dXMgPT0gXCJPS1wiKSB7XG4gICAgICAgIHN1Y2Nlc3MgPSB0cnVlXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHVybFBhdGggPSBgJHtmaWxlUGF0aH0udXJsYFxuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHVybFBhdGgsIHVybClcbiAgICB9IGVsc2UgaWYgKGZzLmV4aXN0c1N5bmModXJsUGF0aCkpIHtcbiAgICAgIGZzLnVubGlua1N5bmModXJsUGF0aClcbiAgICB9XG4gICAgaWYgKGluZm8gIT0gXCJcIiAmJiAhdGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGAqICR7UmV0cmlldmUudXJsRnJvbVVpZCh1aWQpfTogUmV0cmlldmluZyAke2ZpbGVQYXRofVxcbiR7aW5mby5zbGljZShcbiAgICAgICAgICAwLFxuICAgICAgICAgIC0xLFxuICAgICAgICApfWAsXG4gICAgICApXG4gICAgICByZXR1cm4gMVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMFxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJldHJpZXZlRG9jdW1lbnRzKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgZ2l0RGlyID0gYCR7dGhpcy5vcHRpb25zLnRleHRlc30vLmdpdGBcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZ2l0RGlyKSkge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtnaXREaXJ9IGlzIGV4cGVjdGVkIHRvIGV4aXN0IGJ1dCBkb2VzIG5vdGApXG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGNvbnN0IHRleHRlc0RpciA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMudGV4dGVzLCB0aGlzLm9wdGlvbnMubGVnaXNsYXR1cmUpXG4gICAgZnMuZW5zdXJlRGlyU3luYyhgJHt0ZXh0ZXNEaXJ9L3VpZGApXG5cbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGdldEZpbGVzKHRoaXMub3B0aW9ucy5kYXRhKSkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBsb2FkKGZpbGVuYW1lKVxuICAgICAgaWYgKC9eLi4uLlNOLy50ZXN0KGRvY3VtZW50LnVpZCkgfHwgL15ERUNMLy50ZXN0KGRvY3VtZW50LnVpZCkpIGNvbnRpbnVlXG4gICAgICBmb3IgKGNvbnN0IGRpdmlzaW9uT3JEb2N1bWVudCBvZiB0aGlzLmdldERpdmlzaW9uc09yRG9jdW1lbnQoZG9jdW1lbnQpKSB7XG4gICAgICAgIGlmICgvLUNPTVBBJC8udGVzdChkaXZpc2lvbk9yRG9jdW1lbnQudWlkKSkgY29udGludWVcbiAgICAgICAgbGV0IHN0YXR1cyA9IDBcbiAgICAgICAgZm9yIChjb25zdCBmb3JtYXQgb2YgW1wiaHRtbFwiLCBcInBkZlwiXSkge1xuICAgICAgICAgIHN0YXR1cyB8PSBhd2FpdCB0aGlzLmRvd25sb2FkKHRleHRlc0RpciwgZGl2aXNpb25PckRvY3VtZW50LCBmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyAmJiAhdGhpcy5vcHRpb25zLnNpbGVudCkgY29uc29sZS5sb2coXCItLS1cIilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShcImRyeS1ydW5cIiBpbiB0aGlzLm9wdGlvbnMpKSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbW1pdEFuZFB1c2godGV4dGVzRGlyKVxuICAgIH1cblxuICAgIHJldHVybiAwXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbihhcmd2OiBhbnkpOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBvcHRpb25zID0gcGFyc2VBcmdzKGFyZ3YpXG4gIGlmIChvcHRpb25zID09PSBudWxsKSByZXR1cm4gMVxuICBjb25zdCByZXRyaWV2ZSA9IG5ldyBSZXRyaWV2ZShvcHRpb25zKVxuICByZXR1cm4gcmV0cmlldmUucmV0cmlldmVEb2N1bWVudHMoKVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZXRyaWV2ZV9kb2N1bWVudHMudHNcIikpXG4gIG1haW4ocHJvY2Vzcy5hcmd2KVxuICAgIC50aGVuKChleGl0Q29kZSkgPT4ge1xuICAgICAgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKVxuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIHByb2Nlc3MuZXhpdCgxKVxuICAgIH0pXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxnQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEdBQUEsR0FBQUMsdUJBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFLLEtBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FB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
394
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfY3J5cHRvIiwiX2ZzRXh0cmEiLCJfcGF0aCIsIl9kb3NzaWVyc19sZWdpc2xhdGlmcyIsImdpdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2xvYWRlcnMiLCJfdXJscyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZXhwb3J0cyIsIk9wIiwiaGFzT3duIiwidmFsdWUiLCIkU3ltYm9sIiwiU3ltYm9sIiwiaXRlcmF0b3JTeW1ib2wiLCJpdGVyYXRvciIsImFzeW5jSXRlcmF0b3JTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwidG9TdHJpbmdUYWdTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImVyciIsIndyYXAiLCJpbm5lckZuIiwib3V0ZXJGbiIsInNlbGYiLCJ0cnlMb2NzTGlzdCIsInByb3RvR2VuZXJhdG9yIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiY3JlYXRlIiwiY29udGV4dCIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJmbiIsImFyZyIsInR5cGUiLCJDb250aW51ZVNlbnRpbmVsIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwibWV0aG9kIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJQcm9taXNlSW1wbCIsImludm9rZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWNvcmQiLCJyZXN1bHQiLCJfX2F3YWl0IiwidGhlbiIsInVud3JhcHBlZCIsImVycm9yIiwicHJldmlvdXNQcm9taXNlIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJzdGF0ZSIsIkVycm9yIiwiZG9uZVJlc3VsdCIsImRlbGVnYXRlIiwiZGVsZWdhdGVSZXN1bHQiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJkb25lIiwibWV0aG9kTmFtZSIsInVuZGVmaW5lZCIsIlR5cGVFcnJvciIsImluZm8iLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJsb2NzIiwiZW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsIml0ZXJhYmxlIiwiaXRlcmF0b3JNZXRob2QiLCJpc05hTiIsImxlbmd0aCIsImkiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJnZW5GdW4iLCJjdG9yIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJpdGVyIiwia2V5cyIsInZhbCIsIm9iamVjdCIsInJldmVyc2UiLCJwb3AiLCJza2lwVGVtcFJlc2V0IiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJvb3RSZWNvcmQiLCJydmFsIiwiZXhjZXB0aW9uIiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiZmluYWxseUVudHJ5IiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJvIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIkYiLCJzIiwibiIsImUiLCJfZSIsImYiLCJub3JtYWxDb21wbGV0aW9uIiwiZGlkRXJyIiwic3RlcCIsIl9lMiIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJmcm9tIiwidGVzdCIsImFyciIsImxlbiIsImFycjIiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJncyIsImFyZ3VtZW50cyIsImFwcGx5Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIlN0cmluZyIsIm11bHRpcGxlIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJyZXRyaWV2ZURvY3VtZW50cyIsIl9yZXRyaWV2ZURvY3VtZW50cyIsIl9jYWxsZWUiLCJkYXRhRGlyIiwiZG9jdW1lbnRzRGlyIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJmaWxlbmFtZSIsImZpcnN0VWlkIiwic2tpcCIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJkb2N1bWVudCIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJkb2N1bWVudE9yRGl2aXNpb24iLCJkb2N1bWVudERpciIsImZpbGVuYW1lQnlTaGEyNTYiLCJpbmRleFBhdGgiLCJpbmRleCIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJfbG9vcCIsIl9yZXQiLCJfY2FsbGVlJCIsIl9jb250ZXh0MiIsImFzc2VydCIsImNvbW1pdCIsInVpZCIsInBhdGgiLCJqb2luIiwicHVsbCIsImV4ZWNTeW5jIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJmcyIsImVuc3VyZURpclN5bmMiLCJmdWxsIiwicmVhZGRpclN5bmMiLCJyZW1vdmVTeW5jIiwidDAiLCJpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyIsImxlZ2lzbGF0dXJlIiwid2Fsa0RvY3VtZW50QW5kRGl2aXNpb25zIiwic3Vic3RyaW5nIiwicGF0aEZyb21Eb2N1bWVudFVpZCIsInBhdGhFeGlzdHNTeW5jIiwicmVhZEpzb25TeW5jIiwiaXRlckRvY3VtZW50T3JEaXZpc2lvblVybHMiLCJfc3RlcDQkdmFsdWUiLCJmb3JtYXQiLCJ1cmwiLCJmaWxlSW5mb3MiLCJyZXNwb25zZSIsImZpbGVQYXRoIiwiYXJyYXlCdWZmZXIiLCJidWZmZXIiLCJzaGEyNTYiLCJleGlzdGluZ0ZpbGVuYW1lIiwiX2xvb3AkIiwiX2NvbnRleHQiLCJmaW5kIiwiY29uY2F0IiwiRG9jdW1lbnRVcmxGb3JtYXQiLCJQZGYiLCJzdGF0dXMiLCJzaWxlbnQiLCJjb25zb2xlIiwibG9nIiwiZmV0Y2giLCJvayIsIkJ1ZmZlciIsInN1YmFycmF5Iiwic3RhcnRzV2l0aCIsIndhcm4iLCJjcmVhdGVIYXNoIiwidXBkYXRlIiwiZGlnZXN0IiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJ3cml0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb2RlIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJ0MSIsInQyIiwid3JpdGVKc29uU3luYyIsInNwYWNlcyIsInQzIiwidDQiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiZXhpdENvZGUiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfZG9jdW1lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgeyB3YWxrRG9jdW1lbnRBbmREaXZpc2lvbnMgfSBmcm9tIFwiLi4vZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0ICogYXMgZ2l0IGZyb20gXCIuLi9naXRcIlxuaW1wb3J0IHsgaXRlckxvYWRBc3NlbWJsZWVEb2N1bWVudHMsIHBhdGhGcm9tRG9jdW1lbnRVaWQgfSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBEb2N1bWVudFVybEZvcm1hdCwgaXRlckRvY3VtZW50T3JEaXZpc2lvblVybHMgfSBmcm9tIFwiLi4vdXJsc1wiXG5cbmludGVyZmFjZSBGaWxlSW5mb3Mge1xuICBmaWxlbmFtZT86IHN0cmluZ1xuICBzaGEyNTY/OiBzdHJpbmdcbiAgdXJsOiBzdHJpbmdcbiAgc3RhdHVzOiBudW1iZXJcbn1cblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiY1wiLFxuICAgIGhlbHA6IFwiY29tbWl0IGRvY3VtZW50c1wiLFxuICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImZcIixcbiAgICBoZWxwOiBcInJldHJpZXZlIGFsbCBkb2N1bWVudHMsIGV2ZW4gYWxyZWFkeSByZXRyaWV2ZWQgb25lc1wiLFxuICAgIG5hbWU6IFwiZnVsbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIjE2XCIsXG4gICAgaGVscDogJ2xlZ2lzbGF0dXJlcyB0byByZXRyaWV2ZSwgXCIqXCIgZm9yIGFsbCcsXG4gICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcIm5cIixcbiAgICBoZWxwOiBcInRyeSB0byBhbHNvIHJldHJpZXZlIGRvY3VtZW50cyB0aGF0IHdlcmUgcHJldmlvdXNseSBub3QgZm91bmRcIixcbiAgICBuYW1lOiBcIm5vdC1mb3VuZFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJwXCIsXG4gICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgIG5hbWU6IFwicHVsbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInVcIixcbiAgICBoZWxwOiBcIlVJRCBvZiBmaXJzdCBBc3NlbWJsw6llJ3MgZG9jdW1lbnQgb3IgZGl2aXNpb24gdG8gcmV0cmlldmVcIixcbiAgICBuYW1lOiBcInVpZFwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVEb2N1bWVudHMoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgYXNzZXJ0KFxuICAgICFvcHRpb25zLmNvbW1pdCB8fCBvcHRpb25zLnVpZCxcbiAgICAnT3B0aW9ucyBcImNvbW1pdFwiICYgXCJ1aWRcIiBhcmUgaW5jb21wYXRpYmxlJyxcbiAgKVxuXG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIFwiRG9jdW1lbnRzXCIpXG4gIGlmIChvcHRpb25zLnB1bGwpIHtcbiAgICBleGVjU3luYyhgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyYCwge1xuICAgICAgY3dkOiBkb2N1bWVudHNEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gICAgZXhlY1N5bmMoYGdpdCBwdWxsIC0tcmViYXNlYCwge1xuICAgICAgY3dkOiBkb2N1bWVudHNEaXIsXG4gICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgIH0pXG4gIH1cblxuICBmcy5lbnN1cmVEaXJTeW5jKGRvY3VtZW50c0RpcilcbiAgaWYgKG9wdGlvbnMuZnVsbCAmJiAhb3B0aW9ucy51aWQpIHtcbiAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRvY3VtZW50c0RpcikpIHtcbiAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRvY3VtZW50c0RpciwgZmlsZW5hbWUpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpcnN0VWlkID0gb3B0aW9ucy51aWRcbiAgbGV0IHNraXAgPSBCb29sZWFuKGZpcnN0VWlkKVxuICBmb3IgKGNvbnN0IHsgZG9jdW1lbnQgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgICBkYXRhRGlyLFxuICAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gICkpIHtcbiAgICBmb3IgKGNvbnN0IGRvY3VtZW50T3JEaXZpc2lvbiBvZiB3YWxrRG9jdW1lbnRBbmREaXZpc2lvbnMoZG9jdW1lbnQpKSB7XG4gICAgICAvLyBJZ25vcmUgZG9jdW1lbnRzIGZyb20gU8OpbmF0LlxuICAgICAgaWYgKGRvY3VtZW50T3JEaXZpc2lvbi51aWQuc3Vic3RyaW5nKDQsIDYpID09PSBcIlNOXCIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgaWYgKGRvY3VtZW50T3JEaXZpc2lvbi51aWQgPT09IGZpcnN0VWlkKSB7XG4gICAgICAgICAgc2tpcCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkb2N1bWVudERpciA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoXG4gICAgICAgIGRvY3VtZW50c0RpcixcbiAgICAgICAgZG9jdW1lbnRPckRpdmlzaW9uLnVpZCxcbiAgICAgIClcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZG9jdW1lbnREaXIpXG5cbiAgICAgIGNvbnN0IGZpbGVuYW1lQnlTaGEyNTY6IHsgW2RpZ2VzdDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fVxuICAgICAgY29uc3QgaW5kZXhQYXRoID0gcGF0aC5qb2luKGRvY3VtZW50RGlyLCBcImluZGV4Lmpzb25cIilcbiAgICAgIGNvbnN0IGluZGV4ID0gKFxuICAgICAgICBmcy5wYXRoRXhpc3RzU3luYyhpbmRleFBhdGgpID8gZnMucmVhZEpzb25TeW5jKGluZGV4UGF0aCkgOiB7fVxuICAgICAgKSBhcyB7IFtmb3JtYXQ6IHN0cmluZ106IEZpbGVJbmZvc1tdIH1cbiAgICAgIGZvciAoY29uc3QgeyBmb3JtYXQsIHR5cGUsIHVybCB9IG9mIGl0ZXJEb2N1bWVudE9yRGl2aXNpb25VcmxzKFxuICAgICAgICBkb2N1bWVudE9yRGl2aXNpb24sXG4gICAgICApKSB7XG4gICAgICAgIGlmIChpbmRleFtmb3JtYXRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmRleFtmb3JtYXRdID0gW11cbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlsZUluZm9zID0gaW5kZXhbZm9ybWF0XS5maW5kKChmaWxlSW5mb3MpID0+IGZpbGVJbmZvcy51cmwgPT09IHVybClcbiAgICAgICAgaWYgKGZpbGVJbmZvcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZmlsZUluZm9zID0ge30gYXMgRmlsZUluZm9zXG4gICAgICAgICAgaW5kZXhbZm9ybWF0XS5wdXNoKGZpbGVJbmZvcylcbiAgICAgICAgfVxuICAgICAgICBmaWxlSW5mb3MudXJsID0gdXJsXG5cbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHt0eXBlfS4ke1xuICAgICAgICAgIGZvcm1hdCA9PT0gRG9jdW1lbnRVcmxGb3JtYXQuUGRmID8gXCJwZGZcIiA6IFwiaHRtbFwiXG4gICAgICAgIH1gXG4gICAgICAgIGlmIChmaWxlSW5mb3Muc3RhdHVzID09PSAyMDAgJiYgIW9wdGlvbnMuZnVsbCkge1xuICAgICAgICAgIGZpbGVuYW1lQnlTaGEyNTZbZmlsZUluZm9zLnNoYTI1NiBhcyBzdHJpbmddID0gZmlsZW5hbWVcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlSW5mb3Muc3RhdHVzID09PSA0MDQgJiYgIW9wdGlvbnNbXCJub3QtZm91bmRcIl0pIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFJldHJpZXZpbmcgZG9jdW1lbnQgb3IgZGl2aXNpb24gJHtkb2N1bWVudE9yRGl2aXNpb24udWlkfSBhdCAke3VybH3igKZgLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKVxuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihkb2N1bWVudERpciwgZmlsZW5hbWUpXG4gICAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKVxuICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGZvcm1hdCA9PT0gRG9jdW1lbnRVcmxGb3JtYXQuUGRmICYmXG4gICAgICAgICAgICAhYnVmZmVyLnN1YmFycmF5KDAsIDQpLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChcIiVQREZcIilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEluc3RlYWQgb2YgYSBQREYsIHRoZSByZWNlaXZlZCBkYXRhIG1heSBiZSBhbiBIVE1MIHBhZ2Ugd2l0aCBhIG1lc3NhZ2UgbGlrZVxuICAgICAgICAgICAgLy8gXCJEb2N1bWVudCBub24gZW5jb3JlIHB1Ymxpw6lcIi5cbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGAgIFBERiBcIiR7dXJsfVwiIG5vdCBmb3VuZC5gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnMucmVtb3ZlU3luYyhmaWxlUGF0aClcbiAgICAgICAgICAgIGRlbGV0ZSBmaWxlSW5mb3MuZmlsZW5hbWVcbiAgICAgICAgICAgIGRlbGV0ZSBmaWxlSW5mb3Muc2hhMjU2XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYTI1NiA9IGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGJ1ZmZlcikuZGlnZXN0KFwiaGV4XCIpXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0ZpbGVuYW1lID0gZmlsZW5hbWVCeVNoYTI1NltzaGEyNTZdXG4gICAgICAgICAgICBpZiAoZXhpc3RpbmdGaWxlbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGZzLmNyZWF0ZVdyaXRlU3RyZWFtKGZpbGVQYXRoKS53cml0ZShidWZmZXIpXG4gICAgICAgICAgICAgIGZpbGVJbmZvcy5maWxlbmFtZSA9IGZpbGVuYW1lXG4gICAgICAgICAgICAgIGZpbGVuYW1lQnlTaGEyNTZbc2hhMjU2XSA9IGZpbGVuYW1lXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmaWxlSW5mb3MuZmlsZW5hbWUgPSBleGlzdGluZ0ZpbGVuYW1lXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWxlSW5mb3Muc2hhMjU2ID0gc2hhMjU2XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYCAgUGFnZSBcIiR7dXJsfVwiIG5vdCBmb3VuZC5gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgICBFcnJvcjpcXG4ke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgIHsgY29kZTogcmVzcG9uc2Uuc3RhdHVzLCBtZXNzYWdlOiByZXNwb25zZS5zdGF0dXNUZXh0IH0sXG4gICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAyLFxuICAgICAgICAgICAgICApfWAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLnJlbW92ZVN5bmMoZmlsZVBhdGgpXG4gICAgICAgICAgZGVsZXRlIGZpbGVJbmZvcy5maWxlbmFtZVxuICAgICAgICAgIGRlbGV0ZSBmaWxlSW5mb3Muc2hhMjU2XG4gICAgICAgIH1cbiAgICAgICAgZmlsZUluZm9zLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c1xuICAgICAgfVxuICAgICAgZnMud3JpdGVKc29uU3luYyhpbmRleFBhdGgsIGluZGV4LCB7IGVuY29kaW5nOiBcInV0Zi04XCIsIHNwYWNlczogMiB9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgIHJldHVybiBnaXQuY29tbWl0QW5kUHVzaChkb2N1bWVudHNEaXIsIFwiTm91dmVsbGUgbW9pc3NvblwiLCBvcHRpb25zLnJlbW90ZSlcbiAgfVxuICByZXR1cm4gMFxufVxuXG5yZXRyaWV2ZURvY3VtZW50cygpXG4gIC50aGVuKChleGl0Q29kZSkgPT4gcHJvY2Vzcy5leGl0KGV4aXRDb2RlKSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNB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