@tricoteuses/assemblee
Version:
Retrieve, clean up & handle French Assemblée nationale's open data
171 lines (164 loc) • 21.6 kB
JavaScript
;
require("core-js/modules/es.symbol.js");
require("core-js/modules/es.symbol.description.js");
require("core-js/modules/es.symbol.iterator.js");
require("core-js/modules/es.array.from.js");
require("core-js/modules/es.array.is-array.js");
require("core-js/modules/es.array.iterator.js");
require("core-js/modules/es.array.slice.js");
require("core-js/modules/es.date.to-string.js");
require("core-js/modules/es.function.name.js");
require("core-js/modules/es.object.to-string.js");
require("core-js/modules/es.regexp.exec.js");
require("core-js/modules/es.regexp.to-string.js");
require("core-js/modules/es.string.iterator.js");
require("core-js/modules/web.dom-collections.iterator.js");
require("core-js/modules/es.array.concat.js");
require("core-js/modules/es.array.join.js");
require("core-js/modules/es.date.to-json.js");
require("core-js/modules/es.string.ends-with.js");
require("core-js/modules/es.string.starts-with.js");
var _assert = _interopRequireDefault(require("assert"));
var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _path = _interopRequireDefault(require("path"));
var _documents = require("../parsers/documents");
var _cli_helpers = require("./shared/cli_helpers");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, 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 o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } // import { execSync } from "child_process"
// import { EnabledDatasets } from "../datasets"
// import { loadAssembleeData } from "../loaders"
// import { Document, TypeDocument } from "../types/dossiers_legislatifs"
// import { DocumentUrlFormat, urlFromDocument } from "../urls"
var optionsDefinitions = [_cli_helpers.commitOption, _cli_helpers.remoteOption, _cli_helpers.legislatureOption, _cli_helpers.silentOption, _cli_helpers.verboseOption, _cli_helpers.dataDirDefaultOption, {
alias: "f",
help: "Filename of Assemblée's document to parse",
name: "filename",
type: String
}];
var options = (0, _commandLineArgs["default"])(optionsDefinitions);
function parseTextesLois() {
(0, _assert["default"])(!options.commit || options.filename, 'Options "commit" & "filename" are incompatible');
var dataDir = options.dataDir;
// const { documentByUid } = loadAssembleeData(
// dataDir,
// EnabledDatasets.DossiersLegislatifs,
// options.legislature,
// )
var textesLoisDir = _path["default"].join(dataDir, "www.assemblee-nationale.fr", options.legislature, "textes");
var _iterator = _createForOfIteratorHelper(_fsExtra["default"].readdirSync(textesLoisDir)),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var filename = _step.value;
if (filename[0] === ".") {
continue;
}
if (!filename.endsWith(".asp")) {
continue;
}
if (options.filename && !filename.startsWith(options.filename)) {
continue;
}
var texteLoiPath = _path["default"].join(textesLoisDir, filename);
if (!options.silent) {
console.log("Parsing \"texte de loi\" ".concat(texteLoiPath, "\u2026"));
}
var texteLoiPage = _fsExtra["default"].readFileSync(texteLoiPath, {
encoding: "utf-8"
});
var texteLoiUrl = "http://www.assemblee-nationale.fr/".concat(options.legislature, "/textes/").concat(filename);
var texteLoiParsed = (0, _documents.parseTexteLoi)(texteLoiUrl, texteLoiPage);
if (options.filename && options.verbose) {
console.log(JSON.stringify(texteLoiParsed.subdivisions, null, 2));
}
var error = texteLoiParsed.error;
if (error) {
console.error(" Error while parsing page \"".concat(texteLoiPath, "\":\n\nError:\n").concat(JSON.stringify(error, null, 2)));
continue;
}
}
// fs.ensureDirSync(textesLoisDir)
// if (!options.uid) {
// for (const filename of fs.readdirSync(textesLoisDir)) {
// if (filename[0] === ".") {
// continue
// }
// fs.removeSync(path.join(textesLoisDir, filename))
// }
// }
// const textesLois = Object.values(documentByUid)
// .filter(document => document.xsiType === TypeDocument.TexteLoiType)
// .filter(
// document => document.uid.startsWith("PIONAN") || document.uid.startsWith("PRJLAN"),
// )
// .map(document => {
// return {
// ...document,
// rawDocumentAssembleeUrl: urlFromDocument(document, DocumentUrlFormat.RawHtml),
// }
// })
// .sort((a, b) =>
// a.rawDocumentAssembleeUrl === null
// ? -1
// : b.rawDocumentAssembleeUrl === null
// ? 1
// : a.rawDocumentAssembleeUrl.localeCompare(b.rawDocumentAssembleeUrl),
// )
// const firstUid = options.uid
// let skip = !!firstUid
// for (const texteLoi of textesLois) {
// if (skip) {
// if (texteLoi.uid === firstUid) {
// skip = false
// } else {
// continue
// }
// }
// if (!options.silent) {
// console.log(
// `Retrieving bill ${texteLoi.uid} at ${texteLoi.rawDocumentAssembleeUrl}`,
// )
// }
// if (texteLoi.rawDocumentAssembleeUrl === null) {
// continue
// }
// const url = new URL(texteLoi.rawDocumentAssembleeUrl)
// const filePath = path.join(dataDir, url.hostname, ...url.pathname.split("/"))
// assert.strictEqual(textesLoisDir, path.dirname(filePath))
// let page = undefined
// try {
// page = fs.readFileSync(filePath, { encoding: "utf-8" })
// } catch (e) {
// if (e.code === "ENOENT") {
// continue
// }
// throw e
// }
// if (options.parse) {
// const texteLoiParsed = parseTexteLoi(texteLoi.rawDocumentAssembleeUrl, page)
// const { error } = texteLoiParsed
// if (error) {
// console.error(
// `Error while parsing page "${texteLoi.rawDocumentAssembleeUrl}" (uid: ${
// texteLoi.uid
// }):\n\nError:\n${JSON.stringify(error, null, 2)}`,
// )
// continue
// }
// }
// }
// if (options.commit) {
// return git.commitAndPush(textesLoisDir, "Nouvelle moisson", options.remote)
// }
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return 0;
}
process.exit(parseTextesLois());
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbWFuZExpbmVBcmdzIiwiX2ZzRXh0cmEiLCJfcGF0aCIsIl9kb2N1bWVudHMiLCJfY2xpX2hlbHBlcnMiLCJlIiwiX19lc01vZHVsZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJjb21taXRPcHRpb24iLCJyZW1vdGVPcHRpb24iLCJsZWdpc2xhdHVyZU9wdGlvbiIsInNpbGVudE9wdGlvbiIsInZlcmJvc2VPcHRpb24iLCJkYXRhRGlyRGVmYXVsdE9wdGlvbiIsImFsaWFzIiwiaGVscCIsInR5cGUiLCJTdHJpbmciLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwicGFyc2VUZXh0ZXNMb2lzIiwiYXNzZXJ0IiwiY29tbWl0IiwiZmlsZW5hbWUiLCJkYXRhRGlyIiwidGV4dGVzTG9pc0RpciIsInBhdGgiLCJqb2luIiwibGVnaXNsYXR1cmUiLCJfaXRlcmF0b3IiLCJmcyIsInJlYWRkaXJTeW5jIiwiX3N0ZXAiLCJlbmRzV2l0aCIsInN0YXJ0c1dpdGgiLCJ0ZXh0ZUxvaVBhdGgiLCJzaWxlbnQiLCJjb25zb2xlIiwibG9nIiwiY29uY2F0IiwidGV4dGVMb2lQYWdlIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJ0ZXh0ZUxvaVVybCIsInRleHRlTG9pUGFyc2VkIiwicGFyc2VUZXh0ZUxvaSIsInZlcmJvc2UiLCJKU09OIiwic3RyaW5naWZ5Iiwic3ViZGl2aXNpb25zIiwiZXJyb3IiLCJlcnIiLCJwcm9jZXNzIiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3BhcnNlX3RleHRlc19sb2lzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG4vLyBpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG4vLyBpbXBvcnQgeyBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuLy8gaW1wb3J0IHsgbG9hZEFzc2VtYmxlZURhdGEgfSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBwYXJzZVRleHRlTG9pIH0gZnJvbSBcIi4uL3BhcnNlcnMvZG9jdW1lbnRzXCJcbi8vIGltcG9ydCB7IERvY3VtZW50LCBUeXBlRG9jdW1lbnQgfSBmcm9tIFwiLi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuLy8gaW1wb3J0IHsgRG9jdW1lbnRVcmxGb3JtYXQsIHVybEZyb21Eb2N1bWVudCB9IGZyb20gXCIuLi91cmxzXCJcbmltcG9ydCB7XG4gIGNvbW1pdE9wdGlvbixcbiAgbGVnaXNsYXR1cmVPcHRpb24sXG4gIHJlbW90ZU9wdGlvbixcbiAgc2lsZW50T3B0aW9uLFxuICB2ZXJib3NlT3B0aW9uLFxuICBkYXRhRGlyRGVmYXVsdE9wdGlvbixcbn0gZnJvbSBcIi4vc2hhcmVkL2NsaV9oZWxwZXJzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICBjb21taXRPcHRpb24sXG4gIHJlbW90ZU9wdGlvbixcbiAgbGVnaXNsYXR1cmVPcHRpb24sXG4gIHNpbGVudE9wdGlvbixcbiAgdmVyYm9zZU9wdGlvbixcbiAgZGF0YURpckRlZmF1bHRPcHRpb24sXG4gIHtcbiAgICBhbGlhczogXCJmXCIsXG4gICAgaGVscDogXCJGaWxlbmFtZSBvZiBBc3NlbWJsw6llJ3MgZG9jdW1lbnQgdG8gcGFyc2VcIixcbiAgICBuYW1lOiBcImZpbGVuYW1lXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbmZ1bmN0aW9uIHBhcnNlVGV4dGVzTG9pcygpOiBudW1iZXIge1xuICBhc3NlcnQoXG4gICAgIW9wdGlvbnMuY29tbWl0IHx8IG9wdGlvbnMuZmlsZW5hbWUsXG4gICAgJ09wdGlvbnMgXCJjb21taXRcIiAmIFwiZmlsZW5hbWVcIiBhcmUgaW5jb21wYXRpYmxlJyxcbiAgKVxuXG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgLy8gY29uc3QgeyBkb2N1bWVudEJ5VWlkIH0gPSBsb2FkQXNzZW1ibGVlRGF0YShcbiAgLy8gICBkYXRhRGlyLFxuICAvLyAgIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICAvLyAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gIC8vIClcblxuICBjb25zdCB0ZXh0ZXNMb2lzRGlyID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgXCJ3d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mclwiLFxuICAgIG9wdGlvbnMubGVnaXNsYXR1cmUsXG4gICAgXCJ0ZXh0ZXNcIixcbiAgKVxuICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKHRleHRlc0xvaXNEaXIpKSB7XG4gICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgaWYgKCFmaWxlbmFtZS5lbmRzV2l0aChcIi5hc3BcIikpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChvcHRpb25zLmZpbGVuYW1lICYmICFmaWxlbmFtZS5zdGFydHNXaXRoKG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBjb25zdCB0ZXh0ZUxvaVBhdGggPSBwYXRoLmpvaW4odGV4dGVzTG9pc0RpciwgZmlsZW5hbWUpXG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coYFBhcnNpbmcgXCJ0ZXh0ZSBkZSBsb2lcIiAke3RleHRlTG9pUGF0aH3igKZgKVxuICAgIH1cbiAgICBjb25zdCB0ZXh0ZUxvaVBhZ2UgPSBmcy5yZWFkRmlsZVN5bmModGV4dGVMb2lQYXRoLCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSlcbiAgICBjb25zdCB0ZXh0ZUxvaVVybCA9IGBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvJHtvcHRpb25zLmxlZ2lzbGF0dXJlfS90ZXh0ZXMvJHtmaWxlbmFtZX1gXG4gICAgY29uc3QgdGV4dGVMb2lQYXJzZWQgPSBwYXJzZVRleHRlTG9pKHRleHRlTG9pVXJsLCB0ZXh0ZUxvaVBhZ2UpXG4gICAgaWYgKG9wdGlvbnMuZmlsZW5hbWUgJiYgb3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0ZXh0ZUxvaVBhcnNlZC5zdWJkaXZpc2lvbnMsIG51bGwsIDIpKVxuICAgIH1cbiAgICBjb25zdCB7IGVycm9yIH0gPSB0ZXh0ZUxvaVBhcnNlZFxuICAgIGlmIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYCAgRXJyb3Igd2hpbGUgcGFyc2luZyBwYWdlIFwiJHt0ZXh0ZUxvaVBhdGh9XCI6XFxuXFxuRXJyb3I6XFxuJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgIClcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICB9XG5cbiAgLy8gZnMuZW5zdXJlRGlyU3luYyh0ZXh0ZXNMb2lzRGlyKVxuICAvLyBpZiAoIW9wdGlvbnMudWlkKSB7XG4gIC8vICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyh0ZXh0ZXNMb2lzRGlyKSkge1xuICAvLyAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAvLyAgICAgICBjb250aW51ZVxuICAvLyAgICAgfVxuICAvLyAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4odGV4dGVzTG9pc0RpciwgZmlsZW5hbWUpKVxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIC8vIGNvbnN0IHRleHRlc0xvaXMgPSBPYmplY3QudmFsdWVzKGRvY3VtZW50QnlVaWQpXG4gIC8vICAgLmZpbHRlcihkb2N1bWVudCA9PiBkb2N1bWVudC54c2lUeXBlID09PSBUeXBlRG9jdW1lbnQuVGV4dGVMb2lUeXBlKVxuICAvLyAgIC5maWx0ZXIoXG4gIC8vICAgICBkb2N1bWVudCA9PiBkb2N1bWVudC51aWQuc3RhcnRzV2l0aChcIlBJT05BTlwiKSB8fCBkb2N1bWVudC51aWQuc3RhcnRzV2l0aChcIlBSSkxBTlwiKSxcbiAgLy8gICApXG4gIC8vICAgLm1hcChkb2N1bWVudCA9PiB7XG4gIC8vICAgICByZXR1cm4ge1xuICAvLyAgICAgICAuLi5kb2N1bWVudCxcbiAgLy8gICAgICAgcmF3RG9jdW1lbnRBc3NlbWJsZWVVcmw6IHVybEZyb21Eb2N1bWVudChkb2N1bWVudCwgRG9jdW1lbnRVcmxGb3JtYXQuUmF3SHRtbCksXG4gIC8vICAgICB9XG4gIC8vICAgfSlcbiAgLy8gICAuc29ydCgoYSwgYikgPT5cbiAgLy8gICAgIGEucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwgPT09IG51bGxcbiAgLy8gICAgICAgPyAtMVxuICAvLyAgICAgICA6IGIucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwgPT09IG51bGxcbiAgLy8gICAgICAgPyAxXG4gIC8vICAgICAgIDogYS5yYXdEb2N1bWVudEFzc2VtYmxlZVVybC5sb2NhbGVDb21wYXJlKGIucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwpLFxuICAvLyAgIClcblxuICAvLyBjb25zdCBmaXJzdFVpZCA9IG9wdGlvbnMudWlkXG4gIC8vIGxldCBza2lwID0gISFmaXJzdFVpZFxuICAvLyBmb3IgKGNvbnN0IHRleHRlTG9pIG9mIHRleHRlc0xvaXMpIHtcbiAgLy8gICBpZiAoc2tpcCkge1xuICAvLyAgICAgaWYgKHRleHRlTG9pLnVpZCA9PT0gZmlyc3RVaWQpIHtcbiAgLy8gICAgICAgc2tpcCA9IGZhbHNlXG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICBjb250aW51ZVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gIC8vICAgICBjb25zb2xlLmxvZyhcbiAgLy8gICAgICAgYFJldHJpZXZpbmcgYmlsbCAke3RleHRlTG9pLnVpZH0gYXQgJHt0ZXh0ZUxvaS5yYXdEb2N1bWVudEFzc2VtYmxlZVVybH1gLFxuICAvLyAgICAgKVxuICAvLyAgIH1cbiAgLy8gICBpZiAodGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwgPT09IG51bGwpIHtcbiAgLy8gICAgIGNvbnRpbnVlXG4gIC8vICAgfVxuICAvLyAgIGNvbnN0IHVybCA9IG5ldyBVUkwodGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwpXG4gIC8vICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YURpciwgdXJsLmhvc3RuYW1lLCAuLi51cmwucGF0aG5hbWUuc3BsaXQoXCIvXCIpKVxuICAvLyAgIGFzc2VydC5zdHJpY3RFcXVhbCh0ZXh0ZXNMb2lzRGlyLCBwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKVxuXG4gIC8vICAgbGV0IHBhZ2UgPSB1bmRlZmluZWRcbiAgLy8gICB0cnkge1xuICAvLyAgICAgcGFnZSA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0pXG4gIC8vICAgfSBjYXRjaCAoZSkge1xuICAvLyAgICAgaWYgKGUuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAvLyAgICAgICBjb250aW51ZVxuICAvLyAgICAgfVxuICAvLyAgICAgdGhyb3cgZVxuICAvLyAgIH1cblxuICAvLyAgIGlmIChvcHRpb25zLnBhcnNlKSB7XG4gIC8vICAgICBjb25zdCB0ZXh0ZUxvaVBhcnNlZCA9IHBhcnNlVGV4dGVMb2kodGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmwsIHBhZ2UpXG4gIC8vICAgICBjb25zdCB7IGVycm9yIH0gPSB0ZXh0ZUxvaVBhcnNlZFxuICAvLyAgICAgaWYgKGVycm9yKSB7XG4gIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gIC8vICAgICAgICAgYEVycm9yIHdoaWxlIHBhcnNpbmcgcGFnZSBcIiR7dGV4dGVMb2kucmF3RG9jdW1lbnRBc3NlbWJsZWVVcmx9XCIgKHVpZDogJHtcbiAgLy8gICAgICAgICAgIHRleHRlTG9pLnVpZFxuICAvLyAgICAgICAgIH0pOlxcblxcbkVycm9yOlxcbiR7SlNPTi5zdHJpbmdpZnkoZXJyb3IsIG51bGwsIDIpfWAsXG4gIC8vICAgICAgIClcbiAgLy8gICAgICAgY29udGludWVcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vIH1cbiAgLy8gaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gIC8vICAgcmV0dXJuIGdpdC5jb21taXRBbmRQdXNoKHRleHRlc0xvaXNEaXIsIFwiTm91dmVsbGUgbW9pc3NvblwiLCBvcHRpb25zLnJlbW90ZSlcbiAgLy8gfVxuICByZXR1cm4gMFxufVxuXG5wcm9jZXNzLmV4aXQocGFyc2VUZXh0ZXNMb2lzKCkpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLGdCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFILHNCQUFBLENB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