@tricoteuses/assemblee 1.9.13 → 1.10.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.
- package/README.md +0 -5
- package/lib/api.js +1 -1
- package/lib/api.mjs +1 -1
- package/lib/bugs/acteur-00010/plugin.test.js +5 -5
- package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
- package/lib/bugs/acteur-00010.js +17 -18
- package/lib/bugs/acteur-00010.mjs +1 -1
- package/lib/bugs/agenda-00002/plugin.test.js +6 -6
- package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00002.js +31 -32
- package/lib/bugs/agenda-00002.mjs +3 -3
- package/lib/bugs/agenda-00008/plugin.test.js +5 -5
- package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00008.js +17 -18
- package/lib/bugs/agenda-00008.mjs +1 -1
- package/lib/bugs/agenda-00011/plugin.test.js +10 -10
- package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
- package/lib/bugs/agenda-00011.js +28 -29
- package/lib/bugs/agenda-00011.mjs +3 -3
- package/lib/bugs.js +27 -29
- package/lib/bugs.mjs +3 -3
- package/lib/cleaners/actes_legislatifs.js +5 -5
- package/lib/cleaners/actes_legislatifs.mjs +1 -1
- package/lib/cleaners/acteurs.js +5 -5
- package/lib/cleaners/acteurs.mjs +1 -1
- package/lib/cleaners/amendements.js +5 -5
- package/lib/cleaners/amendements.mjs +1 -1
- package/lib/cleaners/debats.js +1 -1
- package/lib/cleaners/debats.mjs +1 -1
- package/lib/cleaners/documents.js +5 -5
- package/lib/cleaners/documents.mjs +1 -1
- package/lib/cleaners/dossiers_legislatifs.js +5 -5
- package/lib/cleaners/dossiers_legislatifs.mjs +1 -1
- package/lib/cleaners/index.d.ts +0 -1
- package/lib/cleaners/index.js +1 -8
- package/lib/cleaners/index.mjs +1 -2
- package/lib/cleaners/organes.js +2 -2
- package/lib/cleaners/organes.mjs +1 -1
- package/lib/cleaners/questions.js +1 -1
- package/lib/cleaners/questions.mjs +1 -1
- package/lib/cleaners/reunions.js +5 -5
- package/lib/cleaners/reunions.mjs +1 -1
- package/lib/cleaners/scrutins.js +8 -8
- package/lib/cleaners/scrutins.mjs +1 -1
- package/lib/cleaners/xml.js +8 -8
- package/lib/cleaners/xml.mjs +1 -1
- package/lib/datasets.d.ts +1 -13
- package/lib/datasets.js +10 -29
- package/lib/datasets.mjs +2 -21
- package/lib/dates.js +3 -4
- package/lib/dates.mjs +1 -1
- package/lib/dossiers_legislatifs.js +8 -8
- package/lib/dossiers_legislatifs.mjs +1 -1
- package/lib/file_systems.js +15 -14
- package/lib/file_systems.mjs +3 -3
- package/lib/git.js +5 -5
- package/lib/git.mjs +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +8 -1
- package/lib/index.mjs +2 -1
- package/lib/inserters.js +4 -4
- package/lib/inserters.mjs +1 -1
- package/lib/loaders.d.ts +0 -5
- package/lib/loaders.js +255 -299
- package/lib/loaders.mjs +1 -13
- package/lib/logger.js +1 -1
- package/lib/logger.mjs +1 -1
- package/lib/organes.js +1 -1
- package/lib/organes.mjs +1 -1
- package/lib/parsers/documents.js +11 -11
- package/lib/parsers/documents.mjs +1 -1
- package/lib/parsers/index.d.ts +1 -0
- package/lib/parsers/index.js +8 -1
- package/lib/parsers/index.mjs +2 -1
- package/lib/parsers/recherche_amendements.js +17 -15
- package/lib/parsers/recherche_amendements.mjs +1 -1
- package/lib/parsers/textes_lois.d.ts +22 -15
- package/lib/parsers/textes_lois.js +264 -752
- package/lib/parsers/textes_lois.mjs +249 -597
- package/lib/raw_types/acteurs_et_organes.js +9 -9
- package/lib/raw_types/acteurs_et_organes.mjs +1 -1
- package/lib/raw_types/agendas.d.ts +1 -0
- package/lib/raw_types/agendas.js +11 -10
- package/lib/raw_types/agendas.mjs +3 -2
- package/lib/raw_types/amendements.js +9 -9
- package/lib/raw_types/amendements.mjs +1 -1
- package/lib/raw_types/debats.js +9 -9
- package/lib/raw_types/debats.mjs +1 -1
- package/lib/raw_types/dossiers_legislatifs.js +9 -9
- package/lib/raw_types/dossiers_legislatifs.mjs +1 -1
- package/lib/raw_types/questions.js +9 -9
- package/lib/raw_types/questions.mjs +1 -1
- package/lib/raw_types/scrutins.js +9 -9
- package/lib/raw_types/scrutins.mjs +1 -1
- package/lib/scripts/bugs_helper.js +25 -26
- package/lib/scripts/bugs_helper.mjs +3 -3
- package/lib/scripts/clean_reorganized_data.js +256 -245
- package/lib/scripts/clean_reorganized_data.mjs +18 -29
- package/lib/scripts/diff_amendements.js +9 -8
- package/lib/scripts/diff_amendements.mjs +1 -1
- package/lib/scripts/document_dossiers_legislatifs.js +24 -27
- package/lib/scripts/document_dossiers_legislatifs.mjs +3 -3
- package/lib/scripts/get_today_reunions.js +3 -2
- package/lib/scripts/get_today_reunions.mjs +1 -1
- package/lib/scripts/merge_scrutins.js +9 -8
- package/lib/scripts/merge_scrutins.mjs +1 -1
- package/lib/scripts/parse_textes_lois.js +6 -5
- package/lib/scripts/parse_textes_lois.mjs +1 -1
- package/lib/scripts/process_open_dataset.d.ts +0 -2
- package/lib/scripts/process_open_dataset.js +19 -19
- package/lib/scripts/process_open_dataset.mjs +3 -5
- package/lib/scripts/raw_types_from_amendements.d.ts +0 -1
- package/lib/scripts/raw_types_from_amendements.js +122 -198
- package/lib/scripts/raw_types_from_amendements.mjs +105 -60
- package/lib/scripts/reorganize_data.js +14 -15
- package/lib/scripts/reorganize_data.mjs +3 -3
- package/lib/scripts/retrieve_deputes_photos.js +40 -31
- package/lib/scripts/retrieve_deputes_photos.mjs +10 -2
- package/lib/scripts/retrieve_documents.d.ts +1 -1
- package/lib/scripts/retrieve_documents.js +230 -138
- package/lib/scripts/retrieve_documents.mjs +87 -38
- package/lib/scripts/retrieve_open_data.js +27 -30
- package/lib/scripts/retrieve_open_data.mjs +5 -8
- package/lib/scripts/retrieve_pending_amendments.js +14 -14
- package/lib/scripts/retrieve_pending_amendments.mjs +1 -1
- package/lib/scripts/retrieve_senateurs_photos.js +10 -10
- package/lib/scripts/retrieve_senateurs_photos.mjs +1 -1
- package/lib/scripts/retrieve_textes_lois.js +17 -15
- package/lib/scripts/retrieve_textes_lois.mjs +1 -1
- package/lib/scripts/shared/cli_helpers.d.ts +11 -0
- package/lib/scripts/shared/cli_helpers.js +13 -2
- package/lib/scripts/shared/cli_helpers.mjs +12 -1
- package/lib/scripts/test_iter_load.js +5 -19
- package/lib/scripts/test_iter_load.mjs +2 -9
- package/lib/scripts/test_load.js +2 -2
- package/lib/scripts/test_load.mjs +1 -1
- package/lib/scripts/test_load_big_files.js +2 -2
- package/lib/scripts/test_load_big_files.mjs +1 -1
- package/lib/scripts/validate_json.js +17 -18
- package/lib/scripts/validate_json.mjs +3 -3
- package/lib/shared_types/codes_actes.js +1 -1
- package/lib/shared_types/codes_actes.mjs +1 -1
- package/lib/strings.js +1 -1
- package/lib/strings.mjs +1 -1
- package/lib/types/acteurs_et_organes.js +9 -9
- package/lib/types/acteurs_et_organes.mjs +1 -1
- package/lib/types/agendas.d.ts +1 -0
- package/lib/types/agendas.js +11 -10
- package/lib/types/agendas.mjs +3 -2
- package/lib/types/amendements.js +9 -9
- package/lib/types/amendements.mjs +1 -1
- package/lib/types/debats.js +9 -9
- package/lib/types/debats.mjs +1 -1
- package/lib/types/dossiers_legislatifs.d.ts +13 -0
- package/lib/types/dossiers_legislatifs.js +47 -9
- package/lib/types/dossiers_legislatifs.mjs +39 -1
- package/lib/types/legislatures.js +1 -1
- package/lib/types/legislatures.mjs +1 -1
- package/lib/types/questions.js +9 -9
- package/lib/types/questions.mjs +1 -1
- package/lib/types/scrutins.js +9 -9
- package/lib/types/scrutins.mjs +1 -1
- package/lib/urls.js +2 -2
- package/lib/urls.mjs +1 -1
- package/package.json +14 -20
- package/lib/cleaners/textes_loi.d.ts +0 -1
- package/lib/cleaners/textes_loi.js +0 -12
- package/lib/cleaners/textes_loi.mjs +0 -5
- package/lib/examples/PIONANR5L15B0020/input.d.ts +0 -2
- package/lib/examples/PIONANR5L15B0020/input.js +0 -10
- package/lib/examples/PIONANR5L15B0020/input.mjs +0 -193
- package/lib/examples/PIONANR5L15B0020/input.ts +0 -193
- package/lib/examples/PIONANR5L15B0020/loi.json +0 -26
- package/lib/examples/PIONANR5L15B0020/loi_populated.json +0 -29
- package/lib/examples/PIONANR5L15B0020/meta.json +0 -28
- package/lib/examples/PIONANR5L15B0020/motifs.json +0 -5
- package/lib/examples/PIONANR5L15B0020/motifs_populated.json +0 -6
- package/lib/examples/PIONANR5L15B0020/sommaire.json +0 -3
- package/lib/examples/PRJLANR5L16B0914/input.d.ts +0 -2
- package/lib/examples/PRJLANR5L16B0914/input.js +0 -10
- package/lib/examples/PRJLANR5L16B0914/input.mjs +0 -322
- package/lib/examples/PRJLANR5L16B0914/input.ts +0 -322
- package/lib/examples/PRJLANR5L16B0914/loi.json +0 -14
- package/lib/examples/PRJLANR5L16B0914/loi_populated.json +0 -20
- package/lib/examples/PRJLANR5L16B0914/meta.json +0 -35
- package/lib/examples/PRJLANR5L16B0914/motifs.json +0 -4
- package/lib/examples/PRJLANR5L16B0914/motifs_populated.json +0 -5
- package/lib/examples/PRJLANR5L16B0914/sommaire.json +0 -3
- package/lib/examples/PRJLANR5L16B2014/README.md +0 -2
- package/lib/examples/PRJLANR5L16B2014/input.d.ts +0 -2
- package/lib/examples/PRJLANR5L16B2014/input.js +0 -10
- package/lib/examples/PRJLANR5L16B2014/input.mjs +0 -577
- package/lib/examples/PRJLANR5L16B2014/input.ts +0 -577
- package/lib/examples/PRJLANR5L16B2014/loi.json +0 -369
- package/lib/examples/PRJLANR5L16B2014/meta.json +0 -31
- package/lib/examples/PRJLANR5L16B2014/motifs.json +0 -5
- package/lib/examples/PRJLANR5L16B2014/sommaire.json +0 -51
- package/lib/examples/PRJLANR5L16B2424/alineas.json +0 -44
- package/lib/examples/PRJLANR5L16B2424/input.d.ts +0 -2
- package/lib/examples/PRJLANR5L16B2424/input.js +0 -10
- package/lib/examples/PRJLANR5L16B2424/input.mjs +0 -322
- package/lib/examples/PRJLANR5L16B2424/input.ts +0 -322
- package/lib/examples/PRJLANR5L16B2424/loi.json +0 -74
- package/lib/examples/PRJLANR5L16B2424/loi_populated.json +0 -87
- package/lib/examples/PRJLANR5L16B2424/meta.json +0 -31
- package/lib/examples/PRJLANR5L16B2424/motifs.json +0 -4
- package/lib/examples/PRJLANR5L16B2424/motifs_populated.json +0 -5
- package/lib/examples/PRJLANR5L16B2424/sommaire.json +0 -3
- package/lib/examples/PRJLANR5L16B2462/input.d.ts +0 -2
- package/lib/examples/PRJLANR5L16B2462/input.js +0 -10
- package/lib/examples/PRJLANR5L16B2462/input.mjs +0 -1308
- package/lib/examples/PRJLANR5L16B2462/input.ts +0 -1308
- package/lib/examples/PRJLANR5L16B2462/loi.json +0 -74
- package/lib/examples/PRJLANR5L16B2462/loi_populated.json +0 -310
- package/lib/examples/PRJLANR5L16B2462/meta.json +0 -29
- package/lib/examples/PRJLANR5L16B2462/motifs.json +0 -6
- package/lib/examples/PRJLANR5L16B2462/motifs_populated.json +0 -6
- package/lib/examples/PRJLANR5L16B2462/sommaire.json +0 -50
- package/lib/examples/README.md +0 -3
- package/lib/raw_types/textes_loi.d.ts +0 -93
- package/lib/raw_types/textes_loi.js +0 -429
- package/lib/raw_types/textes_loi.mjs +0 -378
- package/lib/schemas/texte_loi/Alinea.json +0 -36
- package/lib/schemas/texte_loi/ExposeMotifs.json +0 -24
- package/lib/schemas/texte_loi/MetaDonnees.json +0 -126
- package/lib/schemas/texte_loi/ProjetLoi.json +0 -64
- package/lib/schemas/texte_loi/Sommaire.json +0 -48
- package/lib/schemas/texte_loi/TexteLoi.json +0 -225
- package/lib/schemas/texte_loi/TexteLoiPartiel.json +0 -237
- package/lib/scripts/process_textes_loi_dataset.d.ts +0 -7
- package/lib/scripts/process_textes_loi_dataset.js +0 -373
- package/lib/scripts/process_textes_loi_dataset.mjs +0 -239
- package/lib/types/textes_loi.d.ts +0 -94
- package/lib/types/textes_loi.js +0 -429
- package/lib/types/textes_loi.mjs +0 -378
|
@@ -1,791 +1,303 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
3
|
require("core-js/modules/es.symbol.js");
|
|
5
4
|
require("core-js/modules/es.symbol.description.js");
|
|
6
|
-
require("core-js/modules/es.symbol.async-iterator.js");
|
|
7
5
|
require("core-js/modules/es.symbol.iterator.js");
|
|
8
|
-
require("core-js/modules/es.symbol.to-primitive.js");
|
|
9
|
-
require("core-js/modules/es.symbol.to-string-tag.js");
|
|
10
|
-
require("core-js/modules/es.array.filter.js");
|
|
11
|
-
require("core-js/modules/es.array.for-each.js");
|
|
12
6
|
require("core-js/modules/es.array.from.js");
|
|
13
7
|
require("core-js/modules/es.array.is-array.js");
|
|
14
8
|
require("core-js/modules/es.array.iterator.js");
|
|
15
|
-
require("core-js/modules/es.array.reverse.js");
|
|
16
9
|
require("core-js/modules/es.array.slice.js");
|
|
17
|
-
require("core-js/modules/es.date.to-primitive.js");
|
|
18
10
|
require("core-js/modules/es.date.to-string.js");
|
|
19
|
-
require("core-js/modules/es.function.name.js");
|
|
20
|
-
require("core-js/modules/es.json.to-string-tag.js");
|
|
21
|
-
require("core-js/modules/es.math.to-string-tag.js");
|
|
22
|
-
require("core-js/modules/es.number.constructor.js");
|
|
23
|
-
require("core-js/modules/es.object.create.js");
|
|
24
|
-
require("core-js/modules/es.object.define-properties.js");
|
|
25
11
|
require("core-js/modules/es.object.define-property.js");
|
|
26
|
-
require("core-js/modules/es.object.
|
|
27
|
-
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
28
|
-
require("core-js/modules/es.object.get-prototype-of.js");
|
|
29
|
-
require("core-js/modules/es.object.keys.js");
|
|
30
|
-
require("core-js/modules/es.object.set-prototype-of.js");
|
|
12
|
+
require("core-js/modules/es.object.to-string.js");
|
|
31
13
|
require("core-js/modules/es.regexp.to-string.js");
|
|
32
14
|
require("core-js/modules/es.string.iterator.js");
|
|
33
|
-
require("core-js/modules/web.dom-collections.for-each.js");
|
|
34
15
|
require("core-js/modules/web.dom-collections.iterator.js");
|
|
35
16
|
Object.defineProperty(exports, "__esModule", {
|
|
36
17
|
value: true
|
|
37
18
|
});
|
|
38
|
-
exports.
|
|
39
|
-
require("core-js/modules/es.array.
|
|
40
|
-
require("core-js/modules/es.
|
|
41
|
-
require("core-js/modules/es.promise.js");
|
|
19
|
+
exports.parseTexte = parseTexte;
|
|
20
|
+
require("core-js/modules/es.array.includes.js");
|
|
21
|
+
require("core-js/modules/es.function.name.js");
|
|
42
22
|
require("core-js/modules/es.regexp.exec.js");
|
|
23
|
+
require("core-js/modules/es.string.includes.js");
|
|
24
|
+
require("core-js/modules/es.string.match.js");
|
|
43
25
|
require("core-js/modules/es.string.replace.js");
|
|
44
|
-
|
|
45
|
-
var
|
|
46
|
-
var
|
|
47
|
-
|
|
48
|
-
function
|
|
49
|
-
function
|
|
50
|
-
function
|
|
51
|
-
function
|
|
52
|
-
function
|
|
53
|
-
function
|
|
54
|
-
function
|
|
55
|
-
function
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
26
|
+
require("core-js/modules/es.string.trim.js");
|
|
27
|
+
var _assert = _interopRequireDefault(require("assert"));
|
|
28
|
+
var _jsdom = require("jsdom");
|
|
29
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
30
|
+
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; } } }; }
|
|
31
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
32
|
+
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."); }
|
|
33
|
+
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; } }
|
|
34
|
+
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; }
|
|
35
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
36
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
37
|
+
function parseHeader(header) {
|
|
38
|
+
var headersMapping = [{
|
|
39
|
+
regex: /^(RAPPORT_)?ANNEXE(_|$)|^ETAT_/,
|
|
40
|
+
level: 0,
|
|
41
|
+
name: "Annexe"
|
|
42
|
+
}, {
|
|
43
|
+
regex: /^TOME_/,
|
|
44
|
+
level: 1,
|
|
45
|
+
name: "Tome"
|
|
46
|
+
}, {
|
|
47
|
+
regex: /^PARTIE_|^(PREMIERE|SECONDE|DEUXIEME|TROISIEME|QUATRIEME)_PARTIE(_|$)/,
|
|
48
|
+
level: 2,
|
|
49
|
+
name: "Partie"
|
|
50
|
+
}, {
|
|
51
|
+
regex: /^LIVRE_/,
|
|
52
|
+
level: 3,
|
|
53
|
+
name: "Livre"
|
|
54
|
+
}, {
|
|
55
|
+
regex: /^TITRE_/,
|
|
56
|
+
level: 4,
|
|
57
|
+
name: "Titre"
|
|
58
|
+
}, {
|
|
59
|
+
regex: /^SOUSTITRE_/,
|
|
60
|
+
level: 5,
|
|
61
|
+
name: "SousTitre"
|
|
62
|
+
}, {
|
|
63
|
+
regex: /^CHAPITRE_/,
|
|
64
|
+
level: 6,
|
|
65
|
+
name: "Chapitre"
|
|
66
|
+
}, {
|
|
67
|
+
regex: /^SECTION_/,
|
|
68
|
+
level: 7,
|
|
69
|
+
name: "Section"
|
|
70
|
+
}, {
|
|
71
|
+
regex: /^SOUSSECTION_/,
|
|
72
|
+
level: 8,
|
|
73
|
+
name: "SousSection"
|
|
74
|
+
}, {
|
|
75
|
+
regex: /^ARTICLES?_|^EXPOSE_DES_MOTIFS$/,
|
|
76
|
+
level: 9,
|
|
77
|
+
name: "Article"
|
|
78
|
+
}];
|
|
79
|
+
for (var _i = 0, _headersMapping = headersMapping; _i < _headersMapping.length; _i++) {
|
|
80
|
+
var _headersMapping$_i = _headersMapping[_i],
|
|
81
|
+
regex = _headersMapping$_i.regex,
|
|
82
|
+
level = _headersMapping$_i.level,
|
|
83
|
+
name = _headersMapping$_i.name;
|
|
84
|
+
if (header.match(regex)) {
|
|
85
|
+
return [level, name];
|
|
104
86
|
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* LLM model.
|
|
111
|
-
*/
|
|
112
|
-
var MODEL = null;
|
|
113
|
-
if (process && process.env && process.env.OPENAI_API_KEY || undefined) {
|
|
114
|
-
MODEL = new _openai.ChatOpenAI({
|
|
115
|
-
temperature: 0,
|
|
116
|
-
topP: 0.0,
|
|
117
|
-
model: "gpt-4o-mini",
|
|
118
|
-
apiKey: process && process.env && process.env.OPENAI_API_KEY || undefined,
|
|
119
|
-
maxTokens: -1
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* System input template for the LLM.
|
|
125
|
-
*/
|
|
126
|
-
var SYSTEM_TEMPLATE = "\n # Instructions :\n \n Tu es un expert de la loi et de l'analyse de pages HTML.\n Tu dois analyser un texte de loi afin de s\xE9parer et de structurer les \xE9l\xE9ments qui le composent. Le format d'entr\xE9e est HTML.\n\n Le texte est divis\xE9 en deux parties :\n A) un expos\xE9 des motifs qui indique les raisons pour lesquelles ce projet est soumis au Parlement. Il peut contenir 3 \xE9l\xE9ments : 1) une citation au d\xE9but d'un document, 2) le texte principal qui d\xE9veloppe les arguments de l'auteur \xE0 l'appui de la modification l\xE9gislative ou des dispositions nouvelles qu'il propose, 3) des paragraphes qui pr\xE9sentent les articles.\n B) le dispositif qui est la partie normative et r\xE9dig\xE9e en articles. Il peut comporter des divisions nomm\xE9es titres, chapitres, sections, sous-sections. Lorsqu'il y a un seul niveau de structure, on retrouvera le chapitre ; s\u2019il y a deux niveaux de structure, on retrouvera des chapitres puis des sections. S\u2019il y a trois niveaux de structure, on retrouvera des titres puis des chapitres puis des sections.\n\n Si le texte de loi ne comporte pas de division, le sommaire doit rester vide.\n Toutes les lignes qui d\xE9butent par un '\xAB' ne sont pas \xE0 prendre en compte dans les divisions\n Ta r\xE9ponse doit \xEAtre un JSON structur\xE9 avec les \xE9l\xE9ments du texte de loi en respectant le sch\xE9ma JSON fourni.\n";
|
|
127
|
-
var SILENT_LOG = false;
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
* Parses the given HTML string and returns the parsed textes loi.
|
|
131
|
-
*
|
|
132
|
-
* @param {string} html - The HTML string to parse.
|
|
133
|
-
* @return {Promise<{partial: {sommaire: any, loi: any, motifs: any, meta: any}, completed: {sommaire: any, loi: any, motifs: any, meta: any}}>} - The parsed textes loi, including the partial and completed versions.
|
|
134
|
-
*/
|
|
135
|
-
function parseTexteLoi(_x) {
|
|
136
|
-
return _parseTexteLoi.apply(this, arguments);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Cleans the given HTML string by removing unnecessary tags and content.
|
|
140
|
-
*
|
|
141
|
-
* @param {string} html - The HTML string to be cleaned.
|
|
142
|
-
* @return {string} The cleaned HTML string.
|
|
143
|
-
*/
|
|
144
|
-
function _parseTexteLoi() {
|
|
145
|
-
_parseTexteLoi = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(html) {
|
|
146
|
-
var options,
|
|
147
|
-
meta,
|
|
148
|
-
sommaire,
|
|
149
|
-
partialMotifs,
|
|
150
|
-
partialLoi,
|
|
151
|
-
exposeMotifs,
|
|
152
|
-
loi,
|
|
153
|
-
_args = arguments;
|
|
154
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
155
|
-
while (1) switch (_context.prev = _context.next) {
|
|
156
|
-
case 0:
|
|
157
|
-
options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {
|
|
158
|
-
silent: false
|
|
159
|
-
};
|
|
160
|
-
SILENT_LOG = options.silent;
|
|
161
|
-
(0, _logger.runLogFun)(console.info("Start extracting loi..."), options);
|
|
162
|
-
_context.next = 5;
|
|
163
|
-
return extractMetaDonnees(html);
|
|
164
|
-
case 5:
|
|
165
|
-
meta = _context.sent;
|
|
166
|
-
_context.next = 8;
|
|
167
|
-
return extractSommaire(html);
|
|
168
|
-
case 8:
|
|
169
|
-
sommaire = _context.sent;
|
|
170
|
-
_context.next = 11;
|
|
171
|
-
return extractMotifs(html);
|
|
172
|
-
case 11:
|
|
173
|
-
partialMotifs = _context.sent;
|
|
174
|
-
_context.next = 14;
|
|
175
|
-
return extractProjetLoi(html);
|
|
176
|
-
case 14:
|
|
177
|
-
partialLoi = _context.sent;
|
|
178
|
-
_context.next = 17;
|
|
179
|
-
return populateMotifs(partialMotifs, html);
|
|
180
|
-
case 17:
|
|
181
|
-
exposeMotifs = _context.sent;
|
|
182
|
-
_context.next = 20;
|
|
183
|
-
return populateProjetLoi(partialLoi, html);
|
|
184
|
-
case 20:
|
|
185
|
-
loi = _context.sent;
|
|
186
|
-
return _context.abrupt("return", {
|
|
187
|
-
sommaire: sommaire,
|
|
188
|
-
loi: loi,
|
|
189
|
-
exposeMotifs: exposeMotifs,
|
|
190
|
-
meta: meta
|
|
191
|
-
});
|
|
192
|
-
case 22:
|
|
193
|
-
case "end":
|
|
194
|
-
return _context.stop();
|
|
195
|
-
}
|
|
196
|
-
}, _callee);
|
|
197
|
-
}));
|
|
198
|
-
return _parseTexteLoi.apply(this, arguments);
|
|
199
|
-
}
|
|
200
|
-
function cleanHtml(html) {
|
|
201
|
-
var cleanedHtml = html.replace(/(<style[\w\W]+style>)/g, "");
|
|
202
|
-
cleanedHtml = cleanedHtml.replace(/(<head[\w\W]+head>)/g, "");
|
|
203
|
-
cleanedHtml = cleanedHtml.replace(/<img[^>]*>/g, "");
|
|
204
|
-
return cleanedHtml;
|
|
87
|
+
}
|
|
88
|
+
return [null, ""];
|
|
205
89
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
* Removes all HTML tags from the given HTML string and returns the cleaned text.
|
|
209
|
-
*
|
|
210
|
-
* @param {string} html - The HTML string from which to remove tags.
|
|
211
|
-
* @return {string} The cleaned text without any HTML tags.
|
|
212
|
-
*/
|
|
213
|
-
function removeHtmlTags(html) {
|
|
214
|
-
// Regular expression to match HTML tags
|
|
215
|
-
var htmlTagRegex = /<[^>]*>/g;
|
|
216
|
-
|
|
217
|
-
// Replace all HTML tags with an empty string
|
|
218
|
-
var textWithoutTags = html.replace(htmlTagRegex, "");
|
|
219
|
-
return textWithoutTags;
|
|
90
|
+
function cleanText(text) {
|
|
91
|
+
return (text === null || text === void 0 ? void 0 : text.replace(/[\n\t]+/g, "").trim()) || "";
|
|
220
92
|
}
|
|
93
|
+
var excludedAlineas = [/^Délibéré en séance publique/, /^Fait le/, /^Le Président,$/, /^Signé/];
|
|
94
|
+
function parseTexte(assembleeUrl, page) {
|
|
95
|
+
// Repair HTML.
|
|
96
|
+
var html = page.replace(/(<style[\w\W]+style>)/g, "");
|
|
221
97
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
98
|
+
// Extract subdivisions from HTML.
|
|
99
|
+
var _JSDOM = new _jsdom.JSDOM(html),
|
|
100
|
+
window = _JSDOM.window;
|
|
101
|
+
var document = window.document;
|
|
102
|
+
_assert["default"].strictEqual(document.children.length, 1);
|
|
103
|
+
var htmlElement = document.children[0];
|
|
104
|
+
_assert["default"].strictEqual(htmlElement.children.length, 2);
|
|
105
|
+
var bodyElement = htmlElement.children[1];
|
|
106
|
+
if (bodyElement.children.length < 3) {
|
|
107
|
+
// Occurs in http://www.assemblee-nationale.fr/15/textes/0326.asp.
|
|
108
|
+
window.close(); // Free memory.
|
|
109
|
+
return {
|
|
110
|
+
error: {
|
|
111
|
+
code: -1,
|
|
112
|
+
message: "Texte de loi sans contenu"
|
|
113
|
+
},
|
|
114
|
+
html: html,
|
|
115
|
+
page: page
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
_assert["default"].strictEqual(bodyElement.children[0].tagName, "DIV");
|
|
119
|
+
// First child is a DIV describing the document (Assemblée's header). Skip it for now.
|
|
120
|
+
var bodyChild = bodyElement.children[1];
|
|
121
|
+
_assert["default"].strictEqual(bodyChild.tagName, "BR");
|
|
122
|
+
var alineaElement = null;
|
|
123
|
+
var isMultiLinesHeader = false;
|
|
124
|
+
var level = null;
|
|
125
|
+
var levels = [];
|
|
126
|
+
var nextParentState = null;
|
|
127
|
+
var state = "nextBodyChild";
|
|
128
|
+
var subdivisions = [];
|
|
129
|
+
var subdivisionAlineas = null;
|
|
130
|
+
var subdivisionHeaders = null;
|
|
131
|
+
while (state !== null) {
|
|
132
|
+
switch (state) {
|
|
133
|
+
case "nextBodyChild":
|
|
134
|
+
if (bodyChild.nextElementSibling === null) {
|
|
135
|
+
// The document has been fully parsed.
|
|
136
|
+
state = null;
|
|
137
|
+
} else {
|
|
138
|
+
bodyChild = bodyChild.nextElementSibling;
|
|
139
|
+
if (bodyChild.tagName === "DIV") {
|
|
140
|
+
alineaElement = bodyChild.children[0];
|
|
141
|
+
if (alineaElement === undefined || bodyChild.id.includes("ftn")) {
|
|
142
|
+
// No alinea in current bodyChild: go to next bodyChild.
|
|
143
|
+
state = "nextBodyChild";
|
|
144
|
+
} else {
|
|
145
|
+
state = "alineaElement";
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
// <P/> is for footnotes
|
|
149
|
+
(0, _assert["default"])(["BR", "HR", "P"].includes(bodyChild.tagName), "Unexpected tag name \"".concat(bodyChild.tagName, "\" for body child"));
|
|
150
|
+
// Stay in the same state to go to next bodyChild.
|
|
250
151
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
structuredModel = MODEL.withStructuredOutput(FULL_TEXTE_SCHEMA);
|
|
258
|
-
chain = prompt.pipe(structuredModel);
|
|
259
|
-
_context2.next = 12;
|
|
260
|
-
return chain.invoke({
|
|
261
|
-
input: cleanedHtml,
|
|
262
|
-
debut: motifs.debut,
|
|
263
|
-
fin: motifs.fin
|
|
264
|
-
});
|
|
265
|
-
case 12:
|
|
266
|
-
articlePromptResult = _context2.sent;
|
|
267
|
-
motifs.texte = articlePromptResult.texte;
|
|
268
|
-
case 14:
|
|
269
|
-
(0, _logger.runLogFun)(console.info("Opération de peuplement de l'exposé des motifs terminée ✅"), {
|
|
270
|
-
silent: SILENT_LOG
|
|
271
|
-
});
|
|
272
|
-
(0, _logger.delimiter)(SILENT_LOG);
|
|
273
|
-
delete motifs.debut;
|
|
274
|
-
delete motifs.fin;
|
|
275
|
-
return _context2.abrupt("return", motifs);
|
|
276
|
-
case 19:
|
|
277
|
-
case "end":
|
|
278
|
-
return _context2.stop();
|
|
279
|
-
}
|
|
280
|
-
}, _callee2);
|
|
281
|
-
}));
|
|
282
|
-
return _populateMotifs.apply(this, arguments);
|
|
283
|
-
}
|
|
284
|
-
function populateProjetLoi(_x4, _x5) {
|
|
285
|
-
return _populateProjetLoi.apply(this, arguments);
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Asynchronously extracts the "expose motifs" from the given HTML.
|
|
289
|
-
*
|
|
290
|
-
* @param {string} html - The HTML string from which to extract the "expose motifs".
|
|
291
|
-
* @return {Promise<Record<string, any>>} - A Promise that resolves to the extracted "expose motifs" object.
|
|
292
|
-
* The object contains the following properties:
|
|
293
|
-
* - `debut`: The beginning of the "expose motifs".
|
|
294
|
-
* - `fin`: The end of the "expose motifs".
|
|
295
|
-
* @throws {Error} - If the extracted "expose motifs" do not validate against the EXPOSE_MOTIFS_SCHEMA.
|
|
296
|
-
*/
|
|
297
|
-
function _populateProjetLoi() {
|
|
298
|
-
_populateProjetLoi = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(partial, html) {
|
|
299
|
-
var cleanedHtml, articles, fullArticles, systemTemplate, prompt, structuredModel, chain, _iterator, _step, article, articlePromptResult, _iterator2, _step2, alinea, alineaPromptResult, projetLoi;
|
|
300
|
-
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
301
|
-
while (1) switch (_context3.prev = _context3.next) {
|
|
302
|
-
case 0:
|
|
303
|
-
(0, _logger.runLogFun)(console.group("Peuplement du projet loi..."), {
|
|
304
|
-
silent: SILENT_LOG
|
|
305
|
-
});
|
|
306
|
-
cleanedHtml = cleanHtml(html);
|
|
307
|
-
articles = partial.articles;
|
|
308
|
-
fullArticles = [];
|
|
309
|
-
systemTemplate = "\n # Instructions :\n\n Tu es un expert de la loi et de l'analyse de pages HTML.\n Tu dois analyser un texte de loi afin d'en extraire certaines parties. \n Le format d'entr\xE9e est du HTML. Le format de sortie est du texte.\n R\xE9cup\xE8re l'int\xE9gralit\xE9 du texte commen\xE7ant par :\n\n \"\"\"\n {debut}\n \"\"\"\n\n Et finissant par :\n\n \"\"\"\n {fin}\n \"\"\"\n ";
|
|
310
|
-
prompt = _prompts.ChatPromptTemplate.fromMessages([["system", systemTemplate], ["human", "{input}"]]);
|
|
311
|
-
structuredModel = MODEL.withStructuredOutput(FULL_TEXTE_SCHEMA);
|
|
312
|
-
chain = prompt.pipe(structuredModel);
|
|
313
|
-
_iterator = _createForOfIteratorHelper(articles);
|
|
314
|
-
_context3.prev = 9;
|
|
315
|
-
_iterator.s();
|
|
316
|
-
case 11:
|
|
317
|
-
if ((_step = _iterator.n()).done) {
|
|
318
|
-
_context3.next = 51;
|
|
152
|
+
}
|
|
153
|
+
break;
|
|
154
|
+
case "alineaElement":
|
|
155
|
+
switch (alineaElement.tagName) {
|
|
156
|
+
case "DIV":
|
|
157
|
+
state = "nextAlineaElement";
|
|
319
158
|
break;
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
159
|
+
case "H4":
|
|
160
|
+
// TODO
|
|
161
|
+
nextParentState = "nextAlineaElement";
|
|
162
|
+
state = "firstParagraphChild";
|
|
324
163
|
break;
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
break;
|
|
329
|
-
case 17:
|
|
330
|
-
_context3.next = 19;
|
|
331
|
-
return chain.invoke({
|
|
332
|
-
input: cleanedHtml,
|
|
333
|
-
debut: article.debut,
|
|
334
|
-
fin: article.fin
|
|
335
|
-
});
|
|
336
|
-
case 19:
|
|
337
|
-
articlePromptResult = _context3.sent;
|
|
338
|
-
article.texte = articlePromptResult.texte;
|
|
339
|
-
case 21:
|
|
340
|
-
_iterator2 = _createForOfIteratorHelper(article.alineas);
|
|
341
|
-
_context3.prev = 22;
|
|
342
|
-
_iterator2.s();
|
|
343
|
-
case 24:
|
|
344
|
-
if ((_step2 = _iterator2.n()).done) {
|
|
345
|
-
_context3.next = 37;
|
|
164
|
+
case "P":
|
|
165
|
+
nextParentState = "nextAlineaElement";
|
|
166
|
+
state = "firstParagraphChild";
|
|
346
167
|
break;
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
_context3.next = 29;
|
|
168
|
+
case "OL":
|
|
169
|
+
// TODO
|
|
170
|
+
state = "nextAlineaElement";
|
|
351
171
|
break;
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
172
|
+
case "TABLE":
|
|
173
|
+
nextParentState = "nextAlineaElement";
|
|
174
|
+
state = "firstParagraphChild";
|
|
175
|
+
break;
|
|
176
|
+
default:
|
|
177
|
+
return {
|
|
178
|
+
error: {
|
|
179
|
+
code: -2,
|
|
180
|
+
message: "Unexpected tag name for alinea element: ".concat(alineaElement.tagName)
|
|
181
|
+
},
|
|
182
|
+
html: html,
|
|
183
|
+
page: page
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
case "firstParagraphChild":
|
|
188
|
+
var headerText = alineaElement.textContent;
|
|
189
|
+
var nameComputed = (headerText || "").normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\(nouveau\)/, "").replace(/\(Pour coordination\)/, "").replace(/\(Supprimés?\)/, "").replace(/ /g, " ").replace(/[\-,.…]/g, "").trim().replace(/ {1,}/g, "_");
|
|
190
|
+
var nameUpper = nameComputed.toUpperCase();
|
|
191
|
+
var _parseHeader = parseHeader(nameUpper),
|
|
192
|
+
_parseHeader2 = _slicedToArray(_parseHeader, 2),
|
|
193
|
+
nextLevel = _parseHeader2[0],
|
|
194
|
+
paragraphType = _parseHeader2[1];
|
|
195
|
+
if (!nameUpper || nameUpper.match(/^(PROJET|PROPOSITION)_DE_LOI(_|$)/) !== null) {
|
|
196
|
+
// Occurs in:
|
|
197
|
+
// * http://www.assemblee-nationale.fr/15/textes/0232.asp
|
|
198
|
+
// * http://www.assemblee-nationale.fr/15/textes/0626.asp
|
|
199
|
+
// * http://www.assemblee-nationale.fr/15/textes/0676.asp
|
|
200
|
+
state = nextParentState;
|
|
372
201
|
break;
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
_iterator2.e(_context3.t0);
|
|
377
|
-
case 42:
|
|
378
|
-
_context3.prev = 42;
|
|
379
|
-
_iterator2.f();
|
|
380
|
-
return _context3.finish(42);
|
|
381
|
-
case 45:
|
|
382
|
-
(0, _logger.runLogFun)(console.info("Opération de peuplement du contenu du projet de loi terminée ✅"), {
|
|
383
|
-
silent: SILENT_LOG
|
|
384
|
-
});
|
|
385
|
-
delete article.debut;
|
|
386
|
-
delete article.fin;
|
|
387
|
-
fullArticles.push(article);
|
|
388
|
-
case 49:
|
|
389
|
-
_context3.next = 11;
|
|
202
|
+
} else if (nameUpper === "JEUX_OLYMPIQUES_ET_PARALYMPIQUES_DE_2024") {
|
|
203
|
+
// Occurs in http://www.assemblee-nationale.fr/15/textes/0676.asp
|
|
204
|
+
state = nextParentState;
|
|
390
205
|
break;
|
|
391
|
-
|
|
392
|
-
|
|
206
|
+
} else if (nameUpper === "TEXTE_DE_LA_COMMISSION_MIXTE_PARITAIRE") {
|
|
207
|
+
// Occurs in http://www.assemblee-nationale.fr/15/textes/1294.asp
|
|
208
|
+
state = nextParentState;
|
|
393
209
|
break;
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
}
|
|
415
|
-
}, _callee3, null, [[9, 53, 56, 59], [22, 39, 42, 45]]);
|
|
416
|
-
}));
|
|
417
|
-
return _populateProjetLoi.apply(this, arguments);
|
|
418
|
-
}
|
|
419
|
-
function extractMotifs(_x6) {
|
|
420
|
-
return _extractMotifs.apply(this, arguments);
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Asynchronously extracts the metadata from the given HTML.
|
|
424
|
-
*
|
|
425
|
-
* @param {string} html - The HTML string from which to extract the metadata.
|
|
426
|
-
* @return {Promise<Record<string, any>>} - A Promise that resolves to the extracted metadata object.
|
|
427
|
-
* The object contains the following properties:
|
|
428
|
-
* - `documentRef`: The reference of the document.
|
|
429
|
-
* - `titre`: The title of the document.
|
|
430
|
-
* - `numeroTexte`: The number of the text.
|
|
431
|
-
* - `procedureAcceleree`: The accelerated procedure.
|
|
432
|
-
* @throws {Error} - If the extracted metadata do not validate against the META_DONNEES_SCHEMA.
|
|
433
|
-
*/
|
|
434
|
-
function _extractMotifs() {
|
|
435
|
-
_extractMotifs = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(html) {
|
|
436
|
-
var cleanedHtml, structuredModel, motifsSystemTemplate, prompt, chain, motifsPromptResult, ajv;
|
|
437
|
-
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
438
|
-
while (1) switch (_context4.prev = _context4.next) {
|
|
439
|
-
case 0:
|
|
440
|
-
(0, _logger.runLogFun)(console.group("Parsing expose motifs..."), {
|
|
441
|
-
silent: SILENT_LOG
|
|
442
|
-
});
|
|
443
|
-
cleanedHtml = cleanHtml(html);
|
|
444
|
-
cleanedHtml = removeHtmlTags(cleanedHtml);
|
|
445
|
-
structuredModel = MODEL.withStructuredOutput(EXPOSE_MOTIFS_SCHEMA);
|
|
446
|
-
motifsSystemTemplate = "\n ".concat(SYSTEM_TEMPLATE, "\n\n # Examples: \n\n ## Exemple 1 User Input :\n \"\"\"\n {example1}\n \"\"\"\n \n ## Exemple 1 JSON Output :\n \"\"\"\n {output1}\n \"\"\"\n\n ## Exemple 2 User Input :\n \"\"\"\n {example2}\n \"\"\"\n \n ## Exemple 2 JSON Output :\n \"\"\"\n {output2}\n \"\"\"\n ");
|
|
447
|
-
prompt = _prompts.ChatPromptTemplate.fromMessages([["system", motifsSystemTemplate], ["human", "{input}"]]);
|
|
448
|
-
chain = prompt.pipe(structuredModel);
|
|
449
|
-
_context4.next = 9;
|
|
450
|
-
return chain.invoke({
|
|
451
|
-
input: cleanedHtml,
|
|
452
|
-
example1: EXAMPLES.PRJLANR5L16B0914.input,
|
|
453
|
-
example2: EXAMPLES.PRJLANR5L16B2424.input,
|
|
454
|
-
output1: EXAMPLES.PRJLANR5L16B0914.motifs,
|
|
455
|
-
output2: EXAMPLES.PRJLANR5L16B2424.motifs
|
|
456
|
-
});
|
|
457
|
-
case 9:
|
|
458
|
-
motifsPromptResult = _context4.sent;
|
|
459
|
-
// console.log(JSON.stringify(motifsPromptResult))
|
|
460
|
-
(0, _logger.runLogFun)(console.table([["Début", motifsPromptResult.debut.substring(0, 30)], ["Fin", motifsPromptResult.fin.substring(0, 30)]]), {
|
|
461
|
-
silent: SILENT_LOG
|
|
462
|
-
});
|
|
463
|
-
(0, _logger.runLogFun)(console.groupEnd(), {
|
|
464
|
-
silent: SILENT_LOG
|
|
465
|
-
});
|
|
466
|
-
(0, _logger.delimiter)();
|
|
467
|
-
ajv = new _ajv["default"]();
|
|
468
|
-
if (!ajv.validate(EXPOSE_MOTIFS_SCHEMA, motifsPromptResult)) {
|
|
469
|
-
_context4.next = 17;
|
|
470
|
-
break;
|
|
471
|
-
}
|
|
472
|
-
(0, _logger.runLogFun)(console.info("Exposé des motifs OK 👌"), {
|
|
473
|
-
silent: SILENT_LOG
|
|
474
|
-
});
|
|
475
|
-
return _context4.abrupt("return", motifsPromptResult);
|
|
476
|
-
case 17:
|
|
477
|
-
(0, _logger.runLogFun)(console.warn("Exposé des motifs KO ❌"), {
|
|
478
|
-
silent: SILENT_LOG
|
|
479
|
-
});
|
|
480
|
-
return _context4.abrupt("return", {});
|
|
481
|
-
case 19:
|
|
482
|
-
case "end":
|
|
483
|
-
return _context4.stop();
|
|
484
|
-
}
|
|
485
|
-
}, _callee4);
|
|
486
|
-
}));
|
|
487
|
-
return _extractMotifs.apply(this, arguments);
|
|
488
|
-
}
|
|
489
|
-
function extractMetaDonnees(_x7) {
|
|
490
|
-
return _extractMetaDonnees.apply(this, arguments);
|
|
491
|
-
}
|
|
492
|
-
/**
|
|
493
|
-
* Asynchronously extracts the "projet de loi" from the given HTML.
|
|
494
|
-
*
|
|
495
|
-
* @param {string} html - The HTML string from which to extract the "projet de loi".
|
|
496
|
-
* @return {Promise<Record<string, any>>} - A Promise that resolves to the extracted "projet de loi" object.
|
|
497
|
-
* The object contains the following properties:
|
|
498
|
-
* - `articles`: An array of article objects, each containing the following properties:
|
|
499
|
-
* - `numeroArticle`: The number of the article.
|
|
500
|
-
* - `cardinal`: The cardinal of the article.
|
|
501
|
-
* - `titre`: The title of the article.
|
|
502
|
-
* - `debut`: The beginning of the article.
|
|
503
|
-
* - `fin`: The end of the article.
|
|
504
|
-
* - `alineas`: An array of alineas.
|
|
505
|
-
* @throws {Error} - If the extracted "projet de loi" does not validate against the PROJET_LOI_SCHEMA.
|
|
506
|
-
*/
|
|
507
|
-
function _extractMetaDonnees() {
|
|
508
|
-
_extractMetaDonnees = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(html) {
|
|
509
|
-
var cleanedHtml, structuredModel, metaDonneesSystemTemplate, prompt, chain, result, ajv;
|
|
510
|
-
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
511
|
-
while (1) switch (_context5.prev = _context5.next) {
|
|
512
|
-
case 0:
|
|
513
|
-
(0, _logger.delimiter)();
|
|
514
|
-
cleanedHtml = cleanHtml(html);
|
|
515
|
-
cleanedHtml = removeHtmlTags(cleanedHtml);
|
|
516
|
-
structuredModel = MODEL.withStructuredOutput(META_DONNEES_SCHEMA);
|
|
517
|
-
metaDonneesSystemTemplate = "\n ".concat(SYSTEM_TEMPLATE, "\n ");
|
|
518
|
-
prompt = _prompts.ChatPromptTemplate.fromMessages([["system", metaDonneesSystemTemplate], ["human", "{input}"]]);
|
|
519
|
-
chain = prompt.pipe(structuredModel);
|
|
520
|
-
_context5.next = 9;
|
|
521
|
-
return chain.invoke({
|
|
522
|
-
input: cleanedHtml,
|
|
523
|
-
example1: EXAMPLES.PRJLANR5L16B0914.input,
|
|
524
|
-
example2: EXAMPLES.PRJLANR5L16B2424.input,
|
|
525
|
-
output1: EXAMPLES.PRJLANR5L16B0914.meta,
|
|
526
|
-
output2: EXAMPLES.PRJLANR5L16B2424.meta
|
|
527
|
-
});
|
|
528
|
-
case 9:
|
|
529
|
-
result = _context5.sent;
|
|
530
|
-
console.group("Meta-données");
|
|
531
|
-
console.table([["Référence", result.documentRef], ["Titre", result.titre], ["Numéro du texte", result.numeroTexte], ["Procédure accéléré", result.procedureAcceleree]]);
|
|
532
|
-
console.groupEnd();
|
|
533
|
-
(0, _logger.delimiter)();
|
|
534
|
-
ajv = new _ajv["default"]();
|
|
535
|
-
if (!ajv.validate(META_DONNEES_SCHEMA, result)) {
|
|
536
|
-
_context5.next = 18;
|
|
537
|
-
break;
|
|
210
|
+
}
|
|
211
|
+
var lineHtml = cleanText(alineaElement.outerHTML);
|
|
212
|
+
var lineText = cleanText(alineaElement.textContent);
|
|
213
|
+
if (nextLevel === null) {
|
|
214
|
+
// It is a regular alinea
|
|
215
|
+
// Exclude some alineas
|
|
216
|
+
var excludeAlinea = false;
|
|
217
|
+
var _iterator = _createForOfIteratorHelper(excludedAlineas),
|
|
218
|
+
_step;
|
|
219
|
+
try {
|
|
220
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
221
|
+
var regex = _step.value;
|
|
222
|
+
if (regex.test(lineText)) {
|
|
223
|
+
excludeAlinea = true;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
} catch (err) {
|
|
227
|
+
_iterator.e(err);
|
|
228
|
+
} finally {
|
|
229
|
+
_iterator.f();
|
|
538
230
|
}
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
});
|
|
542
|
-
return _context5.abrupt("return", result);
|
|
543
|
-
case 18:
|
|
544
|
-
(0, _logger.runLogFun)(console.warn("Meta-données non-conforme ❌"), {
|
|
545
|
-
silent: SILENT_LOG
|
|
546
|
-
});
|
|
547
|
-
return _context5.abrupt("return", {});
|
|
548
|
-
case 20:
|
|
549
|
-
case "end":
|
|
550
|
-
return _context5.stop();
|
|
551
|
-
}
|
|
552
|
-
}, _callee5);
|
|
553
|
-
}));
|
|
554
|
-
return _extractMetaDonnees.apply(this, arguments);
|
|
555
|
-
}
|
|
556
|
-
function extractProjetLoi(_x8) {
|
|
557
|
-
return _extractProjetLoi.apply(this, arguments);
|
|
558
|
-
}
|
|
559
|
-
function _extractProjetLoi() {
|
|
560
|
-
_extractProjetLoi = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(html) {
|
|
561
|
-
var cleanedHtml, structuredModel, projetLoiSystemTemplate, prompt, chain, articlesPromptResult, _iterator3, _step3, article, ajv;
|
|
562
|
-
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
563
|
-
while (1) switch (_context6.prev = _context6.next) {
|
|
564
|
-
case 0:
|
|
565
|
-
(0, _logger.runLogFun)(console.group("Parsing loi..."), {
|
|
566
|
-
silent: SILENT_LOG
|
|
567
|
-
});
|
|
568
|
-
cleanedHtml = cleanHtml(html);
|
|
569
|
-
structuredModel = MODEL.withStructuredOutput(PROJET_LOI_SCHEMA);
|
|
570
|
-
projetLoiSystemTemplate = "\n ".concat(SYSTEM_TEMPLATE, "\n\n # Examples: \n\n ## Exemple 1 User Input :\n \"\"\"\n {example1}\n \"\"\"\n \n ## Exemple 1 JSON Output :\n \"\"\"\n {output1}\n \"\"\"\n\n ## Exemple 2 User Input :\n \"\"\"\n {example2}\n \"\"\"\n \n ## Exemple 2 JSON Output :\n \"\"\"\n {output2}\n \"\"\"\n ");
|
|
571
|
-
prompt = _prompts.ChatPromptTemplate.fromMessages([["system", projetLoiSystemTemplate], ["human", "{input}"]]);
|
|
572
|
-
chain = prompt.pipe(structuredModel);
|
|
573
|
-
_context6.next = 8;
|
|
574
|
-
return chain.invoke({
|
|
575
|
-
input: cleanedHtml,
|
|
576
|
-
example1: EXAMPLES.PRJLANR5L16B0914.input,
|
|
577
|
-
example2: EXAMPLES.PRJLANR5L16B2424.input,
|
|
578
|
-
output1: EXAMPLES.PRJLANR5L16B0914.loi,
|
|
579
|
-
output2: EXAMPLES.PRJLANR5L16B2424.loi
|
|
580
|
-
});
|
|
581
|
-
case 8:
|
|
582
|
-
articlesPromptResult = _context6.sent;
|
|
583
|
-
(0, _logger.runLogFun)(console.log("Found ", articlesPromptResult.articles.length, " articles."), {
|
|
584
|
-
silent: SILENT_LOG
|
|
585
|
-
});
|
|
586
|
-
_iterator3 = _createForOfIteratorHelper(articlesPromptResult.articles);
|
|
587
|
-
_context6.prev = 11;
|
|
588
|
-
_iterator3.s();
|
|
589
|
-
case 13:
|
|
590
|
-
if ((_step3 = _iterator3.n()).done) {
|
|
591
|
-
_context6.next = 20;
|
|
231
|
+
if (excludeAlinea) {
|
|
232
|
+
state = nextParentState;
|
|
592
233
|
break;
|
|
593
234
|
}
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
break;
|
|
605
|
-
case 22:
|
|
606
|
-
_context6.prev = 22;
|
|
607
|
-
_context6.t0 = _context6["catch"](11);
|
|
608
|
-
_iterator3.e(_context6.t0);
|
|
609
|
-
case 25:
|
|
610
|
-
_context6.prev = 25;
|
|
611
|
-
_iterator3.f();
|
|
612
|
-
return _context6.finish(25);
|
|
613
|
-
case 28:
|
|
614
|
-
(0, _logger.runLogFun)(console.table(articlesPromptResult.articles.map(function (article) {
|
|
615
|
-
return [article.numeroArticle, article.titre, article.debut.substring(0, 10), article.fin.substring(0, 10), "Nombre d'alineas : ".concat(article.alineas.length)];
|
|
616
|
-
})), {
|
|
617
|
-
silent: SILENT_LOG
|
|
618
|
-
});
|
|
619
|
-
(0, _logger.runLogFun)(console.groupEnd(), {
|
|
620
|
-
silent: SILENT_LOG
|
|
621
|
-
});
|
|
622
|
-
ajv = new _ajv["default"]();
|
|
623
|
-
if (!ajv.validate(PROJET_LOI_SCHEMA, articlesPromptResult)) {
|
|
624
|
-
_context6.next = 35;
|
|
625
|
-
break;
|
|
235
|
+
if (subdivisionHeaders.length === 0 || isMultiLinesHeader && subdivisionAlineas.length === 0) {
|
|
236
|
+
subdivisionHeaders.push({
|
|
237
|
+
texte: lineText,
|
|
238
|
+
html: lineHtml
|
|
239
|
+
});
|
|
240
|
+
} else {
|
|
241
|
+
subdivisionAlineas.push({
|
|
242
|
+
texte: lineText,
|
|
243
|
+
html: lineHtml
|
|
244
|
+
});
|
|
626
245
|
}
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
});
|
|
630
|
-
(0, _logger.delimiter)();
|
|
631
|
-
return _context6.abrupt("return", articlesPromptResult);
|
|
632
|
-
case 35:
|
|
633
|
-
(0, _logger.runLogFun)(console.warn("Projet de loi KO ❌"), {
|
|
634
|
-
silent: SILENT_LOG
|
|
635
|
-
});
|
|
636
|
-
(0, _logger.delimiter)();
|
|
637
|
-
return _context6.abrupt("return", {});
|
|
638
|
-
case 38:
|
|
639
|
-
case "end":
|
|
640
|
-
return _context6.stop();
|
|
641
|
-
}
|
|
642
|
-
}, _callee6, null, [[11, 22, 25, 28]]);
|
|
643
|
-
}));
|
|
644
|
-
return _extractProjetLoi.apply(this, arguments);
|
|
645
|
-
}
|
|
646
|
-
function extractAlineas(_x9, _x10) {
|
|
647
|
-
return _extractAlineas.apply(this, arguments);
|
|
648
|
-
}
|
|
649
|
-
/**
|
|
650
|
-
* Asynchronously extracts the "sommaire" (outline) from the given HTML.
|
|
651
|
-
*
|
|
652
|
-
* @param {string} html - The HTML string from which to extract the "sommaire".
|
|
653
|
-
* @return {Promise<Record<string, any>>} - A Promise that resolves to the extracted "sommaire" object.
|
|
654
|
-
* The object contains the following properties:
|
|
655
|
-
* - `sommaire`: An array of main division objects, each containing the following properties:
|
|
656
|
-
* - `numeroDivision`: The number of the main division.
|
|
657
|
-
* - `titre`: The title of the main division.
|
|
658
|
-
* - `typeDivision`: The type of content in the main division.
|
|
659
|
-
* - `sequence`: The sequence of the main division.
|
|
660
|
-
* - `parent`: The parent of the main division.
|
|
661
|
-
* @throws {Error} - If the extracted "sommaire" does not validate against the SOMMAIRE_SCHEMA.
|
|
662
|
-
*/
|
|
663
|
-
function _extractAlineas() {
|
|
664
|
-
_extractAlineas = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(html, article) {
|
|
665
|
-
var cleanedHtml, structuredModel, alineasSystemTemplate, prompt, chain, alineasPromptResult, ajv;
|
|
666
|
-
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
667
|
-
while (1) switch (_context7.prev = _context7.next) {
|
|
668
|
-
case 0:
|
|
669
|
-
(0, _logger.runLogFun)(console.group("Parsing alineas..."), {
|
|
670
|
-
silent: SILENT_LOG
|
|
671
|
-
});
|
|
672
|
-
cleanedHtml = cleanHtml(html);
|
|
673
|
-
structuredModel = MODEL.withStructuredOutput(ALINEA_SCHEMA);
|
|
674
|
-
alineasSystemTemplate = "\n ".concat(SYSTEM_TEMPLATE, "\n\n Extrais tous les alineas de la portion de texte commen\xE7ant par \xAB {debut} \xBB et finissant par \xAB {fin} \xBB.\n Un alin\xE9a contiennent toujours une balise \xAB <img \xBB.\n\n # Examples: \n\n ## Exemple 1 User Input :\n \"\"\"\n {example1}\n \"\"\"\n \n ## Exemple 1 JSON Output :\n \"\"\"\n {output1}\n \"\"\"\n ");
|
|
675
|
-
prompt = _prompts.ChatPromptTemplate.fromMessages([["system", alineasSystemTemplate], ["human", "{input}"]]);
|
|
676
|
-
chain = prompt.pipe(structuredModel);
|
|
677
|
-
_context7.next = 8;
|
|
678
|
-
return chain.invoke({
|
|
679
|
-
input: cleanedHtml,
|
|
680
|
-
debut: article.debut,
|
|
681
|
-
fin: article.fin,
|
|
682
|
-
example1: EXAMPLES.PRJLANR5L16B2424.input,
|
|
683
|
-
output1: EXAMPLES.PRJLANR5L16B2424.alineas
|
|
684
|
-
});
|
|
685
|
-
case 8:
|
|
686
|
-
alineasPromptResult = _context7.sent;
|
|
687
|
-
ajv = new _ajv["default"]();
|
|
688
|
-
if (!ajv.validate(ALINEA_SCHEMA, alineasPromptResult)) {
|
|
689
|
-
_context7.next = 15;
|
|
690
|
-
break;
|
|
246
|
+
if (isMultiLinesHeader && subdivisionHeaders.length >= 2) {
|
|
247
|
+
isMultiLinesHeader = false;
|
|
691
248
|
}
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
(0
|
|
699
|
-
|
|
700
|
-
case 15:
|
|
701
|
-
(0, _logger.runLogFun)(console.warn("Alineas KO"), {
|
|
702
|
-
silent: SILENT_LOG
|
|
703
|
-
});
|
|
704
|
-
(0, _logger.delimiter)();
|
|
705
|
-
return _context7.abrupt("return", {});
|
|
706
|
-
case 18:
|
|
707
|
-
case "end":
|
|
708
|
-
return _context7.stop();
|
|
709
|
-
}
|
|
710
|
-
}, _callee7);
|
|
711
|
-
}));
|
|
712
|
-
return _extractAlineas.apply(this, arguments);
|
|
713
|
-
}
|
|
714
|
-
function extractSommaire(_x11) {
|
|
715
|
-
return _extractSommaire.apply(this, arguments);
|
|
716
|
-
}
|
|
717
|
-
function _extractSommaire() {
|
|
718
|
-
_extractSommaire = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(html) {
|
|
719
|
-
var cleanedHtml, structuredModel, sommaireSystemTemplate, prompt, chain, sommairePromptResult, ajv;
|
|
720
|
-
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
721
|
-
while (1) switch (_context8.prev = _context8.next) {
|
|
722
|
-
case 0:
|
|
723
|
-
cleanedHtml = cleanHtml(html);
|
|
724
|
-
cleanedHtml = removeHtmlTags(cleanedHtml);
|
|
725
|
-
structuredModel = MODEL.withStructuredOutput(SOMMAIRE_SCHEMA);
|
|
726
|
-
sommaireSystemTemplate = "\n ".concat(SYSTEM_TEMPLATE, "\n\n # Examples: \n\n ## Exemple 1 User Input :\n \"\"\"\n {example1}\n \"\"\"\n \n ## Exemple 1 JSON Output :\n \"\"\"\n {output1}\n \"\"\"\n\n ## Exemple 2 User Input :\n \"\"\"\n {example2}\n \"\"\"\n \n ## Exemple 2 JSON Output :\n \"\"\"\n {output2}\n \"\"\"\n ");
|
|
727
|
-
prompt = _prompts.ChatPromptTemplate.fromMessages([["system", sommaireSystemTemplate], ["human", "{input}"]]);
|
|
728
|
-
chain = prompt.pipe(structuredModel);
|
|
729
|
-
_context8.next = 8;
|
|
730
|
-
return chain.invoke({
|
|
731
|
-
input: cleanedHtml,
|
|
732
|
-
example1: EXAMPLES.PRJLANR5L16B2014.input,
|
|
733
|
-
output1: EXAMPLES.PRJLANR5L16B2014.sommaire,
|
|
734
|
-
example2: EXAMPLES.PRJLANR5L16B0914.input,
|
|
735
|
-
output2: EXAMPLES.PRJLANR5L16B0914.sommaire
|
|
736
|
-
});
|
|
737
|
-
case 8:
|
|
738
|
-
sommairePromptResult = _context8.sent;
|
|
739
|
-
if (sommairePromptResult.sommaire) {
|
|
740
|
-
_context8.next = 13;
|
|
741
|
-
break;
|
|
249
|
+
// Skip paragraph.
|
|
250
|
+
state = nextParentState;
|
|
251
|
+
break;
|
|
252
|
+
} else if (nextLevel !== null) {
|
|
253
|
+
// It is a header
|
|
254
|
+
level = nextLevel;
|
|
255
|
+
while (levels.length > 0 && level < levels[levels.length - 1]) {
|
|
256
|
+
levels.pop();
|
|
742
257
|
}
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
});
|
|
746
|
-
(0, _logger.delimiter)();
|
|
747
|
-
return _context8.abrupt("return", {
|
|
748
|
-
sommaire: []
|
|
749
|
-
});
|
|
750
|
-
case 13:
|
|
751
|
-
(0, _logger.runLogFun)(console.group("Sommaire"), {
|
|
752
|
-
silent: SILENT_LOG
|
|
753
|
-
});
|
|
754
|
-
(0, _logger.runLogFun)(console.log("Found ", sommairePromptResult.sommaire.length, " main divisions (level 1)."), {
|
|
755
|
-
silent: SILENT_LOG
|
|
756
|
-
});
|
|
757
|
-
(0, _logger.runLogFun)(console.table(sommairePromptResult.sommaire.map(function (item) {
|
|
758
|
-
return [item.sequence, item.titre, item.typeDivision, item.parent];
|
|
759
|
-
})), {
|
|
760
|
-
silent: SILENT_LOG
|
|
761
|
-
});
|
|
762
|
-
(0, _logger.runLogFun)(console.groupEnd(), {
|
|
763
|
-
silent: SILENT_LOG
|
|
764
|
-
});
|
|
765
|
-
ajv = new _ajv["default"]();
|
|
766
|
-
if (!ajv.validate(SOMMAIRE_SCHEMA, sommairePromptResult)) {
|
|
767
|
-
_context8.next = 22;
|
|
768
|
-
break;
|
|
258
|
+
if (levels.length === 0 || level > levels[levels.length - 1]) {
|
|
259
|
+
levels.push(level);
|
|
769
260
|
}
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
261
|
+
subdivisionAlineas = [];
|
|
262
|
+
subdivisionHeaders = [{
|
|
263
|
+
texte: lineText,
|
|
264
|
+
html: lineHtml
|
|
265
|
+
}];
|
|
266
|
+
|
|
267
|
+
// Articles & "Exposé des motifs" are the only divisions without second title.
|
|
268
|
+
isMultiLinesHeader = nameUpper.match(/^ARTICLES?_/) === null && nameUpper.match(/^EXPOSE_DES_MOTIFS$/) === null;
|
|
269
|
+
subdivisions.push({
|
|
270
|
+
id: "D_" + nameComputed,
|
|
271
|
+
type: paragraphType,
|
|
272
|
+
niveau: level + 1,
|
|
273
|
+
niveauRelatif: levels.length,
|
|
274
|
+
titres: subdivisionHeaders,
|
|
275
|
+
alineas: subdivisionAlineas
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
state = nextParentState;
|
|
279
|
+
break;
|
|
280
|
+
case "nextAlineaElement":
|
|
281
|
+
alineaElement = alineaElement.nextElementSibling;
|
|
282
|
+
if (alineaElement === null) {
|
|
283
|
+
// The bodyChild has been fully parsed. Go to next bodyChild
|
|
284
|
+
state = "nextBodyChild";
|
|
285
|
+
} else {
|
|
286
|
+
state = "alineaElement";
|
|
287
|
+
}
|
|
288
|
+
break;
|
|
289
|
+
default:
|
|
290
|
+
throw "Unexpected state: ".concat(state);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
window.close(); // Free memory.
|
|
294
|
+
|
|
295
|
+
return {
|
|
296
|
+
error: null,
|
|
297
|
+
html: html,
|
|
298
|
+
page: page,
|
|
299
|
+
subdivisions: subdivisions,
|
|
300
|
+
url: assembleeUrl
|
|
301
|
+
};
|
|
790
302
|
}
|
|
791
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfb3BlbmFpIiwicmVxdWlyZSIsIl9wcm9tcHRzIiwiX2FqdiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbG9nZ2VyIiwib2JqIiwiX19lc01vZHVsZSIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJrZXkiLCJ2YWx1ZSIsIl90b1Byb3BlcnR5S2V5IiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwiX3R5cGVvZiIsIlN0cmluZyIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIk51bWJlciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiYWxsb3dBcnJheUxpa2UiLCJpdCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiRiIsInMiLCJuIiwiZG9uZSIsIl9lIiwiZiIsIm5vcm1hbENvbXBsZXRpb24iLCJkaWRFcnIiLCJlcnIiLCJzdGVwIiwibmV4dCIsIl9lMiIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiYXJyIiwibGVuIiwiYXJyMiIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJoYXNPd25Qcm9wZXJ0eSIsImEiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImgiLCJsIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJfaW52b2tlIiwiQXN5bmNJdGVyYXRvciIsImludm9rZSIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsInJlc3VsdE5hbWUiLCJuZXh0TG9jIiwicHVzaFRyeUVudHJ5IiwidHJ5TG9jIiwiY2F0Y2hMb2MiLCJmaW5hbGx5TG9jIiwiYWZ0ZXJMb2MiLCJ0cnlFbnRyaWVzIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJpbmZvIiwiZXJyb3IiLCJfYXN5bmNUb0dlbmVyYXRvciIsImZuIiwic2VsZiIsImFyZ3MiLCJ1bmRlZmluZWQiLCJBTElORUFfU0NIRU1BIiwiRVhQT1NFX01PVElGU19TQ0hFTUEiLCJNRVRBX0RPTk5FRVNfU0NIRU1BIiwiUFJPSkVUX0xPSV9TQ0hFTUEiLCJTT01NQUlSRV9TQ0hFTUEiLCJFWEFNUExFUyIsIlBSSkxBTlI1TDE2QjA5MTQiLCJtb3RpZnMiLCJpbnB1dCIsImxvaSIsIm1ldGEiLCJzb21tYWlyZSIsIlBSSkxBTlI1TDE2QjIwMTQiLCJQUkpMQU5SNUwxNkIyNDI0IiwiYWxpbmVhcyIsIkZVTExfVEVYVEVfU0NIRU1BIiwiJHNjaGVtYSIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJwcm9wZXJ0aWVzIiwidGV4dGUiLCJyZXF1aXJlZCIsIk1PREVMIiwicHJvY2VzcyIsImVudiIsInByb2Nlc3MuZW52IiwiT1BFTkFJX0FQSV9LRVkiLCJDaGF0T3BlbkFJIiwidGVtcGVyYXR1cmUiLCJ0b3BQIiwibW9kZWwiLCJhcGlLZXkiLCJtYXhUb2tlbnMiLCJTWVNURU1fVEVNUExBVEUiLCJTSUxFTlRfTE9HIiwicGFyc2VUZXh0ZUxvaSIsIl94IiwiX3BhcnNlVGV4dGVMb2kiLCJfY2FsbGVlIiwiaHRtbCIsIm9wdGlvbnMiLCJwYXJ0aWFsTW90aWZzIiwicGFydGlhbExvaSIsImV4cG9zZU1vdGlmcyIsIl9hcmdzIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInNpbGVudCIsInJ1bkxvZ0Z1biIsImNvbnNvbGUiLCJleHRyYWN0TWV0YURvbm5lZXMiLCJleHRyYWN0U29tbWFpcmUiLCJleHRyYWN0TW90aWZzIiwiZXh0cmFjdFByb2pldExvaSIsInBvcHVsYXRlTW90aWZzIiwicG9wdWxhdGVQcm9qZXRMb2kiLCJjbGVhbkh0bWwiLCJjbGVhbmVkSHRtbCIsInJlcGxhY2UiLCJyZW1vdmVIdG1sVGFncyIsImh0bWxUYWdSZWdleCIsInRleHRXaXRob3V0VGFncyIsIl94MiIsIl94MyIsIl9wb3B1bGF0ZU1vdGlmcyIsIl9jYWxsZWUyIiwic3lzdGVtVGVtcGxhdGUiLCJwcm9tcHQiLCJzdHJ1Y3R1cmVkTW9kZWwiLCJjaGFpbiIsImFydGljbGVQcm9tcHRSZXN1bHQiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJkZWJ1dCIsImZpbiIsIkNoYXRQcm9tcHRUZW1wbGF0ZSIsImZyb21NZXNzYWdlcyIsIndpdGhTdHJ1Y3R1cmVkT3V0cHV0IiwicGlwZSIsImRlbGltaXRlciIsIl94NCIsIl94NSIsIl9wb3B1bGF0ZVByb2pldExvaSIsIl9jYWxsZWUzIiwicGFydGlhbCIsImFydGljbGVzIiwiZnVsbEFydGljbGVzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJhcnRpY2xlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImFsaW5lYSIsImFsaW5lYVByb21wdFJlc3VsdCIsInByb2pldExvaSIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImdyb3VwIiwidDAiLCJ0MSIsImdyb3VwRW5kIiwiX3g2IiwiX2V4dHJhY3RNb3RpZnMiLCJfY2FsbGVlNCIsIm1vdGlmc1N5c3RlbVRlbXBsYXRlIiwibW90aWZzUHJvbXB0UmVzdWx0IiwiYWp2IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiY29uY2F0IiwiZXhhbXBsZTEiLCJleGFtcGxlMiIsIm91dHB1dDEiLCJvdXRwdXQyIiwidGFibGUiLCJzdWJzdHJpbmciLCJBanYiLCJ2YWxpZGF0ZSIsIndhcm4iLCJfeDciLCJfZXh0cmFjdE1ldGFEb25uZWVzIiwiX2NhbGxlZTUiLCJtZXRhRG9ubmVlc1N5c3RlbVRlbXBsYXRlIiwicmVzdWx0IiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiZG9jdW1lbnRSZWYiLCJ0aXRyZSIsIm51bWVyb1RleHRlIiwicHJvY2VkdXJlQWNjZWxlcmVlIiwiX3g4IiwiX2V4dHJhY3RQcm9qZXRMb2kiLCJfY2FsbGVlNiIsInByb2pldExvaVN5c3RlbVRlbXBsYXRlIiwiYXJ0aWNsZXNQcm9tcHRSZXN1bHQiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwibG9nIiwiZXh0cmFjdEFsaW5lYXMiLCJtYXAiLCJudW1lcm9BcnRpY2xlIiwiX3g5IiwiX3gxMCIsIl9leHRyYWN0QWxpbmVhcyIsIl9jYWxsZWU3IiwiYWxpbmVhc1N5c3RlbVRlbXBsYXRlIiwiYWxpbmVhc1Byb21wdFJlc3VsdCIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsIl94MTEiLCJfZXh0cmFjdFNvbW1haXJlIiwiX2NhbGxlZTgiLCJzb21tYWlyZVN5c3RlbVRlbXBsYXRlIiwic29tbWFpcmVQcm9tcHRSZXN1bHQiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJpdGVtIiwic2VxdWVuY2UiLCJ0eXBlRGl2aXNpb24iLCJwYXJlbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2Vycy90ZXh0ZXNfbG9pcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGF0T3BlbkFJIH0gZnJvbSBcIkBsYW5nY2hhaW4vb3BlbmFpXCJcbmltcG9ydCB7IENoYXRQcm9tcHRUZW1wbGF0ZSB9IGZyb20gXCJAbGFuZ2NoYWluL2NvcmUvcHJvbXB0c1wiXG5pbXBvcnQgQWp2IGZyb20gXCJhanZcIlxuXG5pbXBvcnQgeyBkZWxpbWl0ZXIsIHJ1bkxvZ0Z1biB9IGZyb20gXCIuLi9sb2dnZXJcIlxuXG5jb25zdCBBTElORUFfU0NIRU1BID0gcmVxdWlyZShcIi4uL3NjaGVtYXMvdGV4dGVfbG9pL0FsaW5lYS5qc29uXCIpXG5jb25zdCBFWFBPU0VfTU9USUZTX1NDSEVNQSA9IHJlcXVpcmUoXCIuLi9zY2hlbWFzL3RleHRlX2xvaS9FeHBvc2VNb3RpZnMuanNvblwiKVxuY29uc3QgTUVUQV9ET05ORUVTX1NDSEVNQSA9IHJlcXVpcmUoXCIuLi9zY2hlbWFzL3RleHRlX2xvaS9NZXRhRG9ubmVlcy5qc29uXCIpXG5jb25zdCBQUk9KRVRfTE9JX1NDSEVNQSA9IHJlcXVpcmUoXCIuLi9zY2hlbWFzL3RleHRlX2xvaS9Qcm9qZXRMb2kuanNvblwiKVxuY29uc3QgU09NTUFJUkVfU0NIRU1BID0gcmVxdWlyZShcIi4uL3NjaGVtYXMvdGV4dGVfbG9pL1NvbW1haXJlLmpzb25cIilcblxuLyoqXG4gKiBPYmplY3QgY29udGFpbmluZyBpbnB1dCBleGFtcGxlcyBhbmQgdGhlaXIgb3V0cHV0IHNjaGVtYXMuXG4gKiBVc2VkIHRvIHRyYWluIHRoZSBMTE0uXG4gKiBAdHlwZSB7UmVjb3JkPHN0cmluZywge21vdGlmczogYW55LCBpbnB1dDogYW55LCBsb2k6IGFueSwgbWV0YTogYW55LCBzb21tYWlyZTogYW55fT59XG4gKi9cbmNvbnN0IEVYQU1QTEVTID0ge1xuICBQUkpMQU5SNUwxNkIwOTE0OiB7XG4gICAgbW90aWZzOiByZXF1aXJlKFwiLi4vZXhhbXBsZXMvUFJKTEFOUjVMMTZCMDkxNC9tb3RpZnMuanNvblwiKSxcbiAgICBpbnB1dDogcmVxdWlyZShcIi4uL2V4YW1wbGVzL1BSSkxBTlI1TDE2QjA5MTQvaW5wdXRcIiksXG4gICAgbG9pOiByZXF1aXJlKFwiLi4vZXhhbXBsZXMvUFJKTEFOUjVMMTZCMDkxNC9sb2kuanNvblwiKSxcbiAgICBtZXRhOiByZXF1aXJlKFwiLi4vZXhhbXBsZXMvUFJKTEFOUjVMMTZCMDkxNC9tZXRhLmpzb25cIiksXG4gICAgc29tbWFpcmU6IHJlcXVpcmUoXCIuLi9leGFtcGxlcy9QUkpMQU5SNUwxNkIwOTE0L3NvbW1haXJlLmpzb25cIiksXG4gIH0sXG4gIFBSSkxBTlI1TDE2QjIwMTQ6IHtcbiAgICBtb3RpZnM6IHJlcXVpcmUoXCIuLi9leGFtcGxlcy9QUkpMQU5SNUwxNkIyMDE0L21vdGlmcy5qc29uXCIpLFxuICAgIGlucHV0OiByZXF1aXJlKFwiLi4vZXhhbXBsZXMvUFJKTEFOUjVMMTZCMjAxNC9pbnB1dFwiKSxcbiAgICBsb2k6IHJlcXVpcmUoXCIuLi9leGFtcGxlcy9QUkpMQU5SNUwxNkIyMDE0L2xvaS5qc29uXCIpLFxuICAgIG1ldGE6IHJlcXVpcmUoXCIuLi9leGFtcGxlcy9QUkpMQU5SNUwxNkIyMDE0L21ldGEuanNvblwiKSxcbiAgICBzb21tYWlyZTogcmVxdWlyZShcIi4uL2V4YW1wbGVzL1BSSkxBTlI1TDE2QjIwMTQvc29tbWFpcmUuanNvblwiKSxcbiAgfSxcbiAgUFJKTEFOUjVMMTZCMjQyNDoge1xuICAgIGFsaW5lYXM6IHJlcXVpcmUoXCIuLi9leGFtcGxlcy9QUkpMQU5SNUwxNkIyNDI0L2FsaW5lYXMuanNvblwiKSxcbiAgICBtb3RpZnM6IHJlcXVpcmUoXCIuLi9leGFtcGxlcy9QUkpMQU5SNUwxNkIyNDI0L21vdGlmcy5qc29uXCIpLFxuICAgIGlucHV0OiByZXF1aXJlKFwiLi4vZXhhbXBsZXMvUFJKTEFOUjVMMTZCMjQyNC9pbnB1dFwiKSxcbiAgICBsb2k6IHJlcXVpcmUoXCIuLi9leGFtcGxlcy9QUkpMQU5SNUwxNkIyNDI0L2xvaS5qc29uXCIpLFxuICAgIG1ldGE6IHJlcXVpcmUoXCIuLi9leGFtcGxlcy9QUkpMQU5SNUwxNkIyNDI0L21ldGEuanNvblwiKSxcbiAgICBzb21tYWlyZTogcmVxdWlyZShcIi4uL2V4YW1wbGVzL1BSSkxBTlI1TDE2QjI0MjQvc29tbWFpcmUuanNvblwiKSxcbiAgfSxcbn1cblxuY29uc3QgRlVMTF9URVhURV9TQ0hFTUEgPSB7XG4gICRzY2hlbWE6IFwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjXCIsXG4gIHRpdGxlOiBcIlNvbW1haXJlXCIsXG4gIGRlc2NyaXB0aW9uOiBcIlLDqWN1cMOpcmF0aW9uIGQndW4gdGV4dGUgY29tcGxldFwiLFxuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgdGV4dGU6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRleHRlIGNvbXBsZXQgZGUgbGEgc2VjdGlvbiBpbmRpcXXDqWUuXCIsXG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gIH0sXG4gIHJlcXVpcmVkOiBbXCJ0ZXh0ZVwiXSxcbn1cblxuLyoqXG4gKiBMTE0gbW9kZWwuXG4gKi9cbmxldCBNT0RFTDogYW55ID0gbnVsbFxuXG5pZiAocHJvY2Vzcy5lbnYuT1BFTkFJX0FQSV9LRVkpIHtcbiAgTU9ERUwgPSBuZXcgQ2hhdE9wZW5BSSh7XG4gICAgdGVtcGVyYXR1cmU6IDAsXG4gICAgdG9wUDogMC4wLFxuICAgIG1vZGVsOiBcImdwdC00by1taW5pXCIsXG4gICAgYXBpS2V5OiBwcm9jZXNzLmVudi5PUEVOQUlfQVBJX0tFWSxcbiAgICBtYXhUb2tlbnM6IC0xLFxuICB9KVxufVxuXG4vKipcbiAqIFN5c3RlbSBpbnB1dCB0ZW1wbGF0ZSBmb3IgdGhlIExMTS5cbiAqL1xuY29uc3QgU1lTVEVNX1RFTVBMQVRFOiBzdHJpbmcgPSBgXG4gICMgSW5zdHJ1Y3Rpb25zIDpcbiAgXG4gIFR1IGVzIHVuIGV4cGVydCBkZSBsYSBsb2kgZXQgZGUgbCdhbmFseXNlIGRlIHBhZ2VzIEhUTUwuXG4gIFR1IGRvaXMgYW5hbHlzZXIgdW4gdGV4dGUgZGUgbG9pIGFmaW4gZGUgc8OpcGFyZXIgZXQgZGUgc3RydWN0dXJlciBsZXMgw6lsw6ltZW50cyBxdWkgbGUgY29tcG9zZW50LiBMZSBmb3JtYXQgZCdlbnRyw6llIGVzdCBIVE1MLlxuXG4gIExlIHRleHRlIGVzdCBkaXZpc8OpIGVuIGRldXggcGFydGllcyA6XG4gIEEpIHVuIGV4cG9zw6kgZGVzIG1vdGlmcyBxdWkgaW5kaXF1ZSBsZXMgcmFpc29ucyBwb3VyIGxlc3F1ZWxsZXMgY2UgcHJvamV0IGVzdCBzb3VtaXMgYXUgUGFybGVtZW50LiBJbCBwZXV0IGNvbnRlbmlyIDMgw6lsw6ltZW50cyA6IDEpIHVuZSBjaXRhdGlvbiBhdSBkw6lidXQgZCd1biBkb2N1bWVudCwgMikgbGUgdGV4dGUgcHJpbmNpcGFsIHF1aSBkw6l2ZWxvcHBlIGxlcyBhcmd1bWVudHMgZGUgbCdhdXRldXIgw6AgbCdhcHB1aSBkZSBsYSBtb2RpZmljYXRpb24gbMOpZ2lzbGF0aXZlIG91IGRlcyBkaXNwb3NpdGlvbnMgbm91dmVsbGVzIHF1J2lsIHByb3Bvc2UsIDMpIGRlcyBwYXJhZ3JhcGhlcyBxdWkgcHLDqXNlbnRlbnQgbGVzIGFydGljbGVzLlxuICBCKSBsZSBkaXNwb3NpdGlmIHF1aSBlc3QgbGEgcGFydGllIG5vcm1hdGl2ZSBldCByw6lkaWfDqWUgZW4gYXJ0aWNsZXMuIElsIHBldXQgY29tcG9ydGVyIGRlcyBkaXZpc2lvbnMgbm9tbcOpZXMgdGl0cmVzLCBjaGFwaXRyZXMsIHNlY3Rpb25zLCBzb3VzLXNlY3Rpb25zLiBMb3JzcXUnaWwgeSBhIHVuIHNldWwgbml2ZWF1IGRlIHN0cnVjdHVyZSwgb24gcmV0cm91dmVyYSBsZSBjaGFwaXRyZSA7IHPigJlpbCB5IGEgZGV1eCBuaXZlYXV4IGRlIHN0cnVjdHVyZSwgb24gcmV0cm91dmVyYSBkZXMgY2hhcGl0cmVzIHB1aXMgZGVzIHNlY3Rpb25zLiBT4oCZaWwgeSBhIHRyb2lzIG5pdmVhdXggZGUgc3RydWN0dXJlLCBvbiByZXRyb3V2ZXJhIGRlcyB0aXRyZXMgcHVpcyBkZXMgY2hhcGl0cmVzIHB1aXMgZGVzIHNlY3Rpb25zLlxuXG4gIFNpIGxlIHRleHRlIGRlIGxvaSBuZSBjb21wb3J0ZSBwYXMgZGUgZGl2aXNpb24sIGxlIHNvbW1haXJlIGRvaXQgcmVzdGVyIHZpZGUuXG4gIFRvdXRlcyBsZXMgbGlnbmVzIHF1aSBkw6lidXRlbnQgcGFyIHVuICfCqycgbmUgc29udCBwYXMgw6AgcHJlbmRyZSBlbiBjb21wdGUgZGFucyBsZXMgZGl2aXNpb25zXG4gIFRhIHLDqXBvbnNlIGRvaXQgw6p0cmUgdW4gSlNPTiBzdHJ1Y3R1csOpIGF2ZWMgbGVzIMOpbMOpbWVudHMgZHUgdGV4dGUgZGUgbG9pIGVuIHJlc3BlY3RhbnQgbGUgc2Now6ltYSBKU09OIGZvdXJuaS5cbmBcblxubGV0IFNJTEVOVF9MT0cgPSBmYWxzZVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgZ2l2ZW4gSFRNTCBzdHJpbmcgYW5kIHJldHVybnMgdGhlIHBhcnNlZCB0ZXh0ZXMgbG9pLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gVGhlIEhUTUwgc3RyaW5nIHRvIHBhcnNlLlxuICogQHJldHVybiB7UHJvbWlzZTx7cGFydGlhbDoge3NvbW1haXJlOiBhbnksIGxvaTogYW55LCBtb3RpZnM6IGFueSwgbWV0YTogYW55fSwgY29tcGxldGVkOiB7c29tbWFpcmU6IGFueSwgbG9pOiBhbnksIG1vdGlmczogYW55LCBtZXRhOiBhbnl9fT59IC0gVGhlIHBhcnNlZCB0ZXh0ZXMgbG9pLCBpbmNsdWRpbmcgdGhlIHBhcnRpYWwgYW5kIGNvbXBsZXRlZCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcnNlVGV4dGVMb2koaHRtbDogc3RyaW5nLCBvcHRpb25zID0geyBzaWxlbnQ6IGZhbHNlIH0pIHtcbiAgU0lMRU5UX0xPRyA9IG9wdGlvbnMuc2lsZW50XG5cbiAgcnVuTG9nRnVuKGNvbnNvbGUuaW5mbyhcIlN0YXJ0IGV4dHJhY3RpbmcgbG9pLi4uXCIpLCBvcHRpb25zKVxuICBjb25zdCBtZXRhID0gYXdhaXQgZXh0cmFjdE1ldGFEb25uZWVzKGh0bWwpXG4gIGNvbnN0IHNvbW1haXJlID0gYXdhaXQgZXh0cmFjdFNvbW1haXJlKGh0bWwpXG4gIGNvbnN0IHBhcnRpYWxNb3RpZnM6IGFueSA9IGF3YWl0IGV4dHJhY3RNb3RpZnMoaHRtbClcbiAgY29uc3QgcGFydGlhbExvaTogYW55ID0gYXdhaXQgZXh0cmFjdFByb2pldExvaShodG1sKVxuICBjb25zdCBleHBvc2VNb3RpZnMgPSBhd2FpdCBwb3B1bGF0ZU1vdGlmcyhwYXJ0aWFsTW90aWZzLCBodG1sKVxuICBjb25zdCBsb2kgPSBhd2FpdCBwb3B1bGF0ZVByb2pldExvaShwYXJ0aWFsTG9pLCBodG1sKVxuXG4gIHJldHVybiB7XG4gICAgc29tbWFpcmUsXG4gICAgbG9pLFxuICAgIGV4cG9zZU1vdGlmcyxcbiAgICBtZXRhLFxuICB9XG59XG5cbi8qKlxuICogQ2xlYW5zIHRoZSBnaXZlbiBIVE1MIHN0cmluZyBieSByZW1vdmluZyB1bm5lY2Vzc2FyeSB0YWdzIGFuZCBjb250ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gVGhlIEhUTUwgc3RyaW5nIHRvIGJlIGNsZWFuZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjbGVhbmVkIEhUTUwgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBjbGVhbkh0bWwoaHRtbDogc3RyaW5nKSB7XG4gIGxldCBjbGVhbmVkSHRtbCA9IGh0bWwucmVwbGFjZSgvKDxzdHlsZVtcXHdcXFddK3N0eWxlPikvZywgXCJcIilcbiAgY2xlYW5lZEh0bWwgPSBjbGVhbmVkSHRtbC5yZXBsYWNlKC8oPGhlYWRbXFx3XFxXXStoZWFkPikvZywgXCJcIilcbiAgY2xlYW5lZEh0bWwgPSBjbGVhbmVkSHRtbC5yZXBsYWNlKC88aW1nW14+XSo+L2csIFwiXCIpXG5cbiAgcmV0dXJuIGNsZWFuZWRIdG1sXG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgSFRNTCB0YWdzIGZyb20gdGhlIGdpdmVuIEhUTUwgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBjbGVhbmVkIHRleHQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBUaGUgSFRNTCBzdHJpbmcgZnJvbSB3aGljaCB0byByZW1vdmUgdGFncy5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNsZWFuZWQgdGV4dCB3aXRob3V0IGFueSBIVE1MIHRhZ3MuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUh0bWxUYWdzKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBIVE1MIHRhZ3NcbiAgY29uc3QgaHRtbFRhZ1JlZ2V4ID0gLzxbXj5dKj4vZ1xuXG4gIC8vIFJlcGxhY2UgYWxsIEhUTUwgdGFncyB3aXRoIGFuIGVtcHR5IHN0cmluZ1xuICBjb25zdCB0ZXh0V2l0aG91dFRhZ3MgPSBodG1sLnJlcGxhY2UoaHRtbFRhZ1JlZ2V4LCBcIlwiKVxuICByZXR1cm4gdGV4dFdpdGhvdXRUYWdzXG59XG5cbi8qKlxuICogUG9wdWxhdGVzIHRoZSBtb3RpZnMgb2JqZWN0IHdpdGggdGhlIGV4dHJhY3RlZCB0ZXh0IGZyb20gdGhlIGdpdmVuIEhUTUwuXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBtb3RpZnMgLSBUaGUgbW90aWZzIG9iamVjdCB0byBiZSBwb3B1bGF0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbCAtIFRoZSBIVE1MIHN0cmluZyBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIHRleHQuXG4gKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSAtIFRoZSBwb3B1bGF0ZWQgbW90aWZzIG9iamVjdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVNb3RpZnMobW90aWZzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBodG1sOiBzdHJpbmcpIHtcbiAgcnVuTG9nRnVuKGNvbnNvbGUuaW5mbyhcIlBvcHVsYXRpbmcgZXhwb3NlIG1vdGlmcy4uLlwiKSlcbiAgbGV0IGNsZWFuZWRIdG1sID0gY2xlYW5IdG1sKGh0bWwpXG5cbiAgaWYgKG1vdGlmcy5kZWJ1dCA9PT0gbW90aWZzLmZpbiB8fCAhbW90aWZzLmZpbikge1xuICAgIG1vdGlmcy50ZXh0ZSA9IG1vdGlmcy5kZWJ1dFxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHN5c3RlbVRlbXBsYXRlID0gYFxuICAgICAgIyBJbnN0cnVjdGlvbnMgOlxuXG4gICAgICBUdSBlcyB1biBleHBlcnQgZGUgbGEgbG9pIGV0IGRlIGwnYW5hbHlzZSBkZSBwYWdlcyBIVE1MLlxuICAgICAgVHUgZG9pcyBhbmFseXNlciB1biB0ZXh0ZSBkZSBsb2kgYWZpbiBkJ2VuIGV4dHJhaXJlIGNlcnRhaW5lcyBwYXJ0aWVzLiBcbiAgICAgIExlIGZvcm1hdCBkJ2VudHLDqWUgZXN0IGR1IEhUTUwuIExlIGZvcm1hdCBkZSBzb3J0aWUgZXN0IGR1IHRleHRlLlxuICAgICAgUsOpY3Vww6hyZSBsJ2ludMOpZ3JhbGl0w6kgZHUgdGV4dGUgY29tbWVuw6dhbnQgcGFyIDpcblxuICAgICAgXCJcIlwiXG4gICAgICB7ZGVidXR9XG4gICAgICBcIlwiXCJcblxuICAgICAgRXQgZmluaXNzYW50IHBhciA6XG5cbiAgICAgIFwiXCJcIlxuICAgICAge2Zpbn1cbiAgICAgIFwiXCJcIlxuICAgIGBcblxuICAgIGNvbnN0IHByb21wdCA9IENoYXRQcm9tcHRUZW1wbGF0ZS5mcm9tTWVzc2FnZXMoW1xuICAgICAgW1wic3lzdGVtXCIsIHN5c3RlbVRlbXBsYXRlXSxcbiAgICAgIFtcImh1bWFuXCIsIFwie2lucHV0fVwiXSxcbiAgICBdKVxuXG4gICAgY29uc3Qgc3RydWN0dXJlZE1vZGVsID0gTU9ERUwud2l0aFN0cnVjdHVyZWRPdXRwdXQoRlVMTF9URVhURV9TQ0hFTUEpXG4gICAgY29uc3QgY2hhaW4gPSBwcm9tcHQucGlwZShzdHJ1Y3R1cmVkTW9kZWwpXG5cbiAgICBjb25zdCBhcnRpY2xlUHJvbXB0UmVzdWx0OiBhbnkgPSBhd2FpdCBjaGFpbi5pbnZva2Uoe1xuICAgICAgaW5wdXQ6IGNsZWFuZWRIdG1sLFxuICAgICAgZGVidXQ6IG1vdGlmcy5kZWJ1dCxcbiAgICAgIGZpbjogbW90aWZzLmZpbixcbiAgICB9KVxuXG4gICAgbW90aWZzLnRleHRlID0gYXJ0aWNsZVByb21wdFJlc3VsdC50ZXh0ZVxuICB9XG5cbiAgcnVuTG9nRnVuKFxuICAgIGNvbnNvbGUuaW5mbyhcIk9ww6lyYXRpb24gZGUgcGV1cGxlbWVudCBkZSBsJ2V4cG9zw6kgZGVzIG1vdGlmcyB0ZXJtaW7DqWUg4pyFXCIpLFxuICAgIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0sXG4gIClcbiAgZGVsaW1pdGVyKFNJTEVOVF9MT0cpXG5cbiAgZGVsZXRlIG1vdGlmcy5kZWJ1dFxuICBkZWxldGUgbW90aWZzLmZpblxuICByZXR1cm4gbW90aWZzXG59XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgcG9wdWxhdGVzIGEgcHJvamV0IGxvaSBvYmplY3Qgd2l0aCB0aGUgZnVsbCB0ZXh0IG9mIGVhY2ggYXJ0aWNsZSBhbmQgYWxpbmVhIGluIHRoZSBnaXZlbiBIVE1MLlxuICpcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gcGFydGlhbCAtIFRoZSBwYXJ0aWFsIHByb2pldCBsb2kgb2JqZWN0IHRvIGJlIHBvcHVsYXRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gVGhlIEhUTUwgY29udGFpbmluZyB0aGUgdGV4dCBvZiB0aGUgYXJ0aWNsZXMgYW5kIGFsaW5lYXMuXG4gKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZnVsbHkgcG9wdWxhdGVkIHByb2pldCBsb2kgb2JqZWN0LlxuICovXG5hc3luYyBmdW5jdGlvbiBwb3B1bGF0ZVByb2pldExvaShwYXJ0aWFsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBodG1sOiBzdHJpbmcpIHtcbiAgcnVuTG9nRnVuKGNvbnNvbGUuZ3JvdXAoXCJQZXVwbGVtZW50IGR1IHByb2pldCBsb2kuLi5cIiksIHtcbiAgICBzaWxlbnQ6IFNJTEVOVF9MT0csXG4gIH0pXG4gIGxldCBjbGVhbmVkSHRtbCA9IGNsZWFuSHRtbChodG1sKVxuXG4gIGNvbnN0IGFydGljbGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+W10gPSBwYXJ0aWFsLmFydGljbGVzXG4gIGNvbnN0IGZ1bGxBcnRpY2xlczogUmVjb3JkPHN0cmluZywgYW55PltdID0gW11cblxuICBjb25zdCBzeXN0ZW1UZW1wbGF0ZSA9IGBcbiAgICAjIEluc3RydWN0aW9ucyA6XG5cbiAgICBUdSBlcyB1biBleHBlcnQgZGUgbGEgbG9pIGV0IGRlIGwnYW5hbHlzZSBkZSBwYWdlcyBIVE1MLlxuICAgIFR1IGRvaXMgYW5hbHlzZXIgdW4gdGV4dGUgZGUgbG9pIGFmaW4gZCdlbiBleHRyYWlyZSBjZXJ0YWluZXMgcGFydGllcy4gXG4gICAgTGUgZm9ybWF0IGQnZW50csOpZSBlc3QgZHUgSFRNTC4gTGUgZm9ybWF0IGRlIHNvcnRpZSBlc3QgZHUgdGV4dGUuXG4gICAgUsOpY3Vww6hyZSBsJ2ludMOpZ3JhbGl0w6kgZHUgdGV4dGUgY29tbWVuw6dhbnQgcGFyIDpcblxuICAgIFwiXCJcIlxuICAgIHtkZWJ1dH1cbiAgICBcIlwiXCJcblxuICAgIEV0IGZpbmlzc2FudCBwYXIgOlxuXG4gICAgXCJcIlwiXG4gICAge2Zpbn1cbiAgICBcIlwiXCJcbiAgYFxuXG4gIGNvbnN0IHByb21wdCA9IENoYXRQcm9tcHRUZW1wbGF0ZS5mcm9tTWVzc2FnZXMoW1xuICAgIFtcInN5c3RlbVwiLCBzeXN0ZW1UZW1wbGF0ZV0sXG4gICAgW1wiaHVtYW5cIiwgXCJ7aW5wdXR9XCJdLFxuICBdKVxuXG4gIGNvbnN0IHN0cnVjdHVyZWRNb2RlbCA9IE1PREVMLndpdGhTdHJ1Y3R1cmVkT3V0cHV0KEZVTExfVEVYVEVfU0NIRU1BKVxuICBjb25zdCBjaGFpbiA9IHByb21wdC5waXBlKHN0cnVjdHVyZWRNb2RlbClcblxuICBmb3IgKGNvbnN0IGFydGljbGUgb2YgYXJ0aWNsZXMpIHtcbiAgICBpZiAoYXJ0aWNsZS5kZWJ1dCA9PT0gYXJ0aWNsZS5maW4gfHwgIWFydGljbGUuZmluKSB7XG4gICAgICBhcnRpY2xlLnRleHRlID0gYXJ0aWNsZS5kZWJ1dFxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhcnRpY2xlUHJvbXB0UmVzdWx0OiBhbnkgPSBhd2FpdCBjaGFpbi5pbnZva2Uoe1xuICAgICAgICBpbnB1dDogY2xlYW5lZEh0bWwsXG4gICAgICAgIGRlYnV0OiBhcnRpY2xlLmRlYnV0LFxuICAgICAgICBmaW46IGFydGljbGUuZmluLFxuICAgICAgfSlcblxuICAgICAgYXJ0aWNsZS50ZXh0ZSA9IGFydGljbGVQcm9tcHRSZXN1bHQudGV4dGVcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFsaW5lYSBvZiBhcnRpY2xlLmFsaW5lYXMpIHtcbiAgICAgIGlmIChhbGluZWEuZGVidXQgPT09IGFsaW5lYS5maW4gfHwgIWFsaW5lYS5maW4pIHtcbiAgICAgICAgYWxpbmVhLnRleHRlID0gYWxpbmVhLmRlYnV0XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFsaW5lYVByb21wdFJlc3VsdDogYW55ID0gYXdhaXQgY2hhaW4uaW52b2tlKHtcbiAgICAgICAgaW5wdXQ6IGFydGljbGUudGV4dGUsXG4gICAgICAgIGRlYnV0OiBhbGluZWEuZGVidXQsXG4gICAgICAgIGZpbjogYWxpbmVhLmZpbixcbiAgICAgIH0pXG5cbiAgICAgIGRlbGV0ZSBhbGluZWEuZGVidXRcbiAgICAgIGRlbGV0ZSBhbGluZWEuZmluXG4gICAgICBhbGluZWEudGV4dGUgPSBhbGluZWFQcm9tcHRSZXN1bHQudGV4dGVcbiAgICB9XG5cbiAgICBydW5Mb2dGdW4oXG4gICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgIFwiT3DDqXJhdGlvbiBkZSBwZXVwbGVtZW50IGR1IGNvbnRlbnUgZHUgcHJvamV0IGRlIGxvaSB0ZXJtaW7DqWUg4pyFXCIsXG4gICAgICApLFxuICAgICAgeyBzaWxlbnQ6IFNJTEVOVF9MT0cgfSxcbiAgICApXG4gICAgZGVsZXRlIGFydGljbGUuZGVidXRcbiAgICBkZWxldGUgYXJ0aWNsZS5maW5cbiAgICBmdWxsQXJ0aWNsZXMucHVzaChhcnRpY2xlKVxuICB9XG5cbiAgY29uc3QgcHJvamV0TG9pID0ge1xuICAgIC4uLnBhcnRpYWwsXG4gICAgYXJ0aWNsZXM6IGZ1bGxBcnRpY2xlcyxcbiAgfVxuXG4gIHJ1bkxvZ0Z1bihjb25zb2xlLmdyb3VwRW5kKCksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG4gIGRlbGltaXRlcigpXG4gIHJldHVybiBwcm9qZXRMb2lcbn1cblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSBleHRyYWN0cyB0aGUgXCJleHBvc2UgbW90aWZzXCIgZnJvbSB0aGUgZ2l2ZW4gSFRNTC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbCAtIFRoZSBIVE1MIHN0cmluZyBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIFwiZXhwb3NlIG1vdGlmc1wiLlxuICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZXh0cmFjdGVkIFwiZXhwb3NlIG1vdGlmc1wiIG9iamVjdC5cbiAqIFRoZSBvYmplY3QgY29udGFpbnMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBgZGVidXRgOiBUaGUgYmVnaW5uaW5nIG9mIHRoZSBcImV4cG9zZSBtb3RpZnNcIi5cbiAqIC0gYGZpbmA6IFRoZSBlbmQgb2YgdGhlIFwiZXhwb3NlIG1vdGlmc1wiLlxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIGV4dHJhY3RlZCBcImV4cG9zZSBtb3RpZnNcIiBkbyBub3QgdmFsaWRhdGUgYWdhaW5zdCB0aGUgRVhQT1NFX01PVElGU19TQ0hFTUEuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RNb3RpZnMoaHRtbDogc3RyaW5nKSB7XG4gIHJ1bkxvZ0Z1bihjb25zb2xlLmdyb3VwKFwiUGFyc2luZyBleHBvc2UgbW90aWZzLi4uXCIpLCB7IHNpbGVudDogU0lMRU5UX0xPRyB9KVxuICBsZXQgY2xlYW5lZEh0bWwgPSBjbGVhbkh0bWwoaHRtbClcbiAgY2xlYW5lZEh0bWwgPSByZW1vdmVIdG1sVGFncyhjbGVhbmVkSHRtbClcblxuICBjb25zdCBzdHJ1Y3R1cmVkTW9kZWwgPSBNT0RFTC53aXRoU3RydWN0dXJlZE91dHB1dChFWFBPU0VfTU9USUZTX1NDSEVNQSlcblxuICBjb25zdCBtb3RpZnNTeXN0ZW1UZW1wbGF0ZSA9IGBcbiAgICAke1NZU1RFTV9URU1QTEFURX1cblxuICAgICMgRXhhbXBsZXM6IFxuXG4gICAgIyMgRXhlbXBsZSAxIFVzZXIgSW5wdXQgOlxuICAgIFwiXCJcIlxuICAgIHtleGFtcGxlMX1cbiAgICBcIlwiXCJcbiAgICBcbiAgICAjIyBFeGVtcGxlIDEgSlNPTiBPdXRwdXQgOlxuICAgIFwiXCJcIlxuICAgIHtvdXRwdXQxfVxuICAgIFwiXCJcIlxuXG4gICAgIyMgRXhlbXBsZSAyIFVzZXIgSW5wdXQgOlxuICAgIFwiXCJcIlxuICAgIHtleGFtcGxlMn1cbiAgICBcIlwiXCJcbiAgICBcbiAgICAjIyBFeGVtcGxlIDIgSlNPTiBPdXRwdXQgOlxuICAgIFwiXCJcIlxuICAgIHtvdXRwdXQyfVxuICAgIFwiXCJcIlxuICAgIGBcblxuICBjb25zdCBwcm9tcHQgPSBDaGF0UHJvbXB0VGVtcGxhdGUuZnJvbU1lc3NhZ2VzKFtcbiAgICBbXCJzeXN0ZW1cIiwgbW90aWZzU3lzdGVtVGVtcGxhdGVdLFxuICAgIFtcImh1bWFuXCIsIFwie2lucHV0fVwiXSxcbiAgXSlcblxuICBjb25zdCBjaGFpbiA9IHByb21wdC5waXBlKHN0cnVjdHVyZWRNb2RlbClcbiAgY29uc3QgbW90aWZzUHJvbXB0UmVzdWx0OiBhbnkgPSBhd2FpdCBjaGFpbi5pbnZva2Uoe1xuICAgIGlucHV0OiBjbGVhbmVkSHRtbCxcbiAgICBleGFtcGxlMTogRVhBTVBMRVMuUFJKTEFOUjVMMTZCMDkxNC5pbnB1dCxcbiAgICBleGFtcGxlMjogRVhBTVBMRVMuUFJKTEFOUjVMMTZCMjQyNC5pbnB1dCxcbiAgICBvdXRwdXQxOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIwOTE0Lm1vdGlmcyxcbiAgICBvdXRwdXQyOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIyNDI0Lm1vdGlmcyxcbiAgfSlcblxuICAvLyBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShtb3RpZnNQcm9tcHRSZXN1bHQpKVxuICBydW5Mb2dGdW4oXG4gICAgY29uc29sZS50YWJsZShbXG4gICAgICBbXCJEw6lidXRcIiwgbW90aWZzUHJvbXB0UmVzdWx0LmRlYnV0LnN1YnN0cmluZygwLCAzMCldLFxuICAgICAgW1wiRmluXCIsIG1vdGlmc1Byb21wdFJlc3VsdC5maW4uc3Vic3RyaW5nKDAsIDMwKV0sXG4gICAgXSksXG4gICAgeyBzaWxlbnQ6IFNJTEVOVF9MT0cgfSxcbiAgKVxuXG4gIHJ1bkxvZ0Z1bihjb25zb2xlLmdyb3VwRW5kKCksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG4gIGRlbGltaXRlcigpXG5cbiAgY29uc3QgYWp2ID0gbmV3IEFqdigpXG4gIGlmIChhanYudmFsaWRhdGUoRVhQT1NFX01PVElGU19TQ0hFTUEsIG1vdGlmc1Byb21wdFJlc3VsdCkpIHtcbiAgICBydW5Mb2dGdW4oY29uc29sZS5pbmZvKFwiRXhwb3PDqSBkZXMgbW90aWZzIE9LIPCfkYxcIiksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG4gICAgcmV0dXJuIG1vdGlmc1Byb21wdFJlc3VsdFxuICB9XG5cbiAgcnVuTG9nRnVuKGNvbnNvbGUud2FybihcIkV4cG9zw6kgZGVzIG1vdGlmcyBLTyDinYxcIiksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG4gIHJldHVybiB7fVxufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IGV4dHJhY3RzIHRoZSBtZXRhZGF0YSBmcm9tIHRoZSBnaXZlbiBIVE1MLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sIC0gVGhlIEhUTUwgc3RyaW5nIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBleHRyYWN0ZWQgbWV0YWRhdGEgb2JqZWN0LlxuICogVGhlIG9iamVjdCBjb250YWlucyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAtIGBkb2N1bWVudFJlZmA6IFRoZSByZWZlcmVuY2Ugb2YgdGhlIGRvY3VtZW50LlxuICogLSBgdGl0cmVgOiBUaGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50LlxuICogLSBgbnVtZXJvVGV4dGVgOiBUaGUgbnVtYmVyIG9mIHRoZSB0ZXh0LlxuICogLSBgcHJvY2VkdXJlQWNjZWxlcmVlYDogVGhlIGFjY2VsZXJhdGVkIHByb2NlZHVyZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSAtIElmIHRoZSBleHRyYWN0ZWQgbWV0YWRhdGEgZG8gbm90IHZhbGlkYXRlIGFnYWluc3QgdGhlIE1FVEFfRE9OTkVFU19TQ0hFTUEuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RNZXRhRG9ubmVlcyhodG1sOiBzdHJpbmcpIHtcbiAgZGVsaW1pdGVyKClcbiAgbGV0IGNsZWFuZWRIdG1sID0gY2xlYW5IdG1sKGh0bWwpXG4gIGNsZWFuZWRIdG1sID0gcmVtb3ZlSHRtbFRhZ3MoY2xlYW5lZEh0bWwpXG5cbiAgY29uc3Qgc3RydWN0dXJlZE1vZGVsID0gTU9ERUwud2l0aFN0cnVjdHVyZWRPdXRwdXQoTUVUQV9ET05ORUVTX1NDSEVNQSlcblxuICBjb25zdCBtZXRhRG9ubmVlc1N5c3RlbVRlbXBsYXRlID0gYFxuICAgICR7U1lTVEVNX1RFTVBMQVRFfVxuICAgIGBcblxuICBjb25zdCBwcm9tcHQgPSBDaGF0UHJvbXB0VGVtcGxhdGUuZnJvbU1lc3NhZ2VzKFtcbiAgICBbXCJzeXN0ZW1cIiwgbWV0YURvbm5lZXNTeXN0ZW1UZW1wbGF0ZV0sXG4gICAgW1wiaHVtYW5cIiwgXCJ7aW5wdXR9XCJdLFxuICBdKVxuXG4gIGNvbnN0IGNoYWluID0gcHJvbXB0LnBpcGUoc3RydWN0dXJlZE1vZGVsKVxuICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IGNoYWluLmludm9rZSh7XG4gICAgaW5wdXQ6IGNsZWFuZWRIdG1sLFxuICAgIGV4YW1wbGUxOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIwOTE0LmlucHV0LFxuICAgIGV4YW1wbGUyOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIyNDI0LmlucHV0LFxuICAgIG91dHB1dDE6IEVYQU1QTEVTLlBSSkxBTlI1TDE2QjA5MTQubWV0YSxcbiAgICBvdXRwdXQyOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIyNDI0Lm1ldGEsXG4gIH0pXG5cbiAgY29uc29sZS5ncm91cChcIk1ldGEtZG9ubsOpZXNcIilcbiAgY29uc29sZS50YWJsZShbXG4gICAgW1wiUsOpZsOpcmVuY2VcIiwgcmVzdWx0LmRvY3VtZW50UmVmXSxcbiAgICBbXCJUaXRyZVwiLCByZXN1bHQudGl0cmVdLFxuICAgIFtcIk51bcOpcm8gZHUgdGV4dGVcIiwgcmVzdWx0Lm51bWVyb1RleHRlXSxcbiAgICBbXCJQcm9jw6lkdXJlIGFjY8OpbMOpcsOpXCIsIHJlc3VsdC5wcm9jZWR1cmVBY2NlbGVyZWVdLFxuICBdKVxuICBjb25zb2xlLmdyb3VwRW5kKClcbiAgZGVsaW1pdGVyKClcblxuICBjb25zdCBhanYgPSBuZXcgQWp2KClcbiAgaWYgKGFqdi52YWxpZGF0ZShNRVRBX0RPTk5FRVNfU0NIRU1BLCByZXN1bHQpKSB7XG4gICAgcnVuTG9nRnVuKGNvbnNvbGUud2FybihcIk1ldGEtZG9ubsOpZXMgT0sg8J+RjFwiKSwgeyBzaWxlbnQ6IFNJTEVOVF9MT0cgfSlcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBydW5Mb2dGdW4oY29uc29sZS53YXJuKFwiTWV0YS1kb25uw6llcyBub24tY29uZm9ybWUg4p2MXCIpLCB7XG4gICAgc2lsZW50OiBTSUxFTlRfTE9HLFxuICB9KVxuICByZXR1cm4ge31cbn1cblxuLyoqXG4gKiBBc3luY2hyb25vdXNseSBleHRyYWN0cyB0aGUgXCJwcm9qZXQgZGUgbG9pXCIgZnJvbSB0aGUgZ2l2ZW4gSFRNTC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbCAtIFRoZSBIVE1MIHN0cmluZyBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIFwicHJvamV0IGRlIGxvaVwiLlxuICogQHJldHVybiB7UHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gLSBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZXh0cmFjdGVkIFwicHJvamV0IGRlIGxvaVwiIG9iamVjdC5cbiAqIFRoZSBvYmplY3QgY29udGFpbnMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBgYXJ0aWNsZXNgOiBBbiBhcnJheSBvZiBhcnRpY2xlIG9iamVjdHMsIGVhY2ggY29udGFpbmluZyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAgIC0gYG51bWVyb0FydGljbGVgOiBUaGUgbnVtYmVyIG9mIHRoZSBhcnRpY2xlLlxuICogICAtIGBjYXJkaW5hbGA6IFRoZSBjYXJkaW5hbCBvZiB0aGUgYXJ0aWNsZS5cbiAqICAgLSBgdGl0cmVgOiBUaGUgdGl0bGUgb2YgdGhlIGFydGljbGUuXG4gKiAgIC0gYGRlYnV0YDogVGhlIGJlZ2lubmluZyBvZiB0aGUgYXJ0aWNsZS5cbiAqICAgLSBgZmluYDogVGhlIGVuZCBvZiB0aGUgYXJ0aWNsZS5cbiAqICAgLSBgYWxpbmVhc2A6IEFuIGFycmF5IG9mIGFsaW5lYXMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBJZiB0aGUgZXh0cmFjdGVkIFwicHJvamV0IGRlIGxvaVwiIGRvZXMgbm90IHZhbGlkYXRlIGFnYWluc3QgdGhlIFBST0pFVF9MT0lfU0NIRU1BLlxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0UHJvamV0TG9pKGh0bWw6IHN0cmluZykge1xuICBydW5Mb2dGdW4oY29uc29sZS5ncm91cChcIlBhcnNpbmcgbG9pLi4uXCIpLCB7IHNpbGVudDogU0lMRU5UX0xPRyB9KVxuICBsZXQgY2xlYW5lZEh0bWwgPSBjbGVhbkh0bWwoaHRtbClcbiAgY29uc3Qgc3RydWN0dXJlZE1vZGVsID0gTU9ERUwud2l0aFN0cnVjdHVyZWRPdXRwdXQoUFJPSkVUX0xPSV9TQ0hFTUEpXG5cbiAgY29uc3QgcHJvamV0TG9pU3lzdGVtVGVtcGxhdGUgPSBgXG4gICAgJHtTWVNURU1fVEVNUExBVEV9XG5cbiAgICAjIEV4YW1wbGVzOiBcblxuICAgICMjIEV4ZW1wbGUgMSBVc2VyIElucHV0IDpcbiAgICBcIlwiXCJcbiAgICB7ZXhhbXBsZTF9XG4gICAgXCJcIlwiXG4gICAgXG4gICAgIyMgRXhlbXBsZSAxIEpTT04gT3V0cHV0IDpcbiAgICBcIlwiXCJcbiAgICB7b3V0cHV0MX1cbiAgICBcIlwiXCJcblxuICAgICMjIEV4ZW1wbGUgMiBVc2VyIElucHV0IDpcbiAgICBcIlwiXCJcbiAgICB7ZXhhbXBsZTJ9XG4gICAgXCJcIlwiXG4gICAgXG4gICAgIyMgRXhlbXBsZSAyIEpTT04gT3V0cHV0IDpcbiAgICBcIlwiXCJcbiAgICB7b3V0cHV0Mn1cbiAgICBcIlwiXCJcbiAgICBgXG5cbiAgY29uc3QgcHJvbXB0ID0gQ2hhdFByb21wdFRlbXBsYXRlLmZyb21NZXNzYWdlcyhbXG4gICAgW1wic3lzdGVtXCIsIHByb2pldExvaVN5c3RlbVRlbXBsYXRlXSxcbiAgICBbXCJodW1hblwiLCBcIntpbnB1dH1cIl0sXG4gIF0pXG5cbiAgY29uc3QgY2hhaW4gPSBwcm9tcHQucGlwZShzdHJ1Y3R1cmVkTW9kZWwpXG4gIGNvbnN0IGFydGljbGVzUHJvbXB0UmVzdWx0OiBhbnkgPSBhd2FpdCBjaGFpbi5pbnZva2Uoe1xuICAgIGlucHV0OiBjbGVhbmVkSHRtbCxcbiAgICBleGFtcGxlMTogRVhBTVBMRVMuUFJKTEFOUjVMMTZCMDkxNC5pbnB1dCxcbiAgICBleGFtcGxlMjogRVhBTVBMRVMuUFJKTEFOUjVMMTZCMjQyNC5pbnB1dCxcbiAgICBvdXRwdXQxOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIwOTE0LmxvaSxcbiAgICBvdXRwdXQyOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIyNDI0LmxvaSxcbiAgfSlcblxuICBydW5Mb2dGdW4oXG4gICAgY29uc29sZS5sb2coXCJGb3VuZCBcIiwgYXJ0aWNsZXNQcm9tcHRSZXN1bHQuYXJ0aWNsZXMubGVuZ3RoLCBcIiBhcnRpY2xlcy5cIiksXG4gICAgeyBzaWxlbnQ6IFNJTEVOVF9MT0cgfSxcbiAgKVxuXG4gIGZvciAoY29uc3QgYXJ0aWNsZSBvZiBhcnRpY2xlc1Byb21wdFJlc3VsdC5hcnRpY2xlcykge1xuICAgIGFydGljbGUuYWxpbmVhcyA9IGF3YWl0IGV4dHJhY3RBbGluZWFzKGh0bWwsIGFydGljbGUpXG4gIH1cblxuICBydW5Mb2dGdW4oXG4gICAgY29uc29sZS50YWJsZShcbiAgICAgIGFydGljbGVzUHJvbXB0UmVzdWx0LmFydGljbGVzLm1hcCgoYXJ0aWNsZTogYW55KSA9PiBbXG4gICAgICAgIGFydGljbGUubnVtZXJvQXJ0aWNsZSxcbiAgICAgICAgYXJ0aWNsZS50aXRyZSxcbiAgICAgICAgYXJ0aWNsZS5kZWJ1dC5zdWJzdHJpbmcoMCwgMTApLFxuICAgICAgICBhcnRpY2xlLmZpbi5zdWJzdHJpbmcoMCwgMTApLFxuICAgICAgICBgTm9tYnJlIGQnYWxpbmVhcyA6ICR7YXJ0aWNsZS5hbGluZWFzLmxlbmd0aH1gLFxuICAgICAgXSksXG4gICAgKSxcbiAgICB7IHNpbGVudDogU0lMRU5UX0xPRyB9LFxuICApXG4gIHJ1bkxvZ0Z1bihjb25zb2xlLmdyb3VwRW5kKCksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG5cbiAgY29uc3QgYWp2ID0gbmV3IEFqdigpXG4gIGlmIChhanYudmFsaWRhdGUoUFJPSkVUX0xPSV9TQ0hFTUEsIGFydGljbGVzUHJvbXB0UmVzdWx0KSkge1xuICAgIHJ1bkxvZ0Z1bihjb25zb2xlLmluZm8oXCJQcm9qZXQgZGUgbG9pIE9LIPCfkYxcIiksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG4gICAgZGVsaW1pdGVyKClcbiAgICByZXR1cm4gYXJ0aWNsZXNQcm9tcHRSZXN1bHRcbiAgfVxuXG4gIHJ1bkxvZ0Z1bihjb25zb2xlLndhcm4oXCJQcm9qZXQgZGUgbG9pIEtPIOKdjFwiKSwgeyBzaWxlbnQ6IFNJTEVOVF9MT0cgfSlcbiAgZGVsaW1pdGVyKClcbiAgcmV0dXJuIHt9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4dHJhY3RBbGluZWFzKGh0bWw6IHN0cmluZywgYXJ0aWNsZTogYW55KSB7XG4gIHJ1bkxvZ0Z1bihjb25zb2xlLmdyb3VwKFwiUGFyc2luZyBhbGluZWFzLi4uXCIpLCB7IHNpbGVudDogU0lMRU5UX0xPRyB9KVxuICBsZXQgY2xlYW5lZEh0bWwgPSBjbGVhbkh0bWwoaHRtbClcblxuICBjb25zdCBzdHJ1Y3R1cmVkTW9kZWwgPSBNT0RFTC53aXRoU3RydWN0dXJlZE91dHB1dChBTElORUFfU0NIRU1BKVxuXG4gIGNvbnN0IGFsaW5lYXNTeXN0ZW1UZW1wbGF0ZSA9IGBcbiAgICAke1NZU1RFTV9URU1QTEFURX1cblxuICAgIEV4dHJhaXMgdG91cyBsZXMgYWxpbmVhcyBkZSBsYSBwb3J0aW9uIGRlIHRleHRlIGNvbW1lbsOnYW50IHBhciDCqyB7ZGVidXR9IMK7IGV0IGZpbmlzc2FudCBwYXIgwqsge2Zpbn0gwrsuXG4gICAgVW4gYWxpbsOpYSBjb250aWVubmVudCB0b3Vqb3VycyB1bmUgYmFsaXNlIMKrIDxpbWcgwrsuXG5cbiAgICAjIEV4YW1wbGVzOiBcblxuICAgICMjIEV4ZW1wbGUgMSBVc2VyIElucHV0IDpcbiAgICBcIlwiXCJcbiAgICB7ZXhhbXBsZTF9XG4gICAgXCJcIlwiXG4gICAgXG4gICAgIyMgRXhlbXBsZSAxIEpTT04gT3V0cHV0IDpcbiAgICBcIlwiXCJcbiAgICB7b3V0cHV0MX1cbiAgICBcIlwiXCJcbiAgICBgXG5cbiAgY29uc3QgcHJvbXB0ID0gQ2hhdFByb21wdFRlbXBsYXRlLmZyb21NZXNzYWdlcyhbXG4gICAgW1wic3lzdGVtXCIsIGFsaW5lYXNTeXN0ZW1UZW1wbGF0ZV0sXG4gICAgW1wiaHVtYW5cIiwgXCJ7aW5wdXR9XCJdLFxuICBdKVxuXG4gIGNvbnN0IGNoYWluID0gcHJvbXB0LnBpcGUoc3RydWN0dXJlZE1vZGVsKVxuICBjb25zdCBhbGluZWFzUHJvbXB0UmVzdWx0OiBhbnkgPSBhd2FpdCBjaGFpbi5pbnZva2Uoe1xuICAgIGlucHV0OiBjbGVhbmVkSHRtbCxcbiAgICBkZWJ1dDogYXJ0aWNsZS5kZWJ1dCxcbiAgICBmaW46IGFydGljbGUuZmluLFxuICAgIGV4YW1wbGUxOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIyNDI0LmlucHV0LFxuICAgIG91dHB1dDE6IEVYQU1QTEVTLlBSSkxBTlI1TDE2QjI0MjQuYWxpbmVhcyxcbiAgfSlcblxuICBjb25zdCBhanYgPSBuZXcgQWp2KClcbiAgaWYgKGFqdi52YWxpZGF0ZShBTElORUFfU0NIRU1BLCBhbGluZWFzUHJvbXB0UmVzdWx0IGFzIGFueSkpIHtcbiAgICBydW5Mb2dGdW4oXG4gICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgIFwiRm91bmQgXCIsXG4gICAgICAgIGFsaW5lYXNQcm9tcHRSZXN1bHQuYWxpbmVhcy5sZW5ndGgsXG4gICAgICAgIFwiIGFsaW5lYXMgZm9yIEFydGljbGUgXCIsXG4gICAgICAgIGFydGljbGUubnVtZXJvQXJ0aWNsZSxcbiAgICAgICAgYXJ0aWNsZS50aXRyZSxcbiAgICAgICksXG4gICAgICB7IHNpbGVudDogU0lMRU5UX0xPRyB9LFxuICAgIClcbiAgICBydW5Mb2dGdW4oY29uc29sZS5ncm91cEVuZCgpLCB7IHNpbGVudDogU0lMRU5UX0xPRyB9KVxuICAgIGRlbGltaXRlcigpXG4gICAgcmV0dXJuIGFsaW5lYXNQcm9tcHRSZXN1bHQuYWxpbmVhc1xuICB9XG5cbiAgcnVuTG9nRnVuKGNvbnNvbGUud2FybihcIkFsaW5lYXMgS09cIiksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG4gIGRlbGltaXRlcigpXG4gIHJldHVybiB7fVxufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IGV4dHJhY3RzIHRoZSBcInNvbW1haXJlXCIgKG91dGxpbmUpIGZyb20gdGhlIGdpdmVuIEhUTUwuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGh0bWwgLSBUaGUgSFRNTCBzdHJpbmcgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBcInNvbW1haXJlXCIuXG4gKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSAtIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBleHRyYWN0ZWQgXCJzb21tYWlyZVwiIG9iamVjdC5cbiAqIFRoZSBvYmplY3QgY29udGFpbnMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICogLSBgc29tbWFpcmVgOiBBbiBhcnJheSBvZiBtYWluIGRpdmlzaW9uIG9iamVjdHMsIGVhY2ggY29udGFpbmluZyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKiAgIC0gYG51bWVyb0RpdmlzaW9uYDogVGhlIG51bWJlciBvZiB0aGUgbWFpbiBkaXZpc2lvbi5cbiAqICAgLSBgdGl0cmVgOiBUaGUgdGl0bGUgb2YgdGhlIG1haW4gZGl2aXNpb24uXG4gKiAgIC0gYHR5cGVEaXZpc2lvbmA6IFRoZSB0eXBlIG9mIGNvbnRlbnQgaW4gdGhlIG1haW4gZGl2aXNpb24uXG4gKiAgIC0gYHNlcXVlbmNlYDogVGhlIHNlcXVlbmNlIG9mIHRoZSBtYWluIGRpdmlzaW9uLlxuICogICAtIGBwYXJlbnRgOiBUaGUgcGFyZW50IG9mIHRoZSBtYWluIGRpdmlzaW9uLlxuICogQHRocm93cyB7RXJyb3J9IC0gSWYgdGhlIGV4dHJhY3RlZCBcInNvbW1haXJlXCIgZG9lcyBub3QgdmFsaWRhdGUgYWdhaW5zdCB0aGUgU09NTUFJUkVfU0NIRU1BLlxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0U29tbWFpcmUoaHRtbDogc3RyaW5nKSB7XG4gIGxldCBjbGVhbmVkSHRtbCA9IGNsZWFuSHRtbChodG1sKVxuICBjbGVhbmVkSHRtbCA9IHJlbW92ZUh0bWxUYWdzKGNsZWFuZWRIdG1sKVxuXG4gIGNvbnN0IHN0cnVjdHVyZWRNb2RlbCA9IE1PREVMLndpdGhTdHJ1Y3R1cmVkT3V0cHV0KFNPTU1BSVJFX1NDSEVNQSlcblxuICBjb25zdCBzb21tYWlyZVN5c3RlbVRlbXBsYXRlID0gYFxuICAgICR7U1lTVEVNX1RFTVBMQVRFfVxuXG4gICAgIyBFeGFtcGxlczogXG5cbiAgICAjIyBFeGVtcGxlIDEgVXNlciBJbnB1dCA6XG4gICAgXCJcIlwiXG4gICAge2V4YW1wbGUxfVxuICAgIFwiXCJcIlxuICAgIFxuICAgICMjIEV4ZW1wbGUgMSBKU09OIE91dHB1dCA6XG4gICAgXCJcIlwiXG4gICAge291dHB1dDF9XG4gICAgXCJcIlwiXG5cbiAgICAjIyBFeGVtcGxlIDIgVXNlciBJbnB1dCA6XG4gICAgXCJcIlwiXG4gICAge2V4YW1wbGUyfVxuICAgIFwiXCJcIlxuICAgIFxuICAgICMjIEV4ZW1wbGUgMiBKU09OIE91dHB1dCA6XG4gICAgXCJcIlwiXG4gICAge291dHB1dDJ9XG4gICAgXCJcIlwiXG4gICAgYFxuXG4gIGNvbnN0IHByb21wdCA9IENoYXRQcm9tcHRUZW1wbGF0ZS5mcm9tTWVzc2FnZXMoW1xuICAgIFtcInN5c3RlbVwiLCBzb21tYWlyZVN5c3RlbVRlbXBsYXRlXSxcbiAgICBbXCJodW1hblwiLCBcIntpbnB1dH1cIl0sXG4gIF0pXG5cbiAgY29uc3QgY2hhaW4gPSBwcm9tcHQucGlwZShzdHJ1Y3R1cmVkTW9kZWwpXG4gIGNvbnN0IHNvbW1haXJlUHJvbXB0UmVzdWx0OiBhbnkgPSBhd2FpdCBjaGFpbi5pbnZva2Uoe1xuICAgIGlucHV0OiBjbGVhbmVkSHRtbCxcbiAgICBleGFtcGxlMTogRVhBTVBMRVMuUFJKTEFOUjVMMTZCMjAxNC5pbnB1dCxcbiAgICBvdXRwdXQxOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIyMDE0LnNvbW1haXJlLFxuICAgIGV4YW1wbGUyOiBFWEFNUExFUy5QUkpMQU5SNUwxNkIwOTE0LmlucHV0LFxuICAgIG91dHB1dDI6IEVYQU1QTEVTLlBSSkxBTlI1TDE2QjA5MTQuc29tbWFpcmUsXG4gIH0pXG5cbiAgaWYgKCFzb21tYWlyZVByb21wdFJlc3VsdC5zb21tYWlyZSkge1xuICAgIHJ1bkxvZ0Z1bihjb25zb2xlLndhcm4oXCJBdWN1biBzb21tYWlyZSBuJ2Egw6l0w6kgdHJvdXbDqSDinZNcIiksIHtcbiAgICAgIHNpbGVudDogU0lMRU5UX0xPRyxcbiAgICB9KVxuICAgIGRlbGltaXRlcigpXG4gICAgcmV0dXJuIHsgc29tbWFpcmU6IFtdIH1cbiAgfVxuXG4gIHJ1bkxvZ0Z1bihjb25zb2xlLmdyb3VwKFwiU29tbWFpcmVcIiksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG4gIHJ1bkxvZ0Z1bihcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIFwiRm91bmQgXCIsXG4gICAgICBzb21tYWlyZVByb21wdFJlc3VsdC5zb21tYWlyZS5sZW5ndGgsXG4gICAgICBcIiBtYWluIGRpdmlzaW9ucyAobGV2ZWwgMSkuXCIsXG4gICAgKSxcbiAgICB7IHNpbGVudDogU0lMRU5UX0xPRyB9LFxuICApXG4gIHJ1bkxvZ0Z1bihcbiAgICBjb25zb2xlLnRhYmxlKFxuICAgICAgc29tbWFpcmVQcm9tcHRSZXN1bHQuc29tbWFpcmUubWFwKChpdGVtOiBhbnkpID0+IFtcbiAgICAgICAgaXRlbS5zZXF1ZW5jZSxcbiAgICAgICAgaXRlbS50aXRyZSxcbiAgICAgICAgaXRlbS50eXBlRGl2aXNpb24sXG4gICAgICAgIGl0ZW0ucGFyZW50LFxuICAgICAgXSksXG4gICAgKSxcbiAgICB7IHNpbGVudDogU0lMRU5UX0xPRyB9LFxuICApXG4gIHJ1bkxvZ0Z1bihjb25zb2xlLmdyb3VwRW5kKCksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG5cbiAgY29uc3QgYWp2ID0gbmV3IEFqdigpXG4gIGlmIChhanYudmFsaWRhdGUoU09NTUFJUkVfU0NIRU1BLCBzb21tYWlyZVByb21wdFJlc3VsdCBhcyBhbnkpKSB7XG4gICAgcnVuTG9nRnVuKGNvbnNvbGUuaW5mbyhcIlNvbW1haXJlIE9LIPCfkYxcIiksIHsgc2lsZW50OiBTSUxFTlRfTE9HIH0pXG4gICAgZGVsaW1pdGVyKClcbiAgICByZXR1cm4gc29tbWFpcmVQcm9tcHRSZXN1bHQuc29tbWFpcmVcbiAgfVxuXG4gIHJ1bkxvZ0Z1bihjb25zb2xlLndhcm4oXCJMYSBjb25zdHJ1Y3Rpb24gZHUgc29tbWFpcmUgZXN0IEtPIOKdjFwiKSwge1xuICAgIHNpbGVudDogU0lMRU5UX0xPRyxcbiAgfSlcbiAgZGVsaW1pdGVyKClcbiAgcmV0dXJuIHsgc29tbWFpcmU6IFtdIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLElBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUVBLElBQUFJLE9B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
|
|
303
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfanNkb20iLCJlIiwiX19lc01vZHVsZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJsIiwiaSIsIk9iamVjdCIsInB1c2giLCJwYXJzZUhlYWRlciIsImhlYWRlciIsImhlYWRlcnNNYXBwaW5nIiwicmVnZXgiLCJsZXZlbCIsIl9pIiwiX2hlYWRlcnNNYXBwaW5nIiwiX2hlYWRlcnNNYXBwaW5nJF9pIiwibWF0Y2giLCJjbGVhblRleHQiLCJ0ZXh0IiwicmVwbGFjZSIsInRyaW0iLCJleGNsdWRlZEFsaW5lYXMiLCJwYXJzZVRleHRlIiwiYXNzZW1ibGVlVXJsIiwicGFnZSIsImh0bWwiLCJfSlNET00iLCJKU0RPTSIsIndpbmRvdyIsImRvY3VtZW50IiwiYXNzZXJ0Iiwic3RyaWN0RXF1YWwiLCJjaGlsZHJlbiIsImh0bWxFbGVtZW50IiwiYm9keUVsZW1lbnQiLCJjbG9zZSIsImVycm9yIiwiY29kZSIsIm1lc3NhZ2UiLCJ0YWdOYW1lIiwiYm9keUNoaWxkIiwiYWxpbmVhRWxlbWVudCIsImlzTXVsdGlMaW5lc0hlYWRlciIsImxldmVscyIsIm5leHRQYXJlbnRTdGF0ZSIsInN0YXRlIiwic3ViZGl2aXNpb25zIiwic3ViZGl2aXNpb25BbGluZWFzIiwic3ViZGl2aXNpb25IZWFkZXJzIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidW5kZWZpbmVkIiwiaWQiLCJpbmNsdWRlcyIsImNvbmNhdCIsImhlYWRlclRleHQiLCJ0ZXh0Q29udGVudCIsIm5hbWVDb21wdXRlZCIsIm5vcm1hbGl6ZSIsIm5hbWVVcHBlciIsInRvVXBwZXJDYXNlIiwiX3BhcnNlSGVhZGVyIiwiX3BhcnNlSGVhZGVyMiIsIm5leHRMZXZlbCIsInBhcmFncmFwaFR5cGUiLCJsaW5lSHRtbCIsIm91dGVySFRNTCIsImxpbmVUZXh0IiwiZXhjbHVkZUFsaW5lYSIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZXJyIiwidGV4dGUiLCJwb3AiLCJ0eXBlIiwibml2ZWF1Iiwibml2ZWF1UmVsYXRpZiIsInRpdHJlcyIsImFsaW5lYXMiLCJ1cmwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2Vycy90ZXh0ZXNfbG9pcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgSlNET00gfSBmcm9tIFwianNkb21cIlxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcihoZWFkZXI6IHN0cmluZyk6IFtudW1iZXIgfCBudWxsLCBzdHJpbmddIHtcbiAgY29uc3QgaGVhZGVyc01hcHBpbmc6IHsgcmVnZXg6IFJlZ0V4cDsgbGV2ZWw6IG51bWJlcjsgbmFtZTogc3RyaW5nIH1bXSA9IFtcbiAgICB7IHJlZ2V4OiAvXihSQVBQT1JUXyk/QU5ORVhFKF98JCl8XkVUQVRfLywgbGV2ZWw6IDAsIG5hbWU6IFwiQW5uZXhlXCIgfSxcbiAgICB7IHJlZ2V4OiAvXlRPTUVfLywgbGV2ZWw6IDEsIG5hbWU6IFwiVG9tZVwiIH0sXG4gICAge1xuICAgICAgcmVnZXg6XG4gICAgICAgIC9eUEFSVElFX3xeKFBSRU1JRVJFfFNFQ09OREV8REVVWElFTUV8VFJPSVNJRU1FfFFVQVRSSUVNRSlfUEFSVElFKF98JCkvLFxuICAgICAgbGV2ZWw6IDIsXG4gICAgICBuYW1lOiBcIlBhcnRpZVwiLFxuICAgIH0sXG4gICAgeyByZWdleDogL15MSVZSRV8vLCBsZXZlbDogMywgbmFtZTogXCJMaXZyZVwiIH0sXG4gICAgeyByZWdleDogL15USVRSRV8vLCBsZXZlbDogNCwgbmFtZTogXCJUaXRyZVwiIH0sXG4gICAgeyByZWdleDogL15TT1VTVElUUkVfLywgbGV2ZWw6IDUsIG5hbWU6IFwiU291c1RpdHJlXCIgfSxcbiAgICB7IHJlZ2V4OiAvXkNIQVBJVFJFXy8sIGxldmVsOiA2LCBuYW1lOiBcIkNoYXBpdHJlXCIgfSxcbiAgICB7IHJlZ2V4OiAvXlNFQ1RJT05fLywgbGV2ZWw6IDcsIG5hbWU6IFwiU2VjdGlvblwiIH0sXG4gICAgeyByZWdleDogL15TT1VTU0VDVElPTl8vLCBsZXZlbDogOCwgbmFtZTogXCJTb3VzU2VjdGlvblwiIH0sXG4gICAgeyByZWdleDogL15BUlRJQ0xFUz9ffF5FWFBPU0VfREVTX01PVElGUyQvLCBsZXZlbDogOSwgbmFtZTogXCJBcnRpY2xlXCIgfSxcbiAgXVxuXG4gIGZvciAobGV0IHsgcmVnZXgsIGxldmVsLCBuYW1lIH0gb2YgaGVhZGVyc01hcHBpbmcpIHtcbiAgICBpZiAoaGVhZGVyLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgcmV0dXJuIFtsZXZlbCwgbmFtZV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtudWxsLCBcIlwiXVxufVxuXG5mdW5jdGlvbiBjbGVhblRleHQodGV4dDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0Py5yZXBsYWNlKC9bXFxuXFx0XSsvZywgXCJcIikudHJpbSgpIHx8IFwiXCJcbn1cblxuY29uc3QgZXhjbHVkZWRBbGluZWFzID0gW1xuICAvXkTDqWxpYsOpcsOpIGVuIHPDqWFuY2UgcHVibGlxdWUvLFxuICAvXkZhaXQgbGUvLFxuICAvXkxlIFByw6lzaWRlbnQsJC8sXG4gIC9eU2lnbsOpLyxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGV4dGUoYXNzZW1ibGVlVXJsOiBzdHJpbmcsIHBhZ2U6IHN0cmluZykge1xuICAvLyBSZXBhaXIgSFRNTC5cbiAgbGV0IGh0bWwgPSBwYWdlLnJlcGxhY2UoLyg8c3R5bGVbXFx3XFxXXStzdHlsZT4pL2csIFwiXCIpXG5cbiAgLy8gRXh0cmFjdCBzdWJkaXZpc2lvbnMgZnJvbSBIVE1MLlxuICBjb25zdCB7IHdpbmRvdyB9ID0gbmV3IEpTRE9NKGh0bWwpXG4gIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHdpbmRvd1xuICBhc3NlcnQuc3RyaWN0RXF1YWwoZG9jdW1lbnQuY2hpbGRyZW4ubGVuZ3RoLCAxKVxuICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmNoaWxkcmVuWzBdXG4gIGFzc2VydC5zdHJpY3RFcXVhbChodG1sRWxlbWVudC5jaGlsZHJlbi5sZW5ndGgsIDIpXG4gIGNvbnN0IGJvZHlFbGVtZW50ID0gaHRtbEVsZW1lbnQuY2hpbGRyZW5bMV1cblxuICBpZiAoYm9keUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIDwgMykge1xuICAgIC8vIE9jY3VycyBpbiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzAzMjYuYXNwLlxuICAgIHdpbmRvdy5jbG9zZSgpIC8vIEZyZWUgbWVtb3J5LlxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogeyBjb2RlOiAtMSwgbWVzc2FnZTogXCJUZXh0ZSBkZSBsb2kgc2FucyBjb250ZW51XCIgfSxcbiAgICAgIGh0bWwsXG4gICAgICBwYWdlLFxuICAgIH1cbiAgfVxuICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keUVsZW1lbnQuY2hpbGRyZW5bMF0udGFnTmFtZSwgXCJESVZcIilcbiAgLy8gRmlyc3QgY2hpbGQgaXMgYSBESVYgZGVzY3JpYmluZyB0aGUgZG9jdW1lbnQgKEFzc2VtYmzDqWUncyBoZWFkZXIpLiBTa2lwIGl0IGZvciBub3cuXG4gIGxldCBib2R5Q2hpbGQgPSBib2R5RWxlbWVudC5jaGlsZHJlblsxXVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5Q2hpbGQudGFnTmFtZSwgXCJCUlwiKVxuICBsZXQgYWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGxldCBpc011bHRpTGluZXNIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgbGV2ZWw6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIGxldCBsZXZlbHM6IG51bWJlcltdID0gW11cbiAgbGV0IG5leHRQYXJlbnRTdGF0ZSA9IG51bGxcbiAgbGV0IHN0YXRlOiBzdHJpbmcgfCBudWxsID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgY29uc3Qgc3ViZGl2aXNpb25zID0gW11cbiAgbGV0IHN1YmRpdmlzaW9uQWxpbmVhczogb2JqZWN0W10gfCBudWxsID0gbnVsbFxuICBsZXQgc3ViZGl2aXNpb25IZWFkZXJzOiBvYmplY3RbXSB8IG51bGwgPSBudWxsXG4gIHdoaWxlIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgXCJuZXh0Qm9keUNoaWxkXCI6XG4gICAgICAgIGlmIChib2R5Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIGRvY3VtZW50IGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC5cbiAgICAgICAgICBzdGF0ZSA9IG51bGxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5Q2hpbGQgPSBib2R5Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgICAgICAgaWYgKGJvZHlDaGlsZC50YWdOYW1lID09PSBcIkRJVlwiKSB7XG4gICAgICAgICAgICBhbGluZWFFbGVtZW50ID0gYm9keUNoaWxkLmNoaWxkcmVuWzBdXG5cbiAgICAgICAgICAgIGlmIChhbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQgfHwgYm9keUNoaWxkLmlkLmluY2x1ZGVzKFwiZnRuXCIpKSB7XG4gICAgICAgICAgICAgIC8vIE5vIGFsaW5lYSBpbiBjdXJyZW50IGJvZHlDaGlsZDogZ28gdG8gbmV4dCBib2R5Q2hpbGQuXG4gICAgICAgICAgICAgIHN0YXRlID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gXCJhbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gPFAvPiBpcyBmb3IgZm9vdG5vdGVzXG4gICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgIFtcIkJSXCIsIFwiSFJcIiwgXCJQXCJdLmluY2x1ZGVzKGJvZHlDaGlsZC50YWdOYW1lKSxcbiAgICAgICAgICAgICAgYFVuZXhwZWN0ZWQgdGFnIG5hbWUgXCIke2JvZHlDaGlsZC50YWdOYW1lfVwiIGZvciBib2R5IGNoaWxkYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIFN0YXkgaW4gdGhlIHNhbWUgc3RhdGUgdG8gZ28gdG8gbmV4dCBib2R5Q2hpbGQuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiYWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBzd2l0Y2ggKGFsaW5lYUVsZW1lbnQhLnRhZ05hbWUpIHtcbiAgICAgICAgICBjYXNlIFwiRElWXCI6XG4gICAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiSDRcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgc3RhdGUgPSBcImZpcnN0UGFyYWdyYXBoQ2hpbGRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiUFwiOlxuICAgICAgICAgICAgbmV4dFBhcmVudFN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBzdGF0ZSA9IFwiZmlyc3RQYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgXCJPTFwiOlxuICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgc3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIlRBQkxFXCI6XG4gICAgICAgICAgICBuZXh0UGFyZW50U3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgY29kZTogLTIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgdGFnIG5hbWUgZm9yIGFsaW5lYSBlbGVtZW50OiAke1xuICAgICAgICAgICAgICAgICAgYWxpbmVhRWxlbWVudCEudGFnTmFtZVxuICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBodG1sLFxuICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiZmlyc3RQYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBjb25zdCBoZWFkZXJUZXh0ID0gYWxpbmVhRWxlbWVudCEudGV4dENvbnRlbnRcbiAgICAgICAgY29uc3QgbmFtZUNvbXB1dGVkID0gKGhlYWRlclRleHQgfHwgXCJcIilcbiAgICAgICAgICAubm9ybWFsaXplKFwiTkZEXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcKG5vdXZlYXVcXCkvLCBcIlwiKVxuICAgICAgICAgIC5yZXBsYWNlKC9cXChQb3VyIGNvb3JkaW5hdGlvblxcKS8sIFwiXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcKFN1cHByaW3DqXM/XFwpLywgXCJcIilcbiAgICAgICAgICAucmVwbGFjZSgvwqAvZywgXCIgXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXC0sLuKApl0vZywgXCJcIilcbiAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgLnJlcGxhY2UoLyB7MSx9L2csIFwiX1wiKVxuXG4gICAgICAgIGNvbnN0IG5hbWVVcHBlciA9IG5hbWVDb21wdXRlZC50b1VwcGVyQ2FzZSgpXG4gICAgICAgIGNvbnN0IFtuZXh0TGV2ZWwsIHBhcmFncmFwaFR5cGVdID0gcGFyc2VIZWFkZXIobmFtZVVwcGVyKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbmFtZVVwcGVyIHx8XG4gICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKC9eKFBST0pFVHxQUk9QT1NJVElPTilfREVfTE9JKF98JCkvKSAhPT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBPY2N1cnMgaW46XG4gICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzAyMzIuYXNwXG4gICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2MjYuYXNwXG4gICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2NzYuYXNwXG4gICAgICAgICAgc3RhdGUgPSBuZXh0UGFyZW50U3RhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKG5hbWVVcHBlciA9PT0gXCJKRVVYX09MWU1QSVFVRVNfRVRfUEFSQUxZTVBJUVVFU19ERV8yMDI0XCIpIHtcbiAgICAgICAgICAvLyBPY2N1cnMgaW4gaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wNjc2LmFzcFxuICAgICAgICAgIHN0YXRlID0gbmV4dFBhcmVudFN0YXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lVXBwZXIgPT09IFwiVEVYVEVfREVfTEFfQ09NTUlTU0lPTl9NSVhURV9QQVJJVEFJUkVcIikge1xuICAgICAgICAgIC8vIE9jY3VycyBpbiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzEyOTQuYXNwXG4gICAgICAgICAgc3RhdGUgPSBuZXh0UGFyZW50U3RhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZUh0bWwgPSBjbGVhblRleHQoYWxpbmVhRWxlbWVudCEub3V0ZXJIVE1MKVxuICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGNsZWFuVGV4dChhbGluZWFFbGVtZW50IS50ZXh0Q29udGVudClcblxuICAgICAgICBpZiAobmV4dExldmVsID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSXQgaXMgYSByZWd1bGFyIGFsaW5lYVxuICAgICAgICAgIC8vIEV4Y2x1ZGUgc29tZSBhbGluZWFzXG4gICAgICAgICAgbGV0IGV4Y2x1ZGVBbGluZWEgPSBmYWxzZVxuICAgICAgICAgIGZvciAobGV0IHJlZ2V4IG9mIGV4Y2x1ZGVkQWxpbmVhcykge1xuICAgICAgICAgICAgaWYgKHJlZ2V4LnRlc3QobGluZVRleHQpKSB7XG4gICAgICAgICAgICAgIGV4Y2x1ZGVBbGluZWEgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChleGNsdWRlQWxpbmVhKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzIS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChpc011bHRpTGluZXNIZWFkZXIgJiYgc3ViZGl2aXNpb25BbGluZWFzIS5sZW5ndGggPT09IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnMhLnB1c2goe1xuICAgICAgICAgICAgICB0ZXh0ZTogbGluZVRleHQsXG4gICAgICAgICAgICAgIGh0bWw6IGxpbmVIdG1sLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzIS5wdXNoKHtcbiAgICAgICAgICAgICAgdGV4dGU6IGxpbmVUZXh0LFxuICAgICAgICAgICAgICBodG1sOiBsaW5lSHRtbCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc011bHRpTGluZXNIZWFkZXIgJiYgc3ViZGl2aXNpb25IZWFkZXJzIS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgaXNNdWx0aUxpbmVzSGVhZGVyID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2tpcCBwYXJhZ3JhcGguXG4gICAgICAgICAgc3RhdGUgPSBuZXh0UGFyZW50U3RhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRMZXZlbCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIEl0IGlzIGEgaGVhZGVyXG4gICAgICAgICAgbGV2ZWwgPSBuZXh0TGV2ZWxcbiAgICAgICAgICB3aGlsZSAobGV2ZWxzLmxlbmd0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbHNbbGV2ZWxzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICBsZXZlbHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxldmVscy5sZW5ndGggPT09IDAgfHwgbGV2ZWwgPiBsZXZlbHNbbGV2ZWxzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICBsZXZlbHMucHVzaChsZXZlbClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXMgPSBbXVxuICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVycyA9IFt7IHRleHRlOiBsaW5lVGV4dCwgaHRtbDogbGluZUh0bWwgfV1cblxuICAgICAgICAgIC8vIEFydGljbGVzICYgXCJFeHBvc8OpIGRlcyBtb3RpZnNcIiBhcmUgdGhlIG9ubHkgZGl2aXNpb25zIHdpdGhvdXQgc2Vjb25kIHRpdGxlLlxuICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9XG4gICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15BUlRJQ0xFUz9fLykgPT09IG51bGwgJiZcbiAgICAgICAgICAgIG5hbWVVcHBlci5tYXRjaCgvXkVYUE9TRV9ERVNfTU9USUZTJC8pID09PSBudWxsXG5cbiAgICAgICAgICBzdWJkaXZpc2lvbnMucHVzaCh7XG4gICAgICAgICAgICBpZDogXCJEX1wiICsgbmFtZUNvbXB1dGVkLFxuICAgICAgICAgICAgdHlwZTogcGFyYWdyYXBoVHlwZSxcbiAgICAgICAgICAgIG5pdmVhdTogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgbml2ZWF1UmVsYXRpZjogbGV2ZWxzLmxlbmd0aCxcbiAgICAgICAgICAgIHRpdHJlczogc3ViZGl2aXNpb25IZWFkZXJzLFxuICAgICAgICAgICAgYWxpbmVhczogc3ViZGl2aXNpb25BbGluZWFzLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIGFsaW5lYUVsZW1lbnQgPSBhbGluZWFFbGVtZW50IS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKGFsaW5lYUVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgYm9keUNoaWxkIGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBib2R5Q2hpbGRcbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEJvZHlDaGlsZFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBcImFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBgVW5leHBlY3RlZCBzdGF0ZTogJHtzdGF0ZX1gXG4gICAgfVxuICB9XG5cbiAgd2luZG93LmNsb3NlKCkgLy8gRnJlZSBtZW1vcnkuXG5cbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogbnVsbCxcbiAgICBodG1sLFxuICAgIHBhZ2UsXG4gICAgc3ViZGl2aXNpb25zLFxuICAgIHVybDogYXNzZW1ibGVlVXJsLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQTZCLFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSwyQkFBQUMsQ0FBQSxFQUFBSCxDQUFBLFFBQUFJLENBQUEseUJBQUFDLE1BQUEsSUFBQUYsQ0FBQSxDQUFBRSxNQUFBLENBQUFDLFFBQUEsS0FBQUgsQ0FBQSxxQkFBQUMsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQUwsQ0FBQSxNQUFBQyxDQUFBLEdBQUFLLDJCQUFBLENBQUFOLENBQUEsTUFBQUgsQ0FBQSxJQUFBRyxDQUFBLHVCQUFBQSxDQUFBLENBQUFPLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRCxDQUFBLEdBQUFDLENBQUEsT0FBQU8sRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxXQUFBSCxFQUFBLElBQUFSLENBQUEsQ0FBQU8sTUFBQSxLQUFBSyxJQUFBLFdBQUFBLElB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
|