@tricoteuses/senat 0.3.1 → 1.0.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 (88) hide show
  1. package/README.md +52 -0
  2. package/lib/config.d.ts +2 -0
  3. package/lib/config.js +49 -0
  4. package/lib/config.mjs +16 -0
  5. package/lib/config.ts +26 -0
  6. package/lib/databases.d.ts +11 -0
  7. package/lib/databases.js +125 -0
  8. package/lib/databases.mjs +26 -0
  9. package/lib/databases.ts +32 -0
  10. package/lib/datasets.d.ts +27 -0
  11. package/lib/datasets.js +85 -0
  12. package/lib/datasets.mjs +68 -0
  13. package/lib/datasets.ts +107 -0
  14. package/lib/fields.d.ts +10 -0
  15. package/lib/fields.js +68 -0
  16. package/lib/fields.mjs +22 -0
  17. package/lib/fields.ts +29 -0
  18. package/lib/index.d.ts +6 -5
  19. package/lib/index.js +317 -86
  20. package/lib/index.mjs +6 -1
  21. package/lib/index.ts +59 -0
  22. package/lib/inserters.d.ts +1 -1
  23. package/lib/inserters.js +76 -182
  24. package/lib/inserters.ts +520 -0
  25. package/lib/raw_types/ameli.d.ts +416 -410
  26. package/lib/raw_types/ameli.js +28 -144
  27. package/lib/raw_types/ameli.ts +601 -0
  28. package/lib/raw_types/debats.d.ts +82 -80
  29. package/lib/raw_types/debats.js +10 -42
  30. package/lib/raw_types/debats.ts +145 -0
  31. package/lib/raw_types/dosleg.d.ts +936 -920
  32. package/lib/raw_types/dosleg.js +6 -344
  33. package/lib/raw_types/dosleg.ts +2193 -0
  34. package/lib/raw_types/questions.d.ts +2 -2
  35. package/lib/raw_types/questions.js +3 -3
  36. package/lib/raw_types/questions.mjs +2 -2
  37. package/lib/raw_types/questions.ts +9 -0
  38. package/lib/raw_types/sens.d.ts +1180 -1176
  39. package/lib/raw_types/sens.js +5 -397
  40. package/lib/raw_types/sens.ts +2907 -0
  41. package/lib/scripts/images/transparent_150x192.jpg +0 -0
  42. package/lib/scripts/images/transparent_155x225.jpg +0 -0
  43. package/lib/scripts/retrieve_open_data.d.ts +1 -0
  44. package/lib/scripts/retrieve_open_data.js +366 -0
  45. package/lib/scripts/retrieve_open_data.mjs +215 -0
  46. package/lib/scripts/retrieve_open_data.ts +254 -0
  47. package/lib/scripts/retrieve_senateurs_photos.d.ts +1 -0
  48. package/lib/scripts/retrieve_senateurs_photos.js +268 -0
  49. package/lib/scripts/retrieve_senateurs_photos.mjs +164 -0
  50. package/lib/scripts/retrieve_senateurs_photos.ts +200 -0
  51. package/lib/scripts/retrieve_textes.d.ts +1 -0
  52. package/lib/scripts/retrieve_textes.js +177 -0
  53. package/lib/scripts/retrieve_textes.mjs +75 -0
  54. package/lib/scripts/retrieve_textes.ts +93 -0
  55. package/lib/strings.d.ts +1 -0
  56. package/lib/strings.js +49 -0
  57. package/lib/strings.mjs +18 -0
  58. package/lib/strings.ts +26 -0
  59. package/lib/types/ameli.d.ts +5 -0
  60. package/lib/types/ameli.js +9 -2
  61. package/lib/types/ameli.mjs +13 -1
  62. package/lib/types/ameli.ts +21 -0
  63. package/lib/types/debats.d.ts +2 -0
  64. package/lib/types/debats.js +5 -2
  65. package/lib/types/debats.mjs +2 -1
  66. package/lib/types/debats.ts +6 -0
  67. package/lib/types/dosleg.d.ts +28 -0
  68. package/lib/types/dosleg.js +31 -2
  69. package/lib/types/dosleg.mjs +151 -1
  70. package/lib/types/dosleg.ts +284 -0
  71. package/lib/types/questions.js +1 -1
  72. package/lib/types/questions.ts +0 -0
  73. package/lib/types/sens.d.ts +2 -0
  74. package/lib/types/sens.js +5 -2
  75. package/lib/types/sens.mjs +23 -1
  76. package/lib/types/sens.ts +36 -0
  77. package/lib/typings/windows-1252.d.js +2 -0
  78. package/lib/typings/windows-1252.d.mjs +2 -0
  79. package/lib/typings/windows-1252.d.ts +11 -0
  80. package/lib/validators/config.d.ts +1 -0
  81. package/lib/validators/config.js +121 -0
  82. package/lib/validators/config.mjs +54 -0
  83. package/lib/validators/config.ts +79 -0
  84. package/lib/validators/senat.d.ts +0 -0
  85. package/lib/validators/senat.js +28 -0
  86. package/lib/validators/senat.mjs +24 -0
  87. package/lib/validators/senat.ts +26 -0
  88. package/package.json +36 -5
package/lib/inserters.js CHANGED
@@ -1,21 +1,15 @@
1
1
  "use strict";
2
2
 
3
- require("core-js/modules/es.array.concat.js");
4
-
5
- require("core-js/modules/es.array.iterator.js");
6
-
7
- require("core-js/modules/es.date.to-iso-string.js");
8
-
9
- require("core-js/modules/es.date.to-string.js");
10
-
11
- require("core-js/modules/es.object.to-string.js");
12
-
13
- require("core-js/modules/es.set.js");
14
-
15
- require("core-js/modules/es.string.iterator.js");
16
-
17
- require("core-js/modules/web.dom-collections.iterator.js");
18
-
3
+ require("core-js/modules/es.symbol.js");
4
+ require("core-js/modules/es.symbol.description.js");
5
+ require("core-js/modules/es.symbol.iterator.js");
6
+ require("core-js/modules/es.array.from.js");
7
+ require("core-js/modules/es.array.is-array.js");
8
+ require("core-js/modules/es.array.slice.js");
9
+ require("core-js/modules/es.function.name.js");
10
+ require("core-js/modules/es.object.define-property.js");
11
+ require("core-js/modules/es.regexp.exec.js");
12
+ require("core-js/modules/es.regexp.to-string.js");
19
13
  Object.defineProperty(exports, "__esModule", {
20
14
  value: true
21
15
  });
@@ -24,97 +18,87 @@ exports.insertAuteurReferences = insertAuteurReferences;
24
18
  exports.insertDateSeanceReferences = insertDateSeanceReferences;
25
19
  exports.insertDocAttReferences = insertDocAttReferences;
26
20
  exports.insertEcrReferences = insertEcrReferences;
27
- exports.insertLecassrapReferences = insertLecassrapReferences;
28
21
  exports.insertLecassReferences = insertLecassReferences;
22
+ exports.insertLecassrapReferences = insertLecassrapReferences;
29
23
  exports.insertLectureReferences = insertLectureReferences;
30
24
  exports.insertLoiReferences = insertLoiReferences;
31
25
  exports.insertRapReferences = insertRapReferences;
32
26
  exports.insertTexteReferences = insertTexteReferences;
33
-
34
- function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { 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 = o[Symbol.iterator](); }, 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; } } }; }
35
-
36
- 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); }
37
-
38
- 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; }
39
-
27
+ require("core-js/modules/es.array.concat.js");
28
+ require("core-js/modules/es.array.iterator.js");
29
+ require("core-js/modules/es.date.to-iso-string.js");
30
+ require("core-js/modules/es.date.to-string.js");
31
+ require("core-js/modules/es.object.to-string.js");
32
+ require("core-js/modules/es.set.js");
33
+ require("core-js/modules/es.string.iterator.js");
34
+ require("core-js/modules/web.dom-collections.iterator.js");
35
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
36
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
37
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
40
38
  function insertAudReferences(aud, data, visitedIdsByTableName) {
41
39
  var visitedIds = visitedIdsByTableName.aud;
42
-
43
40
  if (visitedIds === undefined) {
44
41
  visitedIds = visitedIdsByTableName.aud = new Set();
45
42
  }
46
-
47
43
  if (!visitedIds.has(aud.audcle)) {
48
44
  visitedIds.add(aud.audcle);
49
-
50
45
  if (aud.orgcod !== null && data.org !== undefined) {
51
46
  var org = data.org[aud.orgcod];
52
-
53
47
  if (org !== undefined) {
54
- aud.org = org; // insertOrgReferences(org, data, visitedIdsByTableName)
48
+ aud.org = org;
49
+ // insertOrgReferences(org, data, visitedIdsByTableName)
55
50
  }
56
- } // TODO
51
+ }
57
52
 
53
+ // TODO
58
54
  }
59
-
60
55
  return aud;
61
56
  }
62
-
63
57
  function insertAuteurReferences(auteur, data, visitedIdsByTableName) {
64
58
  var visitedIds = visitedIdsByTableName.auteur;
65
-
66
59
  if (visitedIds === undefined) {
67
60
  visitedIds = visitedIdsByTableName.auteur = new Set();
68
61
  }
69
-
70
62
  if (!visitedIds.has(auteur.autcod)) {
71
63
  visitedIds.add(auteur.autcod);
72
-
73
64
  if (data.qua !== undefined) {
74
65
  var qua = data.qua[auteur.quacod];
75
-
76
66
  if (qua !== undefined) {
77
- auteur.qua = qua; // insertQuaReferences(qua, data, visitedIdsByTableName)
67
+ auteur.qua = qua;
68
+ // insertQuaReferences(qua, data, visitedIdsByTableName)
78
69
  }
79
- } // TODO
70
+ }
80
71
 
72
+ // TODO
81
73
  }
82
-
83
74
  return auteur;
84
75
  }
85
-
86
76
  function insertDateSeanceReferences(dateSeance, data, visitedIdsByTableName) {
87
77
  var visitedIds = visitedIdsByTableName.date_seance;
88
-
89
78
  if (visitedIds === undefined) {
90
79
  visitedIds = visitedIdsByTableName.date_seance = new Set();
91
80
  }
92
-
93
81
  if (!visitedIds.has(dateSeance.code)) {
94
82
  visitedIds.add(dateSeance.code);
95
-
96
83
  if (dateSeance.date_s !== null && data.debats !== undefined) {
97
84
  var dateString = dateSeance.date_s instanceof Date ? dateSeance.date_s.toISOString() : dateSeance.date_s;
98
85
  var debat = data.debats[dateString];
99
-
100
86
  if (debat !== undefined) {
101
- dateSeance.debat = debat; // insertDebatReferences(debat, data, visitedIdsByTableName)
87
+ dateSeance.debat = debat;
88
+ // insertDebatReferences(debat, data, visitedIdsByTableName)
102
89
  }
103
90
  }
104
-
105
91
  dateSeance.scrs = [];
106
-
107
92
  if (dateSeance.scrids !== undefined && data.scr !== undefined) {
108
93
  var _iterator = _createForOfIteratorHelper(dateSeance.scrids),
109
- _step;
110
-
94
+ _step;
111
95
  try {
112
96
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
113
97
  var scrid = _step.value;
114
98
  var scr = data.scr[scrid];
115
-
116
99
  if (scr !== undefined) {
117
- dateSeance.scrs.push(scr); // insertScrReferences(scr, data, visitedIdsByTableName)
100
+ dateSeance.scrs.push(scr);
101
+ // insertScrReferences(scr, data, visitedIdsByTableName)
118
102
  }
119
103
  }
120
104
  } catch (err) {
@@ -124,127 +108,98 @@ function insertDateSeanceReferences(dateSeance, data, visitedIdsByTableName) {
124
108
  }
125
109
  }
126
110
  }
127
-
128
111
  return dateSeance;
129
112
  }
130
-
131
113
  function insertDocAttReferences(docatt, data, visitedIdsByTableName) {
132
114
  var visitedIds = visitedIdsByTableName.docatt;
133
-
134
115
  if (visitedIds === undefined) {
135
116
  visitedIds = visitedIdsByTableName.docatt = new Set();
136
117
  }
137
-
138
118
  if (!visitedIds.has(docatt.docattcle)) {
139
119
  visitedIds.add(docatt.docattcle);
140
-
141
120
  if (docatt.rapcod !== null && data.rap !== undefined) {
142
121
  var rap = data.rap[docatt.rapcod];
143
-
144
122
  if (rap !== undefined) {
145
123
  docatt.rap = rap;
146
124
  insertRapReferences(rap, data, visitedIdsByTableName);
147
125
  }
148
126
  }
149
-
150
127
  if (docatt.typattcod !== null && data.typatt !== undefined) {
151
128
  var typatt = data.typatt[docatt.typattcod];
152
-
153
129
  if (typatt !== undefined) {
154
- docatt.typatt = typatt; // insertTypAttReferences(typatt, data, visitedIdsByTableName)
130
+ docatt.typatt = typatt;
131
+ // insertTypAttReferences(typatt, data, visitedIdsByTableName)
155
132
  }
156
133
  }
157
134
  }
158
-
159
135
  return docatt;
160
136
  }
161
-
162
137
  function insertEcrReferences(ecr, data, visitedIdsByTableName) {
163
138
  var visitedIds = visitedIdsByTableName.ecr;
164
-
165
139
  if (visitedIds === undefined) {
166
140
  visitedIds = visitedIdsByTableName.ecr = new Set();
167
141
  }
168
-
169
142
  if (!visitedIds.has(ecr.ecrnum)) {
170
143
  visitedIds.add(ecr.ecrnum);
171
-
172
144
  if (ecr.autcod !== null && data.auteur !== undefined) {
173
145
  var aut = data.auteur[ecr.autcod];
174
-
175
146
  if (aut !== undefined) {
176
147
  ecr.aut = aut;
177
148
  insertAuteurReferences(aut, data, visitedIdsByTableName);
178
149
  }
179
- } // TODO
150
+ }
180
151
 
152
+ // TODO
181
153
  }
182
-
183
154
  return ecr;
184
155
  }
185
-
186
156
  function insertLecassrapReferences(lecassrap, data, visitedIdsByTableName) {
187
157
  var visitedIds = visitedIdsByTableName.lecassrap;
188
-
189
158
  if (visitedIds === undefined) {
190
159
  visitedIds = visitedIdsByTableName.lecassrap = new Set();
191
160
  }
192
-
193
161
  var lecasrapid = "".concat(lecassrap.lecassidt, " ").concat(lecassrap.rapcod);
194
-
195
162
  if (!visitedIds.has(lecasrapid)) {
196
163
  visitedIds.add(lecasrapid);
197
-
198
164
  if (lecassrap.rapcod !== null && data.rap !== undefined) {
199
165
  var rap = data.rap[lecassrap.rapcod];
200
-
201
166
  if (rap !== undefined) {
202
167
  lecassrap.rap = rap;
203
168
  insertRapReferences(rap, data, visitedIdsByTableName);
204
169
  }
205
170
  }
206
171
  }
207
-
208
172
  return lecassrap;
209
173
  }
210
-
211
174
  function insertLecassReferences(lecass, data, visitedIdsByTableName) {
212
175
  var visitedIds = visitedIdsByTableName.lecass;
213
-
214
176
  if (visitedIds === undefined) {
215
177
  visitedIds = visitedIdsByTableName.lecass = new Set();
216
178
  }
217
-
218
179
  if (!visitedIds.has(lecass.lecassidt)) {
219
180
  visitedIds.add(lecass.lecassidt);
220
-
221
181
  if (lecass.codass !== null && data.ass !== undefined) {
222
182
  var ass = data.ass[lecass.codass];
223
-
224
183
  if (ass !== undefined) {
225
- lecass.ass = ass; // insertAssReferences(ass, data, visitedIdsByTableName)
184
+ lecass.ass = ass;
185
+ // insertAssReferences(ass, data, visitedIdsByTableName)
226
186
  }
227
187
  }
228
-
229
188
  if (lecass.orgcod !== null && data.org !== undefined) {
230
189
  var org = data.org[lecass.orgcod];
231
-
232
190
  if (org !== undefined) {
233
- lecass.org = org; // insertOrgReferences(org, data, visitedIdsByTableName)
191
+ lecass.org = org;
192
+ // insertOrgReferences(org, data, visitedIdsByTableName)
234
193
  }
235
194
  }
236
-
237
195
  lecass.auds = [];
238
-
239
196
  if (lecass.audcles !== undefined && data.aud !== undefined) {
240
197
  var _iterator2 = _createForOfIteratorHelper(lecass.audcles),
241
- _step2;
242
-
198
+ _step2;
243
199
  try {
244
200
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
245
201
  var audcle = _step2.value;
246
202
  var aud = data.aud[audcle];
247
-
248
203
  if (aud !== undefined) {
249
204
  lecass.auds.push(aud);
250
205
  insertAudReferences(aud, data, visitedIdsByTableName);
@@ -256,18 +211,14 @@ function insertLecassReferences(lecass, data, visitedIdsByTableName) {
256
211
  _iterator2.f();
257
212
  }
258
213
  }
259
-
260
214
  lecass.datesSeances = [];
261
-
262
215
  if (lecass.datesSeancesCodes !== undefined && data.date_seance !== undefined) {
263
216
  var _iterator3 = _createForOfIteratorHelper(lecass.datesSeancesCodes),
264
- _step3;
265
-
217
+ _step3;
266
218
  try {
267
219
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
268
220
  var dateSeanceCode = _step3.value;
269
221
  var dateSeance = data.date_seance[dateSeanceCode];
270
-
271
222
  if (dateSeance !== undefined) {
272
223
  lecass.datesSeances.push(dateSeance);
273
224
  insertDateSeanceReferences(dateSeance, data, visitedIdsByTableName);
@@ -279,18 +230,14 @@ function insertLecassReferences(lecass, data, visitedIdsByTableName) {
279
230
  _iterator3.f();
280
231
  }
281
232
  }
282
-
283
233
  lecass.lecassraps = [];
284
-
285
234
  if (lecass.lecassrapids !== undefined && data.lecassrap !== undefined) {
286
235
  var _iterator4 = _createForOfIteratorHelper(lecass.lecassrapids),
287
- _step4;
288
-
236
+ _step4;
289
237
  try {
290
238
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
291
239
  var lecassrapid = _step4.value;
292
240
  var lecassrap = data.lecassrap[lecassrapid];
293
-
294
241
  if (lecassrap !== undefined) {
295
242
  lecass.lecassraps.push(lecassrap);
296
243
  insertLecassrapReferences(lecassrap, data, visitedIdsByTableName);
@@ -302,18 +249,14 @@ function insertLecassReferences(lecass, data, visitedIdsByTableName) {
302
249
  _iterator4.f();
303
250
  }
304
251
  }
305
-
306
252
  lecass.textes = [];
307
-
308
253
  if (lecass.texcods !== undefined && data.texte !== undefined) {
309
254
  var _iterator5 = _createForOfIteratorHelper(lecass.texcods),
310
- _step5;
311
-
255
+ _step5;
312
256
  try {
313
257
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
314
258
  var texcod = _step5.value;
315
259
  var texte = data.texte[texcod];
316
-
317
260
  if (texte !== undefined) {
318
261
  lecass.textes.push(texte);
319
262
  insertTexteReferences(texte, data, visitedIdsByTableName);
@@ -326,39 +269,30 @@ function insertLecassReferences(lecass, data, visitedIdsByTableName) {
326
269
  }
327
270
  }
328
271
  }
329
-
330
272
  return lecass;
331
273
  }
332
-
333
274
  function insertLectureReferences(lecture, data, visitedIdsByTableName) {
334
275
  var visitedIds = visitedIdsByTableName.lecture;
335
-
336
276
  if (visitedIds === undefined) {
337
277
  visitedIds = visitedIdsByTableName.lecture = new Set();
338
278
  }
339
-
340
279
  if (!visitedIds.has(lecture.lecidt)) {
341
280
  visitedIds.add(lecture.lecidt);
342
-
343
281
  if (lecture.typleccod !== null && data.typlec !== undefined) {
344
282
  var typlec = data.typlec[lecture.typleccod];
345
-
346
283
  if (typlec !== undefined) {
347
- lecture.typlec = typlec; // insertTyplecReferences(typlec, data, visitedIdsByTableName)
284
+ lecture.typlec = typlec;
285
+ // insertTyplecReferences(typlec, data, visitedIdsByTableName)
348
286
  }
349
287
  }
350
-
351
288
  lecture.lecasss = [];
352
-
353
289
  if (lecture.lecassidts !== undefined && data.lecass !== undefined) {
354
290
  var _iterator6 = _createForOfIteratorHelper(lecture.lecassidts),
355
- _step6;
356
-
291
+ _step6;
357
292
  try {
358
293
  for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
359
294
  var lecassidt = _step6.value;
360
295
  var lecass = data.lecass[lecassidt];
361
-
362
296
  if (lecass !== undefined) {
363
297
  lecture.lecasss.push(lecass);
364
298
  insertLecassReferences(lecass, data, visitedIdsByTableName);
@@ -371,55 +305,44 @@ function insertLectureReferences(lecture, data, visitedIdsByTableName) {
371
305
  }
372
306
  }
373
307
  }
374
-
375
308
  return lecture;
376
309
  }
377
-
378
310
  function insertLoiReferences(loi, data, visitedIdsByTableName) {
379
311
  var visitedIds = visitedIdsByTableName.loi;
380
-
381
312
  if (visitedIds === undefined) {
382
313
  visitedIds = visitedIdsByTableName.loi = new Set();
383
314
  }
384
-
385
315
  if (!visitedIds.has(loi.loicod)) {
386
316
  visitedIds.add(loi.loicod);
387
-
388
317
  if (loi.typloicod !== null && data.typloi !== undefined) {
389
318
  var typloi = data.typloi[loi.typloicod];
390
-
391
319
  if (typloi !== undefined) {
392
- loi.typloi = typloi; // insertTyploiReferences(typloi, data, visitedIdsByTableName)
320
+ loi.typloi = typloi;
321
+ // insertTyploiReferences(typloi, data, visitedIdsByTableName)
393
322
  }
394
323
  }
395
-
396
324
  if (loi.etaloicod !== null && data.etaloi !== undefined) {
397
325
  var etaloi = data.etaloi[loi.etaloicod];
398
-
399
326
  if (etaloi !== undefined) {
400
- loi.etaloi = etaloi; // insertEtaloiReferences(etaloi, data, visitedIdsByTableName)
327
+ loi.etaloi = etaloi;
328
+ // insertEtaloiReferences(etaloi, data, visitedIdsByTableName)
401
329
  }
402
330
  }
403
-
404
331
  if (loi.deccoccod !== null && data.deccoc !== undefined) {
405
332
  var deccoc = data.deccoc[loi.deccoccod];
406
-
407
333
  if (deccoc !== undefined) {
408
- loi.deccoc = deccoc; // insertDeccocReferences(deccoc, data, visitedIdsByTableName)
334
+ loi.deccoc = deccoc;
335
+ // insertDeccocReferences(deccoc, data, visitedIdsByTableName)
409
336
  }
410
337
  }
411
-
412
338
  loi.lectures = [];
413
-
414
339
  if (loi.lecidts !== undefined && data.lecture !== undefined) {
415
340
  var _iterator7 = _createForOfIteratorHelper(loi.lecidts),
416
- _step7;
417
-
341
+ _step7;
418
342
  try {
419
343
  for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
420
344
  var lecidt = _step7.value;
421
345
  var lecture = data.lecture[lecidt];
422
-
423
346
  if (lecture !== undefined) {
424
347
  loi.lectures.push(lecture);
425
348
  insertLectureReferences(lecture, data, visitedIdsByTableName);
@@ -432,39 +355,30 @@ function insertLoiReferences(loi, data, visitedIdsByTableName) {
432
355
  }
433
356
  }
434
357
  }
435
-
436
358
  return loi;
437
359
  }
438
-
439
360
  function insertRapReferences(rap, data, visitedIdsByTableName) {
440
361
  var visitedIds = visitedIdsByTableName.rap;
441
-
442
362
  if (visitedIds === undefined) {
443
363
  visitedIds = visitedIdsByTableName.rap = new Set();
444
364
  }
445
-
446
365
  if (!visitedIds.has(rap.rapcod)) {
447
366
  visitedIds.add(rap.rapcod);
448
-
449
367
  if (rap.coddenrap !== null && data.denrap !== undefined) {
450
368
  var denrap = data.denrap[rap.coddenrap];
451
-
452
369
  if (denrap !== undefined) {
453
- rap.denrap = denrap; // insertDenrapReferences(denrap, data, visitedIdsByTableName)
370
+ rap.denrap = denrap;
371
+ // insertDenrapReferences(denrap, data, visitedIdsByTableName)
454
372
  }
455
373
  }
456
-
457
374
  rap.docatts = [];
458
-
459
375
  if (rap.docattcles !== undefined && data.docatt !== undefined) {
460
376
  var _iterator8 = _createForOfIteratorHelper(rap.docattcles),
461
- _step8;
462
-
377
+ _step8;
463
378
  try {
464
379
  for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
465
380
  var docattcle = _step8.value;
466
381
  var docatt = data.docatt[docattcle];
467
-
468
382
  if (docatt !== undefined) {
469
383
  rap.docatts.push(docatt);
470
384
  insertDocAttReferences(docatt, data, visitedIdsByTableName);
@@ -476,18 +390,14 @@ function insertRapReferences(rap, data, visitedIdsByTableName) {
476
390
  _iterator8.f();
477
391
  }
478
392
  }
479
-
480
393
  rap.ecrs = [];
481
-
482
394
  if (rap.ecrnums !== undefined && data.ecr !== undefined) {
483
395
  var _iterator9 = _createForOfIteratorHelper(rap.ecrnums),
484
- _step9;
485
-
396
+ _step9;
486
397
  try {
487
398
  for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
488
399
  var ecrnum = _step9.value;
489
400
  var ecr = data.ecr[ecrnum];
490
-
491
401
  if (ecr !== undefined) {
492
402
  rap.ecrs.push(ecr);
493
403
  insertEcrReferences(ecr, data, visitedIdsByTableName);
@@ -499,20 +409,17 @@ function insertRapReferences(rap, data, visitedIdsByTableName) {
499
409
  _iterator9.f();
500
410
  }
501
411
  }
502
-
503
412
  rap.orgs = [];
504
-
505
413
  if (rap.orgcods !== undefined && data.org !== undefined) {
506
414
  var _iterator10 = _createForOfIteratorHelper(rap.orgcods),
507
- _step10;
508
-
415
+ _step10;
509
416
  try {
510
417
  for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
511
418
  var orgcod = _step10.value;
512
419
  var org = data.org[orgcod];
513
-
514
420
  if (org !== undefined) {
515
- rap.orgs.push(org); // insertOrgReferences(org, data, visitedIdsByTableName)
421
+ rap.orgs.push(org);
422
+ // insertOrgReferences(org, data, visitedIdsByTableName)
516
423
  }
517
424
  }
518
425
  } catch (err) {
@@ -522,30 +429,23 @@ function insertRapReferences(rap, data, visitedIdsByTableName) {
522
429
  }
523
430
  }
524
431
  }
525
-
526
432
  return rap;
527
433
  }
528
-
529
434
  function insertTexteReferences(texte, data, visitedIdsByTableName) {
530
435
  var visitedIds = visitedIdsByTableName.texte;
531
-
532
436
  if (visitedIds === undefined) {
533
437
  visitedIds = visitedIdsByTableName.texte = new Set();
534
438
  }
535
-
536
439
  if (!visitedIds.has(texte.texcod)) {
537
440
  visitedIds.add(texte.texcod);
538
441
  texte.ecrs = [];
539
-
540
442
  if (texte.ecrnums !== undefined && data.ecr !== undefined) {
541
443
  var _iterator11 = _createForOfIteratorHelper(texte.ecrnums),
542
- _step11;
543
-
444
+ _step11;
544
445
  try {
545
446
  for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
546
447
  var ecrnum = _step11.value;
547
448
  var ecr = data.ecr[ecrnum];
548
-
549
449
  if (ecr !== undefined) {
550
450
  texte.ecrs.push(ecr);
551
451
  insertEcrReferences(ecr, data, visitedIdsByTableName);
@@ -557,49 +457,43 @@ function insertTexteReferences(texte, data, visitedIdsByTableName) {
557
457
  _iterator11.f();
558
458
  }
559
459
  }
560
-
561
460
  if (texte.orgcod !== null && data.org !== undefined) {
562
461
  var org = data.org[texte.orgcod];
563
-
564
462
  if (org !== undefined) {
565
- texte.org = org; // insertOrgReferences(org, data, visitedIdsByTableName)
463
+ texte.org = org;
464
+ // insertOrgReferences(org, data, visitedIdsByTableName)
566
465
  }
567
466
  }
568
-
569
467
  if (texte.oritxtcod !== null && data.oritxt !== undefined) {
570
468
  var oritxt = data.oritxt[texte.oritxtcod];
571
-
572
469
  if (oritxt !== undefined) {
573
- texte.oritxt = oritxt; // insertOritxtReferences(oritxt, data, visitedIdsByTableName)
470
+ texte.oritxt = oritxt;
471
+ // insertOritxtReferences(oritxt, data, visitedIdsByTableName)
574
472
  }
575
473
  }
576
-
577
474
  if (texte.txtAmeliId !== undefined && data.txt_ameli !== undefined) {
578
475
  var txtAmeli = data.txt_ameli[texte.txtAmeliId];
579
-
580
476
  if (txtAmeli !== undefined) {
581
477
  texte.txtAmeli = txtAmeli;
582
478
  }
583
479
  }
584
-
585
480
  if (texte.typtxtcod !== null && data.typtxt !== undefined) {
586
481
  var typtxt = data.typtxt[texte.typtxtcod];
587
-
588
482
  if (typtxt !== undefined) {
589
- texte.typtxt = typtxt; // insertTyptxtReferences(typtxt, data, visitedIdsByTableName)
483
+ texte.typtxt = typtxt;
484
+ // insertTyptxtReferences(typtxt, data, visitedIdsByTableName)
590
485
  }
591
486
  }
592
-
593
487
  if (texte.typurl !== null && data.typurl !== undefined) {
594
488
  var typurl = data.typurl[texte.typurl];
595
-
596
489
  if (typurl !== undefined) {
597
- texte.libtypurl = typurl.libtypurl; // insertTypurlReferences(typurl, data, visitedIdsByTableName)
490
+ texte.libtypurl = typurl.libtypurl;
491
+ // insertTypurlReferences(typurl, data, visitedIdsByTableName)
598
492
  }
599
- } // TODO
493
+ }
600
494
 
495
+ // TODO
601
496
  }
602
-
603
497
  return texte;
604
498
  }
605
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnNlcnRlcnMudHMiXSwibmFtZXMiOlsiaW5zZXJ0QXVkUmVmZXJlbmNlcyIsImF1ZCIsImRhdGEiLCJ2aXNpdGVkSWRzQnlUYWJsZU5hbWUiLCJ2aXNpdGVkSWRzIiwidW5kZWZpbmVkIiwiU2V0IiwiaGFzIiwiYXVkY2xlIiwiYWRkIiwib3JnY29kIiwib3JnIiwiaW5zZXJ0QXV0ZXVyUmVmZXJlbmNlcyIsImF1dGV1ciIsImF1dGNvZCIsInF1YSIsInF1YWNvZCIsImluc2VydERhdGVTZWFuY2VSZWZlcmVuY2VzIiwiZGF0ZVNlYW5jZSIsImRhdGVfc2VhbmNlIiwiY29kZSIsImRhdGVfcyIsImRlYmF0cyIsImRhdGVTdHJpbmciLCJEYXRlIiwidG9JU09TdHJpbmciLCJkZWJhdCIsInNjcnMiLCJzY3JpZHMiLCJzY3IiLCJzY3JpZCIsInB1c2giLCJpbnNlcnREb2NBdHRSZWZlcmVuY2VzIiwiZG9jYXR0IiwiZG9jYXR0Y2xlIiwicmFwY29kIiwicmFwIiwiaW5zZXJ0UmFwUmVmZXJlbmNlcyIsInR5cGF0dGNvZCIsInR5cGF0dCIsImluc2VydEVjclJlZmVyZW5jZXMiLCJlY3IiLCJlY3JudW0iLCJhdXQiLCJpbnNlcnRMZWNhc3NyYXBSZWZlcmVuY2VzIiwibGVjYXNzcmFwIiwibGVjYXNyYXBpZCIsImxlY2Fzc2lkdCIsImluc2VydExlY2Fzc1JlZmVyZW5jZXMiLCJsZWNhc3MiLCJjb2Rhc3MiLCJhc3MiLCJhdWRzIiwiYXVkY2xlcyIsImRhdGVzU2VhbmNlcyIsImRhdGVzU2VhbmNlc0NvZGVzIiwiZGF0ZVNlYW5jZUNvZGUiLCJsZWNhc3NyYXBzIiwibGVjYXNzcmFwaWRzIiwibGVjYXNzcmFwaWQiLCJ0ZXh0ZXMiLCJ0ZXhjb2RzIiwidGV4dGUiLCJ0ZXhjb2QiLCJpbnNlcnRUZXh0ZVJlZmVyZW5jZXMiLCJpbnNlcnRMZWN0dXJlUmVmZXJlbmNlcyIsImxlY3R1cmUiLCJsZWNpZHQiLCJ0eXBsZWNjb2QiLCJ0eXBsZWMiLCJsZWNhc3NzIiwibGVjYXNzaWR0cyIsImluc2VydExvaVJlZmVyZW5jZXMiLCJsb2kiLCJsb2ljb2QiLCJ0eXBsb2ljb2QiLCJ0eXBsb2kiLCJldGFsb2ljb2QiLCJldGFsb2kiLCJkZWNjb2Njb2QiLCJkZWNjb2MiLCJsZWN0dXJlcyIsImxlY2lkdHMiLCJjb2RkZW5yYXAiLCJkZW5yYXAiLCJkb2NhdHRzIiwiZG9jYXR0Y2xlcyIsImVjcnMiLCJlY3JudW1zIiwib3JncyIsIm9yZ2NvZHMiLCJvcml0eHRjb2QiLCJvcml0eHQiLCJ0eHRBbWVsaUlkIiwidHh0X2FtZWxpIiwidHh0QW1lbGkiLCJ0eXB0eHRjb2QiLCJ0eXB0eHQiLCJ0eXB1cmwiLCJsaWJ0eXB1cmwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRETyxTQUFTQSxtQkFBVCxDQUNMQyxHQURLLEVBRUxDLElBRkssRUFHTEMscUJBSEssRUFJTDtBQUNBLE1BQUlDLFVBQVUsR0FBR0QscUJBQXFCLENBQUNGLEdBQXZDOztBQUNBLE1BQUlHLFVBQVUsS0FBS0MsU0FBbkIsRUFBOEI7QUFDNUJELElBQUFBLFVBQVUsR0FBR0QscUJBQXFCLENBQUNGLEdBQXRCLEdBQTRCLElBQUlLLEdBQUosRUFBekM7QUFDRDs7QUFDRCxNQUFJLENBQUNGLFVBQVUsQ0FBQ0csR0FBWCxDQUFlTixHQUFHLENBQUNPLE1BQW5CLENBQUwsRUFBaUM7QUFDL0JKLElBQUFBLFVBQVUsQ0FBQ0ssR0FBWCxDQUFlUixHQUFHLENBQUNPLE1BQW5COztBQUVBLFFBQUlQLEdBQUcsQ0FBQ1MsTUFBSixLQUFlLElBQWYsSUFBdUJSLElBQUksQ0FBQ1MsR0FBTCxLQUFhTixTQUF4QyxFQUFtRDtBQUNqRCxVQUFNTSxHQUFHLEdBQUdULElBQUksQ0FBQ1MsR0FBTCxDQUFTVixHQUFHLENBQUNTLE1BQWIsQ0FBWjs7QUFDQSxVQUFJQyxHQUFHLEtBQUtOLFNBQVosRUFBdUI7QUFDckJKLFFBQUFBLEdBQUcsQ0FBQ1UsR0FB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LEtBQXFCeEYsU0FBckIsSUFBa0NILElBQUksQ0FBQzRGLFNBQUwsS0FBbUJ6RixTQUF6RCxFQUFvRTtBQUNsRSxVQUFNMEYsUUFBUSxHQUFHN0YsSUFBSSxDQUFDNEYsU0FBTCxDQUFlaEMsS0FBSyxDQUFDK0IsVUFBckIsQ0FBakI7O0FBQ0EsVUFBSUUsUUFBUSxLQUFLMUYsU0FBakIsRUFBNEI7QUFDMUJ5RCxRQUFBQSxLQUFLLENBQUNpQyxRQUFOLEdBQWlCQSxRQUFqQjtBQUNEO0FBQ0Y7O0FBRUQsUUFBSWpDLEtBQUssQ0FBQ2tDLFNBQU4sS0FBb0IsSUFBcEIsSUFBNEI5RixJQUFJLENBQUMrRixNQUFMLEtBQWdCNUYsU0FBaEQsRUFBMkQ7QUFDekQsVUFBTTRGLE1BQU0sR0FBRy9GLElBQUksQ0FBQytGLE1BQUwsQ0FBWW5DLEtBQUssQ0FBQ2tDLFNBQWxCLENBQWY7O0FBQ0EsVUFBSUMsTUFBTSxLQUFLNUYsU0FBZixFQUEwQjtBQUN4QnlELFFBQUFBLEtBQUssQ0FBQ21DLE1BQU4sR0FBZUEsTUFBZixDQUR3QixDQUV4QjtBQUNEO0FBQ0Y7O0FBRUQsUUFBSW5DLEtBQUssQ0FBQ29DLE1BQU4sS0FBaUIsSUFBakIsSUFBeUJoRyxJQUFJLENBQUNnRyxNQUFMLEtBQWdCN0YsU0FBN0MsRUFBd0Q7QUFDdEQsVUFBTTZGLE1BQU0sR0FBR2hHLElBQUksQ0FBQ2dHLE1BQUwsQ0FBWXBDLEtBQUssQ0FBQ29DLE1BQWxCLENBQWY7O0FBQ0EsVUFBSUEsTUFBTSxLQUFLN0YsU0FBZixFQUEwQjtBQUN4QnlELFFBQUFBLEtBQUssQ0FBQ3FDLFNBQU4sR0FBa0JELE1BQU0sQ0FBQ0MsU0FBekIsQ0FEd0IsQ0FFeEI7QUFDRDtBQUNGLEtBbkRnQyxDQXFEakM7O0FBQ0Q7O0FBRUQsU0FBT3JDLEtBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR4dEFtZWxpIH0gZnJvbSBcIi4vdHlwZXMvYW1lbGlcIlxuaW1wb3J0IHsgRGViYXQgfSBmcm9tIFwiLi90eXBlcy9kZWJhdHNcIlxuaW1wb3J0IHtcbiAgQXNzLFxuICBBdWQsXG4gIEF1dGV1cixcbiAgRGF0ZVNlYW5jZSxcbiAgRGVjQ29jLFxuICBEZW5SYXAsXG4gIERvY0F0dCxcbiAgRWNyLFxuICBFdGFMb2ksXG4gIExlY0FzcyxcbiAgTGVjQXNzUmFwLFxuICBMZWN0dXJlLFxuICBMb2ksXG4gIE9yZyxcbiAgT3JpVHh0LFxuICBRdWEsXG4gIFJhcCxcbiAgU2NyLFxuICBUZXh0ZSxcbiAgVHlwQXR0LFxuICBUeXBMZWMsXG4gIFR5cExvaSxcbiAgVHlwVHh0LFxuICBUeXBVcmwsXG59IGZyb20gXCIuL3R5cGVzL2Rvc2xlZ1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0RGF0YSB7XG4gIHJlYWRvbmx5IGFzcz86IHsgW2lkOiBzdHJpbmddOiBBc3MgfVxuICByZWFkb25seSBhdWQ/OiB7IFtpZDogc3RyaW5nXTogQXVkIH1cbiAgcmVhZG9ubHkgYXV0ZXVyPzogeyBbaWQ6IHN0cmluZ106IEF1dGV1ciB9XG4gIHJlYWRvbmx5IGRhdGVfc2VhbmNlPzogeyBbaWQ6IHN0cmluZ106IERhdGVTZWFuY2UgfVxuICByZWFkb25seSBkZWJhdHM/OiB7IFtpZDogc3RyaW5nXTogRGViYXQgfVxuICByZWFkb25seSBkZWNjb2M/OiB7IFtpZDogc3RyaW5nXTogRGVjQ29jIH1cbiAgcmVhZG9ubHkgZGVucmFwPzogeyBbaWQ6IHN0cmluZ106IERlblJhcCB9XG4gIHJlYWRvbmx5IGRvY2F0dD86IHsgW2lkOiBzdHJpbmddOiBEb2NBdHQgfVxuICByZWFkb25seSBlY3I/OiB7IFtpZDogc3RyaW5nXTogRWNyIH1cbiAgcmVhZG9ubHkgZXRhbG9pPzogeyBbaWQ6IHN0cmluZ106IEV0YUxvaSB9XG4gIHJlYWRvbmx5IGxlY2Fzcz86IHsgW2lkOiBzdHJpbmddOiBMZWNBc3MgfVxuICByZWFkb25seSBsZWNhc3NyYXA/OiB7IFtpZDogc3RyaW5nXTogTGVjQXNzUmFwIH1cbiAgcmVhZG9ubHkgbGVjdHVyZT86IHsgW2lkOiBzdHJpbmddOiBMZWN0dXJlIH1cbiAgcmVhZG9ubHkgbG9pPzogeyBbaWQ6IHN0cmluZ106IExvaSB9XG4gIHJlYWRvbmx5IG9yZz86IHsgW2lkOiBzdHJpbmddOiBPcmcgfVxuICByZWFkb25seSBvcml0eHQ/OiB7IFtpZDogc3RyaW5nXTogT3JpVHh0IH1cbiAgcmVhZG9ubHkgcXVhPzogeyBbaWQ6IHN0cmluZ106IFF1YSB9XG4gIHJlYWRvbmx5IHJhcD86IHsgW2lkOiBzdHJpbmddOiBSYXAgfVxuICByZWFkb25seSBzY3I/OiB7IFtpZDogc3RyaW5nXTogU2NyIH1cbiAgcmVhZG9ubHkgdGV4dGU/OiB7IFtpZDogc3RyaW5nXTogVGV4dGUgfVxuICByZWFkb25seSB0eXBhdHQ/OiB7IFtpZDogc3RyaW5nXTogVHlwQXR0IH1cbiAgcmVhZG9ubHkgdHlwbGVjPzogeyBbaWQ6IHN0cmluZ106IFR5cExlYyB9XG4gIHJlYWRvbmx5IHR5cGxvaT86IHsgW2lkOiBzdHJpbmddOiBUeXBMb2kgfVxuICByZWFkb25seSB0eXB0eHQ/OiB7IFtpZDogc3RyaW5nXTogVHlwVHh0IH1cbiAgcmVhZG9ubHkgdHlwdXJsPzogeyBbaWQ6IHN0cmluZ106IFR5cFVybCB9XG4gIHJlYWRvbmx5IHR4dF9hbWVsaT86IHsgW2lkOiBzdHJpbmddOiBUeHRBbWVsaSB9XG59XG5cbnR5cGUgVmlzaXRlZElkc0J5VGFibGVOYW1lID0geyBbdGFibGVOYW1lOiBzdHJpbmddOiBTZXQ8bnVtYmVyIHwgc3RyaW5nPiB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRBdWRSZWZlcmVuY2VzKFxuICBhdWQ6IEF1ZCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuYXVkXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmF1ZCA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMoYXVkLmF1ZGNsZSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChhdWQuYXVkY2xlKVxuXG4gICAgaWYgKGF1ZC5vcmdjb2QgIT09IG51bGwgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbYXVkLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdWQub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGF1ZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QXV0ZXVyUmVmZXJlbmNlcyhcbiAgYXV0ZXVyOiBBdXRldXIsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmF1dGV1clxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5hdXRldXIgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGF1dGV1ci5hdXRjb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQoYXV0ZXVyLmF1dGNvZClcblxuICAgIGlmIChkYXRhLnF1YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBxdWEgPSBkYXRhLnF1YVthdXRldXIucXVhY29kXVxuICAgICAgaWYgKHF1YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5xdWEgPSBxdWFcbiAgICAgICAgLy8gaW5zZXJ0UXVhUmVmZXJlbmNlcyhxdWEsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPXG4gIH1cblxuICByZXR1cm4gYXV0ZXVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnREYXRlU2VhbmNlUmVmZXJlbmNlcyhcbiAgZGF0ZVNlYW5jZTogRGF0ZVNlYW5jZSxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZGF0ZV9zZWFuY2VcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZGF0ZV9zZWFuY2UgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGRhdGVTZWFuY2UuY29kZSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChkYXRlU2VhbmNlLmNvZGUpXG5cbiAgICBpZiAoZGF0ZVNlYW5jZS5kYXRlX3MgIT09IG51bGwgJiYgZGF0YS5kZWJhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGF0ZVN0cmluZyA9XG4gICAgICAgIGRhdGVTZWFuY2UuZGF0ZV9zIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgID8gZGF0ZVNlYW5jZS5kYXRlX3MudG9JU09TdHJpbmcoKVxuICAgICAgICAgIDogZGF0ZVNlYW5jZS5kYXRlX3NcbiAgICAgIGNvbnN0IGRlYmF0ID0gZGF0YS5kZWJhdHNbZGF0ZVN0cmluZ11cbiAgICAgIGlmIChkZWJhdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRhdGVTZWFuY2UuZGViYXQgPSBkZWJhdFxuICAgICAgICAvLyBpbnNlcnREZWJhdFJlZmVyZW5jZXMoZGViYXQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRlU2VhbmNlLnNjcnMgPSBbXVxuICAgIGlmIChkYXRlU2VhbmNlLnNjcmlkcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuc2NyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3Qgc2NyaWQgb2YgZGF0ZVNlYW5jZS5zY3JpZHMpIHtcbiAgICAgICAgY29uc3Qgc2NyID0gZGF0YS5zY3Jbc2NyaWRdXG4gICAgICAgIGlmIChzY3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRhdGVTZWFuY2Uuc2Nycy5wdXNoKHNjcilcbiAgICAgICAgICAvLyBpbnNlcnRTY3JSZWZlcmVuY2VzKHNjciwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGVTZWFuY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydERvY0F0dFJlZmVyZW5jZXMoXG4gIGRvY2F0dDogRG9jQXR0LFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5kb2NhdHRcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZG9jYXR0ID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhkb2NhdHQuZG9jYXR0Y2xlKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGRvY2F0dC5kb2NhdHRjbGUpXG5cbiAgICBpZiAoZG9jYXR0LnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtkb2NhdHQucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9jYXR0LnR5cGF0dGNvZCAhPT0gbnVsbCAmJiBkYXRhLnR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXBhdHQgPSBkYXRhLnR5cGF0dFtkb2NhdHQudHlwYXR0Y29kXVxuICAgICAgaWYgKHR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC50eXBhdHQgPSB0eXBhdHRcbiAgICAgICAgLy8gaW5zZXJ0VHlwQXR0UmVmZXJlbmNlcyh0eXBhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9jYXR0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRFY3JSZWZlcmVuY2VzKFxuICBlY3I6IEVjcixcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZWNyXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmVjciA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMoZWNyLmVjcm51bSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChlY3IuZWNybnVtKVxuXG4gICAgaWYgKGVjci5hdXRjb2QgIT09IG51bGwgJiYgZGF0YS5hdXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXV0ID0gZGF0YS5hdXRldXJbZWNyLmF1dGNvZF1cbiAgICAgIGlmIChhdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlY3IuYXV0ID0gYXV0XG4gICAgICAgIGluc2VydEF1dGV1clJlZmVyZW5jZXMoYXV0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGVjclxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGVjYXNzcmFwUmVmZXJlbmNlcyhcbiAgbGVjYXNzcmFwOiBMZWNBc3NSYXAsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2Fzc3JhcFxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWNhc3NyYXAgPSBuZXcgU2V0KClcbiAgfVxuICBjb25zdCBsZWNhc3JhcGlkID0gYCR7bGVjYXNzcmFwLmxlY2Fzc2lkdH0gJHtsZWNhc3NyYXAucmFwY29kfWBcbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhsZWNhc3JhcGlkKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY2FzcmFwaWQpXG5cbiAgICBpZiAobGVjYXNzcmFwLnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtsZWNhc3NyYXAucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY2Fzc3JhcC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjYXNzcmFwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMZWNhc3NSZWZlcmVuY2VzKFxuICBsZWNhc3M6IExlY0FzcyxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUubGVjYXNzXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2FzcyA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMobGVjYXNzLmxlY2Fzc2lkdCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChsZWNhc3MubGVjYXNzaWR0KVxuXG4gICAgaWYgKGxlY2Fzcy5jb2Rhc3MgIT09IG51bGwgJiYgZGF0YS5hc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXNzID0gZGF0YS5hc3NbbGVjYXNzLmNvZGFzc11cbiAgICAgIGlmIChhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3MuYXNzID0gYXNzXG4gICAgICAgIC8vIGluc2VydEFzc1JlZmVyZW5jZXMoYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxlY2Fzcy5vcmdjb2QgIT09IG51bGwgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbbGVjYXNzLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3Mub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmF1ZHMgPSBbXVxuICAgIGlmIChsZWNhc3MuYXVkY2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuYXVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgYXVkY2xlIG9mIGxlY2Fzcy5hdWRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGF1ZCA9IGRhdGEuYXVkW2F1ZGNsZV1cbiAgICAgICAgaWYgKGF1ZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmF1ZHMucHVzaChhdWQpXG4gICAgICAgICAgaW5zZXJ0QXVkUmVmZXJlbmNlcyhhdWQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxlY2Fzcy5kYXRlc1NlYW5jZXMgPSBbXVxuICAgIGlmIChsZWNhc3MuZGF0ZXNTZWFuY2VzQ29kZXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmRhdGVfc2VhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZGF0ZVNlYW5jZUNvZGUgb2YgbGVjYXNzLmRhdGVzU2VhbmNlc0NvZGVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGVTZWFuY2UgPSBkYXRhLmRhdGVfc2VhbmNlW2RhdGVTZWFuY2VDb2RlXVxuICAgICAgICBpZiAoZGF0ZVNlYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmRhdGVzU2VhbmNlcy5wdXNoKGRhdGVTZWFuY2UpXG4gICAgICAgICAgaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMoZGF0ZVNlYW5jZSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmxlY2Fzc3JhcHMgPSBbXVxuICAgIGlmIChsZWNhc3MubGVjYXNzcmFwaWRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3NyYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NyYXBpZCBvZiBsZWNhc3MubGVjYXNzcmFwaWRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2Fzc3JhcCA9IGRhdGEubGVjYXNzcmFwW2xlY2Fzc3JhcGlkXVxuICAgICAgICBpZiAobGVjYXNzcmFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZWNhc3MubGVjYXNzcmFwcy5wdXNoKGxlY2Fzc3JhcClcbiAgICAgICAgICBpbnNlcnRMZWNhc3NyYXBSZWZlcmVuY2VzKGxlY2Fzc3JhcCwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLnRleHRlcyA9IFtdXG4gICAgaWYgKGxlY2Fzcy50ZXhjb2RzICE9PSB1bmRlZmluZWQgJiYgZGF0YS50ZXh0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHRleGNvZCBvZiBsZWNhc3MudGV4Y29kcykge1xuICAgICAgICBjb25zdCB0ZXh0ZSA9IGRhdGEudGV4dGVbdGV4Y29kXVxuICAgICAgICBpZiAodGV4dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxlY2Fzcy50ZXh0ZXMucHVzaCh0ZXh0ZSlcbiAgICAgICAgICBpbnNlcnRUZXh0ZVJlZmVyZW5jZXModGV4dGUsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWNhc3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExlY3R1cmVSZWZlcmVuY2VzKFxuICBsZWN0dXJlOiBMZWN0dXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWN0dXJlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY3R1cmUgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxlY3R1cmUubGVjaWR0KSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY3R1cmUubGVjaWR0KVxuXG4gICAgaWYgKGxlY3R1cmUudHlwbGVjY29kICE9PSBudWxsICYmIGRhdGEudHlwbGVjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxlYyA9IGRhdGEudHlwbGVjW2xlY3R1cmUudHlwbGVjY29kXVxuICAgICAgaWYgKHR5cGxlYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY3R1cmUudHlwbGVjID0gdHlwbGVjXG4gICAgICAgIC8vIGluc2VydFR5cGxlY1JlZmVyZW5jZXModHlwbGVjLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjdHVyZS5sZWNhc3NzID0gW11cbiAgICBpZiAobGVjdHVyZS5sZWNhc3NpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NpZHQgb2YgbGVjdHVyZS5sZWNhc3NpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2FzcyA9IGRhdGEubGVjYXNzW2xlY2Fzc2lkdF1cbiAgICAgICAgaWYgKGxlY2FzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjdHVyZS5sZWNhc3NzLnB1c2gobGVjYXNzKVxuICAgICAgICAgIGluc2VydExlY2Fzc1JlZmVyZW5jZXMobGVjYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjdHVyZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TG9pUmVmZXJlbmNlcyhcbiAgbG9pOiBMb2ksXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxvaVxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sb2kgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxvaS5sb2ljb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQobG9pLmxvaWNvZClcblxuICAgIGlmIChsb2kudHlwbG9pY29kICE9PSBudWxsICYmIGRhdGEudHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxvaSA9IGRhdGEudHlwbG9pW2xvaS50eXBsb2ljb2RdXG4gICAgICBpZiAodHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLnR5cGxvaSA9IHR5cGxvaVxuICAgICAgICAvLyBpbnNlcnRUeXBsb2lSZWZlcmVuY2VzKHR5cGxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZXRhbG9pY29kICE9PSBudWxsICYmIGRhdGEuZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGV0YWxvaSA9IGRhdGEuZXRhbG9pW2xvaS5ldGFsb2ljb2RdXG4gICAgICBpZiAoZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmV0YWxvaSA9IGV0YWxvaVxuICAgICAgICAvLyBpbnNlcnRFdGFsb2lSZWZlcmVuY2VzKGV0YWxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZGVjY29jY29kICE9PSBudWxsICYmIGRhdGEuZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRlY2NvYyA9IGRhdGEuZGVjY29jW2xvaS5kZWNjb2Njb2RdXG4gICAgICBpZiAoZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmRlY2NvYyA9IGRlY2NvY1xuICAgICAgICAvLyBpbnNlcnREZWNjb2NSZWZlcmVuY2VzKGRlY2NvYywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxvaS5sZWN0dXJlcyA9IFtdXG4gICAgaWYgKGxvaS5sZWNpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWN0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgbGVjaWR0IG9mIGxvaS5sZWNpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY3R1cmUgPSBkYXRhLmxlY3R1cmVbbGVjaWR0XVxuICAgICAgICBpZiAobGVjdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbG9pLmxlY3R1cmVzLnB1c2gobGVjdHVyZSlcbiAgICAgICAgICBpbnNlcnRMZWN0dXJlUmVmZXJlbmNlcyhsZWN0dXJlLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbG9pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRSYXBSZWZlcmVuY2VzKFxuICByYXA6IFJhcCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUucmFwXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnJhcCA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMocmFwLnJhcGNvZCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChyYXAucmFwY29kKVxuXG4gICAgaWYgKHJhcC5jb2RkZW5yYXAgIT09IG51bGwgJiYgZGF0YS5kZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGVucmFwID0gZGF0YS5kZW5yYXBbcmFwLmNvZGRlbnJhcF1cbiAgICAgIGlmIChkZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByYXAuZGVucmFwID0gZGVucmFwXG4gICAgICAgIC8vIGluc2VydERlbnJhcFJlZmVyZW5jZXMoZGVucmFwLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmFwLmRvY2F0dHMgPSBbXVxuICAgIGlmIChyYXAuZG9jYXR0Y2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuZG9jYXR0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZG9jYXR0Y2xlIG9mIHJhcC5kb2NhdHRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGRvY2F0dCA9IGRhdGEuZG9jYXR0W2RvY2F0dGNsZV1cbiAgICAgICAgaWYgKGRvY2F0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwLmRvY2F0dHMucHVzaChkb2NhdHQpXG4gICAgICAgICAgaW5zZXJ0RG9jQXR0UmVmZXJlbmNlcyhkb2NhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJhcC5lY3JzID0gW11cbiAgICBpZiAocmFwLmVjcm51bXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmVjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGVjcm51bSBvZiByYXAuZWNybnVtcykge1xuICAgICAgICBjb25zdCBlY3IgPSBkYXRhLmVjcltlY3JudW1dXG4gICAgICAgIGlmIChlY3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJhcC5lY3JzLnB1c2goZWNyKVxuICAgICAgICAgIGluc2VydEVjclJlZmVyZW5jZXMoZWNyLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByYXAub3JncyA9IFtdXG4gICAgaWYgKHJhcC5vcmdjb2RzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBvcmdjb2Qgb2YgcmFwLm9yZ2NvZHMpIHtcbiAgICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbb3JnY29kXVxuICAgICAgICBpZiAob3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByYXAub3Jncy5wdXNoKG9yZylcbiAgICAgICAgICAvLyBpbnNlcnRPcmdSZWZlcmVuY2VzKG9yZywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJhcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0VGV4dGVSZWZlcmVuY2VzKFxuICB0ZXh0ZTogVGV4dGUsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnRleHRlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnRleHRlID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyh0ZXh0ZS50ZXhjb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQodGV4dGUudGV4Y29kKVxuXG4gICAgdGV4dGUuZWNycyA9IFtdXG4gICAgaWYgKHRleHRlLmVjcm51bXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmVjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGVjcm51bSBvZiB0ZXh0ZS5lY3JudW1zKSB7XG4gICAgICAgIGNvbnN0IGVjciA9IGRhdGEuZWNyW2Vjcm51bV1cbiAgICAgICAgaWYgKGVjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGV4dGUuZWNycy5wdXNoKGVjcilcbiAgICAgICAgICBpbnNlcnRFY3JSZWZlcmVuY2VzKGVjciwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLm9yZ2NvZCAhPT0gbnVsbCAmJiBkYXRhLm9yZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmcgPSBkYXRhLm9yZ1t0ZXh0ZS5vcmdjb2RdXG4gICAgICBpZiAob3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLm9yaXR4dGNvZCAhPT0gbnVsbCAmJiBkYXRhLm9yaXR4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcml0eHQgPSBkYXRhLm9yaXR4dFt0ZXh0ZS5vcml0eHRjb2RdXG4gICAgICBpZiAob3JpdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUub3JpdHh0ID0gb3JpdHh0XG4gICAgICAgIC8vIGluc2VydE9yaXR4dFJlZmVyZW5jZXMob3JpdHh0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLnR4dEFtZWxpSWQgIT09IHVuZGVmaW5lZCAmJiBkYXRhLnR4dF9hbWVsaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eHRBbWVsaSA9IGRhdGEudHh0X2FtZWxpW3RleHRlLnR4dEFtZWxpSWRdXG4gICAgICBpZiAodHh0QW1lbGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS50eHRBbWVsaSA9IHR4dEFtZWxpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLnR5cHR4dGNvZCAhPT0gbnVsbCAmJiBkYXRhLnR5cHR4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXB0eHQgPSBkYXRhLnR5cHR4dFt0ZXh0ZS50eXB0eHRjb2RdXG4gICAgICBpZiAodHlwdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUudHlwdHh0ID0gdHlwdHh0XG4gICAgICAgIC8vIGluc2VydFR5cHR4dFJlZmVyZW5jZXModHlwdHh0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLnR5cHVybCAhPT0gbnVsbCAmJiBkYXRhLnR5cHVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXB1cmwgPSBkYXRhLnR5cHVybFt0ZXh0ZS50eXB1cmxdXG4gICAgICBpZiAodHlwdXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUubGlidHlwdXJsID0gdHlwdXJsLmxpYnR5cHVybFxuICAgICAgICAvLyBpbnNlcnRUeXB1cmxSZWZlcmVuY2VzKHR5cHVybCwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIHJldHVybiB0ZXh0ZVxufVxuIl19
499
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbnNlcnRBdWRSZWZlcmVuY2VzIiwiYXVkIiwiZGF0YSIsInZpc2l0ZWRJZHNCeVRhYmxlTmFtZSIsInZpc2l0ZWRJZHMiLCJ1bmRlZmluZWQiLCJTZXQiLCJoYXMiLCJhdWRjbGUiLCJhZGQiLCJvcmdjb2QiLCJvcmciLCJpbnNlcnRBdXRldXJSZWZlcmVuY2VzIiwiYXV0ZXVyIiwiYXV0Y29kIiwicXVhIiwicXVhY29kIiwiaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMiLCJkYXRlU2VhbmNlIiwiZGF0ZV9zZWFuY2UiLCJjb2RlIiwiZGF0ZV9zIiwiZGViYXRzIiwiZGF0ZVN0cmluZyIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsImRlYmF0Iiwic2NycyIsInNjcmlkcyIsInNjciIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJzIiwibiIsImRvbmUiLCJzY3JpZCIsInZhbHVlIiwicHVzaCIsImVyciIsImUiLCJmIiwiaW5zZXJ0RG9jQXR0UmVmZXJlbmNlcyIsImRvY2F0dCIsImRvY2F0dGNsZSIsInJhcGNvZCIsInJhcCIsImluc2VydFJhcFJlZmVyZW5jZXMiLCJ0eXBhdHRjb2QiLCJ0eXBhdHQiLCJpbnNlcnRFY3JSZWZlcmVuY2VzIiwiZWNyIiwiZWNybnVtIiwiYXV0IiwiaW5zZXJ0TGVjYXNzcmFwUmVmZXJlbmNlcyIsImxlY2Fzc3JhcCIsImxlY2FzcmFwaWQiLCJjb25jYXQiLCJsZWNhc3NpZHQiLCJpbnNlcnRMZWNhc3NSZWZlcmVuY2VzIiwibGVjYXNzIiwiY29kYXNzIiwiYXNzIiwiYXVkcyIsImF1ZGNsZXMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiZGF0ZXNTZWFuY2VzIiwiZGF0ZXNTZWFuY2VzQ29kZXMiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiZGF0ZVNlYW5jZUNvZGUiLCJsZWNhc3NyYXBzIiwibGVjYXNzcmFwaWRzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImxlY2Fzc3JhcGlkIiwidGV4dGVzIiwidGV4Y29kcyIsInRleHRlIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsInRleGNvZCIsImluc2VydFRleHRlUmVmZXJlbmNlcyIsImluc2VydExlY3R1cmVSZWZlcmVuY2VzIiwibGVjdHVyZSIsImxlY2lkdCIsInR5cGxlY2NvZCIsInR5cGxlYyIsImxlY2Fzc3MiLCJsZWNhc3NpZHRzIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsImluc2VydExvaVJlZmVyZW5jZXMiLCJsb2kiLCJsb2ljb2QiLCJ0eXBsb2ljb2QiLCJ0eXBsb2kiLCJldGFsb2ljb2QiLCJldGFsb2kiLCJkZWNjb2Njb2QiLCJkZWNjb2MiLCJsZWN0dXJlcyIsImxlY2lkdHMiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiY29kZGVucmFwIiwiZGVucmFwIiwiZG9jYXR0cyIsImRvY2F0dGNsZXMiLCJfaXRlcmF0b3I4IiwiX3N0ZXA4IiwiZWNycyIsImVjcm51bXMiLCJfaXRlcmF0b3I5IiwiX3N0ZXA5Iiwib3JncyIsIm9yZ2NvZHMiLCJfaXRlcmF0b3IxMCIsIl9zdGVwMTAiLCJfaXRlcmF0b3IxMSIsIl9zdGVwMTEiLCJvcml0eHRjb2QiLCJvcml0eHQiLCJ0eHRBbWVsaUlkIiwidHh0X2FtZWxpIiwidHh0QW1lbGkiLCJ0eXB0eHRjb2QiLCJ0eXB0eHQiLCJ0eXB1cmwiLCJsaWJ0eXB1cmwiXSwic291cmNlcyI6WyIuLi9zcmMvaW5zZXJ0ZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR4dEFtZWxpIH0gZnJvbSBcIi4vdHlwZXMvYW1lbGlcIlxuaW1wb3J0IHsgRGViYXQgfSBmcm9tIFwiLi90eXBlcy9kZWJhdHNcIlxuaW1wb3J0IHtcbiAgQXNzLFxuICBBdWQsXG4gIEF1dGV1cixcbiAgRGF0ZVNlYW5jZSxcbiAgRGVjQ29jLFxuICBEZW5SYXAsXG4gIERvY0F0dCxcbiAgRWNyLFxuICBFdGFMb2ksXG4gIExlY0FzcyxcbiAgTGVjQXNzUmFwLFxuICBMZWN0dXJlLFxuICBMb2ksXG4gIE9yZyxcbiAgT3JpVHh0LFxuICBRdWEsXG4gIFJhcCxcbiAgU2NyLFxuICBUZXh0ZSxcbiAgVHlwQXR0LFxuICBUeXBMZWMsXG4gIFR5cExvaSxcbiAgVHlwVHh0LFxuICBUeXBVcmwsXG59IGZyb20gXCIuL3R5cGVzL2Rvc2xlZ1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0RGF0YSB7XG4gIHJlYWRvbmx5IGFzcz86IHsgW2lkOiBzdHJpbmddOiBBc3MgfVxuICByZWFkb25seSBhdWQ/OiB7IFtpZDogc3RyaW5nXTogQXVkIH1cbiAgcmVhZG9ubHkgYXV0ZXVyPzogeyBbaWQ6IHN0cmluZ106IEF1dGV1ciB9XG4gIHJlYWRvbmx5IGRhdGVfc2VhbmNlPzogeyBbaWQ6IHN0cmluZ106IERhdGVTZWFuY2UgfVxuICByZWFkb25seSBkZWJhdHM/OiB7IFtpZDogc3RyaW5nXTogRGViYXQgfVxuICByZWFkb25seSBkZWNjb2M/OiB7IFtpZDogc3RyaW5nXTogRGVjQ29jIH1cbiAgcmVhZG9ubHkgZGVucmFwPzogeyBbaWQ6IHN0cmluZ106IERlblJhcCB9XG4gIHJlYWRvbmx5IGRvY2F0dD86IHsgW2lkOiBzdHJpbmddOiBEb2NBdHQgfVxuICByZWFkb25seSBlY3I/OiB7IFtpZDogc3RyaW5nXTogRWNyIH1cbiAgcmVhZG9ubHkgZXRhbG9pPzogeyBbaWQ6IHN0cmluZ106IEV0YUxvaSB9XG4gIHJlYWRvbmx5IGxlY2Fzcz86IHsgW2lkOiBzdHJpbmddOiBMZWNBc3MgfVxuICByZWFkb25seSBsZWNhc3NyYXA/OiB7IFtpZDogc3RyaW5nXTogTGVjQXNzUmFwIH1cbiAgcmVhZG9ubHkgbGVjdHVyZT86IHsgW2lkOiBzdHJpbmddOiBMZWN0dXJlIH1cbiAgcmVhZG9ubHkgbG9pPzogeyBbaWQ6IHN0cmluZ106IExvaSB9XG4gIHJlYWRvbmx5IG9yZz86IHsgW2lkOiBzdHJpbmddOiBPcmcgfVxuICByZWFkb25seSBvcml0eHQ/OiB7IFtpZDogc3RyaW5nXTogT3JpVHh0IH1cbiAgcmVhZG9ubHkgcXVhPzogeyBbaWQ6IHN0cmluZ106IFF1YSB9XG4gIHJlYWRvbmx5IHJhcD86IHsgW2lkOiBzdHJpbmddOiBSYXAgfVxuICByZWFkb25seSBzY3I/OiB7IFtpZDogc3RyaW5nXTogU2NyIH1cbiAgcmVhZG9ubHkgdGV4dGU/OiB7IFtpZDogc3RyaW5nXTogVGV4dGUgfVxuICByZWFkb25seSB0eXBhdHQ/OiB7IFtpZDogc3RyaW5nXTogVHlwQXR0IH1cbiAgcmVhZG9ubHkgdHlwbGVjPzogeyBbaWQ6IHN0cmluZ106IFR5cExlYyB9XG4gIHJlYWRvbmx5IHR5cGxvaT86IHsgW2lkOiBzdHJpbmddOiBUeXBMb2kgfVxuICByZWFkb25seSB0eXB0eHQ/OiB7IFtpZDogc3RyaW5nXTogVHlwVHh0IH1cbiAgcmVhZG9ubHkgdHlwdXJsPzogeyBbaWQ6IHN0cmluZ106IFR5cFVybCB9XG4gIHJlYWRvbmx5IHR4dF9hbWVsaT86IHsgW2lkOiBzdHJpbmddOiBUeHRBbWVsaSB9XG59XG5cbnR5cGUgVmlzaXRlZElkc0J5VGFibGVOYW1lID0geyBbdGFibGVOYW1lOiBzdHJpbmddOiBTZXQ8bnVtYmVyIHwgc3RyaW5nPiB9XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRBdWRSZWZlcmVuY2VzKFxuICBhdWQ6IEF1ZCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuYXVkXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmF1ZCA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMoYXVkLmF1ZGNsZSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChhdWQuYXVkY2xlKVxuXG4gICAgaWYgKGF1ZC5vcmdjb2QgIT09IG51bGwgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbYXVkLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhdWQub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGF1ZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QXV0ZXVyUmVmZXJlbmNlcyhcbiAgYXV0ZXVyOiBBdXRldXIsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmF1dGV1clxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5hdXRldXIgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGF1dGV1ci5hdXRjb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQoYXV0ZXVyLmF1dGNvZClcblxuICAgIGlmIChkYXRhLnF1YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBxdWEgPSBkYXRhLnF1YVthdXRldXIucXVhY29kXVxuICAgICAgaWYgKHF1YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGF1dGV1ci5xdWEgPSBxdWFcbiAgICAgICAgLy8gaW5zZXJ0UXVhUmVmZXJlbmNlcyhxdWEsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPXG4gIH1cblxuICByZXR1cm4gYXV0ZXVyXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnREYXRlU2VhbmNlUmVmZXJlbmNlcyhcbiAgZGF0ZVNlYW5jZTogRGF0ZVNlYW5jZSxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZGF0ZV9zZWFuY2VcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZGF0ZV9zZWFuY2UgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGRhdGVTZWFuY2UuY29kZSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChkYXRlU2VhbmNlLmNvZGUpXG5cbiAgICBpZiAoZGF0ZVNlYW5jZS5kYXRlX3MgIT09IG51bGwgJiYgZGF0YS5kZWJhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGF0ZVN0cmluZyA9XG4gICAgICAgIGRhdGVTZWFuY2UuZGF0ZV9zIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgID8gZGF0ZVNlYW5jZS5kYXRlX3MudG9JU09TdHJpbmcoKVxuICAgICAgICAgIDogZGF0ZVNlYW5jZS5kYXRlX3NcbiAgICAgIGNvbnN0IGRlYmF0ID0gZGF0YS5kZWJhdHNbZGF0ZVN0cmluZ11cbiAgICAgIGlmIChkZWJhdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRhdGVTZWFuY2UuZGViYXQgPSBkZWJhdFxuICAgICAgICAvLyBpbnNlcnREZWJhdFJlZmVyZW5jZXMoZGViYXQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRlU2VhbmNlLnNjcnMgPSBbXVxuICAgIGlmIChkYXRlU2VhbmNlLnNjcmlkcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuc2NyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3Qgc2NyaWQgb2YgZGF0ZVNlYW5jZS5zY3JpZHMpIHtcbiAgICAgICAgY29uc3Qgc2NyID0gZGF0YS5zY3Jbc2NyaWRdXG4gICAgICAgIGlmIChzY3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRhdGVTZWFuY2Uuc2Nycy5wdXNoKHNjcilcbiAgICAgICAgICAvLyBpbnNlcnRTY3JSZWZlcmVuY2VzKHNjciwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGVTZWFuY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydERvY0F0dFJlZmVyZW5jZXMoXG4gIGRvY2F0dDogRG9jQXR0LFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5kb2NhdHRcbiAgaWYgKHZpc2l0ZWRJZHMgPT09IHVuZGVmaW5lZCkge1xuICAgIHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZG9jYXR0ID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhkb2NhdHQuZG9jYXR0Y2xlKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGRvY2F0dC5kb2NhdHRjbGUpXG5cbiAgICBpZiAoZG9jYXR0LnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtkb2NhdHQucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9jYXR0LnR5cGF0dGNvZCAhPT0gbnVsbCAmJiBkYXRhLnR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXBhdHQgPSBkYXRhLnR5cGF0dFtkb2NhdHQudHlwYXR0Y29kXVxuICAgICAgaWYgKHR5cGF0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRvY2F0dC50eXBhdHQgPSB0eXBhdHRcbiAgICAgICAgLy8gaW5zZXJ0VHlwQXR0UmVmZXJlbmNlcyh0eXBhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9jYXR0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRFY3JSZWZlcmVuY2VzKFxuICBlY3I6IEVjcixcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUuZWNyXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmVjciA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMoZWNyLmVjcm51bSkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChlY3IuZWNybnVtKVxuXG4gICAgaWYgKGVjci5hdXRjb2QgIT09IG51bGwgJiYgZGF0YS5hdXRldXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXV0ID0gZGF0YS5hdXRldXJbZWNyLmF1dGNvZF1cbiAgICAgIGlmIChhdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlY3IuYXV0ID0gYXV0XG4gICAgICAgIGluc2VydEF1dGV1clJlZmVyZW5jZXMoYXV0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgcmV0dXJuIGVjclxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TGVjYXNzcmFwUmVmZXJlbmNlcyhcbiAgbGVjYXNzcmFwOiBMZWNBc3NSYXAsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2Fzc3JhcFxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWNhc3NyYXAgPSBuZXcgU2V0KClcbiAgfVxuICBjb25zdCBsZWNhc3JhcGlkID0gYCR7bGVjYXNzcmFwLmxlY2Fzc2lkdH0gJHtsZWNhc3NyYXAucmFwY29kfWBcbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyhsZWNhc3JhcGlkKSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY2FzcmFwaWQpXG5cbiAgICBpZiAobGVjYXNzcmFwLnJhcGNvZCAhPT0gbnVsbCAmJiBkYXRhLnJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByYXAgPSBkYXRhLnJhcFtsZWNhc3NyYXAucmFwY29kXVxuICAgICAgaWYgKHJhcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY2Fzc3JhcC5yYXAgPSByYXBcbiAgICAgICAgaW5zZXJ0UmFwUmVmZXJlbmNlcyhyYXAsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjYXNzcmFwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRMZWNhc3NSZWZlcmVuY2VzKFxuICBsZWNhc3M6IExlY0FzcyxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUubGVjYXNzXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY2FzcyA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMobGVjYXNzLmxlY2Fzc2lkdCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChsZWNhc3MubGVjYXNzaWR0KVxuXG4gICAgaWYgKGxlY2Fzcy5jb2Rhc3MgIT09IG51bGwgJiYgZGF0YS5hc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgYXNzID0gZGF0YS5hc3NbbGVjYXNzLmNvZGFzc11cbiAgICAgIGlmIChhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3MuYXNzID0gYXNzXG4gICAgICAgIC8vIGluc2VydEFzc1JlZmVyZW5jZXMoYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxlY2Fzcy5vcmdjb2QgIT09IG51bGwgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbbGVjYXNzLm9yZ2NvZF1cbiAgICAgIGlmIChvcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZWNhc3Mub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmF1ZHMgPSBbXVxuICAgIGlmIChsZWNhc3MuYXVkY2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuYXVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgYXVkY2xlIG9mIGxlY2Fzcy5hdWRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGF1ZCA9IGRhdGEuYXVkW2F1ZGNsZV1cbiAgICAgICAgaWYgKGF1ZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmF1ZHMucHVzaChhdWQpXG4gICAgICAgICAgaW5zZXJ0QXVkUmVmZXJlbmNlcyhhdWQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxlY2Fzcy5kYXRlc1NlYW5jZXMgPSBbXVxuICAgIGlmIChsZWNhc3MuZGF0ZXNTZWFuY2VzQ29kZXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmRhdGVfc2VhbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZGF0ZVNlYW5jZUNvZGUgb2YgbGVjYXNzLmRhdGVzU2VhbmNlc0NvZGVzKSB7XG4gICAgICAgIGNvbnN0IGRhdGVTZWFuY2UgPSBkYXRhLmRhdGVfc2VhbmNlW2RhdGVTZWFuY2VDb2RlXVxuICAgICAgICBpZiAoZGF0ZVNlYW5jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjYXNzLmRhdGVzU2VhbmNlcy5wdXNoKGRhdGVTZWFuY2UpXG4gICAgICAgICAgaW5zZXJ0RGF0ZVNlYW5jZVJlZmVyZW5jZXMoZGF0ZVNlYW5jZSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLmxlY2Fzc3JhcHMgPSBbXVxuICAgIGlmIChsZWNhc3MubGVjYXNzcmFwaWRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3NyYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NyYXBpZCBvZiBsZWNhc3MubGVjYXNzcmFwaWRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2Fzc3JhcCA9IGRhdGEubGVjYXNzcmFwW2xlY2Fzc3JhcGlkXVxuICAgICAgICBpZiAobGVjYXNzcmFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsZWNhc3MubGVjYXNzcmFwcy5wdXNoKGxlY2Fzc3JhcClcbiAgICAgICAgICBpbnNlcnRMZWNhc3NyYXBSZWZlcmVuY2VzKGxlY2Fzc3JhcCwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjYXNzLnRleHRlcyA9IFtdXG4gICAgaWYgKGxlY2Fzcy50ZXhjb2RzICE9PSB1bmRlZmluZWQgJiYgZGF0YS50ZXh0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IHRleGNvZCBvZiBsZWNhc3MudGV4Y29kcykge1xuICAgICAgICBjb25zdCB0ZXh0ZSA9IGRhdGEudGV4dGVbdGV4Y29kXVxuICAgICAgICBpZiAodGV4dGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxlY2Fzcy50ZXh0ZXMucHVzaCh0ZXh0ZSlcbiAgICAgICAgICBpbnNlcnRUZXh0ZVJlZmVyZW5jZXModGV4dGUsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWNhc3Ncbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExlY3R1cmVSZWZlcmVuY2VzKFxuICBsZWN0dXJlOiBMZWN0dXJlLFxuICBkYXRhOiBPdXRwdXREYXRhLFxuICB2aXNpdGVkSWRzQnlUYWJsZU5hbWU6IFZpc2l0ZWRJZHNCeVRhYmxlTmFtZSxcbikge1xuICBsZXQgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sZWN0dXJlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxlY3R1cmUgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxlY3R1cmUubGVjaWR0KSkge1xuICAgIHZpc2l0ZWRJZHMuYWRkKGxlY3R1cmUubGVjaWR0KVxuXG4gICAgaWYgKGxlY3R1cmUudHlwbGVjY29kICE9PSBudWxsICYmIGRhdGEudHlwbGVjICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxlYyA9IGRhdGEudHlwbGVjW2xlY3R1cmUudHlwbGVjY29kXVxuICAgICAgaWYgKHR5cGxlYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxlY3R1cmUudHlwbGVjID0gdHlwbGVjXG4gICAgICAgIC8vIGluc2VydFR5cGxlY1JlZmVyZW5jZXModHlwbGVjLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGVjdHVyZS5sZWNhc3NzID0gW11cbiAgICBpZiAobGVjdHVyZS5sZWNhc3NpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWNhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBsZWNhc3NpZHQgb2YgbGVjdHVyZS5sZWNhc3NpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY2FzcyA9IGRhdGEubGVjYXNzW2xlY2Fzc2lkdF1cbiAgICAgICAgaWYgKGxlY2FzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGVjdHVyZS5sZWNhc3NzLnB1c2gobGVjYXNzKVxuICAgICAgICAgIGluc2VydExlY2Fzc1JlZmVyZW5jZXMobGVjYXNzLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVjdHVyZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0TG9pUmVmZXJlbmNlcyhcbiAgbG9pOiBMb2ksXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLmxvaVxuICBpZiAodmlzaXRlZElkcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmlzaXRlZElkcyA9IHZpc2l0ZWRJZHNCeVRhYmxlTmFtZS5sb2kgPSBuZXcgU2V0KClcbiAgfVxuICBpZiAoIXZpc2l0ZWRJZHMuaGFzKGxvaS5sb2ljb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQobG9pLmxvaWNvZClcblxuICAgIGlmIChsb2kudHlwbG9pY29kICE9PSBudWxsICYmIGRhdGEudHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHR5cGxvaSA9IGRhdGEudHlwbG9pW2xvaS50eXBsb2ljb2RdXG4gICAgICBpZiAodHlwbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLnR5cGxvaSA9IHR5cGxvaVxuICAgICAgICAvLyBpbnNlcnRUeXBsb2lSZWZlcmVuY2VzKHR5cGxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZXRhbG9pY29kICE9PSBudWxsICYmIGRhdGEuZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGV0YWxvaSA9IGRhdGEuZXRhbG9pW2xvaS5ldGFsb2ljb2RdXG4gICAgICBpZiAoZXRhbG9pICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmV0YWxvaSA9IGV0YWxvaVxuICAgICAgICAvLyBpbnNlcnRFdGFsb2lSZWZlcmVuY2VzKGV0YWxvaSwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsb2kuZGVjY29jY29kICE9PSBudWxsICYmIGRhdGEuZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRlY2NvYyA9IGRhdGEuZGVjY29jW2xvaS5kZWNjb2Njb2RdXG4gICAgICBpZiAoZGVjY29jICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9pLmRlY2NvYyA9IGRlY2NvY1xuICAgICAgICAvLyBpbnNlcnREZWNjb2NSZWZlcmVuY2VzKGRlY2NvYywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxvaS5sZWN0dXJlcyA9IFtdXG4gICAgaWYgKGxvaS5sZWNpZHRzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5sZWN0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgbGVjaWR0IG9mIGxvaS5sZWNpZHRzKSB7XG4gICAgICAgIGNvbnN0IGxlY3R1cmUgPSBkYXRhLmxlY3R1cmVbbGVjaWR0XVxuICAgICAgICBpZiAobGVjdHVyZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbG9pLmxlY3R1cmVzLnB1c2gobGVjdHVyZSlcbiAgICAgICAgICBpbnNlcnRMZWN0dXJlUmVmZXJlbmNlcyhsZWN0dXJlLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbG9pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRSYXBSZWZlcmVuY2VzKFxuICByYXA6IFJhcCxcbiAgZGF0YTogT3V0cHV0RGF0YSxcbiAgdmlzaXRlZElkc0J5VGFibGVOYW1lOiBWaXNpdGVkSWRzQnlUYWJsZU5hbWUsXG4pIHtcbiAgbGV0IHZpc2l0ZWRJZHMgPSB2aXNpdGVkSWRzQnlUYWJsZU5hbWUucmFwXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnJhcCA9IG5ldyBTZXQoKVxuICB9XG4gIGlmICghdmlzaXRlZElkcy5oYXMocmFwLnJhcGNvZCkpIHtcbiAgICB2aXNpdGVkSWRzLmFkZChyYXAucmFwY29kKVxuXG4gICAgaWYgKHJhcC5jb2RkZW5yYXAgIT09IG51bGwgJiYgZGF0YS5kZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgZGVucmFwID0gZGF0YS5kZW5yYXBbcmFwLmNvZGRlbnJhcF1cbiAgICAgIGlmIChkZW5yYXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByYXAuZGVucmFwID0gZGVucmFwXG4gICAgICAgIC8vIGluc2VydERlbnJhcFJlZmVyZW5jZXMoZGVucmFwLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmFwLmRvY2F0dHMgPSBbXVxuICAgIGlmIChyYXAuZG9jYXR0Y2xlcyAhPT0gdW5kZWZpbmVkICYmIGRhdGEuZG9jYXR0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgZG9jYXR0Y2xlIG9mIHJhcC5kb2NhdHRjbGVzKSB7XG4gICAgICAgIGNvbnN0IGRvY2F0dCA9IGRhdGEuZG9jYXR0W2RvY2F0dGNsZV1cbiAgICAgICAgaWYgKGRvY2F0dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmFwLmRvY2F0dHMucHVzaChkb2NhdHQpXG4gICAgICAgICAgaW5zZXJ0RG9jQXR0UmVmZXJlbmNlcyhkb2NhdHQsIGRhdGEsIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJhcC5lY3JzID0gW11cbiAgICBpZiAocmFwLmVjcm51bXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmVjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGVjcm51bSBvZiByYXAuZWNybnVtcykge1xuICAgICAgICBjb25zdCBlY3IgPSBkYXRhLmVjcltlY3JudW1dXG4gICAgICAgIGlmIChlY3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJhcC5lY3JzLnB1c2goZWNyKVxuICAgICAgICAgIGluc2VydEVjclJlZmVyZW5jZXMoZWNyLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByYXAub3JncyA9IFtdXG4gICAgaWYgKHJhcC5vcmdjb2RzICE9PSB1bmRlZmluZWQgJiYgZGF0YS5vcmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBvcmdjb2Qgb2YgcmFwLm9yZ2NvZHMpIHtcbiAgICAgICAgY29uc3Qgb3JnID0gZGF0YS5vcmdbb3JnY29kXVxuICAgICAgICBpZiAob3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByYXAub3Jncy5wdXNoKG9yZylcbiAgICAgICAgICAvLyBpbnNlcnRPcmdSZWZlcmVuY2VzKG9yZywgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJhcFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0VGV4dGVSZWZlcmVuY2VzKFxuICB0ZXh0ZTogVGV4dGUsXG4gIGRhdGE6IE91dHB1dERhdGEsXG4gIHZpc2l0ZWRJZHNCeVRhYmxlTmFtZTogVmlzaXRlZElkc0J5VGFibGVOYW1lLFxuKSB7XG4gIGxldCB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnRleHRlXG4gIGlmICh2aXNpdGVkSWRzID09PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdGVkSWRzID0gdmlzaXRlZElkc0J5VGFibGVOYW1lLnRleHRlID0gbmV3IFNldCgpXG4gIH1cbiAgaWYgKCF2aXNpdGVkSWRzLmhhcyh0ZXh0ZS50ZXhjb2QpKSB7XG4gICAgdmlzaXRlZElkcy5hZGQodGV4dGUudGV4Y29kKVxuXG4gICAgdGV4dGUuZWNycyA9IFtdXG4gICAgaWYgKHRleHRlLmVjcm51bXMgIT09IHVuZGVmaW5lZCAmJiBkYXRhLmVjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IGVjcm51bSBvZiB0ZXh0ZS5lY3JudW1zKSB7XG4gICAgICAgIGNvbnN0IGVjciA9IGRhdGEuZWNyW2Vjcm51bV1cbiAgICAgICAgaWYgKGVjciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGV4dGUuZWNycy5wdXNoKGVjcilcbiAgICAgICAgICBpbnNlcnRFY3JSZWZlcmVuY2VzKGVjciwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLm9yZ2NvZCAhPT0gbnVsbCAmJiBkYXRhLm9yZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcmcgPSBkYXRhLm9yZ1t0ZXh0ZS5vcmdjb2RdXG4gICAgICBpZiAob3JnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUub3JnID0gb3JnXG4gICAgICAgIC8vIGluc2VydE9yZ1JlZmVyZW5jZXMob3JnLCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLm9yaXR4dGNvZCAhPT0gbnVsbCAmJiBkYXRhLm9yaXR4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBvcml0eHQgPSBkYXRhLm9yaXR4dFt0ZXh0ZS5vcml0eHRjb2RdXG4gICAgICBpZiAob3JpdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUub3JpdHh0ID0gb3JpdHh0XG4gICAgICAgIC8vIGluc2VydE9yaXR4dFJlZmVyZW5jZXMob3JpdHh0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLnR4dEFtZWxpSWQgIT09IHVuZGVmaW5lZCAmJiBkYXRhLnR4dF9hbWVsaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eHRBbWVsaSA9IGRhdGEudHh0X2FtZWxpW3RleHRlLnR4dEFtZWxpSWRdXG4gICAgICBpZiAodHh0QW1lbGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0ZXh0ZS50eHRBbWVsaSA9IHR4dEFtZWxpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLnR5cHR4dGNvZCAhPT0gbnVsbCAmJiBkYXRhLnR5cHR4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXB0eHQgPSBkYXRhLnR5cHR4dFt0ZXh0ZS50eXB0eHRjb2RdXG4gICAgICBpZiAodHlwdHh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUudHlwdHh0ID0gdHlwdHh0XG4gICAgICAgIC8vIGluc2VydFR5cHR4dFJlZmVyZW5jZXModHlwdHh0LCBkYXRhLCB2aXNpdGVkSWRzQnlUYWJsZU5hbWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRleHRlLnR5cHVybCAhPT0gbnVsbCAmJiBkYXRhLnR5cHVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0eXB1cmwgPSBkYXRhLnR5cHVybFt0ZXh0ZS50eXB1cmxdXG4gICAgICBpZiAodHlwdXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGV4dGUubGlidHlwdXJsID0gdHlwdXJsLmxpYnR5cHVybFxuICAgICAgICAvLyBpbnNlcnRUeXB1cmxSZWZlcmVuY2VzKHR5cHVybCwgZGF0YSwgdmlzaXRlZElkc0J5VGFibGVOYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIHJldHVybiB0ZXh0ZVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNERPLFNBQVNBLG1CQUFtQkEsQ0FDakNDLEdBQVEsRUFDUkMsSUFBZ0IsRUFDaEJDLHFCQUE0QyxFQUM1QztFQUNBLElBQUlDLFVBQVUsR0FBR0QscUJBQXFCLENBQUNGLEdBQUc7RUFDMUMsSUFBSUcsVUFBVSxLQUFLQyxTQUFTLEVBQUU7SUFDNUJELFVBQVUsR0FBR0QscUJBQXFCLENBQUNGLEdBQUcsR0FBRyxJQUFJSyxHQUFHLENBQUMsQ0FBQztFQUNwRDtFQUNBLElBQUksQ0FBQ0YsVUFBVSxDQUFDRyxHQUFHLENBQUNOLEdBQUcsQ0FBQ08sTUFBTSxDQUFDLEVBQUU7SUFDL0JKLFVBQVUsQ0FBQ0ssR0FBRyxDQUFDUixHQUFHLENBQUNPLE1BQU0sQ0FBQztJQUUxQixJQUFJUCxHQUFHLENBQUNTLE1BQU0sS0FBSyxJQUFJLElBQUlSLElBQUksQ0FBQ1MsR0FBRyxLQUFLTixTQUFTLEVBQUU7TUFDakQsSUFBTU0sR0FBRyxHQUFHVCxJQUFJLENBQUNTLEdBQUcsQ0FBQ1YsR0FBRyxDQUFDUyxNQUFNLENBQUM7TUFDaEMsSUFBSUMsR0FBRyxLQUFLTixTQUFTLEVBQUU7UUFDckJKLEdBQUcsQ0FBQ1UsR0FBRyxH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