@provoly/dashboard 0.19.0 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/assets/svgs/code-box.svg +1 -0
- package/esm2022/filters/autocomplete/autocomplete.component.mjs +41 -0
- package/esm2022/filters/autocomplete/autocomplete.module.mjs +24 -0
- package/esm2022/filters/autocomplete/provoly-dashboard-filters-autocomplete.mjs +5 -0
- package/esm2022/filters/autocomplete/public-api.mjs +4 -0
- package/esm2022/filters/autocomplete/style/css.component.mjs +11 -0
- package/esm2022/lib/core/components/about/about.component.mjs +3 -3
- package/esm2022/lib/core/components/select/select.component.mjs +4 -8
- package/esm2022/lib/core/i18n/en.translations.mjs +3 -2
- package/esm2022/lib/core/i18n/fr.translations.mjs +3 -2
- package/esm2022/lib/core/model/widget-aggregated-chart-manifest.interface.mjs +1 -1
- package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
- package/esm2022/lib/core/store/aggregation/backend-aggregation.service.mjs +2 -2
- package/esm2022/lib/core/store/search/search.service.mjs +8 -2
- package/esm2022/lib/dashboard/store/dashboard.effects.mjs +3 -2
- package/esm2022/lib/dashboard/store/wms.service.mjs +1 -1
- package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +3 -1
- package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +30 -37
- package/esm2022/widgets/widget-aggregated-chart/i18n/en.translations.mjs +10 -1
- package/esm2022/widgets/widget-aggregated-chart/i18n/fr.translations.mjs +10 -1
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +95 -115
- package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +35 -2
- package/esm2022/widgets/widget-map/utils/xml-utils.class.mjs +15 -13
- package/fesm2022/provoly-dashboard-filters-autocomplete.mjs +75 -0
- package/fesm2022/provoly-dashboard-filters-autocomplete.mjs.map +1 -0
- package/fesm2022/provoly-dashboard-toolbox.mjs +2 -0
- package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +47 -36
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +138 -125
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +17 -12
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/filters/autocomplete/autocomplete.component.d.ts +16 -0
- package/filters/autocomplete/autocomplete.module.d.ts +14 -0
- package/filters/autocomplete/index.d.ts +5 -0
- package/filters/autocomplete/public-api.d.ts +3 -0
- package/filters/autocomplete/style/_m-autocomplete.scss +7 -0
- package/filters/autocomplete/style/css.component.d.ts +5 -0
- package/lib/core/components/select/select.component.d.ts +0 -1
- package/lib/core/i18n/en.translations.d.ts +1 -0
- package/lib/core/i18n/fr.translations.d.ts +1 -0
- package/lib/core/model/widget-aggregated-chart-manifest.interface.d.ts +1 -1
- package/lib/core/model/widget-map-manifest.interface.d.ts +1 -1
- package/lib/core/store/search/search.service.d.ts +6 -0
- package/lib/dashboard/store/wms.service.d.ts +1 -1
- package/package.json +14 -8
- package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +8 -6
- package/widgets/widget-aggregated-chart/i18n/en.translations.d.ts +9 -0
- package/widgets/widget-aggregated-chart/i18n/fr.translations.d.ts +9 -0
- package/widgets/widget-map/component/widget-map.component.d.ts +5 -7
- package/widgets/widget-map/utils/widget-map.utils.d.ts +7 -1
- package/widgets/widget-map/utils/xml-utils.class.d.ts +1 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { FieldType, ItemUtils } from '@provoly/dashboard';
|
|
1
|
+
import { DEFAULT_PROJECTION, FieldType, ItemUtils } from '@provoly/dashboard';
|
|
2
2
|
import { Feature } from 'ol';
|
|
3
3
|
import { Circle, LineString } from 'ol/geom';
|
|
4
4
|
import { WidgetMapLayerService } from '../component/widget-map-layer.service';
|
|
5
|
+
import { get as getProjection, transform } from 'ol/proj';
|
|
5
6
|
import { GeoJSON } from 'ol/format';
|
|
7
|
+
import { XMLUtils } from './xml-utils.class';
|
|
6
8
|
export class WidgetMapUtils {
|
|
7
9
|
static populateLocationAttribute(layer, resultSet, classesNotFiltered, fields) {
|
|
8
10
|
if (['heatmap', 'marker', 'bubble', 'point', 'line', 'polygon', 'multi-line', 'multi-polygon', 'auto'].includes(layer.type) &&
|
|
@@ -271,6 +273,37 @@ export class WidgetMapUtils {
|
|
|
271
273
|
}
|
|
272
274
|
}
|
|
273
275
|
}
|
|
276
|
+
static projectExtentAggregationResponse(field, extentResponse, layer, wmsCapabilities, map) {
|
|
277
|
+
const projBox = getProjection(field.crs ?? DEFAULT_PROJECTION);
|
|
278
|
+
const response = extentResponse.values;
|
|
279
|
+
if (projBox &&
|
|
280
|
+
response.length > 0 &&
|
|
281
|
+
response[0].value &&
|
|
282
|
+
response[0].value.top_left &&
|
|
283
|
+
response[0].value.top_left.lat !== undefined &&
|
|
284
|
+
response[0].value.top_left.lon !== undefined &&
|
|
285
|
+
response[0].value.bottom_right &&
|
|
286
|
+
response[0].value.bottom_right.lat !== undefined &&
|
|
287
|
+
response[0].value.bottom_right.lon !== undefined) {
|
|
288
|
+
return {
|
|
289
|
+
datasource: layer.datasourceId,
|
|
290
|
+
extent: [
|
|
291
|
+
transform([
|
|
292
|
+
parseFloat(extentResponse.values[0].value.top_left.lon),
|
|
293
|
+
parseFloat(extentResponse.values[0].value.top_left.lat)
|
|
294
|
+
], projBox, map.getView().getProjection()),
|
|
295
|
+
transform([
|
|
296
|
+
parseFloat(extentResponse.values[0].value.bottom_right.lon),
|
|
297
|
+
parseFloat(extentResponse.values[0].value.bottom_right.lat)
|
|
298
|
+
], projBox, map.getView().getProjection())
|
|
299
|
+
]
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
datasource: layer.datasourceId,
|
|
304
|
+
extent: XMLUtils.getLayerExtent(layer.paramLayer, map, wmsCapabilities[layer.url]?.doc) ?? []
|
|
305
|
+
};
|
|
306
|
+
}
|
|
274
307
|
static { this.DEFAULT_HEATMAP_RADIUS = 25; }
|
|
275
308
|
static { this.DEFAULT_RADIUS_INTENSITY_FACTOR = 10000; }
|
|
276
309
|
static { this.DEFAULT_ZOOM_MIN = 3; }
|
|
@@ -279,4 +312,4 @@ export class WidgetMapUtils {
|
|
|
279
312
|
static { this.DEFAULT_MAP_CENTER = [2.2827217347381525, 48.864706031557716]; }
|
|
280
313
|
static { this.BACKGROUND_ORDER = 9999; }
|
|
281
314
|
}
|
|
282
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC91dGlscy93aWRnZXQtbWFwLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxTQUFTLEVBRVQsU0FBUyxFQU9WLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLE9BQU8sRUFBTyxNQUFNLElBQUksQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBUyxNQUFNLFNBQVMsQ0FBQztBQUVwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUc5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyx5QkFBeUIsQ0FDOUIsS0FBNEIsRUFDNUIsU0FBb0IsRUFDcEIsa0JBQTJCLEVBQzNCLE1BQWU7UUFFZixJQUNFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQ3pHLEtBQUssQ0FBQyxJQUFJLENBQ1g7WUFDRCxDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxrQkFBa0I7WUFDcEIsa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDN0I7WUFDQSxNQUFNLGFBQWEsR0FBRyxLQUdTLENBQUM7WUFFaEMsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUN2QyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFD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QUFTLENBQUMsT0FBTyxFQUFFO2dCQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN0QztZQUNELElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxXQUFXLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDekM7U0FDRjtJQUNILENBQUM7YUFFTSwyQkFBc0IsR0FBRyxFQUFFLENBQUM7YUFDNUIsb0NBQStCLEdBQUcsS0FBSyxDQUFDO2FBQ3hDLHFCQUFnQixHQUFHLENBQUMsQ0FBQzthQUNyQix1QkFBa0IsR0FBRyxFQUFFLENBQUM7YUFDeEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO2FBQ3RCLHVCQUFrQixHQUFHLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzthQUU5RCxxQkFBZ0IsR0FBRyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBdHRyaWJ1dGUsXG4gIEF0dHJpYnV0ZVNpbXBsZVZhbHVlLFxuICBDbGFzcyxcbiAgRmllbGQsXG4gIEZpZWxkVHlwZSxcbiAgSXRlbSxcbiAgSXRlbVV0aWxzLFxuICBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zLFxuICBSZWxhdGlvbixcbiAgUmVzdWx0U2V0XG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBGZWF0dXJlLCBNYXAgfSBmcm9tICdvbCc7XG5pbXBvcnQgeyBDaXJjbGUsIExpbmVTdHJpbmcsIFBvaW50IH0gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgeyBTdHlsZSB9IGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCB7IFdpZGdldE1hcExheWVyU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudC93aWRnZXQtbWFwLWxheWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdGlvbkxpa2UgfSBmcm9tICdvbC9wcm9qJztcbmltcG9ydCBHZW9tZXRyeSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCB7IEdlb0pTT04gfSBmcm9tICdvbC9mb3JtYXQnO1xuXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwVXRpbHMge1xuICBzdGF0aWMgcG9wdWxhdGVMb2NhdGlvbkF0dHJpYnV0ZShcbiAgICBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgIGNsYXNzZXNOb3RGaWx0ZXJlZDogQ2xhc3NbXSxcbiAgICBmaWVsZHM6IEZpZWxkW11cbiAgKSB7XG4gICAgaWYgKFxuICAgICAgWydoZWF0bWFwJywgJ21hcmtlcicsICdidWJibGUnLCAncG9pbnQnLCAnbGluZScsICdwb2x5Z29uJywgJ211bHRpLWxpbmUnLCAnbXVsdGktcG9seWdvbicsICdhdXRvJ10uaW5jbHVkZXMoXG4gICAgICAgIGxheWVyLnR5cGVcbiAgICAgICkgJiZcbiAgICAgICEhcmVzdWx0U2V0ICYmXG4gICAgICAhIWNsYXNzZXNOb3RGaWx0ZXJlZCAmJlxuICAgICAgY2xhc3Nlc05vdEZpbHRlcmVkLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhc1xuICAgICAgICB8IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnNcbiAgICAgICAgfCBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnNcbiAgICAgICAgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc2VzTm90RmlsdGVyZWQuZmlsdGVyKFxuICAgICAgICAoY2wpID0+IHNwZWNpZmljTGF5ZXIuY2xhc3Nlcz8uaW5jbHVkZXMoY2wuaWQpIHx8ICFzcGVjaWZpY0xheWVyLmNsYXNzZXMgfHwgc3BlY2lmaWNMYXllci5jbGFzc2VzLmxlbmd0aCA9PT0gMFxuICAgICAgKTtcblxuICAgICAgaWYgKCFzcGVjaWZpY0xheWVyLmF0dHJpYnV0ZSkge1xuICAgICAgICAvLyBObyBsb2NhdGlvbiBhdHRyaWJ1dGUgYXZhaWxhYmxlLCB0aGVuIHRyeSB0byBndWVzcyBvbmUgdGhhdCB3aWxsIGJlIG9rXG5cbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBXaWRnZXRNYXBVdGlscy5nZW9tZXRyeUZvckxheWVyKGxheWVyKTtcblxuICAgICAgICBsZXQgY2FuZGlkYXRlcyA9IFtdIGFzIHtcbiAgICAgICAgICBhdHRyOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgZmllbGQ6IEZpZWxkIHwgdW5kZWZpbmVkO1xuICAgICAgICB9W107XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBCYXNlZCBvbiBpdGVtcyB0aGF0IHdlIGhhdmUgdG8gZGlzcGxheVxuXG4gICAgICAgICAgY2FuZGlkYXRlcyA9IE9iamVjdC5rZXlzKHJlc3VsdFNldC5pdGVtcylcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4gKHsgaXRlbXM6IHJlc3VsdFNldC5pdGVtc1trZXldLCBvQ2xhc3M6IGNsYXNzZXMuZmluZCgoY2wpID0+IGNsLmlkID09PSBrZXkpIH0pKVxuICAgICAgICAgICAgLm1hcCgoeyBpdGVtcywgb0NsYXNzIH0pID0+XG4gICAgICAgICAgICAgIChvQ2xhc3MgPz8geyBhdHRyaWJ1dGVzOiBbXSB9KS5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmKSA9PiBmLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChhdHRyKSA9PiBhdHRyLmZpZWxkPy50eXBlID09PSBnZW9tZXRyeSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IGl0ZW1zIHRvIGRpc3BsYXksIHNvIGFsbG93IGFsbCBjb3JyZXNwb25kaW5nIGdlb21ldHJ5IGZpZWxkc1xuICAgICAgICAgIGNhbmRpZGF0ZXMgPSBjbGFzc2VzTm90RmlsdGVyZWRcbiAgICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBhdHRyLCBmaWVsZCB9KSA9PiBmaWVsZD8udHlwZSA9PT0gZ2VvbWV0cnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwZWNpZmljTGF5ZXIuYXR0cmlidXRlID0gY2FuZGlkYXRlc1swXS5hdHRyLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcG9wdWxhdGVJbnRlbnNpdHlBdHRyaWJ1dGUoXG4gICAgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICBjbGFzc2VzTm90RmlsdGVyZWQ6IENsYXNzW10sXG4gICAgZmllbGRzOiBGaWVsZFtdXG4gICkge1xuICAgIGlmIChcbiAgICAgIFsnaGVhdG1hcCcsICdidWJibGUnXS5pbmNsdWRlcyhsYXllci50eXBlKSAmJlxuICAgICAgISFyZXN1bHRTZXQgJiZcbiAgICAgICEhY2xhc3Nlc05vdEZpbHRlcmVkICYmXG4gICAgICBjbGFzc2VzTm90RmlsdGVyZWQubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc2VzTm90RmlsdGVyZWQuZmlsdGVyKFxuICAgICAgICAoY2wpID0+XG4gICAgICAgICAgKHNwZWNpZmljTGF5ZXIuY2xhc3Nlcz8uaW5jbHVkZXMoY2wuaWQpIHx8ICFzcGVjaWZpY0xheWVyLmNsYXNzZXMgfHwgc3BlY2lmaWNMYXllci5jbGFzc2VzLmxlbmd0aCA9PT0gMCkgJiZcbiAgICAgICAgICBjbC5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIubmFtZSA9PT0gKHNwZWNpZmljTGF5ZXI/LmF0dHJpYnV0ZSA/PyBbXSkpXG4gICAgICApO1xuXG4gICAgICBpZiAoIXNwZWNpZmljTGF5ZXIuaW50ZW5zaXR5QXR0cmlidXRlKSB7XG4gICAgICAgIC8vIE5vIGludGVuc2l0eSBhdHRyaWJ1dGUgYXZhaWxhYmxlLCB0aGVuIHRha2UgdGhlIG1heGltdW0gaW50ZW5zaXR5IG1hdGNoaW5nIGF0dHJpYnV0ZVxuICAgICAgICBjb25zdCBjYW5kaWRhdGVzRHJ5ID0gT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKVxuICAgICAgICAgIC5tYXAoKGtleSkgPT4gKHsgaXRlbXM6IHJlc3VsdFNldC5pdGVtc1trZXldLCBvQ2xhc3M6IGNsYXNzZXMuZmluZCgoY2wpID0+IGNsLmlkID09PSBrZXkpIH0pKVxuICAgICAgICAgIC5tYXAoKHsgaXRlbXMsIG9DbGFzcyB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKG9DbGFzcyA/PyB7IGF0dHJpYnV0ZXM6IFtdIH0pLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmKSA9PiBmLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoYXR0cikgPT4gYXR0ci5maWVsZD8udHlwZSA9PT0gRmllbGRUeXBlLkRFQ0lNQUwgfHwgYXR0ci5maWVsZD8udHlwZSA9PT0gRmllbGRUeXBlLklOVEVHRVIpXG4gICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyVmFsdWVzID0gSXRlbVV0aWxzLnBlcnRpbmVudFZhbHVlKGl0ZW1zLCBhdHRyLmF0dHIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBtaW46IE1hdGgubWluKC4uLmF0dHJWYWx1ZXMpLFxuICAgICAgICAgICAgICAgICAgbWF4OiBNYXRoLm1heCguLi5hdHRyVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGF0dHIuYXR0ci5uYW1lXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLm1heCAtIGEubWF4KTtcblxuICAgICAgICBpZiAoY2FuZGlkYXRlc0RyeS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3BlY2lmaWNMYXllci5pbnRlbnNpdHlBdHRyaWJ1dGUgPSBjYW5kaWRhdGVzRHJ5WzBdLm5hbWU7XG4gICAgICAgICAgc3BlY2lmaWNMYXllci5pbnRlbnNpdHlBc2MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEZlYXR1cmVGcm9tSXRlbShcbiAgICBwcm9qZWN0aW9uOiBQcm9qZWN0aW9uTGlrZSxcbiAgICBpdGVtOiBJdGVtLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBsb2NhdGlvbkF0dHJpYnV0ZTogQXR0cmlidXRlLFxuICAgIGljb25TdHlsZT86IFN0eWxlLFxuICAgIHNlbGVjdGVkSWNvblN0eWxlPzogU3R5bGVcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBGZWF0dXJlKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICB0eXBlLFxuICAgICAgZ2VvbWV0cnk6IFdpZGdldE1hcFV0aWxzLnJlYWRHZW9tZXRyeShwcm9qZWN0aW9uLCBpdGVtLCAncG9pbnQnLCBsb2NhdGlvbkF0dHJpYnV0ZSkgPz8gdW5kZWZpbmVkLFxuICAgICAgY2xhc3NpY1N0eWxlOiBpY29uU3R5bGUgPz8gbnVsbCxcbiAgICAgIHNlbGVjdGVkU3R5bGU6IHNlbGVjdGVkSWNvblN0eWxlID8/IG51bGxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRDaXJjbGVGZWF0dXJlRnJvbUl0ZW0oXG4gICAgcHJvamVjdGlvbjogUHJvamVjdGlvbkxpa2UsXG4gICAgaXRlbTogSXRlbSxcbiAgICBsb2NhdGlvbkF0dHJpYnV0ZTogQXR0cmlidXRlLFxuICAgIHJhZGl1czogbnVtYmVyLFxuICAgIGljb25TdHlsZTogU3R5bGUsXG4gICAgc2VsZWN0ZWRJY29uU3R5bGU6IFN0eWxlXG4gICkge1xuICAgIHJldHVybiBuZXcgRmVhdHVyZSh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgZ2VvbWV0cnk6IG5ldyBDaXJjbGUoXG4gICAgICAgIChXaWRnZXRNYXBVdGlscy5yZWFkR2VvbWV0cnkocHJvamVjdGlvbiwgaXRlbSwgJ3BvaW50JywgbG9jYXRpb25BdHRyaWJ1dGUpIGFzIFBvaW50KS5nZXRDb29yZGluYXRlcygpLFxuICAgICAgICByYWRpdXNcbiAgICAgICksXG4gICAgICBjbGFzc2ljU3R5bGU6IGljb25TdHlsZSxcbiAgICAgIHNlbGVjdGVkU3R5bGU6IHNlbGVjdGVkSWNvblN0eWxlLFxuICAgICAgdHlwZTogJ2J1YmJsZSdcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMaW5rRmVhdHVyZShyZWxhdGlvbjogUmVsYXRpb24sIGZlYXR1cmVTb3VyY2U6IEZlYXR1cmU8UG9pbnQ+LCBmZWF0dXJlRGVzdGluYXRpb246IEZlYXR1cmU8UG9pbnQ+KSB7XG4gICAgcmV0dXJuIG5ldyBGZWF0dXJlKHtcbiAgICAgIC4uLnJlbGF0aW9uLFxuICAgICAgZ2VvbWV0cnk6IG5ldyBMaW5lU3RyaW5nKFtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBmZWF0dXJlU291cmNlLmdldEdlb21ldHJ5KCk/LmdldENvb3JkaW5hdGVzKCkgPz8gZmVhdHVyZVNvdXJjZS5nZXRHZW9tZXRyeSgpPy5nZXRDZW50ZXIoKSA/PyBbMCwgMF0sXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZmVhdHVyZURlc3RpbmF0aW9uLmdldEdlb21ldHJ5KCk/LmdldENvb3JkaW5hdGVzKCkgPz8gZmVhdHVyZURlc3RpbmF0aW9uLmdldEdlb21ldHJ5KCk/LmdldENlbnRlcigpID8/IFswLCAwXVxuICAgICAgXSksXG4gICAgICBzb3VyY2U6IGZlYXR1cmVTb3VyY2UsXG4gICAgICBkZXN0aW5hdGlvbjogZmVhdHVyZURlc3RpbmF0aW9uLFxuICAgICAgdHlwZTogJ2xpbmsnXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0TWFwQXNQbmcobWFwOiBNYXApIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBtYXAub25jZSgncmVuZGVyY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1hcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjb25zdCBzaXplID0gbWFwLmdldFNpemUoKSB8fCBbMTAwLCAxMDBdO1xuICAgICAgICBtYXBDYW52YXMud2lkdGggPSBzaXplWzBdO1xuICAgICAgICBtYXBDYW52YXMuaGVpZ2h0ID0gc2l6ZVsxXTtcbiAgICAgICAgY29uc3QgbWFwQ29udGV4dCA9IG1hcENhbnZhcy5nZXRDb250ZXh0KCcyZCcpIHx8IChudWxsIGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcub2wtbGF5ZXIgY2FudmFzLCBjYW52YXMub2wtbGF5ZXInKSwgKGNhbnZhcykgPT4ge1xuICAgICAgICAgIGlmIChjYW52YXMud2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBvcGFjaXR5ID0gY2FudmFzLnBhcmVudE5vZGUuc3R5bGUub3BhY2l0eSB8fCBjYW52YXMuc3R5bGUub3BhY2l0eTtcbiAgICAgICAgICAgIG1hcENvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcGFjaXR5ID09PSAnJyA/IDEgOiBOdW1iZXIob3BhY2l0eSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGNhbnZhcy5wYXJlbnROb2RlLnN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgICAgbWFwQ29udGV4dC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICAgIG1hcENvbnRleHQuZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IG1hdHJpeDtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGNhbnZhcy5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgdHJhbnNmb3JtIHBhcmFtZXRlcnMgZnJvbSB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gbWF0cml4XG4gICAgICAgICAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybVxuICAgICAgICAgICAgICAgIC5tYXRjaCgvXm1hdHJpeFxcKChbXihdKilcXCkkLylbMV1cbiAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgIC5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hdHJpeCA9IFtcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGNhbnZhcy5zdHlsZS53aWR0aCkgLyBjYW52YXMud2lkdGgsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoY2FudmFzLnN0eWxlLmhlaWdodCkgLyBjYW52YXMuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybSB0byB0aGUgZXhwb3J0IG1hcCBjb250ZXh0XG4gICAgICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLnNldFRyYW5zZm9ybS5hcHBseShtYXBDb250ZXh0LCBtYXRyaXgpO1xuICAgICAgICAgICAgbWFwQ29udGV4dC5kcmF3SW1hZ2UoY2FudmFzLCAwLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtYXBDb250ZXh0Lmdsb2JhbEFscGhhID0gMTtcbiAgICAgICAgcmVzb2x2ZShtYXBDYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgICB9KTtcbiAgICAgIG1hcC5yZW5kZXJTeW5jKCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZXhwb3J0TWFwQXNJbWFnZShtYXA6IE1hcCwgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIFdpZGdldE1hcFV0aWxzLmdldE1hcEFzUG5nKG1hcCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGxpbmsuaHJlZiA9IGRhdGE7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2VvbWV0cnlGb3JMYXllcihsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcbiAgICAgIGNhc2UgJ21hcmtlcic6XG4gICAgICBjYXNlICdoZWF0bWFwJzpcbiAgICAgIGNhc2UgJ2J1YmJsZSc6XG4gICAgICBjYXNlICdwb2ludCc6XG4gICAgICAgIHJldHVybiBGaWVsZFR5cGUuUE9JTlQ7XG4gICAgICBjYXNlICdsaW5lJzpcbiAgICAgICAgcmV0dXJuIEZpZWxkVHlwZS5MSU5FO1xuICAgICAgY2FzZSAncG9seWdvbic6XG4gICAgICAgIHJldHVybiBGaWVsZFR5cGUuUE9MWUdPTjtcbiAgICAgIGNhc2UgJ211bHRpLWxpbmUnOlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLk1VTFRJTElORTtcbiAgICAgIGNhc2UgJ211bHRpLXBvbHlnb24nOlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLk1VTFRJUE9MWUdPTjtcbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgICByZXR1cm4gV2lkZ2V0TWFwVXRpbHMuZ2VvbWV0cnlGb3JMYXllcih7XG4gICAgICAgICAgdHlwZTogV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLnRyYW5zbGF0ZUZpZWxkVHlwZVRvTGF5ZXJUeXBlKGxheWVyLnN1YlR5cGUpXG4gICAgICAgIH0gYXMgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBGaWVsZFR5cGUuUE9JTlQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzc2lnbkxheWVyc09yZGVyKF9sYXllcnM6IE1hcFdpZGdldExheWVyT3B0aW9uc1tdKSB7XG4gICAgY29uc3QgbGF5ZXJzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShfbGF5ZXJzKSkgYXMgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zW107XG5cbiAgICBsYXllcnMuc29ydCgobDEsIGwyKSA9PiAobDIuYmFja2dyb3VuZCA/IDAgOiAxKSAtIChsMS5iYWNrZ3JvdW5kID8gMCA6IDEpKTtcblxuICAgIC8vIEFzc2lnbiBzdXJlIHRoaW5nc1xuICAgIGxheWVycy5mb3JFYWNoKChsYXllciwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChsYXllci5iYWNrZ3JvdW5kKSB7XG4gICAgICAgIGxheWVyLm9yZGVyID0gV2lkZ2V0TWFwVXRpbHMuQkFDS0dST1VORF9PUkRFUjtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiAhbGF5ZXIub3JkZXIpIHtcbiAgICAgICAgbGF5ZXIub3JkZXIgPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGF5ZXJzLmZvckVhY2goKGxheWVyLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGxheWVyLm9yZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IFtkaXN0YW5jZVRvRmlyc3RQcmV2aW91c09yZGVyLCBkaXN0YW5jZVRvRmlyc3ROZXh0T3JkZXJdID0gW1xuICAgICAgICAgIGxheWVyc1xuICAgICAgICAgICAgLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC5vcmRlciAhPT0gdW5kZWZpbmVkKSArIDEsXG4gICAgICAgICAgbGF5ZXJzLnNsaWNlKGluZGV4ICsgMSkuZmluZEluZGV4KChlbGVtZW50KSA9PiBlbGVtZW50Lm9yZGVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgIF07XG5cbiAgICAgICAgbGV0IFtwcmV2aW91c09yZGVySW5kZXgsIG5leHRPcmRlckluZGV4XSA9IFtcbiAgICAgICAgICBkaXN0YW5jZVRvRmlyc3RQcmV2aW91c09yZGVyID4gLTEgPyBpbmRleCAtIGRpc3RhbmNlVG9GaXJzdFByZXZpb3VzT3JkZXIgOiAwLFxuICAgICAgICAgIGRpc3RhbmNlVG9GaXJzdE5leHRPcmRlciArIGluZGV4ICsgMVxuICAgICAgICBdO1xuICAgICAgICBsZXQgW3ByZXZpb3VzT3JkZXIsIG5leHRPcmRlcl0gPSBbXG4gICAgICAgICAgZGlzdGFuY2VUb0ZpcnN0UHJldmlvdXNPcmRlciA+IC0xID8gbGF5ZXJzW3ByZXZpb3VzT3JkZXJJbmRleF0ub3JkZXIhIDogMCxcbiAgICAgICAgICBkaXN0YW5jZVRvRmlyc3ROZXh0T3JkZXIgPiAtMSA/IGxheWVyc1tuZXh0T3JkZXJJbmRleF0ub3JkZXIhIDogLTFcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAobmV4dE9yZGVyID4gMCAmJiBuZXh0T3JkZXIgPCBwcmV2aW91c09yZGVyKSB7XG4gICAgICAgICAgY29uc3QgbmV3T3JkZXIgPSBwcmV2aW91c09yZGVyICsgKG5leHRPcmRlckluZGV4IC0gcHJldmlvdXNPcmRlckluZGV4KTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgdGhlIG9yZGVyIHByb3BlcnR5IG9mIGxheWVyIG5vICR7aW5kZXggKyAyfSB3YXMgcHJlc2V0IGJ1dCBkb2Vzbid0IGZvbGxvdyB0aGUgb3JkZXIgb2YgdGhlIG90aGVyIGxheWVyc2BcbiAgICAgICAgICApO1xuICAgICAgICAgIG5leHRPcmRlciA9IG5ld09yZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRPcmRlciA+IDApIHtcbiAgICAgICAgICBsZXQgcmVsYXRpdmVJbmRleCA9IGluZGV4IC0gcHJldmlvdXNPcmRlckluZGV4O1xuICAgICAgICAgIGxheWVyLm9yZGVyID1cbiAgICAgICAgICAgIHByZXZpb3VzT3JkZXIgKyAoKG5leHRPcmRlciAtIHByZXZpb3VzT3JkZXIpIC8gKG5leHRPcmRlckluZGV4IC0gcHJldmlvdXNPcmRlckluZGV4KSkgKiByZWxhdGl2ZUluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxheWVyLm9yZGVyID0gcHJldmlvdXNPcmRlciArIGRpc3RhbmNlVG9GaXJzdFByZXZpb3VzT3JkZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXllcnMuc29ydCgobDEsIGwyKSA9PiAobDEub3JkZXIgPz8gMSkgLSAobDIub3JkZXIhID8/IDEpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWFkR2VvbWV0cnk8VCBleHRlbmRzICdwb2ludCcgfCAnbGluZScgfCAnbXVsdGktbGluZScgfCAncG9seWdvbicgfCAnbXVsdGktcG9seWdvbic+KFxuICAgIHByb2plY3Rpb246IFByb2plY3Rpb25MaWtlLFxuICAgIGl0ZW06IEl0ZW0sXG4gICAgdHlwZTogVCxcbiAgICBhdHRyaWJ1dGU6IEF0dHJpYnV0ZSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAoIWF0dHJpYnV0ZSB8fCAhaXRlbS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZS5uYW1lXSkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gaXRlbS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZS5uYW1lXTtcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gJ01VTFRJJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZXNbMF07XG4gICAgfVxuICAgIGxldCBnZW9tZXRyeTtcbiAgICB0cnkge1xuICAgICAgZ2VvbWV0cnkgPSBuZXcgR2VvSlNPTigpLnJlYWRHZW9tZXRyeSh2YWx1ZS52YWx1ZSBhcyBhbnksIHtcbiAgICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb25cbiAgICAgIH0pIGFzIEdlb21ldHJ5O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignZXJyb3IgcmVhZGluZyBHZW9tZXRyeScsIHZhbHVlLnZhbHVlLCBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2VvbWV0cnk7XG4gIH1cblxuICBzdGF0aWMgZXh0cmFjdEdlb21ldHJpZXModmFsdWU6IEF0dHJpYnV0ZVNpbXBsZVZhbHVlLCBwb2ludHM6IGFueVtdLCB0eXBlOiAncG9pbnQnIHwgJ2xpbmUnIHwgJ3BvbHlnb24nKSB7XG4gICAgY29uc3QgdmFsdWVTaW1wbGUgPSB2YWx1ZS52YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlU2ltcGxlICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVTaW1wbGUgIT09ICdudW1iZXInKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ3BvaW50JyAmJiB2YWx1ZVNpbXBsZS50eXBlID09PSBGaWVsZFR5cGUuUE9JTlQpIHtcbiAgICAgICAgcG9pbnRzLnB1c2godmFsdWVTaW1wbGUuY29vcmRpbmF0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09ICdwb2ludCcgJiYgdmFsdWVTaW1wbGUudHlwZSA9PT0gRmllbGRUeXBlLk1VTFRJUE9JTlQpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goLi4udmFsdWVTaW1wbGUuY29vcmRpbmF0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09ICdsaW5lJyAmJiB2YWx1ZVNpbXBsZS50eXBlID09PSBGaWVsZFR5cGUuTElORSkge1xuICAgICAgICBwb2ludHMucHVzaCh2YWx1ZVNpbXBsZS5jb29yZGluYXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gJ2xpbmUnICYmIHZhbHVlU2ltcGxlLnR5cGUgPT09IEZpZWxkVHlwZS5NVUxUSUxJTkUpIHtcbiAgICAgICAgcG9pbnRzLnB1c2goLi4udmFsdWVTaW1wbGUuY29vcmRpbmF0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09ICdwb2x5Z29uJyAmJiB2YWx1ZVNpbXBsZS50eXBlID09PSBGaWVsZFR5cGUuUE9MWUdPTikge1xuICAgICAgICBwb2ludHMucHVzaCh2YWx1ZVNpbXBsZS5jb29yZGluYXRlcyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gJ3BvbHlnb24nICYmIHZhbHVlU2ltcGxlLnR5cGUgPT09IEZpZWxkVHlwZS5NVUxUSVBPTFlHT04pIHtcbiAgICAgICAgcG9pbnRzLnB1c2goLi4udmFsdWVTaW1wbGUuY29vcmRpbmF0ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBERUZBVUxUX0hFQVRNQVBfUkFESVVTID0gMjU7XG4gIHN0YXRpYyBERUZBVUxUX1JBRElVU19JTlRFTlNJVFlfRkFDVE9SID0gMTAwMDA7XG4gIHN0YXRpYyBERUZBVUxUX1pPT01fTUlOID0gMztcbiAgc3RhdGljIERFRkFVTFRfWk9PTV9TVEFSVCA9IDEwO1xuICBzdGF0aWMgREVGQVVMVF9aT09NX01BWCA9IDE4O1xuICBzdGF0aWMgREVGQVVMVF9NQVBfQ0VOVEVSID0gWzIuMjgyNzIxNzM0NzM4MTUyNSwgNDguODY0NzA2MDMxNTU3NzE2XTtcblxuICBzdGF0aWMgQkFDS0dST1VORF9PUkRFUiA9IDk5OTk7XG59XG4iXX0=
|
|
315
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC91dGlscy93aWRnZXQtbWFwLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxrQkFBa0IsRUFFbEIsU0FBUyxFQUdULFNBQVMsRUFRVixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQU8sTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVMsTUFBTSxTQUFTLENBQUM7QUFFcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxhQUFhLEVBQWtCLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxNQUFNLE9BQU8sY0FBYztJQUN6QixNQUFNLENBQUMseUJBQXlCLENBQzlCLEtBQTRCLEVBQzVCLFNBQW9CLEVBQ3BCLGtCQUEyQixFQUMzQixNQUFlO1FBRWYsSUFDRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUN6RyxLQUFLLENBQUMsSUFBSSxDQUNYO1lBQ0QsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsa0JBQWtCO1lBQ3BCLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzdCO1lBQ0EsTUFBTSxhQUFhLEdBQUcsS0FHUyxDQUFDO1lBRWhDLE1BQU0sT0FBTyxHQUFH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QyxDQUFDO2FBQ3JCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQzthQUN4QixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7YUFDdEIsdUJBQWtCLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2FBRTlELHFCQUFnQixHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBBdHRyaWJ1dGUsXG4gIEF0dHJpYnV0ZVNpbXBsZVZhbHVlLFxuICBDbGFzcyxcbiAgREVGQVVMVF9QUk9KRUNUSU9OLFxuICBGaWVsZCxcbiAgRmllbGRUeXBlLFxuICBHZXRDYXBhYmlsaXRpZXNSZXNwb25zZSxcbiAgSXRlbSxcbiAgSXRlbVV0aWxzLFxuICBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gIFJlbGF0aW9uLFxuICBSZXN1bHRTZXRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcCB9IGZyb20gJ29sJztcbmltcG9ydCB7IENpcmNsZSwgTGluZVN0cmluZywgUG9pbnQgfSBmcm9tICdvbC9nZW9tJztcbmltcG9ydCB7IFN0eWxlIH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHsgV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50L3dpZGdldC1tYXAtbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXQgYXMgZ2V0UHJvamVjdGlvbiwgUHJvamVjdGlvbkxpa2UsIHRyYW5zZm9ybSB9IGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHsgR2VvSlNPTiB9IGZyb20gJ29sL2Zvcm1hdCc7XG5pbXBvcnQgeyBYTUxVdGlscyB9IGZyb20gJy4veG1sLXV0aWxzLmNsYXNzJztcblxuZXhwb3J0IGNsYXNzIFdpZGdldE1hcFV0aWxzIHtcbiAgc3RhdGljIHBvcHVsYXRlTG9jYXRpb25BdHRyaWJ1dGUoXG4gICAgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICBjbGFzc2VzTm90RmlsdGVyZWQ6IENsYXNzW10sXG4gICAgZmllbGRzOiBGaWVsZFtdXG4gICkge1xuICAgIGlmIChcbiAgICAgIFsnaGVhdG1hcCcsICdtYXJrZXInLCAnYnViYmxlJywgJ3BvaW50JywgJ2xpbmUnLCAncG9seWdvbicsICdtdWx0aS1saW5lJywgJ211bHRpLXBvbHlnb24nLCAnYXV0byddLmluY2x1ZGVzKFxuICAgICAgICBsYXllci50eXBlXG4gICAgICApICYmXG4gICAgICAhIXJlc3VsdFNldCAmJlxuICAgICAgISFjbGFzc2VzTm90RmlsdGVyZWQgJiZcbiAgICAgIGNsYXNzZXNOb3RGaWx0ZXJlZC5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCBzcGVjaWZpY0xheWVyID0gbGF5ZXIgYXNcbiAgICAgICAgfCBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zXG4gICAgICAgIHwgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zXG4gICAgICAgIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuXG4gICAgICBjb25zdCBjbGFzc2VzID0gY2xhc3Nlc05vdEZpbHRlcmVkLmZpbHRlcihcbiAgICAgICAgKGNsKSA9PiBzcGVjaWZpY0xheWVyLmNsYXNzZXM/LmluY2x1ZGVzKGNsLmlkKSB8fCAhc3BlY2lmaWNMYXllci5jbGFzc2VzIHx8IHNwZWNpZmljTGF5ZXIuY2xhc3Nlcy5sZW5ndGggPT09IDBcbiAgICAgICk7XG5cbiAgICAgIGlmICghc3BlY2lmaWNMYXllci5hdHRyaWJ1dGUpIHtcbiAgICAgICAgLy8gTm8gbG9jYXRpb24gYXR0cmlidXRlIGF2YWlsYWJsZSwgdGhlbiB0cnkgdG8gZ3Vlc3Mgb25lIHRoYXQgd2lsbCBiZSBva1xuXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gV2lkZ2V0TWFwVXRpbHMuZ2VvbWV0cnlGb3JMYXllcihsYXllcik7XG5cbiAgICAgICAgbGV0IGNhbmRpZGF0ZXMgPSBbXSBhcyB7XG4gICAgICAgICAgYXR0cjogQXR0cmlidXRlO1xuICAgICAgICAgIGZpZWxkOiBGaWVsZCB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVtdO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gQmFzZWQgb24gaXRlbXMgdGhhdCB3ZSBoYXZlIHRvIGRpc3BsYXlcblxuICAgICAgICAgIGNhbmRpZGF0ZXMgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgICAubWFwKChrZXkpID0+ICh7IGl0ZW1zOiByZXN1bHRTZXQuaXRlbXNba2V5XSwgb0NsYXNzOiBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0ga2V5KSB9KSlcbiAgICAgICAgICAgIC5tYXAoKHsgaXRlbXMsIG9DbGFzcyB9KSA9PlxuICAgICAgICAgICAgICAob0NsYXNzID8/IHsgYXR0cmlidXRlczogW10gfSkuYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZikgPT4gZi5pZCA9PT0gYXR0ci5maWVsZCkgfSkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoYXR0cikgPT4gYXR0ci5maWVsZD8udHlwZSA9PT0gZ2VvbWV0cnkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBpdGVtcyB0byBkaXNwbGF5LCBzbyBhbGxvdyBhbGwgY29ycmVzcG9uZGluZyBnZW9tZXRyeSBmaWVsZHNcbiAgICAgICAgICBjYW5kaWRhdGVzID0gY2xhc3Nlc05vdEZpbHRlcmVkXG4gICAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgYXR0ciwgZmllbGQgfSkgPT4gZmllbGQ/LnR5cGUgPT09IGdlb21ldHJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzcGVjaWZpY0xheWVyLmF0dHJpYnV0ZSA9IGNhbmRpZGF0ZXNbMF0uYXR0ci5uYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHBvcHVsYXRlSW50ZW5zaXR5QXR0cmlidXRlKFxuICAgIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgY2xhc3Nlc05vdEZpbHRlcmVkOiBDbGFzc1tdLFxuICAgIGZpZWxkczogRmllbGRbXVxuICApIHtcbiAgICBpZiAoXG4gICAgICBbJ2hlYXRtYXAnLCAnYnViYmxlJ10uaW5jbHVkZXMobGF5ZXIudHlwZSkgJiZcbiAgICAgICEhcmVzdWx0U2V0ICYmXG4gICAgICAhIWNsYXNzZXNOb3RGaWx0ZXJlZCAmJlxuICAgICAgY2xhc3Nlc05vdEZpbHRlcmVkLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhcyBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuXG4gICAgICBjb25zdCBjbGFzc2VzID0gY2xhc3Nlc05vdEZpbHRlcmVkLmZpbHRlcihcbiAgICAgICAgKGNsKSA9PlxuICAgICAgICAgIChzcGVjaWZpY0xheWVyLmNsYXNzZXM/LmluY2x1ZGVzKGNsLmlkKSB8fCAhc3BlY2lmaWNMYXllci5jbGFzc2VzIHx8IHNwZWNpZmljTGF5ZXIuY2xhc3Nlcy5sZW5ndGggPT09IDApICYmXG4gICAgICAgICAgY2wuYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLm5hbWUgPT09IChzcGVjaWZpY0xheWVyPy5hdHRyaWJ1dGUgPz8gW10pKVxuICAgICAgKTtcblxuICAgICAgaWYgKCFzcGVjaWZpY0xheWVyLmludGVuc2l0eUF0dHJpYnV0ZSkge1xuICAgICAgICAvLyBObyBpbnRlbnNpdHkgYXR0cmlidXRlIGF2YWlsYWJsZSwgdGhlbiB0YWtlIHRoZSBtYXhpbXVtIGludGVuc2l0eSBtYXRjaGluZyBhdHRyaWJ1dGVcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlc0RyeSA9IE9iamVjdC5rZXlzKHJlc3VsdFNldC5pdGVtcylcbiAgICAgICAgICAubWFwKChrZXkpID0+ICh7IGl0ZW1zOiByZXN1bHRTZXQuaXRlbXNba2V5XSwgb0NsYXNzOiBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0ga2V5KSB9KSlcbiAgICAgICAgICAubWFwKCh7IGl0ZW1zLCBvQ2xhc3MgfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChvQ2xhc3MgPz8geyBhdHRyaWJ1dGVzOiBbXSB9KS5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZikgPT4gZi5pZCA9PT0gYXR0ci5maWVsZCkgfSkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGF0dHIpID0+IGF0dHIuZmllbGQ/LnR5cGUgPT09IEZpZWxkVHlwZS5ERUNJTUFMIHx8IGF0dHIuZmllbGQ/LnR5cGUgPT09IEZpZWxkVHlwZS5JTlRFR0VSKVxuICAgICAgICAgICAgICAubWFwKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0clZhbHVlcyA9IEl0ZW1VdGlscy5wZXJ0aW5lbnRWYWx1ZShpdGVtcywgYXR0ci5hdHRyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgbWluOiBNYXRoLm1pbiguLi5hdHRyVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgIG1heDogTWF0aC5tYXgoLi4uYXR0clZhbHVlcyksXG4gICAgICAgICAgICAgICAgICBuYW1lOiBhdHRyLmF0dHIubmFtZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5tYXggLSBhLm1heCk7XG5cbiAgICAgICAgaWYgKGNhbmRpZGF0ZXNEcnkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwZWNpZmljTGF5ZXIuaW50ZW5zaXR5QXR0cmlidXRlID0gY2FuZGlkYXRlc0RyeVswXS5uYW1lO1xuICAgICAgICAgIHNwZWNpZmljTGF5ZXIuaW50ZW5zaXR5QXNjID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRGZWF0dXJlRnJvbUl0ZW0oXG4gICAgcHJvamVjdGlvbjogUHJvamVjdGlvbkxpa2UsXG4gICAgaXRlbTogSXRlbSxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZSxcbiAgICBpY29uU3R5bGU/OiBTdHlsZSxcbiAgICBzZWxlY3RlZEljb25TdHlsZT86IFN0eWxlXG4gICkge1xuICAgIHJldHVybiBuZXcgRmVhdHVyZSh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgdHlwZSxcbiAgICAgIGdlb21ldHJ5OiBXaWRnZXRNYXBVdGlscy5yZWFkR2VvbWV0cnkocHJvamVjdGlvbiwgaXRlbSwgJ3BvaW50JywgbG9jYXRpb25BdHRyaWJ1dGUpID8/IHVuZGVmaW5lZCxcbiAgICAgIGNsYXNzaWNTdHlsZTogaWNvblN0eWxlID8/IG51bGwsXG4gICAgICBzZWxlY3RlZFN0eWxlOiBzZWxlY3RlZEljb25TdHlsZSA/PyBudWxsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0Q2lyY2xlRmVhdHVyZUZyb21JdGVtKFxuICAgIHByb2plY3Rpb246IFByb2plY3Rpb25MaWtlLFxuICAgIGl0ZW06IEl0ZW0sXG4gICAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZSxcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICBpY29uU3R5bGU6IFN0eWxlLFxuICAgIHNlbGVjdGVkSWNvblN0eWxlOiBTdHlsZVxuICApIHtcbiAgICByZXR1cm4gbmV3IEZlYXR1cmUoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGdlb21ldHJ5OiBuZXcgQ2lyY2xlKFxuICAgICAgICAoV2lkZ2V0TWFwVXRpbHMucmVhZEdlb21ldHJ5KHByb2plY3Rpb24sIGl0ZW0sICdwb2ludCcsIGxvY2F0aW9uQXR0cmlidXRlKSBhcyBQb2ludCkuZ2V0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICAgcmFkaXVzXG4gICAgICApLFxuICAgICAgY2xhc3NpY1N0eWxlOiBpY29uU3R5bGUsXG4gICAgICBzZWxlY3RlZFN0eWxlOiBzZWxlY3RlZEljb25TdHlsZSxcbiAgICAgIHR5cGU6ICdidWJibGUnXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0TGlua0ZlYXR1cmUocmVsYXRpb246IFJlbGF0aW9uLCBmZWF0dXJlU291cmNlOiBGZWF0dXJlPFBvaW50PiwgZmVhdHVyZURlc3RpbmF0aW9uOiBGZWF0dXJlPFBvaW50Pikge1xuICAgIHJldHVybiBuZXcgRmVhdHVyZSh7XG4gICAgICAuLi5yZWxhdGlvbixcbiAgICAgIGdlb21ldHJ5OiBuZXcgTGluZVN0cmluZyhbXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZmVhdHVyZVNvdXJjZS5nZXRHZW9tZXRyeSgpPy5nZXRDb29yZGluYXRlcygpID8/IGZlYXR1cmVTb3VyY2UuZ2V0R2VvbWV0cnkoKT8uZ2V0Q2VudGVyKCkgPz8gWzAsIDBdLFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGZlYXR1cmVEZXN0aW5hdGlvbi5nZXRHZW9tZXRyeSgpPy5nZXRDb29yZGluYXRlcygpID8/IGZlYXR1cmVEZXN0aW5hdGlvbi5nZXRHZW9tZXRyeSgpPy5nZXRDZW50ZXIoKSA/PyBbMCwgMF1cbiAgICAgIF0pLFxuICAgICAgc291cmNlOiBmZWF0dXJlU291cmNlLFxuICAgICAgZGVzdGluYXRpb246IGZlYXR1cmVEZXN0aW5hdGlvbixcbiAgICAgIHR5cGU6ICdsaW5rJ1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldE1hcEFzUG5nKG1hcDogTWFwKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbWFwLm9uY2UoJ3JlbmRlcmNvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtYXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IG1hcC5nZXRTaXplKCkgfHwgWzEwMCwgMTAwXTtcbiAgICAgICAgbWFwQ2FudmFzLndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgbWFwQ2FudmFzLmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIGNvbnN0IG1hcENvbnRleHQgPSBtYXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSB8fCAobnVsbCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm9sLWxheWVyIGNhbnZhcywgY2FudmFzLm9sLWxheWVyJyksIChjYW52YXMpID0+IHtcbiAgICAgICAgICBpZiAoY2FudmFzLndpZHRoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgb3BhY2l0eSA9IGNhbnZhcy5wYXJlbnROb2RlLnN0eWxlLm9wYWNpdHkgfHwgY2FudmFzLnN0eWxlLm9wYWNpdHk7XG4gICAgICAgICAgICBtYXBDb250ZXh0Lmdsb2JhbEFscGhhID0gb3BhY2l0eSA9PT0gJycgPyAxIDogTnVtYmVyKG9wYWNpdHkpO1xuXG4gICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBjYW52YXMucGFyZW50Tm9kZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICAgIG1hcENvbnRleHQuZmlsbFN0eWxlID0gYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgICBtYXBDb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtYXRyaXg7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBjYW52YXMuc3R5bGUudHJhbnNmb3JtO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAvLyBHZXQgdGhlIHRyYW5zZm9ybSBwYXJhbWV0ZXJzIGZyb20gdGhlIHN0eWxlJ3MgdHJhbnNmb3JtIG1hdHJpeFxuICAgICAgICAgICAgICBtYXRyaXggPSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAubWF0Y2goL15tYXRyaXhcXCgoW14oXSopXFwpJC8pWzFdXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAubWFwKE51bWJlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXRyaXggPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChjYW52YXMuc3R5bGUud2lkdGgpIC8gY2FudmFzLndpZHRoLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGNhbnZhcy5zdHlsZS5oZWlnaHQpIC8gY2FudmFzLmhlaWdodCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0gdG8gdGhlIGV4cG9ydCBtYXAgY29udGV4dFxuICAgICAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0uYXBwbHkobWFwQ29udGV4dCwgbWF0cml4KTtcbiAgICAgICAgICAgIG1hcENvbnRleHQuZHJhd0ltYWdlKGNhbnZhcywgMCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWFwQ29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICAgIHJlc29sdmUobWFwQ2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJykpO1xuICAgICAgfSk7XG4gICAgICBtYXAucmVuZGVyU3luYygpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGV4cG9ydE1hcEFzSW1hZ2UobWFwOiBNYXAsIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBXaWRnZXRNYXBVdGlscy5nZXRNYXBBc1BuZyhtYXApLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBsaW5rLmhyZWYgPSBkYXRhO1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdlb21ldHJ5Rm9yTGF5ZXIobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChsYXllci50eXBlKSB7XG4gICAgICBjYXNlICdtYXJrZXInOlxuICAgICAgY2FzZSAnaGVhdG1hcCc6XG4gICAgICBjYXNlICdidWJibGUnOlxuICAgICAgY2FzZSAncG9pbnQnOlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLlBPSU5UO1xuICAgICAgY2FzZSAnbGluZSc6XG4gICAgICAgIHJldHVybiBGaWVsZFR5cGUuTElORTtcbiAgICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLlBPTFlHT047XG4gICAgICBjYXNlICdtdWx0aS1saW5lJzpcbiAgICAgICAgcmV0dXJuIEZpZWxkVHlwZS5NVUxUSUxJTkU7XG4gICAgICBjYXNlICdtdWx0aS1wb2x5Z29uJzpcbiAgICAgICAgcmV0dXJuIEZpZWxkVHlwZS5NVUxUSVBPTFlHT047XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgICAgcmV0dXJuIFdpZGdldE1hcFV0aWxzLmdlb21ldHJ5Rm9yTGF5ZXIoe1xuICAgICAgICAgIHR5cGU6IFdpZGdldE1hcExheWVyU2VydmljZS50cmFuc2xhdGVGaWVsZFR5cGVUb0xheWVyVHlwZShsYXllci5zdWJUeXBlKVxuICAgICAgICB9IGFzIE1hcFdpZGdldExheWVyT3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLlBPSU5UO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3NpZ25MYXllcnNPcmRlcihfbGF5ZXJzOiBNYXBXaWRnZXRMYXllck9wdGlvbnNbXSkge1xuICAgIGNvbnN0IGxheWVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoX2xheWVycykpIGFzIE1hcFdpZGdldExheWVyT3B0aW9uc1tdO1xuXG4gICAgbGF5ZXJzLnNvcnQoKGwxLCBsMikgPT4gKGwyLmJhY2tncm91bmQgPyAwIDogMSkgLSAobDEuYmFja2dyb3VuZCA/IDAgOiAxKSk7XG5cbiAgICAvLyBBc3NpZ24gc3VyZSB0aGluZ3NcbiAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIsIGluZGV4KSA9PiB7XG4gICAgICBpZiAobGF5ZXIuYmFja2dyb3VuZCkge1xuICAgICAgICBsYXllci5vcmRlciA9IFdpZGdldE1hcFV0aWxzLkJBQ0tHUk9VTkRfT1JERVI7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgIWxheWVyLm9yZGVyKSB7XG4gICAgICAgIGxheWVyLm9yZGVyID0gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxheWVycy5mb3JFYWNoKChsYXllciwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChsYXllci5vcmRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBbZGlzdGFuY2VUb0ZpcnN0UHJldmlvdXNPcmRlciwgZGlzdGFuY2VUb0ZpcnN0TmV4dE9yZGVyXSA9IFtcbiAgICAgICAgICBsYXllcnNcbiAgICAgICAgICAgIC5zbGljZSgwLCBpbmRleClcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5maW5kSW5kZXgoKGVsZW1lbnQpID0+IGVsZW1lbnQub3JkZXIgIT09IHVuZGVmaW5lZCkgKyAxLFxuICAgICAgICAgIGxheWVycy5zbGljZShpbmRleCArIDEpLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC5vcmRlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBbcHJldmlvdXNPcmRlckluZGV4LCBuZXh0T3JkZXJJbmRleF0gPSBbXG4gICAgICAgICAgZGlzdGFuY2VUb0ZpcnN0UHJldmlvdXNPcmRlciA+IC0xID8gaW5kZXggLSBkaXN0YW5jZVRvRmlyc3RQcmV2aW91c09yZGVyIDogMCxcbiAgICAgICAgICBkaXN0YW5jZVRvRmlyc3ROZXh0T3JkZXIgKyBpbmRleCArIDFcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IFtwcmV2aW91c09yZGVyLCBuZXh0T3JkZXJdID0gW1xuICAgICAgICAgIGRpc3RhbmNlVG9GaXJzdFByZXZpb3VzT3JkZXIgPiAtMSA/IGxheWVyc1twcmV2aW91c09yZGVySW5kZXhdLm9yZGVyISA6IDAsXG4gICAgICAgICAgZGlzdGFuY2VUb0ZpcnN0TmV4dE9yZGVyID4gLTEgPyBsYXllcnNbbmV4dE9yZGVySW5kZXhdLm9yZGVyISA6IC0xXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKG5leHRPcmRlciA+IDAgJiYgbmV4dE9yZGVyIDwgcHJldmlvdXNPcmRlcikge1xuICAgICAgICAgIGNvbnN0IG5ld09yZGVyID0gcHJldmlvdXNPcmRlciArIChuZXh0T3JkZXJJbmRleCAtIHByZXZpb3VzT3JkZXJJbmRleCk7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYHRoZSBvcmRlciBwcm9wZXJ0eSBvZiBsYXllciBubyAke2luZGV4ICsgMn0gd2FzIHByZXNldCBidXQgZG9lc24ndCBmb2xsb3cgdGhlIG9yZGVyIG9mIHRoZSBvdGhlciBsYXllcnNgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXh0T3JkZXIgPSBuZXdPcmRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0T3JkZXIgPiAwKSB7XG4gICAgICAgICAgbGV0IHJlbGF0aXZlSW5kZXggPSBpbmRleCAtIHByZXZpb3VzT3JkZXJJbmRleDtcbiAgICAgICAgICBsYXllci5vcmRlciA9XG4gICAgICAgICAgICBwcmV2aW91c09yZGVyICsgKChuZXh0T3JkZXIgLSBwcmV2aW91c09yZGVyKSAvIChuZXh0T3JkZXJJbmRleCAtIHByZXZpb3VzT3JkZXJJbmRleCkpICogcmVsYXRpdmVJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXllci5vcmRlciA9IHByZXZpb3VzT3JkZXIgKyBkaXN0YW5jZVRvRmlyc3RQcmV2aW91c09yZGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGF5ZXJzLnNvcnQoKGwxLCBsMikgPT4gKGwxLm9yZGVyID8/IDEpIC0gKGwyLm9yZGVyISA/PyAxKSk7XG4gIH1cblxuICBzdGF0aWMgcmVhZEdlb21ldHJ5PFQgZXh0ZW5kcyAncG9pbnQnIHwgJ2xpbmUnIHwgJ211bHRpLWxpbmUnIHwgJ3BvbHlnb24nIHwgJ211bHRpLXBvbHlnb24nPihcbiAgICBwcm9qZWN0aW9uOiBQcm9qZWN0aW9uTGlrZSxcbiAgICBpdGVtOiBJdGVtLFxuICAgIHR5cGU6IFQsXG4gICAgYXR0cmlidXRlOiBBdHRyaWJ1dGUgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKCFhdHRyaWJ1dGUgfHwgIWl0ZW0uYXR0cmlidXRlc1thdHRyaWJ1dGUubmFtZV0pIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IGl0ZW0uYXR0cmlidXRlc1thdHRyaWJ1dGUubmFtZV07XG4gICAgaWYgKHZhbHVlLnR5cGUgPT09ICdNVUxUSScpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudmFsdWVzWzBdO1xuICAgIH1cbiAgICBsZXQgZ2VvbWV0cnk7XG4gICAgdHJ5IHtcbiAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb0pTT04oKS5yZWFkR2VvbWV0cnkodmFsdWUudmFsdWUgYXMgYW55LCB7XG4gICAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiBwcm9qZWN0aW9uXG4gICAgICB9KSBhcyBHZW9tZXRyeTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2Vycm9yIHJlYWRpbmcgR2VvbWV0cnknLCB2YWx1ZS52YWx1ZSwgZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdlb21ldHJ5O1xuICB9XG5cbiAgc3RhdGljIGV4dHJhY3RHZW9tZXRyaWVzKHZhbHVlOiBBdHRyaWJ1dGVTaW1wbGVWYWx1ZSwgcG9pbnRzOiBhbnlbXSwgdHlwZTogJ3BvaW50JyB8ICdsaW5lJyB8ICdwb2x5Z29uJykge1xuICAgIGNvbnN0IHZhbHVlU2ltcGxlID0gdmFsdWUudmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZVNpbXBsZSAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlU2ltcGxlICE9PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHR5cGUgPT09ICdwb2ludCcgJiYgdmFsdWVTaW1wbGUudHlwZSA9PT0gRmllbGRUeXBlLlBPSU5UKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHZhbHVlU2ltcGxlLmNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSAncG9pbnQnICYmIHZhbHVlU2ltcGxlLnR5cGUgPT09IEZpZWxkVHlwZS5NVUxUSVBPSU5UKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKC4uLnZhbHVlU2ltcGxlLmNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSAnbGluZScgJiYgdmFsdWVTaW1wbGUudHlwZSA9PT0gRmllbGRUeXBlLkxJTkUpIHtcbiAgICAgICAgcG9pbnRzLnB1c2godmFsdWVTaW1wbGUuY29vcmRpbmF0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09ICdsaW5lJyAmJiB2YWx1ZVNpbXBsZS50eXBlID09PSBGaWVsZFR5cGUuTVVMVElMSU5FKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKC4uLnZhbHVlU2ltcGxlLmNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlID09PSAncG9seWdvbicgJiYgdmFsdWVTaW1wbGUudHlwZSA9PT0gRmllbGRUeXBlLlBPTFlHT04pIHtcbiAgICAgICAgcG9pbnRzLnB1c2godmFsdWVTaW1wbGUuY29vcmRpbmF0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09ICdwb2x5Z29uJyAmJiB2YWx1ZVNpbXBsZS50eXBlID09PSBGaWVsZFR5cGUuTVVMVElQT0xZR09OKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKC4uLnZhbHVlU2ltcGxlLmNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcHJvamVjdEV4dGVudEFnZ3JlZ2F0aW9uUmVzcG9uc2UoXG4gICAgZmllbGQ6IEZpZWxkLFxuICAgIGV4dGVudFJlc3BvbnNlOiBBZ2dyZWdhdGlvblJlc3VsdCxcbiAgICBsYXllcjogTWFwR2VvU2VydmVyTGF5ZXJPcHRpb25zLFxuICAgIHdtc0NhcGFiaWxpdGllczogeyBbcDogc3RyaW5nXTogR2V0Q2FwYWJpbGl0aWVzUmVzcG9uc2UgfCBudWxsIH0gfCB1bmRlZmluZWQsXG4gICAgbWFwOiBNYXBcbiAgKSB7XG4gICAgY29uc3QgcHJvakJveCA9IGdldFByb2plY3Rpb24oZmllbGQhLmNycyA/PyBERUZBVUxUX1BST0pFQ1RJT04pO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gZXh0ZW50UmVzcG9uc2UudmFsdWVzIGFzIHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIHRvcF9sZWZ0OiB7XG4gICAgICAgICAgbG9uOiBzdHJpbmc7XG4gICAgICAgICAgbGF0OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGJvdHRvbV9yaWdodDoge1xuICAgICAgICAgIGxvbjogc3RyaW5nO1xuICAgICAgICAgIGxhdDogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9W107XG4gICAgaWYgKFxuICAgICAgcHJvakJveCAmJlxuICAgICAgcmVzcG9uc2UubGVuZ3RoID4gMCAmJlxuICAgICAgcmVzcG9uc2VbMF0udmFsdWUgJiZcbiAgICAgIHJlc3BvbnNlWzBdLnZhbHVlLnRvcF9sZWZ0ICYmXG4gICAgICByZXNwb25zZVswXS52YWx1ZS50b3BfbGVmdC5sYXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVzcG9uc2VbMF0udmFsdWUudG9wX2xlZnQubG9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlc3BvbnNlWzBdLnZhbHVlLmJvdHRvbV9yaWdodCAmJlxuICAgICAgcmVzcG9uc2VbMF0udmFsdWUuYm90dG9tX3JpZ2h0LmxhdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICByZXNwb25zZVswXS52YWx1ZS5ib3R0b21fcmlnaHQubG9uICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGFzb3VyY2U6IGxheWVyLmRhdGFzb3VyY2VJZCxcbiAgICAgICAgZXh0ZW50OiBbXG4gICAgICAgICAgdHJhbnNmb3JtKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgIGV4dGVudFJlc3BvbnNlLnZhbHVlc1swXSBhcyB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdG9wX2xlZnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvbjogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKS52YWx1ZS50b3BfbGVmdC5sb25cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICBleHRlbnRSZXNwb25zZS52YWx1ZXNbMF0gYXMge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZWZ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkudmFsdWUudG9wX2xlZnQubGF0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwcm9qQm94LFxuICAgICAgICAgICAgbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKClcbiAgICAgICAgICApLFxuICAgICAgICAgIHRyYW5zZm9ybShcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICBleHRlbnRSZXNwb25zZS52YWx1ZXNbMF0gYXMge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbV9yaWdodDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9uOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnZhbHVlLmJvdHRvbV9yaWdodC5sb25cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICBleHRlbnRSZXNwb25zZS52YWx1ZXNbMF0gYXMge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbV9yaWdodDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF0OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnZhbHVlLmJvdHRvbV9yaWdodC5sYXRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByb2pCb3gsXG4gICAgICAgICAgICBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YXNvdXJjZTogbGF5ZXIuZGF0YXNvdXJjZUlkLFxuICAgICAgZXh0ZW50OiBYTUxVdGlscy5nZXRMYXllckV4dGVudChsYXllci5wYXJhbUxheWVyLCBtYXAsIHdtc0NhcGFiaWxpdGllcyFbbGF5ZXIudXJsXT8uZG9jKSA/PyBbXVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgREVGQVVMVF9IRUFUTUFQX1JBRElVUyA9IDI1O1xuICBzdGF0aWMgREVGQVVMVF9SQURJVVNfSU5URU5TSVRZX0ZBQ1RPUiA9IDEwMDAwO1xuICBzdGF0aWMgREVGQVVMVF9aT09NX01JTiA9IDM7XG4gIHN0YXRpYyBERUZBVUxUX1pPT01fU1RBUlQgPSAxMDtcbiAgc3RhdGljIERFRkFVTFRfWk9PTV9NQVggPSAxODtcbiAgc3RhdGljIERFRkFVTFRfTUFQX0NFTlRFUiA9IFsyLjI4MjcyMTczNDczODE1MjUsIDQ4Ljg2NDcwNjAzMTU1NzcxNl07XG5cbiAgc3RhdGljIEJBQ0tHUk9VTkRfT1JERVIgPSA5OTk5O1xufVxuIl19
|
|
@@ -33,19 +33,21 @@ export class XMLUtils {
|
|
|
33
33
|
return null;
|
|
34
34
|
}
|
|
35
35
|
static getMatchingLayer(paramLayer, doc) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
36
|
+
if (doc) {
|
|
37
|
+
const WMSCapability = XMLUtils.find(doc.childNodes, 'WMS_Capabilities');
|
|
38
|
+
if (WMSCapability) {
|
|
39
|
+
const Capabilities = XMLUtils.find(WMSCapability.childNodes, 'Capability');
|
|
40
|
+
if (Capabilities) {
|
|
41
|
+
const Layer = XMLUtils.find(Capabilities.childNodes, 'Layer');
|
|
42
|
+
if (Layer) {
|
|
43
|
+
let matchingLayer = XMLUtils.findWith(Layer.childNodes, 'Name', paramLayer);
|
|
44
|
+
const split = paramLayer.split(':');
|
|
45
|
+
if (!matchingLayer && split.length >= 2) {
|
|
46
|
+
// Try again, splitting on ":" in the name to ignore namespace if present
|
|
47
|
+
matchingLayer = XMLUtils.findWith(Layer.childNodes, 'Name', split[split.length - 1]);
|
|
48
|
+
}
|
|
49
|
+
return matchingLayer;
|
|
47
50
|
}
|
|
48
|
-
return matchingLayer;
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
53
|
}
|
|
@@ -73,4 +75,4 @@ export class XMLUtils {
|
|
|
73
75
|
return null;
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1sLXV0aWxzLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtbWFwL3V0aWxzL3htbC11dGlscy5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFMUQsTUFBTSxPQUFPLFFBQVE7SUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUE2QixFQUFFLElBQVk7UUFDckQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ1osS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtvQkFDMUIsT0FBTyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUE2QixFQUFFLElBQVk7UUFDeEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25CO1NBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUE2QixFQUFFLFNBQWlCLEVBQUUsS0FBYTtRQUM3RSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzNELElBQUksUUFBUSxFQUFFLFdBQVcsS0FBSyxLQUFLLEVBQUU7Z0JBQ25DLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLEdBQWM7UUFDeEQsSUFBSSxHQUFHLEVBQUU7WUFDUCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztZQUN4RSxJQUFJLGFBQWEsRUFBRTtnQkFDakIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLFlBQVksRUFBRTtvQkFDaEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM5RCxJQUFJLEtBQUssRUFBRTt3QkFDVCxJQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO3dCQUM1RSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNwQyxJQUFJLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFOzRCQUN2Qyx5RUFBeUU7NEJBQ3pFLGFBQWEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ3RGO3dCQUNELE9BQU8sYUFBYSxDQUFDO3FCQUN0QjtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQWtCLEVBQUUsR0FBUSxFQUFFLEdBQWM7UUFDaEUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksYUFBYSxFQUFFO1lBQ2pCLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUMzRSxJQUFJLFdBQVcsRUFBRTtnQkFDZixhQUFhO2dCQUNiLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7Z0JBQzFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLE9BQU8sRUFBRTtvQkFDWCxPQUFPO3dCQUNMLFNBQVMsQ0FDUCxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ2xGLE9BQU8sRUFDUCxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQzlCO3dCQUNELFNBQVMsQ0FDUCxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ2xGLE9BQU8sRUFDUCxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQzlCO3FCQUNGLENBQUM7aUJBQ0g7YUFDRjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUZBVUxUX1BST0pFQ1RJT04gfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgTWFwIH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgZ2V0IGFzIGdldFByb2plY3Rpb24sIHRyYW5zZm9ybSB9IGZyb20gJ29sL3Byb2onO1xuXG5leHBvcnQgY2xhc3MgWE1MVXRpbHMge1xuICBzdGF0aWMgZmluZChjaGlsZHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCEhY2hpbGRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBub2RlID0gY2hpbGRzW2ldO1xuICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGZpbmRBbGwoY2hpbGRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4sIG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBub2RlID0gY2hpbGRzW2ldO1xuICAgICAgaWYgKG5vZGUubm9kZU5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgZmluZFdpdGgoY2hpbGRzOiBOb2RlTGlzdE9mPENoaWxkTm9kZT4sIGF0dHJpYnV0ZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBjaGlsZHNbaV07XG4gICAgICBjb25zdCBhdHRyTm9kZSA9IFhNTFV0aWxzLmZpbmQobm9kZS5jaGlsZE5vZGVzLCBhdHRyaWJ1dGUpO1xuICAgICAgaWYgKGF0dHJOb2RlPy50ZXh0Q29udGVudCA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGdldE1hdGNoaW5nTGF5ZXIocGFyYW1MYXllcjogc3RyaW5nLCBkb2M/OiBEb2N1bWVudCkge1xuICAgIGlmIChkb2MpIHtcbiAgICAgIGNvbnN0IFdNU0NhcGFiaWxpdHkgPSBYTUxVdGlscy5maW5kKGRvYy5jaGlsZE5vZGVzLCAnV01TX0NhcGFiaWxpdGllcycpO1xuICAgICAgaWYgKFdNU0NhcGFiaWxpdHkpIHtcbiAgICAgICAgY29uc3QgQ2FwYWJpbGl0aWVzID0gWE1MVXRpbHMuZmluZChXTVNDYXBhYmlsaXR5LmNoaWxkTm9kZXMsICdDYXBhYmlsaXR5Jyk7XG4gICAgICAgIGlmIChDYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICBjb25zdCBMYXllciA9IFhNTFV0aWxzLmZpbmQoQ2FwYWJpbGl0aWVzLmNoaWxkTm9kZXMsICdMYXllcicpO1xuICAgICAgICAgIGlmIChMYXllcikge1xuICAgICAgICAgICAgbGV0IG1hdGNoaW5nTGF5ZXIgPSBYTUxVdGlscy5maW5kV2l0aChMYXllci5jaGlsZE5vZGVzLCAnTmFtZScsIHBhcmFtTGF5ZXIpO1xuICAgICAgICAgICAgY29uc3Qgc3BsaXQgPSBwYXJhbUxheWVyLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoaW5nTGF5ZXIgJiYgc3BsaXQubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgLy8gVHJ5IGFnYWluLCBzcGxpdHRpbmcgb24gXCI6XCIgaW4gdGhlIG5hbWUgdG8gaWdub3JlIG5hbWVzcGFjZSBpZiBwcmVzZW50XG4gICAgICAgICAgICAgIG1hdGNoaW5nTGF5ZXIgPSBYTUxVdGlscy5maW5kV2l0aChMYXllci5jaGlsZE5vZGVzLCAnTmFtZScsIHNwbGl0W3NwbGl0Lmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXRjaGluZ0xheWVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMYXllckV4dGVudChwYXJhbUxheWVyOiBzdHJpbmcsIG1hcDogTWFwLCBkb2M/OiBEb2N1bWVudCkge1xuICAgIGlmICghZG9jKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hpbmdMYXllciA9IFhNTFV0aWxzLmdldE1hdGNoaW5nTGF5ZXIocGFyYW1MYXllciwgZG9jKTtcbiAgICBpZiAobWF0Y2hpbmdMYXllcikge1xuICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBYTUxVdGlscy5maW5kKG1hdGNoaW5nTGF5ZXIuY2hpbGROb2RlcywgJ0JvdW5kaW5nQm94Jyk7XG4gICAgICBpZiAoYm91bmRpbmdCb3gpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gYm91bmRpbmdCb3guYXR0cmlidXRlcztcbiAgICAgICAgY29uc3QgcHJvakJveCA9IGdldFByb2plY3Rpb24oYXR0cmlidXRlcy5DUlMudGV4dENvbnRlbnQgPz8gREVGQVVMVF9QUk9KRUNUSU9OKTtcbiAgICAgICAgaWYgKHByb2pCb3gpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdHJhbnNmb3JtKFxuICAgICAgICAgICAgICBbcGFyc2VGbG9hdChhdHRyaWJ1dGVzLm1pbngudGV4dENvbnRlbnQpLCBwYXJzZUZsb2F0KGF0dHJpYnV0ZXMubWlueS50ZXh0Q29udGVudCldLFxuICAgICAgICAgICAgICBwcm9qQm94LFxuICAgICAgICAgICAgICBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRyYW5zZm9ybShcbiAgICAgICAgICAgICAgW3BhcnNlRmxvYXQoYXR0cmlidXRlcy5tYXh4LnRleHRDb250ZW50KSwgcGFyc2VGbG9hdChhdHRyaWJ1dGVzLm1heHkudGV4dENvbnRlbnQpXSxcbiAgICAgICAgICAgICAgcHJvakJveCxcbiAgICAgICAgICAgICAgbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import * as i3 from '@angular/common';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { Component, ViewEncapsulation, NgModule } from '@angular/core';
|
|
5
|
+
import * as i4 from '@angular/forms';
|
|
6
|
+
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
|
|
7
|
+
import * as i2 from '@provoly/dashboard';
|
|
8
|
+
import { BaseFilterComponent, BaseFilterModule, PrySelectModule } from '@provoly/dashboard';
|
|
9
|
+
import { BehaviorSubject, switchMap } from 'rxjs';
|
|
10
|
+
import { distinctUntilChanged, debounceTime } from 'rxjs/operators';
|
|
11
|
+
import equal from 'fast-deep-equal/es6';
|
|
12
|
+
import * as i1 from '@ngrx/store';
|
|
13
|
+
|
|
14
|
+
class PryAutocompleteCssComponent {
|
|
15
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAutocompleteCssComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryAutocompleteCssComponent, selector: "pry-autocomplete-css", ngImport: i0, template: '', isInline: true, styles: [".m-form-label-field.-list{margin-bottom:0}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAutocompleteCssComponent, decorators: [{
|
|
19
|
+
type: Component,
|
|
20
|
+
args: [{ selector: 'pry-autocomplete-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".m-form-label-field.-list{margin-bottom:0}\n"] }]
|
|
21
|
+
}] });
|
|
22
|
+
|
|
23
|
+
class AutocompleteComponent extends BaseFilterComponent {
|
|
24
|
+
constructor(store, searchService) {
|
|
25
|
+
super(store);
|
|
26
|
+
this.searchService = searchService;
|
|
27
|
+
this.search$ = new BehaviorSubject('');
|
|
28
|
+
this.type = 'autocomplete';
|
|
29
|
+
}
|
|
30
|
+
ngOnInit() {
|
|
31
|
+
super.ngOnInit();
|
|
32
|
+
this.search$.next(this._value);
|
|
33
|
+
this.autocomplete$ = this.search$.pipe(distinctUntilChanged((p, v) => equal(p, v)), debounceTime(500), switchMap((search) => this.searchService.autocomplete(this.filter?.attributes, search)));
|
|
34
|
+
}
|
|
35
|
+
setFilter(value) {
|
|
36
|
+
if (value !== this.filter?.value) {
|
|
37
|
+
super.updateFilter(value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
updateSearch($event) {
|
|
41
|
+
// @ts-ignore
|
|
42
|
+
const value = $event ? $event.target.value : '';
|
|
43
|
+
this.search$.next(value);
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i1.Store }, { token: i2.SearchService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AutocompleteComponent, selector: "pry-autocomplete", usesInheritance: true, ngImport: i0, template: "<pry-autocomplete-css></pry-autocomplete-css>\n<div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\" *ngIf=\"filter\" (keyup)=\"updateSearch($event)\">\n <label class=\"a-label m-filter__label\" for=\"{{ filter.name }}\">{{ filter.name }} : </label>\n <pry-select\n [id]=\"filter.name\"\n [items]=\"autocomplete$ | async\"\n [ngModel]=\"filter.value\"\n (ngModelChange)=\"setFilter($event)\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n [itemsAsOption]=\"false\"\n aria-labelledby=\"item-label\"\n (blur)=\"updateSearch($event)\"\n ></pry-select>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: PryAutocompleteCssComponent, selector: "pry-autocomplete-css" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
|
|
47
|
+
}
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{ selector: 'pry-autocomplete', template: "<pry-autocomplete-css></pry-autocomplete-css>\n<div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\" *ngIf=\"filter\" (keyup)=\"updateSearch($event)\">\n <label class=\"a-label m-filter__label\" for=\"{{ filter.name }}\">{{ filter.name }} : </label>\n <pry-select\n [id]=\"filter.name\"\n [items]=\"autocomplete$ | async\"\n [ngModel]=\"filter.value\"\n (ngModelChange)=\"setFilter($event)\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n [itemsAsOption]=\"false\"\n aria-labelledby=\"item-label\"\n (blur)=\"updateSearch($event)\"\n ></pry-select>\n</div>\n" }]
|
|
51
|
+
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.SearchService }]; } });
|
|
52
|
+
|
|
53
|
+
class PryAutocompleteModule extends BaseFilterModule {
|
|
54
|
+
getComponent() {
|
|
55
|
+
return AutocompleteComponent;
|
|
56
|
+
}
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAutocompleteModule, deps: null, target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
58
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.6", ngImport: i0, type: PryAutocompleteModule, declarations: [AutocompleteComponent, PryAutocompleteCssComponent], imports: [CommonModule, ReactiveFormsModule, FormsModule, PrySelectModule], exports: [AutocompleteComponent] }); }
|
|
59
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAutocompleteModule, imports: [CommonModule, ReactiveFormsModule, FormsModule, PrySelectModule] }); }
|
|
60
|
+
}
|
|
61
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryAutocompleteModule, decorators: [{
|
|
62
|
+
type: NgModule,
|
|
63
|
+
args: [{
|
|
64
|
+
declarations: [AutocompleteComponent, PryAutocompleteCssComponent],
|
|
65
|
+
exports: [AutocompleteComponent],
|
|
66
|
+
imports: [CommonModule, ReactiveFormsModule, FormsModule, PrySelectModule]
|
|
67
|
+
}]
|
|
68
|
+
}] });
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Generated bundle index. Do not edit.
|
|
72
|
+
*/
|
|
73
|
+
|
|
74
|
+
export { AutocompleteComponent, PryAutocompleteCssComponent, PryAutocompleteModule };
|
|
75
|
+
//# sourceMappingURL=provoly-dashboard-filters-autocomplete.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provoly-dashboard-filters-autocomplete.mjs","sources":["../../../../projects/provoly/dashboard/filters/autocomplete/style/css.component.ts","../../../../projects/provoly/dashboard/filters/autocomplete/autocomplete.component.ts","../../../../projects/provoly/dashboard/filters/autocomplete/autocomplete.component.html","../../../../projects/provoly/dashboard/filters/autocomplete/autocomplete.module.ts","../../../../projects/provoly/dashboard/filters/autocomplete/provoly-dashboard-filters-autocomplete.ts"],"sourcesContent":["import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'pry-autocomplete-css',\n template: '',\n styleUrls: ['./_m-autocomplete.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class PryAutocompleteCssComponent {}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { BaseFilterComponent, SearchService } from '@provoly/dashboard';\nimport { BehaviorSubject, Observable, switchMap } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport equal from 'fast-deep-equal/es6';\n\n@Component({\n selector: 'pry-autocomplete',\n templateUrl: './autocomplete.component.html'\n})\nexport class AutocompleteComponent extends BaseFilterComponent implements OnInit, OnDestroy {\n search$ = new BehaviorSubject<string>('');\n autocomplete$?: Observable<string[]>;\n\n constructor(store: Store, private searchService: SearchService) {\n super(store);\n this.type = 'autocomplete';\n }\n\n override ngOnInit() {\n super.ngOnInit();\n this.search$.next(this._value);\n this.autocomplete$ = this.search$.pipe(\n distinctUntilChanged((p, v) => equal(p, v)),\n debounceTime(500),\n switchMap((search) => this.searchService.autocomplete(this.filter?.attributes, search))\n );\n }\n\n setFilter(value: string) {\n if (value !== this.filter?.value) {\n super.updateFilter(value);\n }\n }\n\n updateSearch($event?: Event) {\n // @ts-ignore\n const value = $event ? $event.target!.value : '';\n this.search$.next(value);\n }\n}\n","<pry-autocomplete-css></pry-autocomplete-css>\n<div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\" *ngIf=\"filter\" (keyup)=\"updateSearch($event)\">\n <label class=\"a-label m-filter__label\" for=\"{{ filter.name }}\">{{ filter.name }} : </label>\n <pry-select\n [id]=\"filter.name\"\n [items]=\"autocomplete$ | async\"\n [ngModel]=\"filter.value\"\n (ngModelChange)=\"setFilter($event)\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n [itemsAsOption]=\"false\"\n aria-labelledby=\"item-label\"\n (blur)=\"updateSearch($event)\"\n ></pry-select>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { BaseFilterComponent, BaseFilterModule, PrySelectModule } from '@provoly/dashboard';\nimport { AutocompleteComponent } from './autocomplete.component';\nimport { PryAutocompleteCssComponent } from './style/css.component';\n\n@NgModule({\n declarations: [AutocompleteComponent, PryAutocompleteCssComponent],\n exports: [AutocompleteComponent],\n imports: [CommonModule, ReactiveFormsModule, FormsModule, PrySelectModule]\n})\nexport class PryAutocompleteModule extends BaseFilterModule {\n override getComponent(): Type<BaseFilterComponent> {\n return AutocompleteComponent as Type<AutocompleteComponent>;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i5.PryAutocompleteCssComponent"],"mappings":"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"}
|
|
@@ -319,6 +319,8 @@ class PryFilterSettingsComponent extends ToolboxActionComponent {
|
|
|
319
319
|
return ['EQUALS', 'NOT_EQUALS', 'GREATER_THAN', 'LOWER_THAN'].includes(operator.value);
|
|
320
320
|
case 'text':
|
|
321
321
|
return ['CONTAINS', 'EQUALS', 'NOT_EQUALS', 'START_WITH', 'END_WITH'].includes(operator.value);
|
|
322
|
+
case 'autocomplete':
|
|
323
|
+
return ['EQUALS'].includes(operator.value);
|
|
322
324
|
default:
|
|
323
325
|
return operator;
|
|
324
326
|
}
|