@tricoteuses/assemblee 1.10.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/README.md +8 -1
  2. package/lib/amendements-79bwpkvR.js +154 -0
  3. package/lib/amendements-CV3s5a0M.js +667 -0
  4. package/lib/cleaners/index.d.ts +9 -9
  5. package/lib/cleaners.js +564 -0
  6. package/lib/datasets.d.ts +3 -3
  7. package/lib/dossiers_legislatifs.d.ts +2 -2
  8. package/lib/index.d.ts +17 -22
  9. package/lib/index.js +1542 -314
  10. package/lib/inserters.d.ts +5 -5
  11. package/lib/loaders-9mHdTl9L.js +4158 -0
  12. package/lib/loaders.d.ts +12 -12
  13. package/lib/loaders.js +29 -1689
  14. package/lib/organes.d.ts +1 -1
  15. package/lib/parse-Ccs6wcUg.js +2512 -0
  16. package/lib/parsers/index.d.ts +2 -3
  17. package/lib/parsers/plf.d.ts +1 -0
  18. package/lib/parsers/recherche_amendements.d.ts +2 -2
  19. package/lib/parsers/textes_lois.d.ts +1 -23
  20. package/lib/parsers.js +398 -0
  21. package/lib/raw_types/acteurs_et_organes.d.ts +4 -2
  22. package/lib/raw_types/debats.d.ts +2 -2
  23. package/lib/raw_types/dossiers_legislatifs.d.ts +1 -1
  24. package/lib/schemas/acteurs_et_organes.json +1166 -0
  25. package/lib/schemas/agendas.json +1745 -0
  26. package/lib/schemas/amendements.json +2085 -0
  27. package/lib/schemas/debats.json +842 -0
  28. package/lib/schemas/dossiers_legislatifs.json +3874 -0
  29. package/lib/schemas/legislatures.json +17 -0
  30. package/lib/schemas/questions.json +704 -0
  31. package/lib/schemas/scrutins.json +701 -0
  32. package/lib/scripts/retrieve_deputes_photos.d.ts +1 -1
  33. package/lib/types/acteurs_et_organes.d.ts +344 -2
  34. package/lib/types/agendas.d.ts +236 -10
  35. package/lib/types/amendements.d.ts +276 -1
  36. package/lib/types/debats.d.ts +52 -2
  37. package/lib/types/dossiers_legislatifs.d.ts +403 -9
  38. package/lib/types/questions.d.ts +99 -2
  39. package/lib/types/scrutins.d.ts +101 -0
  40. package/lib/urls.d.ts +2 -2
  41. package/package.json +33 -95
  42. package/lib/api.js +0 -52
  43. package/lib/api.mjs +0 -45
  44. package/lib/bugs/acteur-00010/plugin.test.js +0 -90
  45. package/lib/bugs/acteur-00010/plugin.test.mjs +0 -33
  46. package/lib/bugs/acteur-00010.d.ts +0 -7
  47. package/lib/bugs/acteur-00010.js +0 -116
  48. package/lib/bugs/acteur-00010.mjs +0 -26
  49. package/lib/bugs/agenda-00002/plugin.test.js +0 -124
  50. package/lib/bugs/agenda-00002/plugin.test.mjs +0 -50
  51. package/lib/bugs/agenda-00002.d.ts +0 -15
  52. package/lib/bugs/agenda-00002.js +0 -406
  53. package/lib/bugs/agenda-00002.mjs +0 -172
  54. package/lib/bugs/agenda-00008/plugin.test.js +0 -92
  55. package/lib/bugs/agenda-00008/plugin.test.mjs +0 -31
  56. package/lib/bugs/agenda-00008.d.ts +0 -7
  57. package/lib/bugs/agenda-00008.js +0 -123
  58. package/lib/bugs/agenda-00008.mjs +0 -26
  59. package/lib/bugs/agenda-00011/plugin.test.d.ts +0 -1
  60. package/lib/bugs/agenda-00011/plugin.test.js +0 -263
  61. package/lib/bugs/agenda-00011/plugin.test.mjs +0 -152
  62. package/lib/bugs/agenda-00011.d.ts +0 -16
  63. package/lib/bugs/agenda-00011.js +0 -333
  64. package/lib/bugs/agenda-00011.mjs +0 -125
  65. package/lib/bugs.d.ts +0 -21
  66. package/lib/bugs.js +0 -452
  67. package/lib/bugs.mjs +0 -70
  68. package/lib/cleaners/actes_legislatifs.js +0 -315
  69. package/lib/cleaners/actes_legislatifs.mjs +0 -253
  70. package/lib/cleaners/acteurs.js +0 -265
  71. package/lib/cleaners/acteurs.mjs +0 -180
  72. package/lib/cleaners/amendements.js +0 -294
  73. package/lib/cleaners/amendements.mjs +0 -227
  74. package/lib/cleaners/debats.js +0 -12
  75. package/lib/cleaners/debats.mjs +0 -5
  76. package/lib/cleaners/documents.js +0 -205
  77. package/lib/cleaners/documents.mjs +0 -133
  78. package/lib/cleaners/dossiers_legislatifs.js +0 -131
  79. package/lib/cleaners/dossiers_legislatifs.mjs +0 -70
  80. package/lib/cleaners/index.js +0 -70
  81. package/lib/cleaners/index.mjs +0 -10
  82. package/lib/cleaners/organes.js +0 -65
  83. package/lib/cleaners/organes.mjs +0 -48
  84. package/lib/cleaners/questions.js +0 -12
  85. package/lib/cleaners/questions.mjs +0 -5
  86. package/lib/cleaners/reunions.js +0 -312
  87. package/lib/cleaners/reunions.mjs +0 -255
  88. package/lib/cleaners/scrutins.js +0 -340
  89. package/lib/cleaners/scrutins.mjs +0 -221
  90. package/lib/cleaners/xml.js +0 -95
  91. package/lib/cleaners/xml.mjs +0 -58
  92. package/lib/datasets.js +0 -837
  93. package/lib/datasets.mjs +0 -755
  94. package/lib/dates.js +0 -124
  95. package/lib/dates.mjs +0 -100
  96. package/lib/dossiers_legislatifs.js +0 -346
  97. package/lib/dossiers_legislatifs.mjs +0 -208
  98. package/lib/file_systems.js +0 -162
  99. package/lib/file_systems.mjs +0 -62
  100. package/lib/git.js +0 -223
  101. package/lib/git.mjs +0 -151
  102. package/lib/index.mjs +0 -17
  103. package/lib/inserters.js +0 -521
  104. package/lib/inserters.mjs +0 -337
  105. package/lib/loaders.mjs +0 -886
  106. package/lib/logger.js +0 -35
  107. package/lib/logger.mjs +0 -26
  108. package/lib/organes.js +0 -22
  109. package/lib/organes.mjs +0 -15
  110. package/lib/parsers/documents.d.ts +0 -62
  111. package/lib/parsers/documents.js +0 -453
  112. package/lib/parsers/documents.mjs +0 -370
  113. package/lib/parsers/index.js +0 -40
  114. package/lib/parsers/index.mjs +0 -4
  115. package/lib/parsers/recherche_amendements.js +0 -403
  116. package/lib/parsers/recherche_amendements.mjs +0 -167
  117. package/lib/parsers/textes_lois.js +0 -307
  118. package/lib/parsers/textes_lois.mjs +0 -264
  119. package/lib/raw_types/acteurs_et_organes.js +0 -1213
  120. package/lib/raw_types/acteurs_et_organes.mjs +0 -1146
  121. package/lib/raw_types/agendas.js +0 -777
  122. package/lib/raw_types/agendas.mjs +0 -724
  123. package/lib/raw_types/amendements.js +0 -1052
  124. package/lib/raw_types/amendements.mjs +0 -993
  125. package/lib/raw_types/debats.js +0 -630
  126. package/lib/raw_types/debats.mjs +0 -573
  127. package/lib/raw_types/dossiers_legislatifs.js +0 -1529
  128. package/lib/raw_types/dossiers_legislatifs.mjs +0 -1471
  129. package/lib/raw_types/questions.js +0 -469
  130. package/lib/raw_types/questions.mjs +0 -416
  131. package/lib/raw_types/scrutins.js +0 -651
  132. package/lib/raw_types/scrutins.mjs +0 -598
  133. package/lib/schemas/acteur/Acteur.json +0 -56
  134. package/lib/schemas/acteur/AdresseElectronique.json +0 -52
  135. package/lib/schemas/acteur/AdressePostale.json +0 -75
  136. package/lib/schemas/acteur/Civ.json +0 -14
  137. package/lib/schemas/acteur/Collaborateur.json +0 -29
  138. package/lib/schemas/acteur/EtatCivil.json +0 -51
  139. package/lib/schemas/acteur/Ident.json +0 -40
  140. package/lib/schemas/acteur/Lieu.json +0 -66
  141. package/lib/schemas/acteur/Mandat.json +0 -192
  142. package/lib/schemas/acteur/Profession.json +0 -46
  143. package/lib/schemas/agenda/Agenda.json +0 -318
  144. package/lib/schemas/agenda/CycleDeVie.json +0 -45
  145. package/lib/schemas/agenda/PointOdj.json +0 -82
  146. package/lib/schemas/amendement/Amendement.json +0 -246
  147. package/lib/schemas/amendement/Diff.json +0 -25
  148. package/lib/schemas/amendement/DispositifAmdtCredit.json +0 -85
  149. package/lib/schemas/amendement/Identifiant.json +0 -62
  150. package/lib/schemas/amendement/PointeurFragmentTexte.json +0 -127
  151. package/lib/schemas/amendement/Representation.json +0 -67
  152. package/lib/schemas/amendement/Total.json +0 -26
  153. package/lib/schemas/converted_from_type/acteurs_et_organes.json +0 -666
  154. package/lib/schemas/converted_from_type/agendas.json +0 -1100
  155. package/lib/schemas/converted_from_type/amendements.json +0 -3191
  156. package/lib/schemas/converted_from_type/debats.json +0 -682
  157. package/lib/schemas/converted_from_type/deputes.json +0 -26
  158. package/lib/schemas/converted_from_type/dossiers_legislatifs.json +0 -2918
  159. package/lib/schemas/converted_from_type/legislatures.json +0 -16
  160. package/lib/schemas/converted_from_type/questions.json +0 -328
  161. package/lib/schemas/converted_from_type/scrutins.json +0 -393
  162. package/lib/schemas/debat/Contenu.json +0 -75
  163. package/lib/schemas/debat/Debat.json +0 -40
  164. package/lib/schemas/debat/Metadonnees.json +0 -75
  165. package/lib/schemas/debat/Orateur.json +0 -60
  166. package/lib/schemas/debat/Point.json +0 -169
  167. package/lib/schemas/debat/Sommaire.json +0 -71
  168. package/lib/schemas/debat/SommaireElement.json +0 -108
  169. package/lib/schemas/debat/Texte.json +0 -34
  170. package/lib/schemas/document/CodeLibelle.json +0 -25
  171. package/lib/schemas/document/Document.json +0 -385
  172. package/lib/schemas/document/Indexation.json +0 -38
  173. package/lib/schemas/dossier/ActeLegislatif.json +0 -211
  174. package/lib/schemas/dossier/ActeLegislatifBase.json +0 -62
  175. package/lib/schemas/dossier/Agenda.json +0 -23
  176. package/lib/schemas/dossier/ConseilConstitutionnel.json +0 -35
  177. package/lib/schemas/dossier/Decision.json +0 -25
  178. package/lib/schemas/dossier/Dossier.json +0 -124
  179. package/lib/schemas/dossier/EtudeImpact.json +0 -29
  180. package/lib/schemas/dossier/EtudePlf.json +0 -105
  181. package/lib/schemas/dossier/Europe.json +0 -42
  182. package/lib/schemas/dossier/FamCodeLibelle.json +0 -25
  183. package/lib/schemas/dossier/InfoJO.json +0 -23
  184. package/lib/schemas/dossier/Initiateur.json +0 -36
  185. package/lib/schemas/dossier/Motion.json +0 -27
  186. package/lib/schemas/dossier/Promulgation.json +0 -62
  187. package/lib/schemas/dossier/Rapporteur.json +0 -36
  188. package/lib/schemas/dossier/Texte.json +0 -47
  189. package/lib/schemas/organe/CodeTypeOrgane.json +0 -43
  190. package/lib/schemas/organe/Organe.json +0 -136
  191. package/lib/schemas/organe/ViMoDe.json +0 -28
  192. package/lib/schemas/question/Auteur.json +0 -58
  193. package/lib/schemas/question/Cloture.json +0 -28
  194. package/lib/schemas/question/InfoJO.json +0 -40
  195. package/lib/schemas/question/MinAttribElement.json +0 -30
  196. package/lib/schemas/question/Question.json +0 -172
  197. package/lib/schemas/question/Renouvellement.json +0 -17
  198. package/lib/schemas/question/Signalement.json +0 -21
  199. package/lib/schemas/question/Texte.json +0 -24
  200. package/lib/schemas/scrutin/DecompteVoix.json +0 -35
  201. package/lib/schemas/scrutin/Dysfonctionnement.json +0 -50
  202. package/lib/schemas/scrutin/MiseAuPoint.json +0 -53
  203. package/lib/schemas/scrutin/OrganeVotant.json +0 -88
  204. package/lib/schemas/scrutin/Scrutin.json +0 -187
  205. package/lib/schemas/scrutin/Votant.json +0 -37
  206. package/lib/scripts/bugs_helper.d.ts +0 -13
  207. package/lib/scripts/bugs_helper.js +0 -595
  208. package/lib/scripts/bugs_helper.mjs +0 -251
  209. package/lib/scripts/clean_reorganized_data.js +0 -610
  210. package/lib/scripts/clean_reorganized_data.mjs +0 -273
  211. package/lib/scripts/diff_amendements.js +0 -249
  212. package/lib/scripts/diff_amendements.mjs +0 -202
  213. package/lib/scripts/document_dossiers_legislatifs.js +0 -655
  214. package/lib/scripts/document_dossiers_legislatifs.mjs +0 -414
  215. package/lib/scripts/get_today_reunions.js +0 -37
  216. package/lib/scripts/get_today_reunions.mjs +0 -31
  217. package/lib/scripts/merge_scrutins.js +0 -97
  218. package/lib/scripts/merge_scrutins.mjs +0 -47
  219. package/lib/scripts/parse_textes_lois.d.ts +0 -1
  220. package/lib/scripts/parse_textes_lois.js +0 -171
  221. package/lib/scripts/parse_textes_lois.mjs +0 -140
  222. package/lib/scripts/process_open_dataset.js +0 -301
  223. package/lib/scripts/process_open_dataset.mjs +0 -134
  224. package/lib/scripts/raw_types_from_amendements.js +0 -135
  225. package/lib/scripts/raw_types_from_amendements.mjs +0 -134
  226. package/lib/scripts/reorganize_data.js +0 -805
  227. package/lib/scripts/reorganize_data.mjs +0 -517
  228. package/lib/scripts/retrieve_deputes_photos.js +0 -310
  229. package/lib/scripts/retrieve_deputes_photos.mjs +0 -158
  230. package/lib/scripts/retrieve_documents.js +0 -547
  231. package/lib/scripts/retrieve_documents.mjs +0 -242
  232. package/lib/scripts/retrieve_open_data.js +0 -107
  233. package/lib/scripts/retrieve_open_data.mjs +0 -26
  234. package/lib/scripts/retrieve_pending_amendments.js +0 -206
  235. package/lib/scripts/retrieve_pending_amendments.mjs +0 -57
  236. package/lib/scripts/retrieve_senateurs_photos.js +0 -234
  237. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -116
  238. package/lib/scripts/retrieve_textes_lois.d.ts +0 -1
  239. package/lib/scripts/retrieve_textes_lois.js +0 -240
  240. package/lib/scripts/retrieve_textes_lois.mjs +0 -85
  241. package/lib/scripts/shared/cli_helpers.js +0 -89
  242. package/lib/scripts/shared/cli_helpers.mjs +0 -81
  243. package/lib/scripts/test_iter_load.js +0 -155
  244. package/lib/scripts/test_iter_load.mjs +0 -72
  245. package/lib/scripts/test_load.js +0 -26
  246. package/lib/scripts/test_load.mjs +0 -16
  247. package/lib/scripts/test_load_big_files.js +0 -26
  248. package/lib/scripts/test_load_big_files.mjs +0 -16
  249. package/lib/scripts/validate_json.js +0 -353
  250. package/lib/scripts/validate_json.mjs +0 -184
  251. package/lib/shared_types/codes_actes.js +0 -231
  252. package/lib/shared_types/codes_actes.mjs +0 -224
  253. package/lib/strings.js +0 -16
  254. package/lib/strings.mjs +0 -7
  255. package/lib/types/acteurs_et_organes.js +0 -963
  256. package/lib/types/acteurs_et_organes.mjs +0 -904
  257. package/lib/types/agendas.js +0 -628
  258. package/lib/types/agendas.mjs +0 -575
  259. package/lib/types/amendements.js +0 -899
  260. package/lib/types/amendements.mjs +0 -842
  261. package/lib/types/debats.js +0 -619
  262. package/lib/types/debats.mjs +0 -562
  263. package/lib/types/dossiers_legislatifs.js +0 -1188
  264. package/lib/types/dossiers_legislatifs.mjs +0 -1130
  265. package/lib/types/legislatures.js +0 -17
  266. package/lib/types/legislatures.mjs +0 -10
  267. package/lib/types/questions.js +0 -454
  268. package/lib/types/questions.mjs +0 -401
  269. package/lib/types/scrutins.js +0 -556
  270. package/lib/types/scrutins.mjs +0 -503
  271. package/lib/urls.js +0 -325
  272. package/lib/urls.mjs +0 -258
  273. /package/lib/{bugs/acteur-00010/plugin.test.d.ts → scripts/add_links_to_documents.d.ts} +0 -0
  274. /package/lib/{bugs/agenda-00002/plugin.test.d.ts → scripts/copy-schemas.d.ts} +0 -0
  275. /package/lib/{bugs/agenda-00008/plugin.test.d.ts → scripts/generate-json-schemas.d.ts} +0 -0
@@ -1,264 +0,0 @@
1
- import assert from "assert";
2
- import { JSDOM } from "jsdom";
3
- function parseHeader(header) {
4
- const headersMapping = [{
5
- regex: /^(RAPPORT_)?ANNEXE(_|$)|^ETAT_/,
6
- level: 0,
7
- name: "Annexe"
8
- }, {
9
- regex: /^TOME_/,
10
- level: 1,
11
- name: "Tome"
12
- }, {
13
- regex: /^PARTIE_|^(PREMIERE|SECONDE|DEUXIEME|TROISIEME|QUATRIEME)_PARTIE(_|$)/,
14
- level: 2,
15
- name: "Partie"
16
- }, {
17
- regex: /^LIVRE_/,
18
- level: 3,
19
- name: "Livre"
20
- }, {
21
- regex: /^TITRE_/,
22
- level: 4,
23
- name: "Titre"
24
- }, {
25
- regex: /^SOUSTITRE_/,
26
- level: 5,
27
- name: "SousTitre"
28
- }, {
29
- regex: /^CHAPITRE_/,
30
- level: 6,
31
- name: "Chapitre"
32
- }, {
33
- regex: /^SECTION_/,
34
- level: 7,
35
- name: "Section"
36
- }, {
37
- regex: /^SOUSSECTION_/,
38
- level: 8,
39
- name: "SousSection"
40
- }, {
41
- regex: /^ARTICLES?_/,
42
- level: 9,
43
- name: "Article"
44
- }, {
45
- regex: /^EXPOSE_DES_MOTIFS$/,
46
- level: 9,
47
- name: "ExposeMotifs"
48
- }];
49
- for (let {
50
- regex,
51
- level,
52
- name
53
- } of headersMapping) {
54
- if (header.match(regex)) {
55
- return [level, name];
56
- }
57
- }
58
- return [null, ""];
59
- }
60
- function cleanText(text) {
61
- return text?.replace(/[\n\t]+/g, "").trim() || "";
62
- }
63
- const excludedAlineas = [/^Délibéré en séance publique/, /^Fait le/, /^Le Président,$/, /^Signé/];
64
- export function parseTexte(assembleeUrl, page) {
65
- // Repair HTML.
66
- let html = page.replace(/(<style[\w\W]+style>)/g, "");
67
-
68
- // Extract subdivisions from HTML.
69
- const {
70
- window
71
- } = new JSDOM(html);
72
- const {
73
- document
74
- } = window;
75
- assert.strictEqual(document.children.length, 1);
76
- const htmlElement = document.children[0];
77
- assert.strictEqual(htmlElement.children.length, 2);
78
- const bodyElement = htmlElement.children[1];
79
- if (bodyElement.children.length < 3) {
80
- // Occurs in http://www.assemblee-nationale.fr/15/textes/0326.asp.
81
- window.close(); // Free memory.
82
- return {
83
- error: {
84
- code: -1,
85
- message: "Texte de loi sans contenu"
86
- },
87
- html,
88
- page
89
- };
90
- }
91
- assert.strictEqual(bodyElement.children[0].tagName, "DIV");
92
- // First child is a DIV describing the document (Assemblée's header). Skip it for now.
93
- let bodyChild = bodyElement.children[1];
94
- assert.strictEqual(bodyChild.tagName, "BR");
95
- let alineaElement = null;
96
- let isMultiLinesHeader = false;
97
- let level = null;
98
- let levels = [];
99
- let nextParentState = null;
100
- let state = "nextBodyChild";
101
- const subdivisions = [];
102
- let subdivisionAlineas = null;
103
- let subdivisionHeaders = null;
104
- while (state !== null) {
105
- switch (state) {
106
- case "nextBodyChild":
107
- if (bodyChild.nextElementSibling === null) {
108
- // The document has been fully parsed.
109
- state = null;
110
- } else {
111
- bodyChild = bodyChild.nextElementSibling;
112
- if (bodyChild.tagName === "DIV") {
113
- alineaElement = bodyChild.children[0];
114
- if (alineaElement === undefined || bodyChild.id.includes("ftn")) {
115
- // No alinea in current bodyChild: go to next bodyChild.
116
- state = "nextBodyChild";
117
- } else {
118
- state = "alineaElement";
119
- }
120
- } else {
121
- // <P/> is for footnotes
122
- assert(["BR", "HR", "P"].includes(bodyChild.tagName), `Unexpected tag name "${bodyChild.tagName}" for body child`);
123
- // Stay in the same state to go to next bodyChild.
124
- }
125
- }
126
- break;
127
- case "alineaElement":
128
- switch (alineaElement.tagName) {
129
- case "DIV":
130
- state = "nextAlineaElement";
131
- break;
132
- case "H4":
133
- // TODO
134
- nextParentState = "nextAlineaElement";
135
- state = "firstParagraphChild";
136
- break;
137
- case "P":
138
- nextParentState = "nextAlineaElement";
139
- state = "firstParagraphChild";
140
- break;
141
- case "OL":
142
- // TODO
143
- state = "nextAlineaElement";
144
- break;
145
- case "TABLE":
146
- nextParentState = "nextAlineaElement";
147
- state = "firstParagraphChild";
148
- break;
149
- default:
150
- return {
151
- error: {
152
- code: -2,
153
- message: `Unexpected tag name for alinea element: ${alineaElement.tagName}`
154
- },
155
- html,
156
- page
157
- };
158
- }
159
- break;
160
- case "firstParagraphChild":
161
- const headerText = alineaElement.textContent;
162
- const nameComputed = (headerText || "").normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\(nouveau\)/, "").replace(/\(Pour coordination\)/, "").replace(/\(Supprimés?\)/, "").replace(/ /g, " ").replace(/[\-,.…]/g, "").trim().replace(/ {1,}/g, "_");
163
- const nameUpper = nameComputed.toUpperCase();
164
- const [nextLevel, paragraphType] = parseHeader(nameUpper);
165
- if (!nameUpper || nameUpper.match(/^(PROJET|PROPOSITION)_DE_LOI(_|$)/) !== null) {
166
- // Occurs in:
167
- // * http://www.assemblee-nationale.fr/15/textes/0232.asp
168
- // * http://www.assemblee-nationale.fr/15/textes/0626.asp
169
- // * http://www.assemblee-nationale.fr/15/textes/0676.asp
170
- state = nextParentState;
171
- break;
172
- } else if (nameUpper === "JEUX_OLYMPIQUES_ET_PARALYMPIQUES_DE_2024") {
173
- // Occurs in http://www.assemblee-nationale.fr/15/textes/0676.asp
174
- state = nextParentState;
175
- break;
176
- } else if (nameUpper === "TEXTE_DE_LA_COMMISSION_MIXTE_PARITAIRE") {
177
- // Occurs in http://www.assemblee-nationale.fr/15/textes/1294.asp
178
- state = nextParentState;
179
- break;
180
- }
181
- const lineHtml = cleanText(alineaElement.outerHTML);
182
- const lineText = cleanText(alineaElement.textContent);
183
- if (nextLevel === null) {
184
- // It is a regular alinea
185
- // Exclude some alineas
186
- let excludeAlinea = false;
187
- for (let regex of excludedAlineas) {
188
- if (regex.test(lineText)) {
189
- excludeAlinea = true;
190
- }
191
- }
192
- if (excludeAlinea) {
193
- state = nextParentState;
194
- break;
195
- }
196
- if (subdivisionHeaders.length === 0 || isMultiLinesHeader && subdivisionAlineas.length === 0) {
197
- subdivisionHeaders.push({
198
- texte: lineText,
199
- html: lineHtml
200
- });
201
- } else {
202
- subdivisionAlineas.push({
203
- texte: lineText,
204
- html: lineHtml
205
- });
206
- }
207
- if (isMultiLinesHeader && subdivisionHeaders.length >= 2) {
208
- isMultiLinesHeader = false;
209
- }
210
- // Skip paragraph.
211
- state = nextParentState;
212
- break;
213
- } else if (nextLevel !== null) {
214
- // It is a header
215
- level = nextLevel;
216
- while (levels.length > 0 && level < levels[levels.length - 1]) {
217
- levels.pop();
218
- }
219
- if (levels.length === 0 || level > levels[levels.length - 1]) {
220
- levels.push(level);
221
- }
222
- subdivisionAlineas = [];
223
- subdivisionHeaders = [{
224
- texte: lineText,
225
- html: lineHtml
226
- }];
227
-
228
- // Articles & "Exposé des motifs" are the only divisions without second title.
229
- isMultiLinesHeader = nameUpper.match(/^ARTICLES?_/) === null && nameUpper.match(/^EXPOSE_DES_MOTIFS$/) === null;
230
- subdivisions.push({
231
- id: "D_" + nameComputed,
232
- type: paragraphType,
233
- niveau: level + 1,
234
- niveauRelatif: levels.length,
235
- titres: subdivisionHeaders,
236
- alineas: subdivisionAlineas
237
- });
238
- }
239
- state = nextParentState;
240
- break;
241
- case "nextAlineaElement":
242
- alineaElement = alineaElement.nextElementSibling;
243
- if (alineaElement === null) {
244
- // The bodyChild has been fully parsed. Go to next bodyChild
245
- state = "nextBodyChild";
246
- } else {
247
- state = "alineaElement";
248
- }
249
- break;
250
- default:
251
- throw `Unexpected state: ${state}`;
252
- }
253
- }
254
- window.close(); // Free memory.
255
-
256
- return {
257
- error: null,
258
- html,
259
- page,
260
- subdivisions,
261
- url: assembleeUrl
262
- };
263
- }
264
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJKU0RPTSIsInBhcnNlSGVhZGVyIiwiaGVhZGVyIiwiaGVhZGVyc01hcHBpbmciLCJyZWdleCIsImxldmVsIiwibmFtZSIsIm1hdGNoIiwiY2xlYW5UZXh0IiwidGV4dCIsInJlcGxhY2UiLCJ0cmltIiwiZXhjbHVkZWRBbGluZWFzIiwicGFyc2VUZXh0ZSIsImFzc2VtYmxlZVVybCIsInBhZ2UiLCJodG1sIiwid2luZG93IiwiZG9jdW1lbnQiLCJzdHJpY3RFcXVhbCIsImNoaWxkcmVuIiwibGVuZ3RoIiwiaHRtbEVsZW1lbnQiLCJib2R5RWxlbWVudCIsImNsb3NlIiwiZXJyb3IiLCJjb2RlIiwibWVzc2FnZSIsInRhZ05hbWUiLCJib2R5Q2hpbGQiLCJhbGluZWFFbGVtZW50IiwiaXNNdWx0aUxpbmVzSGVhZGVyIiwibGV2ZWxzIiwibmV4dFBhcmVudFN0YXRlIiwic3RhdGUiLCJzdWJkaXZpc2lvbnMiLCJzdWJkaXZpc2lvbkFsaW5lYXMiLCJzdWJkaXZpc2lvbkhlYWRlcnMiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJ1bmRlZmluZWQiLCJpZCIsImluY2x1ZGVzIiwiaGVhZGVyVGV4dCIsInRleHRDb250ZW50IiwibmFtZUNvbXB1dGVkIiwibm9ybWFsaXplIiwibmFtZVVwcGVyIiwidG9VcHBlckNhc2UiLCJuZXh0TGV2ZWwiLCJwYXJhZ3JhcGhUeXBlIiwibGluZUh0bWwiLCJvdXRlckhUTUwiLCJsaW5lVGV4dCIsImV4Y2x1ZGVBbGluZWEiLCJ0ZXN0IiwicHVzaCIsInRleHRlIiwicG9wIiwidHlwZSIsIm5pdmVhdSIsIm5pdmVhdVJlbGF0aWYiLCJ0aXRyZXMiLCJhbGluZWFzIiwidXJsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlcnMvdGV4dGVzX2xvaXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IEpTRE9NIH0gZnJvbSBcImpzZG9tXCJcblxuZnVuY3Rpb24gcGFyc2VIZWFkZXIoaGVhZGVyOiBzdHJpbmcpOiBbbnVtYmVyIHwgbnVsbCwgc3RyaW5nXSB7XG4gIGNvbnN0IGhlYWRlcnNNYXBwaW5nOiB7IHJlZ2V4OiBSZWdFeHA7IGxldmVsOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9W10gPSBbXG4gICAgeyByZWdleDogL14oUkFQUE9SVF8pP0FOTkVYRShffCQpfF5FVEFUXy8sIGxldmVsOiAwLCBuYW1lOiBcIkFubmV4ZVwiIH0sXG4gICAgeyByZWdleDogL15UT01FXy8sIGxldmVsOiAxLCBuYW1lOiBcIlRvbWVcIiB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OlxuICAgICAgICAvXlBBUlRJRV98XihQUkVNSUVSRXxTRUNPTkRFfERFVVhJRU1FfFRST0lTSUVNRXxRVUFUUklFTUUpX1BBUlRJRShffCQpLyxcbiAgICAgIGxldmVsOiAyLFxuICAgICAgbmFtZTogXCJQYXJ0aWVcIixcbiAgICB9LFxuICAgIHsgcmVnZXg6IC9eTElWUkVfLywgbGV2ZWw6IDMsIG5hbWU6IFwiTGl2cmVcIiB9LFxuICAgIHsgcmVnZXg6IC9eVElUUkVfLywgbGV2ZWw6IDQsIG5hbWU6IFwiVGl0cmVcIiB9LFxuICAgIHsgcmVnZXg6IC9eU09VU1RJVFJFXy8sIGxldmVsOiA1LCBuYW1lOiBcIlNvdXNUaXRyZVwiIH0sXG4gICAgeyByZWdleDogL15DSEFQSVRSRV8vLCBsZXZlbDogNiwgbmFtZTogXCJDaGFwaXRyZVwiIH0sXG4gICAgeyByZWdleDogL15TRUNUSU9OXy8sIGxldmVsOiA3LCBuYW1lOiBcIlNlY3Rpb25cIiB9LFxuICAgIHsgcmVnZXg6IC9eU09VU1NFQ1RJT05fLywgbGV2ZWw6IDgsIG5hbWU6IFwiU291c1NlY3Rpb25cIiB9LFxuICAgIHsgcmVnZXg6IC9eQVJUSUNMRVM/Xy8sIGxldmVsOiA5LCBuYW1lOiBcIkFydGljbGVcIiB9LFxuICAgIHsgcmVnZXg6IC9eRVhQT1NFX0RFU19NT1RJRlMkLywgbGV2ZWw6IDksIG5hbWU6IFwiRXhwb3NlTW90aWZzXCIgfSxcbiAgXVxuXG4gIGZvciAobGV0IHsgcmVnZXgsIGxldmVsLCBuYW1lIH0gb2YgaGVhZGVyc01hcHBpbmcpIHtcbiAgICBpZiAoaGVhZGVyLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgcmV0dXJuIFtsZXZlbCwgbmFtZV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFtudWxsLCBcIlwiXVxufVxuXG5mdW5jdGlvbiBjbGVhblRleHQodGV4dDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0Py5yZXBsYWNlKC9bXFxuXFx0XSsvZywgXCJcIikudHJpbSgpIHx8IFwiXCJcbn1cblxuY29uc3QgZXhjbHVkZWRBbGluZWFzID0gW1xuICAvXkTDqWxpYsOpcsOpIGVuIHPDqWFuY2UgcHVibGlxdWUvLFxuICAvXkZhaXQgbGUvLFxuICAvXkxlIFByw6lzaWRlbnQsJC8sXG4gIC9eU2lnbsOpLyxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGV4dGUoYXNzZW1ibGVlVXJsOiBzdHJpbmcsIHBhZ2U6IHN0cmluZykge1xuICAvLyBSZXBhaXIgSFRNTC5cbiAgbGV0IGh0bWwgPSBwYWdlLnJlcGxhY2UoLyg8c3R5bGVbXFx3XFxXXStzdHlsZT4pL2csIFwiXCIpXG5cbiAgLy8gRXh0cmFjdCBzdWJkaXZpc2lvbnMgZnJvbSBIVE1MLlxuICBjb25zdCB7IHdpbmRvdyB9ID0gbmV3IEpTRE9NKGh0bWwpXG4gIGNvbnN0IHsgZG9jdW1lbnQgfSA9IHdpbmRvd1xuICBhc3NlcnQuc3RyaWN0RXF1YWwoZG9jdW1lbnQuY2hpbGRyZW4ubGVuZ3RoLCAxKVxuICBjb25zdCBodG1sRWxlbWVudCA9IGRvY3VtZW50LmNoaWxkcmVuWzBdXG4gIGFzc2VydC5zdHJpY3RFcXVhbChodG1sRWxlbWVudC5jaGlsZHJlbi5sZW5ndGgsIDIpXG4gIGNvbnN0IGJvZHlFbGVtZW50ID0gaHRtbEVsZW1lbnQuY2hpbGRyZW5bMV1cblxuICBpZiAoYm9keUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIDwgMykge1xuICAgIC8vIE9jY3VycyBpbiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzAzMjYuYXNwLlxuICAgIHdpbmRvdy5jbG9zZSgpIC8vIEZyZWUgbWVtb3J5LlxuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogeyBjb2RlOiAtMSwgbWVzc2FnZTogXCJUZXh0ZSBkZSBsb2kgc2FucyBjb250ZW51XCIgfSxcbiAgICAgIGh0bWwsXG4gICAgICBwYWdlLFxuICAgIH1cbiAgfVxuICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keUVsZW1lbnQuY2hpbGRyZW5bMF0udGFnTmFtZSwgXCJESVZcIilcbiAgLy8gRmlyc3QgY2hpbGQgaXMgYSBESVYgZGVzY3JpYmluZyB0aGUgZG9jdW1lbnQgKEFzc2VtYmzDqWUncyBoZWFkZXIpLiBTa2lwIGl0IGZvciBub3cuXG4gIGxldCBib2R5Q2hpbGQgPSBib2R5RWxlbWVudC5jaGlsZHJlblsxXVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5Q2hpbGQudGFnTmFtZSwgXCJCUlwiKVxuICBsZXQgYWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGxldCBpc011bHRpTGluZXNIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgbGV2ZWw6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIGxldCBsZXZlbHM6IG51bWJlcltdID0gW11cbiAgbGV0IG5leHRQYXJlbnRTdGF0ZSA9IG51bGxcbiAgbGV0IHN0YXRlOiBzdHJpbmcgfCBudWxsID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgY29uc3Qgc3ViZGl2aXNpb25zID0gW11cbiAgbGV0IHN1YmRpdmlzaW9uQWxpbmVhczogb2JqZWN0W10gfCBudWxsID0gbnVsbFxuICBsZXQgc3ViZGl2aXNpb25IZWFkZXJzOiBvYmplY3RbXSB8IG51bGwgPSBudWxsXG4gIHdoaWxlIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgXCJuZXh0Qm9keUNoaWxkXCI6XG4gICAgICAgIGlmIChib2R5Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIGRvY3VtZW50IGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC5cbiAgICAgICAgICBzdGF0ZSA9IG51bGxcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5Q2hpbGQgPSBib2R5Q2hpbGQubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgICAgICAgaWYgKGJvZHlDaGlsZC50YWdOYW1lID09PSBcIkRJVlwiKSB7XG4gICAgICAgICAgICBhbGluZWFFbGVtZW50ID0gYm9keUNoaWxkLmNoaWxkcmVuWzBdXG5cbiAgICAgICAgICAgIGlmIChhbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQgfHwgYm9keUNoaWxkLmlkLmluY2x1ZGVzKFwiZnRuXCIpKSB7XG4gICAgICAgICAgICAgIC8vIE5vIGFsaW5lYSBpbiBjdXJyZW50IGJvZHlDaGlsZDogZ28gdG8gbmV4dCBib2R5Q2hpbGQuXG4gICAgICAgICAgICAgIHN0YXRlID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gXCJhbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gPFAvPiBpcyBmb3IgZm9vdG5vdGVzXG4gICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgIFtcIkJSXCIsIFwiSFJcIiwgXCJQXCJdLmluY2x1ZGVzKGJvZHlDaGlsZC50YWdOYW1lKSxcbiAgICAgICAgICAgICAgYFVuZXhwZWN0ZWQgdGFnIG5hbWUgXCIke2JvZHlDaGlsZC50YWdOYW1lfVwiIGZvciBib2R5IGNoaWxkYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIFN0YXkgaW4gdGhlIHNhbWUgc3RhdGUgdG8gZ28gdG8gbmV4dCBib2R5Q2hpbGQuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiYWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBzd2l0Y2ggKGFsaW5lYUVsZW1lbnQhLnRhZ05hbWUpIHtcbiAgICAgICAgICBjYXNlIFwiRElWXCI6XG4gICAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiSDRcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgc3RhdGUgPSBcImZpcnN0UGFyYWdyYXBoQ2hpbGRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiUFwiOlxuICAgICAgICAgICAgbmV4dFBhcmVudFN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBzdGF0ZSA9IFwiZmlyc3RQYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgXCJPTFwiOlxuICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgc3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIlRBQkxFXCI6XG4gICAgICAgICAgICBuZXh0UGFyZW50U3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgY29kZTogLTIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgdGFnIG5hbWUgZm9yIGFsaW5lYSBlbGVtZW50OiAke1xuICAgICAgICAgICAgICAgICAgYWxpbmVhRWxlbWVudCEudGFnTmFtZVxuICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBodG1sLFxuICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiZmlyc3RQYXJhZ3JhcGhDaGlsZFwiOlxuICAgICAgICBjb25zdCBoZWFkZXJUZXh0ID0gYWxpbmVhRWxlbWVudCEudGV4dENvbnRlbnRcbiAgICAgICAgY29uc3QgbmFtZUNvbXB1dGVkID0gKGhlYWRlclRleHQgfHwgXCJcIilcbiAgICAgICAgICAubm9ybWFsaXplKFwiTkZEXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcKG5vdXZlYXVcXCkvLCBcIlwiKVxuICAgICAgICAgIC5yZXBsYWNlKC9cXChQb3VyIGNvb3JkaW5hdGlvblxcKS8sIFwiXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcKFN1cHByaW3DqXM/XFwpLywgXCJcIilcbiAgICAgICAgICAucmVwbGFjZSgvwqAvZywgXCIgXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXC0sLuKApl0vZywgXCJcIilcbiAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgLnJlcGxhY2UoLyB7MSx9L2csIFwiX1wiKVxuXG4gICAgICAgIGNvbnN0IG5hbWVVcHBlciA9IG5hbWVDb21wdXRlZC50b1VwcGVyQ2FzZSgpXG4gICAgICAgIGNvbnN0IFtuZXh0TGV2ZWwsIHBhcmFncmFwaFR5cGVdID0gcGFyc2VIZWFkZXIobmFtZVVwcGVyKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbmFtZVVwcGVyIHx8XG4gICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKC9eKFBST0pFVHxQUk9QT1NJVElPTilfREVfTE9JKF98JCkvKSAhPT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBPY2N1cnMgaW46XG4gICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzAyMzIuYXNwXG4gICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2MjYuYXNwXG4gICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2NzYuYXNwXG4gICAgICAgICAgc3RhdGUgPSBuZXh0UGFyZW50U3RhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKG5hbWVVcHBlciA9PT0gXCJKRVVYX09MWU1QSVFVRVNfRVRfUEFSQUxZTVBJUVVFU19ERV8yMDI0XCIpIHtcbiAgICAgICAgICAvLyBPY2N1cnMgaW4gaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wNjc2LmFzcFxuICAgICAgICAgIHN0YXRlID0gbmV4dFBhcmVudFN0YXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lVXBwZXIgPT09IFwiVEVYVEVfREVfTEFfQ09NTUlTU0lPTl9NSVhURV9QQVJJVEFJUkVcIikge1xuICAgICAgICAgIC8vIE9jY3VycyBpbiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzEyOTQuYXNwXG4gICAgICAgICAgc3RhdGUgPSBuZXh0UGFyZW50U3RhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGluZUh0bWwgPSBjbGVhblRleHQoYWxpbmVhRWxlbWVudCEub3V0ZXJIVE1MKVxuICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGNsZWFuVGV4dChhbGluZWFFbGVtZW50IS50ZXh0Q29udGVudClcblxuICAgICAgICBpZiAobmV4dExldmVsID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSXQgaXMgYSByZWd1bGFyIGFsaW5lYVxuICAgICAgICAgIC8vIEV4Y2x1ZGUgc29tZSBhbGluZWFzXG4gICAgICAgICAgbGV0IGV4Y2x1ZGVBbGluZWEgPSBmYWxzZVxuICAgICAgICAgIGZvciAobGV0IHJlZ2V4IG9mIGV4Y2x1ZGVkQWxpbmVhcykge1xuICAgICAgICAgICAgaWYgKHJlZ2V4LnRlc3QobGluZVRleHQpKSB7XG4gICAgICAgICAgICAgIGV4Y2x1ZGVBbGluZWEgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChleGNsdWRlQWxpbmVhKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzIS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIChpc011bHRpTGluZXNIZWFkZXIgJiYgc3ViZGl2aXNpb25BbGluZWFzIS5sZW5ndGggPT09IDApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnMhLnB1c2goe1xuICAgICAgICAgICAgICB0ZXh0ZTogbGluZVRleHQsXG4gICAgICAgICAgICAgIGh0bWw6IGxpbmVIdG1sLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzIS5wdXNoKHtcbiAgICAgICAgICAgICAgdGV4dGU6IGxpbmVUZXh0LFxuICAgICAgICAgICAgICBodG1sOiBsaW5lSHRtbCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc011bHRpTGluZXNIZWFkZXIgJiYgc3ViZGl2aXNpb25IZWFkZXJzIS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgaXNNdWx0aUxpbmVzSGVhZGVyID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gU2tpcCBwYXJhZ3JhcGguXG4gICAgICAgICAgc3RhdGUgPSBuZXh0UGFyZW50U3RhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRMZXZlbCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIEl0IGlzIGEgaGVhZGVyXG4gICAgICAgICAgbGV2ZWwgPSBuZXh0TGV2ZWxcbiAgICAgICAgICB3aGlsZSAobGV2ZWxzLmxlbmd0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbHNbbGV2ZWxzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICBsZXZlbHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGxldmVscy5sZW5ndGggPT09IDAgfHwgbGV2ZWwgPiBsZXZlbHNbbGV2ZWxzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICBsZXZlbHMucHVzaChsZXZlbClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXMgPSBbXVxuICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVycyA9IFt7IHRleHRlOiBsaW5lVGV4dCwgaHRtbDogbGluZUh0bWwgfV1cblxuICAgICAgICAgIC8vIEFydGljbGVzICYgXCJFeHBvc8OpIGRlcyBtb3RpZnNcIiBhcmUgdGhlIG9ubHkgZGl2aXNpb25zIHdpdGhvdXQgc2Vjb25kIHRpdGxlLlxuICAgICAgICAgIGlzTXVsdGlMaW5lc0hlYWRlciA9XG4gICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15BUlRJQ0xFUz9fLykgPT09IG51bGwgJiZcbiAgICAgICAgICAgIG5hbWVVcHBlci5tYXRjaCgvXkVYUE9TRV9ERVNfTU9USUZTJC8pID09PSBudWxsXG5cbiAgICAgICAgICBzdWJkaXZpc2lvbnMucHVzaCh7XG4gICAgICAgICAgICBpZDogXCJEX1wiICsgbmFtZUNvbXB1dGVkLFxuICAgICAgICAgICAgdHlwZTogcGFyYWdyYXBoVHlwZSxcbiAgICAgICAgICAgIG5pdmVhdTogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgbml2ZWF1UmVsYXRpZjogbGV2ZWxzLmxlbmd0aCxcbiAgICAgICAgICAgIHRpdHJlczogc3ViZGl2aXNpb25IZWFkZXJzLFxuICAgICAgICAgICAgYWxpbmVhczogc3ViZGl2aXNpb25BbGluZWFzLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIGFsaW5lYUVsZW1lbnQgPSBhbGluZWFFbGVtZW50IS5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgaWYgKGFsaW5lYUVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgYm9keUNoaWxkIGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBib2R5Q2hpbGRcbiAgICAgICAgICBzdGF0ZSA9IFwibmV4dEJvZHlDaGlsZFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBcImFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBgVW5leHBlY3RlZCBzdGF0ZTogJHtzdGF0ZX1gXG4gICAgfVxuICB9XG5cbiAgd2luZG93LmNsb3NlKCkgLy8gRnJlZSBtZW1vcnkuXG5cbiAgcmV0dXJuIHtcbiAgICBlcnJvcjogbnVsbCxcbiAgICBodG1sLFxuICAgIHBhZ2UsXG4gICAgc3ViZGl2aXNpb25zLFxuICAgIHVybDogYXNzZW1ibGVlVXJsLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQVNDLEtBQUssUUFBUSxPQUFPO0FBRTdCLFNBQVNDLFdBQVdBLENBQUNDLE1BQWMsRUFBMkI7RUFDNUQsTUFBTUMsY0FBZ0UsR0FBRyxDQUN2RTtJQUFFQyxLQUFLLEVB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