@tricoteuses/assemblee 1.0.0-next.2 → 1.0.2
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 +2 -0
- package/lib/api.js +23 -7
- package/lib/api.mjs +41 -0
- package/lib/bugs/acteur-00010/plugin.test.js +139 -33
- package/lib/bugs/acteur-00010/plugin.test.mjs +33 -0
- package/lib/bugs/acteur-00010.js +166 -24
- package/lib/bugs/acteur-00010.mjs +31 -0
- package/lib/bugs/agenda-00002/plugin.test.js +178 -52
- package/lib/bugs/agenda-00002/plugin.test.mjs +52 -0
- package/lib/bugs/agenda-00002.js +507 -143
- package/lib/bugs/agenda-00002.mjs +197 -0
- package/lib/bugs/agenda-00008/plugin.test.js +143 -31
- package/lib/bugs/agenda-00008/plugin.test.mjs +31 -0
- package/lib/bugs/agenda-00008.js +180 -25
- package/lib/bugs/agenda-00008.mjs +30 -0
- package/lib/bugs/agenda-00011/plugin.test.js +371 -156
- package/lib/bugs/agenda-00011/plugin.test.mjs +156 -0
- package/lib/bugs/agenda-00011.js +416 -117
- package/lib/bugs/agenda-00011.mjs +150 -0
- package/lib/bugs.js +591 -54
- package/lib/bugs.mjs +93 -0
- package/lib/cleaners/actes_legislatifs.js +149 -61
- package/lib/cleaners/actes_legislatifs.mjs +311 -0
- package/lib/cleaners/acteurs.js +255 -123
- package/lib/cleaners/acteurs.mjs +211 -0
- package/lib/cleaners/amendements.js +242 -117
- package/lib/cleaners/amendements.mjs +292 -0
- package/lib/cleaners/documents.js +147 -62
- package/lib/cleaners/documents.mjs +162 -0
- package/lib/cleaners/dossiers_legislatifs.js +132 -45
- package/lib/cleaners/dossiers_legislatifs.mjs +123 -0
- package/lib/cleaners/index.js +64 -8
- package/lib/cleaners/index.mjs +8 -0
- package/lib/cleaners/organes.js +54 -21
- package/lib/cleaners/organes.mjs +64 -0
- package/lib/cleaners/reunions.js +237 -127
- package/lib/cleaners/reunions.mjs +318 -0
- package/lib/cleaners/scrutins.js +261 -99
- package/lib/cleaners/scrutins.mjs +254 -0
- package/lib/cleaners/xml.js +81 -16
- package/lib/cleaners/xml.mjs +42 -0
- package/lib/datasets.js +284 -153
- package/lib/datasets.mjs +596 -0
- package/lib/dates.js +93 -34
- package/lib/dates.mjs +98 -0
- package/lib/dossiers_legislatifs.js +107 -33
- package/lib/dossiers_legislatifs.mjs +215 -0
- package/lib/file_systems.js +203 -35
- package/lib/file_systems.mjs +64 -0
- package/lib/git.js +139 -41
- package/lib/git.mjs +114 -0
- package/lib/index.js +310 -16
- package/lib/index.mjs +16 -0
- package/lib/inserters.js +355 -131
- package/lib/inserters.mjs +413 -0
- package/lib/loaders.js +900 -440
- package/lib/loaders.mjs +678 -0
- package/lib/organes.js +15 -5
- package/lib/organes.mjs +18 -0
- package/lib/parsers/documents.js +241 -89
- package/lib/parsers/documents.mjs +433 -0
- package/lib/parsers/index.js +36 -3
- package/lib/parsers/index.mjs +3 -0
- package/lib/parsers/recherche_amendements.js +616 -173
- package/lib/parsers/recherche_amendements.mjs +189 -0
- package/lib/raw_types/acteurs_et_organes.d.ts +36 -148
- package/lib/raw_types/acteurs_et_organes.js +228 -506
- package/lib/raw_types/acteurs_et_organes.mjs +1240 -0
- package/lib/raw_types/agendas.js +165 -75
- package/lib/raw_types/agendas.mjs +944 -0
- package/lib/raw_types/amendements.js +165 -77
- package/lib/raw_types/amendements.mjs +1040 -0
- package/lib/raw_types/dossiers_legislatifs.d.ts +1 -43
- package/lib/raw_types/dossiers_legislatifs.js +181 -143
- package/lib/raw_types/dossiers_legislatifs.mjs +1792 -0
- package/lib/raw_types/scrutins.js +144 -61
- package/lib/raw_types/scrutins.mjs +645 -0
- package/lib/scripts/bugs_helper.js +657 -155
- package/lib/scripts/bugs_helper.mjs +286 -0
- package/lib/scripts/clean_data.js +380 -145
- package/lib/scripts/clean_data.mjs +190 -0
- package/lib/scripts/clean_reorganized_data.js +627 -331
- package/lib/scripts/clean_reorganized_data.mjs +520 -0
- package/lib/scripts/diff_amendements.js +159 -73
- package/lib/scripts/diff_amendements.mjs +234 -0
- package/lib/scripts/document_dossiers_legislatifs.js +570 -288
- package/lib/scripts/document_dossiers_legislatifs.mjs +494 -0
- package/lib/scripts/get_today_reunions.js +37 -20
- package/lib/scripts/get_today_reunions.mjs +41 -0
- package/lib/scripts/merge_scrutins.js +121 -39
- package/lib/scripts/merge_scrutins.mjs +69 -0
- package/lib/scripts/parse_textes_lois.js +179 -125
- package/lib/scripts/parse_textes_lois.mjs +215 -0
- package/lib/scripts/raw_types_from_amendements.js +276 -77
- package/lib/scripts/raw_types_from_amendements.mjs +118 -0
- package/lib/scripts/reorganize_data.js +867 -446
- package/lib/scripts/reorganize_data.mjs +712 -0
- package/lib/scripts/retrieve_deputes_photos.js +378 -157
- package/lib/scripts/retrieve_deputes_photos.mjs +230 -0
- package/lib/scripts/retrieve_documents.js +648 -172
- package/lib/scripts/retrieve_documents.mjs +292 -0
- package/lib/scripts/retrieve_open_data.js +286 -85
- package/lib/scripts/retrieve_open_data.mjs +125 -0
- package/lib/scripts/retrieve_pending_amendments.js +302 -69
- package/lib/scripts/retrieve_pending_amendments.mjs +130 -0
- package/lib/scripts/retrieve_senateurs_photos.js +374 -198
- package/lib/scripts/retrieve_senateurs_photos.mjs +277 -0
- package/lib/scripts/retrieve_textes_lois.js +343 -89
- package/lib/scripts/retrieve_textes_lois.mjs +168 -0
- package/lib/scripts/test_load.js +30 -11
- package/lib/scripts/test_load.mjs +26 -0
- package/lib/scripts/test_load_big_files.js +30 -11
- package/lib/scripts/test_load_big_files.mjs +26 -0
- package/lib/scripts/validate_json.js +370 -120
- package/lib/scripts/validate_json.mjs +216 -0
- package/lib/shared_types/codes_actes.js +50 -15
- package/lib/shared_types/codes_actes.mjs +228 -0
- package/lib/strings.js +16 -3
- package/lib/strings.mjs +7 -0
- package/lib/types/acteurs_et_organes.js +156 -71
- package/lib/types/acteurs_et_organes.mjs +918 -0
- package/lib/types/agendas.js +154 -67
- package/lib/types/agendas.mjs +623 -0
- package/lib/types/amendements.js +166 -77
- package/lib/types/amendements.mjs +885 -0
- package/lib/types/dossiers_legislatifs.d.ts +1 -42
- package/lib/types/dossiers_legislatifs.js +182 -143
- package/lib/types/dossiers_legislatifs.mjs +1120 -0
- package/lib/types/legislatures.js +12 -3
- package/lib/types/legislatures.mjs +9 -0
- package/lib/types/scrutins.js +144 -61
- package/lib/types/scrutins.mjs +528 -0
- package/lib/urls.js +44 -25
- package/lib/urls.mjs +201 -0
- package/package.json +33 -12
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import assert from "assert";
|
|
2
|
+
import { cleanBooleanAttribute, cleanXmlArtefacts } from "./xml.mjs";
|
|
3
|
+
import { AvantAApres } from "../types/amendements.mjs";
|
|
4
|
+
export function cleanAmendement(amendement) {
|
|
5
|
+
cleanXmlArtefacts(amendement);
|
|
6
|
+
const signataires = amendement.signataires;
|
|
7
|
+
{
|
|
8
|
+
cleanXmlArtefacts(signataires);
|
|
9
|
+
const auteur = signataires.auteur;
|
|
10
|
+
{
|
|
11
|
+
cleanXmlArtefacts(auteur);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (signataires.cosignataires !== undefined) {
|
|
15
|
+
const acteurRef = signataires.cosignataires.acteurRef;
|
|
16
|
+
|
|
17
|
+
if (Array.isArray(acteurRef)) {
|
|
18
|
+
signataires.cosignatairesRefs = acteurRef;
|
|
19
|
+
} else {
|
|
20
|
+
assert(acteurRef);
|
|
21
|
+
signataires.cosignatairesRefs = [acteurRef];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
delete signataires.cosignataires;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let libelle = signataires.libelle;
|
|
28
|
+
|
|
29
|
+
if (libelle !== undefined) {
|
|
30
|
+
libelle = libelle.split(" ").filter(Boolean).join(" ");
|
|
31
|
+
|
|
32
|
+
if (libelle) {
|
|
33
|
+
signataires.libelle = libelle;
|
|
34
|
+
} else {
|
|
35
|
+
delete signataires.libelle;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const pointeurFragmentTexte = amendement.pointeurFragmentTexte;
|
|
40
|
+
{
|
|
41
|
+
cleanXmlArtefacts(pointeurFragmentTexte);
|
|
42
|
+
const division = pointeurFragmentTexte.division;
|
|
43
|
+
|
|
44
|
+
if (division !== undefined) {
|
|
45
|
+
cleanXmlArtefacts(division);
|
|
46
|
+
let avantAApres = division.avant_A_Apres;
|
|
47
|
+
|
|
48
|
+
if (avantAApres !== undefined) {
|
|
49
|
+
delete division.avant_A_Apres;
|
|
50
|
+
|
|
51
|
+
if (avantAApres === "Après") {
|
|
52
|
+
avantAApres = AvantAApres.Apres;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
division.avantAApres = avantAApres;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const amendementStandard = pointeurFragmentTexte.amendementStandard;
|
|
60
|
+
|
|
61
|
+
if (amendementStandard !== undefined) {
|
|
62
|
+
cleanXmlArtefacts(amendementStandard);
|
|
63
|
+
const alinea = amendementStandard.alinea;
|
|
64
|
+
|
|
65
|
+
if (alinea !== undefined) {
|
|
66
|
+
cleanXmlArtefacts(alinea);
|
|
67
|
+
let avantAApres = alinea.avant_A_Apres;
|
|
68
|
+
|
|
69
|
+
if (avantAApres !== undefined) {
|
|
70
|
+
delete alinea.avant_A_Apres;
|
|
71
|
+
|
|
72
|
+
if (avantAApres === "Après") {
|
|
73
|
+
avantAApres = AvantAApres.Apres;
|
|
74
|
+
} else if (![AvantAApres.A, AvantAApres.Apres, AvantAApres.Avant].includes(avantAApres)) {
|
|
75
|
+
avantAApres = AvantAApres.A;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
alinea.avantAApres = avantAApres;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
pointeurFragmentTexte.alinea = alinea;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
delete pointeurFragmentTexte.amendementStandard;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const corps = amendement.corps;
|
|
88
|
+
|
|
89
|
+
if (corps !== undefined) {
|
|
90
|
+
cleanXmlArtefacts(corps);
|
|
91
|
+
const contenuAuteur = corps.contenuAuteur;
|
|
92
|
+
|
|
93
|
+
if (contenuAuteur !== undefined) {
|
|
94
|
+
cleanXmlArtefacts(contenuAuteur);
|
|
95
|
+
const avantAppel = contenuAuteur.avantAppel;
|
|
96
|
+
|
|
97
|
+
if (avantAppel !== undefined) {
|
|
98
|
+
cleanXmlArtefacts(avantAppel);
|
|
99
|
+
assert.notStrictEqual(avantAppel.dispositif, undefined);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
assert.strictEqual(contenuAuteur.annexeExposeSommaire, undefined);
|
|
103
|
+
const dispositifAmdtCreditPLF = contenuAuteur.dispositifAmdtCreditPLF;
|
|
104
|
+
|
|
105
|
+
if (dispositifAmdtCreditPLF !== undefined) {
|
|
106
|
+
const listeProgrammes = dispositifAmdtCreditPLF.listeProgrammes?.programme;
|
|
107
|
+
|
|
108
|
+
if (listeProgrammes !== undefined) {
|
|
109
|
+
if (Array.isArray(listeProgrammes)) {
|
|
110
|
+
dispositifAmdtCreditPLF.listeProgrammes = listeProgrammes;
|
|
111
|
+
} else {
|
|
112
|
+
assert(listeProgrammes);
|
|
113
|
+
dispositifAmdtCreditPLF.listeProgrammes = [listeProgrammes];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
for (const programme of dispositifAmdtCreditPLF.listeProgrammes) {
|
|
117
|
+
cleanXmlArtefacts(programme);
|
|
118
|
+
|
|
119
|
+
if (programme.lignesCredits !== undefined) {
|
|
120
|
+
let lignesCredits = programme.lignesCredits.ligneCredit;
|
|
121
|
+
|
|
122
|
+
if (lignesCredits === undefined) {
|
|
123
|
+
delete programme.lignesCredits;
|
|
124
|
+
} else {
|
|
125
|
+
if (!Array.isArray(lignesCredits)) {
|
|
126
|
+
assert(lignesCredits);
|
|
127
|
+
lignesCredits = [lignesCredits];
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
programme.lignesCredits = lignesCredits;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (lignesCredits !== undefined) {
|
|
134
|
+
for (const ligneCredit of lignesCredits) {
|
|
135
|
+
cleanXmlArtefacts(ligneCredit);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
const dispositifAmdtCreditPLFR = contenuAuteur.dispositifAmdtCreditPLFR;
|
|
144
|
+
|
|
145
|
+
if (dispositifAmdtCreditPLFR !== undefined) {
|
|
146
|
+
const listeProgrammes = dispositifAmdtCreditPLFR.listeProgrammes?.programme;
|
|
147
|
+
|
|
148
|
+
if (listeProgrammes !== undefined) {
|
|
149
|
+
if (Array.isArray(listeProgrammes)) {
|
|
150
|
+
dispositifAmdtCreditPLFR.listeProgrammes = listeProgrammes;
|
|
151
|
+
} else {
|
|
152
|
+
assert(listeProgrammes);
|
|
153
|
+
dispositifAmdtCreditPLFR.listeProgrammes = [listeProgrammes];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
for (const programme of dispositifAmdtCreditPLFR.listeProgrammes) {
|
|
157
|
+
cleanXmlArtefacts(programme);
|
|
158
|
+
|
|
159
|
+
if (programme.lignesCredits !== undefined) {
|
|
160
|
+
let lignesCredits = programme.lignesCredits.ligneCredit;
|
|
161
|
+
|
|
162
|
+
if (lignesCredits === undefined) {
|
|
163
|
+
delete programme.lignesCredits;
|
|
164
|
+
} else {
|
|
165
|
+
if (!Array.isArray(lignesCredits)) {
|
|
166
|
+
assert(lignesCredits);
|
|
167
|
+
lignesCredits = [lignesCredits];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
programme.lignesCredits = lignesCredits;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (lignesCredits !== undefined) {
|
|
174
|
+
for (const ligneCredit of lignesCredits) {
|
|
175
|
+
cleanLigneCreditPLFR(ligneCredit);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const cycleDeVie = amendement.cycleDeVie;
|
|
186
|
+
|
|
187
|
+
if (cycleDeVie !== undefined) {
|
|
188
|
+
cleanXmlArtefacts(cycleDeVie);
|
|
189
|
+
const etatDesTraitements = cycleDeVie.etatDesTraitements;
|
|
190
|
+
{
|
|
191
|
+
cleanXmlArtefacts(etatDesTraitements);
|
|
192
|
+
const etat = etatDesTraitements.etat;
|
|
193
|
+
{
|
|
194
|
+
cleanXmlArtefacts(etat);
|
|
195
|
+
}
|
|
196
|
+
const sousEtat = etatDesTraitements.sousEtat;
|
|
197
|
+
|
|
198
|
+
if (sousEtat !== undefined) {
|
|
199
|
+
cleanXmlArtefacts(sousEtat);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (amendement.representations !== undefined) {
|
|
205
|
+
const representation = amendement.representations.representation;
|
|
206
|
+
assert(!Array.isArray(representation));
|
|
207
|
+
amendement.representation = representation;
|
|
208
|
+
delete amendement.representations;
|
|
209
|
+
{
|
|
210
|
+
cleanXmlArtefacts(representation);
|
|
211
|
+
assert.strictEqual(representation.repSource, undefined);
|
|
212
|
+
assert.strictEqual(representation.offset, undefined);
|
|
213
|
+
assert.strictEqual(representation.dateDispoRepresentation, undefined);
|
|
214
|
+
const statutRepresentation = representation.statutRepresentation;
|
|
215
|
+
{
|
|
216
|
+
cleanBooleanAttribute(statutRepresentation, "canonique");
|
|
217
|
+
cleanBooleanAttribute(statutRepresentation, "enregistrement");
|
|
218
|
+
cleanBooleanAttribute(statutRepresentation, "officielle");
|
|
219
|
+
cleanBooleanAttribute(statutRepresentation, "transcription");
|
|
220
|
+
cleanBooleanAttribute(statutRepresentation, "verbatim");
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
const loiReference = amendement.loiReference;
|
|
226
|
+
|
|
227
|
+
if (loiReference !== undefined) {
|
|
228
|
+
cleanXmlArtefacts(loiReference);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const discussionCommune = amendement.discussionCommune;
|
|
232
|
+
|
|
233
|
+
if (discussionCommune !== undefined) {
|
|
234
|
+
cleanXmlArtefacts(discussionCommune);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const discussionIdentique = amendement.discussionIdentique;
|
|
238
|
+
|
|
239
|
+
if (discussionIdentique !== undefined) {
|
|
240
|
+
cleanXmlArtefacts(discussionIdentique);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function cleanLigneCreditPLFR(ligneCreditPLFR) {
|
|
245
|
+
cleanXmlArtefacts(ligneCreditPLFR);
|
|
246
|
+
|
|
247
|
+
if (ligneCreditPLFR.lignesCredits !== undefined) {
|
|
248
|
+
let lignesCredits = ligneCreditPLFR.lignesCredits.ligneCredit;
|
|
249
|
+
|
|
250
|
+
if (lignesCredits === undefined) {
|
|
251
|
+
delete ligneCreditPLFR.lignesCredits;
|
|
252
|
+
} else {
|
|
253
|
+
if (!Array.isArray(lignesCredits)) {
|
|
254
|
+
assert(lignesCredits);
|
|
255
|
+
lignesCredits = [lignesCredits];
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
ligneCreditPLFR.lignesCredits = lignesCredits;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (lignesCredits !== undefined) {
|
|
262
|
+
for (const ligneCredit of lignesCredits) {
|
|
263
|
+
cleanLigneCreditPLFR(ligneCredit);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export function cleanTexteLegislatif(texteLegislatif) {
|
|
270
|
+
cleanXmlArtefacts(texteLegislatif); // Note: The following fields in `texteLegislatif.amendements` are currently ignored:
|
|
271
|
+
// * "#text"?: string;
|
|
272
|
+
// * offset?: null;
|
|
273
|
+
// * nom?: Nom;
|
|
274
|
+
// * avant_A_Apres?: DivisionAvantAApres;
|
|
275
|
+
// * dateDepot?: Date;
|
|
276
|
+
// * documentURI?: string;
|
|
277
|
+
// Because it seems they should belong to an "amendement".
|
|
278
|
+
|
|
279
|
+
let amendement = texteLegislatif.amendements.amendement;
|
|
280
|
+
|
|
281
|
+
if (Array.isArray(amendement)) {
|
|
282
|
+
texteLegislatif.amendements = amendement;
|
|
283
|
+
} else {
|
|
284
|
+
assert(amendement);
|
|
285
|
+
texteLegislatif.amendements = [amendement];
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
for (const amendement of texteLegislatif.amendements) {
|
|
289
|
+
cleanAmendement(amendement);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJjbGVhblhtbEFydGVmYWN0cyIsIkF2YW50QUFwcmVzIiwiY2xlYW5BbWVuZGVtZW50IiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiY29zaWduYXRhaXJlcyIsInVuZGVmaW5lZCIsImFjdGV1clJlZiIsIkFycmF5IiwiaXNBcnJheSIsImNvc2lnbmF0YWlyZXNSZWZzIiwibGliZWxsZSIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJwb2ludGV1ckZyYWdtZW50VGV4dGUiLCJkaXZpc2lvbiIsImF2YW50QUFwcmVzIiwiYXZhbnRfQV9BcHJlcyIsIkFwcmVzIiwiYW1lbmRlbWVudFN0YW5kYXJkIiwiYWxpbmVhIiwiQSIsIkF2YW50IiwiaW5jbHVkZXMiLCJjb3JwcyIsImNvbnRlbnVBdXRldXIiLCJhdmFudEFwcGVsIiwibm90U3RyaWN0RXF1YWwiLCJkaXNwb3NpdGlmIiwic3RyaWN0RXF1YWwiLCJhbm5leGVFeHBvc2VTb21tYWlyZSIsImRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGIiwibGlzdGVQcm9ncmFtbWVzIiwicHJvZ3JhbW1lIiwibGlnbmVzQ3JlZGl0cyIsImxpZ25lQ3JlZGl0IiwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSIiwiY2xlYW5MaWduZUNyZWRpdFBMRlIiLCJjeWNsZURlVmllIiwiZXRhdERlc1RyYWl0ZW1lbnRzIiwiZXRhdCIsInNvdXNFdGF0IiwicmVwcmVzZW50YXRpb25zIiwicmVwcmVzZW50YXRpb24iLCJyZXBTb3VyY2UiLCJvZmZzZXQiLCJkYXRlRGlzcG9SZXByZXNlbnRhdGlvbiIsInN0YXR1dFJlcHJlc2VudGF0aW9uIiwibG9pUmVmZXJlbmNlIiwiZGlzY3Vzc2lvbkNvbW11bmUiLCJkaXNjdXNzaW9uSWRlbnRpcXVlIiwibGlnbmVDcmVkaXRQTEZSIiwiY2xlYW5UZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJhbWVuZGVtZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGVhbmVycy9hbWVuZGVtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuXG5pbXBvcnQgeyBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUsIGNsZWFuWG1sQXJ0ZWZhY3RzIH0gZnJvbSBcIi4veG1sXCJcbmltcG9ydCB7IEF2YW50QUFwcmVzIH0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQW1lbmRlbWVudChhbWVuZGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoYW1lbmRlbWVudClcblxuICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHNpZ25hdGFpcmVzKVxuXG4gICAgY29uc3QgYXV0ZXVyID0gc2lnbmF0YWlyZXMuYXV0ZXVyXG4gICAge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoYXV0ZXVyKVxuICAgIH1cblxuICAgIGlmIChzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1clJlZiA9IHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXMuYWN0ZXVyUmVmXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhY3RldXJSZWYpKSB7XG4gICAgICAgIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzID0gYWN0ZXVyUmVmXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQoYWN0ZXVyUmVmKVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmcyA9IFthY3RldXJSZWZdXG4gICAgICB9XG4gICAgICBkZWxldGUgc2lnbmF0YWlyZXMuY29zaWduYXRhaXJlc1xuICAgIH1cblxuICAgIGxldCBsaWJlbGxlID0gc2lnbmF0YWlyZXMubGliZWxsZVxuICAgIGlmIChsaWJlbGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpYmVsbGUgPSBsaWJlbGxlLnNwbGl0KFwiIFwiKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIilcbiAgICAgIGlmIChsaWJlbGxlKSB7XG4gICAgICAgIHNpZ25hdGFpcmVzLmxpYmVsbGUgPSBsaWJlbGxlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgc2lnbmF0YWlyZXMubGliZWxsZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBvaW50ZXVyRnJhZ21lbnRUZXh0ZSA9IGFtZW5kZW1lbnQucG9pbnRldXJGcmFnbWVudFRleHRlXG4gIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhwb2ludGV1ckZyYWdtZW50VGV4dGUpXG5cbiAgICBjb25zdCBkaXZpc2lvbiA9IHBvaW50ZXVyRnJhZ21lbnRUZXh0ZS5kaXZpc2lvblxuICAgIGlmIChkaXZpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhkaXZpc2lvbilcblxuICAgICAgbGV0IGF2YW50QUFwcmVzID0gZGl2aXNpb24uYXZhbnRfQV9BcHJlc1xuICAgICAgaWYgKGF2YW50QUFwcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIGRpdmlzaW9uLmF2YW50X0FfQXByZXNcbiAgICAgICAgaWYgKGF2YW50QUFwcmVzID09PSBcIkFwcsOoc1wiKSB7XG4gICAgICAgICAgYXZhbnRBQXByZXMgPSBBdmFudEFBcHJlcy5BcHJlc1xuICAgICAgICB9XG4gICAgICAgIGRpdmlzaW9uLmF2YW50QUFwcmVzID0gYXZhbnRBQXByZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhbWVuZGVtZW50U3RhbmRhcmQgPSBwb2ludGV1ckZyYWdtZW50VGV4dGUuYW1lbmRlbWVudFN0YW5kYXJkXG4gICAgaWYgKGFtZW5kZW1lbnRTdGFuZGFyZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhhbWVuZGVtZW50U3RhbmRhcmQpXG5cbiAgICAgIGNvbnN0IGFsaW5lYSA9IGFtZW5kZW1lbnRTdGFuZGFyZC5hbGluZWFcbiAgICAgIGlmIChhbGluZWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhbGluZWEpXG5cbiAgICAgICAgbGV0IGF2YW50QUFwcmVzID0gYWxpbmVhLmF2YW50X0FfQXByZXNcbiAgICAgICAgaWYgKGF2YW50QUFwcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgYWxpbmVhLmF2YW50X0FfQXByZXNcbiAgICAgICAgICBpZiAoYXZhbnRBQXByZXMgPT09IFwiQXByw6hzXCIpIHtcbiAgICAgICAgICAgIGF2YW50QUFwcmVzID0gQXZhbnRBQXByZXMuQXByZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgIVtBdmFudEFBcHJlcy5BLCBBdmFudEFBcHJlcy5BcHJlcywgQXZhbnRBQXByZXMuQXZhbnRdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBhdmFudEFBcHJlcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGF2YW50QUFwcmVzID0gQXZhbnRBQXByZXMuQVxuICAgICAgICAgIH1cbiAgICAgICAgICBhbGluZWEuYXZhbnRBQXByZXMgPSBhdmFudEFBcHJlc1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRldXJGcmFnbWVudFRleHRlLmFsaW5lYSA9IGFsaW5lYVxuICAgICAgfVxuICAgICAgZGVsZXRlIHBvaW50ZXVyRnJhZ21lbnRUZXh0ZS5hbWVuZGVtZW50U3RhbmRhcmRcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb3JwcyA9IGFtZW5kZW1lbnQuY29ycHNcbiAgaWYgKGNvcnBzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhjb3JwcylcblxuICAgIGNvbnN0IGNvbnRlbnVBdXRldXIgPSBjb3Jwcy5jb250ZW51QXV0ZXVyXG4gICAgaWYgKGNvbnRlbnVBdXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoY29udGVudUF1dGV1cilcblxuICAgICAgY29uc3QgYXZhbnRBcHBlbCA9IGNvbnRlbnVBdXRldXIuYXZhbnRBcHBlbFxuICAgICAgaWYgKGF2YW50QXBwZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhdmFudEFwcGVsKVxuXG4gICAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhdmFudEFwcGVsLmRpc3Bvc2l0aWYsIHVuZGVmaW5lZClcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbnRlbnVBdXRldXIuYW5uZXhlRXhwb3NlU29tbWFpcmUsIHVuZGVmaW5lZClcblxuICAgICAgY29uc3QgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYgPSBjb250ZW51QXV0ZXVyLmRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGXG4gICAgICBpZiAoZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBsaXN0ZVByb2dyYW1tZXMgPVxuICAgICAgICAgIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGLmxpc3RlUHJvZ3JhbW1lcz8ucHJvZ3JhbW1lXG4gICAgICAgIGlmIChsaXN0ZVByb2dyYW1tZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlUHJvZ3JhbW1lcykpIHtcbiAgICAgICAgICAgIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGLmxpc3RlUHJvZ3JhbW1lcyA9IGxpc3RlUHJvZ3JhbW1lc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQobGlzdGVQcm9ncmFtbWVzKVxuICAgICAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYubGlzdGVQcm9ncmFtbWVzID0gW2xpc3RlUHJvZ3JhbW1lc11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHByb2dyYW1tZSBvZiBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRi5saXN0ZVByb2dyYW1tZXMpIHtcbiAgICAgICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHByb2dyYW1tZSlcblxuICAgICAgICAgICAgaWYgKHByb2dyYW1tZS5saWduZXNDcmVkaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgbGV0IGxpZ25lc0NyZWRpdHMgPSBwcm9ncmFtbWUubGlnbmVzQ3JlZGl0cy5saWduZUNyZWRpdFxuICAgICAgICAgICAgICBpZiAobGlnbmVzQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1tZS5saWduZXNDcmVkaXRzXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpZ25lc0NyZWRpdHMpKSB7XG4gICAgICAgICAgICAgICAgICBhc3NlcnQobGlnbmVzQ3JlZGl0cylcbiAgICAgICAgICAgICAgICAgIGxpZ25lc0NyZWRpdHMgPSBbbGlnbmVzQ3JlZGl0c11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHMgPSBsaWduZXNDcmVkaXRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbGlnbmVDcmVkaXQgb2YgbGlnbmVzQ3JlZGl0cykge1xuICAgICAgICAgICAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMobGlnbmVDcmVkaXQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUiA9IGNvbnRlbnVBdXRldXIuZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSXG4gICAgICBpZiAoZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbGlzdGVQcm9ncmFtbWVzID1cbiAgICAgICAgICBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRlIubGlzdGVQcm9ncmFtbWVzPy5wcm9ncmFtbWVcbiAgICAgICAgaWYgKGxpc3RlUHJvZ3JhbW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVQcm9ncmFtbWVzKSkge1xuICAgICAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLmxpc3RlUHJvZ3JhbW1lcyA9IGxpc3RlUHJvZ3JhbW1lc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQobGlzdGVQcm9ncmFtbWVzKVxuICAgICAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLmxpc3RlUHJvZ3JhbW1lcyA9IFtsaXN0ZVByb2dyYW1tZXNdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9ncmFtbWUgb2YgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLmxpc3RlUHJvZ3JhbW1lcykge1xuICAgICAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMocHJvZ3JhbW1lKVxuXG4gICAgICAgICAgICBpZiAocHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBsZXQgbGlnbmVzQ3JlZGl0cyA9IHByb2dyYW1tZS5saWduZXNDcmVkaXRzLmxpZ25lQ3JlZGl0XG4gICAgICAgICAgICAgIGlmIChsaWduZXNDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHNcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlnbmVzQ3JlZGl0cykpIHtcbiAgICAgICAgICAgICAgICAgIGFzc2VydChsaWduZXNDcmVkaXRzKVxuICAgICAgICAgICAgICAgICAgbGlnbmVzQ3JlZGl0cyA9IFtsaWduZXNDcmVkaXRzXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9ncmFtbWUubGlnbmVzQ3JlZGl0cyA9IGxpZ25lc0NyZWRpdHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAobGlnbmVzQ3JlZGl0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsaWduZUNyZWRpdCBvZiBsaWduZXNDcmVkaXRzKSB7XG4gICAgICAgICAgICAgICAgICBjbGVhbkxpZ25lQ3JlZGl0UExGUihsaWduZUNyZWRpdClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjeWNsZURlVmllID0gYW1lbmRlbWVudC5jeWNsZURlVmllXG4gIGlmIChjeWNsZURlVmllICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhjeWNsZURlVmllKVxuXG4gICAgY29uc3QgZXRhdERlc1RyYWl0ZW1lbnRzID0gY3ljbGVEZVZpZS5ldGF0RGVzVHJhaXRlbWVudHNcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhldGF0RGVzVHJhaXRlbWVudHMpXG5cbiAgICAgIGNvbnN0IGV0YXQgPSBldGF0RGVzVHJhaXRlbWVudHMuZXRhdFxuICAgICAge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhldGF0KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VzRXRhdCA9IGV0YXREZXNUcmFpdGVtZW50cy5zb3VzRXRhdFxuICAgICAgaWYgKHNvdXNFdGF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoc291c0V0YXQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFtZW5kZW1lbnQucmVwcmVzZW50YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCByZXByZXNlbnRhdGlvbiA9IGFtZW5kZW1lbnQucmVwcmVzZW50YXRpb25zLnJlcHJlc2VudGF0aW9uXG4gICAgYXNzZXJ0KCFBcnJheS5pc0FycmF5KHJlcHJlc2VudGF0aW9uKSlcbiAgICBhbWVuZGVtZW50LnJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb25cbiAgICBkZWxldGUgYW1lbmRlbWVudC5yZXByZXNlbnRhdGlvbnNcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhyZXByZXNlbnRhdGlvbilcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLnJlcFNvdXJjZSwgdW5kZWZpbmVkKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLm9mZnNldCwgdW5kZWZpbmVkKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLmRhdGVEaXNwb1JlcHJlc2VudGF0aW9uLCB1bmRlZmluZWQpXG5cbiAgICAgIGNvbnN0IHN0YXR1dFJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb24uc3RhdHV0UmVwcmVzZW50YXRpb25cbiAgICAgIHtcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcImNhbm9uaXF1ZVwiKVxuICAgICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoc3RhdHV0UmVwcmVzZW50YXRpb24sIFwiZW5yZWdpc3RyZW1lbnRcIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcIm9mZmljaWVsbGVcIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcInRyYW5zY3JpcHRpb25cIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcInZlcmJhdGltXCIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbG9pUmVmZXJlbmNlID0gYW1lbmRlbWVudC5sb2lSZWZlcmVuY2VcbiAgaWYgKGxvaVJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMobG9pUmVmZXJlbmNlKVxuICB9XG5cbiAgY29uc3QgZGlzY3Vzc2lvbkNvbW11bmUgPSBhbWVuZGVtZW50LmRpc2N1c3Npb25Db21tdW5lXG4gIGlmIChkaXNjdXNzaW9uQ29tbXVuZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoZGlzY3Vzc2lvbkNvbW11bmUpXG4gIH1cblxuICBjb25zdCBkaXNjdXNzaW9uSWRlbnRpcXVlID0gYW1lbmRlbWVudC5kaXNjdXNzaW9uSWRlbnRpcXVlXG4gIGlmIChkaXNjdXNzaW9uSWRlbnRpcXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhkaXNjdXNzaW9uSWRlbnRpcXVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuTGlnbmVDcmVkaXRQTEZSKGxpZ25lQ3JlZGl0UExGUjogYW55KSB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKGxpZ25lQ3JlZGl0UExGUilcblxuICBpZiAobGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBsaWduZXNDcmVkaXRzID0gbGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHMubGlnbmVDcmVkaXRcbiAgICBpZiAobGlnbmVzQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgbGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHNcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpZ25lc0NyZWRpdHMpKSB7XG4gICAgICAgIGFzc2VydChsaWduZXNDcmVkaXRzKVxuICAgICAgICBsaWduZXNDcmVkaXRzID0gW2xpZ25lc0NyZWRpdHNdXG4gICAgICB9XG4gICAgICBsaWduZUNyZWRpdFBMRlIubGlnbmVzQ3JlZGl0cyA9IGxpZ25lc0NyZWRpdHNcbiAgICB9XG4gICAgaWYgKGxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsaWduZUNyZWRpdCBvZiBsaWduZXNDcmVkaXRzKSB7XG4gICAgICAgIGNsZWFuTGlnbmVDcmVkaXRQTEZSKGxpZ25lQ3JlZGl0KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5UZXh0ZUxlZ2lzbGF0aWYodGV4dGVMZWdpc2xhdGlmOiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHModGV4dGVMZWdpc2xhdGlmKVxuXG4gIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgZmllbGRzIGluIGB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHNgIGFyZSBjdXJyZW50bHkgaWdub3JlZDpcbiAgLy8gKiBcIiN0ZXh0XCI/OiAgICAgICBzdHJpbmc7XG4gIC8vICogb2Zmc2V0PzogICAgICAgIG51bGw7XG4gIC8vICogbm9tPzogICAgICAgICAgIE5vbTtcbiAgLy8gKiBhdmFudF9BX0FwcmVzPzogRGl2aXNpb25BdmFudEFBcHJlcztcbiAgLy8gKiBkYXRlRGVwb3Q/OiAgICAgRGF0ZTtcbiAgLy8gKiBkb2N1bWVudFVSST86ICAgc3RyaW5nO1xuICAvLyBCZWNhdXNlIGl0IHNlZW1zIHRoZXkgc2hvdWxkIGJlbG9uZyB0byBhbiBcImFtZW5kZW1lbnRcIi5cbiAgbGV0IGFtZW5kZW1lbnQgPSB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMuYW1lbmRlbWVudFxuICBpZiAoQXJyYXkuaXNBcnJheShhbWVuZGVtZW50KSkge1xuICAgIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cyA9IGFtZW5kZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoYW1lbmRlbWVudClcbiAgICB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMgPSBbYW1lbmRlbWVudF1cbiAgfVxuXG4gIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICBjbGVhbkFtZW5kZW1lbnQoYW1lbmRlbWVudClcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFQLE1BQW1CLFFBQW5CO1NBRVNDLHFCLEVBQXVCQyxpQjtTQUN2QkMsVztBQUVULE9BQU8sU0FBU0MsZUFBVCxDQUF5QkMsVUFBekIsRUFBZ0Q7RUFDckRILGlCQUFpQixDQUFDRyxVQUFELENBQWpCO0VBRUEsTUFBTUMsV0FBVyxHQUFHRCxVQUFVLENBQUNDLFdBQS9CO0VBQ0E7SUFDRUosaUJBQWlCLENBQUNJLFdBQUQsQ0FBakI7SUFFQSxNQUFNQyxNQUFNLEdBQUdELFdBQVcsQ0FBQ0MsTUFBM0I7SUFDQTtNQUNFTCxpQkFBaUIsQ0FBQ0ssTUFBRCxDQUFqQjtJQUNEOztJQUVELElBQUlELFdBQVcsQ0FBQ0UsYUFBWixLQUE4QkMsU0FBbEMsRUFBNkM7TUFDM0MsTUFBTUMsU0FBUyxHQUFHSixXQUFXLENBQUNFLGFBQVosQ0FBMEJFLFNBQTVDOztNQUNBLElBQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixTQUFkLENBQUosRUFBOEI7UUFDNUJKLFdBQVcsQ0FBQ08saUJBQVosR0FBZ0NILFNBQWhDO01BQ0QsQ0FGRCxNQUVPO1FBQ0xWLE1BQU0sQ0FBQ1UsU0FBRCxDQUFOO1FBQ0FKLFdBQVcsQ0FBQ08saUJBQVosR0FBZ0MsQ0FBQ0gsU0FBRCxDQUFoQztNQUNEOztNQUNELE9BQU9KLFdBQVcsQ0FBQ0UsYUFBbkI7SUFDRDs7SUFFRCxJQUFJTSxPQUFPLEdBQUdSLFdBQVcsQ0FBQ1EsT0FBMUI7O0lBQ0EsSUFBSUEsT0FBTyxLQUFLTCxTQUFoQixFQUEyQjtNQUN6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
|