@igo2/geo 17.0.0 → 17.0.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +6 -6
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +4 -4
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +4 -4
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +4 -4
- package/esm2022/lib/catalog/catalog.module.mjs +4 -4
- package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
- package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
- package/esm2022/lib/catalog/shared/catalog.service.mjs +17 -21
- package/esm2022/lib/datasource/shared/capabilities.interface.mjs +3 -1
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +3 -3
- package/esm2022/lib/datasource/shared/datasource.service.mjs +6 -5
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +5 -3
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/datasource.mjs +2 -2
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +6 -5
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +7 -6
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +4 -2
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +4 -4
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +4 -4
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +4 -4
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +3 -3
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +3 -3
- package/esm2022/lib/directions/directions.component.mjs +6 -7
- package/esm2022/lib/directions/directions.module.mjs +4 -4
- package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
- package/esm2022/lib/directions/shared/directions.service.mjs +12 -11
- package/esm2022/lib/directions/shared/directions.utils.mjs +3 -3
- package/esm2022/lib/directions/shared/store.mjs +1 -1
- package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
- package/esm2022/lib/download/download.module.mjs +4 -4
- package/esm2022/lib/download/shared/download.service.mjs +3 -3
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +4 -4
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +9 -9
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
- package/esm2022/lib/draw/draw/draw.component.mjs +15 -19
- package/esm2022/lib/draw/draw/draw.module.mjs +4 -4
- package/esm2022/lib/draw/drawingTool.module.mjs +4 -4
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +4 -4
- package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
- package/esm2022/lib/draw/shared/draw.utils.mjs +3 -3
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +6 -6
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +3 -3
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +4 -4
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +5 -6
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +4 -4
- package/esm2022/lib/feature/feature.module.mjs +4 -4
- package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
- package/esm2022/lib/feature/shared/feature.utils.mjs +1 -2
- package/esm2022/lib/feature/shared/store.mjs +4 -4
- package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +2 -2
- package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +2 -3
- package/esm2022/lib/feature/shared/strategies/search.mjs +2 -3
- package/esm2022/lib/feature/shared/strategies/selection.mjs +1 -1
- package/esm2022/lib/filter/filter.module.mjs +4 -4
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +5 -6
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +5 -5
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +9 -29
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +8 -9
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +5 -5
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +5 -6
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +4 -4
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +5 -6
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +3 -3
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +5 -6
- package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +1 -1
- package/esm2022/lib/filter/shared/ogc-filter.mjs +3 -2
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +5 -6
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +7 -7
- package/esm2022/lib/filter/shared/time-filter.service.mjs +5 -6
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +5 -5
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +3 -3
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +7 -8
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +5 -6
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +17 -17
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +4 -4
- package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +3 -3
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
- package/esm2022/lib/geo.module.mjs +5 -9
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +7 -8
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +4 -4
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +4 -4
- package/esm2022/lib/geometry/geometry.module.mjs +4 -4
- package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -4
- package/esm2022/lib/geometry/shared/controls/slice.mjs +3 -3
- package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -3
- package/esm2022/lib/geometry/shared/geometry.utils.mjs +2 -11
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +5 -6
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +25 -18
- package/esm2022/lib/import-export/import-export.module.mjs +4 -4
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +4 -4
- package/esm2022/lib/import-export/shared/export.service.mjs +5 -4
- package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
- package/esm2022/lib/import-export/shared/import.service.mjs +6 -6
- package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +4 -4
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +7 -7
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +4 -4
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +5 -5
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +5 -6
- package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +3 -3
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +4 -4
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +4 -4
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +5 -6
- package/esm2022/lib/layer/layer.module.mjs +4 -4
- package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
- package/esm2022/lib/layer/shared/layer.service.mjs +6 -5
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +2 -2
- package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/layer.mjs +1 -3
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +2 -2
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +5 -5
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +3 -3
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +6 -7
- package/esm2022/lib/layer/utils/outputLegend.mjs +3 -3
- package/esm2022/lib/layer/utils/vector-watcher.mjs +9 -9
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +7 -7
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +3 -3
- package/esm2022/lib/map/info-section/info-section.component.mjs +5 -6
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +3 -3
- package/esm2022/lib/map/map-center/map-center.component.mjs +9 -9
- package/esm2022/lib/map/map.module.mjs +4 -4
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +3 -3
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +5 -6
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +5 -6
- package/esm2022/lib/map/shared/controllers/geolocation.mjs +10 -10
- package/esm2022/lib/map/shared/controllers/view.mjs +3 -3
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +8 -11
- package/esm2022/lib/map/shared/linkedLayers.utils.mjs +5 -5
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +4 -4
- package/esm2022/lib/map/shared/map.mjs +4 -4
- package/esm2022/lib/map/shared/map.service.mjs +5 -6
- package/esm2022/lib/map/shared/map.utils.mjs +2 -3
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +3 -3
- package/esm2022/lib/map/shared/projection.service.mjs +3 -3
- package/esm2022/lib/map/shared/projection.utils.mjs +2 -3
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +7 -6
- package/esm2022/lib/map/utils/layer-watcher.mjs +4 -2
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +5 -4
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +5 -6
- package/esm2022/lib/measure/measure.module.mjs +4 -4
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +5 -5
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +5 -6
- package/esm2022/lib/measure/measurer/measurer.component.mjs +8 -16
- package/esm2022/lib/measure/measurer/measurer.module.mjs +4 -4
- package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
- package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +6 -6
- package/esm2022/lib/metadata/metadata.module.mjs +4 -4
- package/esm2022/lib/metadata/shared/metadata.service.mjs +5 -6
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +3 -3
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +6 -6
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +4 -4
- package/esm2022/lib/offline/shared/geo-network.service.mjs +4 -4
- package/esm2022/lib/overlay/shared/index.mjs +1 -3
- package/esm2022/lib/print/print/print.component.mjs +3 -3
- package/esm2022/lib/print/print-form/print-form.component.mjs +5 -5
- package/esm2022/lib/print/print.module.mjs +4 -4
- package/esm2022/lib/print/shared/print.service.mjs +32 -44
- package/esm2022/lib/query/query.module.mjs +4 -4
- package/esm2022/lib/query/shared/query-search-source.mjs +3 -3
- package/esm2022/lib/query/shared/query.directive.mjs +4 -4
- package/esm2022/lib/query/shared/query.enums.mjs +3 -1
- package/esm2022/lib/query/shared/query.service.mjs +23 -21
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +4 -4
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +4 -4
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +3 -3
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +7 -9
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +10 -12
- package/esm2022/lib/search/search-results/search-results.component.mjs +4 -4
- package/esm2022/lib/search/search-results/search-results.module.mjs +4 -4
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +4 -4
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +4 -4
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +4 -4
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +4 -4
- package/esm2022/lib/search/search.module.mjs +4 -4
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +5 -4
- package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/search.service.mjs +4 -4
- package/esm2022/lib/search/shared/search.utils.mjs +1 -1
- package/esm2022/lib/search/shared/sources/cadastre.mjs +3 -3
- package/esm2022/lib/search/shared/sources/coordinates.mjs +6 -6
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +2 -2
- package/esm2022/lib/search/shared/sources/icherche-icons.mjs +1 -1
- package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/icherche.mjs +14 -13
- package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/ilayer.mjs +10 -10
- package/esm2022/lib/search/shared/sources/nominatim.mjs +4 -4
- package/esm2022/lib/search/shared/sources/source.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/source.mjs +3 -2
- package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +7 -10
- package/esm2022/lib/search/shared/sources/workspace.mjs +8 -8
- package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +2 -1
- package/esm2022/lib/style/shared/feature/feature-style.mjs +3 -3
- package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +10 -16
- package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
- package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.interface.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.module.mjs +4 -4
- package/esm2022/lib/style/style-list/style-list.provider.mjs +2 -2
- package/esm2022/lib/style/style-list/style-list.service.mjs +5 -5
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +4 -4
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +4 -4
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +5 -5
- package/esm2022/lib/style/style-service/draw-style.service.mjs +5 -6
- package/esm2022/lib/style/style-service/style.service.mjs +4 -4
- package/esm2022/lib/style/style.module.mjs +4 -4
- package/esm2022/lib/toast/toast.component.mjs +5 -6
- package/esm2022/lib/toast/toast.module.mjs +4 -4
- package/esm2022/lib/utils/id-generator.mjs +6 -4
- package/esm2022/lib/utils/osmLinks.mjs +1 -1
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +3 -3
- package/esm2022/lib/wkt/shared/wkt.service.mjs +7 -8
- package/esm2022/lib/wkt/wkt.module.mjs +4 -4
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +3 -3
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +4 -4
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +11 -9
- package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +3 -3
- package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +3 -3
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +7 -5
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -2
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +3 -3
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +3 -3
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace.module.mjs +4 -4
- package/esm2022/public_api.mjs +1 -2
- package/fesm2022/igo2-geo.mjs +943 -1071
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
- package/lib/catalog/shared/catalog.abstract.d.ts +2 -6
- package/lib/catalog/shared/catalog.interface.d.ts +2 -6
- package/lib/catalog/shared/catalogs.d.ts +2 -2
- package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +2 -2
- package/lib/datasource/shared/datasources/datasource.d.ts +2 -2
- package/lib/datasource/shared/datasources/datasource.interface.d.ts +4 -12
- package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +2 -2
- package/lib/datasource/shared/datasources/mvt-datasource.interface.d.ts +2 -2
- package/lib/datasource/shared/datasources/websocket-datasource.d.ts +3 -3
- package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +1 -1
- package/lib/datasource/shared/datasources/xyz-datasource.interface.d.ts +2 -2
- package/lib/directions/shared/directions.interface.d.ts +4 -9
- package/lib/directions/shared/directions.utils.d.ts +2 -2
- package/lib/draw/draw/draw.component.d.ts +1 -1
- package/lib/draw/shared/draw-icon.service.d.ts +1 -1
- package/lib/draw/shared/draw.interface.d.ts +1 -2
- package/lib/draw/shared/draw.utils.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.component.d.ts +1 -3
- package/lib/feature/feature-details/feature-details.directive.d.ts +1 -3
- package/lib/feature/feature-form/feature-form.component.d.ts +3 -8
- package/lib/feature/shared/feature.interfaces.d.ts +11 -17
- package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +0 -1
- package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +1 -3
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +2 -4
- package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +2 -2
- package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +0 -1
- package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +0 -1
- package/lib/filter/shared/ogc-filter-time.service.d.ts +0 -1
- package/lib/filter/shared/ogc-filter.interface.d.ts +2 -4
- package/lib/filter/shared/ogc-filter.service.d.ts +0 -1
- package/lib/filter/shared/spatial-filter.service.d.ts +1 -3
- package/lib/filter/shared/time-filter.service.d.ts +0 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +2 -6
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +2 -6
- package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -8
- package/lib/filter/time-filter-button/time-filter-button.component.d.ts +0 -1
- package/lib/filter/time-filter-form/time-filter-form.component.d.ts +10 -10
- package/lib/geo.module.d.ts +8 -9
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +3 -5
- package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -3
- package/lib/geometry/shared/geometry.utils.d.ts +1 -8
- package/lib/import-export/export-button/export-button.component.d.ts +0 -1
- package/lib/layer/layer-legend/layer-legend.component.d.ts +1 -3
- package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +0 -1
- package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +0 -1
- package/lib/layer/shared/clusterParam.d.ts +1 -3
- package/lib/layer/shared/layers/layer.interface.d.ts +1 -3
- package/lib/layer/shared/layers/vector-layer.d.ts +1 -1
- package/lib/layer/track-feature-button/track-feature-button.component.d.ts +0 -1
- package/lib/layer/utils/outputLegend.d.ts +2 -2
- package/lib/map/info-section/info-section.component.d.ts +0 -1
- package/lib/map/map-center/map-center.component.d.ts +0 -1
- package/lib/map/offline-button/offline-button.component.d.ts +0 -1
- package/lib/map/rotation-button/rotation-button.component.d.ts +3 -2
- package/lib/map/shared/map.d.ts +2 -2
- package/lib/map/shared/map.service.d.ts +0 -1
- package/lib/map/swipe-control/swipe-control.component.d.ts +0 -1
- package/lib/map/zoom-button/zoom-button.component.d.ts +0 -1
- package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
- package/lib/measure/measurer/measurer-item.component.d.ts +0 -1
- package/lib/measure/shared/measure.interfaces.d.ts +1 -2
- package/lib/metadata/shared/metadata.service.d.ts +0 -1
- package/lib/overlay/shared/index.d.ts +0 -2
- package/lib/print/shared/print.service.d.ts +7 -8
- package/lib/query/shared/query.service.d.ts +0 -1
- package/lib/search/search-results/search-results.component.d.ts +5 -15
- package/lib/search/shared/search.interfaces.d.ts +1 -3
- package/lib/search/shared/sources/coordinates.providers.d.ts +1 -1
- package/lib/search/shared/sources/icherche-icons.d.ts +1 -3
- package/lib/search/shared/sources/icherche.interfaces.d.ts +2 -6
- package/lib/search/shared/sources/ilayer.interfaces.d.ts +4 -8
- package/lib/search/shared/sources/source.interfaces.d.ts +2 -6
- package/lib/search/shared/sources/storedqueries.interfaces.d.ts +2 -6
- package/lib/style/shared/feature/feature-style.d.ts +2 -2
- package/lib/style/shared/vector/vector-style.interface.d.ts +12 -20
- package/lib/style/style-list/style-list.interface.d.ts +1 -3
- package/lib/style/style-list/style-list.provider.d.ts +2 -2
- package/lib/style/style-service/draw-style.service.d.ts +0 -1
- package/lib/style/style-service/style.service.d.ts +1 -3
- package/lib/toast/toast.component.d.ts +0 -1
- package/lib/utils/id-generator.d.ts +1 -2
- package/lib/wkt/shared/wkt.service.d.ts +0 -1
- package/lib/workspace/shared/edition-workspace.service.d.ts +2 -6
- package/package.json +18 -19
- package/public_api.d.ts +0 -1
- package/src/lib/catalog/catalog-browser/catalog-browser.theming.scss +1 -1
- package/src/lib/directions/directions-results/directions-results.theming.scss +1 -1
- package/src/lib/draw/draw.theming.scss +4 -4
- package/src/lib/feature/feature-details/feature-details.theming.scss +1 -1
- package/src/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +3 -3
- package/src/lib/layer/layer-item/layer-item.theme.scss +4 -4
- package/src/lib/layer/layer-legend/layer-legend.theming.scss +1 -1
- package/src/lib/layer/layer-list-tool/layer-list-tool.theming.scss +1 -1
- package/src/lib/map/map-browser/map-browser.theming.scss +5 -5
- package/src/lib/map/menu-button/menu-button.theming.scss +2 -2
- package/src/lib/map/zoom-button/zoom-button.theming.scss +4 -4
- package/src/lib/measure/measurer/measurer.theming.scss +2 -2
- package/src/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +2 -2
- package/esm2022/lib/overlay/overlay.module.mjs +0 -24
- package/esm2022/lib/overlay/shared/overlay.directive.mjs +0 -39
- package/esm2022/lib/overlay/shared/overlay.service.mjs +0 -26
- package/lib/overlay/overlay.module.d.ts +0 -12
- package/lib/overlay/shared/overlay.directive.d.ts +0 -18
- package/lib/overlay/shared/overlay.service.d.ts +0 -14
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable no-prototype-builtins */
|
|
1
2
|
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
2
3
|
import { Injectable } from '@angular/core';
|
|
3
4
|
import { MatDialog } from '@angular/material/dialog';
|
|
@@ -99,6 +100,8 @@ export class EditionWorkspaceService {
|
|
|
99
100
|
clonedLinks = JSON.parse(JSON.stringify(layer.options.linkedLayers.links));
|
|
100
101
|
}
|
|
101
102
|
clonedLinks.push(linkProperties);
|
|
103
|
+
// TODO: Démystifier ce bout de code
|
|
104
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
102
105
|
(layer.options.linkedLayers.linkId = layer.options.linkedLayers.linkId
|
|
103
106
|
? layer.options.linkedLayers.linkId
|
|
104
107
|
: wmsLinkId),
|
|
@@ -224,7 +227,7 @@ export class EditionWorkspaceService {
|
|
|
224
227
|
createTableTemplate(workspace, layer) {
|
|
225
228
|
const fields = layer.dataSource.options.sourceFields || [];
|
|
226
229
|
const relations = layer.dataSource.options.relations || [];
|
|
227
|
-
|
|
230
|
+
const rendererType = EntityTableColumnRenderer.UnsanitizedHTML;
|
|
228
231
|
let buttons = [];
|
|
229
232
|
let columns = [];
|
|
230
233
|
let relationsColumn = [];
|
|
@@ -307,7 +310,7 @@ export class EditionWorkspaceService {
|
|
|
307
310
|
return;
|
|
308
311
|
}
|
|
309
312
|
columns = fields.map((field) => {
|
|
310
|
-
|
|
313
|
+
const column = {
|
|
311
314
|
name: `properties.${field.name}`,
|
|
312
315
|
title: field.alias ? field.alias : field.name,
|
|
313
316
|
renderer: rendererType,
|
|
@@ -521,7 +524,7 @@ export class EditionWorkspaceService {
|
|
|
521
524
|
this.cancelEdit(workspace, feature, true);
|
|
522
525
|
this.messageService.success('igo.geo.workspace.modifySuccess');
|
|
523
526
|
this.refreshMap(workspace.layer, workspace.layer.map);
|
|
524
|
-
|
|
527
|
+
const relationLayers = [];
|
|
525
528
|
for (const relation of workspace.layer.options.sourceOptions
|
|
526
529
|
.relations) {
|
|
527
530
|
workspace.map.layers.forEach((layer) => {
|
|
@@ -604,14 +607,13 @@ export class EditionWorkspaceService {
|
|
|
604
607
|
lay.options.linkedLayers?.linkId.includes(layer.id.substr(0, layer.id.indexOf('.') - 1)) &&
|
|
605
608
|
lay.options.linkedLayers?.linkId.includes('WmsWorkspaceTableSrc')) {
|
|
606
609
|
const wmsOlLayer = lay.dataSource.ol;
|
|
607
|
-
|
|
610
|
+
const params = wmsOlLayer.getParams();
|
|
608
611
|
params._t = new Date().getTime();
|
|
609
612
|
wmsOlLayer.updateParams(params);
|
|
610
613
|
}
|
|
611
614
|
}
|
|
612
615
|
}
|
|
613
616
|
validateFeature(feature, workspace) {
|
|
614
|
-
let message;
|
|
615
617
|
let key;
|
|
616
618
|
let valid = true;
|
|
617
619
|
workspace.meta.tableTemplate.columns.forEach((column) => {
|
|
@@ -691,10 +693,10 @@ export class EditionWorkspaceService {
|
|
|
691
693
|
}
|
|
692
694
|
});
|
|
693
695
|
}
|
|
694
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
695
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
696
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: EditionWorkspaceService, deps: [{ token: i1.LayerService }, { token: i2.StorageService }, { token: i3.ConfigService }, { token: i4.MessageService }, { token: i5.HttpClient }, { token: i6.MatDialog }, { token: i7.StyleService }, { token: i8.AuthInterceptor }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
697
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: EditionWorkspaceService, providedIn: 'root' });
|
|
696
698
|
}
|
|
697
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
699
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: EditionWorkspaceService, decorators: [{
|
|
698
700
|
type: Injectable,
|
|
699
701
|
args: [{
|
|
700
702
|
providedIn: 'root'
|
|
@@ -713,4 +715,4 @@ function removeZ(coords) {
|
|
|
713
715
|
return coords.slice(0, 2);
|
|
714
716
|
return coords.map(removeZ);
|
|
715
717
|
}
|
|
716
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGlvbi13b3Jrc3BhY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3dvcmtzcGFjZS9zaGFyZWQvZWRpdGlvbi13b3Jrc3BhY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUVWLFdBQVcsRUFDWixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxrQ0FBa0MsRUFFbEMseUJBQXlCLEVBRTFCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJcEQsT0FBTyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7QUFDeEMsT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDO0FBSWhDLE9BQU8sRUFBRSxlQUFlLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU9sRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUUzRixPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWiwrQkFBK0IsRUFDL0IsbUNBQW1DLEVBQ25DLGdDQUFnQyxF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TyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUTtRQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEhlYWRlcnNcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgQXV0aEludGVyY2VwdG9yIH0gZnJvbSAnQGlnbzIvYXV0aCc7XG5pbXBvcnQgeyBBY3Rpb25TdG9yZSB9IGZyb20gJ0BpZ28yL2NvbW1vbi9hY3Rpb24nO1xuaW1wb3J0IHtcbiAgRW50aXR5U3RvcmVGaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSxcbiAgRW50aXR5VGFibGVCdXR0b24sXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXG4gIEVudGl0eVRhYmxlVGVtcGxhdGVcbn0gZnJvbSAnQGlnbzIvY29tbW9uL2VudGl0eSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL21lc3NhZ2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL3N0b3JhZ2UnO1xuXG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHsgRmVhdHVyZUxvYWRlciB9IGZyb20gJ29sL2ZlYXR1cmVsb2FkZXInO1xuaW1wb3J0IEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0IFdLVCBmcm9tICdvbC9mb3JtYXQvV0tUJztcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgb2xTb3VyY2VJbWFnZVdNUyBmcm9tICdvbC9zb3VyY2UvSW1hZ2VXTVMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2tpcFdoaWxlLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBSZWxhdGlvbk9wdGlvbnMsXG4gIFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXMsXG4gIFdNU0RhdGFTb3VyY2Vcbn0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMnO1xuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9mZWF0dXJlLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgV0ZTRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy93ZnMtZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZU1vdGlvbixcbiAgRmVhdHVyZVN0b3JlLFxuICBGZWF0dXJlU3RvcmVJbk1hcEV4dGVudFN0cmF0ZWd5LFxuICBGZWF0dXJlU3RvcmVJbk1hcFJlc29sdXRpb25TdHJhdGVneSxcbiAgRmVhdHVyZVN0b3JlTG9hZGluZ0xheWVyU3RyYXRlZ3ksXG4gIEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5XG59IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkJztcbmltcG9ydCB7IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgR2VvV29ya3NwYWNlT3B0aW9ucyxcbiAgSW1hZ2VMYXllcixcbiAgTGF5ZXJTZXJ2aWNlLFxuICBMYXllcnNMaW5rUHJvcGVydGllcyxcbiAgTGlua2VkUHJvcGVydGllcyxcbiAgVmVjdG9yTGF5ZXJcbn0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkJztcbmltcG9ydCB7IElnb01hcCwgTWFwQmFzZSB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQnO1xuaW1wb3J0IHsgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9xdWVyeS9zaGFyZWQvcXVlcnkuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1zZXJ2aWNlL3N0eWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdGlvbldvcmtzcGFjZSB9IGZyb20gJy4vZWRpdGlvbi13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVySW5NYXBFeHRlbnRPclJlc29sdXRpb25TdHJhdGVneSB9IGZyb20gJy4vd29ya3NwYWNlLnV0aWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRWRpdGlvbldvcmtzcGFjZVNlcnZpY2Uge1xuICBwdWJsaWMgd3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBhZGRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWxhdGlvbkxheWVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEltYWdlTGF5ZXJbXSB8IFZlY3RvckxheWVyW10+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgcm93c0luTWFwRXh0ZW50Q2hlY2tDb25kaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIHdrdEZvcm1hdCA9IG5ldyBXS1QoKTtcbiAgcHVibGljIGdlb0pzb25Gb3JtYXQgPSBuZXcgR2VvSlNPTigpO1xuXG4gIGdldCB6b29tQXV0bygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ3pvb21BdXRvJykgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgc3R5bGVTZXJ2aWNlOiBTdHlsZVNlcnZpY2UsXG4gICAgcHVibGljIGF1dGhJbnRlcmNlcHRvcj86IEF1dGhJbnRlcmNlcHRvclxuICApIHt9XG5cbiAgY3JlYXRlV29ya3NwYWNlKGxheWVyOiBJbWFnZUxheWVyLCBtYXA6IElnb01hcCk6IEVkaXRpb25Xb3Jrc3BhY2Uge1xuICAgIGlmIChcbiAgICAgIGxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5lbmFibGVkICE9PSB0cnVlIHx8XG4gICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5lbmFibGVkICE9PSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB3a3NDb25maWc7XG4gICAgaWYgKGxheWVyLm9wdGlvbnMud29ya3NwYWNlKSB7XG4gICAgICB3a3NDb25maWcgPSBsYXllci5vcHRpb25zLndvcmtzcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2tzQ29uZmlnID0ge307XG4gICAgfVxuICAgIHdrc0NvbmZpZy5zcmNJZCA9IGxheWVyLmlkO1xuICAgIHdrc0NvbmZpZy53b3Jrc3BhY2VJZCA9IGxheWVyLmlkO1xuICAgIHdrc0NvbmZpZy5lbmFibGVkID0gdHJ1ZTtcbiAgICB3a3NDb25maWcucGFnZVNpemUgPSBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ucGFnZVNpemU7XG4gICAgd2tzQ29uZmlnLnBhZ2VTaXplT3B0aW9ucyA9IGxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5wYWdlU2l6ZU9wdGlvbnM7XG5cbiAgICBjb25zdCBkYXRhU291cmNlOiBXTVNEYXRhU291cmNlID0gbGF5ZXIuZGF0YVNvdXJjZSBhcyBXTVNEYXRhU291cmNlO1xuICAgIGNvbnN0IHdtc0xpbmtJZCA9IGxheWVyLmlkICsgJy5XbXNXb3Jrc3BhY2VUYWJsZVNyYyc7XG4gICAgY29uc3Qgd2ZzTGlua0lkID0gbGF5ZXIuaWQgKyAnLldmc1dvcmtzcGFjZVRhYmxlRGVzdCc7XG4gICAgaWYgKCFsYXllci5vcHRpb25zLmxpbmtlZExheWVycykge1xuICAgICAgbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMgPSB7IGxpbmtJZDogd21zTGlua0lkLCBsaW5rczogW10gfTtcbiAgICB9XG4gICAgY29uc3QgbGlua1Byb3BlcnRpZXMgPSB7XG4gICAgICBzeW5jZWREZWxldGU6IHRydWUsXG4gICAgICBsaW5rZWRJZHM6IFt3ZnNMaW5rSWRdLFxuICAgICAgcHJvcGVydGllczogW0xpbmtlZFByb3BlcnRpZXMuWklOREVYLCBMaW5rZWRQcm9wZXJ0aWVzLlZJU0lCTEVdXG4gICAgfSBhcyBMYXllcnNMaW5rUHJvcGVydGllcztcblxuICAgIGlmICghbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/Lm1pblJlc29sdXRpb24pIHtcbiAgICAgIGxpbmtQcm9wZXJ0aWVzLnByb3BlcnRpZXMucHVzaChMaW5rZWRQcm9wZXJ0aWVzLk1JTlJFU09MVVRJT04pO1xuICAgIH1cbiAgICBsZXQgaGFzT2djRmlsdGVycyA9IGZhbHNlO1xuICAgIGlmIChcbiAgICAgIChkYXRhU291cmNlLm9wdGlvbnMgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zKS5vZ2NGaWx0ZXJzPy5lbmFibGVkXG4gICAgKSB7XG4gICAgICBsaW5rUHJvcGVydGllcy5wcm9wZXJ0aWVzLnB1c2goTGlua2VkUHJvcGVydGllcy5PR0NGSUxURVJTKTtcbiAgICAgIGhhc09nY0ZpbHRlcnMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5tYXhSZXNvbHV0aW9uKSB7XG4gICAgICBsaW5rUHJvcGVydGllcy5wcm9wZXJ0aWVzLnB1c2goTGlua2VkUHJvcGVydGllcy5NQVhSRVNPTFVUSU9OKTtcbiAgICB9XG5cbiAgICBsZXQgY2xvbmVkTGlua3M6IExheWVyc0xpbmtQcm9wZXJ0aWVzW10gPSBbXTtcbiAgICBpZiAobGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua3MpIHtcbiAgICAgIGNsb25lZExpbmtzID0gSlNPTi5wYXJzZShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkobGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua3MpXG4gICAgICApO1xuICAgIH1cbiAgICBjbG9uZWRMaW5rcy5wdXNoKGxpbmtQcm9wZXJ0aWVzKTtcblxuICAgIChsYXllci5vcHRpb25zLmxpbmtlZExheWVycy5saW5rSWQgPSBsYXllci5vcHRpb25zLmxpbmtlZExheWVycy5saW5rSWRcbiAgICAgID8gbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua0lkXG4gICAgICA6IHdtc0xpbmtJZCksXG4gICAgICAobGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua3MgPSBjbG9uZWRMaW5rcyk7XG4gICAgaW50ZXJmYWNlIFdGU29wdGlvbnNcbiAgICAgIGV4dGVuZHMgV0ZTRGF0YVNvdXJjZU9wdGlvbnMsXG4gICAgICAgIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyB7fVxuICAgIGxldCB3a3M7XG4gICAgdGhpcy5sYXllclNlcnZpY2VcbiAgICAgIC5jcmVhdGVBc3luY0xheWVyKHtcbiAgICAgICAgaWQ6IHdmc0xpbmtJZCxcbiAgICAgICAgbGlua2VkTGF5ZXJzOiB7XG4gICAgICAgICAgbGlua0lkOiB3ZnNMaW5rSWRcbiAgICAgICAgfSxcbiAgICAgICAgd29ya3NwYWNlOiB7XG4gICAgICAgICAgc3JjSWQ6IGxheWVyLmlkLFxuICAgICAgICAgIHdvcmtzcGFjZUlkOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgcXVlcnlPcHRpb25zOiB7XG4gICAgICAgICAgICBtYXBRdWVyeU9uT3BlblRhYjpcbiAgICAgICAgICAgICAgbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/LnF1ZXJ5T3B0aW9ucz8ubWFwUXVlcnlPbk9wZW5UYWIsXG4gICAgICAgICAgICB0YWJRdWVyeTogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhZ2VTaXplOiBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ucGFnZVNpemUsXG4gICAgICAgICAgcGFnZVNpemVPcHRpb25zOiBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ucGFnZVNpemVPcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dJbkxheWVyTGlzdDogZmFsc2UsXG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIHRpdGxlOiBsYXllci50aXRsZSxcbiAgICAgICAgbWluUmVzb2x1dGlvbjpcbiAgICAgICAgICBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ubWluUmVzb2x1dGlvbiB8fCBsYXllci5taW5SZXNvbHV0aW9uIHx8IDAsXG4gICAgICAgIG1heFJlc29sdXRpb246XG4gICAgICAgICAgbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/Lm1heFJlc29sdXRpb24gfHxcbiAgICAgICAgICBsYXllci5tYXhSZXNvbHV0aW9uIHx8XG4gICAgICAgICAgSW5maW5pdHksXG4gICAgICAgIHN0eWxlOiB0aGlzLnN0eWxlU2VydmljZS5jcmVhdGVTdHlsZSh7XG4gICAgICAgICAgZmlsbDoge1xuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDEpJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3Ryb2tlOiB7XG4gICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMSknXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaXJjbGU6IHtcbiAgICAgICAgICAgIGZpbGw6IHtcbiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDEpJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cm9rZToge1xuICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMSknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmFkaXVzOiA1XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc291cmNlT3B0aW9uczoge1xuICAgICAgICAgIGRvd25sb2FkOiBkYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQsXG4gICAgICAgICAgdHlwZTogJ3dmcycsXG4gICAgICAgICAgdXJsOiBkYXRhU291cmNlLm9wdGlvbnMudXJsV2ZzIHx8IGRhdGFTb3VyY2Uub3B0aW9ucy51cmwsXG4gICAgICAgICAgcXVlcnlhYmxlOiB0cnVlLFxuICAgICAgICAgIHJlbGF0aW9uczogZGF0YVNvdXJjZS5vcHRpb25zLnJlbGF0aW9ucyxcbiAgICAgICAgICBxdWVyeVRpdGxlOiAoZGF0YVNvdXJjZS5vcHRpb25zIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zKVxuICAgICAgICAgICAgLnF1ZXJ5VGl0bGUsXG4gICAgICAgICAgcGFyYW1zOiBkYXRhU291cmNlLm9wdGlvbnMucGFyYW1zV0ZTLFxuICAgICAgICAgIG9nY0ZpbHRlcnM6IE9iamVjdC5hc3NpZ24oe30sIGRhdGFTb3VyY2Uub2djRmlsdGVycywge1xuICAgICAgICAgICAgZW5hYmxlZDogaGFzT2djRmlsdGVyc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNvdXJjZUZpZWxkczogZGF0YVNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgZWRpdGlvbjogZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb25cbiAgICAgICAgfSBhcyBXRlNvcHRpb25zXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgod29ya3NwYWNlTGF5ZXI6IFZlY3RvckxheWVyKSA9PiB7XG4gICAgICAgIG1hcC5hZGRMYXllcih3b3Jrc3BhY2VMYXllcik7XG4gICAgICAgIGxheWVyLm9sLnNldFByb3BlcnRpZXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGlua2VkTGF5ZXJzOiB7XG4gICAgICAgICAgICAgIGxpbmtJZDogbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua0lkLFxuICAgICAgICAgICAgICBsaW5rczogY2xvbmVkTGlua3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHdvcmtzcGFjZUxheWVyLmRhdGFTb3VyY2Uub2wucmVmcmVzaCgpO1xuXG4gICAgICAgIHdrcyA9IG5ldyBFZGl0aW9uV29ya3NwYWNlKFxuICAgICAgICAgIHRoaXMuZGlhbG9nLFxuICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZSxcbiAgICAgICAgICB0aGlzLmFkZGluZyQsXG4gICAgICAgICAgKHJlbGF0aW9uOiBSZWxhdGlvbk9wdGlvbnMpID0+IHRoaXMuZ2V0RG9tYWluVmFsdWVzKHJlbGF0aW9uKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogbGF5ZXIuaWQsXG4gICAgICAgICAgICB0aXRsZTogbGF5ZXIudGl0bGUsXG4gICAgICAgICAgICBsYXllcjogd29ya3NwYWNlTGF5ZXIsXG4gICAgICAgICAgICBtYXAsXG4gICAgICAgICAgICBlbnRpdHlTdG9yZTogdGhpcy5jcmVhdGVGZWF0dXJlU3RvcmUod29ya3NwYWNlTGF5ZXIsIG1hcCksXG4gICAgICAgICAgICBhY3Rpb25TdG9yZTogbmV3IEFjdGlvblN0b3JlKFtdKSxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgdGFibGVUZW1wbGF0ZTogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNyZWF0ZVRhYmxlVGVtcGxhdGUod2tzLCB3b3Jrc3BhY2VMYXllcik7XG5cbiAgICAgICAgd29ya3NwYWNlTGF5ZXIub3B0aW9ucy53b3Jrc3BhY2Uud29ya3NwYWNlSWQgPSB3b3Jrc3BhY2VMYXllci5pZDtcbiAgICAgICAgbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2UgPSBPYmplY3QuYXNzaWduKHt9LCBsYXllci5vcHRpb25zLndvcmtzcGFjZSwge1xuICAgICAgICAgIHdrc0NvbmZpZ1xuICAgICAgICB9IGFzIEdlb1dvcmtzcGFjZU9wdGlvbnMpO1xuXG4gICAgICAgIGRlbGV0ZSBkYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQ7XG4gICAgICAgIHJldHVybiB3a3M7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB3a3M7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZlYXR1cmVTdG9yZShsYXllcjogVmVjdG9yTGF5ZXIsIG1hcDogSWdvTWFwKTogRmVhdHVyZVN0b3JlIHtcbiAgICBjb25zdCBzdG9yZSA9IG5ldyBGZWF0dXJlU3RvcmUoW10sIHsgbWFwIH0pO1xuICAgIHN0b3JlLmJpbmRMYXllcihsYXllcik7XG5cbiAgICBjb25zdCBsb2FkaW5nU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ0xheWVyU3RyYXRlZ3koe30pO1xuICAgIGNvbnN0IGluTWFwRXh0ZW50U3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlSW5NYXBFeHRlbnRTdHJhdGVneSh7fSk7XG4gICAgY29uc3QgaW5NYXBSZXNvbHV0aW9uU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlSW5NYXBSZXNvbHV0aW9uU3RyYXRlZ3koe30pO1xuICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkU3RyYXRlZ3kgPSBuZXcgRW50aXR5U3RvcmVGaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSh7fSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3koe1xuICAgICAgbGF5ZXI6IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIHpJbmRleDogMzAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgICAgICBzdHlsZTogdW5kZWZpbmVkLFxuICAgICAgICBzaG93SW5MYXllckxpc3Q6IGZhbHNlLFxuICAgICAgICBleHBvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgYnJvd3NhYmxlOiBmYWxzZVxuICAgICAgfSksXG4gICAgICBtYXAsXG4gICAgICBoaXRUb2xlcmFuY2U6IDE1LFxuICAgICAgbW90aW9uOiB0aGlzLnpvb21BdXRvID8gRmVhdHVyZU1vdGlvbi5EZWZhdWx0IDogRmVhdHVyZU1vdGlvbi5Ob25lLFxuICAgICAgbWFueTogdHJ1ZSxcbiAgICAgIGRyYWdCb3g6IHRydWVcbiAgICB9KTtcbiAgICBzdG9yZS5hZGRTdHJhdGVneShsb2FkaW5nU3RyYXRlZ3ksIHRydWUpO1xuICAgIHN0b3JlLmFkZFN0cmF0ZWd5KGluTWFwRXh0ZW50U3RyYXRlZ3ksIHRydWUpO1xuICAgIHN0b3JlLmFkZFN0cmF0ZWd5KGluTWFwUmVzb2x1dGlvblN0cmF0ZWd5LCB0cnVlKTtcbiAgICBzdG9yZS5hZGRTdHJhdGVneShzZWxlY3Rpb25TdHJhdGVneSwgdHJ1ZSk7XG4gICAgc3RvcmUuYWRkU3RyYXRlZ3koc2VsZWN0ZWRSZWNvcmRTdHJhdGVneSwgZmFsc2UpO1xuICAgIHN0b3JlLmFkZFN0cmF0ZWd5KGNyZWF0ZUZpbHRlckluTWFwRXh0ZW50T3JSZXNvbHV0aW9uU3RyYXRlZ3koKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHN0b3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYWJsZVRlbXBsYXRlKFxuICAgIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSxcbiAgICBsYXllcjogVmVjdG9yTGF5ZXJcbiAgKTogRW50aXR5VGFibGVUZW1wbGF0ZSB7XG4gICAgY29uc3QgZmllbGRzID0gbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcyB8fCBbXTtcblxuICAgIGNvbnN0IHJlbGF0aW9ucyA9IGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5yZWxhdGlvbnMgfHwgW107XG5cbiAgICBsZXQgcmVuZGVyZXJUeXBlID0gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUw7XG4gICAgbGV0IGJ1dHRvbnMgPSBbXTtcbiAgICBsZXQgY29sdW1ucyA9IFtdO1xuICAgIGxldCByZWxhdGlvbnNDb2x1bW4gPSBbXTtcblxuICAgIGJ1dHRvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdlZGl0aW9uJyxcbiAgICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVuZGVyZXI6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuQnV0dG9uR3JvdXAsXG4gICAgICAgIHByaW1hcnk6IGZhbHNlLFxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZWRpdE1vZGU6IGZhbHNlLFxuICAgICAgICAgICAgICBpY29uOiAnZWRpdCcsXG4gICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgIGRpc2FibGVkOlxuICAgICAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLm1vZGlmeUJ1dHRvbiA9PT0gZmFsc2VcbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgICAgY2xpY2s6IChmZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICAgICAgd29ya3NwYWNlLmVkaXRGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVkaXRNb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgaWNvbjogJ2RlbGV0ZScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnd2FybicsXG4gICAgICAgICAgICAgIGRpc2FibGVkOlxuICAgICAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLmRlbGV0ZUJ1dHRvbiA9PT0gZmFsc2VcbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiBmYWxzZSxcbiAgICAgICAgICAgICAgY2xpY2s6IChmZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICAgICAgd29ya3NwYWNlLmRlbGV0ZUZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZWRpdE1vZGU6IHRydWUsXG4gICAgICAgICAgICAgIGljb246ICdjaGVjaycsXG4gICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmxvYWRpbmcsXG4gICAgICAgICAgICAgIGNsaWNrOiAoZmVhdHVyZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZWRpdE1vZGU6IHRydWUsXG4gICAgICAgICAgICAgIGljb246ICdjbG9zZScsXG4gICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmxvYWRpbmcsXG4gICAgICAgICAgICAgIGNsaWNrOiAoZmVhdHVyZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdCh3b3Jrc3BhY2UsIGZlYXR1cmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSBhcyBFbnRpdHlUYWJsZUJ1dHRvbltdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgXTtcblxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuZW50aXRpZXMkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHNraXBXaGlsZSgodmFsKSA9PiB2YWwubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoZW50aXRpZXMpID0+IHtcbiAgICAgICAgICBjb25zdCBvbCA9IChlbnRpdGllc1swXSBhcyBGZWF0dXJlKS5vbCBhcyBvbEZlYXR1cmU8T2xHZW9tZXRyeT47XG4gICAgICAgICAgY29uc3QgY29sdW1uc0Zyb21GZWF0dXJlcyA9IG9sXG4gICAgICAgICAgICAuZ2V0S2V5cygpXG4gICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAoY29sKSA9PlxuICAgICAgICAgICAgICAgICFjb2wuc3RhcnRzV2l0aCgnXycpICYmXG4gICAgICAgICAgICAgICAgY29sICE9PSAnZ2VvbWV0cnknICYmXG4gICAgICAgICAgICAgICAgY29sICE9PSBvbC5nZXRHZW9tZXRyeU5hbWUoKSAmJlxuICAgICAgICAgICAgICAgICFjb2wubWF0Y2goL2JvdW5kZWRieS9naSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGBwcm9wZXJ0aWVzLiR7a2V5fWAsXG4gICAgICAgICAgICAgICAgdGl0bGU6IGtleSxcbiAgICAgICAgICAgICAgICByZW5kZXJlcjogcmVuZGVyZXJUeXBlXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB3b3Jrc3BhY2UubWV0YS50YWJsZVRlbXBsYXRlID0ge1xuICAgICAgICAgICAgc2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIHNvcnQ6IHRydWUsXG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zRnJvbUZlYXR1cmVzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29sdW1ucyA9IGZpZWxkcy5tYXAoKGZpZWxkOiBTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zKSA9PiB7XG4gICAgICBsZXQgY29sdW1uID0ge1xuICAgICAgICBuYW1lOiBgcHJvcGVydGllcy4ke2ZpZWxkLm5hbWV9YCxcbiAgICAgICAgdGl0bGU6IGZpZWxkLmFsaWFzID8gZmllbGQuYWxpYXMgOiBmaWVsZC5uYW1lLFxuICAgICAgICByZW5kZXJlcjogcmVuZGVyZXJUeXBlLFxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiB1bmRlZmluZWQsXG4gICAgICAgIGNlbGxDbGFzc0Z1bmM6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBjZWxsQ2xhc3MgPSB7fTtcbiAgICAgICAgICBpZiAoZmllbGQudHlwZSkge1xuICAgICAgICAgICAgY2VsbENsYXNzW2BjbGFzc18ke2ZpZWxkLnR5cGV9YF0gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGNlbGxDbGFzcztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHByaW1hcnk6IGZpZWxkLnByaW1hcnkgPT09IHRydWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgIHZpc2libGU6IGZpZWxkLnZpc2libGUsXG4gICAgICAgIHZhbGlkYXRpb246IGZpZWxkLnZhbGlkYXRpb24sXG4gICAgICAgIGxpbmtDb2x1bW5Gb3JjZTogZmllbGQubGlua0NvbHVtbkZvcmNlLFxuICAgICAgICB0eXBlOiBmaWVsZC50eXBlLFxuICAgICAgICBkb21haW5WYWx1ZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVsYXRpb246IHVuZGVmaW5lZCxcbiAgICAgICAgbXVsdGlwbGU6IGZpZWxkLm11bHRpcGxlLFxuICAgICAgICBzdGVwOiBmaWVsZC5zdGVwLFxuICAgICAgICB0b29sdGlwOiBmaWVsZC50b29sdGlwXG4gICAgICB9O1xuXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xpc3QnIHx8IGZpZWxkLnR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgIHRoaXMuZ2V0RG9tYWluVmFsdWVzKGZpZWxkLnJlbGF0aW9uKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMgPSByZXN1bHQ7XG4gICAgICAgICAgY29sdW1uLnJlbGF0aW9uID0gZmllbGQucmVsYXRpb247XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9KTtcblxuICAgIHJlbGF0aW9uc0NvbHVtbiA9IHJlbGF0aW9ucy5tYXAoKHJlbGF0aW9uOiBSZWxhdGlvbk9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGBwcm9wZXJ0aWVzLiR7cmVsYXRpb24ubmFtZX1gLFxuICAgICAgICB0aXRsZTogcmVsYXRpb24uYWxpYXMgPyByZWxhdGlvbi5hbGlhcyA6IHJlbGF0aW9uLm5hbWUsXG4gICAgICAgIHJlbmRlcmVyOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkljb24sXG4gICAgICAgIGljb246IHJlbGF0aW9uLmljb24sXG4gICAgICAgIHBhcmVudDogcmVsYXRpb24ucGFyZW50LFxuICAgICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgICB0b29sdGlwOiByZWxhdGlvbi50b29sdGlwLFxuICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuYWRkaW5nJC5nZXRWYWx1ZSgpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy53cyQubmV4dChyZWxhdGlvbi50aXRsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjZWxsQ2xhc3NGdW5jOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgY2xhc3NfaWNvbjogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29sdW1ucy5wdXNoKC4uLnJlbGF0aW9uc0NvbHVtbik7XG4gICAgY29sdW1ucy5wdXNoKC4uLmJ1dHRvbnMpO1xuXG4gICAgd29ya3NwYWNlLm1ldGEudGFibGVUZW1wbGF0ZSA9IHtcbiAgICAgIHNlbGVjdGlvbjogZmFsc2UsXG4gICAgICBzb3J0OiB0cnVlLFxuICAgICAgY29sdW1uc1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc2F2ZUZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlOiBFZGl0aW9uV29ya3NwYWNlKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlRmVhdHVyZShmZWF0dXJlLCB3b3Jrc3BhY2UpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5zYW5pdGl6ZVBhcmFtZXRlcihmZWF0dXJlLCB3b3Jrc3BhY2UpO1xuXG4gICAgY29uc3QgYmFzZVVybCA9IHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5iYXNlVXJsO1xuICAgIGxldCB1cmwgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdlZGl0aW9uLnVybCcpO1xuXG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHVybCA9IGJhc2VVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCArPSBiYXNlVXJsID8gYmFzZVVybCA6ICcnO1xuICAgIH1cblxuICAgIGlmIChmZWF0dXJlLm5ld0ZlYXR1cmUpIHtcbiAgICAgIHVybCArPSB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24uYWRkVXJsO1xuXG4gICAgICBjb25zdCBhZGRIZWFkZXJzID0gd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLmFkZEhlYWRlcnM7XG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKGFkZEhlYWRlcnMpO1xuXG4gICAgICB0aGlzLmFkZEZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlLCB1cmwsIGhlYWRlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5tb2RpZnlQcm90b2NvbCAhPT0gJ3Bvc3QnXG4gICAgICApIHtcbiAgICAgICAgdXJsICs9XG4gICAgICAgICAgJz8nICtcbiAgICAgICAgICB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubW9kaWZ5VXJsICtcbiAgICAgICAgICBmZWF0dXJlLmlka2V5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsICs9IHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5tb2RpZnlVcmw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3RvY29sZSA9XG4gICAgICAgIHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5tb2RpZnlQcm90b2NvbDtcbiAgICAgIGNvbnN0IG1vZGlmeUhlYWRlcnMgPVxuICAgICAgICB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubW9kaWZ5SGVhZGVycztcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMobW9kaWZ5SGVhZGVycyk7XG5cbiAgICAgIHRoaXMubW9kaWZ5RmVhdHVyZShmZWF0dXJlLCB3b3Jrc3BhY2UsIHVybCwgaGVhZGVycywgcHJvdG9jb2xlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkRmVhdHVyZShcbiAgICBmZWF0dXJlLFxuICAgIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICkge1xuICAgIGlmICh3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24uaGFzR2VvbWV0cnkpIHtcbiAgICAgIGNvbnN0IHByb2pEZXN0ID1cbiAgICAgICAgd29ya3NwYWNlLmxheWVyLm9wdGlvbnMuc291cmNlT3B0aW9ucy5lZGl0aW9uLmdlb21EYXRhYmFzZVByb2o7XG4gICAgICBmZWF0dXJlLnByb3BlcnRpZXNbXG4gICAgICAgIHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMucGFyYW1zLmZpZWxkTmFtZUdlb21ldHJ5XG4gICAgICBdID1cbiAgICAgICAgJ1NSSUQ9JyArXG4gICAgICAgIHByb2pEZXN0LnJlcGxhY2UoJ0VQU0c6JywgJycpICtcbiAgICAgICAgJzsnICtcbiAgICAgICAgdGhpcy53a3RGb3JtYXQud3JpdGVHZW9tZXRyeShcbiAgICAgICAgICB0aGlzLmdlb0pzb25Gb3JtYXRcbiAgICAgICAgICAgIC5yZWFkRmVhdHVyZShmZWF0dXJlLmdlb21ldHJ5KVxuICAgICAgICAgICAgLmdldEdlb21ldHJ5KClcbiAgICAgICAgICAgIC50cmFuc2Zvcm0oJ0VQU0c6NDMyNicsIHByb2pEZXN0KSxcbiAgICAgICAgICB7IGRhdGFQcm9qZWN0aW9uOiBwcm9qRGVzdCB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBmZWF0dXJlLnByb3BlcnRpZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgc2Ygb2Ygd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChzZi5uYW1lID09PSBwcm9wZXJ0eSAmJiBzZi52YWxpZGF0aW9uPy5yZWFkb25seSkgfHxcbiAgICAgICAgICAoc2YubmFtZSA9PT0gcHJvcGVydHkgJiYgc2YudmFsaWRhdGlvbj8uc2VuZCA9PT0gZmFsc2UpXG4gICAgICAgICkge1xuICAgICAgICAgIGRlbGV0ZSBmZWF0dXJlLnByb3BlcnRpZXNbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KGAke3VybH1gLCBmZWF0dXJlLnByb3BlcnRpZXMsIHsgaGVhZGVyczogaGVhZGVycyB9KVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHdvcmtzcGFjZS5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuY2xlYXIoKTtcbiAgICAgICAgICB3b3Jrc3BhY2UuZGVsZXRlRHJhd2luZ3MoKTtcbiAgICAgICAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuZGVsZXRlKGZlYXR1cmUpO1xuXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKCdpZ28uZ2VvLndvcmtzcGFjZS5hZGRTdWNjZXNzJyk7XG5cbiAgICAgICAgICB0aGlzLnJlZnJlc2hNYXAod29ya3NwYWNlLmxheWVyIGFzIFZlY3RvckxheWVyLCB3b3Jrc3BhY2UubGF5ZXIubWFwKTtcbiAgICAgICAgICB0aGlzLmFkZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5yb3dzSW5NYXBFeHRlbnRDaGVja0NvbmRpdGlvbiQubmV4dCh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgZXJyb3IuZXJyb3IuY2F1Z2h0ID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5tZXNzYWdlcztcbiAgICAgICAgICBpZiAobWVzc2FnZXMpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0O1xuICAgICAgICAgICAgbWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhtZXNzYWdlKVswXTtcbiAgICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRleHQgPSBtZXNzYWdlW2tleV07XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcih0ZXh0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby53b3Jrc3BhY2UuYWRkRXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby53b3Jrc3BhY2UuYWRkRXJyb3InKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZGVsZXRlRmVhdHVyZSh3b3Jrc3BhY2U6IEVkaXRpb25Xb3Jrc3BhY2UsIHVybDogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmh0dHAuZGVsZXRlKGAke3VybH1gLCB7fSkuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKCdpZ28uZ2VvLndvcmtzcGFjZS5kZWxldGVTdWNjZXNzJyk7XG5cbiAgICAgICAgdGhpcy5yZWZyZXNoTWFwKHdvcmtzcGFjZS5sYXllciBhcyBWZWN0b3JMYXllciwgd29ya3NwYWNlLmxheWVyLm1hcCk7XG4gICAgICAgIGZvciAoY29uc3QgcmVsYXRpb24gb2Ygd29ya3NwYWNlLmxheWVyLm9wdGlvbnMuc291cmNlT3B0aW9uc1xuICAgICAgICAgIC5yZWxhdGlvbnMpIHtcbiAgICAgICAgICB3b3Jrc3BhY2UubWFwLmxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICAgICAgaWYgKGxheWVyLnRpdGxlID09PSByZWxhdGlvbi50aXRsZSkge1xuICAgICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9sLnJlZnJlc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgZXJyb3IuZXJyb3IuY2F1Z2h0ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubWVzc2FnZXM7XG4gICAgICAgIGlmIChtZXNzYWdlcykge1xuICAgICAgICAgIGxldCB0ZXh0O1xuICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG1lc3NhZ2UpWzBdO1xuICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICB0ZXh0ID0gbWVzc2FnZVtrZXldO1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby53b3Jrc3BhY2UuYWRkRXJyb3InKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby53b3Jrc3BhY2UuYWRkRXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbW9kaWZ5RmVhdHVyZShcbiAgICBmZWF0dXJlLFxuICAgIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBoZWFkZXJzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICAgIHByb3RvY29sZSA9ICdwYXRjaCdcbiAgKSB7XG4gICAgaWYgKHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5oYXNHZW9tZXRyeSkge1xuICAgICAgY29uc3QgcHJvakRlc3QgPVxuICAgICAgICB3b3Jrc3BhY2UubGF5ZXIub3B0aW9ucy5zb3VyY2VPcHRpb25zLmVkaXRpb24uZ2VvbURhdGFiYXNlUHJvajtcbiAgICAgIC8vIFJlbW92ZSAzZSBkaW1lbnNpb25cbiAgICAgIGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgPSByZW1vdmVaKGZlYXR1cmUuZ2VvbWV0cnkuY29vcmRpbmF0ZXMpO1xuICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW1xuICAgICAgICB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnBhcmFtcy5maWVsZE5hbWVHZW9tZXRyeVxuICAgICAgXSA9XG4gICAgICAgICdTUklEPScgK1xuICAgICAgICBwcm9qRGVzdC5yZXBsYWNlKCdFUFNHOicsICcnKSArXG4gICAgICAgICc7JyArXG4gICAgICAgIHRoaXMud2t0Rm9ybWF0LndyaXRlR2VvbWV0cnkoXG4gICAgICAgICAgdGhpcy5nZW9Kc29uRm9ybWF0XG4gICAgICAgICAgICAucmVhZEZlYXR1cmUoZmVhdHVyZS5nZW9tZXRyeSlcbiAgICAgICAgICAgIC5nZXRHZW9tZXRyeSgpXG4gICAgICAgICAgICAudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBwcm9qRGVzdCksXG4gICAgICAgICAgeyBkYXRhUHJvamVjdGlvbjogcHJvakRlc3QgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gZmVhdHVyZS5wcm9wZXJ0aWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHNmIG9mIHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuc291cmNlRmllbGRzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoc2YubmFtZSA9PT0gcHJvcGVydHkgJiYgc2YudmFsaWRhdGlvbj8ucmVhZG9ubHkpIHx8XG4gICAgICAgICAgKHNmLm5hbWUgPT09IHByb3BlcnR5ICYmIHNmLnZhbGlkYXRpb24/LnNlbmQgPT09IGZhbHNlKSB8fFxuICAgICAgICAgIHByb3BlcnR5ID09PSAnYm91bmRlZEJ5J1xuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5odHRwW3Byb3RvY29sZV0oYCR7dXJsfWAsIGZlYXR1cmUucHJvcGVydGllcywge1xuICAgICAgaGVhZGVyczogaGVhZGVyc1xuICAgIH0pLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FuY2VsRWRpdCh3b3Jrc3BhY2UsIGZlYXR1cmUsIHRydWUpO1xuXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcygnaWdvLmdlby53b3Jrc3BhY2UubW9kaWZ5U3VjY2VzcycpO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaE1hcCh3b3Jrc3BhY2UubGF5ZXIgYXMgVmVjdG9yTGF5ZXIsIHdvcmtzcGFjZS5sYXllci5tYXApO1xuXG4gICAgICAgIGxldCByZWxhdGlvbkxheWVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlbGF0aW9uIG9mIHdvcmtzcGFjZS5sYXllci5vcHRpb25zLnNvdXJjZU9wdGlvbnNcbiAgICAgICAgICAucmVsYXRpb25zKSB7XG4gICAgICAgICAgd29ya3NwYWNlLm1hcC5sYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChsYXllci50aXRsZSA9PT0gcmVsYXRpb24udGl0bGUpIHtcbiAgICAgICAgICAgICAgcmVsYXRpb25MYXllcnMucHVzaChsYXllcik7XG4gICAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub2wucmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVsYXRpb25MYXllcnMkLm5leHQocmVsYXRpb25MYXllcnMpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgZXJyb3IuZXJyb3IuY2F1Z2h0ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubWVzc2FnZXM7XG4gICAgICAgIGlmIChtZXNzYWdlcykge1xuICAgICAgICAgIGxldCB0ZXh0O1xuICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG1lc3NhZ2UpWzBdO1xuICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICB0ZXh0ID0gbWVzc2FnZVtrZXldO1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby53b3Jrc3BhY2UuYWRkRXJyb3InKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby53b3Jrc3BhY2UuYWRkRXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjYW5jZWxFZGl0KHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSwgZmVhdHVyZSwgZnJvbVNhdmUgPSBmYWxzZSkge1xuICAgIGZlYXR1cmUuZWRpdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuYWRkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB3b3Jrc3BhY2UuZGVsZXRlRHJhd2luZ3MoKTtcbiAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmNsZWFyKCk7XG5cbiAgICBpZiAoZmVhdHVyZS5uZXdGZWF0dXJlKSB7XG4gICAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuZGVsZXRlKGZlYXR1cmUpO1xuICAgICAgd29ya3NwYWNlLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuXG4gICAgICB0aGlzLnJvd3NJbk1hcEV4dGVudENoZWNrQ29uZGl0aW9uJC5uZXh0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZyb21TYXZlKSB7XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IGZlYXR1cmUub3JpZ2luYWxfcHJvcGVydGllcztcbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeSA9IGZlYXR1cmUub3JpZ2luYWxfZ2VvbWV0cnk7XG4gICAgICB9XG4gICAgICBkZWxldGUgZmVhdHVyZS5vcmlnaW5hbF9wcm9wZXJ0aWVzO1xuICAgICAgZGVsZXRlIGZlYXR1cmUub3JpZ2luYWxfZ2VvbWV0cnk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RG9tYWluVmFsdWVzKHJlbGF0aW9uOiBSZWxhdGlvbk9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCB1cmwgPSByZWxhdGlvbi51cmw7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHVybCA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2VkaXRpb24udXJsJylcbiAgICAgICAgPyB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdlZGl0aW9uLnVybCcpICsgcmVsYXRpb24udGFibGVcbiAgICAgICAgOiByZWxhdGlvbi50YWJsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHVybCkucGlwZShcbiAgICAgIG1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgZXJyLmVycm9yLmNhdWdodCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKlxuICAgKiBSZWZyZXNoIGJvdGggd21zIGFuZCB3ZnMgbGF5ZXJcbiAgICogQSBuZXcgd2ZzIGxvYWRlciBpcyB1c2VkIHRvIGVuc3VyZSBjYWNoZSBpcyBub3QgcmV0cmlldmluZyBvbGQgZGF0YVxuICAgKiBXTVMgcGFyYW1zIGFyZSB1cGRhdGVkIHRvIGVuc3VyZSBsYXllciBpcyBjb3JyZWN0bHkgcmVmcmVzaGVkXG4gICAqL1xuICByZWZyZXNoTWFwKGxheWVyOiBWZWN0b3JMYXllciwgbWFwOiBNYXBCYXNlKSB7XG4gICAgY29uc3Qgd2ZzT2xMYXllciA9IGxheWVyLmRhdGFTb3VyY2Uub2w7XG4gICAgY29uc3QgbG9hZGVyOiBGZWF0dXJlTG9hZGVyID0gKFxuICAgICAgZXh0ZW50LFxuICAgICAgcmVzb2x1dGlvbixcbiAgICAgIHByb2osXG4gICAgICBzdWNjZXNzLFxuICAgICAgZmFpbHVyZVxuICAgICkgPT4ge1xuICAgICAgbGF5ZXIuY3VzdG9tV0ZTTG9hZGVyKFxuICAgICAgICBsYXllci5vbC5nZXRTb3VyY2UoKSxcbiAgICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2VPcHRpb25zIGFzIFdGU0RhdGFTb3VyY2VPcHRpb25zLFxuICAgICAgICB0aGlzLmF1dGhJbnRlcmNlcHRvcixcbiAgICAgICAgZXh0ZW50LFxuICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICBwcm9qLFxuICAgICAgICBzdWNjZXNzLFxuICAgICAgICBmYWlsdXJlLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH07XG4gICAgd2ZzT2xMYXllci5zZXRMb2FkZXIobG9hZGVyKTtcbiAgICB3ZnNPbExheWVyLnJlZnJlc2goKTtcblxuICAgIGZvciAoY29uc3QgbGF5IG9mIG1hcC5sYXllcnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGF5LmlkICE9PSBsYXllci5pZCAmJlxuICAgICAgICBsYXkub3B0aW9ucy5saW5rZWRMYXllcnM/LmxpbmtJZC5pbmNsdWRlcyhcbiAgICAgICAgICBsYXllci5pZC5zdWJzdHIoMCwgbGF5ZXIuaWQuaW5kZXhPZignLicpIC0gMSlcbiAgICAgICAgKSAmJlxuICAgICAgICBsYXkub3B0aW9ucy5saW5rZWRMYXllcnM/LmxpbmtJZC5pbmNsdWRlcygnV21zV29ya3NwYWNlVGFibGVTcmMnKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHdtc09sTGF5ZXIgPSBsYXkuZGF0YVNvdXJjZS5vbCBhcyBvbFNvdXJjZUltYWdlV01TO1xuICAgICAgICBsZXQgcGFyYW1zID0gd21zT2xMYXllci5nZXRQYXJhbXMoKTtcbiAgICAgICAgcGFyYW1zLl90ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgIHdtc09sTGF5ZXIudXBkYXRlUGFyYW1zKHBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSkge1xuICAgIGxldCBtZXNzYWdlO1xuICAgIGxldCBrZXk7XG4gICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICB3b3Jrc3BhY2UubWV0YS50YWJsZVRlbXBsYXRlLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLmhhc093blByb3BlcnR5KCd2YWxpZGF0aW9uJykgJiYgY29sdW1uLnZhbGlkYXRpb24pIHtcbiAgICAgICAga2V5ID0gZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xuICAgICAgICBPYmplY3Qua2V5cyhjb2x1bW4udmFsaWRhdGlvbikuZm9yRWFjaCgodHlwZSkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnbWFuZGF0b3J5Jzoge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbGlkYXRpb25bdHlwZV0gJiZcbiAgICAgICAgICAgICAgICAoIWZlYXR1cmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8XG4gICAgICAgICAgICAgICAgICAhZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0pXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdpZ28uZ2VvLmZvcm1WYWxpZGF0aW9uLm1hbmRhdG9yeScsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB7IGNvbHVtbjogY29sdW1uLnRpdGxlIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWluVmFsdWUnOiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0gPCBjb2x1bW4udmFsaWRhdGlvblt0eXBlXVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnaWdvLmdlby5mb3JtVmFsaWRhdGlvbi5taW5WYWx1ZScsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLnZhbGlkYXRpb25bdHlwZV1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWF4VmFsdWUnOiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0gPiBjb2x1bW4udmFsaWRhdGlvblt0eXBlXVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAnaWdvLmdlby5mb3JtVmFsaWRhdGlvbi5tYXhWYWx1ZScsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLnZhbGlkYXRpb25bdHlwZV1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWluTGVuZ3RoJzoge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGtleSkgJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXNba2V5XSAmJlxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldLmxlbmd0aCA8IGNvbHVtbi52YWxpZGF0aW9uW3R5cGVdXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdpZ28uZ2VvLmZvcm1WYWxpZGF0aW9uLm1pbkxlbmd0aCcsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLnZhbGlkYXRpb25bdHlwZV1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbWF4TGVuZ3RoJzoge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGtleSkgJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXNba2V5XSAmJlxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldLmxlbmd0aCA+IGNvbHVtbi52YWxpZGF0aW9uW3R5cGVdXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdpZ28uZ2VvLmZvcm1WYWxpZGF0aW9uLm1heExlbmd0aCcsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLnZhbGlkYXRpb25bdHlwZV1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgc2FuaXRpemVQYXJhbWV0ZXIoZmVhdHVyZSwgd29ya3NwYWNlOiBFZGl0aW9uV29ya3NwYWNlKSB7XG4gICAgd29ya3NwYWNlLm1ldGEudGFibGVUZW1wbGF0ZS5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gJ2xpc3QnICYmXG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllc1tnZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSldXG4gICAgICApIHtcbiAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2dldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKV0gPVxuICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllc1tcbiAgICAgICAgICAgIGdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKVxuICAgICAgICAgIF0udG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW46IHN0cmluZykge1xuICBpZiAoY29sdW1uLmluY2x1ZGVzKCdwcm9wZXJ0aWVzLicpKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5zcGxpdCgnLicpWzFdO1xuICB9XG4gIHJldHVybiBjb2x1bW47XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVooY29vcmRzOiBhbnkpIHtcbiAgaWYgKGNvb3Jkcy5sZW5ndGggPT09IDApIHJldHVybiBjb29yZHM7XG4gIGlmICh0eXBlb2YgY29vcmRzWzBdID09PSAnbnVtYmVyJykgcmV0dXJuIGNvb3Jkcy5zbGljZSgwLCAyKTtcbiAgcmV0dXJuIGNvb3Jkcy5tYXAocmVtb3ZlWik7XG59XG4iXX0=
|
|
718
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGlvbi13b3Jrc3BhY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3dvcmtzcGFjZS9zaGFyZWQvZWRpdGlvbi13b3Jrc3BhY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQ0FBMEM7QUFDMUMsT0FBTyxFQUNMLFVBQVUsRUFFVixXQUFXLEVBQ1osTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsa0NBQWtDLEVBRWxDLHlCQUF5QixFQUUxQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSXBELE9BQU8sT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQ3hDLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUloQyxPQUFPLEVBQUUsZUFBZSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFFM0YsT0FBTyxFQUVMLGFBQWEsRUFDYixZQUFZLEVBQ1osK0JBQStCLEVBQy9CLG1DQUFtQyxF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Q0FBQztJQUN2QyxJQUFJLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zICovXG5pbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbiAgSHR0cEhlYWRlcnNcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgQXV0aEludGVyY2VwdG9yIH0gZnJvbSAnQGlnbzIvYXV0aCc7XG5pbXBvcnQgeyBBY3Rpb25TdG9yZSB9IGZyb20gJ0BpZ28yL2NvbW1vbi9hY3Rpb24nO1xuaW1wb3J0IHtcbiAgRW50aXR5U3RvcmVGaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSxcbiAgRW50aXR5VGFibGVCdXR0b24sXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXG4gIEVudGl0eVRhYmxlVGVtcGxhdGVcbn0gZnJvbSAnQGlnbzIvY29tbW9uL2VudGl0eSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL21lc3NhZ2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL3N0b3JhZ2UnO1xuXG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHsgRmVhdHVyZUxvYWRlciB9IGZyb20gJ29sL2ZlYXR1cmVsb2FkZXInO1xuaW1wb3J0IEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0IFdLVCBmcm9tICdvbC9mb3JtYXQvV0tUJztcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgb2xTb3VyY2VJbWFnZVdNUyBmcm9tICdvbC9zb3VyY2UvSW1hZ2VXTVMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc2tpcFdoaWxlLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICBSZWxhdGlvbk9wdGlvbnMsXG4gIFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXMsXG4gIFdNU0RhdGFTb3VyY2Vcbn0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMnO1xuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9mZWF0dXJlLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgV0ZTRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy93ZnMtZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZU1vdGlvbixcbiAgRmVhdHVyZVN0b3JlLFxuICBGZWF0dXJlU3RvcmVJbk1hcEV4dGVudFN0cmF0ZWd5LFxuICBGZWF0dXJlU3RvcmVJbk1hcFJlc29sdXRpb25TdHJhdGVneSxcbiAgRmVhdHVyZVN0b3JlTG9hZGluZ0xheWVyU3RyYXRlZ3ksXG4gIEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5XG59IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkJztcbmltcG9ydCB7IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgR2VvV29ya3NwYWNlT3B0aW9ucyxcbiAgSW1hZ2VMYXllcixcbiAgTGF5ZXJTZXJ2aWNlLFxuICBMYXllcnNMaW5rUHJvcGVydGllcyxcbiAgTGlua2VkUHJvcGVydGllcyxcbiAgVmVjdG9yTGF5ZXJcbn0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkJztcbmltcG9ydCB7IElnb01hcCwgTWFwQmFzZSB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQnO1xuaW1wb3J0IHsgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9xdWVyeS9zaGFyZWQvcXVlcnkuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1zZXJ2aWNlL3N0eWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdGlvbldvcmtzcGFjZSB9IGZyb20gJy4vZWRpdGlvbi13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVySW5NYXBFeHRlbnRPclJlc29sdXRpb25TdHJhdGVneSB9IGZyb20gJy4vd29ya3NwYWNlLnV0aWxzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRWRpdGlvbldvcmtzcGFjZVNlcnZpY2Uge1xuICBwdWJsaWMgd3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBhZGRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWxhdGlvbkxheWVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEltYWdlTGF5ZXJbXSB8IFZlY3RvckxheWVyW10+KFxuICAgIHVuZGVmaW5lZFxuICApO1xuICBwdWJsaWMgcm93c0luTWFwRXh0ZW50Q2hlY2tDb25kaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIHdrdEZvcm1hdCA9IG5ldyBXS1QoKTtcbiAgcHVibGljIGdlb0pzb25Gb3JtYXQgPSBuZXcgR2VvSlNPTigpO1xuXG4gIGdldCB6b29tQXV0bygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ3pvb21BdXRvJykgYXMgYm9vbGVhbjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbGF5ZXJTZXJ2aWNlOiBMYXllclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgc3R5bGVTZXJ2aWNlOiBTdHlsZVNlcnZpY2UsXG4gICAgcHVibGljIGF1dGhJbnRlcmNlcHRvcj86IEF1dGhJbnRlcmNlcHRvclxuICApIHt9XG5cbiAgY3JlYXRlV29ya3NwYWNlKGxheWVyOiBJbWFnZUxheWVyLCBtYXA6IElnb01hcCk6IEVkaXRpb25Xb3Jrc3BhY2Uge1xuICAgIGlmIChcbiAgICAgIGxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5lbmFibGVkICE9PSB0cnVlIHx8XG4gICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5lbmFibGVkICE9PSB0cnVlXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB3a3NDb25maWc7XG4gICAgaWYgKGxheWVyLm9wdGlvbnMud29ya3NwYWNlKSB7XG4gICAgICB3a3NDb25maWcgPSBsYXllci5vcHRpb25zLndvcmtzcGFjZTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2tzQ29uZmlnID0ge307XG4gICAgfVxuICAgIHdrc0NvbmZpZy5zcmNJZCA9IGxheWVyLmlkO1xuICAgIHdrc0NvbmZpZy53b3Jrc3BhY2VJZCA9IGxheWVyLmlkO1xuICAgIHdrc0NvbmZpZy5lbmFibGVkID0gdHJ1ZTtcbiAgICB3a3NDb25maWcucGFnZVNpemUgPSBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ucGFnZVNpemU7XG4gICAgd2tzQ29uZmlnLnBhZ2VTaXplT3B0aW9ucyA9IGxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5wYWdlU2l6ZU9wdGlvbnM7XG5cbiAgICBjb25zdCBkYXRhU291cmNlOiBXTVNEYXRhU291cmNlID0gbGF5ZXIuZGF0YVNvdXJjZSBhcyBXTVNEYXRhU291cmNlO1xuICAgIGNvbnN0IHdtc0xpbmtJZCA9IGxheWVyLmlkICsgJy5XbXNXb3Jrc3BhY2VUYWJsZVNyYyc7XG4gICAgY29uc3Qgd2ZzTGlua0lkID0gbGF5ZXIuaWQgKyAnLldmc1dvcmtzcGFjZVRhYmxlRGVzdCc7XG4gICAgaWYgKCFsYXllci5vcHRpb25zLmxpbmtlZExheWVycykge1xuICAgICAgbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMgPSB7IGxpbmtJZDogd21zTGlua0lkLCBsaW5rczogW10gfTtcbiAgICB9XG4gICAgY29uc3QgbGlua1Byb3BlcnRpZXMgPSB7XG4gICAgICBzeW5jZWREZWxldGU6IHRydWUsXG4gICAgICBsaW5rZWRJZHM6IFt3ZnNMaW5rSWRdLFxuICAgICAgcHJvcGVydGllczogW0xpbmtlZFByb3BlcnRpZXMuWklOREVYLCBMaW5rZWRQcm9wZXJ0aWVzLlZJU0lCTEVdXG4gICAgfSBhcyBMYXllcnNMaW5rUHJvcGVydGllcztcblxuICAgIGlmICghbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/Lm1pblJlc29sdXRpb24pIHtcbiAgICAgIGxpbmtQcm9wZXJ0aWVzLnByb3BlcnRpZXMucHVzaChMaW5rZWRQcm9wZXJ0aWVzLk1JTlJFU09MVVRJT04pO1xuICAgIH1cbiAgICBsZXQgaGFzT2djRmlsdGVycyA9IGZhbHNlO1xuICAgIGlmIChcbiAgICAgIChkYXRhU291cmNlLm9wdGlvbnMgYXMgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zKS5vZ2NGaWx0ZXJzPy5lbmFibGVkXG4gICAgKSB7XG4gICAgICBsaW5rUHJvcGVydGllcy5wcm9wZXJ0aWVzLnB1c2goTGlua2VkUHJvcGVydGllcy5PR0NGSUxURVJTKTtcbiAgICAgIGhhc09nY0ZpbHRlcnMgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5tYXhSZXNvbHV0aW9uKSB7XG4gICAgICBsaW5rUHJvcGVydGllcy5wcm9wZXJ0aWVzLnB1c2goTGlua2VkUHJvcGVydGllcy5NQVhSRVNPTFVUSU9OKTtcbiAgICB9XG5cbiAgICBsZXQgY2xvbmVkTGlua3M6IExheWVyc0xpbmtQcm9wZXJ0aWVzW10gPSBbXTtcbiAgICBpZiAobGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua3MpIHtcbiAgICAgIGNsb25lZExpbmtzID0gSlNPTi5wYXJzZShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkobGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua3MpXG4gICAgICApO1xuICAgIH1cbiAgICBjbG9uZWRMaW5rcy5wdXNoKGxpbmtQcm9wZXJ0aWVzKTtcblxuICAgIC8vIFRPRE86IETDqW15c3RpZmllciBjZSBib3V0IGRlIGNvZGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xuICAgIChsYXllci5vcHRpb25zLmxpbmtlZExheWVycy5saW5rSWQgPSBsYXllci5vcHRpb25zLmxpbmtlZExheWVycy5saW5rSWRcbiAgICAgID8gbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua0lkXG4gICAgICA6IHdtc0xpbmtJZCksXG4gICAgICAobGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua3MgPSBjbG9uZWRMaW5rcyk7XG4gICAgaW50ZXJmYWNlIFdGU29wdGlvbnNcbiAgICAgIGV4dGVuZHMgV0ZTRGF0YVNvdXJjZU9wdGlvbnMsXG4gICAgICAgIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyB7fVxuICAgIGxldCB3a3M7XG4gICAgdGhpcy5sYXllclNlcnZpY2VcbiAgICAgIC5jcmVhdGVBc3luY0xheWVyKHtcbiAgICAgICAgaWQ6IHdmc0xpbmtJZCxcbiAgICAgICAgbGlua2VkTGF5ZXJzOiB7XG4gICAgICAgICAgbGlua0lkOiB3ZnNMaW5rSWRcbiAgICAgICAgfSxcbiAgICAgICAgd29ya3NwYWNlOiB7XG4gICAgICAgICAgc3JjSWQ6IGxheWVyLmlkLFxuICAgICAgICAgIHdvcmtzcGFjZUlkOiB1bmRlZmluZWQsXG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgcXVlcnlPcHRpb25zOiB7XG4gICAgICAgICAgICBtYXBRdWVyeU9uT3BlblRhYjpcbiAgICAgICAgICAgICAgbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/LnF1ZXJ5T3B0aW9ucz8ubWFwUXVlcnlPbk9wZW5UYWIsXG4gICAgICAgICAgICB0YWJRdWVyeTogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhZ2VTaXplOiBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ucGFnZVNpemUsXG4gICAgICAgICAgcGFnZVNpemVPcHRpb25zOiBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ucGFnZVNpemVPcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dJbkxheWVyTGlzdDogZmFsc2UsXG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICAgIHRpdGxlOiBsYXllci50aXRsZSxcbiAgICAgICAgbWluUmVzb2x1dGlvbjpcbiAgICAgICAgICBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ubWluUmVzb2x1dGlvbiB8fCBsYXllci5taW5SZXNvbHV0aW9uIHx8IDAsXG4gICAgICAgIG1heFJlc29sdXRpb246XG4gICAgICAgICAgbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/Lm1heFJlc29sdXRpb24gfHxcbiAgICAgICAgICBsYXllci5tYXhSZXNvbHV0aW9uIHx8XG4gICAgICAgICAgSW5maW5pdHksXG4gICAgICAgIHN0eWxlOiB0aGlzLnN0eWxlU2VydmljZS5jcmVhdGVTdHlsZSh7XG4gICAgICAgICAgZmlsbDoge1xuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDEpJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3Ryb2tlOiB7XG4gICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMSknXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaXJjbGU6IHtcbiAgICAgICAgICAgIGZpbGw6IHtcbiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDEpJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cm9rZToge1xuICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMSknXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmFkaXVzOiA1XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgc291cmNlT3B0aW9uczoge1xuICAgICAgICAgIGRvd25sb2FkOiBkYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQsXG4gICAgICAgICAgdHlwZTogJ3dmcycsXG4gICAgICAgICAgdXJsOiBkYXRhU291cmNlLm9wdGlvbnMudXJsV2ZzIHx8IGRhdGFTb3VyY2Uub3B0aW9ucy51cmwsXG4gICAgICAgICAgcXVlcnlhYmxlOiB0cnVlLFxuICAgICAgICAgIHJlbGF0aW9uczogZGF0YVNvdXJjZS5vcHRpb25zLnJlbGF0aW9ucyxcbiAgICAgICAgICBxdWVyeVRpdGxlOiAoZGF0YVNvdXJjZS5vcHRpb25zIGFzIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zKVxuICAgICAgICAgICAgLnF1ZXJ5VGl0bGUsXG4gICAgICAgICAgcGFyYW1zOiBkYXRhU291cmNlLm9wdGlvbnMucGFyYW1zV0ZTLFxuICAgICAgICAgIG9nY0ZpbHRlcnM6IE9iamVjdC5hc3NpZ24oe30sIGRhdGFTb3VyY2Uub2djRmlsdGVycywge1xuICAgICAgICAgICAgZW5hYmxlZDogaGFzT2djRmlsdGVyc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHNvdXJjZUZpZWxkczogZGF0YVNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgZWRpdGlvbjogZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb25cbiAgICAgICAgfSBhcyBXRlNvcHRpb25zXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgod29ya3NwYWNlTGF5ZXI6IFZlY3RvckxheWVyKSA9PiB7XG4gICAgICAgIG1hcC5hZGRMYXllcih3b3Jrc3BhY2VMYXllcik7XG4gICAgICAgIGxheWVyLm9sLnNldFByb3BlcnRpZXMoXG4gICAgICAgICAge1xuICAgICAgICAgICAgbGlua2VkTGF5ZXJzOiB7XG4gICAgICAgICAgICAgIGxpbmtJZDogbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua0lkLFxuICAgICAgICAgICAgICBsaW5rczogY2xvbmVkTGlua3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHdvcmtzcGFjZUxheWVyLmRhdGFTb3VyY2Uub2wucmVmcmVzaCgpO1xuXG4gICAgICAgIHdrcyA9IG5ldyBFZGl0aW9uV29ya3NwYWNlKFxuICAgICAgICAgIHRoaXMuZGlhbG9nLFxuICAgICAgICAgIHRoaXMuY29uZmlnU2VydmljZSxcbiAgICAgICAgICB0aGlzLmFkZGluZyQsXG4gICAgICAgICAgKHJlbGF0aW9uOiBSZWxhdGlvbk9wdGlvbnMpID0+IHRoaXMuZ2V0RG9tYWluVmFsdWVzKHJlbGF0aW9uKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogbGF5ZXIuaWQsXG4gICAgICAgICAgICB0aXRsZTogbGF5ZXIudGl0bGUsXG4gICAgICAgICAgICBsYXllcjogd29ya3NwYWNlTGF5ZXIsXG4gICAgICAgICAgICBtYXAsXG4gICAgICAgICAgICBlbnRpdHlTdG9yZTogdGhpcy5jcmVhdGVGZWF0dXJlU3RvcmUod29ya3NwYWNlTGF5ZXIsIG1hcCksXG4gICAgICAgICAgICBhY3Rpb25TdG9yZTogbmV3IEFjdGlvblN0b3JlKFtdKSxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgdGFibGVUZW1wbGF0ZTogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNyZWF0ZVRhYmxlVGVtcGxhdGUod2tzLCB3b3Jrc3BhY2VMYXllcik7XG5cbiAgICAgICAgd29ya3NwYWNlTGF5ZXIub3B0aW9ucy53b3Jrc3BhY2Uud29ya3NwYWNlSWQgPSB3b3Jrc3BhY2VMYXllci5pZDtcbiAgICAgICAgbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2UgPSBPYmplY3QuYXNzaWduKHt9LCBsYXllci5vcHRpb25zLndvcmtzcGFjZSwge1xuICAgICAgICAgIHdrc0NvbmZpZ1xuICAgICAgICB9IGFzIEdlb1dvcmtzcGFjZU9wdGlvbnMpO1xuXG4gICAgICAgIGRlbGV0ZSBkYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQ7XG4gICAgICAgIHJldHVybiB3a3M7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB3a3M7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZlYXR1cmVTdG9yZShsYXllcjogVmVjdG9yTGF5ZXIsIG1hcDogSWdvTWFwKTogRmVhdHVyZVN0b3JlIHtcbiAgICBjb25zdCBzdG9yZSA9IG5ldyBGZWF0dXJlU3RvcmUoW10sIHsgbWFwIH0pO1xuICAgIHN0b3JlLmJpbmRMYXllcihsYXllcik7XG5cbiAgICBjb25zdCBsb2FkaW5nU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ0xheWVyU3RyYXRlZ3koe30pO1xuICAgIGNvbnN0IGluTWFwRXh0ZW50U3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlSW5NYXBFeHRlbnRTdHJhdGVneSh7fSk7XG4gICAgY29uc3QgaW5NYXBSZXNvbHV0aW9uU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlSW5NYXBSZXNvbHV0aW9uU3RyYXRlZ3koe30pO1xuICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkU3RyYXRlZ3kgPSBuZXcgRW50aXR5U3RvcmVGaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSh7fSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3koe1xuICAgICAgbGF5ZXI6IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICAgIHpJbmRleDogMzAwLFxuICAgICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgICAgICBzdHlsZTogdW5kZWZpbmVkLFxuICAgICAgICBzaG93SW5MYXllckxpc3Q6IGZhbHNlLFxuICAgICAgICBleHBvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgYnJvd3NhYmxlOiBmYWxzZVxuICAgICAgfSksXG4gICAgICBtYXAsXG4gICAgICBoaXRUb2xlcmFuY2U6IDE1LFxuICAgICAgbW90aW9uOiB0aGlzLnpvb21BdXRvID8gRmVhdHVyZU1vdGlvbi5EZWZhdWx0IDogRmVhdHVyZU1vdGlvbi5Ob25lLFxuICAgICAgbWFueTogdHJ1ZSxcbiAgICAgIGRyYWdCb3g6IHRydWVcbiAgICB9KTtcbiAgICBzdG9yZS5hZGRTdHJhdGVneShsb2FkaW5nU3RyYXRlZ3ksIHRydWUpO1xuICAgIHN0b3JlLmFkZFN0cmF0ZWd5KGluTWFwRXh0ZW50U3RyYXRlZ3ksIHRydWUpO1xuICAgIHN0b3JlLmFkZFN0cmF0ZWd5KGluTWFwUmVzb2x1dGlvblN0cmF0ZWd5LCB0cnVlKTtcbiAgICBzdG9yZS5hZGRTdHJhdGVneShzZWxlY3Rpb25TdHJhdGVneSwgdHJ1ZSk7XG4gICAgc3RvcmUuYWRkU3RyYXRlZ3koc2VsZWN0ZWRSZWNvcmRTdHJhdGVneSwgZmFsc2UpO1xuICAgIHN0b3JlLmFkZFN0cmF0ZWd5KGNyZWF0ZUZpbHRlckluTWFwRXh0ZW50T3JSZXNvbHV0aW9uU3RyYXRlZ3koKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHN0b3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYWJsZVRlbXBsYXRlKFxuICAgIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSxcbiAgICBsYXllcjogVmVjdG9yTGF5ZXJcbiAgKTogRW50aXR5VGFibGVUZW1wbGF0ZSB7XG4gICAgY29uc3QgZmllbGRzID0gbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcyB8fCBbXTtcblxuICAgIGNvbnN0IHJlbGF0aW9ucyA9IGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5yZWxhdGlvbnMgfHwgW107XG5cbiAgICBjb25zdCByZW5kZXJlclR5cGUgPSBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLlVuc2FuaXRpemVkSFRNTDtcbiAgICBsZXQgYnV0dG9ucyA9IFtdO1xuICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgbGV0IHJlbGF0aW9uc0NvbHVtbiA9IFtdO1xuXG4gICAgYnV0dG9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2VkaXRpb24nLFxuICAgICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgICByZW5kZXJlcjogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5CdXR0b25Hcm91cCxcbiAgICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlZGl0TW9kZTogZmFsc2UsXG4gICAgICAgICAgICAgIGljb246ICdlZGl0JyxcbiAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6XG4gICAgICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubW9kaWZ5QnV0dG9uID09PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgICBjbGljazogKGZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2UuZWRpdEZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZWRpdE1vZGU6IGZhbHNlLFxuICAgICAgICAgICAgICBpY29uOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgY29sb3I6ICd3YXJuJyxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6XG4gICAgICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24uZGVsZXRlQnV0dG9uID09PSBmYWxzZVxuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICAgICAgICBjbGljazogKGZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2UuZGVsZXRlRmVhdHVyZShmZWF0dXJlLCB3b3Jrc3BhY2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlZGl0TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaWNvbjogJ2NoZWNrJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMubG9hZGluZyxcbiAgICAgICAgICAgICAgY2xpY2s6IChmZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRmVhdHVyZShmZWF0dXJlLCB3b3Jrc3BhY2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlZGl0TW9kZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaWNvbjogJ2Nsb3NlJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMubG9hZGluZyxcbiAgICAgICAgICAgICAgY2xpY2s6IChmZWF0dXJlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxFZGl0KHdvcmtzcGFjZSwgZmVhdHVyZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdIGFzIEVudGl0eVRhYmxlQnV0dG9uW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdO1xuXG4gICAgaWYgKGZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHdvcmtzcGFjZS5lbnRpdHlTdG9yZS5lbnRpdGllcyRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc2tpcFdoaWxlKCh2YWwpID0+IHZhbC5sZW5ndGggPT09IDApLFxuICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChlbnRpdGllcykgPT4ge1xuICAgICAgICAgIGNvbnN0IG9sID0gKGVudGl0aWVzWzBdIGFzIEZlYXR1cmUpLm9sIGFzIG9sRmVhdHVyZTxPbEdlb21ldHJ5PjtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zRnJvbUZlYXR1cmVzID0gb2xcbiAgICAgICAgICAgIC5nZXRLZXlzKClcbiAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgIChjb2wpID0+XG4gICAgICAgICAgICAgICAgIWNvbC5zdGFydHNXaXRoKCdfJykgJiZcbiAgICAgICAgICAgICAgICBjb2wgIT09ICdnZW9tZXRyeScgJiZcbiAgICAgICAgICAgICAgICBjb2wgIT09IG9sLmdldEdlb21ldHJ5TmFtZSgpICYmXG4gICAgICAgICAgICAgICAgIWNvbC5tYXRjaCgvYm91bmRlZGJ5L2dpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogYHByb3BlcnRpZXMuJHtrZXl9YCxcbiAgICAgICAgICAgICAgICB0aXRsZToga2V5LFxuICAgICAgICAgICAgICAgIHJlbmRlcmVyOiByZW5kZXJlclR5cGVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIHdvcmtzcGFjZS5tZXRhLnRhYmxlVGVtcGxhdGUgPSB7XG4gICAgICAgICAgICBzZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgc29ydDogdHJ1ZSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnNGcm9tRmVhdHVyZXNcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb2x1bW5zID0gZmllbGRzLm1hcCgoZmllbGQ6IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHtcbiAgICAgICAgbmFtZTogYHByb3BlcnRpZXMuJHtmaWVsZC5uYW1lfWAsXG4gICAgICAgIHRpdGxlOiBmaWVsZC5hbGlhcyA/IGZpZWxkLmFsaWFzIDogZmllbGQubmFtZSxcbiAgICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyVHlwZSxcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogdW5kZWZpbmVkLFxuICAgICAgICBjZWxsQ2xhc3NGdW5jOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbENsYXNzID0ge307XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNlbGxDbGFzc1tgY2xhc3NfJHtmaWVsZC50eXBlfWBdID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBjZWxsQ2xhc3M7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcmltYXJ5OiBmaWVsZC5wcmltYXJ5ID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICB2aXNpYmxlOiBmaWVsZC52aXNpYmxlLFxuICAgICAgICB2YWxpZGF0aW9uOiBmaWVsZC52YWxpZGF0aW9uLFxuICAgICAgICBsaW5rQ29sdW1uRm9yY2U6IGZpZWxkLmxpbmtDb2x1bW5Gb3JjZSxcbiAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgZG9tYWluVmFsdWVzOiB1bmRlZmluZWQsXG4gICAgICAgIHJlbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIG11bHRpcGxlOiBmaWVsZC5tdWx0aXBsZSxcbiAgICAgICAgc3RlcDogZmllbGQuc3RlcCxcbiAgICAgICAgdG9vbHRpcDogZmllbGQudG9vbHRpcFxuICAgICAgfTtcblxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsaXN0JyB8fCBmaWVsZC50eXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICB0aGlzLmdldERvbWFpblZhbHVlcyhmaWVsZC5yZWxhdGlvbikuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzID0gcmVzdWx0O1xuICAgICAgICAgIGNvbHVtbi5yZWxhdGlvbiA9IGZpZWxkLnJlbGF0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfSk7XG5cbiAgICByZWxhdGlvbnNDb2x1bW4gPSByZWxhdGlvbnMubWFwKChyZWxhdGlvbjogUmVsYXRpb25PcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBgcHJvcGVydGllcy4ke3JlbGF0aW9uLm5hbWV9YCxcbiAgICAgICAgdGl0bGU6IHJlbGF0aW9uLmFsaWFzID8gcmVsYXRpb24uYWxpYXMgOiByZWxhdGlvbi5uYW1lLFxuICAgICAgICByZW5kZXJlcjogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5JY29uLFxuICAgICAgICBpY29uOiByZWxhdGlvbi5pY29uLFxuICAgICAgICBwYXJlbnQ6IHJlbGF0aW9uLnBhcmVudCxcbiAgICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgICAgdG9vbHRpcDogcmVsYXRpb24udG9vbHRpcCxcbiAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmFkZGluZyQuZ2V0VmFsdWUoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMud3MkLm5leHQocmVsYXRpb24udGl0bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2VsbENsYXNzRnVuYzogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7IGNsYXNzX2ljb246IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbHVtbnMucHVzaCguLi5yZWxhdGlvbnNDb2x1bW4pO1xuICAgIGNvbHVtbnMucHVzaCguLi5idXR0b25zKTtcblxuICAgIHdvcmtzcGFjZS5tZXRhLnRhYmxlVGVtcGxhdGUgPSB7XG4gICAgICBzZWxlY3Rpb246IGZhbHNlLFxuICAgICAgc29ydDogdHJ1ZSxcbiAgICAgIGNvbHVtbnNcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHNhdmVGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSkge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2FuaXRpemVQYXJhbWV0ZXIoZmVhdHVyZSwgd29ya3NwYWNlKTtcblxuICAgIGNvbnN0IGJhc2VVcmwgPSB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24uYmFzZVVybDtcbiAgICBsZXQgdXJsID0gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZygnZWRpdGlvbi51cmwnKTtcblxuICAgIGlmICghdXJsKSB7XG4gICAgICB1cmwgPSBiYXNlVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgKz0gYmFzZVVybCA/IGJhc2VVcmwgOiAnJztcbiAgICB9XG5cbiAgICBpZiAoZmVhdHVyZS5uZXdGZWF0dXJlKSB7XG4gICAgICB1cmwgKz0gd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLmFkZFVybDtcblxuICAgICAgY29uc3QgYWRkSGVhZGVycyA9IHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5hZGRIZWFkZXJzO1xuICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyhhZGRIZWFkZXJzKTtcblxuICAgICAgdGhpcy5hZGRGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZSwgdXJsLCBoZWFkZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubW9kaWZ5UHJvdG9jb2wgIT09ICdwb3N0J1xuICAgICAgKSB7XG4gICAgICAgIHVybCArPVxuICAgICAgICAgICc/JyArXG4gICAgICAgICAgd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLm1vZGlmeVVybCArXG4gICAgICAgICAgZmVhdHVyZS5pZGtleTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCArPSB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubW9kaWZ5VXJsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm90b2NvbGUgPVxuICAgICAgICB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubW9kaWZ5UHJvdG9jb2w7XG4gICAgICBjb25zdCBtb2RpZnlIZWFkZXJzID1cbiAgICAgICAgd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLm1vZGlmeUhlYWRlcnM7XG4gICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKG1vZGlmeUhlYWRlcnMpO1xuXG4gICAgICB0aGlzLm1vZGlmeUZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlLCB1cmwsIGhlYWRlcnMsIHByb3RvY29sZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZEZlYXR1cmUoXG4gICAgZmVhdHVyZSxcbiAgICB3b3Jrc3BhY2U6IEVkaXRpb25Xb3Jrc3BhY2UsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgYW55PlxuICApIHtcbiAgICBpZiAod29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLmhhc0dlb21ldHJ5KSB7XG4gICAgICBjb25zdCBwcm9qRGVzdCA9XG4gICAgICAgIHdvcmtzcGFjZS5sYXllci5vcHRpb25zLnNvdXJjZU9wdGlvbnMuZWRpdGlvbi5nZW9tRGF0YWJhc2VQcm9qO1xuICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW1xuICAgICAgICB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnBhcmFtcy5maWVsZE5hbWVHZW9tZXRyeVxuICAgICAgXSA9XG4gICAgICAgICdTUklEPScgK1xuICAgICAgICBwcm9qRGVzdC5yZXBsYWNlKCdFUFNHOicsICcnKSArXG4gICAgICAgICc7JyArXG4gICAgICAgIHRoaXMud2t0Rm9ybWF0LndyaXRlR2VvbWV0cnkoXG4gICAgICAgICAgdGhpcy5nZW9Kc29uRm9ybWF0XG4gICAgICAgICAgICAucmVhZEZlYXR1cmUoZmVhdHVyZS5nZW9tZXRyeSlcbiAgICAgICAgICAgIC5nZXRHZW9tZXRyeSgpXG4gICAgICAgICAgICAudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBwcm9qRGVzdCksXG4gICAgICAgICAgeyBkYXRhUHJvamVjdGlvbjogcHJvakRlc3QgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gZmVhdHVyZS5wcm9wZXJ0aWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHNmIG9mIHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuc291cmNlRmllbGRzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoc2YubmFtZSA9PT0gcHJvcGVydHkgJiYgc2YudmFsaWRhdGlvbj8ucmVhZG9ubHkpIHx8XG4gICAgICAgICAgKHNmLm5hbWUgPT09IHByb3BlcnR5ICYmIHNmLnZhbGlkYXRpb24/LnNlbmQgPT09IGZhbHNlKVxuICAgICAgICApIHtcbiAgICAgICAgICBkZWxldGUgZmVhdHVyZS5wcm9wZXJ0aWVzW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5odHRwXG4gICAgICAucG9zdChgJHt1cmx9YCwgZmVhdHVyZS5wcm9wZXJ0aWVzLCB7IGhlYWRlcnM6IGhlYWRlcnMgfSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmNsZWFyKCk7XG4gICAgICAgICAgd29ya3NwYWNlLmRlbGV0ZURyYXdpbmdzKCk7XG4gICAgICAgICAgd29ya3NwYWNlLmVudGl0eVN0b3JlLmRlbGV0ZShmZWF0dXJlKTtcblxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcygnaWdvLmdlby53b3Jrc3BhY2UuYWRkU3VjY2VzcycpO1xuXG4gICAgICAgICAgdGhpcy5yZWZyZXNoTWFwKHdvcmtzcGFjZS5sYXllciBhcyBWZWN0b3JMYXllciwgd29ya3NwYWNlLmxheWVyLm1hcCk7XG4gICAgICAgICAgdGhpcy5hZGRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICAgIHRoaXMucm93c0luTWFwRXh0ZW50Q2hlY2tDb25kaXRpb24kLm5leHQodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGVycm9yLmVycm9yLmNhdWdodCA9IHRydWU7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubWVzc2FnZXM7XG4gICAgICAgICAgaWYgKG1lc3NhZ2VzKSB7XG4gICAgICAgICAgICBsZXQgdGV4dDtcbiAgICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMobWVzc2FnZSlbMF07XG4gICAgICAgICAgICAgIGlmIChlcnJvci5lcnJvci5tZXNzYWdlLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICB0ZXh0ID0gbWVzc2FnZVtrZXldO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IodGV4dCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoJ2lnby5nZW8ud29ya3NwYWNlLmFkZEVycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoJ2lnby5nZW8ud29ya3NwYWNlLmFkZEVycm9yJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUZlYXR1cmUod29ya3NwYWNlOiBFZGl0aW9uV29ya3NwYWNlLCB1cmw6IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5odHRwLmRlbGV0ZShgJHt1cmx9YCwge30pLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcygnaWdvLmdlby53b3Jrc3BhY2UuZGVsZXRlU3VjY2VzcycpO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaE1hcCh3b3Jrc3BhY2UubGF5ZXIgYXMgVmVjdG9yTGF5ZXIsIHdvcmtzcGFjZS5sYXllci5tYXApO1xuICAgICAgICBmb3IgKGNvbnN0IHJlbGF0aW9uIG9mIHdvcmtzcGFjZS5sYXllci5vcHRpb25zLnNvdXJjZU9wdGlvbnNcbiAgICAgICAgICAucmVsYXRpb25zKSB7XG4gICAgICAgICAgd29ya3NwYWNlLm1hcC5sYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChsYXllci50aXRsZSA9PT0gcmVsYXRpb24udGl0bGUpIHtcbiAgICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vbC5yZWZyZXNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGVycm9yLmVycm9yLmNhdWdodCA9IHRydWU7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLm1lc3NhZ2VzO1xuICAgICAgICBpZiAobWVzc2FnZXMpIHtcbiAgICAgICAgICBsZXQgdGV4dDtcbiAgICAgICAgICBtZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhtZXNzYWdlKVswXTtcbiAgICAgICAgICAgIGlmIChlcnJvci5lcnJvci5tZXNzYWdlLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgdGV4dCA9IG1lc3NhZ2Vba2V5XTtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcih0ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoJ2lnby5nZW8ud29ya3NwYWNlLmFkZEVycm9yJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoJ2lnby5nZW8ud29ya3NwYWNlLmFkZEVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1vZGlmeUZlYXR1cmUoXG4gICAgZmVhdHVyZSxcbiAgICB3b3Jrc3BhY2U6IEVkaXRpb25Xb3Jrc3BhY2UsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBwcm90b2NvbGUgPSAncGF0Y2gnXG4gICkge1xuICAgIGlmICh3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24uaGFzR2VvbWV0cnkpIHtcbiAgICAgIGNvbnN0IHByb2pEZXN0ID1cbiAgICAgICAgd29ya3NwYWNlLmxheWVyLm9wdGlvbnMuc291cmNlT3B0aW9ucy5lZGl0aW9uLmdlb21EYXRhYmFzZVByb2o7XG4gICAgICAvLyBSZW1vdmUgM2UgZGltZW5zaW9uXG4gICAgICBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzID0gcmVtb3ZlWihmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcbiAgICAgIGZlYXR1cmUucHJvcGVydGllc1tcbiAgICAgICAgd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5wYXJhbXMuZmllbGROYW1lR2VvbWV0cnlcbiAgICAgIF0gPVxuICAgICAgICAnU1JJRD0nICtcbiAgICAgICAgcHJvakRlc3QucmVwbGFjZSgnRVBTRzonLCAnJykgK1xuICAgICAgICAnOycgK1xuICAgICAgICB0aGlzLndrdEZvcm1hdC53cml0ZUdlb21ldHJ5KFxuICAgICAgICAgIHRoaXMuZ2VvSnNvbkZvcm1hdFxuICAgICAgICAgICAgLnJlYWRGZWF0dXJlKGZlYXR1cmUuZ2VvbWV0cnkpXG4gICAgICAgICAgICAuZ2V0R2VvbWV0cnkoKVxuICAgICAgICAgICAgLnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgcHJvakRlc3QpLFxuICAgICAgICAgIHsgZGF0YVByb2plY3Rpb246IHByb2pEZXN0IH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGZlYXR1cmUucHJvcGVydGllcykge1xuICAgICAgZm9yIChjb25zdCBzZiBvZiB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKHNmLm5hbWUgPT09IHByb3BlcnR5ICYmIHNmLnZhbGlkYXRpb24/LnJlYWRvbmx5KSB8fFxuICAgICAgICAgIChzZi5uYW1lID09PSBwcm9wZXJ0eSAmJiBzZi52YWxpZGF0aW9uPy5zZW5kID09PSBmYWxzZSkgfHxcbiAgICAgICAgICBwcm9wZXJ0eSA9PT0gJ2JvdW5kZWRCeSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaHR0cFtwcm90b2NvbGVdKGAke3VybH1gLCBmZWF0dXJlLnByb3BlcnRpZXMsIHtcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnNcbiAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhbmNlbEVkaXQod29ya3NwYWNlLCBmZWF0dXJlLCB0cnVlKTtcblxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoJ2lnby5nZW8ud29ya3NwYWNlLm1vZGlmeVN1Y2Nlc3MnKTtcblxuICAgICAgICB0aGlzLnJlZnJlc2hNYXAod29ya3NwYWNlLmxheWVyIGFzIFZlY3RvckxheWVyLCB3b3Jrc3BhY2UubGF5ZXIubWFwKTtcblxuICAgICAgICBjb25zdCByZWxhdGlvbkxheWVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHJlbGF0aW9uIG9mIHdvcmtzcGFjZS5sYXllci5vcHRpb25zLnNvdXJjZU9wdGlvbnNcbiAgICAgICAgICAucmVsYXRpb25zKSB7XG4gICAgICAgICAgd29ya3NwYWNlLm1hcC5sYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChsYXllci50aXRsZSA9PT0gcmVsYXRpb24udGl0bGUpIHtcbiAgICAgICAgICAgICAgcmVsYXRpb25MYXllcnMucHVzaChsYXllcik7XG4gICAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub2wucmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVsYXRpb25MYXllcnMkLm5leHQocmVsYXRpb25MYXllcnMpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgZXJyb3IuZXJyb3IuY2F1Z2h0ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubWVzc2FnZXM7XG4gICAgICAgIGlmIChtZXNzYWdlcykge1xuICAgICAgICAgIGxldCB0ZXh0O1xuICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2goKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG1lc3NhZ2UpWzBdO1xuICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICB0ZXh0ID0gbWVzc2FnZVtrZXldO1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby53b3Jrc3BhY2UuYWRkRXJyb3InKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcignaWdvLmdlby53b3Jrc3BhY2UuYWRkRXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjYW5jZWxFZGl0KHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSwgZmVhdHVyZSwgZnJvbVNhdmUgPSBmYWxzZSkge1xuICAgIGZlYXR1cmUuZWRpdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuYWRkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB3b3Jrc3BhY2UuZGVsZXRlRHJhd2luZ3MoKTtcbiAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmNsZWFyKCk7XG5cbiAgICBpZiAoZmVhdHVyZS5uZXdGZWF0dXJlKSB7XG4gICAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuZGVsZXRlKGZlYXR1cmUpO1xuICAgICAgd29ya3NwYWNlLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuXG4gICAgICB0aGlzLnJvd3NJbk1hcEV4dGVudENoZWNrQ29uZGl0aW9uJC5uZXh0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZyb21TYXZlKSB7XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IGZlYXR1cmUub3JpZ2luYWxfcHJvcGVydGllcztcbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeSA9IGZlYXR1cmUub3JpZ2luYWxfZ2VvbWV0cnk7XG4gICAgICB9XG4gICAgICBkZWxldGUgZmVhdHVyZS5vcmlnaW5hbF9wcm9wZXJ0aWVzO1xuICAgICAgZGVsZXRlIGZlYXR1cmUub3JpZ2luYWxfZ2VvbWV0cnk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RG9tYWluVmFsdWVzKHJlbGF0aW9uOiBSZWxhdGlvbk9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCB1cmwgPSByZWxhdGlvbi51cmw7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHVybCA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2VkaXRpb24udXJsJylcbiAgICAgICAgPyB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdlZGl0aW9uLnVybCcpICsgcmVsYXRpb24udGFibGVcbiAgICAgICAgOiByZWxhdGlvbi50YWJsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHVybCkucGlwZShcbiAgICAgIG1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgZXJyLmVycm9yLmNhdWdodCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKlxuICAgKiBSZWZyZXNoIGJvdGggd21zIGFuZCB3ZnMgbGF5ZXJcbiAgICogQSBuZXcgd2ZzIGxvYWRlciBpcyB1c2VkIHRvIGVuc3VyZSBjYWNoZSBpcyBub3QgcmV0cmlldmluZyBvbGQgZGF0YVxuICAgKiBXTVMgcGFyYW1zIGFyZSB1cGRhdGVkIHRvIGVuc3VyZSBsYXllciBpcyBjb3JyZWN0bHkgcmVmcmVzaGVkXG4gICAqL1xuICByZWZyZXNoTWFwKGxheWVyOiBWZWN0b3JMYXllciwgbWFwOiBNYXBCYXNlKSB7XG4gICAgY29uc3Qgd2ZzT2xMYXllciA9IGxheWVyLmRhdGFTb3VyY2Uub2w7XG4gICAgY29uc3QgbG9hZGVyOiBGZWF0dXJlTG9hZGVyID0gKFxuICAgICAgZXh0ZW50LFxuICAgICAgcmVzb2x1dGlvbixcbiAgICAgIHByb2osXG4gICAgICBzdWNjZXNzLFxuICAgICAgZmFpbHVyZVxuICAgICkgPT4ge1xuICAgICAgbGF5ZXIuY3VzdG9tV0ZTTG9hZGVyKFxuICAgICAgICBsYXllci5vbC5nZXRTb3VyY2UoKSxcbiAgICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2VPcHRpb25zIGFzIFdGU0RhdGFTb3VyY2VPcHRpb25zLFxuICAgICAgICB0aGlzLmF1dGhJbnRlcmNlcHRvcixcbiAgICAgICAgZXh0ZW50LFxuICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICBwcm9qLFxuICAgICAgICBzdWNjZXNzLFxuICAgICAgICBmYWlsdXJlLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH07XG4gICAgd2ZzT2xMYXllci5zZXRMb2FkZXIobG9hZGVyKTtcbiAgICB3ZnNPbExheWVyLnJlZnJlc2goKTtcblxuICAgIGZvciAoY29uc3QgbGF5IG9mIG1hcC5sYXllcnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGF5LmlkICE9PSBsYXllci5pZCAmJlxuICAgICAgICBsYXkub3B0aW9ucy5saW5rZWRMYXllcnM/LmxpbmtJZC5pbmNsdWRlcyhcbiAgICAgICAgICBsYXllci5pZC5zdWJzdHIoMCwgbGF5ZXIuaWQuaW5kZXhPZignLicpIC0gMSlcbiAgICAgICAgKSAmJlxuICAgICAgICBsYXkub3B0aW9ucy5saW5rZWRMYXllcnM/LmxpbmtJZC5pbmNsdWRlcygnV21zV29ya3NwYWNlVGFibGVTcmMnKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHdtc09sTGF5ZXIgPSBsYXkuZGF0YVNvdXJjZS5vbCBhcyBvbFNvdXJjZUltYWdlV01TO1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB3bXNPbExheWVyLmdldFBhcmFtcygpO1xuICAgICAgICBwYXJhbXMuX3QgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgd21zT2xMYXllci51cGRhdGVQYXJhbXMocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlOiBFZGl0aW9uV29ya3NwYWNlKSB7XG4gICAgbGV0IGtleTtcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgIHdvcmtzcGFjZS5tZXRhLnRhYmxlVGVtcGxhdGUuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4uaGFzT3duUHJvcGVydHkoJ3ZhbGlkYXRpb24nKSAmJiBjb2x1bW4udmFsaWRhdGlvbikge1xuICAgICAgICBrZXkgPSBnZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XG4gICAgICAgIE9iamVjdC5rZXlzKGNvbHVtbi52YWxpZGF0aW9uKS5mb3JFYWNoKCh0eXBlKSA9PiB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdtYW5kYXRvcnknOiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb2x1bW4udmFsaWRhdGlvblt0eXBlXSAmJlxuICAgICAgICAgICAgICAgICghZmVhdHVyZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGtleSkgfHxcbiAgICAgICAgICAgICAgICAgICFmZWF0dXJlLnByb3BlcnRpZXNba2V5XSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ2lnby5nZW8uZm9ybVZhbGlkYXRpb24ubWFuZGF0b3J5JyxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHsgY29sdW1uOiBjb2x1bW4udGl0bGUgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtaW5WYWx1ZSc6IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0gJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXNba2V5XSA8IGNvbHVtbi52YWxpZGF0aW9uW3R5cGVdXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdpZ28uZ2VvLmZvcm1WYWxpZGF0aW9uLm1pblZhbHVlJyxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4udmFsaWRhdGlvblt0eXBlXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtYXhWYWx1ZSc6IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0gJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXNba2V5XSA+IGNvbHVtbi52YWxpZGF0aW9uW3R5cGVdXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICdpZ28uZ2VvLmZvcm1WYWxpZGF0aW9uLm1heFZhbHVlJyxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4udmFsaWRhdGlvblt0eXBlXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtaW5MZW5ndGgnOiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0ubGVuZ3RoIDwgY29sdW1uLnZhbGlkYXRpb25bdHlwZV1cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ2lnby5nZW8uZm9ybVZhbGlkYXRpb24ubWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4udmFsaWRhdGlvblt0eXBlXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtYXhMZW5ndGgnOiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJlxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0ubGVuZ3RoID4gY29sdW1uLnZhbGlkYXRpb25bdHlwZV1cbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgJ2lnby5nZW8uZm9ybVZhbGlkYXRpb24ubWF4TGVuZ3RoJyxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4udmFsaWRhdGlvblt0eXBlXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdmFsaWQ7XG4gIH1cblxuICBzYW5pdGl6ZVBhcmFtZXRlcihmZWF0dXJlLCB3b3Jrc3BhY2U6IEVkaXRpb25Xb3Jrc3BhY2UpIHtcbiAgICB3b3Jrc3BhY2UubWV0YS50YWJsZVRlbXBsYXRlLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSAnbGlzdCcgJiZcbiAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2dldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKV1cbiAgICAgICkge1xuICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXNbZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpXSA9XG4gICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW1xuICAgICAgICAgICAgZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpXG4gICAgICAgICAgXS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbjogc3RyaW5nKSB7XG4gIGlmIChjb2x1bW4uaW5jbHVkZXMoJ3Byb3BlcnRpZXMuJykpIHtcbiAgICByZXR1cm4gY29sdW1uLnNwbGl0KCcuJylbMV07XG4gIH1cbiAgcmV0dXJuIGNvbHVtbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlWihjb29yZHM6IGFueSkge1xuICBpZiAoY29vcmRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvb3JkcztcbiAgaWYgKHR5cGVvZiBjb29yZHNbMF0gPT09ICdudW1iZXInKSByZXR1cm4gY29vcmRzLnNsaWNlKDAsIDIpO1xuICByZXR1cm4gY29vcmRzLm1hcChyZW1vdmVaKTtcbn1cbiJdfQ==
|
|
@@ -38,4 +38,4 @@ export class FeatureWorkspace extends Workspace {
|
|
|
38
38
|
return this.inResolutionRange$.value;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS13b3Jrc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi93b3Jrc3BhY2Uvc2hhcmVkL2ZlYXR1cmUtd29ya3NwYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9CLE1BQU0sd0JBQXdCLENBQUM7QUFFckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVV2QyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsU0FBUztJQVd2QjtJQVZiLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO0lBRWpFLElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDMUIsQ0FBQztJQUVELFlBQXNCLE9BQWdDO1FBQ3BELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQURLLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBRXBELElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUM5RCxJQUNFLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWE7Z0JBQ3hDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFDeEMsQ0FBQztnQkFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSx5QkFBeUI7UUFDOUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQzVELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSx5QkFBeUI7UUFDOUIsSUFDRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLGlCQUFpQixLQUFLLFNBQVMsRUFDMUUsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXb3Jrc3BhY2UsIFdvcmtzcGFjZU9wdGlvbnMgfSBmcm9tICdAaWdvMi9jb21tb24vd29ya3NwYWNlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlV29ya3NwYWNlT3B0aW9ucyBleHRlbmRzIFdvcmtzcGFjZU9wdGlvbnMge1xuICBsYXllcjogVmVjdG9yTGF5ZXI7XG4gIG1hcDogSWdvTWFwO1xufVxuXG5leHBvcnQgY2xhc3MgRmVhdHVyZVdvcmtzcGFjZSBleHRlbmRzIFdvcmtzcGFjZSB7XG4gIHJlYWRvbmx5IGluUmVzb2x1dGlvblJhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgZ2V0IGxheWVyKCk6IFZlY3RvckxheWVyIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxheWVyO1xuICB9XG5cbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWFwO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG9wdGlvbnM6IEZlYXR1cmVXb3Jrc3BhY2VPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5tYXAudmlld0NvbnRyb2xsZXIucmVzb2x1dGlvbiQuc3Vic2NyaWJlKChtYXBSZXNvbHV0aW9uKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIG1hcFJlc29sdXRpb24gPiB0aGlzLmxheWVyLm1pblJlc29sdXRpb24gJiZcbiAgICAgICAgbWFwUmVzb2x1dGlvbiA8IHRoaXMubGF5ZXIubWF4UmVzb2x1dGlvblxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuaW5SZXNvbHV0aW9uUmFuZ2UkLm5leHQodHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluUmVzb2x1dGlvblJhbmdlJC5uZXh0KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMYXllcldrc09wdGlvblRhYlF1ZXJ5KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmxheWVyLm9wdGlvbnMud29ya3NwYWNlLnF1ZXJ5T3B0aW9ucz8udGFiUXVlcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMubGF5ZXIub3B0aW9ucy53b3Jrc3BhY2UucXVlcnlPcHRpb25zLnRhYlF1ZXJ5O1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMYXllcldrc09wdGlvbk1hcFF1ZXJ5KCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHRoaXMubGF5ZXIub3B0aW9ucy53b3Jrc3BhY2UucXVlcnlPcHRpb25zPy5tYXBRdWVyeU9uT3BlblRhYiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXllci5vcHRpb25zLndvcmtzcGFjZS5xdWVyeU9wdGlvbnMubWFwUXVlcnlPbk9wZW5UYWI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJblJlc29sdXRpb25SYW5nZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pblJlc29sdXRpb25SYW5nZSQudmFsdWU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -101,10 +101,10 @@ export class FeatureWorkspaceService {
|
|
|
101
101
|
store.addStrategy(createFilterInMapExtentOrResolutionStrategy(), true);
|
|
102
102
|
return store;
|
|
103
103
|
}
|
|
104
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
105
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
104
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FeatureWorkspaceService, deps: [{ token: i1.StorageService }, { token: i2.ConfigService }, { token: i3.LayerService }, { token: i4.PropertyTypeDetectorService }, { token: i5.CapabilitiesService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
105
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FeatureWorkspaceService, providedIn: 'root' });
|
|
106
106
|
}
|
|
107
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FeatureWorkspaceService, decorators: [{
|
|
108
108
|
type: Injectable,
|
|
109
109
|
args: [{
|
|
110
110
|
providedIn: 'root'
|
|
@@ -38,4 +38,4 @@ export class WfsWorkspace extends Workspace {
|
|
|
38
38
|
return this.inResolutionRange$.value;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ZzLXdvcmtzcGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3dvcmtzcGFjZS9zaGFyZWQvd2ZzLXdvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBRXJFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFVdkMsTUFBTSxPQUFPLFlBQWEsU0FBUSxTQUFTO0lBV25CO0lBVmIsa0JBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7SUFFakUsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBc0IsT0FBNEI7UUFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBREssWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFFaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQzlELElBQ0UsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTtnQkFDeEMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUN4QyxDQUFDO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFDNUQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixJQUNFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEtBQUssU0FBUyxFQUMxRSxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1FBQ3JFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdvcmtzcGFjZSwgV29ya3NwYWNlT3B0aW9ucyB9IGZyb20gJ0BpZ28yL2NvbW1vbi93b3Jrc3BhY2UnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdmc1dvcmtzcGFjZU9wdGlvbnMgZXh0ZW5kcyBXb3Jrc3BhY2VPcHRpb25zIHtcbiAgbGF5ZXI6IFZlY3RvckxheWVyO1xuICBtYXA6IElnb01hcDtcbn1cblxuZXhwb3J0IGNsYXNzIFdmc1dvcmtzcGFjZSBleHRlbmRzIFdvcmtzcGFjZSB7XG4gIHJlYWRvbmx5IGluUmVzb2x1dGlvblJhbmdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgZ2V0IGxheWVyKCk6IFZlY3RvckxheWVyIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxheWVyO1xuICB9XG5cbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWFwO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG9wdGlvbnM6IFdmc1dvcmtzcGFjZU9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5yZXNvbHV0aW9uJC5zdWJzY3JpYmUoKG1hcFJlc29sdXRpb24pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbWFwUmVzb2x1dGlvbiA+IHRoaXMubGF5ZXIubWluUmVzb2x1dGlvbiAmJlxuICAgICAgICBtYXBSZXNvbHV0aW9uIDwgdGhpcy5sYXllci5tYXhSZXNvbHV0aW9uXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5pblJlc29sdXRpb25SYW5nZSQubmV4dCh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5SZXNvbHV0aW9uUmFuZ2UkLm5leHQoZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldExheWVyV2tzT3B0aW9uVGFiUXVlcnkoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubGF5ZXIub3B0aW9ucy53b3Jrc3BhY2UucXVlcnlPcHRpb25zPy50YWJRdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXllci5vcHRpb25zLndvcmtzcGFjZS5xdWVyeU9wdGlvbnMudGFiUXVlcnk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldExheWVyV2tzT3B0aW9uTWFwUXVlcnkoKTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5sYXllci5vcHRpb25zLndvcmtzcGFjZS5xdWVyeU9wdGlvbnM/Lm1hcFF1ZXJ5T25PcGVuVGFiICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLmxheWVyLm9wdGlvbnMud29ya3NwYWNlLnF1ZXJ5T3B0aW9ucy5tYXBRdWVyeU9uT3BlblRhYjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldEluUmVzb2x1dGlvblJhbmdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluUmVzb2x1dGlvblJhbmdlJC52YWx1ZTtcbiAgfVxufVxuIl19
|
|
@@ -94,10 +94,10 @@ export class WfsWorkspaceService {
|
|
|
94
94
|
store.addStrategy(createFilterInMapExtentOrResolutionStrategy(), true);
|
|
95
95
|
return store;
|
|
96
96
|
}
|
|
97
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
98
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
97
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: WfsWorkspaceService, deps: [{ token: i1.StorageService }, { token: i2.ConfigService }, { token: i3.LayerService }, { token: i4.PropertyTypeDetectorService }, { token: i5.CapabilitiesService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
98
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: WfsWorkspaceService, providedIn: 'root' });
|
|
99
99
|
}
|
|
100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: WfsWorkspaceService, decorators: [{
|
|
101
101
|
type: Injectable,
|
|
102
102
|
args: [{
|
|
103
103
|
providedIn: 'root'
|