@kando-env/kando-ui 1.2.121-alpha.4 → 1.2.121

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 (30) hide show
  1. package/lib/Widgets/Map/Map.js +163 -40
  2. package/lib/Widgets/Map/areas/AreaPolygon.js +2 -2
  3. package/lib/Widgets/Map/events/EventIndicator.js +46 -21
  4. package/lib/Widgets/Map/events/EventIndicatorHover.js +252 -0
  5. package/lib/Widgets/Map/events/EventPath.js +38 -16
  6. package/lib/Widgets/Map/events/EventPathHover.js +81 -0
  7. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +117 -3
  8. package/lib/Widgets/Map/points/PointMarker.js +472 -10
  9. package/lib/Widgets/Map/points/PointMarkers.js +17 -24
  10. package/lib/i18n/en.json +4 -0
  11. package/lib/i18n/he.json +5 -0
  12. package/lib/macros/getVersion.js +2 -2
  13. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +4 -1
  14. package/lib/pages/EventsPage/events/events_list/EventsList.js +8 -25
  15. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +2 -2
  16. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +2 -2
  17. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +57 -0
  18. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +12 -9
  19. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +6 -8
  20. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +1 -1
  21. package/lib/pages/SamplingsPage/SamplingProperties/style.module.scss +3 -0
  22. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +27 -0
  23. package/package.json +1 -1
  24. package/lib/Widgets/Map/MapUtils.js +0 -102
  25. package/lib/Widgets/Map/events/Event.js +0 -69
  26. package/lib/Widgets/Map/events/EventUtils.js +0 -245
  27. package/lib/Widgets/Map/events/PointOfEvent.js +0 -142
  28. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +0 -66
  29. package/lib/Widgets/Map/events/Snail.js +0 -60
  30. package/lib/Widgets/Map/points/PointUtils.js +0 -373
@@ -1,373 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.popupContent = exports.createSamplingIcons = exports.createObservationIconPoint = exports.createSamplingIconPoint = exports.markerBelongsToSource = exports.markerBelongsToSelectedSource = exports.belongsToSourceBackground = exports.selectedBackground = exports.combinedWWTPIcon = exports.combinedCollectorsIcon = exports.combinedPumpStationIcon = exports.combinedFactoryIcon = exports.standardBackground = exports.matchIconToPoint = exports.createManholePoint = exports.createBubblePoint = exports.isCollectorFocused = void 0;
9
-
10
- var _lineChart = _interopRequireDefault(require("../../../assets/line-chart.svg"));
11
-
12
- var _leaflet = _interopRequireDefault(require("leaflet"));
13
-
14
- var _i18n = _interopRequireDefault(require("../../../utilities/i18n"));
15
-
16
- var _blueCircle = _interopRequireDefault(require("../../../assets/point_icons/blue-circle.svg"));
17
-
18
- var _samplingIcon = _interopRequireDefault(require("../../../assets/point_icons/sampling-icon.svg"));
19
-
20
- var _pinkCircle = _interopRequireDefault(require("../../../assets/point_icons/pink-circle.svg"));
21
-
22
- var _observationIcon = _interopRequireDefault(require("../../../assets/point_icons/observation-icon.svg"));
23
-
24
- var _redPinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/red-pin-red-shadow.png"));
25
-
26
- var _whitePinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-red-shadow.png"));
27
-
28
- var _whitePinBlackShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-black-shadow.png"));
29
-
30
- var _yellowCircle = _interopRequireDefault(require("../../../assets/point_icons/yellow-circle.svg"));
31
-
32
- var _factoryIcon = _interopRequireDefault(require("../../../assets/point_icons/factory-icon.svg"));
33
-
34
- var _greenCircle = _interopRequireDefault(require("../../../assets/point_icons/green-circle.svg"));
35
-
36
- var _pumpStationIcon = _interopRequireDefault(require("../../../assets/point_icons/pump-station-icon.svg"));
37
-
38
- var _pinWater = _interopRequireDefault(require("../../../assets/map/pin-water.svg"));
39
-
40
- var _brightBlueCircle = _interopRequireDefault(require("../../../assets/point_icons/bright-blue-circle.svg"));
41
-
42
- var _WWTPIcon = _interopRequireDefault(require("../../../assets/point_icons/WWTP-icon.svg"));
43
-
44
- var _waterNoBackground = _interopRequireDefault(require("../../../assets/point_icons/water-no-background.svg"));
45
-
46
- var _whitePoint = _interopRequireDefault(require("../../../assets/white-point.png"));
47
-
48
- var isCollectorFocused = function isCollectorFocused(point, event) {
49
- var _event$observations;
50
-
51
- return (event === null || event === void 0 ? void 0 : (_event$observations = event.observations) === null || _event$observations === void 0 ? void 0 : _event$observations.length) === 1 && point.id === event.observations[0].point_id;
52
- }; // iconSize: [width, height],
53
- // IconAnchor: [(-right)(+left), (-down)(+up)]
54
-
55
-
56
- exports.isCollectorFocused = isCollectorFocused;
57
-
58
- var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered) {
59
- // @ts-ignore
60
- matchIconToPoint(point) !== null && // @ts-ignore
61
- matchIconToPoint(point).forEach(function (icon) {
62
- var pointCustomIcon = _leaflet.default.marker(markerLocation, {
63
- icon: icon,
64
- riseOnHover: false
65
- }).addTo(map);
66
-
67
- pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
68
- pointCustomIcon['kando_object_id'] = point.id;
69
- pointCustomIcon['kando_object'] = 'Point';
70
- if (hovered) pointCustomIcon['kando_object'] = 'PointHovered';
71
- });
72
-
73
- if (point.relatedEventsAmount) {
74
- var pointCustomIcon = _leaflet.default.marker(markerLocation, {
75
- icon: _leaflet.default.divIcon({
76
- className: "\n ".concat(point.relatedEventsAmount >= 100 ? 'circle-events-amount circle-events-amount--tridigit' : 'circle-events-amount', " \n ").concat(point.relatedEventsAmount > 2 ? 'alert-color' : '', "\n "),
77
- html: "<p>".concat(point.relatedEventsAmount, "</p>"),
78
- iconAnchor: [-5, 42]
79
- }),
80
- riseOnHover: false
81
- }).addTo(map);
82
-
83
- pointCustomIcon['kando_object_id'] = point.id;
84
- pointCustomIcon['kando_object'] = 'IconNumber';
85
- if (hovered) pointCustomIcon['kando_object'] = 'IconNumberHovered';
86
- }
87
- };
88
-
89
- exports.createBubblePoint = createBubblePoint;
90
-
91
- var createManholePoint = function createManholePoint(markerLocation, point, map, hovered) {
92
- var pointIcon = _leaflet.default.icon({
93
- iconUrl: _whitePoint.default,
94
- iconSize: [9, 9],
95
- iconAnchor: [4.5, 4.5]
96
- });
97
-
98
- var manholeIcon = _leaflet.default.marker(markerLocation, {
99
- icon: pointIcon,
100
- riseOnHover: true
101
- }).addTo(map);
102
-
103
- manholeIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
104
- manholeIcon['kando_object_id'] = point.id;
105
- manholeIcon['kando_object'] = 'Point';
106
- if (hovered) manholeIcon['kando_object'] = 'PointHovered';
107
- };
108
-
109
- exports.createManholePoint = createManholePoint;
110
-
111
- var matchIconToPoint = function matchIconToPoint(point, event) {
112
- switch (point.group.type) {
113
- case 'Groups::Factory':
114
- if (combinedFactoryIcon.length === 2) {
115
- if (markerBelongsToSelectedSource(event, point)) {
116
- combinedFactoryIcon.unshift(selectedBackground());
117
- } else if (markerBelongsToSource(event, point)) {
118
- combinedFactoryIcon.unshift(belongsToSourceBackground());
119
- } else {
120
- combinedFactoryIcon.unshift(standardBackground());
121
- }
122
- }
123
-
124
- return combinedFactoryIcon;
125
-
126
- case 'Groups::PumpStation':
127
- if (combinedPumpStationIcon.length === 2) {
128
- if (markerBelongsToSelectedSource(event, point)) {
129
- combinedPumpStationIcon.unshift(selectedBackground());
130
- } else if (markerBelongsToSource(event, point)) {
131
- combinedPumpStationIcon.unshift(belongsToSourceBackground());
132
- } else {
133
- combinedPumpStationIcon.unshift(standardBackground());
134
- }
135
- }
136
-
137
- return combinedPumpStationIcon;
138
-
139
- case 'Groups::WastewaterTreatmentPlant':
140
- if (combinedWWTPIcon.length === 2) {
141
- if (markerBelongsToSelectedSource(event, point)) {
142
- combinedWWTPIcon.unshift(selectedBackground());
143
- } else if (markerBelongsToSource(event, point)) {
144
- combinedWWTPIcon.unshift(belongsToSourceBackground());
145
- } else {
146
- combinedWWTPIcon.unshift(standardBackground());
147
- }
148
- }
149
-
150
- return combinedWWTPIcon;
151
-
152
- case 'Groups::Collectors':
153
- if (isCollectorFocused(point, event)) {
154
- return [_leaflet.default.icon({
155
- iconUrl: _redPinRedShadow.default,
156
- iconSize: [62, 62],
157
- iconAnchor: [30, 52]
158
- }), _leaflet.default.icon({
159
- iconUrl: _waterNoBackground.default,
160
- iconSize: [46, 46],
161
- iconAnchor: [22, 44],
162
- popupAnchor: [0, -30]
163
- })];
164
- }
165
-
166
- return combinedCollectorsIcon;
167
-
168
- default:
169
- return null;
170
- }
171
- };
172
-
173
- exports.matchIconToPoint = matchIconToPoint;
174
-
175
- var standardBackground = function standardBackground() {
176
- var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
177
- var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
178
- return _leaflet.default.icon({
179
- iconUrl: _whitePinBlackShadow.default,
180
- iconSize: secondary ? [20, 20] : [43, 46],
181
- iconAnchor: secondary && third ? [-2, 19] : secondary ? [-2, 44] : [20, 42],
182
- popupAnchor: [0, -30]
183
- });
184
- };
185
-
186
- exports.standardBackground = standardBackground;
187
- var combinedFactoryIcon = [_leaflet.default.icon({
188
- iconUrl: _yellowCircle.default,
189
- iconSize: [25, 24],
190
- iconAnchor: [10.7, 33.7],
191
- popupAnchor: [0, -30]
192
- }), _leaflet.default.icon({
193
- iconUrl: _factoryIcon.default,
194
- iconSize: [15, 15],
195
- iconAnchor: [5, 30],
196
- popupAnchor: [0, -30]
197
- })];
198
- exports.combinedFactoryIcon = combinedFactoryIcon;
199
- var combinedPumpStationIcon = [_leaflet.default.icon({
200
- iconUrl: _greenCircle.default,
201
- iconSize: [25, 24],
202
- iconAnchor: [10.7, 33.7],
203
- popupAnchor: [0, -30]
204
- }), _leaflet.default.icon({
205
- iconUrl: _pumpStationIcon.default,
206
- iconSize: [20, 20],
207
- iconAnchor: [7, 32],
208
- popupAnchor: [0, -30]
209
- })];
210
- exports.combinedPumpStationIcon = combinedPumpStationIcon;
211
- var combinedCollectorsIcon = [_leaflet.default.icon({
212
- iconUrl: _pinWater.default,
213
- iconSize: [45, 45],
214
- iconAnchor: [25, 50],
215
- popupAnchor: [0, -30]
216
- })];
217
- exports.combinedCollectorsIcon = combinedCollectorsIcon;
218
- var combinedWWTPIcon = [_leaflet.default.icon({
219
- iconUrl: _brightBlueCircle.default,
220
- iconSize: [25, 25],
221
- iconAnchor: [10.7, 33.7],
222
- popupAnchor: [0, -30]
223
- }), _leaflet.default.icon({
224
- iconUrl: _WWTPIcon.default,
225
- iconSize: [20, 20],
226
- iconAnchor: [8, 31],
227
- popupAnchor: [0, -30]
228
- })];
229
- exports.combinedWWTPIcon = combinedWWTPIcon;
230
-
231
- var selectedBackground = function selectedBackground() {
232
- return _leaflet.default.icon({
233
- iconUrl: _redPinRedShadow.default,
234
- iconSize: [67, 70],
235
- iconAnchor: [32, 54],
236
- popupAnchor: [0, -30]
237
- });
238
- };
239
-
240
- exports.selectedBackground = selectedBackground;
241
-
242
- var belongsToSourceBackground = function belongsToSourceBackground() {
243
- return _leaflet.default.icon({
244
- iconUrl: _whitePinRedShadow.default,
245
- iconSize: [67, 70],
246
- iconAnchor: [32, 54],
247
- popupAnchor: [0, -30]
248
- });
249
- };
250
-
251
- exports.belongsToSourceBackground = belongsToSourceBackground;
252
-
253
- var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
254
- var source;
255
-
256
- if (event !== null && event !== undefined) {
257
- source = event.sources.filter(function (source) {
258
- return source.point_id === point.id;
259
- })[0];
260
- }
261
-
262
- return event !== null && source && event.selected_source === source.point_id;
263
- };
264
-
265
- exports.markerBelongsToSelectedSource = markerBelongsToSelectedSource;
266
-
267
- var markerBelongsToSource = function markerBelongsToSource(event, point) {
268
- if (event === undefined) return;
269
- return event !== null && event.sources.filter(function (source) {
270
- return source.point_id === point.id;
271
- })[0];
272
- };
273
-
274
- exports.markerBelongsToSource = markerBelongsToSource;
275
-
276
- var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered) {
277
- // iconSize: [width, height],
278
- // Icon Anchor: [(-right)(+left), (-down)(+up)]
279
- var samplingIcon = [_leaflet.default.icon({
280
- iconUrl: _blueCircle.default,
281
- iconSize: secondaryIcon ? [10, 10] : [25, 24],
282
- iconAnchor: secondaryIcon ? [-7, 15] : [10.7, 33.7],
283
- popupAnchor: [0, -30]
284
- }), _leaflet.default.icon({
285
- iconUrl: _samplingIcon.default,
286
- iconSize: secondaryIcon ? [7, 7] : [13, 15],
287
- iconAnchor: secondaryIcon ? [-8, 13] : [5, 30],
288
- popupAnchor: [0, -30]
289
- })];
290
-
291
- if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
292
- samplingIcon.unshift(selectedBackground());
293
- } else if (markerBelongsToSource(event, point) && !secondaryIcon) {
294
- samplingIcon.unshift(belongsToSourceBackground());
295
- } else {
296
- samplingIcon.unshift(standardBackground(secondaryIcon, true));
297
- }
298
-
299
- samplingIcon.forEach(function (icon) {
300
- var pointCustomIcon = _leaflet.default.marker(markerLocation, {
301
- icon: icon,
302
- riseOnHover: false
303
- }).addTo(map);
304
-
305
- pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
306
- pointCustomIcon['kando_object_id'] = point.id;
307
- pointCustomIcon['kando_object'] = 'Sampling';
308
- if (hovered) pointCustomIcon['kando_object'] = 'SamplingHovered';
309
- });
310
- };
311
-
312
- exports.createSamplingIconPoint = createSamplingIconPoint;
313
-
314
- var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered) {
315
- // iconSize: [width, height],
316
- // Icon Anchor: [(-right)(+left), (-down)(+up)]
317
- var observationIcon = [_leaflet.default.icon({
318
- iconUrl: _pinkCircle.default,
319
- iconSize: secondaryIcon ? [10, 10] : [25, 24],
320
- iconAnchor: secondaryIcon ? [-7, 40] : [10.7, 33.7],
321
- popupAnchor: [0, -30]
322
- }), _leaflet.default.icon({
323
- iconUrl: _observationIcon.default,
324
- iconSize: secondaryIcon ? [7, 7] : [13, 15],
325
- iconAnchor: secondaryIcon ? [-8, 38] : [5, 30],
326
- popupAnchor: [0, -30]
327
- })];
328
-
329
- if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
330
- observationIcon.unshift(selectedBackground());
331
- } else if (markerBelongsToSource(event, point) && !secondaryIcon) {
332
- observationIcon.unshift(belongsToSourceBackground());
333
- } else {
334
- observationIcon.unshift(standardBackground(secondaryIcon));
335
- }
336
-
337
- observationIcon.forEach(function (icon) {
338
- var pointCustomIcon = _leaflet.default.marker(markerLocation, {
339
- icon: icon,
340
- riseOnHover: false
341
- }).addTo(map);
342
-
343
- pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
344
- pointCustomIcon['kando_object_id'] = point.id;
345
- pointCustomIcon['kando_object'] = 'Observation';
346
- if (hovered) pointCustomIcon['kando_object'] = 'ObservationHovered';
347
- });
348
- };
349
-
350
- exports.createObservationIconPoint = createObservationIconPoint;
351
-
352
- var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered) {
353
- var sampledPointIds = event.samplings.map(function (s) {
354
- return s.point_id;
355
- });
356
-
357
- if (event !== null && event.samplings.length !== 0 && sampledPointIds.includes(point.id)) {
358
- createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered);
359
- }
360
- };
361
-
362
- exports.createSamplingIcons = createSamplingIcons;
363
-
364
- var popupContent = function popupContent(obs, point) {
365
- if (obs === null) {
366
- return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(point.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <hr/>\n \n <div id=\"sector\"></div>\n </div>\n </div>\n ");
367
- } else {
368
- return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(obs.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <div class=\"popup-content__severity\">\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.severity"), "</p>\n <span class=\"").concat('popup-content__severity--' + obs.severity, "\">\n <b class=\"popup-content__severity-b\">\n ").concat(_i18n.default.t("events_overview.severities.".concat(obs.severity)), "\n </b>\n </span>\n </div>\n \n <hr class=\"popup-content__hr\" />\n\n <div class=\"popup-content__discharge-time\">\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.first_seen"), ":</p>\n <span><b id=\"first-seen-popup\"></b></span>\n </div>\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.last_seen"), ":</p>\n <span><b id=\"last-seen-popup\"></b></span>\n </div> \n </div>\n </div>\n </div>\n ");
369
- }
370
- };
371
-
372
- exports.popupContent = popupContent;
373
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRVdGlscy50cyJdLCJuYW1lcyI6WyJpc0NvbGxlY3RvckZvY3VzZWQiLCJwb2ludCIsImV2ZW50Iiwib2JzZXJ2YXRpb25zIiwibGVuZ3RoIiwiaWQiLCJwb2ludF9pZCIsImNyZWF0ZUJ1YmJsZVBvaW50IiwibWFya2VyTG9jYXRpb24iLCJtYXAiLCJob3ZlcmVkIiwibWF0Y2hJY29uVG9Qb2ludCIsImZvckVhY2giLCJpY29uIiwicG9pbnRDdXN0b21JY29uIiwiTCIsIm1hcmtlciIsInJpc2VPbkhvdmVyIiwiYWRkVG8iLCJiaW5kVG9vbHRpcCIsImdyb3VwIiwibmFtZSIsInNlY3Rvcl9uYW1lIiwicmVsYXRlZEV2ZW50c0Ftb3VudCIsImRpdkljb24iLCJjbGFzc05hbWUiLCJodG1sIiwiaWNvbkFuY2hvciIsImNyZWF0ZU1hbmhvbGVQb2ludCIsInBvaW50SWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsInR5cGUiLCJjb21iaW5lZEZhY3RvcnlJY29uIiwibWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UiLCJ1bnNoaWZ0Iiwic2VsZWN0ZWRCYWNrZ3JvdW5kIiwibWFya2VyQmVsb25nc1RvU291cmNlIiwiYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCIsInN0YW5kYXJkQmFja2dyb3VuZCIsImNvbWJpbmVkUHVtcFN0YXRpb25JY29uIiwiY29tYmluZWRXV1RQSWNvbiIsInJlZFBpblJlZFNoYWRvdyIsIndhdGVySWNvbk5vQmFja2dyb3VuZCIsInBvcHVwQW5jaG9yIiwiY29tYmluZWRDb2xsZWN0b3JzSWNvbiIsInNlY29uZGFyeSIsInRoaXJkIiwid2hpdGVQaW5CbGFja1NoYWRvdyIsInllbGxvd0NpcmNsZVVSTCIsInBsYW50SWNvblVSTCIsImdyZWVuQ2lyY2xlVVJMIiwicHVtcFN0YXRpb25JY29uVVJMIiwiY29sbGVjdG9ySWNvbiIsImJyaWdodEJsdWVDaXJjbGVVUkwiLCJXV1RQSWNvblVSTCIsIndoaXRlUGluUmVkU2hhZG93Iiwic291cmNlIiwidW5kZWZpbmVkIiwic291cmNlcyIsImZpbHRlciIsInNlbGVjdGVkX3NvdXJjZSIsImNyZWF0ZVNhbXBsaW5nSWNvblBvaW50Iiwic2Vjb25kYXJ5SWNvbiIsInNhbXBsaW5nSWNvbiIsImJsdWVDaXJjbGVVUkwiLCJzYW1wbGluZ0ljb25VUkwiLCJjcmVhdGVPYnNlcnZhdGlvbkljb25Qb2ludCIsIm9ic2VydmF0aW9uSWNvbiIsInBpbmtDaXJjbGVVUkwiLCJvYnNlcnZhdGlvbkljb25VUkwiLCJjcmVhdGVTYW1wbGluZ0ljb25zIiwic2FtcGxlZFBvaW50SWRzIiwic2FtcGxpbmdzIiwicyIsImluY2x1ZGVzIiwicG9wdXBDb250ZW50Iiwib2JzIiwiR3JhcGhJY29uIiwiaTE4biIsInQiLCJzZXZlcml0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQU9BOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQTs7QUFFTyxJQUFNQSxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLENBQUNDLEtBQUQsRUFBZ0JDLEtBQWhCLEVBQWtDO0FBQUE7O0FBQ2xFLFNBQ0UsQ0FBQUEsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCxtQ0FBQUEsS0FBSyxDQUFFQyxZQUFQLDRFQUFxQkMsTUFBckIsTUFBZ0MsQ0FBaEMsSUFDQUgsS0FBSyxDQUFDSSxFQUFOLEtBQWFILEtBQUssQ0FBQ0MsWUFBTixDQUFtQixDQUFuQixFQUFzQkcsUUFGckM7QUFJRCxDQUxNLEMsQ0FPUDtBQUNBOzs7OztBQUNPLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FDL0JDLGNBRCtCLEVBRS9CUCxLQUYrQixFQUcvQlEsR0FIK0IsRUFJL0JDLE9BSitCLEVBSzVCO0FBQ0g7QUFDQUMsRUFBQUEsZ0JBQWdCLENBQUNWLEtBQUQsQ0FB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K0hBRTREOUUsS0FBSyxDQUFDSSxFQUZsRSxpREFHNEIyRSxrQkFINUIsd0pBTTBEL0UsS0FBSyxDQUFDbUIsS0FBTixDQUFZQyxJQU50RTtBQWFELEdBZEQsTUFjTztBQUNMLCtIQUU0RDBELEdBQUcsQ0FBQzFFLEVBRmhFLGlEQUc0QjJFLGtCQUg1Qix3SkFPa0IvRSxLQUFLLENBQUNtQixLQUFOLENBQVlDLElBUDlCLG9KQVUyRDRELGNBQUtDLENBQUwsNEJBVjNELHlEQWNzQiw4QkFBOEJILEdBQUcsQ0FBQ0ksUUFkeEQsdUhBaUI4QkYsY0FBS0MsQ0FBTCxzQ0FDOEJILEdBQUcsQ0FBQ0ksUUFEbEMsRUFqQjlCLG1XQTRCK0RGLGNBQUtDLENBQUwsOEJBNUIvRCxnT0FrQytERCxjQUFLQyxDQUFMLDZCQWxDL0Q7QUEyQ0Q7QUFDRixDQTVETSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaEljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBMLCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgYmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3NhbXBsaW5nLWljb24uc3ZnJztcbmltcG9ydCBwaW5rQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9waW5rLWNpcmNsZS5zdmcnO1xuaW1wb3J0IG9ic2VydmF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvb2JzZXJ2YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHJlZFBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcmVkLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLWJsYWNrLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHllbGxvd0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMveWVsbG93LWNpcmNsZS5zdmcnO1xuaW1wb3J0IHBsYW50SWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2dyZWVuLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHB1bXBTdGF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9tYXAvcGluLXdhdGVyLnN2Zyc7XG5pbXBvcnQgYnJpZ2h0Qmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL1dXVFAtaWNvbi5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2F0ZXItbm8tYmFja2dyb3VuZC5zdmcnO1xuaW1wb3J0IHdoaXRlUG9pbnQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbi8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4vLyBJY29uQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG5leHBvcnQgY29uc3QgY3JlYXRlQnViYmxlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICAvLyBAdHMtaWdub3JlXG4gIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpICE9PSBudWxsICYmXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpLmZvckVhY2goKGljb246IGFueSkgPT4ge1xuICAgICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgICAgfSkuYWRkVG8obWFwKTtcbiAgICAgIHBvaW50Q3VzdG9tSWNvbi5iaW5kVG9vbHRpcChcbiAgICAgICAgYCR7cG9pbnQuZ3JvdXAubmFtZX0gKCR7cG9pbnQuZ3JvdXAuc2VjdG9yX25hbWV9KWAsXG4gICAgICApO1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gICAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludEhvdmVyZWQnO1xuICAgIH0pO1xuXG4gIGlmIChwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50KSB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBMLmRpdkljb24oe1xuICAgICAgICBjbGFzc05hbWU6IGBcbiAgICAgICAgICAke1xuICAgICAgICAgICAgcG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+PSAxMDBcbiAgICAgICAgICAgICAgPyAnY2lyY2xlLWV2ZW50cy1hbW91bnQgY2lyY2xlLWV2ZW50cy1hbW91bnQtLXRyaWRpZ2l0J1xuICAgICAgICAgICAgICA6ICdjaXJjbGUtZXZlbnRzLWFtb3VudCdcbiAgICAgICAgICB9IFxuICAgICAgICAgICR7cG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+IDIgPyAnYWxlcnQtY29sb3InIDogJyd9XG4gICAgICAgICAgICBgLFxuICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICBpY29uQW5jaG9yOiBbLTUsIDQyXSxcbiAgICAgIH0pLFxuICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgIH0pLmFkZFRvKG1hcCk7XG5cbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVyJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVySG92ZXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICBsZXQgcG9pbnRJY29uID0gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBvaW50LFxuICAgIGljb25TaXplOiBbOSwgOV0sXG4gICAgaWNvbkFuY2hvcjogWzQuNSwgNC41XSxcbiAgfSk7XG4gIGxldCBtYW5ob2xlSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBwb2ludEljb24sXG4gICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gIH0pLmFkZFRvKG1hcCk7XG4gIG1hbmhvbGVJY29uLmJpbmRUb29sdGlwKGAke3BvaW50Lmdyb3VwLm5hbWV9ICgke3BvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lfSlgKTtcbiAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIGlmIChob3ZlcmVkKSBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaEljb25Ub1BvaW50ID0gKHBvaW50OiBJUG9pbnQsIGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgc3dpdGNoIChwb2ludC5ncm91cC50eXBlKSB7XG4gICAgY2FzZSAnR3JvdXBzOjpGYWN0b3J5JzpcbiAgICAgIGlmIChjb21iaW5lZEZhY3RvcnlJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZEZhY3RvcnlJY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6UHVtcFN0YXRpb24nOlxuICAgICAgaWYgKGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbjtcbiAgICBjYXNlICdHcm91cHM6Oldhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc6XG4gICAgICBpZiAoY29tYmluZWRXV1RQSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRXV1RQSWNvbjtcblxuICAgIGNhc2UgJ0dyb3Vwczo6Q29sbGVjdG9ycyc6XG4gICAgICBpZiAoaXNDb2xsZWN0b3JGb2N1c2VkKHBvaW50LCBldmVudCkpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgICAgICAgICAgaWNvblNpemU6IFs2MiwgNjJdLFxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzMwLCA1Ml0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogd2F0ZXJJY29uTm9CYWNrZ3JvdW5kLFxuICAgICAgICAgICAgaWNvblNpemU6IFs0NiwgNDZdLFxuXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMjIsIDQ0XSxcbiAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkQ29sbGVjdG9yc0ljb247XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzdGFuZGFyZEJhY2tncm91bmQgPSAoXG4gIHNlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICB0aGlyZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluQmxhY2tTaGFkb3csXG4gICAgaWNvblNpemU6IHNlY29uZGFyeSA/IFsyMCwgMjBdIDogWzQzLCA0Nl0sXG4gICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5ICYmIHRoaXJkID8gWy0yLCAxOV0gOiBzZWNvbmRhcnkgPyBbLTIsIDQ0XSA6IFsyMCwgNDJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRGYWN0b3J5SWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFsyNSwgMjRdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHBsYW50SWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzE1LCAxNV0sXG4gICAgaWNvbkFuY2hvcjogWzUsIDMwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkUHVtcFN0YXRpb25JY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGdyZWVuQ2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMjUsIDI0XSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgaWNvblNpemU6IFsyMCwgMjBdLFxuICAgIGljb25BbmNob3I6IFs3LCAzMl0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZENvbGxlY3RvcnNJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGNvbGxlY3Rvckljb24sXG4gICAgaWNvblNpemU6IFs0NSwgNDVdLFxuXG4gICAgaWNvbkFuY2hvcjogWzI1LCA1MF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZFdXVFBJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGJyaWdodEJsdWVDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFsyNSwgMjVdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgIGljb25TaXplOiBbMjAsIDIwXSxcbiAgICBpY29uQW5jaG9yOiBbOCwgMzFdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFs2NywgNzBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFs2NywgNzBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc291cmNlO1xuXG4gIGlmIChldmVudCAhPT0gbnVsbCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc291cmNlID0gZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgIT09IG51bGwgJiYgc291cmNlICYmIGV2ZW50LnNlbGVjdGVkX3NvdXJjZSA9PT0gc291cmNlLnBvaW50X2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IHNhbXBsaW5nSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogYmx1ZUNpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzEwLCAxMF0gOiBbMjUsIDI0XSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDE1XSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogc2FtcGxpbmdJY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbNywgN10gOiBbMTMsIDE1XSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDEzXSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uLCB0cnVlKSk7XG4gIH1cblxuICBzYW1wbGluZ0ljb24uZm9yRWFjaCgoaWNvbikgPT4ge1xuICAgIGxldCBwb2ludEN1c3RvbUljb246IGFueSA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBpY29uLFxuICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgIH0pLmFkZFRvKG1hcCk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKFxuICAgICAgYCR7cG9pbnQuZ3JvdXAubmFtZX0gKCR7cG9pbnQuZ3JvdXAuc2VjdG9yX25hbWV9KWAsXG4gICAgKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICAvLyBpY29uU2l6ZTogW3dpZHRoLCBoZWlnaHRdLFxuICAvLyBJY29uIEFuY2hvcjogWygtcmlnaHQpKCtsZWZ0KSwgKC1kb3duKSgrdXApXVxuICBsZXQgb2JzZXJ2YXRpb25JY29uID0gW1xuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBwaW5rQ2lyY2xlVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMTAsIDEwXSA6IFsyNSwgMjRdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgNDBdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBvYnNlcnZhdGlvbkljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFs3LCA3XSA6IFsxMywgMTVdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstOCwgMzhdIDogWzUsIDMwXSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgXTtcblxuICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24pKTtcbiAgfVxuXG4gIG9ic2VydmF0aW9uSWNvbi5mb3JFYWNoKChpY29uKSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSkuYWRkVG8obWFwKTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoXG4gICAgICBgJHtwb2ludC5ncm91cC5uYW1lfSAoJHtwb2ludC5ncm91cC5zZWN0b3JfbmFtZX0pYCxcbiAgICApO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbkhvdmVyZWQnO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTYW1wbGluZ0ljb25zID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIGV2ZW50OiBJRXZlbnQsXG4gIHBvaW50OiBJUG9pbnQsXG4gIG1hcCxcbiAgaG92ZXJlZCxcbikgPT4ge1xuICBsZXQgc2FtcGxlZFBvaW50SWRzID0gZXZlbnQuc2FtcGxpbmdzLm1hcCgocykgPT4gcy5wb2ludF9pZCk7XG4gIGlmIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNhbXBsaW5ncy5sZW5ndGggIT09IDAgJiZcbiAgICBzYW1wbGVkUG9pbnRJZHMuaW5jbHVkZXMocG9pbnQuaWQpXG4gICkge1xuICAgIGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50KFxuICAgICAgbWFya2VyTG9jYXRpb24sXG4gICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50LCBldmVudCkgIT09IG51bGwsXG4gICAgICBtYXAsXG4gICAgICBwb2ludCxcbiAgICAgIGV2ZW50LFxuICAgICAgaG92ZXJlZCxcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdXBDb250ZW50ID0gKG9iczogYW55LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChvYnMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke3BvaW50LmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke3BvaW50Lmdyb3VwLm5hbWV9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxoci8+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtvYnMuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAubmFtZVxuICAgICAgICAgICAgICAgICAgICB9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdHlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cC1jb250ZW50X19zZXZlcml0eS0tJyArIG9icy5zZXZlcml0eVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMuJHtvYnMuc2V2ZXJpdHl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwicG9wdXAtY29udGVudF9faHJcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19kaXNjaGFyZ2UtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuZmlyc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwiZmlyc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3Lmxhc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwibGFzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9XG59O1xuIl19