@tricoteuses/assemblee 1.0.0-next.2 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +2 -0
  2. package/lib/api.js +23 -7
  3. package/lib/api.mjs +41 -0
  4. package/lib/bugs/acteur-00010/plugin.test.js +139 -33
  5. package/lib/bugs/acteur-00010/plugin.test.mjs +33 -0
  6. package/lib/bugs/acteur-00010.js +166 -24
  7. package/lib/bugs/acteur-00010.mjs +31 -0
  8. package/lib/bugs/agenda-00002/plugin.test.js +178 -52
  9. package/lib/bugs/agenda-00002/plugin.test.mjs +52 -0
  10. package/lib/bugs/agenda-00002.js +507 -143
  11. package/lib/bugs/agenda-00002.mjs +197 -0
  12. package/lib/bugs/agenda-00008/plugin.test.js +143 -31
  13. package/lib/bugs/agenda-00008/plugin.test.mjs +31 -0
  14. package/lib/bugs/agenda-00008.js +180 -25
  15. package/lib/bugs/agenda-00008.mjs +30 -0
  16. package/lib/bugs/agenda-00011/plugin.test.js +371 -156
  17. package/lib/bugs/agenda-00011/plugin.test.mjs +156 -0
  18. package/lib/bugs/agenda-00011.js +416 -117
  19. package/lib/bugs/agenda-00011.mjs +150 -0
  20. package/lib/bugs.js +591 -54
  21. package/lib/bugs.mjs +93 -0
  22. package/lib/cleaners/actes_legislatifs.js +149 -61
  23. package/lib/cleaners/actes_legislatifs.mjs +311 -0
  24. package/lib/cleaners/acteurs.js +255 -123
  25. package/lib/cleaners/acteurs.mjs +211 -0
  26. package/lib/cleaners/amendements.js +242 -117
  27. package/lib/cleaners/amendements.mjs +292 -0
  28. package/lib/cleaners/documents.js +147 -62
  29. package/lib/cleaners/documents.mjs +162 -0
  30. package/lib/cleaners/dossiers_legislatifs.js +132 -45
  31. package/lib/cleaners/dossiers_legislatifs.mjs +123 -0
  32. package/lib/cleaners/index.js +64 -8
  33. package/lib/cleaners/index.mjs +8 -0
  34. package/lib/cleaners/organes.js +54 -21
  35. package/lib/cleaners/organes.mjs +64 -0
  36. package/lib/cleaners/reunions.js +237 -127
  37. package/lib/cleaners/reunions.mjs +318 -0
  38. package/lib/cleaners/scrutins.js +261 -99
  39. package/lib/cleaners/scrutins.mjs +254 -0
  40. package/lib/cleaners/xml.js +81 -16
  41. package/lib/cleaners/xml.mjs +42 -0
  42. package/lib/datasets.js +284 -153
  43. package/lib/datasets.mjs +596 -0
  44. package/lib/dates.js +93 -34
  45. package/lib/dates.mjs +98 -0
  46. package/lib/dossiers_legislatifs.js +107 -33
  47. package/lib/dossiers_legislatifs.mjs +215 -0
  48. package/lib/file_systems.js +203 -35
  49. package/lib/file_systems.mjs +64 -0
  50. package/lib/git.js +139 -41
  51. package/lib/git.mjs +114 -0
  52. package/lib/index.js +310 -16
  53. package/lib/index.mjs +16 -0
  54. package/lib/inserters.js +355 -131
  55. package/lib/inserters.mjs +413 -0
  56. package/lib/loaders.js +900 -440
  57. package/lib/loaders.mjs +678 -0
  58. package/lib/organes.js +15 -5
  59. package/lib/organes.mjs +18 -0
  60. package/lib/parsers/documents.js +241 -89
  61. package/lib/parsers/documents.mjs +433 -0
  62. package/lib/parsers/index.js +36 -3
  63. package/lib/parsers/index.mjs +3 -0
  64. package/lib/parsers/recherche_amendements.js +616 -173
  65. package/lib/parsers/recherche_amendements.mjs +189 -0
  66. package/lib/raw_types/acteurs_et_organes.d.ts +36 -148
  67. package/lib/raw_types/acteurs_et_organes.js +228 -506
  68. package/lib/raw_types/acteurs_et_organes.mjs +1240 -0
  69. package/lib/raw_types/agendas.js +165 -75
  70. package/lib/raw_types/agendas.mjs +944 -0
  71. package/lib/raw_types/amendements.js +165 -77
  72. package/lib/raw_types/amendements.mjs +1040 -0
  73. package/lib/raw_types/dossiers_legislatifs.d.ts +1 -43
  74. package/lib/raw_types/dossiers_legislatifs.js +181 -143
  75. package/lib/raw_types/dossiers_legislatifs.mjs +1792 -0
  76. package/lib/raw_types/scrutins.js +144 -61
  77. package/lib/raw_types/scrutins.mjs +645 -0
  78. package/lib/scripts/bugs_helper.js +657 -155
  79. package/lib/scripts/bugs_helper.mjs +286 -0
  80. package/lib/scripts/clean_data.js +380 -145
  81. package/lib/scripts/clean_data.mjs +190 -0
  82. package/lib/scripts/clean_reorganized_data.js +627 -331
  83. package/lib/scripts/clean_reorganized_data.mjs +520 -0
  84. package/lib/scripts/diff_amendements.js +159 -73
  85. package/lib/scripts/diff_amendements.mjs +234 -0
  86. package/lib/scripts/document_dossiers_legislatifs.js +570 -288
  87. package/lib/scripts/document_dossiers_legislatifs.mjs +494 -0
  88. package/lib/scripts/get_today_reunions.js +37 -20
  89. package/lib/scripts/get_today_reunions.mjs +41 -0
  90. package/lib/scripts/merge_scrutins.js +121 -39
  91. package/lib/scripts/merge_scrutins.mjs +69 -0
  92. package/lib/scripts/parse_textes_lois.js +179 -125
  93. package/lib/scripts/parse_textes_lois.mjs +215 -0
  94. package/lib/scripts/raw_types_from_amendements.js +276 -77
  95. package/lib/scripts/raw_types_from_amendements.mjs +118 -0
  96. package/lib/scripts/reorganize_data.js +867 -446
  97. package/lib/scripts/reorganize_data.mjs +712 -0
  98. package/lib/scripts/retrieve_deputes_photos.js +378 -157
  99. package/lib/scripts/retrieve_deputes_photos.mjs +230 -0
  100. package/lib/scripts/retrieve_documents.js +648 -172
  101. package/lib/scripts/retrieve_documents.mjs +292 -0
  102. package/lib/scripts/retrieve_open_data.js +286 -85
  103. package/lib/scripts/retrieve_open_data.mjs +125 -0
  104. package/lib/scripts/retrieve_pending_amendments.js +302 -69
  105. package/lib/scripts/retrieve_pending_amendments.mjs +130 -0
  106. package/lib/scripts/retrieve_senateurs_photos.js +374 -198
  107. package/lib/scripts/retrieve_senateurs_photos.mjs +277 -0
  108. package/lib/scripts/retrieve_textes_lois.js +343 -89
  109. package/lib/scripts/retrieve_textes_lois.mjs +168 -0
  110. package/lib/scripts/test_load.js +30 -11
  111. package/lib/scripts/test_load.mjs +26 -0
  112. package/lib/scripts/test_load_big_files.js +30 -11
  113. package/lib/scripts/test_load_big_files.mjs +26 -0
  114. package/lib/scripts/validate_json.js +370 -120
  115. package/lib/scripts/validate_json.mjs +216 -0
  116. package/lib/shared_types/codes_actes.js +50 -15
  117. package/lib/shared_types/codes_actes.mjs +228 -0
  118. package/lib/strings.js +16 -3
  119. package/lib/strings.mjs +7 -0
  120. package/lib/types/acteurs_et_organes.js +156 -71
  121. package/lib/types/acteurs_et_organes.mjs +918 -0
  122. package/lib/types/agendas.js +154 -67
  123. package/lib/types/agendas.mjs +623 -0
  124. package/lib/types/amendements.js +166 -77
  125. package/lib/types/amendements.mjs +885 -0
  126. package/lib/types/dossiers_legislatifs.d.ts +1 -42
  127. package/lib/types/dossiers_legislatifs.js +182 -143
  128. package/lib/types/dossiers_legislatifs.mjs +1120 -0
  129. package/lib/types/legislatures.js +12 -3
  130. package/lib/types/legislatures.mjs +9 -0
  131. package/lib/types/scrutins.js +144 -61
  132. package/lib/types/scrutins.mjs +528 -0
  133. package/lib/urls.js +44 -25
  134. package/lib/urls.mjs +201 -0
  135. package/package.json +33 -12
@@ -1,27 +1,96 @@
1
- import assert from "assert";
2
- import commandLineArgs from "command-line-args";
3
- import fs from "fs";
4
- import path from "path";
5
- import { cleanActeur } from "../cleaners/acteurs.js";
6
- import { cleanTexteLegislatif } from "../cleaners/amendements.js";
7
- import { cleanDocumentOrDivision } from "../cleaners/documents.js";
8
- import { cleanDossierParlementaire } from "../cleaners/dossiers_legislatifs.js";
9
- import { cleanOrgane } from "../cleaners/organes.js";
10
- import { cleanReunion } from "../cleaners/reunions.js";
11
- import { cleanScrutin } from "../cleaners/scrutins.js";
12
- import { datasets, EnabledDatasets } from "../datasets.js";
13
- import { existingDateToJson, patchedDateToJson } from "../dates.js";
14
- import { Convert as ActeursEtOrganesConvert } from "../types/acteurs_et_organes.js";
15
- import { Convert as AgendasConvert } from "../types/agendas.js";
16
- import { Convert as AmendementsConvert } from "../types/amendements.js";
17
- import { Convert as DossiersLegislatifsConvert } from "../types/dossiers_legislatifs.js";
18
- import { Convert as ScrutinsConvert } from "../types/scrutins.js";
19
- import { Convert as ActeursEtOrganesRawConvert } from "../raw_types/acteurs_et_organes.js";
20
- import { Convert as AgendasRawConvert } from "../raw_types/agendas.js";
21
- import { Convert as AmendementsRawConvert } from "../raw_types/amendements.js";
22
- import { Convert as DossiersLegislatifsRawConvert } from "../raw_types/dossiers_legislatifs.js";
23
- import { Convert as ScrutinsRawConvert } from "../raw_types/scrutins.js";
24
- const optionsDefinitions = [{
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.array.slice.js");
4
+
5
+ require("core-js/modules/es.function.name.js");
6
+
7
+ require("core-js/modules/es.array.from.js");
8
+
9
+ require("core-js/modules/es.string.iterator.js");
10
+
11
+ require("core-js/modules/es.symbol.js");
12
+
13
+ require("core-js/modules/es.symbol.description.js");
14
+
15
+ require("core-js/modules/es.symbol.iterator.js");
16
+
17
+ require("core-js/modules/es.array.iterator.js");
18
+
19
+ require("core-js/modules/web.dom-collections.iterator.js");
20
+
21
+ require("core-js/modules/es.array.is-array.js");
22
+
23
+ require("core-js/modules/es.date.to-json.js");
24
+
25
+ require("core-js/modules/es.date.to-string.js");
26
+
27
+ require("core-js/modules/es.array.map.js");
28
+
29
+ require("core-js/modules/es.array.reduce.js");
30
+
31
+ require("core-js/modules/es.object.to-string.js");
32
+
33
+ require("core-js/modules/es.array.join.js");
34
+
35
+ require("core-js/modules/es.regexp.exec.js");
36
+
37
+ require("core-js/modules/es.string.replace.js");
38
+
39
+ var _assert = _interopRequireDefault(require("assert"));
40
+
41
+ var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
42
+
43
+ var _fs = _interopRequireDefault(require("fs"));
44
+
45
+ var _path = _interopRequireDefault(require("path"));
46
+
47
+ var _acteurs = require("../cleaners/acteurs");
48
+
49
+ var _amendements = require("../cleaners/amendements");
50
+
51
+ var _documents = require("../cleaners/documents");
52
+
53
+ var _dossiers_legislatifs = require("../cleaners/dossiers_legislatifs");
54
+
55
+ var _organes = require("../cleaners/organes");
56
+
57
+ var _reunions = require("../cleaners/reunions");
58
+
59
+ var _scrutins = require("../cleaners/scrutins");
60
+
61
+ var _datasets = require("../datasets");
62
+
63
+ var _dates = require("../dates");
64
+
65
+ var _acteurs_et_organes = require("../types/acteurs_et_organes");
66
+
67
+ var _agendas = require("../types/agendas");
68
+
69
+ var _amendements2 = require("../types/amendements");
70
+
71
+ var _dossiers_legislatifs2 = require("../types/dossiers_legislatifs");
72
+
73
+ var _scrutins2 = require("../types/scrutins");
74
+
75
+ var _acteurs_et_organes2 = require("../raw_types/acteurs_et_organes");
76
+
77
+ var _agendas2 = require("../raw_types/agendas");
78
+
79
+ var _amendements3 = require("../raw_types/amendements");
80
+
81
+ var _dossiers_legislatifs3 = require("../raw_types/dossiers_legislatifs");
82
+
83
+ var _scrutins3 = require("../raw_types/scrutins");
84
+
85
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
86
+
87
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
88
+
89
+ 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); }
90
+
91
+ 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; }
92
+
93
+ var optionsDefinitions = [{
25
94
  alias: "k",
26
95
  defaultValue: ["All"],
27
96
  help: "categories of datasets to reorganize",
@@ -34,157 +103,323 @@ const optionsDefinitions = [{
34
103
  name: "dataDir",
35
104
  type: String
36
105
  }];
37
- const options = commandLineArgs(optionsDefinitions);
106
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions);
38
107
 
39
108
  function cleanData(dataDir) {
40
- Date.prototype.toJSON = patchedDateToJson;
41
- options.categories.map(datasetName => assert.notStrictEqual(EnabledDatasets[datasetName], undefined, `Unknown name of dataset: ${datasetName}`));
42
- const enabledDatasets = options.categories.reduce((enabledDatasets, datasetName) => enabledDatasets | EnabledDatasets[datasetName], EnabledDatasets.None);
43
-
44
- if (enabledDatasets & EnabledDatasets.ActeursEtOrganes) {
45
- for (const dataset of datasets.acteursEtOrganes) {
46
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
47
- console.log(`Loading file: ${rawJsonFilePath}`);
48
- const rawJson = fs.readFileSync(rawJsonFilePath, {
49
- encoding: "utf8"
50
- });
51
- const acteursEtOrganes = ActeursEtOrganesRawConvert.toActeursEtOrganes(rawJson); // const acteurs = jp.query(acteursEtOrganes, "$.export.acteurs.acteur")[0]
52
-
53
- const organes = acteursEtOrganes.export.organes.organe;
54
- acteursEtOrganes.organes = organes;
55
- const acteurs = acteursEtOrganes.export.acteurs.acteur;
56
- acteursEtOrganes.acteurs = acteurs;
57
- delete acteursEtOrganes.export;
58
-
59
- for (const acteur of acteurs) {
60
- cleanActeur(acteur);
61
- }
109
+ Date.prototype.toJSON = _dates.patchedDateToJson;
110
+ options.categories.map(function (datasetName) {
111
+ return _assert["default"].notStrictEqual(_datasets.EnabledDatasets[datasetName], undefined, "Unknown name of dataset: ".concat(datasetName));
112
+ });
113
+ var enabledDatasets = options.categories.reduce(function (enabledDatasets, datasetName) {
114
+ return enabledDatasets | _datasets.EnabledDatasets[datasetName];
115
+ }, _datasets.EnabledDatasets.None);
62
116
 
63
- for (const organe of organes) {
64
- cleanOrgane(organe);
65
- }
117
+ if (enabledDatasets & _datasets.EnabledDatasets.ActeursEtOrganes) {
118
+ var _iterator = _createForOfIteratorHelper(_datasets.datasets.acteursEtOrganes),
119
+ _step;
120
+
121
+ try {
122
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
123
+ var dataset = _step.value;
124
+
125
+ var rawJsonFilePath = _path["default"].join(dataDir, dataset.filename);
126
+
127
+ console.log("Loading file: ".concat(rawJsonFilePath));
128
+
129
+ var rawJson = _fs["default"].readFileSync(rawJsonFilePath, {
130
+ encoding: "utf8"
131
+ });
132
+
133
+ var acteursEtOrganes = _acteurs_et_organes2.Convert.toActeursEtOrganes(rawJson); // const acteurs = jp.query(acteursEtOrganes, "$.export.acteurs.acteur")[0]
134
+
135
+
136
+ var organes = acteursEtOrganes["export"].organes.organe;
137
+ acteursEtOrganes.organes = organes;
138
+ var acteurs = acteursEtOrganes["export"].acteurs.acteur;
139
+ acteursEtOrganes.acteurs = acteurs;
140
+ delete acteursEtOrganes["export"];
141
+
142
+ var _iterator2 = _createForOfIteratorHelper(acteurs),
143
+ _step2;
144
+
145
+ try {
146
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
147
+ var acteur = _step2.value;
148
+ (0, _acteurs.cleanActeur)(acteur);
149
+ }
150
+ } catch (err) {
151
+ _iterator2.e(err);
152
+ } finally {
153
+ _iterator2.f();
154
+ }
155
+
156
+ var _iterator3 = _createForOfIteratorHelper(organes),
157
+ _step3;
158
+
159
+ try {
160
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
161
+ var organe = _step3.value;
162
+ (0, _organes.cleanOrgane)(organe);
163
+ }
164
+ } catch (err) {
165
+ _iterator3.e(err);
166
+ } finally {
167
+ _iterator3.f();
168
+ }
66
169
 
67
- const acteursEtOrganesJson = JSON.stringify(acteursEtOrganes, null, 2); // Validate generated JSON.
170
+ var acteursEtOrganesJson = JSON.stringify(acteursEtOrganes, null, 2); // Validate generated JSON.
68
171
 
69
- const acteursEtOrganesClean = ActeursEtOrganesConvert.toActeursEtOrganes(acteursEtOrganesJson);
70
- const acteursEtOrganesCleanJson = ActeursEtOrganesConvert.acteursEtOrganesToJson(acteursEtOrganesClean);
71
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
72
- fs.writeFileSync(jsonFilePath, acteursEtOrganesCleanJson, {
73
- encoding: "utf8"
74
- });
172
+ var acteursEtOrganesClean = _acteurs_et_organes.Convert.toActeursEtOrganes(acteursEtOrganesJson);
173
+
174
+ var acteursEtOrganesCleanJson = _acteurs_et_organes.Convert.acteursEtOrganesToJson(acteursEtOrganesClean);
175
+
176
+ var jsonFilePath = _path["default"].join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
177
+
178
+ _fs["default"].writeFileSync(jsonFilePath, acteursEtOrganesCleanJson, {
179
+ encoding: "utf8"
180
+ });
181
+ }
182
+ } catch (err) {
183
+ _iterator.e(err);
184
+ } finally {
185
+ _iterator.f();
75
186
  }
76
187
  }
77
188
 
78
- if (enabledDatasets & EnabledDatasets.Agendas) {
79
- for (const dataset of datasets.agendas) {
80
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
81
- console.log(`Loading file: ${rawJsonFilePath}`);
82
- const rawJson = fs.readFileSync(rawJsonFilePath, {
83
- encoding: "utf8"
84
- });
85
- const agendas = AgendasRawConvert.toAgendas(rawJson);
86
- agendas.reunions = agendas.reunions.reunion;
87
-
88
- for (const reunion of agendas.reunions) {
89
- cleanReunion(reunion);
90
- }
189
+ if (enabledDatasets & _datasets.EnabledDatasets.Agendas) {
190
+ var _iterator4 = _createForOfIteratorHelper(_datasets.datasets.agendas),
191
+ _step4;
192
+
193
+ try {
194
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
195
+ var _dataset = _step4.value;
196
+
197
+ var _rawJsonFilePath = _path["default"].join(dataDir, _dataset.filename);
198
+
199
+ console.log("Loading file: ".concat(_rawJsonFilePath));
200
+
201
+ var _rawJson = _fs["default"].readFileSync(_rawJsonFilePath, {
202
+ encoding: "utf8"
203
+ });
204
+
205
+ var agendas = _agendas2.Convert.toAgendas(_rawJson);
206
+
207
+ agendas.reunions = agendas.reunions.reunion;
208
+
209
+ var _iterator5 = _createForOfIteratorHelper(agendas.reunions),
210
+ _step5;
211
+
212
+ try {
213
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
214
+ var reunion = _step5.value;
215
+ (0, _reunions.cleanReunion)(reunion);
216
+ }
217
+ } catch (err) {
218
+ _iterator5.e(err);
219
+ } finally {
220
+ _iterator5.f();
221
+ }
222
+
223
+ var agendasJson = JSON.stringify(agendas, null, 2); // Validate generated JSON.
224
+
225
+ var agendasClean = _agendas.Convert.toAgendas(agendasJson);
91
226
 
92
- const agendasJson = JSON.stringify(agendas, null, 2); // Validate generated JSON.
227
+ var agendasCleanJson = _agendas.Convert.agendasToJson(agendasClean);
93
228
 
94
- const agendasClean = AgendasConvert.toAgendas(agendasJson);
95
- const agendasCleanJson = AgendasConvert.agendasToJson(agendasClean);
96
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
97
- fs.writeFileSync(jsonFilePath, agendasCleanJson, {
98
- encoding: "utf8"
99
- });
229
+ var _jsonFilePath = _path["default"].join(dataDir, _dataset.filename.replace(/\.json$/, "_nettoye.json"));
230
+
231
+ _fs["default"].writeFileSync(_jsonFilePath, agendasCleanJson, {
232
+ encoding: "utf8"
233
+ });
234
+ }
235
+ } catch (err) {
236
+ _iterator4.e(err);
237
+ } finally {
238
+ _iterator4.f();
100
239
  }
101
240
  }
102
241
 
103
- if (enabledDatasets & EnabledDatasets.Amendements) {
104
- for (const dataset of datasets.amendements) {
105
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
106
- console.log(`Loading file: ${rawJsonFilePath}`);
107
- const rawJson = fs.readFileSync(rawJsonFilePath, {
108
- encoding: "utf8"
109
- });
110
- const amendements = AmendementsRawConvert.toAmendements(rawJson);
111
- amendements.textesLegislatifs = amendements.textesEtAmendements.texteleg;
112
- delete amendements.textesEtAmendements;
113
-
114
- for (const texteLegislatif of amendements.textesLegislatifs) {
115
- cleanTexteLegislatif(texteLegislatif);
116
- }
242
+ if (enabledDatasets & _datasets.EnabledDatasets.Amendements) {
243
+ var _iterator6 = _createForOfIteratorHelper(_datasets.datasets.amendements),
244
+ _step6;
245
+
246
+ try {
247
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
248
+ var _dataset2 = _step6.value;
249
+
250
+ var _rawJsonFilePath2 = _path["default"].join(dataDir, _dataset2.filename);
251
+
252
+ console.log("Loading file: ".concat(_rawJsonFilePath2));
253
+
254
+ var _rawJson2 = _fs["default"].readFileSync(_rawJsonFilePath2, {
255
+ encoding: "utf8"
256
+ });
257
+
258
+ var amendements = _amendements3.Convert.toAmendements(_rawJson2);
259
+
260
+ amendements.textesLegislatifs = amendements.textesEtAmendements.texteleg;
261
+ delete amendements.textesEtAmendements;
262
+
263
+ var _iterator7 = _createForOfIteratorHelper(amendements.textesLegislatifs),
264
+ _step7;
265
+
266
+ try {
267
+ for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {
268
+ var texteLegislatif = _step7.value;
269
+ (0, _amendements.cleanTexteLegislatif)(texteLegislatif);
270
+ }
271
+ } catch (err) {
272
+ _iterator7.e(err);
273
+ } finally {
274
+ _iterator7.f();
275
+ }
276
+
277
+ var amendementsJson = JSON.stringify(amendements, null, 2); // Validate generated JSON.
278
+
279
+ var amendementsClean = _amendements2.Convert.toAmendements(amendementsJson);
280
+
281
+ var amendementsCleanJson = _amendements2.Convert.amendementsToJson(amendementsClean);
117
282
 
118
- const amendementsJson = JSON.stringify(amendements, null, 2); // Validate generated JSON.
283
+ var _jsonFilePath2 = _path["default"].join(dataDir, _dataset2.filename.replace(/\.json$/, "_nettoye.json"));
119
284
 
120
- const amendementsClean = AmendementsConvert.toAmendements(amendementsJson);
121
- const amendementsCleanJson = AmendementsConvert.amendementsToJson(amendementsClean);
122
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
123
- fs.writeFileSync(jsonFilePath, amendementsCleanJson, {
124
- encoding: "utf8"
125
- });
285
+ _fs["default"].writeFileSync(_jsonFilePath2, amendementsCleanJson, {
286
+ encoding: "utf8"
287
+ });
288
+ }
289
+ } catch (err) {
290
+ _iterator6.e(err);
291
+ } finally {
292
+ _iterator6.f();
126
293
  }
127
294
  }
128
295
 
129
- if (enabledDatasets & EnabledDatasets.DossiersLegislatifs) {
130
- for (const dataset of datasets.dossiersLegislatifs) {
131
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
132
- console.log(`Loading file: ${rawJsonFilePath}`);
133
- const rawJson = fs.readFileSync(rawJsonFilePath, {
134
- encoding: "utf8"
135
- });
136
- const dossiersLegislatifs = DossiersLegislatifsRawConvert.toDossiersLegislatifs(rawJson);
137
- dossiersLegislatifs.textesLegislatifs = dossiersLegislatifs.export.textesLegislatifs.document;
138
- dossiersLegislatifs.dossiersParlementaires = dossiersLegislatifs.export.dossiersLegislatifs.dossier.map(dossier => dossier.dossierParlementaire);
139
- delete dossiersLegislatifs.export;
140
-
141
- for (const document of dossiersLegislatifs.textesLegislatifs) {
142
- cleanDocumentOrDivision(document);
143
- }
296
+ if (enabledDatasets & _datasets.EnabledDatasets.DossiersLegislatifs) {
297
+ var _iterator8 = _createForOfIteratorHelper(_datasets.datasets.dossiersLegislatifs),
298
+ _step8;
144
299
 
145
- for (const dossierParlementaire of dossiersLegislatifs.dossiersParlementaires) {
146
- cleanDossierParlementaire(dossierParlementaire);
147
- }
300
+ try {
301
+ for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {
302
+ var _dataset3 = _step8.value;
303
+
304
+ var _rawJsonFilePath3 = _path["default"].join(dataDir, _dataset3.filename);
305
+
306
+ console.log("Loading file: ".concat(_rawJsonFilePath3));
307
+
308
+ var _rawJson3 = _fs["default"].readFileSync(_rawJsonFilePath3, {
309
+ encoding: "utf8"
310
+ });
311
+
312
+ var dossiersLegislatifs = _dossiers_legislatifs3.Convert.toDossiersLegislatifs(_rawJson3);
313
+
314
+ dossiersLegislatifs.textesLegislatifs = dossiersLegislatifs["export"].textesLegislatifs.document;
315
+ dossiersLegislatifs.dossiersParlementaires = dossiersLegislatifs["export"].dossiersLegislatifs.dossier.map(function (dossier) {
316
+ return dossier.dossierParlementaire;
317
+ });
318
+ delete dossiersLegislatifs["export"];
319
+
320
+ var _iterator9 = _createForOfIteratorHelper(dossiersLegislatifs.textesLegislatifs),
321
+ _step9;
322
+
323
+ try {
324
+ for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {
325
+ var document = _step9.value;
326
+ (0, _documents.cleanDocumentOrDivision)(document);
327
+ }
328
+ } catch (err) {
329
+ _iterator9.e(err);
330
+ } finally {
331
+ _iterator9.f();
332
+ }
333
+
334
+ var _iterator10 = _createForOfIteratorHelper(dossiersLegislatifs.dossiersParlementaires),
335
+ _step10;
336
+
337
+ try {
338
+ for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {
339
+ var dossierParlementaire = _step10.value;
340
+ (0, _dossiers_legislatifs.cleanDossierParlementaire)(dossierParlementaire);
341
+ }
342
+ } catch (err) {
343
+ _iterator10.e(err);
344
+ } finally {
345
+ _iterator10.f();
346
+ }
347
+
348
+ var dossiersLegislatifsJson = JSON.stringify(dossiersLegislatifs, null, 2); // Validate generated JSON.
349
+
350
+ var dossiersLegislatifsClean = _dossiers_legislatifs2.Convert.toDossiersLegislatifs(dossiersLegislatifsJson);
351
+
352
+ var dossiersLegislatifsCleanJson = _dossiers_legislatifs2.Convert.dossiersLegislatifsToJson(dossiersLegislatifsClean);
148
353
 
149
- const dossiersLegislatifsJson = JSON.stringify(dossiersLegislatifs, null, 2); // Validate generated JSON.
354
+ var _jsonFilePath3 = _path["default"].join(dataDir, _dataset3.filename.replace(/\.json$/, "_nettoye.json"));
150
355
 
151
- const dossiersLegislatifsClean = DossiersLegislatifsConvert.toDossiersLegislatifs(dossiersLegislatifsJson);
152
- const dossiersLegislatifsCleanJson = DossiersLegislatifsConvert.dossiersLegislatifsToJson(dossiersLegislatifsClean);
153
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
154
- fs.writeFileSync(jsonFilePath, dossiersLegislatifsCleanJson, {
155
- encoding: "utf8"
156
- });
356
+ _fs["default"].writeFileSync(_jsonFilePath3, dossiersLegislatifsCleanJson, {
357
+ encoding: "utf8"
358
+ });
359
+ }
360
+ } catch (err) {
361
+ _iterator8.e(err);
362
+ } finally {
363
+ _iterator8.f();
157
364
  }
158
365
  }
159
366
 
160
- if (enabledDatasets & EnabledDatasets.Scrutins) {
161
- for (const dataset of datasets.scrutins) {
162
- const rawJsonFilePath = path.join(dataDir, dataset.filename);
163
- console.log(`Loading file: ${rawJsonFilePath}`);
164
- const rawJson = fs.readFileSync(rawJsonFilePath, {
165
- encoding: "utf8"
166
- });
167
- const scrutins = ScrutinsRawConvert.toScrutins(rawJson);
168
- scrutins.scrutins = scrutins.scrutins.scrutin;
169
-
170
- for (const scrutin of scrutins.scrutins) {
171
- cleanScrutin(scrutin);
172
- }
367
+ if (enabledDatasets & _datasets.EnabledDatasets.Scrutins) {
368
+ var _iterator11 = _createForOfIteratorHelper(_datasets.datasets.scrutins),
369
+ _step11;
370
+
371
+ try {
372
+ for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {
373
+ var _dataset4 = _step11.value;
374
+
375
+ var _rawJsonFilePath4 = _path["default"].join(dataDir, _dataset4.filename);
376
+
377
+ console.log("Loading file: ".concat(_rawJsonFilePath4));
378
+
379
+ var _rawJson4 = _fs["default"].readFileSync(_rawJsonFilePath4, {
380
+ encoding: "utf8"
381
+ });
382
+
383
+ var scrutins = _scrutins3.Convert.toScrutins(_rawJson4);
173
384
 
174
- const scrutinsJson = JSON.stringify(scrutins, null, 2); // Validate generated JSON.
385
+ scrutins.scrutins = scrutins.scrutins.scrutin;
175
386
 
176
- const scrutinsClean = ScrutinsConvert.toScrutins(scrutinsJson);
177
- const scrutinsCleanJson = ScrutinsConvert.scrutinsToJson(scrutinsClean);
178
- const jsonFilePath = path.join(dataDir, dataset.filename.replace(/\.json$/, "_nettoye.json"));
179
- fs.writeFileSync(jsonFilePath, scrutinsCleanJson, {
180
- encoding: "utf8"
181
- });
387
+ var _iterator12 = _createForOfIteratorHelper(scrutins.scrutins),
388
+ _step12;
389
+
390
+ try {
391
+ for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {
392
+ var scrutin = _step12.value;
393
+ (0, _scrutins.cleanScrutin)(scrutin);
394
+ }
395
+ } catch (err) {
396
+ _iterator12.e(err);
397
+ } finally {
398
+ _iterator12.f();
399
+ }
400
+
401
+ var scrutinsJson = JSON.stringify(scrutins, null, 2); // Validate generated JSON.
402
+
403
+ var scrutinsClean = _scrutins2.Convert.toScrutins(scrutinsJson);
404
+
405
+ var scrutinsCleanJson = _scrutins2.Convert.scrutinsToJson(scrutinsClean);
406
+
407
+ var _jsonFilePath4 = _path["default"].join(dataDir, _dataset4.filename.replace(/\.json$/, "_nettoye.json"));
408
+
409
+ _fs["default"].writeFileSync(_jsonFilePath4, scrutinsCleanJson, {
410
+ encoding: "utf8"
411
+ });
412
+ }
413
+ } catch (err) {
414
+ _iterator11.e(err);
415
+ } finally {
416
+ _iterator11.f();
182
417
  }
183
418
  } // Restore standard conversion of dates to JSON.
184
419
 
185
420
 
186
- Date.prototype.toJSON = existingDateToJson;
421
+ Date.prototype.toJSON = _dates.existingDateToJson;
187
422
  }
188
423
 
189
424
  cleanData(options.dataDir);
190
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJjbGVhbkFjdGV1ciIsImNsZWFuVGV4dGVMZWdpc2xhdGlmIiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiY2xlYW5PcmdhbmUiLCJjbGVhblJldW5pb24iLCJjbGVhblNjcnV0aW4iLCJkYXRhc2V0cyIsIkVuYWJsZWREYXRhc2V0cyIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInBhdGNoZWREYXRlVG9Kc29uIiwiQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0IiwiQWdlbmRhc0NvbnZlcnQiLCJBbWVuZGVtZW50c0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsIlNjcnV0aW5zQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsIlNjcnV0aW5zUmF3Q29udmVydCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiZGVmYXVsdFZhbHVlIiwiaGVscCIsIm11bHRpcGxlIiwibmFtZSIsInR5cGUiLCJTdHJpbmciLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNsZWFuRGF0YSIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwibm90U3RyaWN0RXF1YWwiLCJ1bmRlZmluZWQiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwicmF3SnNvbkZpbGVQYXRoIiwiam9pbiIsImZpbGVuYW1lIiwiY29uc29sZSIsImxvZyIsInJhd0pzb24iLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsIm9yZ2FuZXMiLCJleHBvcnQiLCJvcmdhbmUiLCJhY3RldXJzIiwiYWN0ZXVyIiwiYWN0ZXVyc0V0T3JnYW5lc0pzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiYWN0ZXVyc0V0T3JnYW5lc0NsZWFuIiwiYWN0ZXVyc0V0T3JnYW5lc0NsZWFuSnNvbiIsImFjdGV1cnNFdE9yZ2FuZXNUb0pzb24iLCJqc29uRmlsZVBhdGgiLCJyZXBsYWNlIiwid3JpdGVGaWxlU3luYyIsIkFnZW5kYXMiLCJhZ2VuZGFzIiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwiYWdlbmRhc0pzb24iLCJhZ2VuZGFzQ2xlYW4iLCJhZ2VuZGFzQ2xlYW5Kc29uIiwiYWdlbmRhc1RvSnNvbiIsIkFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudHMiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJhbWVuZGVtZW50c0pzb24iLCJhbWVuZGVtZW50c0NsZWFuIiwiYW1lbmRlbWVudHNDbGVhbkpzb24iLCJhbWVuZGVtZW50c1RvSnNvbiIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llciIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llcnNMZWdpc2xhdGlmc0pzb24iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW4iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW5Kc29uIiwiZG9zc2llcnNMZWdpc2xhdGlmc1RvSnNvbiIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJ0b1NjcnV0aW5zIiwic2NydXRpbiIsInNjcnV0aW5zSnNvbiIsInNjcnV0aW5zQ2xlYW4iLCJzY3J1dGluc0NsZWFuSnNvbiIsInNjcnV0aW5zVG9Kc29uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvY2xlYW5fZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmc1wiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGNsZWFuQWN0ZXVyIH0gZnJvbSBcIi4uL2NsZWFuZXJzL2FjdGV1cnNcIlxuaW1wb3J0IHsgY2xlYW5UZXh0ZUxlZ2lzbGF0aWYgfSBmcm9tIFwiLi4vY2xlYW5lcnMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHsgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24gfSBmcm9tIFwiLi4vY2xlYW5lcnMvZG9jdW1lbnRzXCJcbmltcG9ydCB7IGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUgfSBmcm9tIFwiLi4vY2xlYW5lcnMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgY2xlYW5PcmdhbmUgfSBmcm9tIFwiLi4vY2xlYW5lcnMvb3JnYW5lc1wiXG5pbXBvcnQgeyBjbGVhblJldW5pb24gfSBmcm9tIFwiLi4vY2xlYW5lcnMvcmV1bmlvbnNcIlxuaW1wb3J0IHsgY2xlYW5TY3J1dGluIH0gZnJvbSBcIi4uL2NsZWFuZXJzL3NjcnV0aW5zXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQge1xuICBBY3RldXJzRXRPcmdhbmVzLFxuICBDb252ZXJ0IGFzIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LFxufSBmcm9tIFwiLi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IEFnZW5kYXMsIENvbnZlcnQgYXMgQWdlbmRhc0NvbnZlcnQgfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQge1xuICBBbWVuZGVtZW50cyxcbiAgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQsXG59IGZyb20gXCIuLi90eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBEb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LFxufSBmcm9tIFwiLi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW5zIH0gZnJvbSBcIi4uL3R5cGVzL3NjcnV0aW5zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQge1xuICBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LFxuICBEb3NzaWVyIGFzIERvc3NpZXJSYXcsXG59IGZyb20gXCIuLi9yYXdfdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3NjcnV0aW5zXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwia1wiLFxuICAgIGRlZmF1bHRWYWx1ZTogW1wiQWxsXCJdLFxuICAgIGhlbHA6IFwiY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZW9yZ2FuaXplXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJjYXRlZ29yaWVzXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbmZ1bmN0aW9uIGNsZWFuRGF0YShkYXRhRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gcGF0Y2hlZERhdGVUb0pzb25cblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBgVW5rbm93biBuYW1lIG9mIGRhdGFzZXQ6ICR7ZGF0YXNldE5hbWV9YCxcbiAgICApLFxuICApXG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IG9wdGlvbnMuY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWN0ZXVyc0V0T3JnYW5lcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgICBjb25zdCByYXdKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyYXdKc29uRmlsZVBhdGh9YClcbiAgICAgIGNvbnN0IHJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyYXdKc29uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lczogYW55ID1cbiAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKHJhd0pzb24pXG4gICAgICAvLyBjb25zdCBhY3RldXJzID0ganAucXVlcnkoYWN0ZXVyc0V0T3JnYW5lcywgXCIkLmV4cG9ydC5hY3RldXJzLmFjdGV1clwiKVswXVxuICAgICAgY29uc3Qgb3JnYW5lcyA9IGFjdGV1cnNFdE9yZ2FuZXMuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lXG4gICAgICBhY3RldXJzRXRPcmdhbmVzLm9yZ2FuZXMgPSBvcmdhbmVzXG4gICAgICBjb25zdCBhY3RldXJzID0gYWN0ZXVyc0V0T3JnYW5lcy5leHBvcnQuYWN0ZXVycy5hY3RldXJcbiAgICAgIGFjdGV1cnNFdE9yZ2FuZXMuYWN0ZXVycyA9IGFjdGV1cnNcbiAgICAgIGRlbGV0ZSBhY3RldXJzRXRPcmdhbmVzLmV4cG9ydFxuXG4gICAgICBmb3IgKGNvbnN0IGFjdGV1ciBvZiBhY3RldXJzKSB7XG4gICAgICAgIGNsZWFuQWN0ZXVyKGFjdGV1cilcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmUgb2Ygb3JnYW5lcykge1xuICAgICAgICBjbGVhbk9yZ2FuZShvcmdhbmUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYWN0ZXVyc0V0T3JnYW5lcyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgIClcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lc0NsZWFuOiBBY3RldXJzRXRPcmdhbmVzID1cbiAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKGFjdGV1cnNFdE9yZ2FuZXNKc29uKVxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lc0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQuYWN0ZXVyc0V0T3JnYW5lc1RvSnNvbihhY3RldXJzRXRPcmdhbmVzQ2xlYW4pXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBhY3RldXJzRXRPcmdhbmVzQ2xlYW5Kc29uLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBhZ2VuZGFzOiBhbnkgPSBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMocmF3SnNvbilcbiAgICAgIGFnZW5kYXMucmV1bmlvbnMgPSBhZ2VuZGFzLnJldW5pb25zLnJldW5pb25cblxuICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIGFnZW5kYXMucmV1bmlvbnMpIHtcbiAgICAgICAgY2xlYW5SZXVuaW9uKHJldW5pb24pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFnZW5kYXNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhZ2VuZGFzLCBudWxsLCAyKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBhZ2VuZGFzQ2xlYW46IEFnZW5kYXMgPSBBZ2VuZGFzQ29udmVydC50b0FnZW5kYXMoYWdlbmRhc0pzb24pXG4gICAgICBjb25zdCBhZ2VuZGFzQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICBBZ2VuZGFzQ29udmVydC5hZ2VuZGFzVG9Kc29uKGFnZW5kYXNDbGVhbilcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIGFnZW5kYXNDbGVhbkpzb24sIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzOiBhbnkgPSBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhyYXdKc29uKVxuICAgICAgYW1lbmRlbWVudHMudGV4dGVzTGVnaXNsYXRpZnMgPSBhbWVuZGVtZW50cy50ZXh0ZXNFdEFtZW5kZW1lbnRzLnRleHRlbGVnXG4gICAgICBkZWxldGUgYW1lbmRlbWVudHMudGV4dGVzRXRBbWVuZGVtZW50c1xuXG4gICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBjbGVhblRleHRlTGVnaXNsYXRpZih0ZXh0ZUxlZ2lzbGF0aWYpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudHMsIG51bGwsIDIpXG4gICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRzQ2xlYW46IEFtZW5kZW1lbnRzID1cbiAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudHMoYW1lbmRlbWVudHNKc29uKVxuICAgICAgY29uc3QgYW1lbmRlbWVudHNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIEFtZW5kZW1lbnRzQ29udmVydC5hbWVuZGVtZW50c1RvSnNvbihhbWVuZGVtZW50c0NsZWFuKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgYW1lbmRlbWVudHNDbGVhbkpzb24sIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzOiBhbnkgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMocmF3SnNvbilcbiAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMgPVxuICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLmV4cG9ydC50ZXh0ZXNMZWdpc2xhdGlmcy5kb2N1bWVudFxuICAgICAgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzID0gKFxuICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLmV4cG9ydC5kb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXIgYXMgRG9zc2llclJhd1tdXG4gICAgICApLm1hcCgoZG9zc2llcikgPT4gZG9zc2llci5kb3NzaWVyUGFybGVtZW50YWlyZSlcbiAgICAgIGRlbGV0ZSBkb3NzaWVyc0xlZ2lzbGF0aWZzLmV4cG9ydFxuXG4gICAgICBmb3IgKGNvbnN0IGRvY3VtZW50IG9mIGRvc3NpZXJzTGVnaXNsYXRpZnMudGV4dGVzTGVnaXNsYXRpZnMpIHtcbiAgICAgICAgY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24oZG9jdW1lbnQpXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy5kb3NzaWVyc1BhcmxlbWVudGFpcmVzKSB7XG4gICAgICAgIGNsZWFuRG9zc2llclBhcmxlbWVudGFpcmUoZG9zc2llclBhcmxlbWVudGFpcmUpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmcyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgMixcbiAgICAgIClcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmc0NsZWFuOiBEb3NzaWVyc0xlZ2lzbGF0aWZzID1cbiAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnNKc29uLFxuICAgICAgICApXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC5kb3NzaWVyc0xlZ2lzbGF0aWZzVG9Kc29uKFxuICAgICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbixcbiAgICAgICAgKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgZG9zc2llcnNMZWdpc2xhdGlmc0NsZWFuSnNvbiwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzY3J1dGluczogYW55ID0gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbnMocmF3SnNvbilcbiAgICAgIHNjcnV0aW5zLnNjcnV0aW5zID0gc2NydXRpbnMuc2NydXRpbnMuc2NydXRpblxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygc2NydXRpbnMuc2NydXRpbnMpIHtcbiAgICAgICAgY2xlYW5TY3J1dGluKHNjcnV0aW4pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjcnV0aW5zSnNvbjogc3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoc2NydXRpbnMsIG51bGwsIDIpXG4gICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgIGNvbnN0IHNjcnV0aW5zQ2xlYW46IFNjcnV0aW5zID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbnMoc2NydXRpbnNKc29uKVxuICAgICAgY29uc3Qgc2NydXRpbnNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIFNjcnV0aW5zQ29udmVydC5zY3J1dGluc1RvSnNvbihzY3J1dGluc0NsZWFuKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgc2NydXRpbnNDbGVhbkpzb24sIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxufVxuXG5jbGVhbkRhdGEob3B0aW9ucy5kYXRhRGlyKVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFQLE1BQW1CLFFBQW5CO0FBQ0EsT0FBT0MsZUFBUCxNQUE0QixtQkFBNUI7QUFDQSxPQUFPQyxFQUFQLE1BQWUsSUFBZjtBQUNBLE9BQU9DLElBQVAsTUFBaUIsTUFBakI7U0FFU0MsVztTQUNBQyxvQjtTQUNBQyx1QjtTQUNBQyx5QjtTQUNBQyxXO1NBQ0FDLFk7U0FDQUMsWTtTQUNBQyxRLEVB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
425
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImRlZmF1bHRWYWx1ZSIsImhlbHAiLCJtdWx0aXBsZSIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiZGVmYXVsdE9wdGlvbiIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJjbGVhbkRhdGEiLCJkYXRhRGlyIiwiRGF0ZSIsInByb3RvdHlwZSIsInRvSlNPTiIsInBhdGNoZWREYXRlVG9Kc29uIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwiYXNzZXJ0Iiwibm90U3RyaWN0RXF1YWwiLCJFbmFibGVkRGF0YXNldHMiLCJ1bmRlZmluZWQiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXRzIiwiYWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJyYXdKc29uRmlsZVBhdGgiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwiY29uc29sZSIsImxvZyIsInJhd0pzb24iLCJmcyIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJvcmdhbmVzIiwib3JnYW5lIiwiYWN0ZXVycyIsImFjdGV1ciIsImNsZWFuQWN0ZXVyIiwiY2xlYW5PcmdhbmUiLCJhY3RldXJzRXRPcmdhbmVzSnNvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJhY3RldXJzRXRPcmdhbmVzQ2xlYW4iLCJBY3RldXJzRXRPcmdhbmVzQ29udmVydCIsImFjdGV1cnNFdE9yZ2FuZXNDbGVhbkpzb24iLCJhY3RldXJzRXRPcmdhbmVzVG9Kc29uIiwianNvbkZpbGVQYXRoIiwicmVwbGFjZSIsIndyaXRlRmlsZVN5bmMiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsIkFnZW5kYXNSYXdDb252ZXJ0IiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJyZXVuaW9uIiwiY2xlYW5SZXVuaW9uIiwiYWdlbmRhc0pzb24iLCJhZ2VuZGFzQ2xlYW4iLCJBZ2VuZGFzQ29udmVydCIsImFnZW5kYXNDbGVhbkpzb24iLCJhZ2VuZGFzVG9Kc29uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsIkFtZW5kZW1lbnRzUmF3Q29udmVydCIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsInRleHRlTGVnaXNsYXRpZiIsImNsZWFuVGV4dGVMZWdpc2xhdGlmIiwiYW1lbmRlbWVudHNKc29uIiwiYW1lbmRlbWVudHNDbGVhbiIsIkFtZW5kZW1lbnRzQ29udmVydCIsImFtZW5kZW1lbnRzQ2xlYW5Kc29uIiwiYW1lbmRlbWVudHNUb0pzb24iLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llciIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiY2xlYW5Eb2N1bWVudE9yRGl2aXNpb24iLCJjbGVhbkRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llcnNMZWdpc2xhdGlmc0pzb24iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW4iLCJEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydCIsImRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbkpzb24iLCJkb3NzaWVyc0xlZ2lzbGF0aWZzVG9Kc29uIiwiU2NydXRpbnMiLCJzY3J1dGlucyIsIlNjcnV0aW5zUmF3Q29udmVydCIsInRvU2NydXRpbnMiLCJzY3J1dGluIiwiY2xlYW5TY3J1dGluIiwic2NydXRpbnNKc29uIiwic2NydXRpbnNDbGVhbiIsIlNjcnV0aW5zQ29udmVydCIsInNjcnV0aW5zQ2xlYW5Kc29uIiwic2NydXRpbnNUb0pzb24iLCJleGlzdGluZ0RhdGVUb0pzb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9jbGVhbl9kYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgY2xlYW5BY3RldXIgfSBmcm9tIFwiLi4vY2xlYW5lcnMvYWN0ZXVyc1wiXG5pbXBvcnQgeyBjbGVhblRleHRlTGVnaXNsYXRpZiB9IGZyb20gXCIuLi9jbGVhbmVycy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbiB9IGZyb20gXCIuLi9jbGVhbmVycy9kb2N1bWVudHNcIlxuaW1wb3J0IHsgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZSB9IGZyb20gXCIuLi9jbGVhbmVycy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBjbGVhbk9yZ2FuZSB9IGZyb20gXCIuLi9jbGVhbmVycy9vcmdhbmVzXCJcbmltcG9ydCB7IGNsZWFuUmV1bmlvbiB9IGZyb20gXCIuLi9jbGVhbmVycy9yZXVuaW9uc1wiXG5pbXBvcnQgeyBjbGVhblNjcnV0aW4gfSBmcm9tIFwiLi4vY2xlYW5lcnMvc2NydXRpbnNcIlxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCB7XG4gIEFjdGV1cnNFdE9yZ2FuZXMsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG59IGZyb20gXCIuLi90eXBlcy9hY3RldXJzX2V0X29yZ2FuZXNcIlxuaW1wb3J0IHsgQWdlbmRhcywgQ29udmVydCBhcyBBZ2VuZGFzQ29udmVydCB9IGZyb20gXCIuLi90eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7XG4gIEFtZW5kZW1lbnRzLFxuICBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCxcbn0gZnJvbSBcIi4uL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIERvc3NpZXJzTGVnaXNsYXRpZnMsXG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG59IGZyb20gXCIuLi90eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zQ29udmVydCwgU2NydXRpbnMgfSBmcm9tIFwiLi4vdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQsXG4gIERvc3NpZXIgYXMgRG9zc2llclJhdyxcbn0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuZnVuY3Rpb24gY2xlYW5EYXRhKGRhdGFEaXI6IHN0cmluZyk6IHZvaWQge1xuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIG9wdGlvbnMuY2F0ZWdvcmllcy5tYXAoKGRhdGFzZXROYW1lOiBzdHJpbmcpID0+XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGBVbmtub3duIG5hbWUgb2YgZGF0YXNldDogJHtkYXRhc2V0TmFtZX1gLFxuICAgICksXG4gIClcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gb3B0aW9ucy5jYXRlZ29yaWVzLnJlZHVjZShcbiAgICAoZW5hYmxlZERhdGFzZXRzOiBFbmFibGVkRGF0YXNldHMsIGRhdGFzZXROYW1lOiBzdHJpbmcpOiBFbmFibGVkRGF0YXNldHMgPT5cbiAgICAgIGVuYWJsZWREYXRhc2V0cyB8XG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgIEVuYWJsZWREYXRhc2V0cy5Ob25lLFxuICApXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IHJhd0pzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXQuZmlsZW5hbWUpXG4gICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3Jhd0pzb25GaWxlUGF0aH1gKVxuICAgICAgY29uc3QgcmF3SnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHJhd0pzb25GaWxlUGF0aCwge1xuICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzOiBhbnkgPVxuICAgICAgICBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMocmF3SnNvbilcbiAgICAgIC8vIGNvbnN0IGFjdGV1cnMgPSBqcC5xdWVyeShhY3RldXJzRXRPcmdhbmVzLCBcIiQuZXhwb3J0LmFjdGV1cnMuYWN0ZXVyXCIpWzBdXG4gICAgICBjb25zdCBvcmdhbmVzID0gYWN0ZXVyc0V0T3JnYW5lcy5leHBvcnQub3JnYW5lcy5vcmdhbmVcbiAgICAgIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcyA9IG9yZ2FuZXNcbiAgICAgIGNvbnN0IGFjdGV1cnMgPSBhY3RldXJzRXRPcmdhbmVzLmV4cG9ydC5hY3RldXJzLmFjdGV1clxuICAgICAgYWN0ZXVyc0V0T3JnYW5lcy5hY3RldXJzID0gYWN0ZXVyc1xuICAgICAgZGVsZXRlIGFjdGV1cnNFdE9yZ2FuZXMuZXhwb3J0XG5cbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnMpIHtcbiAgICAgICAgY2xlYW5BY3RldXIoYWN0ZXVyKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmdhbmVzKSB7XG4gICAgICAgIGNsZWFuT3JnYW5lKG9yZ2FuZSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0ZXVyc0V0T3JnYW5lc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBhY3RldXJzRXRPcmdhbmVzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzQ2xlYW46IEFjdGV1cnNFdE9yZ2FuZXMgPVxuICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoYWN0ZXVyc0V0T3JnYW5lc0pzb24pXG4gICAgICBjb25zdCBhY3RldXJzRXRPcmdhbmVzQ2xlYW5Kc29uOiBzdHJpbmcgPVxuICAgICAgICBBY3RldXJzRXRPcmdhbmVzQ29udmVydC5hY3RldXJzRXRPcmdhbmVzVG9Kc29uKGFjdGV1cnNFdE9yZ2FuZXNDbGVhbilcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhqc29uRmlsZVBhdGgsIGFjdGV1cnNFdE9yZ2FuZXNDbGVhbkpzb24sIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFnZW5kYXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGFnZW5kYXM6IGFueSA9IEFnZW5kYXNSYXdDb252ZXJ0LnRvQWdlbmRhcyhyYXdKc29uKVxuICAgICAgYWdlbmRhcy5yZXVuaW9ucyA9IGFnZW5kYXMucmV1bmlvbnMucmV1bmlvblxuXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2YgYWdlbmRhcy5yZXVuaW9ucykge1xuICAgICAgICBjbGVhblJldW5pb24ocmV1bmlvbilcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWdlbmRhc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGFnZW5kYXMsIG51bGwsIDIpXG4gICAgICAvLyBWYWxpZGF0ZSBnZW5lcmF0ZWQgSlNPTi5cbiAgICAgIGNvbnN0IGFnZW5kYXNDbGVhbjogQWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhhZ2VuZGFzSnNvbilcbiAgICAgIGNvbnN0IGFnZW5kYXNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIEFnZW5kYXNDb252ZXJ0LmFnZW5kYXNUb0pzb24oYWdlbmRhc0NsZWFuKVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGpzb25GaWxlUGF0aCwgYWdlbmRhc0NsZWFuSnNvbiwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFtZW5kZW1lbnRzKSB7XG4gICAgICBjb25zdCByYXdKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtyYXdKc29uRmlsZVBhdGh9YClcbiAgICAgIGNvbnN0IHJhd0pzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhyYXdKc29uRmlsZVBhdGgsIHtcbiAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgYW1lbmRlbWVudHM6IGFueSA9IEFtZW5kZW1lbnRzUmF3Q29udmVydC50b0FtZW5kZW1lbnRzKHJhd0pzb24pXG4gICAgICBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcyA9IGFtZW5kZW1lbnRzLnRleHRlc0V0QW1lbmRlbWVudHMudGV4dGVsZWdcbiAgICAgIGRlbGV0ZSBhbWVuZGVtZW50cy50ZXh0ZXNFdEFtZW5kZW1lbnRzXG5cbiAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIGFtZW5kZW1lbnRzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGNsZWFuVGV4dGVMZWdpc2xhdGlmKHRleHRlTGVnaXNsYXRpZilcbiAgICAgIH1cblxuICAgICAgY29uc3QgYW1lbmRlbWVudHNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50cywgbnVsbCwgMilcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3QgYW1lbmRlbWVudHNDbGVhbjogQW1lbmRlbWVudHMgPVxuICAgICAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50cyhhbWVuZGVtZW50c0pzb24pXG4gICAgICBjb25zdCBhbWVuZGVtZW50c0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LmFtZW5kZW1lbnRzVG9Kc29uKGFtZW5kZW1lbnRzQ2xlYW4pXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBhbWVuZGVtZW50c0NsZWFuSnNvbiwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnM6IGFueSA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhyYXdKc29uKVxuICAgICAgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcyA9XG4gICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzLmRvY3VtZW50XG4gICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMgPSAoXG4gICAgICAgIGRvc3NpZXJzTGVnaXNsYXRpZnMuZXhwb3J0LmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llciBhcyBEb3NzaWVyUmF3W11cbiAgICAgICkubWFwKChkb3NzaWVyKSA9PiBkb3NzaWVyLmRvc3NpZXJQYXJsZW1lbnRhaXJlKVxuICAgICAgZGVsZXRlIGRvc3NpZXJzTGVnaXNsYXRpZnMuZXhwb3J0XG5cbiAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2YgZG9zc2llcnNMZWdpc2xhdGlmcy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBjbGVhbkRvY3VtZW50T3JEaXZpc2lvbihkb2N1bWVudClcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY2xlYW5Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVyUGFybGVtZW50YWlyZSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmc0pzb246IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICBkb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKVxuICAgICAgLy8gVmFsaWRhdGUgZ2VuZXJhdGVkIEpTT04uXG4gICAgICBjb25zdCBkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW46IERvc3NpZXJzTGVnaXNsYXRpZnMgPVxuICAgICAgICBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0Rvc3NpZXJzTGVnaXNsYXRpZnMoXG4gICAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmc0pzb24sXG4gICAgICAgIClcbiAgICAgIGNvbnN0IGRvc3NpZXJzTGVnaXNsYXRpZnNDbGVhbkpzb246IHN0cmluZyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LmRvc3NpZXJzTGVnaXNsYXRpZnNUb0pzb24oXG4gICAgICAgICAgZG9zc2llcnNMZWdpc2xhdGlmc0NsZWFuLFxuICAgICAgICApXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBkb3NzaWVyc0xlZ2lzbGF0aWZzQ2xlYW5Kc29uLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3QgcmF3SnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5maWxlbmFtZSlcbiAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cmF3SnNvbkZpbGVQYXRofWApXG4gICAgICBjb25zdCByYXdKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmF3SnNvbkZpbGVQYXRoLCB7XG4gICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHNjcnV0aW5zOiBhbnkgPSBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhyYXdKc29uKVxuICAgICAgc2NydXRpbnMuc2NydXRpbnMgPSBzY3J1dGlucy5zY3J1dGlucy5zY3J1dGluXG5cbiAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBzY3J1dGlucy5zY3J1dGlucykge1xuICAgICAgICBjbGVhblNjcnV0aW4oc2NydXRpbilcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NydXRpbnNKc29uOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShzY3J1dGlucywgbnVsbCwgMilcbiAgICAgIC8vIFZhbGlkYXRlIGdlbmVyYXRlZCBKU09OLlxuICAgICAgY29uc3Qgc2NydXRpbnNDbGVhbjogU2NydXRpbnMgPSBTY3J1dGluc0NvbnZlcnQudG9TY3J1dGlucyhzY3J1dGluc0pzb24pXG4gICAgICBjb25zdCBzY3J1dGluc0NsZWFuSnNvbjogc3RyaW5nID1cbiAgICAgICAgU2NydXRpbnNDb252ZXJ0LnNjcnV0aW5zVG9Kc29uKHNjcnV0aW5zQ2xlYW4pXG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBzY3J1dGluc0NsZWFuSnNvbiwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG59XG5cbmNsZWFuRGF0YShvcHRpb25zLmRhdGFEaXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBSUE7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxrQkFB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