@tricoteuses/assemblee 1.0.7 → 1.1.1

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
package/lib/inserters.mjs CHANGED
@@ -1,55 +1,43 @@
1
1
  function insertActeLegislatifReferences(acte, data, visitedUids) {
2
2
  if (!visitedUids.has(acte.uid)) {
3
3
  visitedUids.add(acte.uid);
4
-
5
4
  if (data.documentByUid !== undefined && acte.depotInitialLectureDefinitiveRef !== undefined) {
6
5
  const document = data.documentByUid[acte.depotInitialLectureDefinitiveRef];
7
-
8
6
  if (document !== undefined) {
9
7
  acte.depotInitialLectureDefinitive = document;
10
8
  insertDocumentReferences(document, data, visitedUids);
11
9
  }
12
10
  }
13
-
14
11
  if (data.organeByUid !== undefined && acte.organeRef !== undefined) {
15
12
  const organe = data.organeByUid[acte.organeRef];
16
-
17
13
  if (organe !== undefined) {
18
14
  acte.organe = organe;
19
15
  insertOrganeReferences(organe, data, visitedUids);
20
16
  }
21
17
  }
22
-
23
18
  if (data.organeByUid !== undefined && acte.provenanceRef !== undefined) {
24
19
  const organe = data.organeByUid[acte.provenanceRef];
25
-
26
20
  if (organe !== undefined) {
27
21
  acte.provenance = organe;
28
22
  insertOrganeReferences(organe, data, visitedUids);
29
23
  }
30
24
  }
31
-
32
25
  if (data.acteurByUid !== undefined && acte.rapporteurs !== undefined) {
33
26
  for (const rapporteur of acte.rapporteurs) {
34
27
  const acteur = data.acteurByUid[rapporteur.acteurRef];
35
-
36
28
  if (acteur !== undefined) {
37
29
  rapporteur.acteur = acteur;
38
30
  insertActeurReferences(acteur, data, visitedUids);
39
31
  }
40
32
  }
41
33
  }
42
-
43
34
  if (data.reunionByUid !== undefined && acte.reunionRef !== undefined) {
44
35
  const reunion = data.reunionByUid[acte.reunionRef];
45
-
46
36
  if (reunion !== undefined) {
47
37
  acte.reunion = reunion;
48
38
  insertReunionReferences(reunion, data, visitedUids);
49
-
50
39
  if (acte.odjRef !== undefined) {
51
40
  const odj = reunion.odj;
52
-
53
41
  if (odj !== undefined && odj.pointsOdj !== undefined) {
54
42
  for (const pointOdj of odj.pointsOdj) {
55
43
  if (pointOdj.uid === acte.odjRef) {
@@ -61,81 +49,63 @@ function insertActeLegislatifReferences(acte, data, visitedUids) {
61
49
  }
62
50
  }
63
51
  }
64
-
65
52
  if (data.documentByUid !== undefined && acte.texteAdopteRef !== undefined) {
66
53
  const document = data.documentByUid[acte.texteAdopteRef];
67
-
68
54
  if (document !== undefined) {
69
55
  acte.texteAdopte = document;
70
56
  insertDocumentReferences(document, data, visitedUids);
71
57
  }
72
58
  }
73
-
74
59
  if (data.documentByUid !== undefined && acte.texteAssocieRef !== undefined) {
75
60
  const document = data.documentByUid[acte.texteAssocieRef];
76
-
77
61
  if (document !== undefined) {
78
62
  acte.texteAssocie = document;
79
63
  insertDocumentReferences(document, data, visitedUids);
80
64
  }
81
65
  }
82
-
83
66
  if (data.documentByUid !== undefined && acte.textesAssocies !== undefined) {
84
67
  for (const texteAssocie of acte.textesAssocies) {
85
68
  const document = data.documentByUid[texteAssocie.texteAssocieRef];
86
-
87
69
  if (document !== undefined) {
88
70
  texteAssocie.texteAssocie = document;
89
71
  insertDocumentReferences(document, data, visitedUids);
90
72
  }
91
73
  }
92
74
  }
93
-
94
75
  if (data.scrutinByUid !== undefined && acte.voteRefs !== undefined) {
95
76
  const scrutins = [];
96
-
97
77
  for (const voteRef of acte.voteRefs) {
98
78
  const scrutin = data.scrutinByUid[voteRef];
99
-
100
79
  if (scrutin !== undefined) {
101
80
  scrutins.push(scrutin);
102
81
  insertScrutinReferences(scrutin, data, visitedUids);
103
82
  }
104
83
  }
105
-
106
84
  acte.votes = scrutins;
107
85
  }
108
-
109
86
  for (const childActe of acte.actesLegislatifs || []) {
110
87
  insertActeLegislatifReferences(childActe, data, visitedUids);
111
88
  }
112
89
  }
113
-
114
90
  return acte;
115
91
  }
116
-
117
92
  export function insertActeurReferences(acteur, data, visitedUids) {
118
93
  if (!visitedUids.has(acteur.uid)) {
119
94
  visitedUids.add(acteur.uid);
120
-
121
95
  if (data.organeByUid !== undefined) {
122
96
  for (const mandat of acteur.mandats || []) {
123
97
  const organes = [];
124
-
125
98
  for (const organeRef of mandat.organesRefs) {
126
99
  const organe = data.organeByUid[organeRef];
127
-
128
100
  if (organe !== undefined) {
129
101
  organes.push(organe);
130
102
  insertOrganeReferences(organe, data, visitedUids);
131
103
  }
132
104
  }
133
-
134
105
  mandat.organes = organes;
135
106
  }
136
107
  }
137
108
  }
138
-
139
109
  return acteur;
140
110
  }
141
111
  export function insertAmendementReferences(amendement, data, visitedUids) {
@@ -143,167 +113,129 @@ export function insertAmendementReferences(amendement, data, visitedUids) {
143
113
  visitedUids.add(amendement.uid);
144
114
  const signataires = amendement.signataires;
145
115
  const auteur = signataires.auteur;
146
-
147
116
  if (data.acteurByUid !== undefined && auteur.acteurRef !== undefined) {
148
117
  const acteur = data.acteurByUid[auteur.acteurRef];
149
-
150
118
  if (acteur !== undefined) {
151
119
  auteur.acteur = acteur;
152
120
  insertActeurReferences(acteur, data, visitedUids);
153
121
  }
154
122
  }
155
-
156
123
  if (data.organeByUid !== undefined && auteur.auteurRapporteurOrganeRef !== undefined) {
157
124
  const auteurRapporteurOrgane = data.organeByUid[auteur.auteurRapporteurOrganeRef];
158
-
159
125
  if (auteurRapporteurOrgane !== undefined) {
160
126
  auteur.auteurRapporteurOrgane = auteurRapporteurOrgane;
161
127
  insertOrganeReferences(auteurRapporteurOrgane, data, visitedUids);
162
128
  }
163
129
  }
164
-
165
130
  if (data.organeByUid !== undefined && auteur.gouvernementRef !== undefined) {
166
131
  const gouvernement = data.organeByUid[auteur.gouvernementRef];
167
-
168
132
  if (gouvernement !== undefined) {
169
133
  auteur.gouvernement = gouvernement;
170
134
  insertOrganeReferences(gouvernement, data, visitedUids);
171
135
  }
172
136
  }
173
-
174
137
  if (data.organeByUid !== undefined && auteur.groupePolitiqueRef !== undefined) {
175
138
  const organe = data.organeByUid[auteur.groupePolitiqueRef];
176
-
177
139
  if (organe !== undefined) {
178
140
  auteur.groupePolitique = organe;
179
141
  insertOrganeReferences(organe, data, visitedUids);
180
142
  }
181
143
  }
182
-
183
144
  if (data.acteurByUid !== undefined) {
184
145
  const cosignatairesRefs = signataires.cosignatairesRefs;
185
-
186
146
  if (cosignatairesRefs !== undefined) {
187
147
  const cosignataires = [];
188
-
189
148
  for (const cosignataireRef of signataires.cosignatairesRefs || []) {
190
149
  const cosignataire = data.acteurByUid[cosignataireRef];
191
-
192
150
  if (cosignataire !== undefined) {
193
151
  cosignataires.push(cosignataire);
194
152
  insertActeurReferences(cosignataire, data, visitedUids);
195
153
  }
196
154
  }
197
-
198
155
  signataires.cosignataires = cosignataires;
199
156
  }
200
157
  }
201
158
  }
202
-
203
159
  return amendement;
204
160
  }
205
-
206
161
  function insertDivisionReferences(division, data, visitedUids) {
207
162
  for (const auteur of division.auteurs) {
208
163
  const acteurSummary = auteur.acteur;
209
-
210
164
  if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
211
165
  const acteur = data.acteurByUid[acteurSummary.acteurRef];
212
-
213
166
  if (acteur !== undefined) {
214
167
  acteurSummary.acteur = acteur;
215
168
  insertActeurReferences(acteur, data, visitedUids);
216
169
  }
217
170
  }
218
-
219
171
  if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
220
172
  const organe = data.organeByUid[auteur.organeRef];
221
-
222
173
  if (organe !== undefined) {
223
174
  auteur.organe = organe;
224
175
  insertOrganeReferences(organe, data, visitedUids);
225
176
  }
226
177
  }
227
178
  }
228
-
229
179
  if (data.dossierByUid !== undefined) {
230
180
  const dossier = data.dossierByUid[division.dossierRef];
231
-
232
181
  if (dossier !== undefined) {
233
182
  division.dossier = dossier;
234
183
  insertDossierReferences(dossier, data, visitedUids);
235
184
  }
236
185
  }
237
-
238
186
  for (const childDivision of division.divisions || []) {
239
187
  insertDivisionReferences(childDivision, data, visitedUids);
240
188
  }
241
-
242
189
  return division;
243
190
  }
244
-
245
191
  export function insertDocumentReferences(document, data, visitedUids) {
246
192
  if (!visitedUids.has(document.uid)) {
247
193
  visitedUids.add(document.uid);
248
-
249
194
  for (const auteur of document.auteurs) {
250
195
  const acteurSummary = auteur.acteur;
251
-
252
196
  if (data.acteurByUid !== undefined && acteurSummary !== undefined) {
253
197
  const acteur = data.acteurByUid[acteurSummary.acteurRef];
254
-
255
198
  if (acteur !== undefined) {
256
199
  acteurSummary.acteur = acteur;
257
200
  insertActeurReferences(acteur, data, visitedUids);
258
201
  }
259
202
  }
260
-
261
203
  if (data.organeByUid !== undefined && auteur.organeRef !== undefined) {
262
204
  const organe = data.organeByUid[auteur.organeRef];
263
-
264
205
  if (organe !== undefined) {
265
206
  auteur.organe = organe;
266
207
  insertOrganeReferences(organe, data, visitedUids);
267
208
  }
268
209
  }
269
210
  }
270
-
271
211
  if (data.dossierByUid !== undefined) {
272
212
  const dossier = data.dossierByUid[document.dossierRef];
273
-
274
213
  if (dossier !== undefined) {
275
214
  document.dossier = dossier;
276
215
  insertDossierReferences(dossier, data, visitedUids);
277
216
  }
278
217
  }
279
-
280
218
  for (const division of document.divisions || []) {
281
219
  insertDivisionReferences(division, data, visitedUids);
282
220
  }
283
221
  }
284
-
285
222
  return document;
286
223
  }
287
224
  export function insertDossierReferences(dossier, data, visitedUids) {
288
225
  if (!visitedUids.has(dossier.uid)) {
289
226
  visitedUids.add(dossier.uid);
290
-
291
227
  for (const acte of dossier.actesLegislatifs ?? []) {
292
228
  insertActeLegislatifReferences(acte, data, visitedUids);
293
229
  }
294
-
295
230
  const initiateur = dossier.initiateur;
296
-
297
231
  if (initiateur !== undefined) {
298
232
  if (data.acteurByUid !== undefined) {
299
233
  for (const acteurSummary of initiateur.acteurs || []) {
300
234
  const acteur = data.acteurByUid[acteurSummary.acteurRef];
301
-
302
235
  if (acteur !== undefined) {
303
236
  acteurSummary.acteur = acteur;
304
237
  insertActeurReferences(acteur, data, visitedUids);
305
238
  }
306
-
307
239
  if (acteur !== undefined && acteurSummary.mandatRef !== undefined) {
308
240
  for (const mandat of acteur.mandats || []) {
309
241
  if (mandat.uid === acteurSummary.mandatRef) {
@@ -314,10 +246,8 @@ export function insertDossierReferences(dossier, data, visitedUids) {
314
246
  }
315
247
  }
316
248
  }
317
-
318
249
  if (data.organeByUid !== undefined && initiateur.organeRef !== undefined) {
319
250
  const organe = data.organeByUid[initiateur.organeRef];
320
-
321
251
  if (organe !== undefined) {
322
252
  initiateur.organe = organe;
323
253
  insertOrganeReferences(organe, data, visitedUids);
@@ -325,22 +255,20 @@ export function insertDossierReferences(dossier, data, visitedUids) {
325
255
  }
326
256
  }
327
257
  }
328
-
329
258
  return dossier;
330
259
  }
331
260
  export function insertOrganeReferences(organe, data, visitedUids) {
332
261
  if (!visitedUids.has(organe.uid)) {
333
262
  visitedUids.add(organe.uid);
334
-
335
263
  if (data.organeByUid !== undefined && organe.organeParentRef !== undefined) {
336
264
  const organeParent = data.organeByUid[organe.organeParentRef];
337
-
338
265
  if (organeParent !== undefined) {
339
266
  organe.organeParent = organeParent;
340
267
  insertOrganeReferences(organeParent, data, visitedUids);
341
268
  }
342
- } // TODO
269
+ }
343
270
 
271
+ // TODO
344
272
  }
345
273
 
346
274
  return organe;
@@ -349,25 +277,20 @@ export function insertReunionReferences(reunion, data, visitedUids) {
349
277
  if (!visitedUids.has(reunion.uid)) {
350
278
  visitedUids.add(reunion.uid);
351
279
  const demandeurs = reunion.demandeurs;
352
-
353
280
  if (demandeurs !== undefined) {
354
281
  if (data.acteurByUid !== undefined) {
355
282
  for (const acteurSummary of demandeurs.acteurs || []) {
356
283
  const acteur = data.acteurByUid[acteurSummary.acteurRef];
357
-
358
284
  if (acteur !== undefined) {
359
285
  acteurSummary.acteur = acteur;
360
286
  insertActeurReferences(acteur, data, visitedUids);
361
287
  }
362
288
  }
363
289
  }
364
-
365
290
  if (data.organeByUid !== undefined) {
366
291
  const organeSummary = demandeurs.organe;
367
-
368
292
  if (organeSummary !== undefined) {
369
293
  const organe = data.organeByUid[organeSummary.organeRef];
370
-
371
294
  if (organe !== undefined) {
372
295
  organeSummary.organe = organe;
373
296
  insertOrganeReferences(organe, data, visitedUids);
@@ -375,23 +298,18 @@ export function insertReunionReferences(reunion, data, visitedUids) {
375
298
  }
376
299
  }
377
300
  }
378
-
379
301
  if (data.organeByUid !== undefined && reunion.organeReuniRef !== undefined) {
380
302
  const organeReuni = data.organeByUid[reunion.organeReuniRef];
381
-
382
303
  if (organeReuni !== undefined) {
383
304
  reunion.organeReuni = organeReuni;
384
305
  insertOrganeReferences(organeReuni, data, visitedUids);
385
306
  }
386
307
  }
387
-
388
308
  if (data.acteurByUid !== undefined) {
389
309
  const participants = reunion.participants;
390
-
391
310
  if (participants !== undefined) {
392
311
  for (const participantInterne of participants.participantsInternes || []) {
393
312
  const acteur = data.acteurByUid[participantInterne.acteurRef];
394
-
395
313
  if (acteur !== undefined) {
396
314
  participantInterne.acteur = acteur;
397
315
  insertActeurReferences(acteur, data, visitedUids);
@@ -400,14 +318,15 @@ export function insertReunionReferences(reunion, data, visitedUids) {
400
318
  }
401
319
  }
402
320
  }
403
-
404
321
  return reunion;
405
322
  }
406
323
  export function insertScrutinReferences(scrutin, _data, visitedUids) {
407
324
  if (!visitedUids.has(scrutin.uid)) {
408
- visitedUids.add(scrutin.uid); // TODO
325
+ visitedUids.add(scrutin.uid);
326
+
327
+ // TODO
409
328
  }
410
329
 
411
330
  return scrutin;
412
331
  }
413
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMiLCJhY3RlIiwiZGF0YSIsInZpc2l0ZWRVaWRzIiwiaGFzIiwidWlkIiwiYWRkIiwiZG9jdW1lbnRCeVVpZCIsInVuZGVmaW5lZCIsImRlcG90SW5pdGlhbExlY3R1cmVEZWZpbml0aXZlUmVmIiwiZG9jdW1lbnQiLCJkZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZSIsImluc2VydERvY3VtZW50UmVmZXJlbmNlcyIsIm9yZ2FuZUJ5VWlkIiwib3JnYW5lUmVmIiwib3JnYW5lIiwiaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyIsInByb3ZlbmFuY2VSZWYiLCJwcm92ZW5hbmNlIiwiYWN0ZXVyQnlVaWQiLCJyYXBwb3J0ZXVycyIsInJhcHBvcnRldXIiLCJhY3RldXIiLCJhY3RldXJSZWYiLCJpbnNlcnRBY3RldXJSZWZlcmVuY2VzIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvblJlZiIsInJldW5pb24iLCJpbnNlcnRSZXVuaW9uUmVmZXJlbmNlcyIsIm9kalJlZiIsIm9kaiIsInBvaW50c09kaiIsInBvaW50T2RqIiwidGV4dGVBZG9wdGVSZWYiLCJ0ZXh0ZUFkb3B0ZSIsInRleHRlQXNzb2NpZVJlZiIsInRleHRlQXNzb2NpZSIsInRleHRlc0Fzc29jaWVzIiwic2NydXRpbkJ5VWlkIiwidm90ZVJlZnMiLCJzY3J1dGlucyIsInZvdGVSZWYiLCJzY3J1dGluIiwicHVzaCIsImluc2VydFNjcnV0aW5SZWZlcmVuY2VzIiwidm90ZXMiLCJjaGlsZEFjdGUiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwibWFuZGF0IiwibWFuZGF0cyIsIm9yZ2FuZXMiLCJvcmdhbmVzUmVmcyIsImluc2VydEFtZW5kZW1lbnRSZWZlcmVuY2VzIiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZVJlZiIsImF1dGV1clJhcHBvcnRldXJPcmdhbmUiLCJnb3V2ZXJuZW1lbnRSZWYiLCJnb3V2ZXJuZW1lbnQiLCJncm91cGVQb2xpdGlxdWVSZWYiLCJncm91cGVQb2xpdGlxdWUiLCJjb3NpZ25hdGFpcmVzUmVmcyIsImNvc2lnbmF0YWlyZXMiLCJjb3NpZ25hdGFpcmVSZWYiLCJjb3NpZ25hdGFpcmUiLCJpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMiLCJkaXZpc2lvbiIsImF1dGV1cnMiLCJhY3RldXJTdW1tYXJ5IiwiZG9zc2llckJ5VWlkIiwiZG9zc2llciIsImRvc3NpZXJSZWYiLCJpbnNlcnREb3NzaWVyUmVmZXJlbmNlcyIsImNoaWxkRGl2aXNpb24iLCJkaXZpc2lvbnMiLCJpbml0aWF0ZXVyIiwiYWN0ZXVycyIsIm1hbmRhdFJlZiIsIm9yZ2FuZVBhcmVudFJlZiIsIm9yZ2FuZVBhcmVudCIsImRlbWFuZGV1cnMiLCJvcmdhbmVTdW1tYXJ5Iiwib3JnYW5lUmV1bmlSZWYiLCJvcmdhbmVSZXVuaSIsInBhcnRpY2lwYW50cyIsInBhcnRpY2lwYW50SW50ZXJuZSIsInBhcnRpY2lwYW50c0ludGVybmVzIiwiX2RhdGEiXSwic291cmNlcyI6WyIuLi9zcmMvaW5zZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGV1ciwgT3JnYW5lIH0gZnJvbSBcIi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IFJldW5pb24gfSBmcm9tIFwiLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBBY3RlTGVnaXNsYXRpZixcbiAgRGl2aXNpb24sXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgU2NydXRpbiB9IGZyb20gXCIuL3R5cGVzL3NjcnV0aW5zXCJcblxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXREYXRhIHtcbiAgcmVhZG9ubHkgYWN0ZXVyQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZD86IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH1cbiAgcmVhZG9ubHkgZG9zc2llckJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfVxuICByZWFkb25seSBzY3J1dGluQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoXG4gIGFjdGU6IEFjdGVMZWdpc2xhdGlmLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoYWN0ZS51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGFjdGUudWlkKVxuXG4gICAgaWYgKFxuICAgICAgZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhLmRvY3VtZW50QnlVaWRbYWN0ZS5kZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmUgPSBkb2N1bWVudFxuICAgICAgICBpbnNlcnREb2N1bWVudFJlZmVyZW5jZXMoZG9jdW1lbnQsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUub3JnYW5lUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYWN0ZS5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucHJvdmVuYW5jZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2FjdGUucHJvdmVuYW5jZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RlLnByb3ZlbmFuY2UgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucmFwcG9ydGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCByYXBwb3J0ZXVyIG9mIGFjdGUucmFwcG9ydGV1cnMpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFtyYXBwb3J0ZXVyLmFjdGV1clJlZl1cbiAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwcG9ydGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEucmV1bmlvbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS5yZXVuaW9uUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJldW5pb24gPSBkYXRhLnJldW5pb25CeVVpZFthY3RlLnJldW5pb25SZWZdXG4gICAgICBpZiAocmV1bmlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUucmV1bmlvbiA9IHJldW5pb25cbiAgICAgICAgaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMocmV1bmlvbiwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIGlmIChhY3RlLm9kalJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQgJiYgb2RqLnBvaW50c09kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGopIHtcbiAgICAgICAgICAgICAgaWYgKHBvaW50T2RqLnVpZCA9PT0gYWN0ZS5vZGpSZWYpIHtcbiAgICAgICAgICAgICAgICBhY3RlLm9kaiA9IHBvaW50T2RqXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS50ZXh0ZUFkb3B0ZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQWRvcHRlUmVmXVxuICAgICAgaWYgKGRvY3VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS50ZXh0ZUFkb3B0ZSA9IGRvY3VtZW50XG4gICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhY3RlLnRleHRlQXNzb2NpZVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQXNzb2NpZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUudGV4dGVBc3NvY2llID0gZG9jdW1lbnRcbiAgICAgICAgaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKGRvY3VtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUudGV4dGVzQXNzb2NpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB0ZXh0ZUFzc29jaWUgb2YgYWN0ZS50ZXh0ZXNBc3NvY2llcykge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFt0ZXh0ZUFzc29jaWUudGV4dGVBc3NvY2llUmVmXVxuICAgICAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRleHRlQXNzb2NpZS50ZXh0ZUFzc29jaWUgPSBkb2N1bWVudFxuICAgICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuc2NydXRpbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS52b3RlUmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY3J1dGlucyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHZvdGVSZWYgb2YgYWN0ZS52b3RlUmVmcykge1xuICAgICAgICBjb25zdCBzY3J1dGluID0gZGF0YS5zY3J1dGluQnlVaWRbdm90ZVJlZl1cbiAgICAgICAgaWYgKHNjcnV0aW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5zLnB1c2goc2NydXRpbilcbiAgICAgICAgICBpbnNlcnRTY3J1dGluUmVmZXJlbmNlcyhzY3J1dGluLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWN0ZS52b3RlcyA9IHNjcnV0aW5zXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZEFjdGUgb2YgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzIHx8IFtdKSB7XG4gICAgICBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoY2hpbGRBY3RlLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWN0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhcbiAgYWN0ZXVyOiBBY3RldXIsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhY3RldXIudWlkKSkge1xuICAgIHZpc2l0ZWRVaWRzLmFkZChhY3RldXIudWlkKVxuXG4gICAgaWYgKGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBtYW5kYXQgb2YgYWN0ZXVyLm1hbmRhdHMgfHwgW10pIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3Qgb3JnYW5lUmVmIG9mIG1hbmRhdC5vcmdhbmVzUmVmcykge1xuICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbb3JnYW5lUmVmXVxuICAgICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3JnYW5lcy5wdXNoKG9yZ2FuZSlcbiAgICAgICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWFuZGF0Lm9yZ2FuZXMgPSBvcmdhbmVzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFjdGV1clxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QW1lbmRlbWVudFJlZmVyZW5jZXMoXG4gIGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQoYW1lbmRlbWVudC51aWQpXG5cbiAgICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAgICBjb25zdCBhdXRldXIgPSBzaWduYXRhaXJlcy5hdXRldXJcbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5hY3RldXJSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthdXRldXIuYWN0ZXVyUmVmXVxuICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGF1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGF1dGV1clJhcHBvcnRldXJPcmdhbmUgPVxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmXVxuICAgICAgaWYgKGF1dGV1clJhcHBvcnRldXJPcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZSA9IGF1dGV1clJhcHBvcnRldXJPcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhhdXRldXJSYXBwb3J0ZXVyT3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ291dmVybmVtZW50UmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGdvdXZlcm5lbWVudCA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdvdXZlcm5lbWVudFJlZl1cbiAgICAgIGlmIChnb3V2ZXJuZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ291dmVybmVtZW50ID0gZ291dmVybmVtZW50XG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoZ291dmVybmVtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdyb3VwZVBvbGl0aXF1ZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlID0gb3JnYW5lXG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29zaWduYXRhaXJlc1JlZnMgPSBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmc1xuICAgICAgaWYgKGNvc2lnbmF0YWlyZXNSZWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY29zaWduYXRhaXJlcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3QgY29zaWduYXRhaXJlUmVmIG9mIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgY29zaWduYXRhaXJlID0gZGF0YS5hY3RldXJCeVVpZFtjb3NpZ25hdGFpcmVSZWZdXG4gICAgICAgICAgaWYgKGNvc2lnbmF0YWlyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb3NpZ25hdGFpcmVzLnB1c2goY29zaWduYXRhaXJlKVxuICAgICAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhjb3NpZ25hdGFpcmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzID0gY29zaWduYXRhaXJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbWVuZGVtZW50XG59XG5cbmZ1bmN0aW9uIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhcbiAgZGl2aXNpb246IERpdmlzaW9uLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgZm9yIChjb25zdCBhdXRldXIgb2YgZGl2aXNpb24uYXV0ZXVycykge1xuICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RldXJTdW1tYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbYWN0ZXVyU3VtbWFyeS5hY3RldXJSZWZdXG4gICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYXV0ZXVyLm9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXV0ZXVyLm9yZ2FuZSA9IG9yZ2FuZVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuZG9zc2llckJ5VWlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkb3NzaWVyID0gZGF0YS5kb3NzaWVyQnlVaWRbZGl2aXNpb24uZG9zc2llclJlZl1cbiAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkaXZpc2lvbi5kb3NzaWVyID0gZG9zc2llclxuICAgICAgaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoZG9zc2llciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZERpdmlzaW9uIG9mIGRpdmlzaW9uLmRpdmlzaW9ucyB8fCBbXSkge1xuICAgIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhjaGlsZERpdmlzaW9uLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgfVxuXG4gIHJldHVybiBkaXZpc2lvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKFxuICBkb2N1bWVudDogRG9jdW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhkb2N1bWVudC51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvY3VtZW50LnVpZClcblxuICAgIGZvciAoY29uc3QgYXV0ZXVyIG9mIGRvY3VtZW50LmF1dGV1cnMpIHtcbiAgICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJTdW1tYXJ5LmFjdGV1ciA9IGFjdGV1clxuICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGF1dGV1ci5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5kb3NzaWVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGRhdGEuZG9zc2llckJ5VWlkW2RvY3VtZW50LmRvc3NpZXJSZWZdXG4gICAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmRvc3NpZXIgPSBkb3NzaWVyXG4gICAgICAgIGluc2VydERvc3NpZXJSZWZlcmVuY2VzKGRvc3NpZXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGl2aXNpb24gb2YgZG9jdW1lbnQuZGl2aXNpb25zIHx8IFtdKSB7XG4gICAgICBpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMoZGl2aXNpb24sIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoXG4gIGRvc3NpZXI6IERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoZG9zc2llci51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvc3NpZXIudWlkKVxuXG4gICAgZm9yIChjb25zdCBhY3RlIG9mIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyA/PyBbXSkge1xuICAgICAgaW5zZXJ0QWN0ZUxlZ2lzbGF0aWZSZWZlcmVuY2VzKGFjdGUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYXRldXIgPSBkb3NzaWVyLmluaXRpYXRldXJcbiAgICBpZiAoaW5pdGlhdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3VtbWFyeSBvZiBpbml0aWF0ZXVyLmFjdGV1cnMgfHwgW10pIHtcbiAgICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICAgIGlmIChhY3RldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkubWFuZGF0UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0IG9mIGFjdGV1ci5tYW5kYXRzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIGlmIChtYW5kYXQudWlkID09PSBhY3RldXJTdW1tYXJ5Lm1hbmRhdFJlZikge1xuICAgICAgICAgICAgICAgIGFjdGV1clN1bW1hcnkubWFuZGF0ID0gbWFuZGF0XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgaW5pdGlhdGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbaW5pdGlhdGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluaXRpYXRldXIub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvc3NpZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoXG4gIG9yZ2FuZTogT3JnYW5lLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMob3JnYW5lLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQob3JnYW5lLnVpZClcblxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudFJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVQYXJlbnQgPSBkYXRhLm9yZ2FuZUJ5VWlkW29yZ2FuZS5vcmdhbmVQYXJlbnRSZWZdXG4gICAgICBpZiAob3JnYW5lUGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudCA9IG9yZ2FuZVBhcmVudFxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVBhcmVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIG9yZ2FuZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMoXG4gIHJldW5pb246IFJldW5pb24sXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhyZXVuaW9uLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQocmV1bmlvbi51aWQpXG5cbiAgICBjb25zdCBkZW1hbmRldXJzID0gcmV1bmlvbi5kZW1hbmRldXJzXG4gICAgaWYgKGRlbWFuZGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clN1bW1hcnkgb2YgZGVtYW5kZXVycy5hY3RldXJzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthY3RldXJTdW1tYXJ5LmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjdGV1clN1bW1hcnkuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZVN1bW1hcnkgPSBkZW1hbmRldXJzLm9yZ2FuZVxuICAgICAgICBpZiAob3JnYW5lU3VtbWFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFtvcmdhbmVTdW1tYXJ5Lm9yZ2FuZVJlZl1cbiAgICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9yZ2FuZVN1bW1hcnkub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmV1bmlvbi5vcmdhbmVSZXVuaVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVSZXVuaSA9IGRhdGEub3JnYW5lQnlVaWRbcmV1bmlvbi5vcmdhbmVSZXVuaVJlZl1cbiAgICAgIGlmIChvcmdhbmVSZXVuaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldW5pb24ub3JnYW5lUmV1bmkgPSBvcmdhbmVSZXVuaVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVJldW5pLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gcmV1bmlvbi5wYXJ0aWNpcGFudHNcbiAgICAgIGlmIChwYXJ0aWNpcGFudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnRpY2lwYW50SW50ZXJuZSBvZiBwYXJ0aWNpcGFudHMucGFydGljaXBhbnRzSW50ZXJuZXMgfHxcbiAgICAgICAgICBbXSkge1xuICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbcGFydGljaXBhbnRJbnRlcm5lLmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SW50ZXJuZS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV1bmlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U2NydXRpblJlZmVyZW5jZXMoXG4gIHNjcnV0aW46IFNjcnV0aW4sXG4gIF9kYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKHNjcnV0aW4udWlkKVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIHNjcnV0aW5cbn1cbiJdLCJtYXBwaW5ncyI6IkFBcUJBLFNBQVNBLDhCQUFULENBQ0VDLElBREYsRUFFRUMsSUFGRixFQUdFQyxXQUhGLEVBSUU7RUFDQSxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsR0FBWixDQUFnQkgsSUFBSSxDQUFDSSxHQUFyQixDQUFMLEVBQWdDO0lBQzlCRixXQUFXLENBQUNHLEdBQVosQ0FBZ0JMLElBQUksQ0FBQ0ksR0FBckI7O0lBRUEsSUFDRUgsSUFBSSxDQUFDSyxhQUFMLEtBQXVCQyxTQUF2QixJQUNBUCxJQUFJLENBQUNRLGdDQUFMLEtBQTBDRCxTQUY1QyxFQUdFO01BQ0EsTUFBTUUsUUFBUSxHQUFHUixJQUFJLENBQUNLLGFBQUwsQ0FBbUJOLElBQUksQ0FBQ1EsZ0NBQXhCLENBQWpCOztNQUNBLElBQUlDLFFBQVEsS0FBS0YsU0FBakIsRUFBNEI7UUFDMUJQLElBQUksQ0FBQ1UsNkJBQUwsR0FBcUNELFFBQXJDO1FBQ0FFLHdCQUF3QixDQUFDRixRQUFELEVBQVdSLElBQVgsRUFBaUJDLFdBQWpCLENBQXhCO01BQ0Q7SUFDRjs7SUFDRCxJQUFJRCxJQUFJLENBQUNXLFdBQUwsS0FBcUJMLFNBQXJCLElBQWtDUCxJQUFJLENBQUNhLFNBQUwsS0FBbUJOLFNBQXpELEVBQW9FO01BQ2xFLE1BQU1PLE1BQU0sR0FBR2IsSUFBSSxDQUFDVyxXQUFMLENBQWlCWixJQUFJLENBQUNhLFNBQXRCLENBQWY7O01BQ0EsSUFBSUMsTUFBTSxLQUFLUCxTQUFmLEVBQTBCO1FBQ3hCUCxJQUFJLENBQUNjLE1BQUwsR0FBY0EsTUFBZDtRQUNBQyxzQkFBc0IsQ0FBQ0QsTUFBRCxFQUFTYixJQUFULEVBQWVDLFdBQWYsQ0FBdEI7TUFDRDtJQUNGOztJQUNELElBQUlELElBQUksQ0FBQ1csV0FBTCxLQUFxQkws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
332
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMiLCJhY3RlIiwiZGF0YSIsInZpc2l0ZWRVaWRzIiwiaGFzIiwidWlkIiwiYWRkIiwiZG9jdW1lbnRCeVVpZCIsInVuZGVmaW5lZCIsImRlcG90SW5pdGlhbExlY3R1cmVEZWZpbml0aXZlUmVmIiwiZG9jdW1lbnQiLCJkZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZSIsImluc2VydERvY3VtZW50UmVmZXJlbmNlcyIsIm9yZ2FuZUJ5VWlkIiwib3JnYW5lUmVmIiwib3JnYW5lIiwiaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyIsInByb3ZlbmFuY2VSZWYiLCJwcm92ZW5hbmNlIiwiYWN0ZXVyQnlVaWQiLCJyYXBwb3J0ZXVycyIsInJhcHBvcnRldXIiLCJhY3RldXIiLCJhY3RldXJSZWYiLCJpbnNlcnRBY3RldXJSZWZlcmVuY2VzIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvblJlZiIsInJldW5pb24iLCJpbnNlcnRSZXVuaW9uUmVmZXJlbmNlcyIsIm9kalJlZiIsIm9kaiIsInBvaW50c09kaiIsInBvaW50T2RqIiwidGV4dGVBZG9wdGVSZWYiLCJ0ZXh0ZUFkb3B0ZSIsInRleHRlQXNzb2NpZVJlZiIsInRleHRlQXNzb2NpZSIsInRleHRlc0Fzc29jaWVzIiwic2NydXRpbkJ5VWlkIiwidm90ZVJlZnMiLCJzY3J1dGlucyIsInZvdGVSZWYiLCJzY3J1dGluIiwicHVzaCIsImluc2VydFNjcnV0aW5SZWZlcmVuY2VzIiwidm90ZXMiLCJjaGlsZEFjdGUiLCJhY3Rlc0xlZ2lzbGF0aWZzIiwibWFuZGF0IiwibWFuZGF0cyIsIm9yZ2FuZXMiLCJvcmdhbmVzUmVmcyIsImluc2VydEFtZW5kZW1lbnRSZWZlcmVuY2VzIiwiYW1lbmRlbWVudCIsInNpZ25hdGFpcmVzIiwiYXV0ZXVyIiwiYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZVJlZiIsImF1dGV1clJhcHBvcnRldXJPcmdhbmUiLCJnb3V2ZXJuZW1lbnRSZWYiLCJnb3V2ZXJuZW1lbnQiLCJncm91cGVQb2xpdGlxdWVSZWYiLCJncm91cGVQb2xpdGlxdWUiLCJjb3NpZ25hdGFpcmVzUmVmcyIsImNvc2lnbmF0YWlyZXMiLCJjb3NpZ25hdGFpcmVSZWYiLCJjb3NpZ25hdGFpcmUiLCJpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMiLCJkaXZpc2lvbiIsImF1dGV1cnMiLCJhY3RldXJTdW1tYXJ5IiwiZG9zc2llckJ5VWlkIiwiZG9zc2llciIsImRvc3NpZXJSZWYiLCJpbnNlcnREb3NzaWVyUmVmZXJlbmNlcyIsImNoaWxkRGl2aXNpb24iLCJkaXZpc2lvbnMiLCJpbml0aWF0ZXVyIiwiYWN0ZXVycyIsIm1hbmRhdFJlZiIsIm9yZ2FuZVBhcmVudFJlZiIsIm9yZ2FuZVBhcmVudCIsImRlbWFuZGV1cnMiLCJvcmdhbmVTdW1tYXJ5Iiwib3JnYW5lUmV1bmlSZWYiLCJvcmdhbmVSZXVuaSIsInBhcnRpY2lwYW50cyIsInBhcnRpY2lwYW50SW50ZXJuZSIsInBhcnRpY2lwYW50c0ludGVybmVzIiwiX2RhdGEiXSwic291cmNlcyI6WyIuLi9zcmMvaW5zZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGV1ciwgT3JnYW5lIH0gZnJvbSBcIi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IFJldW5pb24gfSBmcm9tIFwiLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQgfSBmcm9tIFwiLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBBY3RlTGVnaXNsYXRpZixcbiAgRGl2aXNpb24sXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgU2NydXRpbiB9IGZyb20gXCIuL3R5cGVzL3NjcnV0aW5zXCJcblxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXREYXRhIHtcbiAgcmVhZG9ubHkgYWN0ZXVyQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9XG4gIHJlYWRvbmx5IGFtZW5kZW1lbnRCeVVpZD86IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH1cbiAgcmVhZG9ubHkgZG9zc2llckJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkPzogeyBbdWlkOiBzdHJpbmddOiBPcmdhbmUgfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFJldW5pb24gfVxuICByZWFkb25seSBzY3J1dGluQnlVaWQ/OiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoXG4gIGFjdGU6IEFjdGVMZWdpc2xhdGlmLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoYWN0ZS51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGFjdGUudWlkKVxuXG4gICAgaWYgKFxuICAgICAgZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBkYXRhLmRvY3VtZW50QnlVaWRbYWN0ZS5kZXBvdEluaXRpYWxMZWN0dXJlRGVmaW5pdGl2ZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUuZGVwb3RJbml0aWFsTGVjdHVyZURlZmluaXRpdmUgPSBkb2N1bWVudFxuICAgICAgICBpbnNlcnREb2N1bWVudFJlZmVyZW5jZXMoZG9jdW1lbnQsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUub3JnYW5lUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYWN0ZS5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucHJvdmVuYW5jZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2FjdGUucHJvdmVuYW5jZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhY3RlLnByb3ZlbmFuY2UgPSBvcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUucmFwcG9ydGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCByYXBwb3J0ZXVyIG9mIGFjdGUucmFwcG9ydGV1cnMpIHtcbiAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFtyYXBwb3J0ZXVyLmFjdGV1clJlZl1cbiAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwcG9ydGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEucmV1bmlvbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS5yZXVuaW9uUmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJldW5pb24gPSBkYXRhLnJldW5pb25CeVVpZFthY3RlLnJldW5pb25SZWZdXG4gICAgICBpZiAocmV1bmlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUucmV1bmlvbiA9IHJldW5pb25cbiAgICAgICAgaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMocmV1bmlvbiwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIGlmIChhY3RlLm9kalJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb2RqID0gcmV1bmlvbi5vZGpcbiAgICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQgJiYgb2RqLnBvaW50c09kaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGopIHtcbiAgICAgICAgICAgICAgaWYgKHBvaW50T2RqLnVpZCA9PT0gYWN0ZS5vZGpSZWYpIHtcbiAgICAgICAgICAgICAgICBhY3RlLm9kaiA9IHBvaW50T2RqXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0YS5kb2N1bWVudEJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS50ZXh0ZUFkb3B0ZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQWRvcHRlUmVmXVxuICAgICAgaWYgKGRvY3VtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZS50ZXh0ZUFkb3B0ZSA9IGRvY3VtZW50XG4gICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhY3RlLnRleHRlQXNzb2NpZVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFthY3RlLnRleHRlQXNzb2NpZVJlZl1cbiAgICAgIGlmIChkb2N1bWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGUudGV4dGVBc3NvY2llID0gZG9jdW1lbnRcbiAgICAgICAgaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKGRvY3VtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuZG9jdW1lbnRCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGUudGV4dGVzQXNzb2NpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCB0ZXh0ZUFzc29jaWUgb2YgYWN0ZS50ZXh0ZXNBc3NvY2llcykge1xuICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRhdGEuZG9jdW1lbnRCeVVpZFt0ZXh0ZUFzc29jaWUudGV4dGVBc3NvY2llUmVmXVxuICAgICAgICBpZiAoZG9jdW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRleHRlQXNzb2NpZS50ZXh0ZUFzc29jaWUgPSBkb2N1bWVudFxuICAgICAgICAgIGluc2VydERvY3VtZW50UmVmZXJlbmNlcyhkb2N1bWVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuc2NydXRpbkJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYWN0ZS52b3RlUmVmcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzY3J1dGlucyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHZvdGVSZWYgb2YgYWN0ZS52b3RlUmVmcykge1xuICAgICAgICBjb25zdCBzY3J1dGluID0gZGF0YS5zY3J1dGluQnlVaWRbdm90ZVJlZl1cbiAgICAgICAgaWYgKHNjcnV0aW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5zLnB1c2goc2NydXRpbilcbiAgICAgICAgICBpbnNlcnRTY3J1dGluUmVmZXJlbmNlcyhzY3J1dGluLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWN0ZS52b3RlcyA9IHNjcnV0aW5zXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZEFjdGUgb2YgYWN0ZS5hY3Rlc0xlZ2lzbGF0aWZzIHx8IFtdKSB7XG4gICAgICBpbnNlcnRBY3RlTGVnaXNsYXRpZlJlZmVyZW5jZXMoY2hpbGRBY3RlLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYWN0ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhcbiAgYWN0ZXVyOiBBY3RldXIsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhY3RldXIudWlkKSkge1xuICAgIHZpc2l0ZWRVaWRzLmFkZChhY3RldXIudWlkKVxuXG4gICAgaWYgKGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBtYW5kYXQgb2YgYWN0ZXVyLm1hbmRhdHMgfHwgW10pIHtcbiAgICAgICAgY29uc3Qgb3JnYW5lcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3Qgb3JnYW5lUmVmIG9mIG1hbmRhdC5vcmdhbmVzUmVmcykge1xuICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbb3JnYW5lUmVmXVxuICAgICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb3JnYW5lcy5wdXNoKG9yZ2FuZSlcbiAgICAgICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWFuZGF0Lm9yZ2FuZXMgPSBvcmdhbmVzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFjdGV1clxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QW1lbmRlbWVudFJlZmVyZW5jZXMoXG4gIGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhhbWVuZGVtZW50LnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQoYW1lbmRlbWVudC51aWQpXG5cbiAgICBjb25zdCBzaWduYXRhaXJlcyA9IGFtZW5kZW1lbnQuc2lnbmF0YWlyZXNcbiAgICBjb25zdCBhdXRldXIgPSBzaWduYXRhaXJlcy5hdXRldXJcbiAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5hY3RldXJSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthdXRldXIuYWN0ZXVyUmVmXVxuICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGF1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGF1dGV1clJhcHBvcnRldXJPcmdhbmUgPVxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5hdXRldXJSYXBwb3J0ZXVyT3JnYW5lUmVmXVxuICAgICAgaWYgKGF1dGV1clJhcHBvcnRldXJPcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuYXV0ZXVyUmFwcG9ydGV1ck9yZ2FuZSA9IGF1dGV1clJhcHBvcnRldXJPcmdhbmVcbiAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhhdXRldXJSYXBwb3J0ZXVyT3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ291dmVybmVtZW50UmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IGdvdXZlcm5lbWVudCA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdvdXZlcm5lbWVudFJlZl1cbiAgICAgIGlmIChnb3V2ZXJuZW1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ291dmVybmVtZW50ID0gZ291dmVybmVtZW50XG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoZ291dmVybmVtZW50LCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlUmVmICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbYXV0ZXVyLmdyb3VwZVBvbGl0aXF1ZVJlZl1cbiAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdXRldXIuZ3JvdXBlUG9saXRpcXVlID0gb3JnYW5lXG4gICAgICAgIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMob3JnYW5lLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY29zaWduYXRhaXJlc1JlZnMgPSBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzUmVmc1xuICAgICAgaWYgKGNvc2lnbmF0YWlyZXNSZWZzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgY29zaWduYXRhaXJlcyA9IFtdXG4gICAgICAgIGZvciAoY29uc3QgY29zaWduYXRhaXJlUmVmIG9mIHNpZ25hdGFpcmVzLmNvc2lnbmF0YWlyZXNSZWZzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgY29zaWduYXRhaXJlID0gZGF0YS5hY3RldXJCeVVpZFtjb3NpZ25hdGFpcmVSZWZdXG4gICAgICAgICAgaWYgKGNvc2lnbmF0YWlyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb3NpZ25hdGFpcmVzLnB1c2goY29zaWduYXRhaXJlKVxuICAgICAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhjb3NpZ25hdGFpcmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzaWduYXRhaXJlcy5jb3NpZ25hdGFpcmVzID0gY29zaWduYXRhaXJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbWVuZGVtZW50XG59XG5cbmZ1bmN0aW9uIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhcbiAgZGl2aXNpb246IERpdmlzaW9uLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgZm9yIChjb25zdCBhdXRldXIgb2YgZGl2aXNpb24uYXV0ZXVycykge1xuICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCAmJiBhY3RldXJTdW1tYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbYWN0ZXVyU3VtbWFyeS5hY3RldXJSZWZdXG4gICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgaW5zZXJ0QWN0ZXVyUmVmZXJlbmNlcyhhY3RldXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiYgYXV0ZXVyLm9yZ2FuZVJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXV0ZXVyLm9yZ2FuZSA9IG9yZ2FuZVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuZG9zc2llckJ5VWlkICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkb3NzaWVyID0gZGF0YS5kb3NzaWVyQnlVaWRbZGl2aXNpb24uZG9zc2llclJlZl1cbiAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkaXZpc2lvbi5kb3NzaWVyID0gZG9zc2llclxuICAgICAgaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoZG9zc2llciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGlsZERpdmlzaW9uIG9mIGRpdmlzaW9uLmRpdmlzaW9ucyB8fCBbXSkge1xuICAgIGluc2VydERpdmlzaW9uUmVmZXJlbmNlcyhjaGlsZERpdmlzaW9uLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgfVxuXG4gIHJldHVybiBkaXZpc2lvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9jdW1lbnRSZWZlcmVuY2VzKFxuICBkb2N1bWVudDogRG9jdW1lbnQsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhkb2N1bWVudC51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvY3VtZW50LnVpZClcblxuICAgIGZvciAoY29uc3QgYXV0ZXVyIG9mIGRvY3VtZW50LmF1dGV1cnMpIHtcbiAgICAgIGNvbnN0IGFjdGV1clN1bW1hcnkgPSBhdXRldXIuYWN0ZXVyXG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhY3RldXJTdW1tYXJ5LmFjdGV1ciA9IGFjdGV1clxuICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkICYmIGF1dGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcmdhbmUgPSBkYXRhLm9yZ2FuZUJ5VWlkW2F1dGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGF1dGV1ci5vcmdhbmUgPSBvcmdhbmVcbiAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGF0YS5kb3NzaWVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZG9zc2llciA9IGRhdGEuZG9zc2llckJ5VWlkW2RvY3VtZW50LmRvc3NpZXJSZWZdXG4gICAgICBpZiAoZG9zc2llciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmRvc3NpZXIgPSBkb3NzaWVyXG4gICAgICAgIGluc2VydERvc3NpZXJSZWZlcmVuY2VzKGRvc3NpZXIsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGl2aXNpb24gb2YgZG9jdW1lbnQuZGl2aXNpb25zIHx8IFtdKSB7XG4gICAgICBpbnNlcnREaXZpc2lvblJlZmVyZW5jZXMoZGl2aXNpb24sIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb2N1bWVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0RG9zc2llclJlZmVyZW5jZXMoXG4gIGRvc3NpZXI6IERvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoZG9zc2llci51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKGRvc3NpZXIudWlkKVxuXG4gICAgZm9yIChjb25zdCBhY3RlIG9mIGRvc3NpZXIuYWN0ZXNMZWdpc2xhdGlmcyA/PyBbXSkge1xuICAgICAgaW5zZXJ0QWN0ZUxlZ2lzbGF0aWZSZWZlcmVuY2VzKGFjdGUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYXRldXIgPSBkb3NzaWVyLmluaXRpYXRldXJcbiAgICBpZiAoaW5pdGlhdGV1ciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZGF0YS5hY3RldXJCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3VtbWFyeSBvZiBpbml0aWF0ZXVyLmFjdGV1cnMgfHwgW10pIHtcbiAgICAgICAgICBjb25zdCBhY3RldXIgPSBkYXRhLmFjdGV1ckJ5VWlkW2FjdGV1clN1bW1hcnkuYWN0ZXVyUmVmXVxuICAgICAgICAgIGlmIChhY3RldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWN0ZXVyU3VtbWFyeS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdGV1ciAhPT0gdW5kZWZpbmVkICYmIGFjdGV1clN1bW1hcnkubWFuZGF0UmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0IG9mIGFjdGV1ci5tYW5kYXRzIHx8IFtdKSB7XG4gICAgICAgICAgICAgIGlmIChtYW5kYXQudWlkID09PSBhY3RldXJTdW1tYXJ5Lm1hbmRhdFJlZikge1xuICAgICAgICAgICAgICAgIGFjdGV1clN1bW1hcnkubWFuZGF0ID0gbWFuZGF0XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBkYXRhLm9yZ2FuZUJ5VWlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgaW5pdGlhdGV1ci5vcmdhbmVSZWYgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZSA9IGRhdGEub3JnYW5lQnlVaWRbaW5pdGlhdGV1ci5vcmdhbmVSZWZdXG4gICAgICAgIGlmIChvcmdhbmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGluaXRpYXRldXIub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgaW5zZXJ0T3JnYW5lUmVmZXJlbmNlcyhvcmdhbmUsIGRhdGEsIHZpc2l0ZWRVaWRzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvc3NpZXJcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydE9yZ2FuZVJlZmVyZW5jZXMoXG4gIG9yZ2FuZTogT3JnYW5lLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMob3JnYW5lLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQob3JnYW5lLnVpZClcblxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudFJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVQYXJlbnQgPSBkYXRhLm9yZ2FuZUJ5VWlkW29yZ2FuZS5vcmdhbmVQYXJlbnRSZWZdXG4gICAgICBpZiAob3JnYW5lUGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3JnYW5lLm9yZ2FuZVBhcmVudCA9IG9yZ2FuZVBhcmVudFxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVBhcmVudCwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIG9yZ2FuZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0UmV1bmlvblJlZmVyZW5jZXMoXG4gIHJldW5pb246IFJldW5pb24sXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRVaWRzOiBTZXQ8c3RyaW5nPixcbikge1xuICBpZiAoIXZpc2l0ZWRVaWRzLmhhcyhyZXVuaW9uLnVpZCkpIHtcbiAgICB2aXNpdGVkVWlkcy5hZGQocmV1bmlvbi51aWQpXG5cbiAgICBjb25zdCBkZW1hbmRldXJzID0gcmV1bmlvbi5kZW1hbmRldXJzXG4gICAgaWYgKGRlbWFuZGV1cnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clN1bW1hcnkgb2YgZGVtYW5kZXVycy5hY3RldXJzIHx8IFtdKSB7XG4gICAgICAgICAgY29uc3QgYWN0ZXVyID0gZGF0YS5hY3RldXJCeVVpZFthY3RldXJTdW1tYXJ5LmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFjdGV1clN1bW1hcnkuYWN0ZXVyID0gYWN0ZXVyXG4gICAgICAgICAgICBpbnNlcnRBY3RldXJSZWZlcmVuY2VzKGFjdGV1ciwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGF0YS5vcmdhbmVCeVVpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9yZ2FuZVN1bW1hcnkgPSBkZW1hbmRldXJzLm9yZ2FuZVxuICAgICAgICBpZiAob3JnYW5lU3VtbWFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29uc3Qgb3JnYW5lID0gZGF0YS5vcmdhbmVCeVVpZFtvcmdhbmVTdW1tYXJ5Lm9yZ2FuZVJlZl1cbiAgICAgICAgICBpZiAob3JnYW5lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG9yZ2FuZVN1bW1hcnkub3JnYW5lID0gb3JnYW5lXG4gICAgICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZSwgZGF0YSwgdmlzaXRlZFVpZHMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRhdGEub3JnYW5lQnlVaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmV1bmlvbi5vcmdhbmVSZXVuaVJlZiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBjb25zdCBvcmdhbmVSZXVuaSA9IGRhdGEub3JnYW5lQnlVaWRbcmV1bmlvbi5vcmdhbmVSZXVuaVJlZl1cbiAgICAgIGlmIChvcmdhbmVSZXVuaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldW5pb24ub3JnYW5lUmV1bmkgPSBvcmdhbmVSZXVuaVxuICAgICAgICBpbnNlcnRPcmdhbmVSZWZlcmVuY2VzKG9yZ2FuZVJldW5pLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRhdGEuYWN0ZXVyQnlVaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gcmV1bmlvbi5wYXJ0aWNpcGFudHNcbiAgICAgIGlmIChwYXJ0aWNpcGFudHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnRpY2lwYW50SW50ZXJuZSBvZiBwYXJ0aWNpcGFudHMucGFydGljaXBhbnRzSW50ZXJuZXMgfHxcbiAgICAgICAgICBbXSkge1xuICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGRhdGEuYWN0ZXVyQnlVaWRbcGFydGljaXBhbnRJbnRlcm5lLmFjdGV1clJlZl1cbiAgICAgICAgICBpZiAoYWN0ZXVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SW50ZXJuZS5hY3RldXIgPSBhY3RldXJcbiAgICAgICAgICAgIGluc2VydEFjdGV1clJlZmVyZW5jZXMoYWN0ZXVyLCBkYXRhLCB2aXNpdGVkVWlkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmV1bmlvblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U2NydXRpblJlZmVyZW5jZXMoXG4gIHNjcnV0aW46IFNjcnV0aW4sXG4gIF9kYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkVWlkczogU2V0PHN0cmluZz4sXG4pIHtcbiAgaWYgKCF2aXNpdGVkVWlkcy5oYXMoc2NydXRpbi51aWQpKSB7XG4gICAgdmlzaXRlZFVpZHMuYWRkKHNjcnV0aW4udWlkKVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIHNjcnV0aW5cbn1cbiJdLCJtYXBwaW5ncyI6IkFBcUJBLFNBQVNBLDhCQUE4QixDQUNyQ0MsSUFBb0IsRUFDcEJDLElBQWdCLEVBQ2hCQyxXQUF3QixFQUN4QjtFQUNBLElBQUksQ0FBQ0EsV0FBVyxDQUFDQyxHQUFHLENBQUNILElBQUksQ0FBQ0ksR0FBRyxDQUFDLEVBQUU7SUFDOUJGLFdBQVcsQ0FBQ0csR0FBRyxDQUFDTCxJQUFJLENBQUNJLEdBQUcsQ0FBQztJQUV6QixJQUNFSCxJQUFJLENBQUNLLGFBQWEsS0FBS0MsU0FBUyxJQUNoQ1AsSUFBSSxDQUFDUSxnQ0FBZ0MsS0FBS0QsU0FBUyxFQUNuRDtNQUNBLE1BQU1FLFFBQVEsR0FBR1IsSUFBSSxDQUFDSyxhQUFhLENBQUNOLElBQUksQ0FBQ1EsZ0NBQWdDLENBQUM7TUFDMUUsSUFBSUMsUUFBUSxLQUFLRixTQUFTLEVBQUU7UUFDMUJQLElBQUksQ0FBQ1UsNkJBQTZCLEdBQUdELFFBQVE7UUFDN0NFLHdCQUF3QixDQUFDRixRQUFRLEVBQUVSLElBQUksRUFBRUMsV0FBVyxDQUFDO01BQ3ZEO0lBQ0Y7SUFDQSxJQUFJRCxJQUFJLENBQUNXLFdBQVcsS0FBS0wsU0FBUyxJQUFJUCxJQUFJLENBQUNhLFNBQVMsS0FBS04sU0FBUyxFQUFFO01BQ2xFLE1BQU1PLE1BQU0sR0FBR2IsSUFBSSxDQUFDVyxXQUFXLENBQUNaLElBQUksQ0FBQ2EsU0FBUyxDQUFDO01BQy9DLElBQUlDLE1BQU0sS0FBS1AsU0FBUyxFQUFFO1FBQ3hCUCxJQUFJLENBQUNjLE1BQU0sR0FBR0EsTUFBTTtRQUNwQkMsc0JBQXNCLENBQUNELE1BQU0sRUFBRWIsSUFBSSxFQUFFQyxXQUFXLENBQUM7TUFDbkQ7SUFDRjtJQUNBLElBQUlELElBQUksQ0FBQ1csV0FBVyxLQUFLTCxTQUFTLElBQUlQ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