@tricoteuses/assemblee 1.0.7 → 1.1.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 (134) hide show
  1. package/lib/api.js +3 -9
  2. package/lib/api.mjs +4 -5
  3. package/lib/bugs/acteur-00010/plugin.test.js +3 -50
  4. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  5. package/lib/bugs/acteur-00010.js +2 -57
  6. package/lib/bugs/acteur-00010.mjs +1 -6
  7. package/lib/bugs/agenda-00002/plugin.test.js +3 -53
  8. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -3
  9. package/lib/bugs/agenda-00002.js +3 -148
  10. package/lib/bugs/agenda-00002.mjs +1 -28
  11. package/lib/bugs/agenda-00008/plugin.test.js +3 -52
  12. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  13. package/lib/bugs/agenda-00008.js +2 -61
  14. package/lib/bugs/agenda-00008.mjs +1 -5
  15. package/lib/bugs/agenda-00011/plugin.test.js +5 -99
  16. package/lib/bugs/agenda-00011/plugin.test.mjs +3 -3
  17. package/lib/bugs/agenda-00011.js +4 -105
  18. package/lib/bugs/agenda-00011.mjs +3 -29
  19. package/lib/bugs.js +3 -164
  20. package/lib/bugs.mjs +1 -26
  21. package/lib/cleaners/actes_legislatifs.js +11 -115
  22. package/lib/cleaners/actes_legislatifs.mjs +7 -82
  23. package/lib/cleaners/acteurs.js +12 -92
  24. package/lib/cleaners/acteurs.mjs +7 -38
  25. package/lib/cleaners/amendements.js +10 -103
  26. package/lib/cleaners/amendements.mjs +4 -58
  27. package/lib/cleaners/documents.js +5 -67
  28. package/lib/cleaners/documents.mjs +1 -37
  29. package/lib/cleaners/dossiers_legislatifs.js +5 -61
  30. package/lib/cleaners/dossiers_legislatifs.mjs +1 -29
  31. package/lib/cleaners/index.js +1 -9
  32. package/lib/cleaners/index.mjs +1 -1
  33. package/lib/cleaners/organes.js +1 -33
  34. package/lib/cleaners/organes.mjs +1 -17
  35. package/lib/cleaners/reunions.js +4 -119
  36. package/lib/cleaners/reunions.mjs +1 -64
  37. package/lib/cleaners/scrutins.js +10 -102
  38. package/lib/cleaners/scrutins.mjs +1 -48
  39. package/lib/cleaners/xml.js +8 -42
  40. package/lib/cleaners/xml.mjs +6 -8
  41. package/lib/datasets.js +14 -113
  42. package/lib/datasets.mjs +6 -46
  43. package/lib/dates.js +7 -37
  44. package/lib/dates.mjs +9 -14
  45. package/lib/dossiers_legislatifs.js +6 -68
  46. package/lib/dossiers_legislatifs.mjs +5 -36
  47. package/lib/file_systems.js +56 -139
  48. package/lib/file_systems.mjs +1 -9
  49. package/lib/git.js +4 -53
  50. package/lib/git.mjs +1 -12
  51. package/lib/index.js +1 -15
  52. package/lib/index.mjs +1 -1
  53. package/lib/inserters.js +23 -146
  54. package/lib/inserters.mjs +6 -87
  55. package/lib/loaders.js +44 -316
  56. package/lib/loaders.mjs +12 -135
  57. package/lib/organes.js +1 -7
  58. package/lib/organes.mjs +1 -4
  59. package/lib/parsers/documents.js +22 -151
  60. package/lib/parsers/documents.mjs +19 -81
  61. package/lib/parsers/index.js +1 -4
  62. package/lib/parsers/index.mjs +1 -1
  63. package/lib/parsers/recherche_amendements.js +302 -527
  64. package/lib/parsers/recherche_amendements.mjs +8 -31
  65. package/lib/raw_types/acteurs_et_organes.d.ts +1 -30
  66. package/lib/raw_types/acteurs_et_organes.js +5 -124
  67. package/lib/raw_types/acteurs_et_organes.mjs +5 -105
  68. package/lib/raw_types/agendas.js +6 -89
  69. package/lib/raw_types/agendas.mjs +9 -65
  70. package/lib/raw_types/amendements.d.ts +2 -0
  71. package/lib/raw_types/amendements.js +10 -90
  72. package/lib/raw_types/amendements.mjs +11 -69
  73. package/lib/raw_types/dossiers_legislatifs.js +6 -96
  74. package/lib/raw_types/dossiers_legislatifs.mjs +6 -73
  75. package/lib/raw_types/scrutins.js +6 -81
  76. package/lib/raw_types/scrutins.mjs +9 -57
  77. package/lib/scripts/bugs_helper.js +2 -181
  78. package/lib/scripts/bugs_helper.mjs +2 -39
  79. package/lib/scripts/clean_data.js +27 -143
  80. package/lib/scripts/clean_data.mjs +15 -34
  81. package/lib/scripts/clean_reorganized_data.js +76 -240
  82. package/lib/scripts/clean_reorganized_data.mjs +36 -99
  83. package/lib/scripts/diff_amendements.js +19 -79
  84. package/lib/scripts/diff_amendements.mjs +17 -35
  85. package/lib/scripts/document_dossiers_legislatifs.js +17 -142
  86. package/lib/scripts/document_dossiers_legislatifs.mjs +6 -90
  87. package/lib/scripts/get_today_reunions.js +4 -22
  88. package/lib/scripts/get_today_reunions.mjs +1 -7
  89. package/lib/scripts/merge_scrutins.js +3 -47
  90. package/lib/scripts/merge_scrutins.mjs +1 -9
  91. package/lib/scripts/parse_textes_lois.js +15 -44
  92. package/lib/scripts/parse_textes_lois.mjs +18 -19
  93. package/lib/scripts/raw_types_from_amendements.js +3 -95
  94. package/lib/scripts/raw_types_from_amendements.mjs +1 -16
  95. package/lib/scripts/reorganize_data.js +74 -294
  96. package/lib/scripts/reorganize_data.mjs +22 -133
  97. package/lib/scripts/retrieve_deputes_photos.js +6 -119
  98. package/lib/scripts/retrieve_deputes_photos.mjs +7 -33
  99. package/lib/scripts/retrieve_documents.js +4 -192
  100. package/lib/scripts/retrieve_documents.mjs +2 -50
  101. package/lib/scripts/retrieve_open_data.js +44 -116
  102. package/lib/scripts/retrieve_open_data.mjs +14 -19
  103. package/lib/scripts/retrieve_pending_amendments.js +4 -98
  104. package/lib/scripts/retrieve_pending_amendments.mjs +1 -14
  105. package/lib/scripts/retrieve_senateurs_photos.js +18 -114
  106. package/lib/scripts/retrieve_senateurs_photos.mjs +20 -48
  107. package/lib/scripts/retrieve_textes_lois.js +3 -122
  108. package/lib/scripts/retrieve_textes_lois.mjs +3 -21
  109. package/lib/scripts/test_load.js +2 -10
  110. package/lib/scripts/test_load.mjs +2 -1
  111. package/lib/scripts/test_load_big_files.js +2 -10
  112. package/lib/scripts/test_load_big_files.mjs +2 -1
  113. package/lib/scripts/validate_json.js +4 -119
  114. package/lib/scripts/validate_json.mjs +2 -36
  115. package/lib/shared_types/codes_actes.js +1 -24
  116. package/lib/shared_types/codes_actes.mjs +3 -10
  117. package/lib/strings.js +1 -5
  118. package/lib/strings.mjs +1 -1
  119. package/lib/types/acteurs_et_organes.js +9 -84
  120. package/lib/types/acteurs_et_organes.mjs +10 -63
  121. package/lib/types/agendas.js +8 -90
  122. package/lib/types/agendas.mjs +11 -66
  123. package/lib/types/amendements.d.ts +2 -0
  124. package/lib/types/amendements.js +12 -92
  125. package/lib/types/amendements.mjs +15 -70
  126. package/lib/types/dossiers_legislatifs.js +8 -96
  127. package/lib/types/dossiers_legislatifs.mjs +10 -72
  128. package/lib/types/legislatures.js +1 -3
  129. package/lib/types/legislatures.mjs +1 -2
  130. package/lib/types/scrutins.js +8 -82
  131. package/lib/types/scrutins.mjs +11 -58
  132. package/lib/urls.js +3 -27
  133. package/lib/urls.mjs +3 -21
  134. package/package.json +1 -1
@@ -10,25 +10,19 @@ export function cleanAmendement(amendement) {
10
10
  {
11
11
  cleanXmlArtefacts(auteur);
12
12
  }
13
-
14
13
  if (signataires.cosignataires !== undefined) {
15
14
  const acteurRef = signataires.cosignataires.acteurRef;
16
-
17
15
  if (Array.isArray(acteurRef)) {
18
16
  signataires.cosignatairesRefs = acteurRef;
19
17
  } else {
20
18
  assert(acteurRef);
21
19
  signataires.cosignatairesRefs = [acteurRef];
22
20
  }
23
-
24
21
  delete signataires.cosignataires;
25
22
  }
26
-
27
23
  let libelle = signataires.libelle;
28
-
29
24
  if (libelle !== undefined) {
30
25
  libelle = libelle.split(" ").filter(Boolean).join(" ");
31
-
32
26
  if (libelle) {
33
27
  signataires.libelle = libelle;
34
28
  } else {
@@ -40,71 +34,53 @@ export function cleanAmendement(amendement) {
40
34
  {
41
35
  cleanXmlArtefacts(pointeurFragmentTexte);
42
36
  const division = pointeurFragmentTexte.division;
43
-
44
37
  if (division !== undefined) {
45
38
  cleanXmlArtefacts(division);
46
39
  let avantAApres = division.avant_A_Apres;
47
-
48
40
  if (avantAApres !== undefined) {
49
41
  delete division.avant_A_Apres;
50
-
51
42
  if (avantAApres === "Après") {
52
43
  avantAApres = AvantAApres.Apres;
53
44
  }
54
-
55
45
  division.avantAApres = avantAApres;
56
46
  }
57
47
  }
58
-
59
48
  const amendementStandard = pointeurFragmentTexte.amendementStandard;
60
-
61
49
  if (amendementStandard !== undefined) {
62
50
  cleanXmlArtefacts(amendementStandard);
63
51
  const alinea = amendementStandard.alinea;
64
-
65
52
  if (alinea !== undefined) {
66
53
  cleanXmlArtefacts(alinea);
67
54
  let avantAApres = alinea.avant_A_Apres;
68
-
69
55
  if (avantAApres !== undefined) {
70
56
  delete alinea.avant_A_Apres;
71
-
72
57
  if (avantAApres === "Après") {
73
58
  avantAApres = AvantAApres.Apres;
74
59
  } else if (![AvantAApres.A, AvantAApres.Apres, AvantAApres.Avant].includes(avantAApres)) {
75
60
  avantAApres = AvantAApres.A;
76
61
  }
77
-
78
62
  alinea.avantAApres = avantAApres;
79
63
  }
80
-
81
64
  pointeurFragmentTexte.alinea = alinea;
82
65
  }
83
-
84
66
  delete pointeurFragmentTexte.amendementStandard;
85
67
  }
86
68
  }
87
69
  const corps = amendement.corps;
88
-
89
70
  if (corps !== undefined) {
90
71
  cleanXmlArtefacts(corps);
91
72
  const contenuAuteur = corps.contenuAuteur;
92
-
93
73
  if (contenuAuteur !== undefined) {
94
74
  cleanXmlArtefacts(contenuAuteur);
95
75
  const avantAppel = contenuAuteur.avantAppel;
96
-
97
76
  if (avantAppel !== undefined) {
98
77
  cleanXmlArtefacts(avantAppel);
99
78
  assert.notStrictEqual(avantAppel.dispositif, undefined);
100
79
  }
101
-
102
80
  assert.strictEqual(contenuAuteur.annexeExposeSommaire, undefined);
103
81
  const dispositifAmdtCreditPLF = contenuAuteur.dispositifAmdtCreditPLF;
104
-
105
82
  if (dispositifAmdtCreditPLF !== undefined) {
106
83
  const listeProgrammes = dispositifAmdtCreditPLF.listeProgrammes?.programme;
107
-
108
84
  if (listeProgrammes !== undefined) {
109
85
  if (Array.isArray(listeProgrammes)) {
110
86
  dispositifAmdtCreditPLF.listeProgrammes = listeProgrammes;
@@ -112,13 +88,10 @@ export function cleanAmendement(amendement) {
112
88
  assert(listeProgrammes);
113
89
  dispositifAmdtCreditPLF.listeProgrammes = [listeProgrammes];
114
90
  }
115
-
116
91
  for (const programme of dispositifAmdtCreditPLF.listeProgrammes) {
117
92
  cleanXmlArtefacts(programme);
118
-
119
93
  if (programme.lignesCredits !== undefined) {
120
94
  let lignesCredits = programme.lignesCredits.ligneCredit;
121
-
122
95
  if (lignesCredits === undefined) {
123
96
  delete programme.lignesCredits;
124
97
  } else {
@@ -126,10 +99,8 @@ export function cleanAmendement(amendement) {
126
99
  assert(lignesCredits);
127
100
  lignesCredits = [lignesCredits];
128
101
  }
129
-
130
102
  programme.lignesCredits = lignesCredits;
131
103
  }
132
-
133
104
  if (lignesCredits !== undefined) {
134
105
  for (const ligneCredit of lignesCredits) {
135
106
  cleanXmlArtefacts(ligneCredit);
@@ -139,12 +110,9 @@ export function cleanAmendement(amendement) {
139
110
  }
140
111
  }
141
112
  }
142
-
143
113
  const dispositifAmdtCreditPLFR = contenuAuteur.dispositifAmdtCreditPLFR;
144
-
145
114
  if (dispositifAmdtCreditPLFR !== undefined) {
146
115
  const listeProgrammes = dispositifAmdtCreditPLFR.listeProgrammes?.programme;
147
-
148
116
  if (listeProgrammes !== undefined) {
149
117
  if (Array.isArray(listeProgrammes)) {
150
118
  dispositifAmdtCreditPLFR.listeProgrammes = listeProgrammes;
@@ -152,13 +120,10 @@ export function cleanAmendement(amendement) {
152
120
  assert(listeProgrammes);
153
121
  dispositifAmdtCreditPLFR.listeProgrammes = [listeProgrammes];
154
122
  }
155
-
156
123
  for (const programme of dispositifAmdtCreditPLFR.listeProgrammes) {
157
124
  cleanXmlArtefacts(programme);
158
-
159
125
  if (programme.lignesCredits !== undefined) {
160
126
  let lignesCredits = programme.lignesCredits.ligneCredit;
161
-
162
127
  if (lignesCredits === undefined) {
163
128
  delete programme.lignesCredits;
164
129
  } else {
@@ -166,10 +131,8 @@ export function cleanAmendement(amendement) {
166
131
  assert(lignesCredits);
167
132
  lignesCredits = [lignesCredits];
168
133
  }
169
-
170
134
  programme.lignesCredits = lignesCredits;
171
135
  }
172
-
173
136
  if (lignesCredits !== undefined) {
174
137
  for (const ligneCredit of lignesCredits) {
175
138
  cleanLigneCreditPLFR(ligneCredit);
@@ -181,9 +144,7 @@ export function cleanAmendement(amendement) {
181
144
  }
182
145
  }
183
146
  }
184
-
185
147
  const cycleDeVie = amendement.cycleDeVie;
186
-
187
148
  if (cycleDeVie !== undefined) {
188
149
  cleanXmlArtefacts(cycleDeVie);
189
150
  const etatDesTraitements = cycleDeVie.etatDesTraitements;
@@ -194,13 +155,11 @@ export function cleanAmendement(amendement) {
194
155
  cleanXmlArtefacts(etat);
195
156
  }
196
157
  const sousEtat = etatDesTraitements.sousEtat;
197
-
198
158
  if (sousEtat !== undefined) {
199
159
  cleanXmlArtefacts(sousEtat);
200
160
  }
201
161
  }
202
162
  }
203
-
204
163
  if (amendement.representations !== undefined) {
205
164
  const representation = amendement.representations.representation;
206
165
  assert(!Array.isArray(representation));
@@ -221,32 +180,23 @@ export function cleanAmendement(amendement) {
221
180
  }
222
181
  }
223
182
  }
224
-
225
183
  const loiReference = amendement.loiReference;
226
-
227
184
  if (loiReference !== undefined) {
228
185
  cleanXmlArtefacts(loiReference);
229
186
  }
230
-
231
187
  const discussionCommune = amendement.discussionCommune;
232
-
233
188
  if (discussionCommune !== undefined) {
234
189
  cleanXmlArtefacts(discussionCommune);
235
190
  }
236
-
237
191
  const discussionIdentique = amendement.discussionIdentique;
238
-
239
192
  if (discussionIdentique !== undefined) {
240
193
  cleanXmlArtefacts(discussionIdentique);
241
194
  }
242
195
  }
243
-
244
196
  function cleanLigneCreditPLFR(ligneCreditPLFR) {
245
197
  cleanXmlArtefacts(ligneCreditPLFR);
246
-
247
198
  if (ligneCreditPLFR.lignesCredits !== undefined) {
248
199
  let lignesCredits = ligneCreditPLFR.lignesCredits.ligneCredit;
249
-
250
200
  if (lignesCredits === undefined) {
251
201
  delete ligneCreditPLFR.lignesCredits;
252
202
  } else {
@@ -254,10 +204,8 @@ function cleanLigneCreditPLFR(ligneCreditPLFR) {
254
204
  assert(lignesCredits);
255
205
  lignesCredits = [lignesCredits];
256
206
  }
257
-
258
207
  ligneCreditPLFR.lignesCredits = lignesCredits;
259
208
  }
260
-
261
209
  if (lignesCredits !== undefined) {
262
210
  for (const ligneCredit of lignesCredits) {
263
211
  cleanLigneCreditPLFR(ligneCredit);
@@ -265,9 +213,10 @@ function cleanLigneCreditPLFR(ligneCreditPLFR) {
265
213
  }
266
214
  }
267
215
  }
268
-
269
216
  export function cleanTexteLegislatif(texteLegislatif) {
270
- cleanXmlArtefacts(texteLegislatif); // Note: The following fields in `texteLegislatif.amendements` are currently ignored:
217
+ cleanXmlArtefacts(texteLegislatif);
218
+
219
+ // Note: The following fields in `texteLegislatif.amendements` are currently ignored:
271
220
  // * "#text"?: string;
272
221
  // * offset?: null;
273
222
  // * nom?: Nom;
@@ -275,18 +224,15 @@ export function cleanTexteLegislatif(texteLegislatif) {
275
224
  // * dateDepot?: Date;
276
225
  // * documentURI?: string;
277
226
  // Because it seems they should belong to an "amendement".
278
-
279
227
  let amendement = texteLegislatif.amendements.amendement;
280
-
281
228
  if (Array.isArray(amendement)) {
282
229
  texteLegislatif.amendements = amendement;
283
230
  } else {
284
231
  assert(amendement);
285
232
  texteLegislatif.amendements = [amendement];
286
233
  }
287
-
288
234
  for (const amendement of texteLegislatif.amendements) {
289
235
  cleanAmendement(amendement);
290
236
  }
291
237
  }
292
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJjbGVhblhtbEFydGVmYWN0cyIsIkF2YW50QUFwcmVzIiwiY2xlYW5BbWVuZGVtZW50IiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiY29zaWduYXRhaXJlcyIsInVuZGVmaW5lZCIsImFjdGV1clJlZiIsIkFycmF5IiwiaXNBcnJheSIsImNvc2lnbmF0YWlyZXNSZWZzIiwibGliZWxsZSIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJwb2ludGV1ckZyYWdtZW50VGV4dGUiLCJkaXZpc2lvbiIsImF2YW50QUFwcmVzIiwiYXZhbnRfQV9BcHJlcyIsIkFwcmVzIiwiYW1lbmRlbWVudFN0YW5kYXJkIiwiYWxpbmVhIiwiQSIsIkF2YW50IiwiaW5jbHVkZXMiLCJjb3JwcyIsImNvbnRlbnVBdXRldXIiLCJhdmFudEFwcGVsIiwibm90U3RyaWN0RXF1YWwiLCJkaXNwb3NpdGlmIiwic3RyaWN0RXF1YWwiLCJhbm5leGVFeHBvc2VTb21tYWlyZSIsImRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGIiwibGlzdGVQcm9ncmFtbWVzIiwicHJvZ3JhbW1lIiwibGlnbmVzQ3JlZGl0cyIsImxpZ25lQ3JlZGl0IiwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSIiwiY2xlYW5MaWduZUNyZWRpdFBMRlIiLCJjeWNsZURlVmllIiwiZXRhdERlc1RyYWl0ZW1lbnRzIiwiZXRhdCIsInNvdXNFdGF0IiwicmVwcmVzZW50YXRpb25zIiwicmVwcmVzZW50YXRpb24iLCJyZXBTb3VyY2UiLCJvZmZzZXQiLCJkYXRlRGlzcG9SZXByZXNlbnRhdGlvbiIsInN0YXR1dFJlcHJlc2VudGF0aW9uIiwibG9pUmVmZXJlbmNlIiwiZGlzY3Vzc2lvbkNvbW11bmUiLCJkaXNjdXNzaW9uSWRlbnRpcXVlIiwibGlnbmVDcmVkaXRQTEZSIiwiY2xlYW5UZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJhbWVuZGVtZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGVhbmVycy9hbWVuZGVtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuXG5pbXBvcnQgeyBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUsIGNsZWFuWG1sQXJ0ZWZhY3RzIH0gZnJvbSBcIi4veG1sXCJcbmltcG9ydCB7IEF2YW50QUFwcmVzIH0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQW1lbmRlbWVudChhbWVuZGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoYW1lbmRlbWVudClcblxuICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHNpZ25hdGFpcmVzKVxuXG4gICAgY29uc3QgYXV0ZXVyID0gc2lnbmF0YWlyZXMuYXV0ZXVyXG4gICAge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoYXV0ZXVyKVxuICAgIH1cblxuICAgIGlmIChzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1clJlZiA9IHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXMuYWN0ZXVyUmVmXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhY3RldXJSZWYpKSB7XG4gICAgICAgIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzID0gYWN0ZXVyUmVmXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQoYWN0ZXVyUmVmKVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmcyA9IFthY3RldXJSZWZdXG4gICAgICB9XG4gICAgICBkZWxldGUgc2lnbmF0YWlyZXMuY29zaWduYXRhaXJlc1xuICAgIH1cblxuICAgIGxldCBsaWJlbGxlID0gc2lnbmF0YWlyZXMubGliZWxsZVxuICAgIGlmIChsaWJlbGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpYmVsbGUgPSBsaWJlbGxlLnNwbGl0KFwiIFwiKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIilcbiAgICAgIGlmIChsaWJlbGxlKSB7XG4gICAgICAgIHNpZ25hdGFpcmVzLmxpYmVsbGUgPSBsaWJlbGxlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgc2lnbmF0YWlyZXMubGliZWxsZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBvaW50ZXVyRnJhZ21lbnRUZXh0ZSA9IGFtZW5kZW1lbnQucG9pbnRldXJGcmFnbWVudFRleHRlXG4gIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhwb2ludGV1ckZyYWdtZW50VGV4dGUpXG5cbiAgICBjb25zdCBkaXZpc2lvbiA9IHBvaW50ZXVyRnJhZ21lbnRUZXh0ZS5kaXZpc2lvblxuICAgIGlmIChkaXZpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhkaXZpc2lvbilcblxuICAgICAgbGV0IGF2YW50QUFwcmVzID0gZGl2aXNpb24uYXZhbnRfQV9BcHJlc1xuICAgICAgaWYgKGF2YW50QUFwcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIGRpdmlzaW9uLmF2YW50X0FfQXByZXNcbiAgICAgICAgaWYgKGF2YW50QUFwcmVzID09PSBcIkFwcsOoc1wiKSB7XG4gICAgICAgICAgYXZhbnRBQXByZXMgPSBBdmFudEFBcHJlcy5BcHJlc1xuICAgICAgICB9XG4gICAgICAgIGRpdmlzaW9uLmF2YW50QUFwcmVzID0gYXZhbnRBQXByZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhbWVuZGVtZW50U3RhbmRhcmQgPSBwb2ludGV1ckZyYWdtZW50VGV4dGUuYW1lbmRlbWVudFN0YW5kYXJkXG4gICAgaWYgKGFtZW5kZW1lbnRTdGFuZGFyZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhhbWVuZGVtZW50U3RhbmRhcmQpXG5cbiAgICAgIGNvbnN0IGFsaW5lYSA9IGFtZW5kZW1lbnRTdGFuZGFyZC5hbGluZWFcbiAgICAgIGlmIChhbGluZWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhbGluZWEpXG5cbiAgICAgICAgbGV0IGF2YW50QUFwcmVzID0gYWxpbmVhLmF2YW50X0FfQXByZXNcbiAgICAgICAgaWYgKGF2YW50QUFwcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgYWxpbmVhLmF2YW50X0FfQXByZXNcbiAgICAgICAgICBpZiAoYXZhbnRBQXByZXMgPT09IFwiQXByw6hzXCIpIHtcbiAgICAgICAgICAgIGF2YW50QUFwcmVzID0gQXZhbnRBQXByZXMuQXByZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgIVtBdmFudEFBcHJlcy5BLCBBdmFudEFBcHJlcy5BcHJlcywgQXZhbnRBQXByZXMuQXZhbnRdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBhdmFudEFBcHJlcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGF2YW50QUFwcmVzID0gQXZhbnRBQXByZXMuQVxuICAgICAgICAgIH1cbiAgICAgICAgICBhbGluZWEuYXZhbnRBQXByZXMgPSBhdmFudEFBcHJlc1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRldXJGcmFnbWVudFRleHRlLmFsaW5lYSA9IGFsaW5lYVxuICAgICAgfVxuICAgICAgZGVsZXRlIHBvaW50ZXVyRnJhZ21lbnRUZXh0ZS5hbWVuZGVtZW50U3RhbmRhcmRcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb3JwcyA9IGFtZW5kZW1lbnQuY29ycHNcbiAgaWYgKGNvcnBzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhjb3JwcylcblxuICAgIGNvbnN0IGNvbnRlbnVBdXRldXIgPSBjb3Jwcy5jb250ZW51QXV0ZXVyXG4gICAgaWYgKGNvbnRlbnVBdXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoY29udGVudUF1dGV1cilcblxuICAgICAgY29uc3QgYXZhbnRBcHBlbCA9IGNvbnRlbnVBdXRldXIuYXZhbnRBcHBlbFxuICAgICAgaWYgKGF2YW50QXBwZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhdmFudEFwcGVsKVxuXG4gICAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhdmFudEFwcGVsLmRpc3Bvc2l0aWYsIHVuZGVmaW5lZClcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbnRlbnVBdXRldXIuYW5uZXhlRXhwb3NlU29tbWFpcmUsIHVuZGVmaW5lZClcblxuICAgICAgY29uc3QgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYgPSBjb250ZW51QXV0ZXVyLmRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGXG4gICAgICBpZiAoZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBsaXN0ZVByb2dyYW1tZXMgPVxuICAgICAgICAgIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGLmxpc3RlUHJvZ3JhbW1lcz8ucHJvZ3JhbW1lXG4gICAgICAgIGlmIChsaXN0ZVByb2dyYW1tZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlUHJvZ3JhbW1lcykpIHtcbiAgICAgICAgICAgIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGLmxpc3RlUHJvZ3JhbW1lcyA9IGxpc3RlUHJvZ3JhbW1lc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQobGlzdGVQcm9ncmFtbWVzKVxuICAgICAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYubGlzdGVQcm9ncmFtbWVzID0gW2xpc3RlUHJvZ3JhbW1lc11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHByb2dyYW1tZSBvZiBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRi5saXN0ZVByb2dyYW1tZXMpIHtcbiAgICAgICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHByb2dyYW1tZSlcblxuICAgICAgICAgICAgaWYgKHByb2dyYW1tZS5saWduZXNDcmVkaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgbGV0IGxpZ25lc0NyZWRpdHMgPSBwcm9ncmFtbWUubGlnbmVzQ3JlZGl0cy5saWduZUNyZWRpdFxuICAgICAgICAgICAgICBpZiAobGlnbmVzQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1tZS5saWduZXNDcmVkaXRzXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpZ25lc0NyZWRpdHMpKSB7XG4gICAgICAgICAgICAgICAgICBhc3NlcnQobGlnbmVzQ3JlZGl0cylcbiAgICAgICAgICAgICAgICAgIGxpZ25lc0NyZWRpdHMgPSBbbGlnbmVzQ3JlZGl0c11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHMgPSBsaWduZXNDcmVkaXRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbGlnbmVDcmVkaXQgb2YgbGlnbmVzQ3JlZGl0cykge1xuICAgICAgICAgICAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMobGlnbmVDcmVkaXQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUiA9IGNvbnRlbnVBdXRldXIuZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSXG4gICAgICBpZiAoZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbGlzdGVQcm9ncmFtbWVzID1cbiAgICAgICAgICBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRlIubGlzdGVQcm9ncmFtbWVzPy5wcm9ncmFtbWVcbiAgICAgICAgaWYgKGxpc3RlUHJvZ3JhbW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVQcm9ncmFtbWVzKSkge1xuICAgICAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLmxpc3RlUHJvZ3JhbW1lcyA9IGxpc3RlUHJvZ3JhbW1lc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQobGlzdGVQcm9ncmFtbWVzKVxuICAgICAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLmxpc3RlUHJvZ3JhbW1lcyA9IFtsaXN0ZVByb2dyYW1tZXNdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9ncmFtbWUgb2YgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLmxpc3RlUHJvZ3JhbW1lcykge1xuICAgICAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMocHJvZ3JhbW1lKVxuXG4gICAgICAgICAgICBpZiAocHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBsZXQgbGlnbmVzQ3JlZGl0cyA9IHByb2dyYW1tZS5saWduZXNDcmVkaXRzLmxpZ25lQ3JlZGl0XG4gICAgICAgICAgICAgIGlmIChsaWduZXNDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHNcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlnbmVzQ3JlZGl0cykpIHtcbiAgICAgICAgICAgICAgICAgIGFzc2VydChsaWduZXNDcmVkaXRzKVxuICAgICAgICAgICAgICAgICAgbGlnbmVzQ3JlZGl0cyA9IFtsaWduZXNDcmVkaXRzXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9ncmFtbWUubGlnbmVzQ3JlZGl0cyA9IGxpZ25lc0NyZWRpdHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAobGlnbmVzQ3JlZGl0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsaWduZUNyZWRpdCBvZiBsaWduZXNDcmVkaXRzKSB7XG4gICAgICAgICAgICAgICAgICBjbGVhbkxpZ25lQ3JlZGl0UExGUihsaWduZUNyZWRpdClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjeWNsZURlVmllID0gYW1lbmRlbWVudC5jeWNsZURlVmllXG4gIGlmIChjeWNsZURlVmllICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhjeWNsZURlVmllKVxuXG4gICAgY29uc3QgZXRhdERlc1RyYWl0ZW1lbnRzID0gY3ljbGVEZVZpZS5ldGF0RGVzVHJhaXRlbWVudHNcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhldGF0RGVzVHJhaXRlbWVudHMpXG5cbiAgICAgIGNvbnN0IGV0YXQgPSBldGF0RGVzVHJhaXRlbWVudHMuZXRhdFxuICAgICAge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhldGF0KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VzRXRhdCA9IGV0YXREZXNUcmFpdGVtZW50cy5zb3VzRXRhdFxuICAgICAgaWYgKHNvdXNFdGF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoc291c0V0YXQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFtZW5kZW1lbnQucmVwcmVzZW50YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCByZXByZXNlbnRhdGlvbiA9IGFtZW5kZW1lbnQucmVwcmVzZW50YXRpb25zLnJlcHJlc2VudGF0aW9uXG4gICAgYXNzZXJ0KCFBcnJheS5pc0FycmF5KHJlcHJlc2VudGF0aW9uKSlcbiAgICBhbWVuZGVtZW50LnJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb25cbiAgICBkZWxldGUgYW1lbmRlbWVudC5yZXByZXNlbnRhdGlvbnNcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhyZXByZXNlbnRhdGlvbilcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLnJlcFNvdXJjZSwgdW5kZWZpbmVkKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLm9mZnNldCwgdW5kZWZpbmVkKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLmRhdGVEaXNwb1JlcHJlc2VudGF0aW9uLCB1bmRlZmluZWQpXG5cbiAgICAgIGNvbnN0IHN0YXR1dFJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb24uc3RhdHV0UmVwcmVzZW50YXRpb25cbiAgICAgIHtcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcImNhbm9uaXF1ZVwiKVxuICAgICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoc3RhdHV0UmVwcmVzZW50YXRpb24sIFwiZW5yZWdpc3RyZW1lbnRcIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcIm9mZmljaWVsbGVcIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcInRyYW5zY3JpcHRpb25cIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcInZlcmJhdGltXCIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbG9pUmVmZXJlbmNlID0gYW1lbmRlbWVudC5sb2lSZWZlcmVuY2VcbiAgaWYgKGxvaVJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMobG9pUmVmZXJlbmNlKVxuICB9XG5cbiAgY29uc3QgZGlzY3Vzc2lvbkNvbW11bmUgPSBhbWVuZGVtZW50LmRpc2N1c3Npb25Db21tdW5lXG4gIGlmIChkaXNjdXNzaW9uQ29tbXVuZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoZGlzY3Vzc2lvbkNvbW11bmUpXG4gIH1cblxuICBjb25zdCBkaXNjdXNzaW9uSWRlbnRpcXVlID0gYW1lbmRlbWVudC5kaXNjdXNzaW9uSWRlbnRpcXVlXG4gIGlmIChkaXNjdXNzaW9uSWRlbnRpcXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhkaXNjdXNzaW9uSWRlbnRpcXVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuTGlnbmVDcmVkaXRQTEZSKGxpZ25lQ3JlZGl0UExGUjogYW55KSB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKGxpZ25lQ3JlZGl0UExGUilcblxuICBpZiAobGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBsaWduZXNDcmVkaXRzID0gbGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHMubGlnbmVDcmVkaXRcbiAgICBpZiAobGlnbmVzQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgbGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHNcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpZ25lc0NyZWRpdHMpKSB7XG4gICAgICAgIGFzc2VydChsaWduZXNDcmVkaXRzKVxuICAgICAgICBsaWduZXNDcmVkaXRzID0gW2xpZ25lc0NyZWRpdHNdXG4gICAgICB9XG4gICAgICBsaWduZUNyZWRpdFBMRlIubGlnbmVzQ3JlZGl0cyA9IGxpZ25lc0NyZWRpdHNcbiAgICB9XG4gICAgaWYgKGxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsaWduZUNyZWRpdCBvZiBsaWduZXNDcmVkaXRzKSB7XG4gICAgICAgIGNsZWFuTGlnbmVDcmVkaXRQTEZSKGxpZ25lQ3JlZGl0KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5UZXh0ZUxlZ2lzbGF0aWYodGV4dGVMZWdpc2xhdGlmOiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHModGV4dGVMZWdpc2xhdGlmKVxuXG4gIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgZmllbGRzIGluIGB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHNgIGFyZSBjdXJyZW50bHkgaWdub3JlZDpcbiAgLy8gKiBcIiN0ZXh0XCI/OiAgICAgICBzdHJpbmc7XG4gIC8vICogb2Zmc2V0PzogICAgICAgIG51bGw7XG4gIC8vICogbm9tPzogICAgICAgICAgIE5vbTtcbiAgLy8gKiBhdmFudF9BX0FwcmVzPzogRGl2aXNpb25BdmFudEFBcHJlcztcbiAgLy8gKiBkYXRlRGVwb3Q/OiAgICAgRGF0ZTtcbiAgLy8gKiBkb2N1bWVudFVSST86ICAgc3RyaW5nO1xuICAvLyBCZWNhdXNlIGl0IHNlZW1zIHRoZXkgc2hvdWxkIGJlbG9uZyB0byBhbiBcImFtZW5kZW1lbnRcIi5cbiAgbGV0IGFtZW5kZW1lbnQgPSB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMuYW1lbmRlbWVudFxuICBpZiAoQXJyYXkuaXNBcnJheShhbWVuZGVtZW50KSkge1xuICAgIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cyA9IGFtZW5kZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoYW1lbmRlbWVudClcbiAgICB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMgPSBbYW1lbmRlbWVudF1cbiAgfVxuXG4gIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICBjbGVhbkFtZW5kZW1lbnQoYW1lbmRlbWVudClcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFQLE1BQW1CLFFBQW5CO1NBRVNDLHFCLEVBQXVCQyxpQjtTQUN2QkMsVztBQUVULE9BQU8sU0FBU0MsZUFBVCxDQUF5QkMsVUFBekIsRUFBZ0Q7RUFDckRILGlCQUFpQixDQUFDRyxVQUFELENBQWpCO0VBRUEsTUFBTUMsV0FBVyxHQUFHRCxVQUFVLENBQUNDLFdBQS9CO0VBQ0E7SUFDRUosaUJBQWlCLENBQUNJLFdBQUQsQ0FBakI7SUFFQSxNQUFNQyxNQUFNLEdBQUdELFdBQVcsQ0FBQ0MsTUFBM0I7SUFDQTtNQUNFTCxpQkFBaUIsQ0FBQ0ssTUFBRCxDQUFqQjtJQUNEOztJQUVELElBQUlELFdBQVcsQ0FBQ0UsYUFBWixLQUE4QkMsU0FBbEMsRUFBNkM7TUFDM0MsTUFBTUMsU0FBUyxHQUFHSixXQUFXLENBQUNFLGFBQVosQ0FBMEJFLFNBQTVDOztNQUNBLElBQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjRixTQUFkLENBQUosRUFBOEI7UUFDNUJKLFdBQVcsQ0FBQ08saUJBQVosR0FBZ0NILFNBQWhDO01BQ0QsQ0FGRCxNQUVPO1FBQ0xWLE1BQU0sQ0FBQ1UsU0FBRCxDQUFOO1FBQ0FKLFdBQVcsQ0FBQ08saUJBQVosR0FBZ0MsQ0FBQ0gsU0FBRCxDQUFoQztNQUNEOztNQUNELE9BQU9KLFdBQVcsQ0FBQ0UsYUFBbkI7SUFDRDs7SUFFRCxJQUFJTSxPQUFPLEdBQUdSLFdBQVcsQ0FBQ1EsT0FBMUI7O0lBQ0EsSUFBSUEsT0FBTyxLQUFLTCxTQUFoQixFQUEyQjtNQUN6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
238
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjbGVhbkJvb2xlYW5BdHRyaWJ1dGUiLCJjbGVhblhtbEFydGVmYWN0cyIsIkF2YW50QUFwcmVzIiwiY2xlYW5BbWVuZGVtZW50IiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiY29zaWduYXRhaXJlcyIsInVuZGVmaW5lZCIsImFjdGV1clJlZiIsIkFycmF5IiwiaXNBcnJheSIsImNvc2lnbmF0YWlyZXNSZWZzIiwibGliZWxsZSIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsImpvaW4iLCJwb2ludGV1ckZyYWdtZW50VGV4dGUiLCJkaXZpc2lvbiIsImF2YW50QUFwcmVzIiwiYXZhbnRfQV9BcHJlcyIsIkFwcmVzIiwiYW1lbmRlbWVudFN0YW5kYXJkIiwiYWxpbmVhIiwiQSIsIkF2YW50IiwiaW5jbHVkZXMiLCJjb3JwcyIsImNvbnRlbnVBdXRldXIiLCJhdmFudEFwcGVsIiwibm90U3RyaWN0RXF1YWwiLCJkaXNwb3NpdGlmIiwic3RyaWN0RXF1YWwiLCJhbm5leGVFeHBvc2VTb21tYWlyZSIsImRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGIiwibGlzdGVQcm9ncmFtbWVzIiwicHJvZ3JhbW1lIiwibGlnbmVzQ3JlZGl0cyIsImxpZ25lQ3JlZGl0IiwiZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSIiwiY2xlYW5MaWduZUNyZWRpdFBMRlIiLCJjeWNsZURlVmllIiwiZXRhdERlc1RyYWl0ZW1lbnRzIiwiZXRhdCIsInNvdXNFdGF0IiwicmVwcmVzZW50YXRpb25zIiwicmVwcmVzZW50YXRpb24iLCJyZXBTb3VyY2UiLCJvZmZzZXQiLCJkYXRlRGlzcG9SZXByZXNlbnRhdGlvbiIsInN0YXR1dFJlcHJlc2VudGF0aW9uIiwibG9pUmVmZXJlbmNlIiwiZGlzY3Vzc2lvbkNvbW11bmUiLCJkaXNjdXNzaW9uSWRlbnRpcXVlIiwibGlnbmVDcmVkaXRQTEZSIiwiY2xlYW5UZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJhbWVuZGVtZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGVhbmVycy9hbWVuZGVtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuXG5pbXBvcnQgeyBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUsIGNsZWFuWG1sQXJ0ZWZhY3RzIH0gZnJvbSBcIi4veG1sXCJcbmltcG9ydCB7IEF2YW50QUFwcmVzIH0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQW1lbmRlbWVudChhbWVuZGVtZW50OiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoYW1lbmRlbWVudClcblxuICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHNpZ25hdGFpcmVzKVxuXG4gICAgY29uc3QgYXV0ZXVyID0gc2lnbmF0YWlyZXMuYXV0ZXVyXG4gICAge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoYXV0ZXVyKVxuICAgIH1cblxuICAgIGlmIChzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1clJlZiA9IHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXMuYWN0ZXVyUmVmXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhY3RldXJSZWYpKSB7XG4gICAgICAgIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzID0gYWN0ZXVyUmVmXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhc3NlcnQoYWN0ZXVyUmVmKVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmcyA9IFthY3RldXJSZWZdXG4gICAgICB9XG4gICAgICBkZWxldGUgc2lnbmF0YWlyZXMuY29zaWduYXRhaXJlc1xuICAgIH1cblxuICAgIGxldCBsaWJlbGxlID0gc2lnbmF0YWlyZXMubGliZWxsZVxuICAgIGlmIChsaWJlbGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpYmVsbGUgPSBsaWJlbGxlLnNwbGl0KFwiIFwiKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIilcbiAgICAgIGlmIChsaWJlbGxlKSB7XG4gICAgICAgIHNpZ25hdGFpcmVzLmxpYmVsbGUgPSBsaWJlbGxlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgc2lnbmF0YWlyZXMubGliZWxsZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHBvaW50ZXVyRnJhZ21lbnRUZXh0ZSA9IGFtZW5kZW1lbnQucG9pbnRldXJGcmFnbWVudFRleHRlXG4gIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhwb2ludGV1ckZyYWdtZW50VGV4dGUpXG5cbiAgICBjb25zdCBkaXZpc2lvbiA9IHBvaW50ZXVyRnJhZ21lbnRUZXh0ZS5kaXZpc2lvblxuICAgIGlmIChkaXZpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhkaXZpc2lvbilcblxuICAgICAgbGV0IGF2YW50QUFwcmVzID0gZGl2aXNpb24uYXZhbnRfQV9BcHJlc1xuICAgICAgaWYgKGF2YW50QUFwcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGVsZXRlIGRpdmlzaW9uLmF2YW50X0FfQXByZXNcbiAgICAgICAgaWYgKGF2YW50QUFwcmVzID09PSBcIkFwcsOoc1wiKSB7XG4gICAgICAgICAgYXZhbnRBQXByZXMgPSBBdmFudEFBcHJlcy5BcHJlc1xuICAgICAgICB9XG4gICAgICAgIGRpdmlzaW9uLmF2YW50QUFwcmVzID0gYXZhbnRBQXByZXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhbWVuZGVtZW50U3RhbmRhcmQgPSBwb2ludGV1ckZyYWdtZW50VGV4dGUuYW1lbmRlbWVudFN0YW5kYXJkXG4gICAgaWYgKGFtZW5kZW1lbnRTdGFuZGFyZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhhbWVuZGVtZW50U3RhbmRhcmQpXG5cbiAgICAgIGNvbnN0IGFsaW5lYSA9IGFtZW5kZW1lbnRTdGFuZGFyZC5hbGluZWFcbiAgICAgIGlmIChhbGluZWEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhbGluZWEpXG5cbiAgICAgICAgbGV0IGF2YW50QUFwcmVzID0gYWxpbmVhLmF2YW50X0FfQXByZXNcbiAgICAgICAgaWYgKGF2YW50QUFwcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgYWxpbmVhLmF2YW50X0FfQXByZXNcbiAgICAgICAgICBpZiAoYXZhbnRBQXByZXMgPT09IFwiQXByw6hzXCIpIHtcbiAgICAgICAgICAgIGF2YW50QUFwcmVzID0gQXZhbnRBQXByZXMuQXByZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgIVtBdmFudEFBcHJlcy5BLCBBdmFudEFBcHJlcy5BcHJlcywgQXZhbnRBQXByZXMuQXZhbnRdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBhdmFudEFBcHJlcyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGF2YW50QUFwcmVzID0gQXZhbnRBQXByZXMuQVxuICAgICAgICAgIH1cbiAgICAgICAgICBhbGluZWEuYXZhbnRBQXByZXMgPSBhdmFudEFBcHJlc1xuICAgICAgICB9XG5cbiAgICAgICAgcG9pbnRldXJGcmFnbWVudFRleHRlLmFsaW5lYSA9IGFsaW5lYVxuICAgICAgfVxuICAgICAgZGVsZXRlIHBvaW50ZXVyRnJhZ21lbnRUZXh0ZS5hbWVuZGVtZW50U3RhbmRhcmRcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb3JwcyA9IGFtZW5kZW1lbnQuY29ycHNcbiAgaWYgKGNvcnBzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhjb3JwcylcblxuICAgIGNvbnN0IGNvbnRlbnVBdXRldXIgPSBjb3Jwcy5jb250ZW51QXV0ZXVyXG4gICAgaWYgKGNvbnRlbnVBdXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoY29udGVudUF1dGV1cilcblxuICAgICAgY29uc3QgYXZhbnRBcHBlbCA9IGNvbnRlbnVBdXRldXIuYXZhbnRBcHBlbFxuICAgICAgaWYgKGF2YW50QXBwZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhhdmFudEFwcGVsKVxuXG4gICAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhdmFudEFwcGVsLmRpc3Bvc2l0aWYsIHVuZGVmaW5lZClcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbnRlbnVBdXRldXIuYW5uZXhlRXhwb3NlU29tbWFpcmUsIHVuZGVmaW5lZClcblxuICAgICAgY29uc3QgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYgPSBjb250ZW51QXV0ZXVyLmRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGXG4gICAgICBpZiAoZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBsaXN0ZVByb2dyYW1tZXMgPVxuICAgICAgICAgIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGLmxpc3RlUHJvZ3JhbW1lcz8ucHJvZ3JhbW1lXG4gICAgICAgIGlmIChsaXN0ZVByb2dyYW1tZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3RlUHJvZ3JhbW1lcykpIHtcbiAgICAgICAgICAgIGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGLmxpc3RlUHJvZ3JhbW1lcyA9IGxpc3RlUHJvZ3JhbW1lc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQobGlzdGVQcm9ncmFtbWVzKVxuICAgICAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEYubGlzdGVQcm9ncmFtbWVzID0gW2xpc3RlUHJvZ3JhbW1lc11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHByb2dyYW1tZSBvZiBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRi5saXN0ZVByb2dyYW1tZXMpIHtcbiAgICAgICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKHByb2dyYW1tZSlcblxuICAgICAgICAgICAgaWYgKHByb2dyYW1tZS5saWduZXNDcmVkaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgbGV0IGxpZ25lc0NyZWRpdHMgPSBwcm9ncmFtbWUubGlnbmVzQ3JlZGl0cy5saWduZUNyZWRpdFxuICAgICAgICAgICAgICBpZiAobGlnbmVzQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHByb2dyYW1tZS5saWduZXNDcmVkaXRzXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpZ25lc0NyZWRpdHMpKSB7XG4gICAgICAgICAgICAgICAgICBhc3NlcnQobGlnbmVzQ3JlZGl0cylcbiAgICAgICAgICAgICAgICAgIGxpZ25lc0NyZWRpdHMgPSBbbGlnbmVzQ3JlZGl0c11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHMgPSBsaWduZXNDcmVkaXRzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbGlnbmVDcmVkaXQgb2YgbGlnbmVzQ3JlZGl0cykge1xuICAgICAgICAgICAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMobGlnbmVDcmVkaXQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3Bvc2l0aWZBbWR0Q3JlZGl0UExGUiA9IGNvbnRlbnVBdXRldXIuZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSXG4gICAgICBpZiAoZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgbGlzdGVQcm9ncmFtbWVzID1cbiAgICAgICAgICBkaXNwb3NpdGlmQW1kdENyZWRpdFBMRlIubGlzdGVQcm9ncmFtbWVzPy5wcm9ncmFtbWVcbiAgICAgICAgaWYgKGxpc3RlUHJvZ3JhbW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdGVQcm9ncmFtbWVzKSkge1xuICAgICAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLmxpc3RlUHJvZ3JhbW1lcyA9IGxpc3RlUHJvZ3JhbW1lc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3NlcnQobGlzdGVQcm9ncmFtbWVzKVxuICAgICAgICAgICAgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLmxpc3RlUHJvZ3JhbW1lcyA9IFtsaXN0ZVByb2dyYW1tZXNdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChjb25zdCBwcm9ncmFtbWUgb2YgZGlzcG9zaXRpZkFtZHRDcmVkaXRQTEZSLmxpc3RlUHJvZ3JhbW1lcykge1xuICAgICAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMocHJvZ3JhbW1lKVxuXG4gICAgICAgICAgICBpZiAocHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBsZXQgbGlnbmVzQ3JlZGl0cyA9IHByb2dyYW1tZS5saWduZXNDcmVkaXRzLmxpZ25lQ3JlZGl0XG4gICAgICAgICAgICAgIGlmIChsaWduZXNDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcHJvZ3JhbW1lLmxpZ25lc0NyZWRpdHNcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlnbmVzQ3JlZGl0cykpIHtcbiAgICAgICAgICAgICAgICAgIGFzc2VydChsaWduZXNDcmVkaXRzKVxuICAgICAgICAgICAgICAgICAgbGlnbmVzQ3JlZGl0cyA9IFtsaWduZXNDcmVkaXRzXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9ncmFtbWUubGlnbmVzQ3JlZGl0cyA9IGxpZ25lc0NyZWRpdHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAobGlnbmVzQ3JlZGl0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsaWduZUNyZWRpdCBvZiBsaWduZXNDcmVkaXRzKSB7XG4gICAgICAgICAgICAgICAgICBjbGVhbkxpZ25lQ3JlZGl0UExGUihsaWduZUNyZWRpdClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjeWNsZURlVmllID0gYW1lbmRlbWVudC5jeWNsZURlVmllXG4gIGlmIChjeWNsZURlVmllICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhjeWNsZURlVmllKVxuXG4gICAgY29uc3QgZXRhdERlc1RyYWl0ZW1lbnRzID0gY3ljbGVEZVZpZS5ldGF0RGVzVHJhaXRlbWVudHNcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhldGF0RGVzVHJhaXRlbWVudHMpXG5cbiAgICAgIGNvbnN0IGV0YXQgPSBldGF0RGVzVHJhaXRlbWVudHMuZXRhdFxuICAgICAge1xuICAgICAgICBjbGVhblhtbEFydGVmYWN0cyhldGF0KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VzRXRhdCA9IGV0YXREZXNUcmFpdGVtZW50cy5zb3VzRXRhdFxuICAgICAgaWYgKHNvdXNFdGF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoc291c0V0YXQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFtZW5kZW1lbnQucmVwcmVzZW50YXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCByZXByZXNlbnRhdGlvbiA9IGFtZW5kZW1lbnQucmVwcmVzZW50YXRpb25zLnJlcHJlc2VudGF0aW9uXG4gICAgYXNzZXJ0KCFBcnJheS5pc0FycmF5KHJlcHJlc2VudGF0aW9uKSlcbiAgICBhbWVuZGVtZW50LnJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb25cbiAgICBkZWxldGUgYW1lbmRlbWVudC5yZXByZXNlbnRhdGlvbnNcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhyZXByZXNlbnRhdGlvbilcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLnJlcFNvdXJjZSwgdW5kZWZpbmVkKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLm9mZnNldCwgdW5kZWZpbmVkKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlcHJlc2VudGF0aW9uLmRhdGVEaXNwb1JlcHJlc2VudGF0aW9uLCB1bmRlZmluZWQpXG5cbiAgICAgIGNvbnN0IHN0YXR1dFJlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb24uc3RhdHV0UmVwcmVzZW50YXRpb25cbiAgICAgIHtcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcImNhbm9uaXF1ZVwiKVxuICAgICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoc3RhdHV0UmVwcmVzZW50YXRpb24sIFwiZW5yZWdpc3RyZW1lbnRcIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcIm9mZmljaWVsbGVcIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcInRyYW5zY3JpcHRpb25cIilcbiAgICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKHN0YXR1dFJlcHJlc2VudGF0aW9uLCBcInZlcmJhdGltXCIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbG9pUmVmZXJlbmNlID0gYW1lbmRlbWVudC5sb2lSZWZlcmVuY2VcbiAgaWYgKGxvaVJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMobG9pUmVmZXJlbmNlKVxuICB9XG5cbiAgY29uc3QgZGlzY3Vzc2lvbkNvbW11bmUgPSBhbWVuZGVtZW50LmRpc2N1c3Npb25Db21tdW5lXG4gIGlmIChkaXNjdXNzaW9uQ29tbXVuZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoZGlzY3Vzc2lvbkNvbW11bmUpXG4gIH1cblxuICBjb25zdCBkaXNjdXNzaW9uSWRlbnRpcXVlID0gYW1lbmRlbWVudC5kaXNjdXNzaW9uSWRlbnRpcXVlXG4gIGlmIChkaXNjdXNzaW9uSWRlbnRpcXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjbGVhblhtbEFydGVmYWN0cyhkaXNjdXNzaW9uSWRlbnRpcXVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFuTGlnbmVDcmVkaXRQTEZSKGxpZ25lQ3JlZGl0UExGUjogYW55KSB7XG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKGxpZ25lQ3JlZGl0UExGUilcblxuICBpZiAobGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGxldCBsaWduZXNDcmVkaXRzID0gbGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHMubGlnbmVDcmVkaXRcbiAgICBpZiAobGlnbmVzQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgbGlnbmVDcmVkaXRQTEZSLmxpZ25lc0NyZWRpdHNcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpZ25lc0NyZWRpdHMpKSB7XG4gICAgICAgIGFzc2VydChsaWduZXNDcmVkaXRzKVxuICAgICAgICBsaWduZXNDcmVkaXRzID0gW2xpZ25lc0NyZWRpdHNdXG4gICAgICB9XG4gICAgICBsaWduZUNyZWRpdFBMRlIubGlnbmVzQ3JlZGl0cyA9IGxpZ25lc0NyZWRpdHNcbiAgICB9XG4gICAgaWYgKGxpZ25lc0NyZWRpdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsaWduZUNyZWRpdCBvZiBsaWduZXNDcmVkaXRzKSB7XG4gICAgICAgIGNsZWFuTGlnbmVDcmVkaXRQTEZSKGxpZ25lQ3JlZGl0KVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5UZXh0ZUxlZ2lzbGF0aWYodGV4dGVMZWdpc2xhdGlmOiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHModGV4dGVMZWdpc2xhdGlmKVxuXG4gIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgZmllbGRzIGluIGB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHNgIGFyZSBjdXJyZW50bHkgaWdub3JlZDpcbiAgLy8gKiBcIiN0ZXh0XCI/OiAgICAgICBzdHJpbmc7XG4gIC8vICogb2Zmc2V0PzogICAgICAgIG51bGw7XG4gIC8vICogbm9tPzogICAgICAgICAgIE5vbTtcbiAgLy8gKiBhdmFudF9BX0FwcmVzPzogRGl2aXNpb25BdmFudEFBcHJlcztcbiAgLy8gKiBkYXRlRGVwb3Q/OiAgICAgRGF0ZTtcbiAgLy8gKiBkb2N1bWVudFVSST86ICAgc3RyaW5nO1xuICAvLyBCZWNhdXNlIGl0IHNlZW1zIHRoZXkgc2hvdWxkIGJlbG9uZyB0byBhbiBcImFtZW5kZW1lbnRcIi5cbiAgbGV0IGFtZW5kZW1lbnQgPSB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMuYW1lbmRlbWVudFxuICBpZiAoQXJyYXkuaXNBcnJheShhbWVuZGVtZW50KSkge1xuICAgIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cyA9IGFtZW5kZW1lbnRcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoYW1lbmRlbWVudClcbiAgICB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMgPSBbYW1lbmRlbWVudF1cbiAgfVxuXG4gIGZvciAoY29uc3QgYW1lbmRlbWVudCBvZiB0ZXh0ZUxlZ2lzbGF0aWYuYW1lbmRlbWVudHMpIHtcbiAgICBjbGVhbkFtZW5kZW1lbnQoYW1lbmRlbWVudClcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUFBLFNBRWxCQyxxQkFBcUIsRUFBRUMsaUJBQWlCO0FBQUEsU0FDeENDLFdBQVc7QUFFcEIsT0FBTyxTQUFTQyxlQUFlLENBQUNDLFVBQWUsRUFBUTtFQUNyREgsaUJBQWlCLENBQUNHLFVBQVUsQ0FBQztFQUU3QixNQUFNQyxXQUFXLEdBQUdELFVBQVUsQ0FBQ0MsV0FBVztFQUMxQztJQUNFSixpQkFBaUIsQ0FBQ0ksV0FBVyxDQUFDO0lBRTlCLE1BQU1DLE1BQU0sR0FBR0QsV0FBVyxDQUFDQyxNQUFNO0lBQ2pDO01BQ0VMLGlCQUFpQixDQUFDSyxNQUFNLENBQUM7SUFDM0I7SUFFQSxJQUFJRCxXQUFXLENBQUNFLGFBQWEsS0FBS0MsU0FBUyxFQUFFO01BQzNDLE1BQU1DLFNBQVMsR0FBR0osV0FBVyxDQUFDRSxhQUFhLENBQUNFLFNBQVM7TUFDckQsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNGLFNBQVMsQ0FBQyxFQUFFO1FBQzVCSixXQUFXLENBQUNPLGlCQUFpQixHQUFHSCxTQUFTO01BQzNDLENBQUMsTUFBTTtRQUNMVixNQUFNLENBQUNVLFNBQVMsQ0FBQztRQUNqQkosV0FBVyxDQUFDTyxpQkFBaUIsR0FBRyxDQUFDSCxTQUFTLENBQUM7TUFDN0M7TUFDQSxPQUFPSixXQUFXLENBQUNFLGFBQWE7SUFDbEM7SUFFQSxJQUFJTSxPQUFPLEdBQUdSLFdBQVcsQ0FBQ1EsT0FBTztJQUNqQyxJQUFJQSxPQUFPLEtBQUtMLFNBQVMsRUFBRTtNQUN6QkssT0FBTyxHQUFHQSxPQUFPLENBQUNDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxPQUFPLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUN0RCxJQUFJSixPQUFPLEVBQUU7UUFDWFIsV0FBVyxDQUFDUSxPQUFPLEdBQUdBLE9BQU87TUFDL0IsQ0FBQyxNQUFNO1FBQ0wsT0FBT1IsV0FBVyxDQUFDUSxPQUFPO01BQzVCO0lBQ0Y7RUFDRjtFQUVBLE1BQU1LLHFCQUFxQixHQUFHZCxVQUFVLENBQUNjLHFCQUFxQjtFQUM5RDtJQUNFakIsaUJBQWlCLENBQUNpQixxQkFBcUIsQ0FBQztJQUV4QyxNQUFNQyxRQUFRLEdBQUdELHFCQUFxQixDQUFDQyxRQUFRO0lBQy9DLElBQUlBLFFBQVEsS0FBS1gsU0FBUyxFQUFFO01BQzFCUCxpQkFBaUIsQ0FBQ2tCLFFBQVEsQ0FBQztNQUUzQixJQUFJQyxXQUFXLEdBQUdELFFBQVEsQ0FBQ0UsYUFBYTtNQUN4QyxJQUFJRCxXQUFXLEtBQUtaLFNBQVMsRUFBRTtRQUM3QixPQUFPVyxRQUFRLENBQUNFLGFBQWE7UUFDN0IsSUFBSUQsV0FBVyxLQUFLLE9BQU8sRUFBRTtVQUMzQkEsV0FBVyxHQUFHbEIsV0FBVyxDQUFDb0IsS0FBSztRQUNqQztRQUNBSCxRQUFRLENBQUNDLFdBQVcsR0FBR0EsV0FBVztNQUNwQztJQUNGO0lBRUEsTUFBTUcsa0JBQWtCLEdBQUdMLHFCQUFxQixDQUFDSyxrQkFBa0I7SUFDbkUsSUFBSUEsa0JBQWtCLEtBQUtmLFNBQVMsRUFBRTtNQUNwQ1AsaUJBQWlCLENBQUNzQixrQkFBa0IsQ0FBQztNQUVyQyxNQUFNQyxNQUFNLEdBQUdELGtCQUFrQixDQUFDQyxNQUFNO01BQ3hDLElBQUlBLE1BQU0sS0FBS2hCLFNBQVMsRUFBRTtRQUN4QlAsaUJBQWlCLENBQUN1QixNQUFNLENBQUM7UUFFekIsSUFBSUosV0FBVyxHQUFHSSxNQUFNLENBQUNILGFBQWE7UUFDdEMsSUFBSUQsV0FBVyxLQUFLWixTQUFTLEVBQUU7VUFDN0IsT0FBT2dCLE1BQU0sQ0FBQ0gsYUFBYTtVQUMzQixJQUFJRCxXQUFXLEtBQUssT0FBTyxFQUFFO1lBQzNCQSxXQUFXLEdBQUdsQixXQUFXLENBQUNvQixLQUFLO1VBQ2pDLENBQUMsTUFBTSxJQUNMLENBQUMsQ0FBQ3BCLFdBQVcsQ0FBQ3VCLENBQUMsRUFBRXZCLFdBQVcsQ0FBQ29CLEtBQUssRUFBRXBCLFdBQVcsQ0FBQ3dCLEtBQUssQ0FBQyxDQUFDQyxRQUFRLENBQzdEUCxXQUFXLENBQ1osRUFDRDtZQUNBQSxXQUFXLEdBQUdsQixXQUFXLENBQUN1QixDQUFDO1VBQzdCO1VBQ0FELE1BQU0sQ0FBQ0osV0FBVyxHQUFHQSxXQUFXO1FBQ2xDO1FBRUFGLHFCQUFxQixDQUFDTSxNQUFNLEdBQUdBLE1BQU07TUFDdkM7TUFDQSxPQUFPTixxQkFBcUIsQ0FBQ0ssa0JBQWtCO0lBQ2pEO0VBQ0Y7RUFFQSxNQUFNSyxLQUFLLEdBQUd4QixVQUFVLENBQUN3QixLQUFLO0VBQzlCLElBQUlBLEtBQUssS0FBS3BCLFNBQVMsRUFBRTtJQUN2QlAsaUJBQWlCLENBQUMyQixLQUFLLENBQUM7SUFFeEIsTUFBTUMsYUFBYSxHQUFHRCxLQUFLLENBQUNDLGFBQWE7SUFDekMsSUFBSUEsYUFBYSxLQUFLckIsU0FBUyxFQUFFO01BQy9CUCxpQkFBaUIsQ0FBQzRCLGFBQWEsQ0FBQztNQUVoQyxNQUFNQyxVQUFVLEdBQUdELGFBQWEsQ0FBQ0MsVUFBVTtNQUMzQyxJQUFJQSxVQUFVLEtBQUt0QixTQUFTLEVBQUU7UUFDNUJQLGlCQUFpQixDQUFDNkIsVUFBVSxDQUFDO1FBRTdCL0IsTUFBTSxDQUFDZ0MsY0FBYyxDQUFDRCxVQUFVLENBQUNFLFVBQVUsRUFBRXhCLFNBQVMsQ0FBQztNQUN6RDtNQUVBVCxNQUFNLENBQUNrQyxXQUFXLENBQUNKLGFBQWEsQ0FBQ0ssb0JBQW9CLEVBQUUxQixTQUFTLENBQUM7TUFFakUsTUFBTTJCLHVCQUF1QixHQUFHTixhQUFhLENBQUNNLHVCQUF1QjtNQUNyRSxJQUFJQSx1QkFBdUIsS0FBSzNCLFNBQVMsRUFBRTtRQUN6QyxNQUFNNEIsZUFBZSxHQUNuQkQsdUJBQXVCLENBQUNDLGVBQWUsRUFBRUMsU0FBUztRQUNwRCxJQUFJRCxlQUFlLEtBQUs1QixTQUFTLEVBQUU7VUFDakMsSUFBSUUsS0FBSyxDQUFDQyxPQUFPLENBQUN5QixlQUFlLENBQUMsRUFBRTtZQUNsQ0QsdUJBQXVCLENBQUNDLGVBQWUsR0FBR0EsZUFBZTtVQUMzRCxDQUFDLE1BQU07WUFDTHJDLE1BQU0sQ0FBQ3FDLGVBQWUsQ0FBQztZQUN2QkQsdUJBQXVCLENBQUNDLGVBQWUsR0FBRyxDQUFDQSxlQUFlLENBQUM7VUFDN0Q7VUFFQSxLQUFLLE1BQU1DLFNBQVMsSUFBSUYsdUJBQXVCLENBQUNDLGVBQWUsRUFBRTtZQUMvRG5DLGlCQUFpQixDQUFDb0MsU0FBUyxDQUFDO1lBRTVCLElBQUlBLFNBQVMsQ0FBQ0MsYUFBYSxLQUFLOUIsU0FBUyxFQUFFO2NBQ3pDLElBQUk4QixhQUFhLEdBQUdELFNBQVMsQ0FBQ0MsYUFBYSxDQUFDQyxXQUFXO2NBQ3ZELElBQUlELGFBQWEsS0FBSzlCLFNBQVMsRUFBRTtnQkFDL0IsT0FBTzZCLFNBQVMsQ0FBQ0MsYUFBYTtjQUNoQyxDQUFDLE1BQU07Z0JBQ0wsSUFBSSxDQUFDNUIsS0FBSyxDQUFDQyxPQUFPLENBQUMyQixhQUFhLENBQUMsRUFBRTtrQkFDakN2QyxNQUFNLENBQUN1QyxhQUFhLENBQUM7a0JBQ3JCQSxhQUFhLEdBQUcsQ0FBQ0EsYUFBYSxDQUFDO2dCQUNqQztnQkFDQUQsU0FBUyxDQUFDQyxhQUFhLEdBQUdBLGFBQWE7Y0FDekM7Y0FDQSxJQUFJQSxhQUFhLEtBQUs5QixTQUFTLEVBQUU7Z0JBQy9CLEtBQUssTUFBTStCLFdBQVcsSUFBSUQsYUFBYSxFQUFFO2tCQUN2Q3JDLGlCQUFpQixDQUFDc0MsV0FBVyxDQUFDO2dCQUNoQztjQUNGO1lBQ0Y7VUFDRjtRQUNGO01BQ0Y7TUFFQSxNQUFNQyx3QkFBd0IsR0FBR1gsYUFBYSxDQUFDVyx3QkFBd0I7TUFDdkUsSUFBSUEsd0JBQXdCLEtBQUtoQyxTQUFTLEVBQUU7UUFDMUMsTUFBTTRCLGVBQWUsR0FDbkJJLHdCQUF3QixDQUFDSixlQUFlLEVBQUVDLFNBQVM7UUFDckQsSUFBSUQsZUFBZSxLQUFLNUIsU0FBUyxFQUFFO1VBQ2pDLElBQUlFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDeUIsZUFBZSxDQUFDLEVBQUU7WUFDbENJLHdCQUF3QixDQUFDSixlQUFlLEdBQUdBLGVBQWU7VUFDNUQsQ0FBQyxNQUFNO1lBQ0xyQyxNQUFNLENBQUNxQyxlQUFlLENBQUM7WUFDdkJJLHdCQUF3QixDQUFDSixlQUFlLEdBQUcsQ0FBQ0EsZUFBZSxDQUFDO1VBQzlEO1VBRUEsS0FBSyxNQUFNQyxTQUFTLElBQUlHLHdCQUF3QixDQUFDSixlQUFlLEVBQUU7WUFDaEVuQyxpQkFBaUIsQ0FBQ29DLFNBQVMsQ0FBQztZQUU1QixJQUFJQSxTQUFTLENBQUNDLGFBQWEsS0FBSzlCLFNBQVMsRUFBRTtjQUN6QyxJQUFJOEIsYUFBYSxHQUFHRCxTQUFTLENBQUNDLGFBQWEsQ0FBQ0MsV0FBVztjQUN2RCxJQUFJRCxhQUFhLEtBQUs5QixTQUFTLEVBQUU7Z0JBQy9CLE9BQU82QixTQUFTLENBQUNDLGFBQWE7Y0FDaEMsQ0FBQyxNQUFNO2dCQUNMLElBQUksQ0FBQzVCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDMkIsYUFBYSxDQUFDLEVBQUU7a0JBQ2pDdkMsTUFBTSxDQUFDdUMsYUFBYSxDQUFDO2tCQUNyQkEsYUFBYSxHQUFHLENBQUNBLGFBQWEsQ0FBQztnQkFDakM7Z0JBQ0FELFNBQVMsQ0FBQ0MsYUFBYSxHQUFHQSxhQUFhO2NBQ3pDO2NBQ0EsSUFBSUEsYUFBYSxLQUFLOUIsU0FBUyxFQUFFO2dCQUMvQixLQUFLLE1BQU0rQixXQUFXLElBQUlELGFBQWEsRUFBRTtrQkFDdkNHLG9CQUFvQixDQUFDRixXQUFXLENBQUM7Z0JBQ25DO2NBQ0Y7WUFDRjtVQUNGO1FBQ0Y7TUFDRjtJQUNGO0VBQ0Y7RUFFQSxNQUFNRyxVQUFVLEdBQUd0QyxVQUFVLENBQUNzQyxVQUFVO0VBQ3hDLElBQUlBLFVBQVUsS0FBS2xDLFNBQVMsRUFBRTtJQUM1QlAsaUJBQWlCLENBQUN5QyxVQUFVLENBQUM7SUFFN0IsTUFBTUMsa0JBQWtCLEdBQUdELFVBQVUsQ0FBQ0Msa0JBQWtCO0lBQ3hEO01BQ0UxQyxpQkFBaUIsQ0FBQzBDLGtCQUFrQixDQUFDO01BRXJDLE1BQU1DLElBQUksR0FBR0Qsa0JBQWtCLENBQUNDLElBQUk7TUFDcEM7UUFDRTNDLGlCQUFpQixDQUFDMkMsSUFBSSxDQUFDO01BQ3pCO01BRUEsTUFBTUMsUUFBUSxHQUFHRixrQkFBa0IsQ0FBQ0UsUUFBUTtNQUM1QyxJQUFJQSxRQUFRLEtBQUtyQyxTQUFTLEVBQUU7UUFDMUJQLGlCQUFpQixDQUFDNEMsUUFBUSxDQUFDO01BQzdCO0lBQ0Y7RUFDRjtFQUVBLElBQUl6QyxVQUFVLENBQUMwQyxlQUFlLEtBQUt0QyxTQUFTLEVBQUU7SUFDNUMsTUFBTXVDLGNBQWMsR0FBRzNDLFVBQVUsQ0FBQzBDLGVBQWUsQ0FBQ0MsY0FBYztJQUNoRWhELE1BQU0sQ0FBQyxDQUFDVyxLQUFLLENBQUNDLE9BQU8sQ0FBQ29DLGNBQWMsQ0FBQyxDQUFDO0lBQ3RDM0MsVUFBVSxDQUFDMkMsY0FBYyxHQUFHQSxjQUFjO0lBQzFDLE9BQU8zQyxVQUFVLENBQUMwQyxlQUFlO0lBQ2pDO01BQ0U3QyxpQkFBaUIsQ0FBQzhDLGNBQWMsQ0FBQztNQUVqQ2hELE1BQU0sQ0FBQ2tDLFdBQVcsQ0FBQ2MsY0FBYyxDQUFDQyxTQUFTLEVBQUV4QyxTQUFTLENBQUM7TUFDdkRULE1BQU0sQ0FBQ2tDLFdBQVcsQ0FBQ2MsY0FBYyxDQUFDRSxNQUFNLEVBQUV6QyxTQUFTLENBQUM7TUFDcERULE1BQU0sQ0FBQ2tDLFdBQVcsQ0FBQ2MsY0FBYyxDQUFDRyx1QkFBdUIsRUFBRTFDLFNBQVMsQ0FBQztNQUVyRSxNQUFNMkMsb0JBQW9CLEdBQUdKLGNBQWMsQ0FBQ0ksb0JBQW9CO01BQ2hFO1FBQ0VuRCxxQkFBcUIsQ0FBQ21ELG9CQUFvQixFQUFFLFdBQVcsQ0FBQztRQUN4RG5ELHFCQUFxQixDQUFDbUQsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUM7UUFDN0RuRCxxQkFBcUIsQ0FBQ21ELG9CQUFvQixFQUFFLFlBQVksQ0FBQztRQUN6RG5ELHFCQUFxQixDQUFDbUQsb0JBQW9CLEVBQUUsZUFBZSxDQUFDO1FBQzVEbkQscUJBQXFCLENBQUNtRCxvQkFBb0IsRUFBRSxVQUFVLENBQUM7TUFDekQ7SUFDRjtFQUNGO0VBRUEsTUFBTUMsWUFBWSxHQUFHaEQsVUFBVSxDQUFDZ0QsWUFBWTtFQUM1QyxJQUFJQSxZQUFZLEtBQUs1QyxTQUFTLEVBQUU7SUFDOUJQLGlCQUFpQixDQUFDbUQsWUFBWSxDQUFDO0VBQ2pDO0VBRUEsTUFBTUMsaUJBQWlCLEdBQUdqRCxVQUFVLENBQUNpRCxpQkFBaUI7RUFDdEQsSUFBSUEsaUJBQWlCLEtBQUs3QyxTQUFTLEVBQUU7SUFDbkNQLGlCQUFpQixDQUFDb0QsaUJBQWlCLENBQUM7RUFDdEM7RUFFQSxNQUFNQyxtQkFBbUIsR0FBR2xELFVBQVUsQ0FBQ2tELG1CQUFtQjtFQUMxRCxJQUFJQSxtQkFBbUIsS0FBSzlDLFNBQVMsRUFBRTtJQUNyQ1AsaUJBQWlCLENBQUNxRCxtQkFBbUIsQ0FBQztFQUN4QztBQUNGO0FBRUEsU0FBU2Isb0JBQW9CLENBQUNjLGVBQW9CLEVBQUU7RUFDbER0RCxpQkFBaUIsQ0FBQ3NELGVBQWUsQ0FBQztFQUVsQyxJQUFJQSxlQUFlLENBQUNqQixhQUFhLEtBQUs5QixTQUFTLEVBQUU7SUFDL0MsSUFBSThCLGFBQWEsR0FBR2lCLGVBQWUsQ0FBQ2pCLGFBQWEsQ0FBQ0MsV0FBVztJQUM3RCxJQUFJRCxhQUFhLEtBQUs5QixTQUFTLEVBQUU7TUFDL0IsT0FBTytDLGVBQWUsQ0FBQ2pCLGFBQWE7SUFDdEMsQ0FBQyxNQUFNO01BQ0wsSUFBSSxDQUFDNUIsS0FBSyxDQUFDQyxPQUFPLENBQUMyQixhQUFhLENBQUMsRUFBRTtRQUNqQ3ZDLE1BQU0sQ0FBQ3VDLGFBQWEsQ0FBQztRQUNyQkEsYUFBYSxHQUFHLENBQUNBLGFBQWEsQ0FBQztNQUNqQztNQUNBaUIsZUFBZSxDQUFDakIsYUFBYSxHQUFHQSxhQUFhO0lBQy9DO0lBQ0EsSUFBSUEsYUFBYSxLQUFLOUIsU0FBUyxFQUFFO01BQy9CLEtBQUssTUFBTStCLFdBQVcsSUFBSUQsYUFBYSxFQUFFO1FBQ3ZDRyxvQkFBb0IsQ0FBQ0YsV0FBVyxDQUFDO01BQ25DO0lBQ0Y7RUFDRjtBQUNGO0FBRUEsT0FBTyxTQUFTaUIsb0JBQW9CLENBQUNDLGVBQW9CLEVBQVE7RUFDL0R4RCxpQkFBaUIsQ0FBQ3dELGVBQWUsQ0FBQzs7RUFFbEM7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQUlyRCxVQUFVLEdBQUdxRCxlQUFlLENBQUNDLFdBQVcsQ0FBQ3RELFVBQVU7RUFDdkQsSUFBSU0sS0FBSyxDQUFDQyxPQUFPLENBQUNQLFVBQVUsQ0FBQyxFQUFFO0lBQzdCcUQsZUFBZSxDQUFDQyxXQUFXLEdBQUd0RCxVQUFVO0VBQzFDLENBQUMsTUFBTTtJQUNMTCxNQUFNLENBQUNLLFVBQVUsQ0FBQztJQUNsQnFELGVBQWUsQ0FBQ0MsV0FBVyxHQUFHLENBQUN0RCxVQUFVLENBQUM7RUFDNUM7RUFFQSxLQUFLLE1BQU1BLFVBQVUsSUFBSXFELGVBQWUsQ0FBQ0MsV0FBVyxFQUFFO0lBQ3BEdkQsZUFBZSxDQUFDQyxVQUFVLENBQUM7RUFDN0I7QUFDRiJ9
@@ -1,57 +1,35 @@
1
1
  "use strict";
2
2
 
3
3
  require("core-js/modules/es.array.slice.js");
4
-
5
4
  require("core-js/modules/es.object.to-string.js");
6
-
7
5
  require("core-js/modules/es.function.name.js");
8
-
9
6
  require("core-js/modules/es.array.from.js");
10
-
11
7
  require("core-js/modules/es.string.iterator.js");
12
-
13
8
  require("core-js/modules/es.regexp.exec.js");
14
-
15
9
  require("core-js/modules/es.symbol.js");
16
-
17
10
  require("core-js/modules/es.symbol.description.js");
18
-
19
11
  require("core-js/modules/es.symbol.iterator.js");
20
-
21
12
  require("core-js/modules/es.array.iterator.js");
22
-
23
13
  require("core-js/modules/web.dom-collections.iterator.js");
24
-
25
14
  require("core-js/modules/es.object.define-property.js");
26
-
27
15
  Object.defineProperty(exports, "__esModule", {
28
16
  value: true
29
17
  });
30
18
  exports.cleanDocumentOrDivision = cleanDocumentOrDivision;
31
-
32
19
  require("core-js/modules/es.array.is-array.js");
33
-
34
20
  var _assert = _interopRequireDefault(require("assert"));
35
-
36
21
  var _xml = require("./xml");
37
-
38
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
39
-
40
23
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
41
-
42
24
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
43
-
44
25
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
45
-
46
26
  function cleanDocumentOrDivision(d) {
47
27
  (0, _xml.cleanXmlArtefacts)(d);
48
28
  var xsiType = d["@xsi:type"];
49
-
50
29
  if (xsiType !== undefined) {
51
30
  d.xsiType = xsiType;
52
31
  delete d["@xsi:type"];
53
32
  }
54
-
55
33
  var cycleDeVie = d.cycleDeVie;
56
34
  (0, _assert["default"])(cycleDeVie);
57
35
  {
@@ -60,20 +38,15 @@ function cleanDocumentOrDivision(d) {
60
38
  (0, _xml.cleanXmlArtefacts)(chrono);
61
39
  }
62
40
  var divisions = d.divisions;
63
-
64
41
  if (divisions !== undefined) {
65
42
  divisions = divisions.division;
66
-
67
43
  if (!Array.isArray(divisions)) {
68
44
  (0, _assert["default"])(divisions);
69
45
  divisions = [divisions];
70
46
  }
71
-
72
47
  d.divisions = divisions;
73
-
74
48
  var _iterator = _createForOfIteratorHelper(divisions),
75
- _step;
76
-
49
+ _step;
77
50
  try {
78
51
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
79
52
  var division = _step.value;
@@ -85,32 +58,24 @@ function cleanDocumentOrDivision(d) {
85
58
  _iterator.f();
86
59
  }
87
60
  }
88
-
89
61
  _assert["default"].strictEqual(d.redacteur, undefined);
90
-
91
62
  var classification = d.classification;
92
63
  (0, _assert["default"])(classification);
93
64
  (0, _xml.cleanXmlArtefacts)(classification);
94
65
  var auteurs = d.auteurs;
95
-
96
66
  if (auteurs !== undefined) {
97
67
  auteurs = auteurs.auteur;
98
-
99
68
  if (!Array.isArray(auteurs)) {
100
69
  (0, _assert["default"])(auteurs);
101
70
  auteurs = [auteurs];
102
71
  }
103
-
104
72
  d.auteurs = auteurs;
105
-
106
73
  var _iterator2 = _createForOfIteratorHelper(auteurs),
107
- _step2;
108
-
74
+ _step2;
109
75
  try {
110
76
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
111
77
  var auteur = _step2.value;
112
78
  var organeRef = auteur.organe;
113
-
114
79
  if (organeRef !== undefined) {
115
80
  auteur.organeRef = organeRef.organeRef;
116
81
  delete auteur.organe;
@@ -122,42 +87,33 @@ function cleanDocumentOrDivision(d) {
122
87
  _iterator2.f();
123
88
  }
124
89
  }
125
-
126
90
  var notice = d.notice;
127
91
  {
128
92
  (0, _xml.cleanBooleanAttribute)(notice, "adoptionConforme");
129
93
  }
130
94
  var coSignataires = d.coSignataires;
131
-
132
95
  if (coSignataires !== undefined) {
133
96
  coSignataires = coSignataires.coSignataire;
134
-
135
97
  if (!Array.isArray(coSignataires)) {
136
98
  (0, _assert["default"])(coSignataires);
137
99
  coSignataires = [coSignataires];
138
100
  }
139
-
140
101
  d.coSignataires = coSignataires;
141
-
142
102
  var _iterator3 = _createForOfIteratorHelper(coSignataires),
143
- _step3;
144
-
103
+ _step3;
145
104
  try {
146
105
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
147
106
  var coSignataire = _step3.value;
148
107
  (0, _xml.cleanXmlArtefacts)(coSignataire);
149
108
  (0, _xml.cleanBooleanAttribute)(coSignataire, "edite");
150
109
  var acteurRef = coSignataire.acteur;
151
-
152
110
  if (acteurRef !== undefined) {
153
111
  acteurRef = acteurRef.acteurRef;
154
112
  (0, _assert["default"])(acteurRef);
155
113
  delete coSignataire.acteur;
156
114
  coSignataire.acteurRef = acteurRef;
157
115
  }
158
-
159
116
  var organe = coSignataire.organe;
160
-
161
117
  if (organe !== undefined) {
162
118
  (0, _xml.cleanBooleanAttribute)(organe, "etApparentes");
163
119
  }
@@ -168,9 +124,7 @@ function cleanDocumentOrDivision(d) {
168
124
  _iterator3.f();
169
125
  }
170
126
  }
171
-
172
127
  var depotAmendements = d.depotAmendements;
173
-
174
128
  if (depotAmendements !== undefined) {
175
129
  (0, _xml.cleanXmlArtefacts)(depotAmendements);
176
130
  var amendementsSeance = depotAmendements.amendementsSeance;
@@ -179,26 +133,20 @@ function cleanDocumentOrDivision(d) {
179
133
  (0, _xml.cleanBooleanAttribute)(amendementsSeance, "amendable");
180
134
  }
181
135
  var amendementsCommission = depotAmendements.amendementsCommission;
182
-
183
136
  if (amendementsCommission !== undefined) {
184
137
  amendementsCommission = amendementsCommission.commission;
185
-
186
138
  if (!Array.isArray(amendementsCommission)) {
187
139
  (0, _assert["default"])(amendementsCommission);
188
140
  amendementsCommission = [amendementsCommission];
189
141
  }
190
-
191
142
  depotAmendements.amendementsCommission = amendementsCommission;
192
-
193
143
  var _iterator4 = _createForOfIteratorHelper(amendementsCommission),
194
- _step4;
195
-
144
+ _step4;
196
145
  try {
197
146
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
198
147
  var commision = _step4.value;
199
148
  (0, _xml.cleanXmlArtefacts)(commision);
200
149
  (0, _xml.cleanBooleanAttribute)(commision, "amendable");
201
-
202
150
  _assert["default"].strictEqual(commision.dateLimiteDepot, undefined);
203
151
  }
204
152
  } catch (err) {
@@ -208,40 +156,30 @@ function cleanDocumentOrDivision(d) {
208
156
  }
209
157
  }
210
158
  }
211
-
212
159
  var imprimerie = d.imprimerie;
213
-
214
160
  if (imprimerie !== undefined) {
215
161
  (0, _xml.cleanXmlArtefacts)(imprimerie);
216
162
  var dian = imprimerie.DIAN;
217
-
218
163
  if (dian !== undefined) {
219
164
  delete imprimerie.DIAN;
220
165
  imprimerie.dian = dian;
221
166
  }
222
-
223
167
  var isbn = imprimerie.ISBN;
224
-
225
168
  if (isbn !== undefined) {
226
169
  delete imprimerie.ISBN;
227
170
  imprimerie.isbn = isbn;
228
171
  }
229
-
230
172
  _assert["default"].strictEqual(imprimerie.ISSN, undefined);
231
173
  }
232
-
233
174
  (0, _xml.cleanBooleanAttribute)(d, "rapportPublie");
234
175
  var organesReferents = d.organesReferents;
235
-
236
176
  if (organesReferents !== undefined) {
237
177
  organesReferents = organesReferents.organeRef;
238
-
239
178
  if (!Array.isArray(organesReferents)) {
240
179
  (0, _assert["default"])(organesReferents);
241
180
  organesReferents = [organesReferents];
242
181
  }
243
-
244
182
  d.organesReferents = organesReferents;
245
183
  }
246
184
  }
247
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGVhbkRvY3VtZW50T3JEaXZpc2lvbiIsImQiLCJjbGVhblhtbEFydGVmYWN0cyIsInhzaVR5cGUiLCJ1bmRlZmluZWQiLCJjeWNsZURlVmllIiwiYXNzZXJ0IiwiY2hyb25vIiwiZGl2aXNpb25zIiwiZGl2aXNpb24iLCJBcnJheSIsImlzQXJyYXkiLCJzdHJpY3RFcXVhbCIsInJlZGFjdGV1ciIsImNsYXNzaWZpY2F0aW9uIiwiYXV0ZXVycyIsImF1dGV1ciIsIm9yZ2FuZVJlZiIsIm9yZ2FuZSIsIm5vdGljZSIsImNsZWFuQm9vbGVhbkF0dHJpYnV0ZSIsImNvU2lnbmF0YWlyZXMiLCJjb1NpZ25hdGFpcmUiLCJhY3RldXJSZWYiLCJhY3RldXIiLCJkZXBvdEFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNTZWFuY2UiLCJhbWVuZGVtZW50c0NvbW1pc3Npb24iLCJjb21taXNzaW9uIiwiY29tbWlzaW9uIiwiZGF0ZUxpbWl0ZURlcG90IiwiaW1wcmltZXJpZSIsImRpYW4iLCJESUFOIiwiaXNibiIsIklTQk4iLCJJU1NOIiwib3JnYW5lc1JlZmVyZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGVhbmVycy9kb2N1bWVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcblxuaW1wb3J0IHsgY2xlYW5Cb29sZWFuQXR0cmlidXRlLCBjbGVhblhtbEFydGVmYWN0cyB9IGZyb20gXCIuL3htbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkOiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoZClcblxuICBjb25zdCB4c2lUeXBlID0gZFtcIkB4c2k6dHlwZVwiXVxuICBpZiAoeHNpVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZC54c2lUeXBlID0geHNpVHlwZVxuICAgIGRlbGV0ZSBkW1wiQHhzaTp0eXBlXCJdXG4gIH1cblxuICBjb25zdCBjeWNsZURlVmllID0gZC5jeWNsZURlVmllXG4gIGFzc2VydChjeWNsZURlVmllKVxuICB7XG4gICAgY29uc3QgY2hyb25vID0gY3ljbGVEZVZpZS5jaHJvbm9cbiAgICBhc3NlcnQoY2hyb25vKVxuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGNocm9ubylcbiAgfVxuXG4gIGxldCBkaXZpc2lvbnMgPSBkLmRpdmlzaW9uc1xuICBpZiAoZGl2aXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBkaXZpc2lvbnMgPSBkaXZpc2lvbnMuZGl2aXNpb25cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGl2aXNpb25zKSkge1xuICAgICAgYXNzZXJ0KGRpdmlzaW9ucylcbiAgICAgIGRpdmlzaW9ucyA9IFtkaXZpc2lvbnNdXG4gICAgfVxuICAgIGQuZGl2aXNpb25zID0gZGl2aXNpb25zXG4gICAgZm9yIChjb25zdCBkaXZpc2lvbiBvZiBkaXZpc2lvbnMpIHtcbiAgICAgIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uKGRpdmlzaW9uKVxuICAgIH1cbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChkLnJlZGFjdGV1ciwgdW5kZWZpbmVkKVxuXG4gIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gZC5jbGFzc2lmaWNhdGlvblxuICBhc3NlcnQoY2xhc3NpZmljYXRpb24pXG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKGNsYXNzaWZpY2F0aW9uKVxuXG4gIGxldCBhdXRldXJzID0gZC5hdXRldXJzXG4gIGlmIChhdXRldXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICBhdXRldXJzID0gYXV0ZXVycy5hdXRldXJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXV0ZXVycykpIHtcbiAgICAgIGFzc2VydChhdXRldXJzKVxuICAgICAgYXV0ZXVycyA9IFthdXRldXJzXVxuICAgIH1cbiAgICBkLmF1dGV1cnMgPSBhdXRldXJzXG4gICAgZm9yIChjb25zdCBhdXRldXIgb2YgYXV0ZXVycykge1xuICAgICAgbGV0IG9yZ2FuZVJlZiA9IGF1dGV1ci5vcmdhbmVcbiAgICAgIGlmIChvcmdhbmVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIub3JnYW5lUmVmID0gb3JnYW5lUmVmLm9yZ2FuZVJlZlxuICAgICAgICBkZWxldGUgYXV0ZXVyLm9yZ2FuZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vdGljZSA9IGQubm90aWNlXG4gIHtcbiAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUobm90aWNlLCBcImFkb3B0aW9uQ29uZm9ybWVcIilcbiAgfVxuXG4gIGxldCBjb1NpZ25hdGFpcmVzID0gZC5jb1NpZ25hdGFpcmVzXG4gIGlmIChjb1NpZ25hdGFpcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb1NpZ25hdGFpcmVzID0gY29TaWduYXRhaXJlcy5jb1NpZ25hdGFpcmVcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29TaWduYXRhaXJlcykpIHtcbiAgICAgIGFzc2VydChjb1NpZ25hdGFpcmVzKVxuICAgICAgY29TaWduYXRhaXJlcyA9IFtjb1NpZ25hdGFpcmVzXVxuICAgIH1cbiAgICBkLmNvU2lnbmF0YWlyZXMgPSBjb1NpZ25hdGFpcmVzXG4gICAgZm9yIChjb25zdCBjb1NpZ25hdGFpcmUgb2YgY29TaWduYXRhaXJlcykge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoY29TaWduYXRhaXJlKVxuXG4gICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoY29TaWduYXRhaXJlLCBcImVkaXRlXCIpXG5cbiAgICAgIGxldCBhY3RldXJSZWYgPSBjb1NpZ25hdGFpcmUuYWN0ZXVyXG4gICAgICBpZiAoYWN0ZXVyUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZXVyUmVmID0gYWN0ZXVyUmVmLmFjdGV1clJlZlxuICAgICAgICBhc3NlcnQoYWN0ZXVyUmVmKVxuICAgICAgICBkZWxldGUgY29TaWduYXRhaXJlLmFjdGV1clxuICAgICAgICBjb1NpZ25hdGFpcmUuYWN0ZXVyUmVmID0gYWN0ZXVyUmVmXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGNvU2lnbmF0YWlyZS5vcmdhbmVcbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUob3JnYW5lLCBcImV0QXBwYXJlbnRlc1wiKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRlcG90QW1lbmRlbWVudHMgPSBkLmRlcG90QW1lbmRlbWVudHNcbiAgaWYgKGRlcG90QW1lbmRlbWVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGRlcG90QW1lbmRlbWVudHMpXG5cbiAgICBjb25zdCBhbWVuZGVtZW50c1NlYW5jZSA9IGRlcG90QW1lbmRlbWVudHMuYW1lbmRlbWVudHNTZWFuY2VcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhhbWVuZGVtZW50c1NlYW5jZSlcblxuICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKGFtZW5kZW1lbnRzU2VhbmNlLCBcImFtZW5kYWJsZVwiKVxuICAgIH1cblxuICAgIGxldCBhbWVuZGVtZW50c0NvbW1pc3Npb24gPSBkZXBvdEFtZW5kZW1lbnRzLmFtZW5kZW1lbnRzQ29tbWlzc2lvblxuICAgIGlmIChhbWVuZGVtZW50c0NvbW1pc3Npb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYW1lbmRlbWVudHNDb21taXNzaW9uID0gYW1lbmRlbWVudHNDb21taXNzaW9uLmNvbW1pc3Npb25cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhbWVuZGVtZW50c0NvbW1pc3Npb24pKSB7XG4gICAgICAgIGFzc2VydChhbWVuZGVtZW50c0NvbW1pc3Npb24pXG4gICAgICAgIGFtZW5kZW1lbnRzQ29tbWlzc2lvbiA9IFthbWVuZGVtZW50c0NvbW1pc3Npb25dXG4gICAgICB9XG4gICAgICBkZXBvdEFtZW5kZW1lbnRzLmFtZW5kZW1lbnRzQ29tbWlzc2lvbiA9IGFtZW5kZW1lbnRzQ29tbWlzc2lvblxuICAgICAgZm9yIChjb25zdCBjb21taXNpb24gb2YgYW1lbmRlbWVudHNDb21taXNzaW9uKSB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGNvbW1pc2lvbilcblxuICAgICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoY29tbWlzaW9uLCBcImFtZW5kYWJsZVwiKVxuXG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb21taXNpb24uZGF0ZUxpbWl0ZURlcG90LCB1bmRlZmluZWQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW1wcmltZXJpZSA9IGQuaW1wcmltZXJpZVxuICBpZiAoaW1wcmltZXJpZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoaW1wcmltZXJpZSlcblxuICAgIGNvbnN0IGRpYW4gPSBpbXByaW1lcmllLkRJQU5cbiAgICBpZiAoZGlhbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgaW1wcmltZXJpZS5ESUFOXG4gICAgICBpbXByaW1lcmllLmRpYW4gPSBkaWFuXG4gICAgfVxuXG4gICAgY29uc3QgaXNibiA9IGltcHJpbWVyaWUuSVNCTlxuICAgIGlmIChpc2JuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBpbXByaW1lcmllLklTQk5cbiAgICAgIGltcHJpbWVyaWUuaXNibiA9IGlzYm5cbiAgICB9XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW1wcmltZXJpZS5JU1NOLCB1bmRlZmluZWQpXG4gIH1cblxuICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoZCwgXCJyYXBwb3J0UHVibGllXCIpXG5cbiAgbGV0IG9yZ2FuZXNSZWZlcmVudHMgPSBkLm9yZ2FuZXNSZWZlcmVudHNcbiAgaWYgKG9yZ2FuZXNSZWZlcmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIG9yZ2FuZXNSZWZlcmVudHMgPSBvcmdhbmVzUmVmZXJlbnRzLm9yZ2FuZVJlZlxuICAgIGlmICghQXJyYXkuaXNBcnJheShvcmdhbmVzUmVmZXJlbnRzKSkge1xuICAgICAgYXNzZXJ0KG9yZ2FuZXNSZWZlcmVudHMpXG4gICAgICBvcmdhbmVzUmVmZXJlbnRzID0gW29yZ2FuZXNSZWZlcmVudHNdXG4gICAgfVxuICAgIGQub3JnYW5lc1JlZmVyZW50cyA9IG9yZ2FuZXNSZWZlcmVudHNcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7Ozs7Ozs7OztBQUVPLFNBQVNBLHVCQUFULENBQWlDQyxDQUFqQyxFQUErQztFQUNwRCxJQUFBQyxzQkFBQSxFQUFrQkQsQ0FBbEI7RUFFQSxJQUFNRSxPQUFPLEdBQUdGLENBQUMsQ0FBQyxXQUFELENBQWpCOztFQUNBLElBQUlFLE9BQU8sS0FBS0MsU0FBaEIsRUFBMkI7SUFDekJILENBQUMsQ0FBQ0UsT0FBRixHQUFZQSxPQUFaO0lBQ0EsT0FBT0YsQ0FBQyxDQUFDLFdBQUQsQ0FBUjtFQUNEOztFQUVELElBQU1JLFVBQVUsR0FBR0osQ0FBQyxDQUFDSSxVQUFyQjtFQUNBLElBQUFDLGtCQUFBLEVBQU9ELFVBQVA7RUFDQTtJQUNFLElBQU1FLE1BQU0sR0FBR0YsVUFBVSxDQUFDRSxNQUExQjtJQUNBLElBQUFELGtCQUFBLEVBQU9DLE1BQVA7SUFDQSxJQUFBTCxzQkFBQSxFQUFrQkssTUFBbEI7RUFDRDtFQUVELElBQUlDLFNBQVMsR0FBR1AsQ0FBQyxDQUFDTyxTQUFsQjs7RUFDQSxJQUFJQSxTQUFTLEtBQUtKLFNBQWxCLEVBQTZCO0lBQzNCSSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsUUFBdEI7O0lBQ0EsSUFBSSxDQUFDQyxLQUFLLENBQUNDLE9BQU4sQ0FBY0gsU0FBZCxDQUFMLEVBQStCO01BQzdCLElBQUFGLGtCQUFBLEVBQU9FLFNBQVA7TUFDQUEsU0FBUyxHQUFHLENBQUNBLFNBQUQsQ0FBWjtJQUNEOztJQUNEUCxDQUFDLENBQUNPLFNBQUYsR0FBY0EsU0FBZDs7SUFOMkIsMkNBT0pBLFNBUEk7SUFBQTs7SUFBQTtNQU8z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
185
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjbGVhbkRvY3VtZW50T3JEaXZpc2lvbiIsImQiLCJjbGVhblhtbEFydGVmYWN0cyIsInhzaVR5cGUiLCJ1bmRlZmluZWQiLCJjeWNsZURlVmllIiwiYXNzZXJ0IiwiY2hyb25vIiwiZGl2aXNpb25zIiwiZGl2aXNpb24iLCJBcnJheSIsImlzQXJyYXkiLCJzdHJpY3RFcXVhbCIsInJlZGFjdGV1ciIsImNsYXNzaWZpY2F0aW9uIiwiYXV0ZXVycyIsImF1dGV1ciIsIm9yZ2FuZVJlZiIsIm9yZ2FuZSIsIm5vdGljZSIsImNsZWFuQm9vbGVhbkF0dHJpYnV0ZSIsImNvU2lnbmF0YWlyZXMiLCJjb1NpZ25hdGFpcmUiLCJhY3RldXJSZWYiLCJhY3RldXIiLCJkZXBvdEFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHNTZWFuY2UiLCJhbWVuZGVtZW50c0NvbW1pc3Npb24iLCJjb21taXNzaW9uIiwiY29tbWlzaW9uIiwiZGF0ZUxpbWl0ZURlcG90IiwiaW1wcmltZXJpZSIsImRpYW4iLCJESUFOIiwiaXNibiIsIklTQk4iLCJJU1NOIiwib3JnYW5lc1JlZmVyZW50cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGVhbmVycy9kb2N1bWVudHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcblxuaW1wb3J0IHsgY2xlYW5Cb29sZWFuQXR0cmlidXRlLCBjbGVhblhtbEFydGVmYWN0cyB9IGZyb20gXCIuL3htbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkOiBhbnkpOiB2b2lkIHtcbiAgY2xlYW5YbWxBcnRlZmFjdHMoZClcblxuICBjb25zdCB4c2lUeXBlID0gZFtcIkB4c2k6dHlwZVwiXVxuICBpZiAoeHNpVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZC54c2lUeXBlID0geHNpVHlwZVxuICAgIGRlbGV0ZSBkW1wiQHhzaTp0eXBlXCJdXG4gIH1cblxuICBjb25zdCBjeWNsZURlVmllID0gZC5jeWNsZURlVmllXG4gIGFzc2VydChjeWNsZURlVmllKVxuICB7XG4gICAgY29uc3QgY2hyb25vID0gY3ljbGVEZVZpZS5jaHJvbm9cbiAgICBhc3NlcnQoY2hyb25vKVxuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGNocm9ubylcbiAgfVxuXG4gIGxldCBkaXZpc2lvbnMgPSBkLmRpdmlzaW9uc1xuICBpZiAoZGl2aXNpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICBkaXZpc2lvbnMgPSBkaXZpc2lvbnMuZGl2aXNpb25cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGl2aXNpb25zKSkge1xuICAgICAgYXNzZXJ0KGRpdmlzaW9ucylcbiAgICAgIGRpdmlzaW9ucyA9IFtkaXZpc2lvbnNdXG4gICAgfVxuICAgIGQuZGl2aXNpb25zID0gZGl2aXNpb25zXG4gICAgZm9yIChjb25zdCBkaXZpc2lvbiBvZiBkaXZpc2lvbnMpIHtcbiAgICAgIGNsZWFuRG9jdW1lbnRPckRpdmlzaW9uKGRpdmlzaW9uKVxuICAgIH1cbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbChkLnJlZGFjdGV1ciwgdW5kZWZpbmVkKVxuXG4gIGNvbnN0IGNsYXNzaWZpY2F0aW9uID0gZC5jbGFzc2lmaWNhdGlvblxuICBhc3NlcnQoY2xhc3NpZmljYXRpb24pXG4gIGNsZWFuWG1sQXJ0ZWZhY3RzKGNsYXNzaWZpY2F0aW9uKVxuXG4gIGxldCBhdXRldXJzID0gZC5hdXRldXJzXG4gIGlmIChhdXRldXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICBhdXRldXJzID0gYXV0ZXVycy5hdXRldXJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXV0ZXVycykpIHtcbiAgICAgIGFzc2VydChhdXRldXJzKVxuICAgICAgYXV0ZXVycyA9IFthdXRldXJzXVxuICAgIH1cbiAgICBkLmF1dGV1cnMgPSBhdXRldXJzXG4gICAgZm9yIChjb25zdCBhdXRldXIgb2YgYXV0ZXVycykge1xuICAgICAgbGV0IG9yZ2FuZVJlZiA9IGF1dGV1ci5vcmdhbmVcbiAgICAgIGlmIChvcmdhbmVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIub3JnYW5lUmVmID0gb3JnYW5lUmVmLm9yZ2FuZVJlZlxuICAgICAgICBkZWxldGUgYXV0ZXVyLm9yZ2FuZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG5vdGljZSA9IGQubm90aWNlXG4gIHtcbiAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUobm90aWNlLCBcImFkb3B0aW9uQ29uZm9ybWVcIilcbiAgfVxuXG4gIGxldCBjb1NpZ25hdGFpcmVzID0gZC5jb1NpZ25hdGFpcmVzXG4gIGlmIChjb1NpZ25hdGFpcmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb1NpZ25hdGFpcmVzID0gY29TaWduYXRhaXJlcy5jb1NpZ25hdGFpcmVcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29TaWduYXRhaXJlcykpIHtcbiAgICAgIGFzc2VydChjb1NpZ25hdGFpcmVzKVxuICAgICAgY29TaWduYXRhaXJlcyA9IFtjb1NpZ25hdGFpcmVzXVxuICAgIH1cbiAgICBkLmNvU2lnbmF0YWlyZXMgPSBjb1NpZ25hdGFpcmVzXG4gICAgZm9yIChjb25zdCBjb1NpZ25hdGFpcmUgb2YgY29TaWduYXRhaXJlcykge1xuICAgICAgY2xlYW5YbWxBcnRlZmFjdHMoY29TaWduYXRhaXJlKVxuXG4gICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoY29TaWduYXRhaXJlLCBcImVkaXRlXCIpXG5cbiAgICAgIGxldCBhY3RldXJSZWYgPSBjb1NpZ25hdGFpcmUuYWN0ZXVyXG4gICAgICBpZiAoYWN0ZXVyUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZXVyUmVmID0gYWN0ZXVyUmVmLmFjdGV1clJlZlxuICAgICAgICBhc3NlcnQoYWN0ZXVyUmVmKVxuICAgICAgICBkZWxldGUgY29TaWduYXRhaXJlLmFjdGV1clxuICAgICAgICBjb1NpZ25hdGFpcmUuYWN0ZXVyUmVmID0gYWN0ZXVyUmVmXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGNvU2lnbmF0YWlyZS5vcmdhbmVcbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUob3JnYW5lLCBcImV0QXBwYXJlbnRlc1wiKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRlcG90QW1lbmRlbWVudHMgPSBkLmRlcG90QW1lbmRlbWVudHNcbiAgaWYgKGRlcG90QW1lbmRlbWVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGRlcG90QW1lbmRlbWVudHMpXG5cbiAgICBjb25zdCBhbWVuZGVtZW50c1NlYW5jZSA9IGRlcG90QW1lbmRlbWVudHMuYW1lbmRlbWVudHNTZWFuY2VcbiAgICB7XG4gICAgICBjbGVhblhtbEFydGVmYWN0cyhhbWVuZGVtZW50c1NlYW5jZSlcblxuICAgICAgY2xlYW5Cb29sZWFuQXR0cmlidXRlKGFtZW5kZW1lbnRzU2VhbmNlLCBcImFtZW5kYWJsZVwiKVxuICAgIH1cblxuICAgIGxldCBhbWVuZGVtZW50c0NvbW1pc3Npb24gPSBkZXBvdEFtZW5kZW1lbnRzLmFtZW5kZW1lbnRzQ29tbWlzc2lvblxuICAgIGlmIChhbWVuZGVtZW50c0NvbW1pc3Npb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYW1lbmRlbWVudHNDb21taXNzaW9uID0gYW1lbmRlbWVudHNDb21taXNzaW9uLmNvbW1pc3Npb25cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhbWVuZGVtZW50c0NvbW1pc3Npb24pKSB7XG4gICAgICAgIGFzc2VydChhbWVuZGVtZW50c0NvbW1pc3Npb24pXG4gICAgICAgIGFtZW5kZW1lbnRzQ29tbWlzc2lvbiA9IFthbWVuZGVtZW50c0NvbW1pc3Npb25dXG4gICAgICB9XG4gICAgICBkZXBvdEFtZW5kZW1lbnRzLmFtZW5kZW1lbnRzQ29tbWlzc2lvbiA9IGFtZW5kZW1lbnRzQ29tbWlzc2lvblxuICAgICAgZm9yIChjb25zdCBjb21taXNpb24gb2YgYW1lbmRlbWVudHNDb21taXNzaW9uKSB7XG4gICAgICAgIGNsZWFuWG1sQXJ0ZWZhY3RzKGNvbW1pc2lvbilcblxuICAgICAgICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoY29tbWlzaW9uLCBcImFtZW5kYWJsZVwiKVxuXG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb21taXNpb24uZGF0ZUxpbWl0ZURlcG90LCB1bmRlZmluZWQpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW1wcmltZXJpZSA9IGQuaW1wcmltZXJpZVxuICBpZiAoaW1wcmltZXJpZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2xlYW5YbWxBcnRlZmFjdHMoaW1wcmltZXJpZSlcblxuICAgIGNvbnN0IGRpYW4gPSBpbXByaW1lcmllLkRJQU5cbiAgICBpZiAoZGlhbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWxldGUgaW1wcmltZXJpZS5ESUFOXG4gICAgICBpbXByaW1lcmllLmRpYW4gPSBkaWFuXG4gICAgfVxuXG4gICAgY29uc3QgaXNibiA9IGltcHJpbWVyaWUuSVNCTlxuICAgIGlmIChpc2JuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlbGV0ZSBpbXByaW1lcmllLklTQk5cbiAgICAgIGltcHJpbWVyaWUuaXNibiA9IGlzYm5cbiAgICB9XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaW1wcmltZXJpZS5JU1NOLCB1bmRlZmluZWQpXG4gIH1cblxuICBjbGVhbkJvb2xlYW5BdHRyaWJ1dGUoZCwgXCJyYXBwb3J0UHVibGllXCIpXG5cbiAgbGV0IG9yZ2FuZXNSZWZlcmVudHMgPSBkLm9yZ2FuZXNSZWZlcmVudHNcbiAgaWYgKG9yZ2FuZXNSZWZlcmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIG9yZ2FuZXNSZWZlcmVudHMgPSBvcmdhbmVzUmVmZXJlbnRzLm9yZ2FuZVJlZlxuICAgIGlmICghQXJyYXkuaXNBcnJheShvcmdhbmVzUmVmZXJlbnRzKSkge1xuICAgICAgYXNzZXJ0KG9yZ2FuZXNSZWZlcmVudHMpXG4gICAgICBvcmdhbmVzUmVmZXJlbnRzID0gW29yZ2FuZXNSZWZlcmVudHNdXG4gICAgfVxuICAgIGQub3JnYW5lc1JlZmVyZW50cyA9IG9yZ2FuZXNSZWZlcmVudHNcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFFQTtBQUFnRTtBQUFBO0FBQUE7QUFBQTtBQUV6RCxTQUFTQSx1QkFBdUIsQ0FBQ0MsQ0FBTSxFQUFRO0VBQ3BELElBQUFDLHNCQUFpQixFQUFDRCxDQUFDLENBQUM7RUFFcEIsSUFBTUUsT0FBTyxHQUFHRixDQUFDLENBQUMsV0FBVyxDQUFDO0VBQzlCLElBQUlFLE9BQU8sS0FBS0MsU0FBUyxFQUFFO0lBQ3pCSCxDQUFDLENBQUNFLE9BQU8sR0FBR0EsT0FBTztJQUNuQixPQUFPRixDQUFDLENBQUMsV0FBVyxDQUFDO0VBQ3ZCO0VBRUEsSUFBTUksVUFBVSxHQUFHSixDQUFDLENBQUNJLFVBQVU7RUFDL0IsSUFBQUMsa0JBQU0sRUFBQ0QsVUFBVSxDQUFDO0VBQ2xCO0lBQ0UsSUFBTUUsTUFBTSxHQUFHRixVQUFVLENBQUNFLE1BQU07SUFDaEMsSUFBQUQsa0JBQU0sRUFBQ0MsTUFBTSxDQUFDO0lBQ2QsSUFBQUwsc0JBQWlCLEVBQUNLLE1BQU0sQ0FBQztFQUMzQjtFQUVBLElBQUlDLFNBQVMsR0FBR1AsQ0FBQyxDQUFDTyxTQUFTO0VBQzNCLElBQUlBLFNBQVMsS0FBS0osU0FBUyxFQUFFO0lBQzNCSSxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsUUFBUTtJQUM5QixJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxTQUFTLENBQUMsRUFBRTtNQUM3QixJQUFBRixrQkFBTSxFQUFDRSxTQUFTLENBQUM7TUFDakJBLFNBQVMsR0FBRyxDQUFDQSxTQUFTLENBQUM7SUFDekI7SUFDQVAsQ0FBQyxDQUFDTyxTQUFTLEdBQUdBLFNBQVM7SUFBQSwyQ0FDQUEsU0FBUztN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