@igo2/geo 1.12.0 → 1.13.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2015/igo2-geo.js → esm2020/igo2-geo.mjs} +0 -0
- package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +299 -0
- package/{esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js → esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs} +13 -19
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +244 -0
- package/{esm2015/lib/catalog/catalog-browser/catalog-browser.module.js → esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs} +17 -19
- package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +209 -0
- package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +79 -0
- package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +217 -0
- package/{esm2015/lib/catalog/catalog-library/catalog-library.module.js → esm2020/lib/catalog/catalog-library/catalog-library.module.mjs} +21 -23
- package/{esm2015/lib/catalog/catalog.module.js → esm2020/lib/catalog/catalog.module.mjs} +9 -11
- package/{esm2015/lib/catalog/index.js → esm2020/lib/catalog/index.mjs} +0 -0
- package/{esm2015/lib/catalog/shared/catalog.abstract.js → esm2020/lib/catalog/shared/catalog.abstract.mjs} +0 -0
- package/{esm2015/lib/catalog/shared/catalog.enum.js → esm2020/lib/catalog/shared/catalog.enum.mjs} +0 -0
- package/{esm2015/lib/catalog/shared/catalog.interface.js → esm2020/lib/catalog/shared/catalog.interface.mjs} +0 -0
- package/esm2020/lib/catalog/shared/catalog.service.mjs +606 -0
- package/{esm2015/lib/catalog/shared/index.js → esm2020/lib/catalog/shared/index.mjs} +0 -0
- package/{esm2015/lib/datasource/datasource.module.js → esm2020/lib/datasource/datasource.module.mjs} +2 -2
- package/{esm2015/lib/datasource/index.js → esm2020/lib/datasource/index.mjs} +0 -0
- package/esm2020/lib/datasource/shared/capabilities.service.mjs +426 -0
- package/{esm2015/lib/datasource/shared/datasource.service.js → esm2020/lib/datasource/shared/datasource.service.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/any-datasource.interface.js → esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/any-datasource.js → esm2020/lib/datasource/shared/datasources/any-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.interface.js → esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.js → esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js → esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/carto-datasource.js → esm2020/lib/datasource/shared/datasources/carto-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/cluster-datasource.interface.js → esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/cluster-datasource.js → esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/data.service.js → esm2020/lib/datasource/shared/datasources/data.service.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/datasource.interface.js → esm2020/lib/datasource/shared/datasources/datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/datasource.js → esm2020/lib/datasource/shared/datasources/datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/feature-datasource.interface.js → esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/feature-datasource.js → esm2020/lib/datasource/shared/datasources/feature-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.js → esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.js → esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/index.js → esm2020/lib/datasource/shared/datasources/index.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js → esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/mvt-datasource.js → esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js → esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/osm-datasource.js → esm2020/lib/datasource/shared/datasources/osm-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.js → esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.js → esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/tiledebug-datasource.interface.js → esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/tiledebug-datasource.js → esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js → esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/websocket-datasource.js → esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js → esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs} +0 -0
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +74 -0
- package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +152 -0
- package/{esm2015/lib/datasource/shared/datasources/wms-datasource.interface.js → esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs} +0 -0
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -0
- package/{esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js → esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs} +4 -4
- package/{esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js → esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/wmts-datasource.js → esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js → esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/datasources/xyz-datasource.js → esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/index.js → esm2020/lib/datasource/shared/index.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/options/index.js → esm2020/lib/datasource/shared/options/index.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/options/options-api.interface.js → esm2020/lib/datasource/shared/options/options-api.interface.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/options/options-api.providers.js → esm2020/lib/datasource/shared/options/options-api.providers.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/options/options-api.service.js → esm2020/lib/datasource/shared/options/options-api.service.mjs} +0 -0
- package/{esm2015/lib/datasource/shared/options/options.service.js → esm2020/lib/datasource/shared/options/options.service.mjs} +0 -0
- package/{esm2015/lib/datasource/utils/esri-style-generator.js → esm2020/lib/datasource/utils/esri-style-generator.mjs} +0 -0
- package/{esm2015/lib/datasource/utils/index.js → esm2020/lib/datasource/utils/index.mjs} +0 -0
- package/{esm2015/lib/datasource/utils/tilegrid.js → esm2020/lib/datasource/utils/tilegrid.mjs} +0 -0
- package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +224 -0
- package/{esm2015/lib/directions/directions-buttons/index.js → esm2020/lib/directions/directions-buttons/index.mjs} +0 -0
- package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +290 -0
- package/{esm2015/lib/directions/directions-inputs/index.js → esm2020/lib/directions/directions-inputs/index.mjs} +0 -0
- package/esm2020/lib/directions/directions-results/directions-results.component.mjs +196 -0
- package/{esm2015/lib/directions/directions-results/index.js → esm2020/lib/directions/directions-results/index.mjs} +0 -0
- package/{esm2015/lib/directions/directions-sources/directions-source.interface.js → esm2020/lib/directions/directions-sources/directions-source.interface.mjs} +0 -0
- package/{esm2015/lib/directions/directions-sources/directions-source.js → esm2020/lib/directions/directions-sources/directions-source.mjs} +0 -0
- package/{esm2015/lib/directions/directions-sources/directions-source.provider.js → esm2020/lib/directions/directions-sources/directions-source.provider.mjs} +0 -0
- package/{esm2015/lib/directions/directions-sources/index.js → esm2020/lib/directions/directions-sources/index.mjs} +0 -0
- package/{esm2015/lib/directions/directions-sources/osrm-directions-source.js → esm2020/lib/directions/directions-sources/osrm-directions-source.mjs} +0 -0
- package/esm2020/lib/directions/directions.component.mjs +311 -0
- package/{esm2015/lib/directions/directions.module.js → esm2020/lib/directions/directions.module.mjs} +16 -18
- package/{esm2015/lib/directions/index.js → esm2020/lib/directions/index.mjs} +0 -0
- package/{esm2015/lib/directions/shared/directions-source.service.js → esm2020/lib/directions/shared/directions-source.service.mjs} +0 -0
- package/{esm2015/lib/directions/shared/directions.enum.js → esm2020/lib/directions/shared/directions.enum.mjs} +0 -0
- package/{esm2015/lib/directions/shared/directions.interface.js → esm2020/lib/directions/shared/directions.interface.mjs} +0 -0
- package/{esm2015/lib/directions/shared/directions.service.js → esm2020/lib/directions/shared/directions.service.mjs} +0 -0
- package/esm2020/lib/directions/shared/directions.utils.mjs +510 -0
- package/{esm2015/lib/directions/shared/index.js → esm2020/lib/directions/shared/index.mjs} +0 -0
- package/{esm2015/lib/directions/shared/store.js → esm2020/lib/directions/shared/store.mjs} +0 -0
- package/esm2020/lib/download/download-button/download-button.component.mjs +61 -0
- package/{esm2015/lib/download/download-button/index.js → esm2020/lib/download/download-button/index.mjs} +0 -0
- package/{esm2015/lib/download/download.module.js → esm2020/lib/download/download.module.mjs} +6 -8
- package/{esm2015/lib/download/index.js → esm2020/lib/download/index.mjs} +0 -0
- package/{esm2015/lib/download/shared/download.interface.js → esm2020/lib/download/shared/download.interface.mjs} +0 -0
- package/{esm2015/lib/download/shared/download.service.js → esm2020/lib/download/shared/download.service.mjs} +0 -0
- package/{esm2015/lib/download/shared/index.js → esm2020/lib/download/shared/index.mjs} +0 -0
- package/{esm2015/lib/draw/draw/draw-popup.component.js → esm2020/lib/draw/draw/draw-popup.component.mjs} +11 -19
- package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +48 -0
- package/esm2020/lib/draw/draw/draw.component.mjs +714 -0
- package/{esm2015/lib/draw/draw/draw.module.js → esm2020/lib/draw/draw/draw.module.mjs} +19 -21
- package/{esm2015/lib/draw/drawingTool.module.js → esm2020/lib/draw/drawingTool.module.mjs} +2 -2
- package/{esm2015/lib/draw/index.js → esm2020/lib/draw/index.mjs} +0 -0
- package/{esm2015/lib/draw/shared/draw-icon.service.js → esm2020/lib/draw/shared/draw-icon.service.mjs} +0 -0
- package/{esm2015/lib/draw/shared/draw-style.service.js → esm2020/lib/draw/shared/draw-style.service.mjs} +0 -0
- package/{esm2015/lib/draw/shared/draw.enum.js → esm2020/lib/draw/shared/draw.enum.mjs} +0 -0
- package/{esm2015/lib/draw/shared/draw.interface.js → esm2020/lib/draw/shared/draw.interface.mjs} +0 -0
- package/{esm2015/lib/draw/shared/draw.utils.js → esm2020/lib/draw/shared/draw.utils.mjs} +0 -0
- package/{esm2015/lib/draw/shared/index.js → esm2020/lib/draw/shared/index.mjs} +0 -0
- package/esm2020/lib/feature/feature-details/feature-details.component.mjs +377 -0
- package/{esm2015/lib/feature/feature-details/feature-details.directive.js → esm2020/lib/feature/feature-details/feature-details.directive.mjs} +0 -0
- package/{esm2015/lib/feature/feature-details/feature-details.module.js → esm2020/lib/feature/feature-details/feature-details.module.mjs} +6 -8
- package/{esm2015/lib/feature/feature-form/feature-form.component.js → esm2020/lib/feature/feature-form/feature-form.component.mjs} +3 -8
- package/{esm2015/lib/feature/feature-form/feature-form.module.js → esm2020/lib/feature/feature-form/feature-form.module.mjs} +3 -5
- package/{esm2015/lib/feature/feature.module.js → esm2020/lib/feature/feature.module.mjs} +2 -4
- package/{esm2015/lib/feature/index.js → esm2020/lib/feature/index.mjs} +0 -0
- package/{esm2015/lib/feature/shared/feature.enums.js → esm2020/lib/feature/shared/feature.enums.mjs} +0 -0
- package/{esm2015/lib/feature/shared/feature.interfaces.js → esm2020/lib/feature/shared/feature.interfaces.mjs} +0 -0
- package/{esm2015/lib/feature/shared/feature.utils.js → esm2020/lib/feature/shared/feature.utils.mjs} +0 -0
- package/{esm2015/lib/feature/shared/index.js → esm2020/lib/feature/shared/index.mjs} +0 -0
- package/{esm2015/lib/feature/shared/store.js → esm2020/lib/feature/shared/store.mjs} +0 -0
- package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +113 -0
- package/{esm2015/lib/feature/shared/strategies/in-map-resolution.js → esm2020/lib/feature/shared/strategies/in-map-resolution.mjs} +0 -0
- package/{esm2015/lib/feature/shared/strategies/index.js → esm2020/lib/feature/shared/strategies/index.mjs} +0 -0
- package/{esm2015/lib/feature/shared/strategies/loading-layer.js → esm2020/lib/feature/shared/strategies/loading-layer.mjs} +0 -0
- package/{esm2015/lib/feature/shared/strategies/loading.js → esm2020/lib/feature/shared/strategies/loading.mjs} +0 -0
- package/{esm2015/lib/feature/shared/strategies/selection.js → esm2020/lib/feature/shared/strategies/selection.mjs} +0 -0
- package/{esm2015/lib/feature/shared/strategies.utils.js → esm2020/lib/feature/shared/strategies.utils.mjs} +0 -0
- package/esm2020/lib/filter/filter.module.mjs +289 -0
- package/{esm2015/lib/filter/index.js → esm2020/lib/filter/index.mjs} +0 -0
- package/{esm2015/lib/filter/ogc-filter-button/index.js → esm2020/lib/filter/ogc-filter-button/index.mjs} +0 -0
- package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +140 -0
- package/{esm2015/lib/filter/ogc-filter-form/index.js → esm2020/lib/filter/ogc-filter-form/index.mjs} +0 -0
- package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +645 -0
- package/{esm2015/lib/filter/ogc-filter-selection/index.js → esm2020/lib/filter/ogc-filter-selection/index.mjs} +0 -0
- package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1302 -0
- package/{esm2015/lib/filter/ogc-filter-time/index.js → esm2020/lib/filter/ogc-filter-time/index.mjs} +0 -0
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +177 -0
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +871 -0
- package/{esm2015/lib/filter/ogc-filterable-form/index.js → esm2020/lib/filter/ogc-filterable-form/index.mjs} +0 -0
- package/{esm2015/lib/filter/ogc-filterable-form/ogc-filterable-form.component.js → esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs} +3 -6
- package/{esm2015/lib/filter/ogc-filterable-item/index.js → esm2020/lib/filter/ogc-filterable-item/index.mjs} +0 -0
- package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +302 -0
- package/{esm2015/lib/filter/ogc-filterable-list/index.js → esm2020/lib/filter/ogc-filterable-list/index.mjs} +0 -0
- package/{esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js → esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs} +0 -0
- package/{esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js → esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs} +2 -6
- package/{esm2015/lib/filter/shared/filterable-datasource.pipe.js → esm2020/lib/filter/shared/filterable-datasource.pipe.mjs} +0 -0
- package/{esm2015/lib/filter/shared/index.js → esm2020/lib/filter/shared/index.mjs} +0 -0
- package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +72 -0
- package/{esm2015/lib/filter/shared/ogc-filter.enum.js → esm2020/lib/filter/shared/ogc-filter.enum.mjs} +0 -0
- package/{esm2015/lib/filter/shared/ogc-filter.interface.js → esm2020/lib/filter/shared/ogc-filter.interface.mjs} +0 -0
- package/esm2020/lib/filter/shared/ogc-filter.mjs +692 -0
- package/{esm2015/lib/filter/shared/ogc-filter.service.js → esm2020/lib/filter/shared/ogc-filter.service.mjs} +0 -0
- package/{esm2015/lib/filter/shared/spatial-filter.enum.js → esm2020/lib/filter/shared/spatial-filter.enum.mjs} +0 -0
- package/{esm2015/lib/filter/shared/spatial-filter.interface.js → esm2020/lib/filter/shared/spatial-filter.interface.mjs} +0 -0
- package/{esm2015/lib/filter/shared/spatial-filter.service.js → esm2020/lib/filter/shared/spatial-filter.service.mjs} +0 -0
- package/{esm2015/lib/filter/shared/time-filter.enum.js → esm2020/lib/filter/shared/time-filter.enum.mjs} +0 -0
- package/{esm2015/lib/filter/shared/time-filter.interface.js → esm2020/lib/filter/shared/time-filter.interface.mjs} +0 -0
- package/{esm2015/lib/filter/shared/time-filter.service.js → esm2020/lib/filter/shared/time-filter.service.mjs} +0 -0
- package/{esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js → esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs} +0 -0
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1076 -0
- package/{esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js → esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs} +0 -0
- package/{esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js → esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs} +16 -32
- package/{esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js → esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs} +0 -0
- package/{esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js → esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs} +7 -20
- package/{esm2015/lib/filter/time-filter-button/index.js → esm2020/lib/filter/time-filter-button/index.mjs} +0 -0
- package/{esm2015/lib/filter/time-filter-button/time-filter-button.component.js → esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs} +3 -8
- package/{esm2015/lib/filter/time-filter-form/index.js → esm2020/lib/filter/time-filter-form/index.mjs} +0 -0
- package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +734 -0
- package/{esm2015/lib/filter/time-filter-item/index.js → esm2020/lib/filter/time-filter-item/index.mjs} +0 -0
- package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +119 -0
- package/{esm2015/lib/filter/time-filter-list/index.js → esm2020/lib/filter/time-filter-list/index.mjs} +0 -0
- package/{esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js → esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs} +0 -0
- package/{esm2015/lib/filter/time-filter-list/time-filter-list.component.js → esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs} +2 -6
- package/{esm2015/lib/geo.module.js → esm2020/lib/geo.module.mjs} +2 -2
- package/{esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js → esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs} +2 -6
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +189 -0
- package/{esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js → esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs} +10 -12
- package/{esm2015/lib/geometry/geometry.module.js → esm2020/lib/geometry/geometry.module.mjs} +3 -5
- package/{esm2015/lib/geometry/index.js → esm2020/lib/geometry/index.mjs} +0 -0
- package/{esm2015/lib/geometry/shared/controls/draw.js → esm2020/lib/geometry/shared/controls/draw.mjs} +0 -0
- package/{esm2015/lib/geometry/shared/controls/index.js → esm2020/lib/geometry/shared/controls/index.mjs} +0 -0
- package/{esm2015/lib/geometry/shared/controls/modify.js → esm2020/lib/geometry/shared/controls/modify.mjs} +1 -1
- package/{esm2015/lib/geometry/shared/controls/slice.js → esm2020/lib/geometry/shared/controls/slice.mjs} +0 -0
- package/{esm2015/lib/geometry/shared/geometry.errors.js → esm2020/lib/geometry/shared/geometry.errors.mjs} +0 -0
- package/{esm2015/lib/geometry/shared/geometry.interfaces.js → esm2020/lib/geometry/shared/geometry.interfaces.mjs} +0 -0
- package/{esm2015/lib/geometry/shared/geometry.utils.js → esm2020/lib/geometry/shared/geometry.utils.mjs} +0 -0
- package/{esm2015/lib/geometry/shared/index.js → esm2020/lib/geometry/shared/index.mjs} +0 -0
- package/esm2020/lib/import-export/export-button/export-button.component.mjs +64 -0
- package/{esm2015/lib/import-export/export-button/index.js → esm2020/lib/import-export/export-button/index.mjs} +0 -0
- package/esm2020/lib/import-export/import-export/import-export.component.mjs +1190 -0
- package/{esm2015/lib/import-export/import-export/index.js → esm2020/lib/import-export/import-export/index.mjs} +0 -0
- package/{esm2015/lib/import-export/import-export.module.js → esm2020/lib/import-export/import-export.module.mjs} +19 -21
- package/{esm2015/lib/import-export/index.js → esm2020/lib/import-export/index.mjs} +0 -0
- package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +135 -0
- package/{esm2015/lib/import-export/shared/export.errors.js → esm2020/lib/import-export/shared/export.errors.mjs} +0 -0
- package/{esm2015/lib/import-export/shared/export.interface.js → esm2020/lib/import-export/shared/export.interface.mjs} +0 -0
- package/{esm2015/lib/import-export/shared/export.service.js → esm2020/lib/import-export/shared/export.service.mjs} +0 -0
- package/{esm2015/lib/import-export/shared/export.type.js → esm2020/lib/import-export/shared/export.type.mjs} +0 -0
- package/{esm2015/lib/import-export/shared/export.utils.js → esm2020/lib/import-export/shared/export.utils.mjs} +0 -0
- package/{esm2015/lib/import-export/shared/import.errors.js → esm2020/lib/import-export/shared/import.errors.mjs} +0 -0
- package/{esm2015/lib/import-export/shared/import.interface.js → esm2020/lib/import-export/shared/import.interface.mjs} +0 -0
- package/{esm2015/lib/import-export/shared/import.service.js → esm2020/lib/import-export/shared/import.service.mjs} +0 -0
- package/{esm2015/lib/import-export/shared/import.utils.js → esm2020/lib/import-export/shared/import.utils.mjs} +0 -0
- package/{esm2015/lib/import-export/shared/index.js → esm2020/lib/import-export/shared/index.mjs} +0 -0
- package/{esm2015/lib/import-export/style-list/index.js → esm2020/lib/import-export/style-list/index.mjs} +0 -0
- package/{esm2015/lib/import-export/style-list/style-list.interface.js → esm2020/lib/import-export/style-list/style-list.interface.mjs} +0 -0
- package/{esm2015/lib/import-export/style-list/style-list.module.js → esm2020/lib/import-export/style-list/style-list.module.mjs} +2 -2
- package/{esm2015/lib/import-export/style-list/style-list.provider.js → esm2020/lib/import-export/style-list/style-list.provider.mjs} +0 -0
- package/{esm2015/lib/import-export/style-list/style-list.service.js → esm2020/lib/import-export/style-list/style-list.service.mjs} +0 -0
- package/{esm2015/lib/layer/index.js → esm2020/lib/layer/index.mjs} +0 -0
- package/{esm2015/lib/layer/layer-item/index.js → esm2020/lib/layer/layer-item/index.mjs} +0 -0
- package/esm2020/lib/layer/layer-item/layer-item.component.mjs +300 -0
- package/{esm2015/lib/layer/layer-legend/index.js → esm2020/lib/layer/layer-legend/index.mjs} +0 -0
- package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +382 -0
- package/{esm2015/lib/layer/layer-legend-item/index.js → esm2020/lib/layer/layer-legend-item/index.mjs} +0 -0
- package/{esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js → esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs} +4 -11
- package/{esm2015/lib/layer/layer-legend-list/index.js → esm2020/lib/layer/layer-legend-list/index.mjs} +0 -0
- package/{esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js → esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs} +0 -0
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +195 -0
- package/{esm2015/lib/layer/layer-list/index.js → esm2020/lib/layer/layer-list/index.mjs} +0 -0
- package/{esm2015/lib/layer/layer-list/layer-list-binding.directive.js → esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs} +0 -0
- package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1024 -0
- package/{esm2015/lib/layer/layer-list/layer-list.enum.js → esm2020/lib/layer/layer-list/layer-list.enum.mjs} +0 -0
- package/{esm2015/lib/layer/layer-list-tool/index.js → esm2020/lib/layer/layer-list-tool/index.mjs} +0 -0
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +165 -0
- package/{esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js → esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs} +0 -0
- package/{esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js → esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs} +0 -0
- package/{esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js → esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs} +0 -0
- package/esm2020/lib/layer/layer.module.mjs +173 -0
- package/{esm2015/lib/layer/shared/clusterParam.js → esm2020/lib/layer/shared/clusterParam.mjs} +0 -0
- package/{esm2015/lib/layer/shared/index.js → esm2020/lib/layer/shared/index.mjs} +0 -0
- package/{esm2015/lib/layer/shared/layer.enums.js → esm2020/lib/layer/shared/layer.enums.mjs} +0 -0
- package/esm2020/lib/layer/shared/layer.service.mjs +186 -0
- package/{esm2015/lib/layer/shared/layers/any-layer.interface.js → esm2020/lib/layer/shared/layers/any-layer.interface.mjs} +0 -0
- package/{esm2015/lib/layer/shared/layers/any-layer.js → esm2020/lib/layer/shared/layers/any-layer.mjs} +0 -0
- package/{esm2015/lib/layer/shared/layers/image-layer.interface.js → esm2020/lib/layer/shared/layers/image-layer.interface.mjs} +0 -0
- package/{esm2015/lib/layer/shared/layers/image-layer.js → esm2020/lib/layer/shared/layers/image-layer.mjs} +0 -0
- package/{esm2015/lib/layer/shared/layers/index.js → esm2020/lib/layer/shared/layers/index.mjs} +0 -0
- package/{esm2015/lib/layer/shared/layers/layer.interface.js → esm2020/lib/layer/shared/layers/layer.interface.mjs} +0 -0
- package/esm2020/lib/layer/shared/layers/layer.mjs +170 -0
- package/{esm2015/lib/layer/shared/layers/tile-layer.interface.js → esm2020/lib/layer/shared/layers/tile-layer.interface.mjs} +0 -0
- package/{esm2015/lib/layer/shared/layers/tile-layer.js → esm2020/lib/layer/shared/layers/tile-layer.mjs} +0 -0
- package/{esm2015/lib/layer/shared/layers/vector-layer.interface.js → esm2020/lib/layer/shared/layers/vector-layer.interface.mjs} +0 -0
- package/esm2020/lib/layer/shared/layers/vector-layer.mjs +376 -0
- package/{esm2015/lib/layer/shared/layers/vectortile-layer.interface.js → esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs} +0 -0
- package/{esm2015/lib/layer/shared/layers/vectortile-layer.js → esm2020/lib/layer/shared/layers/vectortile-layer.mjs} +0 -0
- package/esm2020/lib/layer/shared/style.service.mjs +356 -0
- package/{esm2015/lib/layer/shared/vector-style.interface.js → esm2020/lib/layer/shared/vector-style.interface.mjs} +0 -0
- package/{esm2015/lib/layer/track-feature-button/index.js → esm2020/lib/layer/track-feature-button/index.mjs} +0 -0
- package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +59 -0
- package/{esm2015/lib/layer/utils/image-watcher.js → esm2020/lib/layer/utils/image-watcher.mjs} +0 -0
- package/{esm2015/lib/layer/utils/index.js → esm2020/lib/layer/utils/index.mjs} +0 -0
- package/esm2020/lib/layer/utils/layer.utils.mjs +10 -0
- package/esm2020/lib/layer/utils/layerSync-watcher.mjs +242 -0
- package/esm2020/lib/layer/utils/outputLegend.mjs +27 -0
- package/{esm2015/lib/layer/utils/tile-watcher.js → esm2020/lib/layer/utils/tile-watcher.mjs} +0 -0
- package/{esm2015/lib/layer/utils/vector-watcher.js → esm2020/lib/layer/utils/vector-watcher.mjs} +0 -0
- package/{esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js → esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs} +0 -0
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +97 -0
- package/{esm2015/lib/map/baselayers-switcher/index.js → esm2020/lib/map/baselayers-switcher/index.mjs} +0 -0
- package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +133 -0
- package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +76 -0
- package/{esm2015/lib/map/geolocate-button/index.js → esm2020/lib/map/geolocate-button/index.mjs} +0 -0
- package/{esm2015/lib/map/home-extent-button/home-extent-button.component.js → esm2020/lib/map/home-extent-button/home-extent-button.component.mjs} +8 -14
- package/{esm2015/lib/map/home-extent-button/index.js → esm2020/lib/map/home-extent-button/index.mjs} +0 -0
- package/{esm2015/lib/map/index.js → esm2020/lib/map/index.mjs} +0 -0
- package/{esm2015/lib/map/info-section/index.js → esm2020/lib/map/info-section/index.mjs} +0 -0
- package/esm2020/lib/map/info-section/info-section.component.mjs +30 -0
- package/{esm2015/lib/map/map-browser/index.js → esm2020/lib/map/map-browser/index.mjs} +0 -0
- package/esm2020/lib/map/map-browser/map-browser.component.mjs +66 -0
- package/{esm2015/lib/map/map-center/index.js → esm2020/lib/map/map-center/index.mjs} +0 -0
- package/{esm2015/lib/map/map-center/map-center.component.js → esm2020/lib/map/map-center/map-center.component.mjs} +3 -8
- package/{esm2015/lib/map/map.module.js → esm2020/lib/map/map.module.mjs} +11 -13
- package/{esm2015/lib/map/menu-button/index.js → esm2020/lib/map/menu-button/index.mjs} +0 -0
- package/{esm2015/lib/map/menu-button/menu-button.component.js → esm2020/lib/map/menu-button/menu-button.component.mjs} +7 -11
- package/{esm2015/lib/map/offline-button/index.js → esm2020/lib/map/offline-button/index.mjs} +0 -0
- package/esm2020/lib/map/offline-button/offline-button.component.mjs +76 -0
- package/{esm2015/lib/map/rotation-button/index.js → esm2020/lib/map/rotation-button/index.mjs} +0 -0
- package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +91 -0
- package/{esm2015/lib/map/shared/controllers/controller.js → esm2020/lib/map/shared/controllers/controller.mjs} +0 -0
- package/esm2020/lib/map/shared/controllers/geolocation.mjs +308 -0
- package/{esm2015/lib/map/shared/controllers/index.js → esm2020/lib/map/shared/controllers/index.mjs} +0 -0
- package/{esm2015/lib/map/shared/controllers/view.js → esm2020/lib/map/shared/controllers/view.mjs} +0 -0
- package/esm2020/lib/map/shared/hover-feature.directive.mjs +506 -0
- package/{esm2015/lib/map/shared/index.js → esm2020/lib/map/shared/index.mjs} +0 -0
- package/{esm2015/lib/map/shared/map-pointer-position.directive.js → esm2020/lib/map/shared/map-pointer-position.directive.mjs} +0 -0
- package/{esm2015/lib/map/shared/map.enums.js → esm2020/lib/map/shared/map.enums.mjs} +0 -0
- package/{esm2015/lib/map/shared/map.interface.js → esm2020/lib/map/shared/map.interface.mjs} +0 -0
- package/esm2020/lib/map/shared/map.mjs +417 -0
- package/{esm2015/lib/map/shared/map.service.js → esm2020/lib/map/shared/map.service.mjs} +0 -0
- package/{esm2015/lib/map/shared/map.utils.js → esm2020/lib/map/shared/map.utils.mjs} +0 -0
- package/{esm2015/lib/map/shared/mapOffline.directive.js → esm2020/lib/map/shared/mapOffline.directive.mjs} +0 -0
- package/{esm2015/lib/map/shared/projection.interfaces.js → esm2020/lib/map/shared/projection.interfaces.mjs} +0 -0
- package/{esm2015/lib/map/shared/projection.service.js → esm2020/lib/map/shared/projection.service.mjs} +0 -0
- package/{esm2015/lib/map/shared/projection.utils.js → esm2020/lib/map/shared/projection.utils.mjs} +0 -0
- package/{esm2015/lib/map/swipe-control/index.js → esm2020/lib/map/swipe-control/index.mjs} +0 -0
- package/{esm2015/lib/map/swipe-control/swipe-control.component.js → esm2020/lib/map/swipe-control/swipe-control.component.mjs} +4 -10
- package/{esm2015/lib/map/utils/layer-watcher.js → esm2020/lib/map/utils/layer-watcher.mjs} +0 -0
- package/{esm2015/lib/map/wake-lock-button/index.js → esm2020/lib/map/wake-lock-button/index.mjs} +0 -0
- package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +114 -0
- package/{esm2015/lib/map/zoom-button/index.js → esm2020/lib/map/zoom-button/index.mjs} +0 -0
- package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +40 -0
- package/{esm2015/lib/measure/index.js → esm2020/lib/measure/index.mjs} +0 -0
- package/{esm2015/lib/measure/measure.module.js → esm2020/lib/measure/measure.module.mjs} +2 -2
- package/{esm2015/lib/measure/measurer/measure-format.pipe.js → esm2020/lib/measure/measurer/measure-format.pipe.mjs} +0 -0
- package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +180 -0
- package/{esm2015/lib/measure/measurer/measurer-item.component.js → esm2020/lib/measure/measurer/measurer-item.component.mjs} +12 -20
- package/esm2020/lib/measure/measurer/measurer.component.mjs +1042 -0
- package/esm2020/lib/measure/measurer/measurer.module.mjs +94 -0
- package/{esm2015/lib/measure/shared/index.js → esm2020/lib/measure/shared/index.mjs} +0 -0
- package/{esm2015/lib/measure/shared/measure.enum.js → esm2020/lib/measure/shared/measure.enum.mjs} +0 -0
- package/{esm2015/lib/measure/shared/measure.interfaces.js → esm2020/lib/measure/shared/measure.interfaces.mjs} +0 -0
- package/{esm2015/lib/measure/shared/measure.utils.js → esm2020/lib/measure/shared/measure.utils.mjs} +0 -0
- package/{esm2015/lib/metadata/index.js → esm2020/lib/metadata/index.mjs} +0 -0
- package/{esm2015/lib/metadata/metadata-button/index.js → esm2020/lib/metadata/metadata-button/index.mjs} +0 -0
- package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +134 -0
- package/{esm2015/lib/metadata/metadata.module.js → esm2020/lib/metadata/metadata.module.mjs} +7 -9
- package/{esm2015/lib/metadata/shared/index.js → esm2020/lib/metadata/shared/index.mjs} +0 -0
- package/{esm2015/lib/metadata/shared/metadata.interface.js → esm2020/lib/metadata/shared/metadata.interface.mjs} +0 -0
- package/{esm2015/lib/metadata/shared/metadata.service.js → esm2020/lib/metadata/shared/metadata.service.mjs} +0 -0
- package/{esm2015/lib/offline/geoDB/geoDB.enums.js → esm2020/lib/offline/geoDB/geoDB.enums.mjs} +0 -0
- package/{esm2015/lib/offline/geoDB/geoDB.interface.js → esm2020/lib/offline/geoDB/geoDB.interface.mjs} +0 -0
- package/{esm2015/lib/offline/geoDB/geoDB.service.js → esm2020/lib/offline/geoDB/geoDB.service.mjs} +0 -0
- package/{esm2015/lib/offline/geoDB/index.js → esm2020/lib/offline/geoDB/index.mjs} +0 -0
- package/{esm2015/lib/offline/index.js → esm2020/lib/offline/index.mjs} +0 -0
- package/{esm2015/lib/offline/shared/geo-network.service.js → esm2020/lib/offline/shared/geo-network.service.mjs} +0 -0
- package/{esm2015/lib/offline/shared/index.js → esm2020/lib/offline/shared/index.mjs} +0 -0
- package/{esm2015/lib/overlay/index.js → esm2020/lib/overlay/index.mjs} +0 -0
- package/{esm2015/lib/overlay/overlay.module.js → esm2020/lib/overlay/overlay.module.mjs} +2 -2
- package/{esm2015/lib/overlay/shared/index.js → esm2020/lib/overlay/shared/index.mjs} +0 -0
- package/{esm2015/lib/overlay/shared/overlay-marker-style.utils.js → esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs} +0 -0
- package/{esm2015/lib/overlay/shared/overlay.directive.js → esm2020/lib/overlay/shared/overlay.directive.mjs} +0 -0
- package/{esm2015/lib/overlay/shared/overlay.enum.js → esm2020/lib/overlay/shared/overlay.enum.mjs} +0 -0
- package/{esm2015/lib/overlay/shared/overlay.js → esm2020/lib/overlay/shared/overlay.mjs} +0 -0
- package/{esm2015/lib/overlay/shared/overlay.service.js → esm2020/lib/overlay/shared/overlay.service.mjs} +0 -0
- package/{esm2015/lib/overlay/shared/overlay.utils.js → esm2020/lib/overlay/shared/overlay.utils.mjs} +0 -0
- package/{esm2015/lib/print/index.js → esm2020/lib/print/index.mjs} +0 -0
- package/{esm2015/lib/print/print/print.component.js → esm2020/lib/print/print/print.component.mjs} +3 -6
- package/{esm2015/lib/print/print-form/index.js → esm2020/lib/print/print-form/index.mjs} +0 -0
- package/esm2020/lib/print/print-form/print-form.component.mjs +405 -0
- package/{esm2015/lib/print/print.module.js → esm2020/lib/print/print.module.mjs} +13 -15
- package/{esm2015/lib/print/shared/index.js → esm2020/lib/print/shared/index.mjs} +0 -0
- package/{esm2015/lib/print/shared/print.interface.js → esm2020/lib/print/shared/print.interface.mjs} +0 -0
- package/esm2020/lib/print/shared/print.service.mjs +807 -0
- package/{esm2015/lib/print/shared/print.type.js → esm2020/lib/print/shared/print.type.mjs} +0 -0
- package/{esm2015/lib/query/index.js → esm2020/lib/query/index.mjs} +0 -0
- package/{esm2015/lib/query/query.module.js → esm2020/lib/query/query.module.mjs} +2 -2
- package/{esm2015/lib/query/shared/index.js → esm2020/lib/query/shared/index.mjs} +0 -0
- package/{esm2015/lib/query/shared/query-search-source.js → esm2020/lib/query/shared/query-search-source.mjs} +0 -0
- package/{esm2015/lib/query/shared/query-search-source.providers.js → esm2020/lib/query/shared/query-search-source.providers.mjs} +0 -0
- package/{esm2015/lib/query/shared/query.directive.js → esm2020/lib/query/shared/query.directive.mjs} +0 -0
- package/{esm2015/lib/query/shared/query.enums.js → esm2020/lib/query/shared/query.enums.mjs} +0 -0
- package/{esm2015/lib/query/shared/query.interfaces.js → esm2020/lib/query/shared/query.interfaces.mjs} +0 -0
- package/esm2020/lib/query/shared/query.service.mjs +613 -0
- package/{esm2015/lib/query/shared/query.utils.js → esm2020/lib/query/shared/query.utils.mjs} +0 -0
- package/{esm2015/lib/search/index.js → esm2020/lib/search/index.mjs} +0 -0
- package/esm2020/lib/search/search-bar/search-bar.component.mjs +489 -0
- package/{esm2015/lib/search/search-bar/search-bar.module.js → esm2020/lib/search/search-bar/search-bar.module.mjs} +13 -15
- package/{esm2015/lib/search/search-bar/search-url-param.directive.js → esm2020/lib/search/search-bar/search-url-param.directive.mjs} +0 -0
- package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +193 -0
- package/esm2020/lib/search/search-results/search-results-item.component.mjs +124 -0
- package/esm2020/lib/search/search-results/search-results.component.mjs +331 -0
- package/{esm2015/lib/search/search-results/search-results.module.js → esm2020/lib/search/search-results/search-results.module.mjs} +13 -15
- package/esm2020/lib/search/search-selector/search-selector.component.mjs +123 -0
- package/{esm2015/lib/search/search-selector/search-selector.module.js → esm2020/lib/search/search-selector/search-selector.module.mjs} +10 -12
- package/esm2020/lib/search/search-settings/search-settings.component.mjs +418 -0
- package/{esm2015/lib/search/search-settings/search-settings.module.js → esm2020/lib/search/search-settings/search-settings.module.mjs} +11 -13
- package/{esm2015/lib/search/search.module.js → esm2020/lib/search/search.module.mjs} +6 -8
- package/{esm2015/lib/search/shared/index.js → esm2020/lib/search/shared/index.mjs} +0 -0
- package/{esm2015/lib/search/shared/search-pointer-summary.directive.js → esm2020/lib/search/shared/search-pointer-summary.directive.mjs} +0 -0
- package/{esm2015/lib/search/shared/search-source-service.providers.js → esm2020/lib/search/shared/search-source-service.providers.mjs} +0 -0
- package/{esm2015/lib/search/shared/search-source.service.js → esm2020/lib/search/shared/search-source.service.mjs} +0 -0
- package/{esm2015/lib/search/shared/search.enums.js → esm2020/lib/search/shared/search.enums.mjs} +0 -0
- package/{esm2015/lib/search/shared/search.interfaces.js → esm2020/lib/search/shared/search.interfaces.mjs} +0 -0
- package/esm2020/lib/search/shared/search.service.mjs +118 -0
- package/{esm2015/lib/search/shared/search.utils.js → esm2020/lib/search/shared/search.utils.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/cadastre.js → esm2020/lib/search/shared/sources/cadastre.mjs} +1 -1
- package/{esm2015/lib/search/shared/sources/cadastre.providers.js → esm2020/lib/search/shared/sources/cadastre.providers.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/coordinates.interfaces.js → esm2020/lib/search/shared/sources/coordinates.interfaces.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/coordinates.js → esm2020/lib/search/shared/sources/coordinates.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/coordinates.providers.js → esm2020/lib/search/shared/sources/coordinates.providers.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/icherche.interfaces.js → esm2020/lib/search/shared/sources/icherche.interfaces.mjs} +0 -0
- package/esm2020/lib/search/shared/sources/icherche.mjs +755 -0
- package/{esm2015/lib/search/shared/sources/icherche.providers.js → esm2020/lib/search/shared/sources/icherche.providers.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/ilayer.interfaces.js → esm2020/lib/search/shared/sources/ilayer.interfaces.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/ilayer.js → esm2020/lib/search/shared/sources/ilayer.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/ilayer.providers.js → esm2020/lib/search/shared/sources/ilayer.providers.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/index.js → esm2020/lib/search/shared/sources/index.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/nominatim.interfaces.js → esm2020/lib/search/shared/sources/nominatim.interfaces.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/nominatim.js → esm2020/lib/search/shared/sources/nominatim.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/nominatim.providers.js → esm2020/lib/search/shared/sources/nominatim.providers.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/source.interfaces.js → esm2020/lib/search/shared/sources/source.interfaces.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/source.js → esm2020/lib/search/shared/sources/source.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/storedqueries.interfaces.js → esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs} +0 -0
- package/{esm2015/lib/search/shared/sources/storedqueries.js → esm2020/lib/search/shared/sources/storedqueries.mjs} +1 -1
- package/{esm2015/lib/search/shared/sources/storedqueries.providers.js → esm2020/lib/search/shared/sources/storedqueries.providers.mjs} +0 -0
- package/{esm2015/lib/toast/index.js → esm2020/lib/toast/index.mjs} +0 -0
- package/esm2020/lib/toast/toast.component.mjs +113 -0
- package/{esm2015/lib/toast/toast.module.js → esm2020/lib/toast/toast.module.mjs} +7 -9
- package/{esm2015/lib/utils/commonVectorStyle.interface.js → esm2020/lib/utils/commonVectorStyle.interface.mjs} +0 -0
- package/{esm2015/lib/utils/commonVectorStyle.js → esm2020/lib/utils/commonVectorStyle.mjs} +0 -0
- package/{esm2015/lib/utils/googleLinks.js → esm2020/lib/utils/googleLinks.mjs} +0 -0
- package/{esm2015/lib/utils/id-generator.js → esm2020/lib/utils/id-generator.mjs} +0 -0
- package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
- package/{esm2015/lib/utils/osmLinks.js → esm2020/lib/utils/osmLinks.mjs} +0 -0
- package/{esm2015/lib/wkt/index.js → esm2020/lib/wkt/index.mjs} +0 -0
- package/{esm2015/lib/wkt/shared/index.js → esm2020/lib/wkt/shared/index.mjs} +0 -0
- package/{esm2015/lib/wkt/shared/wkt.service.js → esm2020/lib/wkt/shared/wkt.service.mjs} +0 -0
- package/{esm2015/lib/wkt/wkt.module.js → esm2020/lib/wkt/wkt.module.mjs} +2 -2
- package/{esm2015/lib/workspace/confirmation-popup/confirmation-popup.component.js → esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs} +7 -15
- package/{esm2015/lib/workspace/confirmation-popup/confirmation-popup.module.js → esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs} +5 -7
- package/{esm2015/lib/workspace/confirmation-popup/index.js → esm2020/lib/workspace/confirmation-popup/index.mjs} +0 -0
- package/{esm2015/lib/workspace/index.js → esm2020/lib/workspace/index.mjs} +0 -0
- package/{esm2015/lib/workspace/shared/edition-workspace.js → esm2020/lib/workspace/shared/edition-workspace.mjs} +2 -3
- package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +642 -0
- package/esm2020/lib/workspace/shared/feature-workspace.mjs +35 -0
- package/{esm2015/lib/workspace/shared/wfs-workspace.service.js → esm2020/lib/workspace/shared/feature-workspace.service.mjs} +8 -9
- package/{esm2015/lib/workspace/shared/index.js → esm2020/lib/workspace/shared/index.mjs} +0 -0
- package/esm2020/lib/workspace/shared/wfs-workspace.mjs +35 -0
- package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +150 -0
- package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +261 -0
- package/{esm2015/lib/workspace/shared/workspace.utils.js → esm2020/lib/workspace/shared/workspace.utils.mjs} +0 -0
- package/{esm2015/lib/workspace/widgets/index.js → esm2020/lib/workspace/widgets/index.mjs} +0 -0
- package/{esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js → esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs} +3 -8
- package/{esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js → esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs} +5 -7
- package/{esm2015/lib/workspace/widgets/widgets.js → esm2020/lib/workspace/widgets/widgets.mjs} +0 -0
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +133 -0
- package/{esm2015/lib/workspace/workspace-selector/workspace-selector.module.js → esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs} +2 -4
- package/{esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js → esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs} +8 -11
- package/{esm2015/lib/workspace/workspace-updator/workspace-updator.module.js → esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs} +2 -4
- package/{esm2015/lib/workspace/workspace.module.js → esm2020/lib/workspace/workspace.module.mjs} +8 -10
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/fesm2015/igo2-geo.mjs +42904 -0
- package/fesm2015/igo2-geo.mjs.map +1 -0
- package/{fesm2015/igo2-geo.js → fesm2020/igo2-geo.mjs} +1635 -2527
- package/fesm2020/igo2-geo.mjs.map +1 -0
- package/{igo2-geo.d.ts → index.d.ts} +0 -0
- package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +1 -1
- package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
- package/lib/catalog/catalog-library/catalog-library.component.d.ts +1 -1
- package/lib/directions/directions-buttons/directions-buttons.component.d.ts +1 -1
- package/lib/directions/directions-inputs/directions-inputs.component.d.ts +1 -1
- package/lib/directions/directions-results/directions-results.component.d.ts +1 -1
- package/lib/directions/directions.component.d.ts +1 -1
- package/lib/download/download-button/download-button.component.d.ts +1 -1
- package/lib/draw/draw/draw-popup.component.d.ts +1 -1
- package/lib/draw/draw/draw-shorcuts.component.d.ts +1 -1
- package/lib/draw/draw/draw.component.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.component.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
- package/lib/feature/feature-form/feature-form.component.d.ts +1 -1
- package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
- package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +1 -1
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +1 -1
- package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +5 -5
- package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +1 -1
- package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
- package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
- package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +1 -1
- package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +4 -4
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -3
- package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +2 -2
- package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
- package/lib/filter/time-filter-form/time-filter-form.component.d.ts +1 -1
- package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
- package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
- package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -1
- package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -1
- package/lib/import-export/export-button/export-button.component.d.ts +1 -1
- package/lib/import-export/import-export/import-export.component.d.ts +1 -1
- package/lib/import-export/shared/drop-geo-file.directive.d.ts +1 -1
- package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
- package/lib/layer/layer-legend/layer-legend.component.d.ts +1 -1
- package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
- package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
- package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
- package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
- package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
- package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
- package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
- package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
- package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
- package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
- package/lib/map/home-extent-button/home-extent-button.component.d.ts +1 -1
- package/lib/map/info-section/info-section.component.d.ts +1 -1
- package/lib/map/map-browser/map-browser.component.d.ts +1 -1
- package/lib/map/map-center/map-center.component.d.ts +1 -1
- package/lib/map/menu-button/menu-button.component.d.ts +1 -1
- package/lib/map/offline-button/offline-button.component.d.ts +1 -1
- package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
- package/lib/map/shared/controllers/geolocation.d.ts +3 -2
- package/lib/map/shared/hover-feature.directive.d.ts +1 -1
- package/lib/map/shared/map-pointer-position.directive.d.ts +1 -1
- package/lib/map/shared/map.d.ts +3 -2
- package/lib/map/shared/mapOffline.directive.d.ts +1 -1
- package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
- package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +1 -1
- package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
- package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
- package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
- package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
- package/lib/measure/measurer/measurer.component.d.ts +1 -1
- package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
- package/lib/overlay/shared/overlay.directive.d.ts +1 -1
- package/lib/print/print/print.component.d.ts +1 -1
- package/lib/print/print-form/print-form.component.d.ts +14 -14
- package/lib/print/shared/print.service.d.ts +6 -1
- package/lib/query/shared/query.directive.d.ts +1 -1
- package/lib/search/search-bar/search-bar.component.d.ts +1 -1
- package/lib/search/search-bar/search-url-param.directive.d.ts +1 -1
- package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
- package/lib/search/search-results/search-results-item.component.d.ts +1 -1
- package/lib/search/search-results/search-results.component.d.ts +1 -1
- package/lib/search/search-selector/search-selector.component.d.ts +1 -1
- package/lib/search/search-settings/search-settings.component.d.ts +1 -1
- package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
- package/lib/toast/toast.component.d.ts +1 -1
- package/lib/wkt/shared/wkt.service.d.ts +1 -1
- package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
- package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
- package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
- package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
- package/package.json +31 -18
- package/bundles/igo2-geo.umd.js +0 -47612
- package/bundles/igo2-geo.umd.js.map +0 -1
- package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +0 -305
- package/esm2015/lib/catalog/catalog-browser/catalog-browser.component.js +0 -248
- package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +0 -235
- package/esm2015/lib/catalog/catalog-library/catalog-library-item.component.js +0 -85
- package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +0 -224
- package/esm2015/lib/catalog/shared/catalog.service.js +0 -606
- package/esm2015/lib/datasource/shared/capabilities.service.js +0 -427
- package/esm2015/lib/datasource/shared/datasources/wfs-datasource.js +0 -74
- package/esm2015/lib/datasource/shared/datasources/wfs.service.js +0 -153
- package/esm2015/lib/datasource/shared/datasources/wms-datasource.js +0 -205
- package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +0 -229
- package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +0 -300
- package/esm2015/lib/directions/directions-results/directions-results.component.js +0 -204
- package/esm2015/lib/directions/directions.component.js +0 -316
- package/esm2015/lib/directions/shared/directions.utils.js +0 -510
- package/esm2015/lib/download/download-button/download-button.component.js +0 -66
- package/esm2015/lib/draw/draw/draw-shorcuts.component.js +0 -64
- package/esm2015/lib/draw/draw/draw.component.js +0 -745
- package/esm2015/lib/feature/feature-details/feature-details.component.js +0 -393
- package/esm2015/lib/feature/shared/strategies/in-map-extent.js +0 -114
- package/esm2015/lib/filter/filter.module.js +0 -290
- package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +0 -161
- package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +0 -657
- package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +0 -1355
- package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.js +0 -185
- package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +0 -898
- package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +0 -307
- package/esm2015/lib/filter/shared/ogc-filter-time.service.js +0 -73
- package/esm2015/lib/filter/shared/ogc-filter.js +0 -693
- package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +0 -1108
- package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +0 -772
- package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +0 -126
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +0 -199
- package/esm2015/lib/import-export/export-button/export-button.component.js +0 -70
- package/esm2015/lib/import-export/import-export/import-export.component.js +0 -1238
- package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +0 -136
- package/esm2015/lib/layer/layer-item/layer-item.component.js +0 -305
- package/esm2015/lib/layer/layer-legend/layer-legend.component.js +0 -395
- package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +0 -200
- package/esm2015/lib/layer/layer-list/layer-list.component.js +0 -1043
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +0 -176
- package/esm2015/lib/layer/layer.module.js +0 -174
- package/esm2015/lib/layer/shared/layer.service.js +0 -186
- package/esm2015/lib/layer/shared/layers/layer.js +0 -169
- package/esm2015/lib/layer/shared/layers/vector-layer.js +0 -376
- package/esm2015/lib/layer/shared/style.service.js +0 -358
- package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +0 -64
- package/esm2015/lib/layer/utils/layer.utils.js +0 -11
- package/esm2015/lib/layer/utils/layerSync-watcher.js +0 -249
- package/esm2015/lib/layer/utils/outputLegend.js +0 -27
- package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.component.js +0 -105
- package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +0 -137
- package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +0 -82
- package/esm2015/lib/map/info-section/info-section.component.js +0 -36
- package/esm2015/lib/map/map-browser/map-browser.component.js +0 -70
- package/esm2015/lib/map/offline-button/offline-button.component.js +0 -84
- package/esm2015/lib/map/rotation-button/rotation-button.component.js +0 -97
- package/esm2015/lib/map/shared/controllers/geolocation.js +0 -295
- package/esm2015/lib/map/shared/hover-feature.directive.js +0 -509
- package/esm2015/lib/map/shared/map.js +0 -417
- package/esm2015/lib/map/wake-lock-button/wake-lock-button.component.js +0 -122
- package/esm2015/lib/map/zoom-button/zoom-button.component.js +0 -46
- package/esm2015/lib/measure/measurer/measurer-dialog.component.js +0 -220
- package/esm2015/lib/measure/measurer/measurer.component.js +0 -1053
- package/esm2015/lib/measure/measurer/measurer.module.js +0 -96
- package/esm2015/lib/metadata/metadata-button/metadata-button.component.js +0 -135
- package/esm2015/lib/print/print-form/print-form.component.js +0 -447
- package/esm2015/lib/print/shared/print.service.js +0 -820
- package/esm2015/lib/query/shared/query.service.js +0 -619
- package/esm2015/lib/search/search-bar/search-bar.component.js +0 -496
- package/esm2015/lib/search/search-results/search-results-add-button.component.js +0 -198
- package/esm2015/lib/search/search-results/search-results-item.component.js +0 -129
- package/esm2015/lib/search/search-results/search-results.component.js +0 -337
- package/esm2015/lib/search/search-selector/search-selector.component.js +0 -132
- package/esm2015/lib/search/search-settings/search-settings.component.js +0 -435
- package/esm2015/lib/search/shared/search.service.js +0 -118
- package/esm2015/lib/search/shared/sources/icherche.js +0 -756
- package/esm2015/lib/toast/toast.component.js +0 -119
- package/esm2015/lib/workspace/shared/edition-workspace.service.js +0 -646
- package/esm2015/lib/workspace/shared/feature-workspace.js +0 -37
- package/esm2015/lib/workspace/shared/feature-workspace.service.js +0 -151
- package/esm2015/lib/workspace/shared/wfs-workspace.js +0 -37
- package/esm2015/lib/workspace/shared/wms-workspace.service.js +0 -263
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +0 -135
- package/fesm2015/igo2-geo.js.map +0 -1
|
@@ -0,0 +1,1190 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import { BehaviorSubject } from 'rxjs';
|
|
4
|
+
import { strEnum } from '@igo2/utils';
|
|
5
|
+
import { ClusterDataSource } from '../../datasource/shared/datasources/cluster-datasource';
|
|
6
|
+
import { VectorLayer } from '../../layer/shared/layers/vector-layer';
|
|
7
|
+
import olPoint from 'ol/geom/Point';
|
|
8
|
+
import { circular } from 'ol/geom/Polygon';
|
|
9
|
+
import { handleFileExportError, handleFileExportSuccess } from '../shared/export.utils';
|
|
10
|
+
import { ExportFormat, EncodingFormat } from '../shared/export.type';
|
|
11
|
+
import { ExportService } from '../shared/export.service';
|
|
12
|
+
import { handleFileImportSuccess, handleFileImportError } from '../shared/import.utils';
|
|
13
|
+
import { skipWhile } from 'rxjs/operators';
|
|
14
|
+
import { computeProjectionsConstraints } from '../../map';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
import * as i1 from "../shared/import.service";
|
|
17
|
+
import * as i2 from "../shared/export.service";
|
|
18
|
+
import * as i3 from "@igo2/core";
|
|
19
|
+
import * as i4 from "../style-list/style-list.service";
|
|
20
|
+
import * as i5 from "../../layer/shared/style.service";
|
|
21
|
+
import * as i6 from "@angular/forms";
|
|
22
|
+
import * as i7 from "../../download/shared/download.service";
|
|
23
|
+
import * as i8 from "@angular/material/tooltip";
|
|
24
|
+
import * as i9 from "@angular/common";
|
|
25
|
+
import * as i10 from "@angular/material/button";
|
|
26
|
+
import * as i11 from "@angular/material/button-toggle";
|
|
27
|
+
import * as i12 from "@angular/material/form-field";
|
|
28
|
+
import * as i13 from "@angular/material/select";
|
|
29
|
+
import * as i14 from "@angular/material/core";
|
|
30
|
+
import * as i15 from "@angular/material/input";
|
|
31
|
+
import * as i16 from "@angular/material/slide-toggle";
|
|
32
|
+
import * as i17 from "@igo2/common";
|
|
33
|
+
import * as i18 from "@ngx-translate/core";
|
|
34
|
+
function ImportExportComponent_form_8_mat_option_7_p_1_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
i0.ɵɵelementStart(0, "p", 16);
|
|
36
|
+
i0.ɵɵtext(1);
|
|
37
|
+
i0.ɵɵpipe(2, "translate");
|
|
38
|
+
i0.ɵɵelementEnd();
|
|
39
|
+
} if (rf & 2) {
|
|
40
|
+
const projection_r6 = i0.ɵɵnextContext().$implicit;
|
|
41
|
+
i0.ɵɵadvance(1);
|
|
42
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, "igo.geo.importExportForm.projections." + projection_r6.translateKey, projection_r6));
|
|
43
|
+
} }
|
|
44
|
+
function ImportExportComponent_form_8_mat_option_7_p_2_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "p", 16);
|
|
46
|
+
i0.ɵɵtext(1);
|
|
47
|
+
i0.ɵɵelementEnd();
|
|
48
|
+
} if (rf & 2) {
|
|
49
|
+
const projection_r6 = i0.ɵɵnextContext().$implicit;
|
|
50
|
+
i0.ɵɵadvance(1);
|
|
51
|
+
i0.ɵɵtextInterpolate(projection_r6.alias);
|
|
52
|
+
} }
|
|
53
|
+
function ImportExportComponent_form_8_mat_option_7_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
+
i0.ɵɵelementStart(0, "mat-option", 14);
|
|
55
|
+
i0.ɵɵlistener("click", function ImportExportComponent_form_8_mat_option_7_Template_mat_option_click_0_listener($event) { return $event.stopPropagation(); });
|
|
56
|
+
i0.ɵɵtemplate(1, ImportExportComponent_form_8_mat_option_7_p_1_Template, 3, 4, "p", 15);
|
|
57
|
+
i0.ɵɵtemplate(2, ImportExportComponent_form_8_mat_option_7_p_2_Template, 2, 1, "p", 15);
|
|
58
|
+
i0.ɵɵelementEnd();
|
|
59
|
+
} if (rf & 2) {
|
|
60
|
+
const projection_r6 = ctx.$implicit;
|
|
61
|
+
i0.ɵɵproperty("value", projection_r6);
|
|
62
|
+
i0.ɵɵadvance(1);
|
|
63
|
+
i0.ɵɵproperty("ngIf", projection_r6.translateKey);
|
|
64
|
+
i0.ɵɵadvance(1);
|
|
65
|
+
i0.ɵɵproperty("ngIf", !projection_r6.translateKey);
|
|
66
|
+
} }
|
|
67
|
+
function ImportExportComponent_form_8_Template(rf, ctx) { if (rf & 1) {
|
|
68
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
69
|
+
i0.ɵɵelementStart(0, "form", 5)(1, "div", 6)(2, "mat-form-field")(3, "mat-label");
|
|
70
|
+
i0.ɵɵtext(4);
|
|
71
|
+
i0.ɵɵpipe(5, "translate");
|
|
72
|
+
i0.ɵɵelementEnd();
|
|
73
|
+
i0.ɵɵelementStart(6, "mat-select", 7);
|
|
74
|
+
i0.ɵɵlistener("valueChange", function ImportExportComponent_form_8_Template_mat_select_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.inputProj = $event); });
|
|
75
|
+
i0.ɵɵtemplate(7, ImportExportComponent_form_8_mat_option_7_Template, 3, 3, "mat-option", 8);
|
|
76
|
+
i0.ɵɵpipe(8, "async");
|
|
77
|
+
i0.ɵɵelementEnd()()();
|
|
78
|
+
i0.ɵɵelementStart(9, "div", 9);
|
|
79
|
+
i0.ɵɵpipe(10, "translate");
|
|
80
|
+
i0.ɵɵpipe(11, "translate");
|
|
81
|
+
i0.ɵɵelementStart(12, "button", 10);
|
|
82
|
+
i0.ɵɵlistener("click", function ImportExportComponent_form_8_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r13); const _r5 = i0.ɵɵreference(19); return i0.ɵɵresetView(_r5.click()); });
|
|
83
|
+
i0.ɵɵpipe(13, "async");
|
|
84
|
+
i0.ɵɵtext(14);
|
|
85
|
+
i0.ɵɵpipe(15, "translate");
|
|
86
|
+
i0.ɵɵelementEnd();
|
|
87
|
+
i0.ɵɵelement(16, "igo-spinner", 11);
|
|
88
|
+
i0.ɵɵpipe(17, "async");
|
|
89
|
+
i0.ɵɵelementStart(18, "input", 12, 13);
|
|
90
|
+
i0.ɵɵlistener("click", function ImportExportComponent_form_8_Template_input_click_18_listener() { i0.ɵɵrestoreView(_r13); const _r5 = i0.ɵɵreference(19); return i0.ɵɵresetView(_r5.value = null); })("change", function ImportExportComponent_form_8_Template_input_change_18_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r16 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r16.importFiles($event.target.files)); });
|
|
91
|
+
i0.ɵɵelementEnd()()();
|
|
92
|
+
} if (rf & 2) {
|
|
93
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
94
|
+
i0.ɵɵproperty("formGroup", ctx_r0.importForm);
|
|
95
|
+
i0.ɵɵadvance(4);
|
|
96
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 10, "igo.geo.importExportForm.importProjPlaceholder"));
|
|
97
|
+
i0.ɵɵadvance(2);
|
|
98
|
+
i0.ɵɵproperty("value", ctx_r0.inputProj);
|
|
99
|
+
i0.ɵɵadvance(1);
|
|
100
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(8, 12, ctx_r0.projections$));
|
|
101
|
+
i0.ɵɵadvance(2);
|
|
102
|
+
i0.ɵɵproperty("matTooltip", ctx_r0.importForm.invalid ? i0.ɵɵpipeBind1(10, 14, "igo.geo.importExportForm.projections.choose") : i0.ɵɵpipeBind1(11, 16, "igo.geo.importExportForm.importButton"));
|
|
103
|
+
i0.ɵɵadvance(3);
|
|
104
|
+
i0.ɵɵproperty("disabled", ctx_r0.importForm.invalid || i0.ɵɵpipeBind1(13, 18, ctx_r0.loading$));
|
|
105
|
+
i0.ɵɵadvance(2);
|
|
106
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(15, 20, "igo.geo.importExportForm.importButton"), " ");
|
|
107
|
+
i0.ɵɵadvance(2);
|
|
108
|
+
i0.ɵɵproperty("shown", i0.ɵɵpipeBind1(17, 22, ctx_r0.loading$));
|
|
109
|
+
i0.ɵɵadvance(2);
|
|
110
|
+
i0.ɵɵstyleProp("display", "none");
|
|
111
|
+
} }
|
|
112
|
+
const _c0 = function (a0) { return { size: a0 }; };
|
|
113
|
+
function ImportExportComponent_section_9_Template(rf, ctx) { if (rf & 1) {
|
|
114
|
+
i0.ɵɵelementStart(0, "section", 17)(1, "h4");
|
|
115
|
+
i0.ɵɵtext(2);
|
|
116
|
+
i0.ɵɵpipe(3, "translate");
|
|
117
|
+
i0.ɵɵelementEnd();
|
|
118
|
+
i0.ɵɵelementStart(4, "ul")(5, "li");
|
|
119
|
+
i0.ɵɵtext(6);
|
|
120
|
+
i0.ɵɵpipe(7, "translate");
|
|
121
|
+
i0.ɵɵelementEnd();
|
|
122
|
+
i0.ɵɵelementStart(8, "li");
|
|
123
|
+
i0.ɵɵtext(9);
|
|
124
|
+
i0.ɵɵpipe(10, "translate");
|
|
125
|
+
i0.ɵɵelementEnd();
|
|
126
|
+
i0.ɵɵelementStart(11, "li");
|
|
127
|
+
i0.ɵɵtext(12);
|
|
128
|
+
i0.ɵɵpipe(13, "translate");
|
|
129
|
+
i0.ɵɵelementEnd()()();
|
|
130
|
+
} if (rf & 2) {
|
|
131
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
132
|
+
i0.ɵɵadvance(2);
|
|
133
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.importExportForm.importClarifications"));
|
|
134
|
+
i0.ɵɵadvance(4);
|
|
135
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(7, 6, "igo.geo.importExportForm.importSizeMax", i0.ɵɵpureFunction1(13, _c0, ctx_r1.fileSizeMb)));
|
|
136
|
+
i0.ɵɵadvance(3);
|
|
137
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(10, 9, "igo.geo.importExportForm.importFormatAuthorized"));
|
|
138
|
+
i0.ɵɵadvance(3);
|
|
139
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(13, 11, "igo.geo.importExportForm.importShpZip"));
|
|
140
|
+
} }
|
|
141
|
+
function ImportExportComponent_section_10_Template(rf, ctx) { if (rf & 1) {
|
|
142
|
+
i0.ɵɵelementStart(0, "section", 17)(1, "h4");
|
|
143
|
+
i0.ɵɵtext(2);
|
|
144
|
+
i0.ɵɵpipe(3, "translate");
|
|
145
|
+
i0.ɵɵelementEnd()();
|
|
146
|
+
} if (rf & 2) {
|
|
147
|
+
i0.ɵɵadvance(2);
|
|
148
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 1, "igo.geo.importExportForm.exportNoLayersExportable"));
|
|
149
|
+
} }
|
|
150
|
+
function ImportExportComponent_form_12_span_9_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
+
i0.ɵɵelementStart(0, "span", 29);
|
|
152
|
+
i0.ɵɵtext(1);
|
|
153
|
+
i0.ɵɵpipe(2, "translate");
|
|
154
|
+
i0.ɵɵelementEnd();
|
|
155
|
+
} if (rf & 2) {
|
|
156
|
+
const ctx_r17 = i0.ɵɵnextContext(2);
|
|
157
|
+
i0.ɵɵadvance(1);
|
|
158
|
+
i0.ɵɵtextInterpolate2(" (+", ctx_r17.layers.length - 1, " ", i0.ɵɵpipeBind1(2, 2, (ctx_r17.layers == null ? null : ctx_r17.layers.length) === 2 ? "igo.geo.importExportForm.other" : "igo.geo.importExportForm.others"), ") ");
|
|
159
|
+
} }
|
|
160
|
+
function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template(rf, ctx) { if (rf & 1) {
|
|
161
|
+
const _r30 = i0.ɵɵgetCurrentView();
|
|
162
|
+
i0.ɵɵelementStart(0, "mat-slide-toggle", 32);
|
|
163
|
+
i0.ɵɵlistener("click", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_click_0_listener($event) { i0.ɵɵrestoreView(_r30); const layer_r26 = i0.ɵɵnextContext().$implicit; const ctx_r28 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r28.onlySelectedClick($event, layer_r26.id)); })("checked", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_checked_0_listener() { i0.ɵɵrestoreView(_r30); const layer_r26 = i0.ɵɵnextContext().$implicit; const ctx_r31 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r31.inLayersIdToExportSelectionOnly(layer_r26)); })("change", function ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template_mat_slide_toggle_change_0_listener($event) { i0.ɵɵrestoreView(_r30); const layer_r26 = i0.ɵɵnextContext().$implicit; const ctx_r33 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r33.onlySelected($event, layer_r26.id)); });
|
|
164
|
+
i0.ɵɵelementStart(1, "small");
|
|
165
|
+
i0.ɵɵtext(2);
|
|
166
|
+
i0.ɵɵpipe(3, "translate");
|
|
167
|
+
i0.ɵɵelementEnd()();
|
|
168
|
+
} if (rf & 2) {
|
|
169
|
+
i0.ɵɵproperty("labelPosition", "after");
|
|
170
|
+
i0.ɵɵadvance(2);
|
|
171
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportSelectedFeature"));
|
|
172
|
+
} }
|
|
173
|
+
const _c1 = function (a0) { return { "igo-export-layer-mat-option": a0 }; };
|
|
174
|
+
function ImportExportComponent_form_12_mat_option_10_Template(rf, ctx) { if (rf & 1) {
|
|
175
|
+
i0.ɵɵelementStart(0, "mat-option", 30);
|
|
176
|
+
i0.ɵɵlistener("click", function ImportExportComponent_form_12_mat_option_10_Template_mat_option_click_0_listener($event) { return $event.stopPropagation(); });
|
|
177
|
+
i0.ɵɵelementStart(1, "p", 16);
|
|
178
|
+
i0.ɵɵtext(2);
|
|
179
|
+
i0.ɵɵelementEnd();
|
|
180
|
+
i0.ɵɵelementStart(3, "p", 16);
|
|
181
|
+
i0.ɵɵtemplate(4, ImportExportComponent_form_12_mat_option_10_mat_slide_toggle_4_Template, 4, 4, "mat-slide-toggle", 31);
|
|
182
|
+
i0.ɵɵelementEnd()();
|
|
183
|
+
} if (rf & 2) {
|
|
184
|
+
const layer_r26 = ctx.$implicit;
|
|
185
|
+
const ctx_r18 = i0.ɵɵnextContext(2);
|
|
186
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c1, ctx_r18.layerHasSelectedFeatures(layer_r26)))("value", layer_r26.id);
|
|
187
|
+
i0.ɵɵadvance(2);
|
|
188
|
+
i0.ɵɵtextInterpolate(layer_r26.title);
|
|
189
|
+
i0.ɵɵadvance(2);
|
|
190
|
+
i0.ɵɵproperty("ngIf", ctx_r18.layerHasSelectedFeatures(layer_r26));
|
|
191
|
+
} }
|
|
192
|
+
function ImportExportComponent_form_12_ng_container_18_mat_option_1_Template(rf, ctx) { if (rf & 1) {
|
|
193
|
+
i0.ɵɵelementStart(0, "mat-option", 2);
|
|
194
|
+
i0.ɵɵtext(1);
|
|
195
|
+
i0.ɵɵpipe(2, "translate");
|
|
196
|
+
i0.ɵɵelementEnd();
|
|
197
|
+
} if (rf & 2) {
|
|
198
|
+
const format_r37 = ctx.$implicit;
|
|
199
|
+
i0.ɵɵproperty("value", format_r37.key);
|
|
200
|
+
i0.ɵɵadvance(1);
|
|
201
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.export.format." + format_r37.value), " ");
|
|
202
|
+
} }
|
|
203
|
+
function ImportExportComponent_form_12_ng_container_18_Template(rf, ctx) { if (rf & 1) {
|
|
204
|
+
i0.ɵɵelementContainerStart(0);
|
|
205
|
+
i0.ɵɵtemplate(1, ImportExportComponent_form_12_ng_container_18_mat_option_1_Template, 3, 4, "mat-option", 33);
|
|
206
|
+
i0.ɵɵpipe(2, "keyvalue");
|
|
207
|
+
i0.ɵɵpipe(3, "async");
|
|
208
|
+
i0.ɵɵelementContainerEnd();
|
|
209
|
+
} if (rf & 2) {
|
|
210
|
+
const ctx_r19 = i0.ɵɵnextContext(2);
|
|
211
|
+
i0.ɵɵadvance(1);
|
|
212
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, i0.ɵɵpipeBind1(3, 3, ctx_r19.formats$)));
|
|
213
|
+
} }
|
|
214
|
+
function ImportExportComponent_form_12_mat_option_20_Template(rf, ctx) { if (rf & 1) {
|
|
215
|
+
i0.ɵɵelementStart(0, "mat-option", 34);
|
|
216
|
+
i0.ɵɵtext(1);
|
|
217
|
+
i0.ɵɵpipe(2, "translate");
|
|
218
|
+
i0.ɵɵelementEnd();
|
|
219
|
+
} if (rf & 2) {
|
|
220
|
+
i0.ɵɵadvance(1);
|
|
221
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 1, "igo.geo.export.noFormat.title"), " ");
|
|
222
|
+
} }
|
|
223
|
+
function ImportExportComponent_form_12_div_22_Template(rf, ctx) { if (rf & 1) {
|
|
224
|
+
i0.ɵɵelementStart(0, "div", 6)(1, "mat-form-field");
|
|
225
|
+
i0.ɵɵelement(2, "input", 35);
|
|
226
|
+
i0.ɵɵpipe(3, "translate");
|
|
227
|
+
i0.ɵɵelementEnd()();
|
|
228
|
+
} if (rf & 2) {
|
|
229
|
+
i0.ɵɵadvance(2);
|
|
230
|
+
i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(3, 1, "igo.geo.importExportForm.exportFileNamePlaceholder"));
|
|
231
|
+
} }
|
|
232
|
+
function ImportExportComponent_form_12_div_23_ng_container_6_mat_option_1_Template(rf, ctx) { if (rf & 1) {
|
|
233
|
+
i0.ɵɵelementStart(0, "mat-option", 2);
|
|
234
|
+
i0.ɵɵtext(1);
|
|
235
|
+
i0.ɵɵpipe(2, "translate");
|
|
236
|
+
i0.ɵɵelementEnd();
|
|
237
|
+
} if (rf & 2) {
|
|
238
|
+
const encoding_r40 = ctx.$implicit;
|
|
239
|
+
i0.ɵɵproperty("value", encoding_r40.key);
|
|
240
|
+
i0.ɵɵadvance(1);
|
|
241
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.export.encoding." + encoding_r40.value), " ");
|
|
242
|
+
} }
|
|
243
|
+
function ImportExportComponent_form_12_div_23_ng_container_6_Template(rf, ctx) { if (rf & 1) {
|
|
244
|
+
i0.ɵɵelementContainerStart(0);
|
|
245
|
+
i0.ɵɵtemplate(1, ImportExportComponent_form_12_div_23_ng_container_6_mat_option_1_Template, 3, 4, "mat-option", 33);
|
|
246
|
+
i0.ɵɵpipe(2, "keyvalue");
|
|
247
|
+
i0.ɵɵpipe(3, "async");
|
|
248
|
+
i0.ɵɵelementContainerEnd();
|
|
249
|
+
} if (rf & 2) {
|
|
250
|
+
const ctx_r38 = i0.ɵɵnextContext(3);
|
|
251
|
+
i0.ɵɵadvance(1);
|
|
252
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 1, i0.ɵɵpipeBind1(3, 3, ctx_r38.encodings$)));
|
|
253
|
+
} }
|
|
254
|
+
function ImportExportComponent_form_12_div_23_Template(rf, ctx) { if (rf & 1) {
|
|
255
|
+
i0.ɵɵelementStart(0, "div", 6)(1, "mat-form-field")(2, "mat-label");
|
|
256
|
+
i0.ɵɵtext(3);
|
|
257
|
+
i0.ɵɵpipe(4, "translate");
|
|
258
|
+
i0.ɵɵelementEnd();
|
|
259
|
+
i0.ɵɵelementStart(5, "mat-select", 36);
|
|
260
|
+
i0.ɵɵtemplate(6, ImportExportComponent_form_12_div_23_ng_container_6_Template, 4, 5, "ng-container", 22);
|
|
261
|
+
i0.ɵɵpipe(7, "async");
|
|
262
|
+
i0.ɵɵelementEnd()()();
|
|
263
|
+
} if (rf & 2) {
|
|
264
|
+
const ctx_r22 = i0.ɵɵnextContext(2);
|
|
265
|
+
i0.ɵɵadvance(3);
|
|
266
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 2, "igo.geo.importExportForm.encodingPlaceholder"));
|
|
267
|
+
i0.ɵɵadvance(3);
|
|
268
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(7, 4, ctx_r22.encodings$).length !== 0);
|
|
269
|
+
} }
|
|
270
|
+
function ImportExportComponent_form_12_div_24_Template(rf, ctx) { if (rf & 1) {
|
|
271
|
+
i0.ɵɵelementStart(0, "div", 37)(1, "mat-slide-toggle", 38);
|
|
272
|
+
i0.ɵɵtext(2);
|
|
273
|
+
i0.ɵɵpipe(3, "translate");
|
|
274
|
+
i0.ɵɵelementEnd()();
|
|
275
|
+
} if (rf & 2) {
|
|
276
|
+
i0.ɵɵadvance(1);
|
|
277
|
+
i0.ɵɵproperty("labelPosition", "before");
|
|
278
|
+
i0.ɵɵadvance(1);
|
|
279
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportCombineResults"), " ");
|
|
280
|
+
} }
|
|
281
|
+
function ImportExportComponent_form_12_div_25_Template(rf, ctx) { if (rf & 1) {
|
|
282
|
+
i0.ɵɵelementStart(0, "div", 39)(1, "mat-slide-toggle", 40);
|
|
283
|
+
i0.ɵɵtext(2);
|
|
284
|
+
i0.ɵɵpipe(3, "translate");
|
|
285
|
+
i0.ɵɵelementEnd()();
|
|
286
|
+
} if (rf & 2) {
|
|
287
|
+
i0.ɵɵadvance(1);
|
|
288
|
+
i0.ɵɵproperty("labelPosition", "before");
|
|
289
|
+
i0.ɵɵadvance(1);
|
|
290
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportSeparator"), " ");
|
|
291
|
+
} }
|
|
292
|
+
function ImportExportComponent_form_12_div_26_Template(rf, ctx) { if (rf & 1) {
|
|
293
|
+
i0.ɵɵelementStart(0, "div", 41)(1, "mat-slide-toggle", 42);
|
|
294
|
+
i0.ɵɵtext(2);
|
|
295
|
+
i0.ɵɵpipe(3, "translate");
|
|
296
|
+
i0.ɵɵelementEnd()();
|
|
297
|
+
} if (rf & 2) {
|
|
298
|
+
i0.ɵɵadvance(1);
|
|
299
|
+
i0.ɵɵproperty("labelPosition", "before");
|
|
300
|
+
i0.ɵɵadvance(1);
|
|
301
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 2, "igo.geo.importExportForm.exportFeatureInExtent"), " ");
|
|
302
|
+
} }
|
|
303
|
+
function ImportExportComponent_form_12_Template(rf, ctx) { if (rf & 1) {
|
|
304
|
+
const _r42 = i0.ɵɵgetCurrentView();
|
|
305
|
+
i0.ɵɵelementStart(0, "form", 5)(1, "div", 6)(2, "mat-form-field")(3, "mat-label");
|
|
306
|
+
i0.ɵɵtext(4);
|
|
307
|
+
i0.ɵɵpipe(5, "translate");
|
|
308
|
+
i0.ɵɵelementEnd();
|
|
309
|
+
i0.ɵɵelementStart(6, "mat-select", 18);
|
|
310
|
+
i0.ɵɵlistener("valueChange", function ImportExportComponent_form_12_Template_mat_select_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r41 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r41.layers = $event); });
|
|
311
|
+
i0.ɵɵelementStart(7, "mat-select-trigger");
|
|
312
|
+
i0.ɵɵtext(8);
|
|
313
|
+
i0.ɵɵtemplate(9, ImportExportComponent_form_12_span_9_Template, 3, 4, "span", 19);
|
|
314
|
+
i0.ɵɵelementEnd();
|
|
315
|
+
i0.ɵɵtemplate(10, ImportExportComponent_form_12_mat_option_10_Template, 5, 6, "mat-option", 20);
|
|
316
|
+
i0.ɵɵpipe(11, "async");
|
|
317
|
+
i0.ɵɵelementEnd()()();
|
|
318
|
+
i0.ɵɵelementStart(12, "div", 6)(13, "mat-form-field")(14, "mat-label");
|
|
319
|
+
i0.ɵɵtext(15);
|
|
320
|
+
i0.ɵɵpipe(16, "translate");
|
|
321
|
+
i0.ɵɵelementEnd();
|
|
322
|
+
i0.ɵɵelementStart(17, "mat-select", 21);
|
|
323
|
+
i0.ɵɵtemplate(18, ImportExportComponent_form_12_ng_container_18_Template, 4, 5, "ng-container", 22);
|
|
324
|
+
i0.ɵɵpipe(19, "async");
|
|
325
|
+
i0.ɵɵtemplate(20, ImportExportComponent_form_12_mat_option_20_Template, 3, 3, "mat-option", 23);
|
|
326
|
+
i0.ɵɵpipe(21, "async");
|
|
327
|
+
i0.ɵɵelementEnd()()();
|
|
328
|
+
i0.ɵɵtemplate(22, ImportExportComponent_form_12_div_22_Template, 4, 3, "div", 24);
|
|
329
|
+
i0.ɵɵtemplate(23, ImportExportComponent_form_12_div_23_Template, 8, 6, "div", 24);
|
|
330
|
+
i0.ɵɵtemplate(24, ImportExportComponent_form_12_div_24_Template, 4, 4, "div", 25);
|
|
331
|
+
i0.ɵɵtemplate(25, ImportExportComponent_form_12_div_25_Template, 4, 4, "div", 26);
|
|
332
|
+
i0.ɵɵtemplate(26, ImportExportComponent_form_12_div_26_Template, 4, 4, "div", 27);
|
|
333
|
+
i0.ɵɵelementStart(27, "div", 28)(28, "button", 10);
|
|
334
|
+
i0.ɵɵlistener("click", function ImportExportComponent_form_12_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r42); const ctx_r43 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r43.handleExportFormSubmit(ctx_r43.form.value)); });
|
|
335
|
+
i0.ɵɵpipe(29, "async");
|
|
336
|
+
i0.ɵɵtext(30);
|
|
337
|
+
i0.ɵɵpipe(31, "translate");
|
|
338
|
+
i0.ɵɵpipe(32, "translate");
|
|
339
|
+
i0.ɵɵpipe(33, "translate");
|
|
340
|
+
i0.ɵɵelementEnd();
|
|
341
|
+
i0.ɵɵelement(34, "igo-spinner", 11);
|
|
342
|
+
i0.ɵɵpipe(35, "async");
|
|
343
|
+
i0.ɵɵelementEnd()();
|
|
344
|
+
} if (rf & 2) {
|
|
345
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
346
|
+
i0.ɵɵproperty("formGroup", ctx_r3.form);
|
|
347
|
+
i0.ɵɵadvance(4);
|
|
348
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 17, "igo.geo.importExportForm.exportLayerPlaceholder"));
|
|
349
|
+
i0.ɵɵadvance(2);
|
|
350
|
+
i0.ɵɵproperty("value", ctx_r3.layers);
|
|
351
|
+
i0.ɵɵadvance(2);
|
|
352
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r3.layers.length ? ctx_r3.getLayerTitleById(ctx_r3.layers[0]) : "", " ");
|
|
353
|
+
i0.ɵɵadvance(1);
|
|
354
|
+
i0.ɵɵproperty("ngIf", ctx_r3.layers.length > 1);
|
|
355
|
+
i0.ɵɵadvance(1);
|
|
356
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(11, 19, ctx_r3.exportableLayers$));
|
|
357
|
+
i0.ɵɵadvance(5);
|
|
358
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(16, 21, "igo.geo.importExportForm.exportFormatPlaceholder"));
|
|
359
|
+
i0.ɵɵadvance(3);
|
|
360
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(19, 23, ctx_r3.formats$).length !== 0);
|
|
361
|
+
i0.ɵɵadvance(2);
|
|
362
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(21, 25, ctx_r3.formats$).length === 0);
|
|
363
|
+
i0.ɵɵadvance(2);
|
|
364
|
+
i0.ɵɵproperty("ngIf", ctx_r3.forceNaming && ctx_r3.form.value.format !== "URL");
|
|
365
|
+
i0.ɵɵadvance(1);
|
|
366
|
+
i0.ɵɵproperty("ngIf", ctx_r3.form.value.format === "CSVcomma" || ctx_r3.form.value.format === "CSVsemicolon");
|
|
367
|
+
i0.ɵɵadvance(1);
|
|
368
|
+
i0.ɵɵproperty("ngIf", ctx_r3.layers.length > 1 && (ctx_r3.form.value.format === "CSVcomma" || ctx_r3.form.value.format === "CSVsemicolon"));
|
|
369
|
+
i0.ɵɵadvance(1);
|
|
370
|
+
i0.ɵɵproperty("ngIf", ctx_r3.layers.length > 1 && (ctx_r3.form.value.format === "CSVcomma" || ctx_r3.form.value.format === "CSVsemicolon") && ctx_r3.form.value.combineLayers);
|
|
371
|
+
i0.ɵɵadvance(1);
|
|
372
|
+
i0.ɵɵproperty("ngIf", ctx_r3.form.value.format !== "URL");
|
|
373
|
+
i0.ɵɵadvance(2);
|
|
374
|
+
i0.ɵɵproperty("disabled", !ctx_r3.form.valid || i0.ɵɵpipeBind1(29, 27, ctx_r3.loading$));
|
|
375
|
+
i0.ɵɵadvance(2);
|
|
376
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r3.form.value.format !== "URL" ? i0.ɵɵpipeBind1(31, 29, "igo.geo.importExportForm.exportButton") : ctx_r3.form.value.layers.length > 1 ? i0.ɵɵpipeBind1(32, 31, "igo.geo.importExportForm.exportButtonLinks") : i0.ɵɵpipeBind1(33, 33, "igo.geo.importExportForm.exportButtonLink"), " ");
|
|
377
|
+
i0.ɵɵadvance(4);
|
|
378
|
+
i0.ɵɵproperty("shown", i0.ɵɵpipeBind1(35, 35, ctx_r3.loading$));
|
|
379
|
+
} }
|
|
380
|
+
export class ImportExportComponent {
|
|
381
|
+
constructor(importService, exportService, languageService, messageService, styleListService, styleService, formBuilder, config, cdRef, storageService, downloadService) {
|
|
382
|
+
this.importService = importService;
|
|
383
|
+
this.exportService = exportService;
|
|
384
|
+
this.languageService = languageService;
|
|
385
|
+
this.messageService = messageService;
|
|
386
|
+
this.styleListService = styleListService;
|
|
387
|
+
this.styleService = styleService;
|
|
388
|
+
this.formBuilder = formBuilder;
|
|
389
|
+
this.config = config;
|
|
390
|
+
this.cdRef = cdRef;
|
|
391
|
+
this.storageService = storageService;
|
|
392
|
+
this.downloadService = downloadService;
|
|
393
|
+
this.formats$ = new BehaviorSubject(undefined);
|
|
394
|
+
this.encodings$ = new BehaviorSubject(undefined);
|
|
395
|
+
this.exportableLayers$ = new BehaviorSubject([]);
|
|
396
|
+
this.loading$ = new BehaviorSubject(false);
|
|
397
|
+
this.forceNaming = false;
|
|
398
|
+
this.controlFormat = 'format';
|
|
399
|
+
this.espgCodeRegex = new RegExp('^\\d{4,6}');
|
|
400
|
+
this.projections$ = new BehaviorSubject([]);
|
|
401
|
+
this.popupChecked = false;
|
|
402
|
+
this.previousLayerSpecs$ = new BehaviorSubject(undefined);
|
|
403
|
+
this.selectFirstProj = false;
|
|
404
|
+
this._projectionsLimitations = {};
|
|
405
|
+
this.selectedMode = 'import';
|
|
406
|
+
this.selectMode = new EventEmitter();
|
|
407
|
+
this.exportOptions$ = new BehaviorSubject(undefined);
|
|
408
|
+
this.exportOptionsChange = new EventEmitter();
|
|
409
|
+
this.loadConfig();
|
|
410
|
+
this.buildForm();
|
|
411
|
+
this.computeProjections();
|
|
412
|
+
}
|
|
413
|
+
set projectionsLimitations(value) {
|
|
414
|
+
this._projectionsLimitations = value;
|
|
415
|
+
this.computeProjections();
|
|
416
|
+
}
|
|
417
|
+
get projectionsLimitations() {
|
|
418
|
+
return this._projectionsLimitations || {};
|
|
419
|
+
}
|
|
420
|
+
get layers() {
|
|
421
|
+
return this.form.get('layers').value;
|
|
422
|
+
}
|
|
423
|
+
set layers(value) {
|
|
424
|
+
this.form.patchValue({ layers: value });
|
|
425
|
+
}
|
|
426
|
+
get inputProj() {
|
|
427
|
+
return this.importForm.get('inputProj').value;
|
|
428
|
+
}
|
|
429
|
+
set inputProj(value) {
|
|
430
|
+
this.importForm.patchValue({ inputProj: value });
|
|
431
|
+
}
|
|
432
|
+
get popupAllowed() {
|
|
433
|
+
return this.storageService.get('importExportPopupAllowed') || false;
|
|
434
|
+
}
|
|
435
|
+
set popupAllowed(value) {
|
|
436
|
+
this.storageService.set('importExportPopupAllowed', value);
|
|
437
|
+
}
|
|
438
|
+
ngOnInit() {
|
|
439
|
+
this.layers$$ = this.map.layers$.subscribe((layers) => {
|
|
440
|
+
this.exportableLayers$.next(layers.filter((layer) => {
|
|
441
|
+
return ((layer instanceof VectorLayer && layer.exportable === true) ||
|
|
442
|
+
(layer.dataSource.options.download &&
|
|
443
|
+
layer.dataSource.options.download.url));
|
|
444
|
+
}));
|
|
445
|
+
});
|
|
446
|
+
const configFileSizeMb = this.config.getConfig('importExport.clientSideFileSizeMaxMb');
|
|
447
|
+
this.clientSideFileSizeMax =
|
|
448
|
+
(configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);
|
|
449
|
+
this.fileSizeMb = this.clientSideFileSizeMax / Math.pow(1024, 2);
|
|
450
|
+
this.exportOptions$$ = this.exportOptions$
|
|
451
|
+
.pipe(skipWhile((exportOptions) => !exportOptions))
|
|
452
|
+
.subscribe((exportOptions) => {
|
|
453
|
+
this.form.patchValue(exportOptions, { emitEvent: true });
|
|
454
|
+
if (exportOptions.layers) {
|
|
455
|
+
this.computeFormats(exportOptions.layers.map((l) => this.map.getLayerById(l)));
|
|
456
|
+
}
|
|
457
|
+
});
|
|
458
|
+
this.formLayer$$ = this.form
|
|
459
|
+
.get('format')
|
|
460
|
+
.valueChanges
|
|
461
|
+
.subscribe((format) => {
|
|
462
|
+
const ogreFormats = Object.keys(ExportService.ogreFormats);
|
|
463
|
+
if (!this.popupChecked &&
|
|
464
|
+
this.form.get('layers').value?.length > 1 &&
|
|
465
|
+
(ogreFormats.indexOf(format) >= 0 || format === ExportFormat.URL)) {
|
|
466
|
+
if (!this.handlePopup(true)) {
|
|
467
|
+
this.form.patchValue({ format: undefined }, { emitEvent: false });
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
this.formLayer$$ = this.form
|
|
472
|
+
.get('layers')
|
|
473
|
+
.valueChanges.subscribe((layersId) => {
|
|
474
|
+
this.handlePreviousLayerSpecs();
|
|
475
|
+
const selectedLayers = layersId instanceof Array ? layersId : [layersId];
|
|
476
|
+
this.form.patchValue({ layers: selectedLayers }, { emitEvent: false });
|
|
477
|
+
const layers = selectedLayers.map((l) => this.map.getLayerById(l));
|
|
478
|
+
this.computeFormats(layers);
|
|
479
|
+
if (Object.keys(this.formats$.value).indexOf(this.form.value.format) ===
|
|
480
|
+
-1) {
|
|
481
|
+
this.form.patchValue({ format: undefined });
|
|
482
|
+
}
|
|
483
|
+
this.loading$.next(true);
|
|
484
|
+
const previousSpecs = [];
|
|
485
|
+
layers.forEach((layer) => {
|
|
486
|
+
if (layer instanceof VectorLayer &&
|
|
487
|
+
layer.dataSource.ol.getFeatures().length === 0) {
|
|
488
|
+
previousSpecs.push({
|
|
489
|
+
id: layer.id,
|
|
490
|
+
visible: layer.visible,
|
|
491
|
+
opacity: layer.opacity,
|
|
492
|
+
queryable: layer.queryable
|
|
493
|
+
});
|
|
494
|
+
layer.opacity = 0;
|
|
495
|
+
layer.visible = true;
|
|
496
|
+
}
|
|
497
|
+
});
|
|
498
|
+
this.previousLayerSpecs$.next(previousSpecs);
|
|
499
|
+
setTimeout(() => {
|
|
500
|
+
this.loading$.next(false);
|
|
501
|
+
}, 500);
|
|
502
|
+
});
|
|
503
|
+
this.formats$$ = this.formats$
|
|
504
|
+
.pipe(skipWhile((formats) => !formats))
|
|
505
|
+
.subscribe((formats) => {
|
|
506
|
+
if (Object.keys(formats).length === 1) {
|
|
507
|
+
this.form.patchValue({ format: formats[Object.keys(formats)[0]] });
|
|
508
|
+
}
|
|
509
|
+
});
|
|
510
|
+
this.encodings$$ = this.encodings$
|
|
511
|
+
.pipe(skipWhile((encodings) => !encodings))
|
|
512
|
+
.subscribe((encodings) => {
|
|
513
|
+
if (Object.keys(encodings).length === 1) {
|
|
514
|
+
this.form.patchValue({ encoding: encodings[Object.keys(encodings)[0]] });
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
this.exportableLayers$$ = this.exportableLayers$
|
|
518
|
+
.pipe(skipWhile((layers) => !layers))
|
|
519
|
+
.subscribe((layers) => {
|
|
520
|
+
if (layers.length === 1) {
|
|
521
|
+
this.form.patchValue({ layers: layers[0].id });
|
|
522
|
+
}
|
|
523
|
+
});
|
|
524
|
+
this.form.controls[this.controlFormat].valueChanges.subscribe((format) => {
|
|
525
|
+
if (format === ExportFormat.CSVcomma || format === ExportFormat.CSVsemicolon) {
|
|
526
|
+
this.form.patchValue({ encoding: EncodingFormat.LATIN1 });
|
|
527
|
+
}
|
|
528
|
+
else {
|
|
529
|
+
this.form.patchValue({ encoding: EncodingFormat.UTF8 });
|
|
530
|
+
}
|
|
531
|
+
this.cdRef.detectChanges();
|
|
532
|
+
});
|
|
533
|
+
if (this.selectFirstProj) {
|
|
534
|
+
if (this.projections$.value.length === 0) {
|
|
535
|
+
this.importForm.patchValue({ inputProj: { translateKey: 'nad83', alias: 'NAD83', code: 'EPSG:4326', zone: '' } });
|
|
536
|
+
}
|
|
537
|
+
else {
|
|
538
|
+
this.importForm.patchValue({ inputProj: this.projections$.value[0] });
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
else {
|
|
542
|
+
this.importForm.patchValue({ inputProj: undefined });
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
computeProjections() {
|
|
546
|
+
this.projectionsConstraints = computeProjectionsConstraints(this.projectionsLimitations);
|
|
547
|
+
const projections = [];
|
|
548
|
+
if (this.projectionsConstraints.nad83) {
|
|
549
|
+
projections.push({ translateKey: 'nad83', alias: 'NAD83', code: 'EPSG:4269', zone: '' });
|
|
550
|
+
}
|
|
551
|
+
if (this.projectionsConstraints.wgs84) {
|
|
552
|
+
projections.push({ translateKey: 'wgs84', alias: 'WGS84', code: 'EPSG:4326', zone: '' });
|
|
553
|
+
}
|
|
554
|
+
if (this.projectionsConstraints.webMercator) {
|
|
555
|
+
projections.push({ translateKey: 'webMercator', alias: 'Web Mercator', code: 'EPSG:3857', zone: '' });
|
|
556
|
+
}
|
|
557
|
+
if (this.projectionsConstraints.mtm) {
|
|
558
|
+
// all mtm zones
|
|
559
|
+
const minZone = this.projectionsConstraints.mtmZone.minZone;
|
|
560
|
+
const maxZone = this.projectionsConstraints.mtmZone.maxZone;
|
|
561
|
+
for (let mtmZone = minZone; mtmZone <= maxZone; mtmZone++) {
|
|
562
|
+
const code = mtmZone < 10 ? `EPSG:3218${mtmZone}` : `EPSG:321${80 + mtmZone}`;
|
|
563
|
+
projections.push({ translateKey: 'mtm', alias: `MTM ${mtmZone}`, code, zone: `${mtmZone}` });
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
if (this.projectionsConstraints.utm) {
|
|
567
|
+
// all utm zones
|
|
568
|
+
const minZone = this.projectionsConstraints.utmZone.minZone;
|
|
569
|
+
const maxZone = this.projectionsConstraints.utmZone.maxZone;
|
|
570
|
+
for (let utmZone = minZone; utmZone <= maxZone; utmZone++) {
|
|
571
|
+
const code = utmZone < 10 ? `EPSG:3260${utmZone}` : `EPSG:326${utmZone}`;
|
|
572
|
+
projections.push({ translateKey: 'utm', alias: `UTM ${utmZone}`, code, zone: `${utmZone}` });
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
let configProjection = [];
|
|
576
|
+
if (this.projectionsConstraints.projFromConfig) {
|
|
577
|
+
configProjection = this.config.getConfig('projections') || [];
|
|
578
|
+
}
|
|
579
|
+
this.projections$.next(configProjection.concat(projections));
|
|
580
|
+
}
|
|
581
|
+
getWorkspaceByLayerId(id) {
|
|
582
|
+
const wksFromLayerId = this.store
|
|
583
|
+
.all()
|
|
584
|
+
.find(workspace => workspace.layer.id === id);
|
|
585
|
+
if (wksFromLayerId) {
|
|
586
|
+
return wksFromLayerId;
|
|
587
|
+
}
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
getLayerTitleById(id) {
|
|
591
|
+
return this.map.getLayerById(id)?.title;
|
|
592
|
+
}
|
|
593
|
+
layerHasSelectedFeatures(layer) {
|
|
594
|
+
const wksFromLayer = this.getWorkspaceByLayerId(layer.id);
|
|
595
|
+
if (wksFromLayer) {
|
|
596
|
+
const recs = wksFromLayer.entityStore.stateView
|
|
597
|
+
.firstBy((record) => {
|
|
598
|
+
return record.state.selected === true;
|
|
599
|
+
});
|
|
600
|
+
return recs ? true : false;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
onlySelected(event, id) {
|
|
604
|
+
let layersWithSelection = this.form.value.layersWithSelection;
|
|
605
|
+
if (event.checked) {
|
|
606
|
+
layersWithSelection.push(id);
|
|
607
|
+
}
|
|
608
|
+
else {
|
|
609
|
+
layersWithSelection = layersWithSelection.filter(layerId => layerId !== id);
|
|
610
|
+
}
|
|
611
|
+
this.form.patchValue({ layersWithSelection });
|
|
612
|
+
}
|
|
613
|
+
onlySelectedClick(event, id) {
|
|
614
|
+
if (this.form.value.layers.find(layerId => layerId === id)) {
|
|
615
|
+
event.stopPropagation();
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
inLayersIdToExportSelectionOnly(layer) {
|
|
619
|
+
return this.form.value.layersWithSelection.find(layerId => layerId === layer.id) ? true : false;
|
|
620
|
+
}
|
|
621
|
+
ngOnDestroy() {
|
|
622
|
+
this.layers$$.unsubscribe();
|
|
623
|
+
this.exportableLayers$$.unsubscribe();
|
|
624
|
+
this.formats$$.unsubscribe();
|
|
625
|
+
this.encodings$$.unsubscribe();
|
|
626
|
+
this.formLayer$$.unsubscribe();
|
|
627
|
+
if (this.exportOptions$$) {
|
|
628
|
+
this.exportOptions$$.unsubscribe();
|
|
629
|
+
}
|
|
630
|
+
this.exportOptionsChange.emit(this.form.value);
|
|
631
|
+
this.handlePreviousLayerSpecs();
|
|
632
|
+
}
|
|
633
|
+
handlePreviousLayerSpecs() {
|
|
634
|
+
const previousSpecs = this.previousLayerSpecs$.value;
|
|
635
|
+
if (previousSpecs && previousSpecs.length) {
|
|
636
|
+
previousSpecs.forEach((specs) => {
|
|
637
|
+
const previousLayer = this.map.getLayerById(specs.id);
|
|
638
|
+
previousLayer.visible = specs.visible;
|
|
639
|
+
previousLayer.opacity = specs.opacity;
|
|
640
|
+
previousLayer.queryable = specs.queryable;
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
this.previousLayerSpecs$.next(undefined);
|
|
644
|
+
}
|
|
645
|
+
importFiles(files) {
|
|
646
|
+
let inputProj = this.inputProj.code;
|
|
647
|
+
if (this.espgCodeRegex.test(inputProj)) {
|
|
648
|
+
inputProj = `EPSG:${inputProj}`;
|
|
649
|
+
}
|
|
650
|
+
this.loading$.next(true);
|
|
651
|
+
for (const file of files) {
|
|
652
|
+
this.importService.import(file, inputProj).subscribe((features) => this.onFileImportSuccess(file, features), (error) => this.onFileImportError(file, error), () => {
|
|
653
|
+
this.loading$.next(false);
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
handlePopup(preCheck = true) {
|
|
658
|
+
const p1 = window.open('', 'popup', 'width=1, height=1');
|
|
659
|
+
p1.close();
|
|
660
|
+
const p2 = window.open('', 'popup', 'width=1, height=1');
|
|
661
|
+
if (!p2 || p2.closed || typeof p2.closed === 'undefined' || p2 === null) {
|
|
662
|
+
this.onPopupBlockedError(preCheck);
|
|
663
|
+
this.popupAllowed = false;
|
|
664
|
+
}
|
|
665
|
+
else {
|
|
666
|
+
p2.close();
|
|
667
|
+
this.popupAllowed = true;
|
|
668
|
+
this.popupChecked = true;
|
|
669
|
+
}
|
|
670
|
+
return this.popupAllowed;
|
|
671
|
+
}
|
|
672
|
+
handleExportFormSubmit(data) {
|
|
673
|
+
this.loading$.next(true);
|
|
674
|
+
const ogreFormats = Object.keys(ExportService.ogreFormats);
|
|
675
|
+
if (!this.popupChecked && data.layers.length > 1 &&
|
|
676
|
+
(ogreFormats.indexOf(data.format) >= 0 || data.format === ExportFormat.URL) && !this.popupAllowed) {
|
|
677
|
+
this.handlePopup();
|
|
678
|
+
}
|
|
679
|
+
let geomTypesCSV = [];
|
|
680
|
+
let featuresCSV = [];
|
|
681
|
+
let filename = "";
|
|
682
|
+
for (const [layerIndex, layer] of data.layers.entries()) {
|
|
683
|
+
const lay = this.map.getLayerById(layer);
|
|
684
|
+
if (!(data.format === ExportFormat.CSVsemicolon || data.format === ExportFormat.CSVcomma)
|
|
685
|
+
|| !data.combineLayers || data.layers.length === 1) {
|
|
686
|
+
filename = lay.title;
|
|
687
|
+
if (data.name) {
|
|
688
|
+
filename = data.name;
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
else {
|
|
692
|
+
filename = this.languageService.translate.instant('igo.geo.export.combinedLayers');
|
|
693
|
+
}
|
|
694
|
+
const dSOptions = lay.dataSource.options;
|
|
695
|
+
if (data.format === ExportFormat.URL && dSOptions.download && (dSOptions.download.url || dSOptions.download.dynamicUrl)) {
|
|
696
|
+
setTimeout(() => {
|
|
697
|
+
// better look an feel
|
|
698
|
+
const url = dSOptions.download.url || dSOptions.download.dynamicUrl;
|
|
699
|
+
url.match(/service=wfs/gi) ? this.downloadService.open(lay) : window.open(url, '_blank');
|
|
700
|
+
this.loading$.next(false);
|
|
701
|
+
}, 500);
|
|
702
|
+
return;
|
|
703
|
+
}
|
|
704
|
+
const wks = this.getWorkspaceByLayerId(layer);
|
|
705
|
+
let olFeatures;
|
|
706
|
+
if (wks && wks.entityStore && wks.entityStore.stateView.all().length) {
|
|
707
|
+
if (data.layersWithSelection.indexOf(layer) !== -1 && data.featureInMapExtent) {
|
|
708
|
+
// Only export selected feature && into map extent
|
|
709
|
+
olFeatures = wks.entityStore.stateView.all()
|
|
710
|
+
.filter((e) => e.state.inMapExtent && e.state.selected).map(e => e.entity.ol);
|
|
711
|
+
}
|
|
712
|
+
else if (data.layersWithSelection.indexOf(layer) !== -1 && !data.featureInMapExtent) {
|
|
713
|
+
// Only export selected feature && (into map extent OR not)
|
|
714
|
+
olFeatures = wks.entityStore.stateView.all()
|
|
715
|
+
.filter((e) => e.state.selected).map(e => e.entity.ol);
|
|
716
|
+
}
|
|
717
|
+
else if (data.featureInMapExtent) {
|
|
718
|
+
// Only into map extent
|
|
719
|
+
olFeatures = wks.entityStore.stateView.all()
|
|
720
|
+
.filter((e) => e.state.inMapExtent).map(e => e.entity.ol);
|
|
721
|
+
}
|
|
722
|
+
else {
|
|
723
|
+
// All features
|
|
724
|
+
olFeatures = wks.entityStore.stateView.all().map(e => e.entity.ol);
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
else {
|
|
728
|
+
const ol = lay.dataSource.ol;
|
|
729
|
+
if (data.featureInMapExtent) {
|
|
730
|
+
olFeatures = ol.getFeaturesInExtent(lay.map.viewController.getExtent());
|
|
731
|
+
}
|
|
732
|
+
else {
|
|
733
|
+
olFeatures = ol.getFeatures();
|
|
734
|
+
}
|
|
735
|
+
if (lay.dataSource instanceof ClusterDataSource) {
|
|
736
|
+
olFeatures = olFeatures.flatMap((cluster) => cluster.get('features'));
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
const translate = this.languageService.translate;
|
|
740
|
+
let geomTypes = [];
|
|
741
|
+
if (data.format === ExportFormat.Shapefile || data.format === ExportFormat.GPX) {
|
|
742
|
+
olFeatures.forEach((olFeature) => {
|
|
743
|
+
const featureGeomType = olFeature.getGeometry().getType();
|
|
744
|
+
const currentGeomType = geomTypes.find(geomType => geomType.geometryType === featureGeomType);
|
|
745
|
+
if (currentGeomType) {
|
|
746
|
+
currentGeomType.features.push(olFeature);
|
|
747
|
+
}
|
|
748
|
+
else {
|
|
749
|
+
geomTypes.push({ geometryType: featureGeomType, features: [olFeature] });
|
|
750
|
+
}
|
|
751
|
+
});
|
|
752
|
+
}
|
|
753
|
+
else {
|
|
754
|
+
geomTypes = [{ geometryType: '', features: olFeatures }];
|
|
755
|
+
}
|
|
756
|
+
geomTypes.forEach(geomType => {
|
|
757
|
+
geomType.features.forEach(feature => {
|
|
758
|
+
const radius = feature.get('rad');
|
|
759
|
+
if (radius) {
|
|
760
|
+
const center4326 = [feature.get('longitude'), feature.get('latitude')];
|
|
761
|
+
const circle = circular(center4326, radius, 500);
|
|
762
|
+
circle.transform('EPSG:4326', feature.get('_projection'));
|
|
763
|
+
feature.setGeometry(circle);
|
|
764
|
+
}
|
|
765
|
+
});
|
|
766
|
+
});
|
|
767
|
+
if (data.format === ExportFormat.GPX) {
|
|
768
|
+
const gpxFeatureCnt = geomTypes.length;
|
|
769
|
+
geomTypes = geomTypes.filter(geomType => ['LineString', 'Point'].includes(geomType.geometryType));
|
|
770
|
+
const gpxFeatureCntPointOrPoly = geomTypes.length;
|
|
771
|
+
if (gpxFeatureCnt > gpxFeatureCntPointOrPoly) {
|
|
772
|
+
const title = translate.instant('igo.geo.export.gpx.error.poly.title');
|
|
773
|
+
const message = translate.instant('igo.geo.export.gpx.error.poly.text');
|
|
774
|
+
this.messageService.error(message, title, { timeOut: 20000 });
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
else if ((data.format === ExportFormat.CSVsemicolon || data.format === ExportFormat.CSVcomma) && data.combineLayers) {
|
|
778
|
+
geomTypes.forEach(geomType => geomTypesCSV.push(geomType));
|
|
779
|
+
if (layerIndex !== data.layers.length - 1) {
|
|
780
|
+
continue;
|
|
781
|
+
}
|
|
782
|
+
else {
|
|
783
|
+
let previousFeature = undefined;
|
|
784
|
+
geomTypesCSV.forEach(geomType => {
|
|
785
|
+
geomType.features.forEach(currentFeature => {
|
|
786
|
+
if (data.separator) {
|
|
787
|
+
if (previousFeature) {
|
|
788
|
+
if (currentFeature.get('_featureStore').layer.options.title !==
|
|
789
|
+
previousFeature.get('_featureStore').layer.options.title) {
|
|
790
|
+
const titleEmptyRows = this.createTitleEmptyRows(previousFeature, currentFeature);
|
|
791
|
+
featuresCSV.push(titleEmptyRows[2]);
|
|
792
|
+
featuresCSV.push(titleEmptyRows[0]);
|
|
793
|
+
featuresCSV.push(titleEmptyRows[1]);
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
else {
|
|
797
|
+
const titleEmptyRows = this.createTitleEmptyRows(currentFeature, currentFeature);
|
|
798
|
+
featuresCSV.push(titleEmptyRows[0]);
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
featuresCSV.push(currentFeature);
|
|
802
|
+
previousFeature = currentFeature;
|
|
803
|
+
});
|
|
804
|
+
});
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
if (geomTypes.length === 0) {
|
|
808
|
+
this.loading$.next(false);
|
|
809
|
+
const title = translate.instant('igo.geo.export.nothing.title');
|
|
810
|
+
const message = translate.instant('igo.geo.export.nothing.text');
|
|
811
|
+
this.messageService.error(message, title, { timeOut: 20000 });
|
|
812
|
+
}
|
|
813
|
+
else {
|
|
814
|
+
if (!(data.format === ExportFormat.CSVsemicolon || data.format === ExportFormat.CSVcomma) || !data.combineLayers) {
|
|
815
|
+
geomTypes.map(geomType => this.exportService.export(geomType.features, data.format, filename + geomType.geometryType, data.encoding, this.map.projection)
|
|
816
|
+
.subscribe(() => { }, (error) => this.onFileExportError(error), () => {
|
|
817
|
+
this.onFileExportSuccess();
|
|
818
|
+
geomType.features.forEach(feature => {
|
|
819
|
+
this.circleToPoint(feature);
|
|
820
|
+
});
|
|
821
|
+
this.loading$.next(false);
|
|
822
|
+
}));
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
;
|
|
827
|
+
if ((data.format === ExportFormat.CSVsemicolon || data.format === ExportFormat.CSVcomma) && data.combineLayers) {
|
|
828
|
+
this.exportService.export(featuresCSV, data.format, filename, data.encoding, this.map.projection)
|
|
829
|
+
.subscribe(() => { }, (error) => this.onFileExportError(error), () => {
|
|
830
|
+
this.onFileExportSuccess();
|
|
831
|
+
featuresCSV.forEach(feature => {
|
|
832
|
+
this.circleToPoint(feature);
|
|
833
|
+
});
|
|
834
|
+
this.loading$.next(false);
|
|
835
|
+
});
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
createTitleEmptyRows(previousFeature, currentFeature) {
|
|
839
|
+
const titleRow = currentFeature.clone();
|
|
840
|
+
const headerRow = currentFeature.clone();
|
|
841
|
+
const emptyRow = currentFeature.clone();
|
|
842
|
+
const previousFeatureKeys = previousFeature.getKeys();
|
|
843
|
+
let firstKeyPrevious = '';
|
|
844
|
+
for (const key in previousFeatureKeys) {
|
|
845
|
+
if (previousFeatureKeys[key] !== 'geometry') {
|
|
846
|
+
firstKeyPrevious = previousFeatureKeys[key];
|
|
847
|
+
break;
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
const currentFeatureKeys = currentFeature.getKeys();
|
|
851
|
+
let firstKeyCurrent = '';
|
|
852
|
+
for (const key in currentFeatureKeys) {
|
|
853
|
+
if (currentFeatureKeys[key] !== 'geometry') {
|
|
854
|
+
firstKeyCurrent = currentFeatureKeys[key];
|
|
855
|
+
break;
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
const allKeys = currentFeature.getKeys();
|
|
859
|
+
previousFeatureKeys.forEach(previousKey => {
|
|
860
|
+
if (allKeys.includes(previousKey) && previousKey !== firstKeyPrevious) {
|
|
861
|
+
allKeys.push(previousKey);
|
|
862
|
+
}
|
|
863
|
+
});
|
|
864
|
+
allKeys.unshift(firstKeyPrevious);
|
|
865
|
+
let firstKeyAll = '';
|
|
866
|
+
for (const key in allKeys) {
|
|
867
|
+
if (allKeys[key] !== 'geometry') {
|
|
868
|
+
firstKeyAll = allKeys[key];
|
|
869
|
+
break;
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
allKeys.forEach(key => {
|
|
873
|
+
const sameKeys = previousFeatureKeys.length === currentFeatureKeys.length &&
|
|
874
|
+
previousFeatureKeys.every((value, index) => value === currentFeatureKeys[index]);
|
|
875
|
+
if (key === firstKeyAll && !sameKeys) {
|
|
876
|
+
titleRow.set(key, currentFeature.get('_featureStore').layer.options.title + " ===============>", true);
|
|
877
|
+
headerRow.set(key, key, true);
|
|
878
|
+
emptyRow.unset(key, true);
|
|
879
|
+
}
|
|
880
|
+
else if (key === firstKeyAll && sameKeys) {
|
|
881
|
+
titleRow.set(key, currentFeature.get('_featureStore').layer.options.title, true);
|
|
882
|
+
headerRow.set(key, key, true);
|
|
883
|
+
emptyRow.unset(key, true);
|
|
884
|
+
}
|
|
885
|
+
else if (key === firstKeyCurrent) {
|
|
886
|
+
titleRow.set(key, currentFeature.get('_featureStore').layer.options.title, true);
|
|
887
|
+
headerRow.set(key, key, true);
|
|
888
|
+
emptyRow.unset(key, true);
|
|
889
|
+
}
|
|
890
|
+
else if (key !== 'geometry') {
|
|
891
|
+
titleRow.unset(key, true);
|
|
892
|
+
headerRow.set(key, key, true);
|
|
893
|
+
emptyRow.unset(key, true);
|
|
894
|
+
}
|
|
895
|
+
else {
|
|
896
|
+
titleRow.unset(key, true);
|
|
897
|
+
emptyRow.unset(key, true);
|
|
898
|
+
}
|
|
899
|
+
if (!(currentFeatureKeys.includes(key))) {
|
|
900
|
+
headerRow.unset(key, true);
|
|
901
|
+
}
|
|
902
|
+
});
|
|
903
|
+
const titleEmptyRows = [titleRow, headerRow, emptyRow];
|
|
904
|
+
return titleEmptyRows;
|
|
905
|
+
}
|
|
906
|
+
circleToPoint(feature) {
|
|
907
|
+
const radius = feature.get('rad');
|
|
908
|
+
if (radius) {
|
|
909
|
+
const point = new olPoint([feature.get('longitude'), feature.get('latitude')]);
|
|
910
|
+
point.transform('EPSG:4326', feature.get('_projection'));
|
|
911
|
+
feature.setGeometry(point);
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
buildForm() {
|
|
915
|
+
this.importForm = this.formBuilder.group({
|
|
916
|
+
inputProj: ['', [Validators.required]]
|
|
917
|
+
});
|
|
918
|
+
if (this.forceNaming) {
|
|
919
|
+
this.form = this.formBuilder.group({
|
|
920
|
+
format: ['', [Validators.required]],
|
|
921
|
+
layers: [[], [Validators.required]],
|
|
922
|
+
layersWithSelection: [[]],
|
|
923
|
+
encoding: [EncodingFormat.UTF8, [Validators.required]],
|
|
924
|
+
combineLayers: [true, [Validators.required]],
|
|
925
|
+
separator: [false, [Validators.required]],
|
|
926
|
+
featureInMapExtent: [false, [Validators.required]],
|
|
927
|
+
name: ['', [Validators.required]]
|
|
928
|
+
});
|
|
929
|
+
}
|
|
930
|
+
else {
|
|
931
|
+
this.form = this.formBuilder.group({
|
|
932
|
+
format: ['', [Validators.required]],
|
|
933
|
+
layers: [[], [Validators.required]],
|
|
934
|
+
layersWithSelection: [[]],
|
|
935
|
+
encoding: [EncodingFormat.UTF8, [Validators.required]],
|
|
936
|
+
combineLayers: [true, [Validators.required]],
|
|
937
|
+
separator: [false, [Validators.required]],
|
|
938
|
+
featureInMapExtent: [false, [Validators.required]],
|
|
939
|
+
});
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
onFileImportSuccess(file, features) {
|
|
943
|
+
if (!this.config.getConfig('importWithStyle')) {
|
|
944
|
+
handleFileImportSuccess(file, features, this.map, this.messageService, this.languageService);
|
|
945
|
+
}
|
|
946
|
+
else {
|
|
947
|
+
handleFileImportSuccess(file, features, this.map, this.messageService, this.languageService, this.styleListService, this.styleService);
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
onFileImportError(file, error) {
|
|
951
|
+
this.loading$.next(false);
|
|
952
|
+
handleFileImportError(file, error, this.messageService, this.languageService, this.fileSizeMb);
|
|
953
|
+
}
|
|
954
|
+
onPopupBlockedError(preCheck = true) {
|
|
955
|
+
this.loading$.next(false);
|
|
956
|
+
const translate = this.languageService.translate;
|
|
957
|
+
const title = translate.instant('igo.geo.export.popupBlocked.title');
|
|
958
|
+
const extraMessage = preCheck ?
|
|
959
|
+
translate.instant('igo.geo.export.popupBlocked.selectAgain') :
|
|
960
|
+
translate.instant('igo.geo.export.popupBlocked.retry');
|
|
961
|
+
const message = translate.instant('igo.geo.export.popupBlocked.text', { extraMessage });
|
|
962
|
+
this.messageService.error(message, title, { timeOut: 20000 });
|
|
963
|
+
}
|
|
964
|
+
onFileExportError(error) {
|
|
965
|
+
this.loading$.next(false);
|
|
966
|
+
handleFileExportError(error, this.messageService, this.languageService);
|
|
967
|
+
}
|
|
968
|
+
loadConfig() {
|
|
969
|
+
if (this.config.getConfig('importExport.forceNaming') !== undefined) {
|
|
970
|
+
this.forceNaming = this.config.getConfig('importExport.forceNaming');
|
|
971
|
+
}
|
|
972
|
+
this.computeFormats();
|
|
973
|
+
this.loadEncodings();
|
|
974
|
+
}
|
|
975
|
+
encodingDefaultValue(format) {
|
|
976
|
+
if (format === ExportFormat.CSVcomma || format === ExportFormat.CSVsemicolon) {
|
|
977
|
+
this.form.patchValue({ encoding: EncodingFormat.LATIN1 });
|
|
978
|
+
return EncodingFormat.LATIN1;
|
|
979
|
+
}
|
|
980
|
+
else {
|
|
981
|
+
this.form.patchValue({ encoding: EncodingFormat.UTF8 });
|
|
982
|
+
return EncodingFormat.UTF8;
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
loadEncodings() {
|
|
986
|
+
this.encodings$.next(EncodingFormat);
|
|
987
|
+
}
|
|
988
|
+
computeFormats(layers) {
|
|
989
|
+
let appliedformats = Object.keys(ExportFormat);
|
|
990
|
+
const formatsType = {
|
|
991
|
+
onlyUrl: false,
|
|
992
|
+
onlyVector: false,
|
|
993
|
+
vectorAndUrl: false,
|
|
994
|
+
customList: false
|
|
995
|
+
};
|
|
996
|
+
const customList = [];
|
|
997
|
+
if (layers && layers.length) {
|
|
998
|
+
layers.forEach((layer) => {
|
|
999
|
+
if (!layer) {
|
|
1000
|
+
return;
|
|
1001
|
+
}
|
|
1002
|
+
if (layer.dataSource.options.download?.allowedFormats) {
|
|
1003
|
+
formatsType.customList = true;
|
|
1004
|
+
customList.push({ layer: layer.title, formats: this.validateListFormat(layer.dataSource.options.download.allowedFormats) });
|
|
1005
|
+
}
|
|
1006
|
+
else if (!(layer instanceof VectorLayer) &&
|
|
1007
|
+
layer.dataSource.options.download &&
|
|
1008
|
+
layer.dataSource.options.download.url) {
|
|
1009
|
+
formatsType.onlyUrl = true;
|
|
1010
|
+
}
|
|
1011
|
+
else if (layer.dataSource.options.download &&
|
|
1012
|
+
(layer.dataSource.options.download.url || layer.dataSource.options.download.dynamicUrl)) {
|
|
1013
|
+
formatsType.vectorAndUrl = true;
|
|
1014
|
+
}
|
|
1015
|
+
else if (layer instanceof VectorLayer) {
|
|
1016
|
+
formatsType.onlyVector = true;
|
|
1017
|
+
}
|
|
1018
|
+
});
|
|
1019
|
+
if (formatsType.onlyUrl === true && formatsType.onlyVector === false) {
|
|
1020
|
+
appliedformats = ['URL'];
|
|
1021
|
+
}
|
|
1022
|
+
else if (formatsType.onlyVector === true &&
|
|
1023
|
+
formatsType.onlyUrl === false) {
|
|
1024
|
+
this.computeFormats(); // reset
|
|
1025
|
+
if (ExportFormat.URL in this.formats$.value) {
|
|
1026
|
+
const keys = Object.keys(this.formats$.value).filter((key) => key !== 'URL');
|
|
1027
|
+
appliedformats = keys;
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1030
|
+
else if (formatsType.vectorAndUrl === true &&
|
|
1031
|
+
formatsType.onlyUrl === false &&
|
|
1032
|
+
formatsType.onlyVector === false) {
|
|
1033
|
+
this.computeFormats(); // reset
|
|
1034
|
+
if (!(ExportFormat.URL in this.formats$.value)) {
|
|
1035
|
+
const keys = Object.keys(this.formats$.value);
|
|
1036
|
+
keys.push('URL');
|
|
1037
|
+
appliedformats = keys;
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
if (this.config.getConfig('importExport.formats') !== undefined) {
|
|
1042
|
+
const validatedListFormat = this.validateListFormat(this.config.getConfig('importExport.formats'));
|
|
1043
|
+
appliedformats = validatedListFormat;
|
|
1044
|
+
}
|
|
1045
|
+
if (formatsType.customList) {
|
|
1046
|
+
let commonFormats;
|
|
1047
|
+
const layersWithCustomFormats = [];
|
|
1048
|
+
let previousCustomListFormats = customList[0].formats;
|
|
1049
|
+
customList.map(list => {
|
|
1050
|
+
layersWithCustomFormats.push(list.layer);
|
|
1051
|
+
commonFormats = list.formats.filter(value => previousCustomListFormats.includes(value));
|
|
1052
|
+
previousCustomListFormats = list.formats;
|
|
1053
|
+
});
|
|
1054
|
+
const finalFormats = commonFormats.filter(value => appliedformats.includes(value));
|
|
1055
|
+
if (finalFormats.length > 0) {
|
|
1056
|
+
this.formats$.next(strEnum(finalFormats));
|
|
1057
|
+
if (layers && layers.length) {
|
|
1058
|
+
if (layers.length > 1) {
|
|
1059
|
+
this.messageService.alert(this.languageService.translate.instant('igo.geo.export.customList.text', { value: layersWithCustomFormats.join() }), this.languageService.translate.instant('igo.geo.export.customList.title'));
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
else {
|
|
1064
|
+
this.formats$.next([]);
|
|
1065
|
+
this.messageService.alert(this.languageService.translate.instant('igo.geo.export.noFormat.text'), this.languageService.translate.instant('igo.geo.export.noFormat.title'));
|
|
1066
|
+
}
|
|
1067
|
+
return;
|
|
1068
|
+
}
|
|
1069
|
+
else {
|
|
1070
|
+
this.formats$.next(strEnum(appliedformats));
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
validateListFormat(formats) {
|
|
1074
|
+
return formats
|
|
1075
|
+
.filter((format) => {
|
|
1076
|
+
if (format.toUpperCase() === ExportFormat.CSVcomma.toUpperCase() ||
|
|
1077
|
+
format.toUpperCase() === ExportFormat.CSVsemicolon.toUpperCase() ||
|
|
1078
|
+
format.toUpperCase() === ExportFormat.GML.toUpperCase() ||
|
|
1079
|
+
format.toUpperCase() === ExportFormat.GPX.toUpperCase() ||
|
|
1080
|
+
format.toUpperCase() === ExportFormat.GeoJSON.toUpperCase() ||
|
|
1081
|
+
format.toUpperCase() === ExportFormat.KML.toUpperCase() ||
|
|
1082
|
+
format.toUpperCase() === ExportFormat.Shapefile.toUpperCase() ||
|
|
1083
|
+
format.toUpperCase() === ExportFormat.URL.toUpperCase()) {
|
|
1084
|
+
return format;
|
|
1085
|
+
}
|
|
1086
|
+
})
|
|
1087
|
+
.map((format) => {
|
|
1088
|
+
if (format.toUpperCase() === ExportFormat.CSVcomma.toUpperCase()) {
|
|
1089
|
+
format = ExportFormat.CSVcomma;
|
|
1090
|
+
return format;
|
|
1091
|
+
}
|
|
1092
|
+
if (format.toUpperCase() === ExportFormat.CSVsemicolon.toUpperCase()) {
|
|
1093
|
+
format = ExportFormat.CSVsemicolon;
|
|
1094
|
+
return format;
|
|
1095
|
+
}
|
|
1096
|
+
if (format.toUpperCase() === ExportFormat.GML.toUpperCase()) {
|
|
1097
|
+
format = ExportFormat.GML;
|
|
1098
|
+
return format;
|
|
1099
|
+
}
|
|
1100
|
+
if (format.toUpperCase() === ExportFormat.GPX.toUpperCase()) {
|
|
1101
|
+
format = ExportFormat.GPX;
|
|
1102
|
+
return format;
|
|
1103
|
+
}
|
|
1104
|
+
if (format.toUpperCase() === ExportFormat.GeoJSON.toUpperCase()) {
|
|
1105
|
+
format = ExportFormat.GeoJSON;
|
|
1106
|
+
return format;
|
|
1107
|
+
}
|
|
1108
|
+
if (format.toUpperCase() === ExportFormat.KML.toUpperCase()) {
|
|
1109
|
+
format = ExportFormat.KML;
|
|
1110
|
+
return format;
|
|
1111
|
+
}
|
|
1112
|
+
if (format.toUpperCase() === ExportFormat.Shapefile.toUpperCase()) {
|
|
1113
|
+
format = ExportFormat.Shapefile;
|
|
1114
|
+
return format;
|
|
1115
|
+
}
|
|
1116
|
+
if (format.toUpperCase() === ExportFormat.URL.toUpperCase()) {
|
|
1117
|
+
format = ExportFormat.URL;
|
|
1118
|
+
return format;
|
|
1119
|
+
}
|
|
1120
|
+
});
|
|
1121
|
+
}
|
|
1122
|
+
modeChanged(mode) {
|
|
1123
|
+
this.selectMode.emit(mode);
|
|
1124
|
+
}
|
|
1125
|
+
onFileExportSuccess() {
|
|
1126
|
+
handleFileExportSuccess(this.messageService, this.languageService);
|
|
1127
|
+
}
|
|
1128
|
+
onImportExportChange(event) {
|
|
1129
|
+
this.selectedMode = event.value;
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
ImportExportComponent.ɵfac = function ImportExportComponent_Factory(t) { return new (t || ImportExportComponent)(i0.ɵɵdirectiveInject(i1.ImportService), i0.ɵɵdirectiveInject(i2.ExportService), i0.ɵɵdirectiveInject(i3.LanguageService), i0.ɵɵdirectiveInject(i3.MessageService), i0.ɵɵdirectiveInject(i4.StyleListService), i0.ɵɵdirectiveInject(i5.StyleService), i0.ɵɵdirectiveInject(i6.FormBuilder), i0.ɵɵdirectiveInject(i3.ConfigService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.StorageService), i0.ɵɵdirectiveInject(i7.DownloadService)); };
|
|
1133
|
+
ImportExportComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ImportExportComponent, selectors: [["igo-import-export"]], inputs: { selectFirstProj: "selectFirstProj", map: "map", projectionsLimitations: "projectionsLimitations", store: "store", selectedMode: "selectedMode", exportOptions$: "exportOptions$" }, outputs: { selectMode: "selectMode", exportOptionsChange: "exportOptionsChange" }, decls: 14, vars: 17, consts: [[1, "import-export-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], ["class", "igo-form", 3, "formGroup", 4, "ngIf"], ["class", "mat-typography", 4, "ngIf"], [1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], [3, "value", "valueChange"], [3, "value", "click", 4, "ngFor", "ngForOf"], ["tooltip-position", "below", "matTooltipShowDelay", "500", 1, "igo-form-button-group", 3, "matTooltip"], ["mat-raised-button", "", "type", "button", 3, "disabled", "click"], [3, "shown"], ["hidden", "", "type", "file", 3, "click", "change"], ["fileInput", ""], [3, "value", "click"], ["mat-line", "", 4, "ngIf"], ["mat-line", ""], [1, "mat-typography"], ["multiple", "", 3, "value", "valueChange"], ["class", "export-select-trigger", 4, "ngIf"], [3, "ngClass", "value", "click", 4, "ngFor", "ngForOf"], ["formControlName", "format"], [4, "ngIf"], ["disabled", "true", 4, "ngIf"], ["class", "igo-input-container", 4, "ngIf"], ["class", "export-combine-layers mat-typography", 4, "ngIf"], ["class", "export-separator mat-typography", 4, "ngIf"], ["class", "export-options mat-typography", 4, "ngIf"], [1, "igo-form-button-group"], [1, "export-select-trigger"], [3, "ngClass", "value", "click"], [3, "labelPosition", "click", "checked", "change", 4, "ngIf"], [3, "labelPosition", "click", "checked", "change"], [3, "value", 4, "ngFor", "ngForOf"], ["disabled", "true"], ["matInput", "", "formControlName", "name", 3, "placeholder"], ["formControlName", "encoding"], [1, "export-combine-layers", "mat-typography"], ["formControlName", "combineLayers", 3, "labelPosition"], [1, "export-separator", "mat-typography"], ["formControlName", "separator", 3, "labelPosition"], [1, "export-options", "mat-typography"], ["formControlName", "featureInMapExtent", 3, "labelPosition"]], template: function ImportExportComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1134
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "mat-button-toggle-group", 1);
|
|
1135
|
+
i0.ɵɵlistener("change", function ImportExportComponent_Template_mat_button_toggle_group_change_1_listener($event) { return ctx.onImportExportChange($event); });
|
|
1136
|
+
i0.ɵɵelementStart(2, "mat-button-toggle", 2);
|
|
1137
|
+
i0.ɵɵtext(3);
|
|
1138
|
+
i0.ɵɵpipe(4, "translate");
|
|
1139
|
+
i0.ɵɵelementEnd();
|
|
1140
|
+
i0.ɵɵelementStart(5, "mat-button-toggle", 2);
|
|
1141
|
+
i0.ɵɵtext(6);
|
|
1142
|
+
i0.ɵɵpipe(7, "translate");
|
|
1143
|
+
i0.ɵɵelementEnd()()();
|
|
1144
|
+
i0.ɵɵtemplate(8, ImportExportComponent_form_8_Template, 20, 24, "form", 3);
|
|
1145
|
+
i0.ɵɵtemplate(9, ImportExportComponent_section_9_Template, 14, 15, "section", 4);
|
|
1146
|
+
i0.ɵɵtemplate(10, ImportExportComponent_section_10_Template, 4, 3, "section", 4);
|
|
1147
|
+
i0.ɵɵpipe(11, "async");
|
|
1148
|
+
i0.ɵɵtemplate(12, ImportExportComponent_form_12_Template, 36, 37, "form", 3);
|
|
1149
|
+
i0.ɵɵpipe(13, "async");
|
|
1150
|
+
} if (rf & 2) {
|
|
1151
|
+
i0.ɵɵadvance(1);
|
|
1152
|
+
i0.ɵɵproperty("value", ctx.selectedMode);
|
|
1153
|
+
i0.ɵɵadvance(1);
|
|
1154
|
+
i0.ɵɵproperty("value", "import");
|
|
1155
|
+
i0.ɵɵadvance(1);
|
|
1156
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(4, 9, "igo.geo.importExportForm.importTabTitle"), " ");
|
|
1157
|
+
i0.ɵɵadvance(2);
|
|
1158
|
+
i0.ɵɵproperty("value", "export");
|
|
1159
|
+
i0.ɵɵadvance(1);
|
|
1160
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(7, 11, "igo.geo.importExportForm.exportTabTitle"), " ");
|
|
1161
|
+
i0.ɵɵadvance(2);
|
|
1162
|
+
i0.ɵɵproperty("ngIf", ctx.selectedMode === "import");
|
|
1163
|
+
i0.ɵɵadvance(1);
|
|
1164
|
+
i0.ɵɵproperty("ngIf", ctx.selectedMode === "import");
|
|
1165
|
+
i0.ɵɵadvance(1);
|
|
1166
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(11, 13, ctx.exportableLayers$).length === 0 && ctx.selectedMode === "export");
|
|
1167
|
+
i0.ɵɵadvance(2);
|
|
1168
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(13, 15, ctx.exportableLayers$).length > 0 && ctx.selectedMode === "export");
|
|
1169
|
+
} }, dependencies: [i8.MatTooltip, i6.ɵNgNoValidate, i6.DefaultValueAccessor, i6.NgControlStatus, i6.NgControlStatusGroup, i6.FormGroupDirective, i6.FormControlName, i9.NgClass, i9.NgForOf, i9.NgIf, i10.MatButton, i11.MatButtonToggleGroup, i11.MatButtonToggle, i12.MatFormField, i12.MatLabel, i13.MatSelect, i13.MatSelectTrigger, i14.MatOption, i15.MatInput, i16.MatSlideToggle, i17.SpinnerComponent, i9.AsyncPipe, i18.TranslatePipe, i17.KeyValuePipe], styles: ["mat-option.igo-export-layer-mat-option[_ngcontent-%COMP%]{height:5em;line-height:1em}.import-export-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.import-export-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:50%}h4[_ngcontent-%COMP%]{padding:0 5px}.igo-form[_ngcontent-%COMP%]{padding:15px 5px}.igo-input-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:100%}.igo-form-button-group[_ngcontent-%COMP%]{text-align:center;padding-top:10px}igo-spinner[_ngcontent-%COMP%]{position:absolute;padding-left:10px}.export-options[_ngcontent-%COMP%], .export-combine-layers[_ngcontent-%COMP%], .export-separator[_ngcontent-%COMP%]{overflow-x:hidden}.export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%], .export-combine-layers[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%], .export-separator[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.export-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content, .export-combine-layers[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content, .export-separator[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.export-select-trigger[_ngcontent-%COMP%]{opacity:.75;font-size:.75em}"] });
|
|
1170
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ImportExportComponent, [{
|
|
1171
|
+
type: Component,
|
|
1172
|
+
args: [{ selector: 'igo-import-export', template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"selectedMode\"\r\n (change)=\"onImportExportChange($event)\">\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{'igo.geo.importExportForm.importTabTitle' | translate}}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{'igo.geo.importExportForm.exportTabTitle' | translate}}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<form class=\"igo-form\" [formGroup]=\"importForm\" *ngIf=\"selectedMode === 'import'\">\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{'igo.geo.importExportForm.importProjPlaceholder' | translate}}</mat-label>\r\n <mat-select\r\n [(value)]=\"inputProj\">\r\n <mat-option\r\n *ngFor=\"let projection of (projections$ | async)\"\r\n [value]=\"projection\"\r\n (click)=\"$event.stopPropagation()\">\r\n <p mat-line *ngIf=\"projection.translateKey\">{{('igo.geo.importExportForm.projections.' + projection.translateKey) | translate: projection}}</p>\r\n <p mat-line *ngIf=\"!projection.translateKey\">{{projection.alias}}</p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"importForm.invalid ? ('igo.geo.importExportForm.projections.choose' | translate) : ('igo.geo.importExportForm.importButton' | translate)\"\r\n class=\"igo-form-button-group\">\r\n <button\r\n [disabled]=\"importForm.invalid || (loading$ | async)\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\">\r\n {{'igo.geo.importExportForm.importButton' | translate}}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n hidden\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($event.target.files)\">\r\n </div>\r\n</form>\r\n<section class=\"mat-typography\" *ngIf=\"selectedMode === 'import'\">\r\n <h4>{{'igo.geo.importExportForm.importClarifications' | translate}}</h4>\r\n <ul>\r\n <li>{{'igo.geo.importExportForm.importSizeMax' | translate: {size: fileSizeMb} }}</li>\r\n <li>{{'igo.geo.importExportForm.importFormatAuthorized' | translate}}</li>\r\n <li>{{'igo.geo.importExportForm.importShpZip' | translate}}</li>\r\n </ul>\r\n</section>\r\n\r\n<section class=\"mat-typography\" *ngIf=\"(exportableLayers$ | async).length === 0 && selectedMode === 'export'\">\r\n <h4>{{'igo.geo.importExportForm.exportNoLayersExportable' | translate}}</h4>\r\n</section>\r\n\r\n<form class=\"igo-form\" [formGroup]=\"form\" *ngIf=\"(exportableLayers$ | async).length > 0 && selectedMode === 'export'\">\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{'igo.geo.importExportForm.exportLayerPlaceholder' | translate}}</mat-label>\r\n <mat-select\r\n [(value)]=\"layers\" multiple>\r\n <mat-select-trigger>\r\n {{layers.length ? getLayerTitleById(layers[0]) : ''}}\r\n <span *ngIf=\"layers.length > 1\" class=\"export-select-trigger\">\r\n (+{{layers.length - 1}} {{(layers?.length === 2 ? 'igo.geo.importExportForm.other' : 'igo.geo.importExportForm.others') | translate }})\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option\r\n *ngFor=\"let layer of (exportableLayers$ | async)\"\r\n [ngClass]=\"{'igo-export-layer-mat-option': layerHasSelectedFeatures(layer)}\"\r\n [value]=\"layer.id\"\r\n (click)=\"$event.stopPropagation()\">\r\n <p mat-line>{{layer.title}}</p>\r\n <p mat-line>\r\n <mat-slide-toggle *ngIf=\"layerHasSelectedFeatures(layer)\"\r\n [labelPosition]=\"'after'\"\r\n (click)=\"onlySelectedClick($event,layer.id)\"\r\n (checked)=\"inLayersIdToExportSelectionOnly(layer)\"\r\n (change)=\"onlySelected($event,layer.id)\">\r\n <small>{{'igo.geo.importExportForm.exportSelectedFeature' | translate}}</small>\r\n </mat-slide-toggle>\r\n </p>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{'igo.geo.importExportForm.exportFormatPlaceholder' | translate}}</mat-label>\r\n <mat-select\r\n formControlName=\"format\">\r\n <ng-container *ngIf=\"(formats$ | async).length !== 0\">\r\n <mat-option *ngFor=\"let format of (formats$ | async) | keyvalue\" [value]=\"format.key\">\r\n {{'igo.geo.export.format.' + format.value | translate}}\r\n </mat-option>\r\n </ng-container>\r\n <mat-option *ngIf=\"(formats$ | async).length === 0\" disabled=\"true\">\r\n {{'igo.geo.export.noFormat.title' | translate}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\" *ngIf=\"forceNaming && form.value.format !== 'URL'\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"name\" placeholder=\"{{'igo.geo.importExportForm.exportFileNamePlaceholder' | translate}}\">\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-input-container\" *ngIf=\"form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon'\">\r\n <mat-form-field>\r\n <mat-label>{{'igo.geo.importExportForm.encodingPlaceholder' | translate}}</mat-label>\r\n <mat-select\r\n formControlName=\"encoding\">\r\n <ng-container *ngIf=\"(encodings$ | async).length !== 0\">\r\n <mat-option *ngFor=\"let encoding of (encodings$ | async) | keyvalue\" [value]=\"encoding.key\">\r\n {{'igo.geo.export.encoding.' + encoding.value | translate}}\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"export-combine-layers mat-typography\" *ngIf=\"layers.length > 1 && (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon')\">\r\n <mat-slide-toggle\r\n formControlName=\"combineLayers\"\r\n [labelPosition]=\"'before'\">\r\n {{'igo.geo.importExportForm.exportCombineResults' | translate}}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"export-separator mat-typography\" *ngIf=\"layers.length > 1 && (form.value.format === 'CSVcomma' || form.value.format === 'CSVsemicolon') && form.value.combineLayers\">\r\n <mat-slide-toggle\r\n formControlName=\"separator\"\r\n [labelPosition]=\"'before'\">\r\n {{'igo.geo.importExportForm.exportSeparator' | translate}}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"export-options mat-typography\" *ngIf=\"form.value.format !== 'URL'\">\r\n <mat-slide-toggle\r\n formControlName=\"featureInMapExtent\"\r\n [labelPosition]=\"'before'\">\r\n {{'igo.geo.importExportForm.exportFeatureInExtent' | translate}}\r\n </mat-slide-toggle>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\">\r\n {{form.value.format !== 'URL' ? ('igo.geo.importExportForm.exportButton' | translate): (form.value.layers.length > 1 ? ('igo.geo.importExportForm.exportButtonLinks' | translate): ('igo.geo.importExportForm.exportButtonLink' | translate))}}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n\r\n</form>\r\n", styles: ["mat-option.igo-export-layer-mat-option{height:5em;line-height:1em}.import-export-toggle{padding:10px;text-align:center}.import-export-toggle mat-button-toggle-group{width:100%}.import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}h4{padding:0 5px}.igo-form{padding:15px 5px}.igo-input-container mat-form-field{width:100%}.igo-form-button-group{text-align:center;padding-top:10px}igo-spinner{position:absolute;padding-left:10px}.export-options,.export-combine-layers,.export-separator{overflow-x:hidden}.export-options mat-slide-toggle,.export-combine-layers mat-slide-toggle,.export-separator mat-slide-toggle{width:100%;margin:10px}.export-options mat-slide-toggle ::ng-deep .mat-slide-toggle-content,.export-combine-layers mat-slide-toggle ::ng-deep .mat-slide-toggle-content,.export-separator mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.export-select-trigger{opacity:.75;font-size:.75em}\n"] }]
|
|
1173
|
+
}], function () { return [{ type: i1.ImportService }, { type: i2.ExportService }, { type: i3.LanguageService }, { type: i3.MessageService }, { type: i4.StyleListService }, { type: i5.StyleService }, { type: i6.FormBuilder }, { type: i3.ConfigService }, { type: i0.ChangeDetectorRef }, { type: i3.StorageService }, { type: i7.DownloadService }]; }, { selectFirstProj: [{
|
|
1174
|
+
type: Input
|
|
1175
|
+
}], map: [{
|
|
1176
|
+
type: Input
|
|
1177
|
+
}], projectionsLimitations: [{
|
|
1178
|
+
type: Input
|
|
1179
|
+
}], store: [{
|
|
1180
|
+
type: Input
|
|
1181
|
+
}], selectedMode: [{
|
|
1182
|
+
type: Input
|
|
1183
|
+
}], selectMode: [{
|
|
1184
|
+
type: Output
|
|
1185
|
+
}], exportOptions$: [{
|
|
1186
|
+
type: Input
|
|
1187
|
+
}], exportOptionsChange: [{
|
|
1188
|
+
type: Output
|
|
1189
|
+
}] }); })();
|
|
1190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9pbXBvcnQtZXhwb3J0L2ltcG9ydC1leHBvcnQvaW1wb3J0LWV4cG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUUzRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHckUsT0FBTyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN4QixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3RCLE1BQU0sd0JBQXdCLENBQUM7QUFHaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdC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QjtRQXVDL0MsZUFBK0I7UUFBL0Isb0RBQStCO1FBUy9CLGVBQTJFO1FBQTNFLGtIQUEyRTtRQUlqRSxlQUF5RTtRQUF6RSxnSEFBeUU7O3VGRER2RyxxQkFBcUI7Y0FMakMsU0FBUzsyQkFDRSxtQkFBbUI7a1dBMENwQixlQUFlO2tCQUF2QixLQUFLO1lBRUcsR0FBRztrQkFBWCxLQUFLO1lBSUYsc0JBQXNCO2tCQUR6QixLQUFLO1lBWUcsS0FBSztrQkFBYixLQUFLO1lBRUcsWUFBWTtrQkFBcEIsS0FBSztZQUVJLFVBQVU7a0JBQW5CLE1BQU07WUFFRSxjQUFjO2tCQUF0QixLQUFLO1lBSUksbUJBQW1CO2tCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIENoYW5nZURldGVjdG9yUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIE1lc3NhZ2VTZXJ2aWNlLFxyXG4gIExhbmd1YWdlU2VydmljZSxcclxuICBDb25maWdTZXJ2aWNlLFxyXG4gIFN0b3JhZ2VTZXJ2aWNlXHJcbn0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IHN0ckVudW0gfSBmcm9tICdAaWdvMi91dGlscyc7XHJcblxyXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xyXG5pbXBvcnQgeyBDbHVzdGVyRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2NsdXN0ZXItZGF0YXNvdXJjZSc7XHJcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllcic7XHJcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xyXG5pbXBvcnQgeyBBbnlMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvYW55LWxheWVyJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9kYXRhc291cmNlLmludGVyZmFjZSc7XHJcbmltcG9ydCBvbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xyXG5pbXBvcnQgeyBjaXJjdWxhciB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XHJcblxyXG5pbXBvcnQge1xyXG4gIGhhbmRsZUZpbGVFeHBvcnRFcnJvcixcclxuICBoYW5kbGVGaWxlRXhwb3J0U3VjY2Vzc1xyXG59IGZyb20gJy4uL3NoYXJlZC9leHBvcnQudXRpbHMnO1xyXG5pbXBvcnQgeyBFeHBvcnRPcHRpb25zIH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBFeHBvcnRGb3JtYXQsIEVuY29kaW5nRm9ybWF0IH0gZnJvbSAnLi4vc2hhcmVkL2V4cG9ydC50eXBlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEltcG9ydFNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvaW1wb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzLFxyXG4gIGhhbmRsZUZpbGVJbXBvcnRFcnJvclxyXG59IGZyb20gJy4uL3NoYXJlZC9pbXBvcnQudXRpbHMnO1xyXG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvc3R5bGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0eWxlTGlzdFNlcnZpY2UgfSBmcm9tICcuLi9zdHlsZS1saXN0L3N0eWxlLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IHNraXBXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRW50aXR5UmVjb3JkLCBXb3Jrc3BhY2UgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVN0b3JlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgV2ZzV29ya3NwYWNlIH0gZnJvbSAnLi4vLi4vd29ya3NwYWNlL3NoYXJlZC93ZnMtd29ya3NwYWNlJztcclxuaW1wb3J0IHsgRWRpdGlvbldvcmtzcGFjZSB9IGZyb20gJy4uLy4uL3dvcmtzcGFjZS9zaGFyZWQvZWRpdGlvbi13b3Jrc3BhY2UnO1xyXG5pbXBvcnQgeyBGZWF0dXJlV29ya3NwYWNlIH0gZnJvbSAnLi4vLi4vd29ya3NwYWNlL3NoYXJlZC9mZWF0dXJlLXdvcmtzcGFjZSc7XHJcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcclxuaW1wb3J0IHsgSW5wdXRQcm9qZWN0aW9ucywgUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMgfSBmcm9tICcuLi8uLi9tYXAvJztcclxuaW1wb3J0IHsgRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZG93bmxvYWQvc2hhcmVkL2Rvd25sb2FkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyB9IGZyb20gJy4uLy4uL21hcCc7XHJcblxyXG5pbXBvcnQgb2xWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XHJcbmltcG9ydCBvbENsdXN0ZXJTb3VyY2UgZnJvbSAnb2wvc291cmNlL0NsdXN0ZXInO1xyXG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28taW1wb3J0LWV4cG9ydCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ltcG9ydC1leHBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ltcG9ydC1leHBvcnQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1wb3J0RXhwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQge1xyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgcHVibGljIGltcG9ydEZvcm06IEZvcm1Hcm91cDtcclxuICBwdWJsaWMgZm9ybWF0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIGVuY29kaW5ncyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIGV4cG9ydGFibGVMYXllcnMkOiBCZWhhdmlvclN1YmplY3Q8QW55TGF5ZXJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxyXG4gICAgW11cclxuICApO1xyXG4gIHB1YmxpYyBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHB1YmxpYyBmb3JjZU5hbWluZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjb250cm9sRm9ybWF0ID0gJ2Zvcm1hdCc7XHJcblxyXG4gIHByaXZhdGUgbGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGV4cG9ydGFibGVMYXllcnMkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZm9ybWF0cyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBlbmNvZGluZ3MkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZm9ybUxheWVyJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGV4cG9ydE9wdGlvbnMkJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBlc3BnQ29kZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlxcXFxkezQsNn0nKTtcclxuICBwcml2YXRlIGNsaWVudFNpZGVGaWxlU2l6ZU1heDogbnVtYmVyO1xyXG4gIHB1YmxpYyBmaWxlU2l6ZU1iOiBudW1iZXI7XHJcblxyXG4gIHB1YmxpYyBwcm9qZWN0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxJbnB1dFByb2plY3Rpb25zW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XHJcbiAgcHJpdmF0ZSBwcm9qZWN0aW9uc0NvbnN0cmFpbnRzOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucztcclxuXHJcbiAgcHVibGljIHBvcHVwQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHByZXZpb3VzTGF5ZXJTcGVjcyQ6IEJlaGF2aW9yU3ViamVjdDxcclxuICAgIHtcclxuICAgICAgaWQ6IHN0cmluZztcclxuICAgICAgdmlzaWJsZTogYm9vbGVhbjtcclxuICAgICAgb3BhY2l0eTogbnVtYmVyO1xyXG4gICAgICBxdWVyeWFibGU6IGJvb2xlYW47XHJcbiAgICB9W11cclxuICA+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RGaXJzdFByb2o6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XHJcblxyXG4gIHByaXZhdGUgX3Byb2plY3Rpb25zTGltaXRhdGlvbnM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zID0ge307XHJcbiAgQElucHV0KClcclxuICBzZXQgcHJvamVjdGlvbnNMaW1pdGF0aW9ucyh2YWx1ZTogUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMpIHtcclxuICAgIHRoaXMuX3Byb2plY3Rpb25zTGltaXRhdGlvbnMgPSB2YWx1ZTtcclxuICAgIHRoaXMuY29tcHV0ZVByb2plY3Rpb25zKCk7XHJcbiAgfVxyXG4gIGdldCBwcm9qZWN0aW9uc0xpbWl0YXRpb25zKCk6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zIHtcclxuICAgIHJldHVybiB0aGlzLl9wcm9qZWN0aW9uc0xpbWl0YXRpb25zIHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgdGhhdCBob2xkcyB0aGUgYXZhaWxhYmxlIHdvcmtzcGFjZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc3RvcmU6IFdvcmtzcGFjZVN0b3JlO1xyXG5cclxuICBASW5wdXQoKSBzZWxlY3RlZE1vZGUgPSAnaW1wb3J0JztcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdE1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgQElucHV0KCkgZXhwb3J0T3B0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxFeHBvcnRPcHRpb25zPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXHJcbiAgICB1bmRlZmluZWRcclxuICApO1xyXG5cclxuICBAT3V0cHV0KCkgZXhwb3J0T3B0aW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXhwb3J0T3B0aW9ucz4oKTtcclxuXHJcbiAgZ2V0IGxheWVycygpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdsYXllcnMnKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGxheWVycyh2YWx1ZSkge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBsYXllcnM6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlucHV0UHJvaigpIHtcclxuICAgIHJldHVybiB0aGlzLmltcG9ydEZvcm0uZ2V0KCdpbnB1dFByb2onKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGlucHV0UHJvaih2YWx1ZSkge1xyXG4gICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHZhbHVlIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBvcHVwQWxsb3dlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnaW1wb3J0RXhwb3J0UG9wdXBBbGxvd2VkJykgYXMgYm9vbGVhbiB8fCBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNldCBwb3B1cEFsbG93ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdpbXBvcnRFeHBvcnRQb3B1cEFsbG93ZWQnLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaW1wb3J0U2VydmljZTogSW1wb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc3R5bGVMaXN0U2VydmljZTogU3R5bGVMaXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgc3R5bGVTZXJ2aWNlOiBTdHlsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZG93bmxvYWRTZXJ2aWNlOiBEb3dubG9hZFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMubG9hZENvbmZpZygpO1xyXG4gICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICAgIHRoaXMuY29tcHV0ZVByb2plY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLm1hcC5sYXllcnMkLnN1YnNjcmliZSgobGF5ZXJzKSA9PiB7XHJcbiAgICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQubmV4dChcclxuICAgICAgICBsYXllcnMuZmlsdGVyKChsYXllcjogTGF5ZXIpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIChsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmIGxheWVyLmV4cG9ydGFibGUgPT09IHRydWUpIHx8XHJcbiAgICAgICAgICAgIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQgJiZcclxuICAgICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQudXJsKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KSBhcyBBbnlMYXllcltdXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGNvbmZpZ0ZpbGVTaXplTWIgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoXHJcbiAgICAgICdpbXBvcnRFeHBvcnQuY2xpZW50U2lkZUZpbGVTaXplTWF4TWInXHJcbiAgICApO1xyXG4gICAgdGhpcy5jbGllbnRTaWRlRmlsZVNpemVNYXggPVxyXG4gICAgICAoY29uZmlnRmlsZVNpemVNYiA/IGNvbmZpZ0ZpbGVTaXplTWIgOiAzMCkgKiBNYXRoLnBvdygxMDI0LCAyKTtcclxuICAgIHRoaXMuZmlsZVNpemVNYiA9IHRoaXMuY2xpZW50U2lkZUZpbGVTaXplTWF4IC8gTWF0aC5wb3coMTAyNCwgMik7XHJcblxyXG4gICAgdGhpcy5leHBvcnRPcHRpb25zJCQgPSB0aGlzLmV4cG9ydE9wdGlvbnMkXHJcbiAgICAgIC5waXBlKHNraXBXaGlsZSgoZXhwb3J0T3B0aW9ucykgPT4gIWV4cG9ydE9wdGlvbnMpKVxyXG4gICAgICAuc3Vic2NyaWJlKChleHBvcnRPcHRpb25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoZXhwb3J0T3B0aW9ucywgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgICAgaWYgKGV4cG9ydE9wdGlvbnMubGF5ZXJzKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKFxyXG4gICAgICAgICAgICBleHBvcnRPcHRpb25zLmxheWVycy5tYXAoKGwpID0+IHRoaXMubWFwLmdldExheWVyQnlJZChsKSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZm9ybUxheWVyJCQgPSB0aGlzLmZvcm1cclxuICAgICAgLmdldCgnZm9ybWF0JylcclxuICAgICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAuc3Vic2NyaWJlKChmb3JtYXQpID0+IHtcclxuICAgICAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnBvcHVwQ2hlY2tlZCAmJlxyXG4gICAgICAgICAgdGhpcy5mb3JtLmdldCgnbGF5ZXJzJykudmFsdWU/Lmxlbmd0aCA+IDEgJiZcclxuICAgICAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGZvcm1hdCkgPj0gMCB8fCBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5VUkwpKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuaGFuZGxlUG9wdXAodHJ1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBmb3JtYXQ6IHVuZGVmaW5lZCB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcm1MYXllciQkID0gdGhpcy5mb3JtXHJcbiAgICAgIC5nZXQoJ2xheWVycycpXHJcbiAgICAgIC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChsYXllcnNJZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRMYXllcnMgPSBsYXllcnNJZCBpbnN0YW5jZW9mIEFycmF5ID8gbGF5ZXJzSWQgOiBbbGF5ZXJzSWRdO1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzOiBzZWxlY3RlZExheWVycyB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJzID0gc2VsZWN0ZWRMYXllcnMubWFwKChsKSA9PiB0aGlzLm1hcC5nZXRMYXllckJ5SWQobCkpO1xyXG4gICAgICAgIHRoaXMuY29tcHV0ZUZvcm1hdHMobGF5ZXJzKTtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5mb3JtYXRzJC52YWx1ZSkuaW5kZXhPZih0aGlzLmZvcm0udmFsdWUuZm9ybWF0KSA9PT1cclxuICAgICAgICAgIC0xXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGZvcm1hdDogdW5kZWZpbmVkIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3BlY3M6IHtcclxuICAgICAgICAgIGlkOiBzdHJpbmc7XHJcbiAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xyXG4gICAgICAgICAgb3BhY2l0eTogbnVtYmVyO1xyXG4gICAgICAgICAgcXVlcnlhYmxlOiBib29sZWFuO1xyXG4gICAgICAgIH1bXSA9IFtdO1xyXG4gICAgICAgIGxheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBsYXllciBpbnN0YW5jZW9mIFZlY3RvckxheWVyICYmXHJcbiAgICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZXMoKS5sZW5ndGggPT09IDBcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NwZWNzLnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBsYXllci5pZCxcclxuICAgICAgICAgICAgICB2aXNpYmxlOiBsYXllci52aXNpYmxlLFxyXG4gICAgICAgICAgICAgIG9wYWNpdHk6IGxheWVyLm9wYWNpdHksXHJcbiAgICAgICAgICAgICAgcXVlcnlhYmxlOiAobGF5ZXIgYXMgYW55KS5xdWVyeWFibGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxheWVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICBsYXllci52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLm5leHQocHJldmlvdXNTcGVjcyk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9ybWF0cyQkID0gdGhpcy5mb3JtYXRzJFxyXG4gICAgICAucGlwZShza2lwV2hpbGUoKGZvcm1hdHMpID0+ICFmb3JtYXRzKSlcclxuICAgICAgLnN1YnNjcmliZSgoZm9ybWF0cykgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmb3JtYXRzKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZm9ybWF0OiBmb3JtYXRzW09iamVjdC5rZXlzKGZvcm1hdHMpWzBdXSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZW5jb2RpbmdzJCQgPSB0aGlzLmVuY29kaW5ncyRcclxuICAgICAgLnBpcGUoc2tpcFdoaWxlKChlbmNvZGluZ3MpID0+ICFlbmNvZGluZ3MpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlbmNvZGluZ3MpID0+IHtcclxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZW5jb2RpbmdzKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgZW5jb2Rpbmc6IGVuY29kaW5nc1tPYmplY3Qua2V5cyhlbmNvZGluZ3MpWzBdXSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkID0gdGhpcy5leHBvcnRhYmxlTGF5ZXJzJFxyXG4gICAgICAucGlwZShza2lwV2hpbGUoKGxheWVycykgPT4gIWxheWVycykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxheWVycykgPT4ge1xyXG4gICAgICAgIGlmIChsYXllcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGxheWVyczogbGF5ZXJzWzBdLmlkIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuY29udHJvbEZvcm1hdF0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZm9ybWF0KSA9PiB7XHJcbiAgICAgIGlmIChmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSB8fCBmb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24pIHtcclxuICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjEgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBlbmNvZGluZzogRW5jb2RpbmdGb3JtYXQuVVRGOCB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdEZpcnN0UHJvaikge1xyXG4gICAgICBpZiAodGhpcy5wcm9qZWN0aW9ucyQudmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHsgdHJhbnNsYXRlS2V5OiAnbmFkODMnLCBhbGlhczogJ05BRDgzJywgY29kZTogJ0VQU0c6NDMyNicsIHpvbmU6ICcnIH0gfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbXBvcnRGb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlWzBdIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmltcG9ydEZvcm0ucGF0Y2hWYWx1ZSh7IGlucHV0UHJvajogdW5kZWZpbmVkIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlUHJvamVjdGlvbnMoKSB7XHJcbiAgICB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMgPSBjb21wdXRlUHJvamVjdGlvbnNDb25zdHJhaW50cyh0aGlzLnByb2plY3Rpb25zTGltaXRhdGlvbnMpO1xyXG4gICAgY29uc3QgcHJvamVjdGlvbnM6IElucHV0UHJvamVjdGlvbnNbXSA9IFtdO1xyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubmFkODMpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ25hZDgzJywgYWxpYXM6ICdOQUQ4MycsIGNvZGU6ICdFUFNHOjQyNjknLCB6b25lOiAnJyB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2dzODQpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ3dnczg0JywgYWxpYXM6ICdXR1M4NCcsIGNvZGU6ICdFUFNHOjQzMjYnLCB6b25lOiAnJyB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2ViTWVyY2F0b3IpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7IHRyYW5zbGF0ZUtleTogJ3dlYk1lcmNhdG9yJywgYWxpYXM6ICdXZWIgTWVyY2F0b3InLCBjb2RlOiAnRVBTRzozODU3Jywgem9uZTogJycgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG0pIHtcclxuICAgICAgLy8gYWxsIG10bSB6b25lc1xyXG4gICAgICBjb25zdCBtaW5ab25lID0gdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm10bVpvbmUubWluWm9uZTtcclxuICAgICAgY29uc3QgbWF4Wm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG1ab25lLm1heFpvbmU7XHJcblxyXG4gICAgICBmb3IgKGxldCBtdG1ab25lID0gbWluWm9uZTsgbXRtWm9uZSA8PSBtYXhab25lOyBtdG1ab25lKyspIHtcclxuICAgICAgICBjb25zdCBjb2RlID0gbXRtWm9uZSA8IDEwID8gYEVQU0c6MzIxOCR7bXRtWm9uZX1gIDogYEVQU0c6MzIxJHs4MCArIG10bVpvbmV9YDtcclxuICAgICAgICBwcm9qZWN0aW9ucy5wdXNoKHsgdHJhbnNsYXRlS2V5OiAnbXRtJywgYWxpYXM6IGBNVE0gJHttdG1ab25lfWAsIGNvZGUsIHpvbmU6IGAke210bVpvbmV9YCB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtKSB7XHJcbiAgICAgIC8vIGFsbCB1dG0gem9uZXNcclxuICAgICAgY29uc3QgbWluWm9uZSA9IHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG1ab25lLm1pblpvbmU7XHJcbiAgICAgIGNvbnN0IG1heFpvbmUgPSB0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMudXRtWm9uZS5tYXhab25lO1xyXG5cclxuICAgICAgZm9yIChsZXQgdXRtWm9uZSA9IG1pblpvbmU7IHV0bVpvbmUgPD0gbWF4Wm9uZTsgdXRtWm9uZSsrKSB7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHV0bVpvbmUgPCAxMCA/IGBFUFNHOjMyNjAke3V0bVpvbmV9YCA6IGBFUFNHOjMyNiR7dXRtWm9uZX1gO1xyXG4gICAgICAgIHByb2plY3Rpb25zLnB1c2goeyB0cmFuc2xhdGVLZXk6ICd1dG0nLCBhbGlhczogYFVUTSAke3V0bVpvbmV9YCwgY29kZSwgem9uZTogYCR7dXRtWm9uZX1gIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbmZpZ1Byb2plY3Rpb24gPSBbXTtcclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMucHJvakZyb21Db25maWcpIHtcclxuICAgICAgY29uZmlnUHJvamVjdGlvbiA9IHRoaXMuY29uZmlnLmdldENvbmZpZygncHJvamVjdGlvbnMnKSB8fCBbXTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByb2plY3Rpb25zJC5uZXh0KGNvbmZpZ1Byb2plY3Rpb24uY29uY2F0KHByb2plY3Rpb25zKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdvcmtzcGFjZUJ5TGF5ZXJJZChpZDogc3RyaW5nKTogV29ya3NwYWNlIHtcclxuICAgIGNvbnN0IHdrc0Zyb21MYXllcklkID0gdGhpcy5zdG9yZVxyXG4gICAgICAuYWxsKClcclxuICAgICAgLmZpbmQod29ya3NwYWNlID0+ICh3b3Jrc3BhY2UgYXMgV2ZzV29ya3NwYWNlIHwgRmVhdHVyZVdvcmtzcGFjZSB8IEVkaXRpb25Xb3Jrc3BhY2UpLmxheWVyLmlkID09PSBpZCk7XHJcbiAgICBpZiAod2tzRnJvbUxheWVySWQpIHtcclxuICAgICAgcmV0dXJuIHdrc0Zyb21MYXllcklkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExheWVyVGl0bGVCeUlkKGlkKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1hcC5nZXRMYXllckJ5SWQoaWQpPy50aXRsZTtcclxuICB9XHJcblxyXG5cclxuICBsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB3a3NGcm9tTGF5ZXIgPSB0aGlzLmdldFdvcmtzcGFjZUJ5TGF5ZXJJZChsYXllci5pZCk7XHJcbiAgICBpZiAod2tzRnJvbUxheWVyKSB7XHJcbiAgICAgIGNvbnN0IHJlY3MgPSB3a3NGcm9tTGF5ZXIuZW50aXR5U3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgLmZpcnN0QnkoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmU+KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gcmVjcyA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWQoZXZlbnQ6IE1hdFNsaWRlVG9nZ2xlQ2hhbmdlLCBpZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgbGF5ZXJzV2l0aFNlbGVjdGlvbiA9IHRoaXMuZm9ybS52YWx1ZS5sYXllcnNXaXRoU2VsZWN0aW9uO1xyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgbGF5ZXJzV2l0aFNlbGVjdGlvbi5wdXNoKGlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxheWVyc1dpdGhTZWxlY3Rpb24gPSBsYXllcnNXaXRoU2VsZWN0aW9uLmZpbHRlcihsYXllcklkID0+IGxheWVySWQgIT09IGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbGF5ZXJzV2l0aFNlbGVjdGlvbiB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbmx5U2VsZWN0ZWRDbGljayhldmVudCwgaWQ6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZm9ybS52YWx1ZS5sYXllcnMuZmluZChsYXllcklkID0+IGxheWVySWQgPT09IGlkKSkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbkxheWVyc0lkVG9FeHBvcnRTZWxlY3Rpb25Pbmx5KGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS52YWx1ZS5sYXllcnNXaXRoU2VsZWN0aW9uLmZpbmQobGF5ZXJJZCA9PiBsYXllcklkID09PSBsYXllci5pZCkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubGF5ZXJzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZXhwb3J0YWJsZUxheWVycyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmZvcm1hdHMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5lbmNvZGluZ3MkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5mb3JtTGF5ZXIkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMuZXhwb3J0T3B0aW9ucyQkKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cG9ydE9wdGlvbnNDaGFuZ2UuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xyXG4gICAgdGhpcy5oYW5kbGVQcmV2aW91c0xheWVyU3BlY3MoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUHJldmlvdXNMYXllclNwZWNzKCkge1xyXG4gICAgY29uc3QgcHJldmlvdXNTcGVjcyA9IHRoaXMucHJldmlvdXNMYXllclNwZWNzJC52YWx1ZTtcclxuICAgIGlmIChwcmV2aW91c1NwZWNzICYmIHByZXZpb3VzU3BlY3MubGVuZ3RoKSB7XHJcbiAgICAgIHByZXZpb3VzU3BlY3MuZm9yRWFjaCgoc3BlY3MpID0+IHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0xheWVyID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeUlkKHNwZWNzLmlkKTtcclxuICAgICAgICBwcmV2aW91c0xheWVyLnZpc2libGUgPSBzcGVjcy52aXNpYmxlO1xyXG4gICAgICAgIHByZXZpb3VzTGF5ZXIub3BhY2l0eSA9IHNwZWNzLm9wYWNpdHk7XHJcbiAgICAgICAgKHByZXZpb3VzTGF5ZXIgYXMgYW55KS5xdWVyeWFibGUgPSBzcGVjcy5xdWVyeWFibGU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmV2aW91c0xheWVyU3BlY3MkLm5leHQodW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIGltcG9ydEZpbGVzKGZpbGVzOiBGaWxlW10pIHtcclxuICAgIGxldCBpbnB1dFByb2ogPSB0aGlzLmlucHV0UHJvai5jb2RlO1xyXG4gICAgaWYgKHRoaXMuZXNwZ0NvZGVSZWdleC50ZXN0KGlucHV0UHJvaikpIHtcclxuICAgICAgaW5wdXRQcm9qID0gYEVQU0c6JHtpbnB1dFByb2p9YDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmckLm5leHQodHJ1ZSk7XHJcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcclxuICAgICAgdGhpcy5pbXBvcnRTZXJ2aWNlLmltcG9ydChmaWxlLCBpbnB1dFByb2opLnN1YnNjcmliZShcclxuICAgICAgICAoZmVhdHVyZXM6IEZlYXR1cmVbXSkgPT4gdGhpcy5vbkZpbGVJbXBvcnRTdWNjZXNzKGZpbGUsIGZlYXR1cmVzKSxcclxuICAgICAgICAoZXJyb3I6IEVycm9yKSA9PiB0aGlzLm9uRmlsZUltcG9ydEVycm9yKGZpbGUsIGVycm9yKSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVBvcHVwKHByZUNoZWNrOiBib29sZWFuID0gdHJ1ZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcDEgPSB3aW5kb3cub3BlbignJywgJ3BvcHVwJywgJ3dpZHRoPTEsIGhlaWdodD0xJyk7XHJcbiAgICBwMS5jbG9zZSgpO1xyXG4gICAgY29uc3QgcDIgPSB3aW5kb3cub3BlbignJywgJ3BvcHVwJywgJ3dpZHRoPTEsIGhlaWdodD0xJyk7XHJcbiAgICBpZiAoIXAyIHx8IHAyLmNsb3NlZCB8fCB0eXBlb2YgcDIuY2xvc2VkID09PSAndW5kZWZpbmVkJyB8fCBwMiA9PT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm9uUG9wdXBCbG9ja2VkRXJyb3IocHJlQ2hlY2spO1xyXG4gICAgICB0aGlzLnBvcHVwQWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcDIuY2xvc2UoKTtcclxuICAgICAgdGhpcy5wb3B1cEFsbG93ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnBvcHVwQ2hlY2tlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5wb3B1cEFsbG93ZWQ7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFeHBvcnRGb3JtU3VibWl0KGRhdGE6IEV4cG9ydE9wdGlvbnMpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dCh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBvZ3JlRm9ybWF0cyA9IE9iamVjdC5rZXlzKEV4cG9ydFNlcnZpY2Uub2dyZUZvcm1hdHMpO1xyXG4gICAgaWYgKCF0aGlzLnBvcHVwQ2hlY2tlZCAmJiBkYXRhLmxheWVycy5sZW5ndGggPiAxICYmXHJcbiAgICAgIChvZ3JlRm9ybWF0cy5pbmRleE9mKGRhdGEuZm9ybWF0KSA+PSAwIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuVVJMKSAmJiAhdGhpcy5wb3B1cEFsbG93ZWQpIHtcclxuICAgICAgdGhpcy5oYW5kbGVQb3B1cCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBnZW9tVHlwZXNDU1Y6IHsgZ2VvbWV0cnlUeXBlOiBzdHJpbmcsIGZlYXR1cmVzOiBhbnlbXSB9W10gPSBbXTtcclxuICAgIGxldCBmZWF0dXJlc0NTVjogYW55W10gPSBbXTtcclxuICAgIGxldCBmaWxlbmFtZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgICBmb3IgKGNvbnN0IFtsYXllckluZGV4LCBsYXllcl0gb2YgZGF0YS5sYXllcnMuZW50cmllcygpKSB7XHJcbiAgICAgIGNvbnN0IGxheSA9IHRoaXMubWFwLmdldExheWVyQnlJZChsYXllcik7XHJcbiAgICAgIGlmICghKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWc2VtaWNvbG9uIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEpXHJcbiAgICAgIHx8ICFkYXRhLmNvbWJpbmVMYXllcnMgfHwgZGF0YS5sYXllcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgZmlsZW5hbWUgPSBsYXkudGl0bGU7XHJcbiAgICAgICAgaWYgKGRhdGEubmFtZSkge1xyXG4gICAgICAgICAgZmlsZW5hbWUgPSBkYXRhLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGVuYW1lID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LmNvbWJpbmVkTGF5ZXJzJyk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZFNPcHRpb25zOiBEYXRhU291cmNlT3B0aW9ucyA9IGxheS5kYXRhU291cmNlLm9wdGlvbnM7XHJcbiAgICAgIGlmIChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LlVSTCAmJiBkU09wdGlvbnMuZG93bmxvYWQgJiYgKGRTT3B0aW9ucy5kb3dubG9hZC51cmwgfHwgZFNPcHRpb25zLmRvd25sb2FkLmR5bmFtaWNVcmwpKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAvLyBiZXR0ZXIgbG9vayBhbiBmZWVsXHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBkU09wdGlvbnMuZG93bmxvYWQudXJsIHx8IGRTT3B0aW9ucy5kb3dubG9hZC5keW5hbWljVXJsO1xyXG4gICAgICAgICAgdXJsLm1hdGNoKC9zZXJ2aWNlPXdmcy9naSkgPyB0aGlzLmRvd25sb2FkU2VydmljZS5vcGVuKGxheSkgOiB3aW5kb3cub3Blbih1cmwgLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmckLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdrcyA9IHRoaXMuZ2V0V29ya3NwYWNlQnlMYXllcklkKGxheWVyKTtcclxuICAgICAgbGV0IG9sRmVhdHVyZXM7XHJcbiAgICAgIGlmICh3a3MgJiYgd2tzLmVudGl0eVN0b3JlICYmIHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKCkubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgIGlmIChkYXRhLmxheWVyc1dpdGhTZWxlY3Rpb24uaW5kZXhPZihsYXllcikgIT09IC0xICYmIGRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XHJcbiAgICAgICAgICAvLyBPbmx5IGV4cG9ydCBzZWxlY3RlZCBmZWF0dXJlICYmIGludG8gbWFwIGV4dGVudFxyXG4gICAgICAgICAgb2xGZWF0dXJlcyA9IHdrcy5lbnRpdHlTdG9yZS5zdGF0ZVZpZXcuYWxsKClcclxuICAgICAgICAgICAgLmZpbHRlcigoZTogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IGUuc3RhdGUuaW5NYXBFeHRlbnQgJiYgZS5zdGF0ZS5zZWxlY3RlZCkubWFwKGUgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEubGF5ZXJzV2l0aFNlbGVjdGlvbi5pbmRleE9mKGxheWVyKSAhPT0gLTEgJiYgIWRhdGEuZmVhdHVyZUluTWFwRXh0ZW50KSB7XHJcbiAgICAgICAgICAvLyBPbmx5IGV4cG9ydCBzZWxlY3RlZCBmZWF0dXJlICYmICAoaW50byBtYXAgZXh0ZW50IE9SIG5vdClcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSB3a3MuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmFsbCgpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGU6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiBlLnN0YXRlLnNlbGVjdGVkKS5tYXAoZSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnQpIHtcclxuICAgICAgICAgIC8vIE9ubHkgaW50byBtYXAgZXh0ZW50XHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlldy5hbGwoKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChlOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gZS5zdGF0ZS5pbk1hcEV4dGVudCkubWFwKGUgPT4gKGUuZW50aXR5IGFzIEZlYXR1cmUpLm9sKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWxsIGZlYXR1cmVzXHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gd2tzLmVudGl0eVN0b3JlLnN0YXRlVmlldy5hbGwoKS5tYXAoZSA9PiAoZS5lbnRpdHkgYXMgRmVhdHVyZSkub2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBvbCA9IGxheS5kYXRhU291cmNlLm9sIGFzIG9sVmVjdG9yU291cmNlPE9sR2VvbWV0cnk+IHwgb2xDbHVzdGVyU291cmNlIDtcclxuICAgICAgICBpZiAoZGF0YS5mZWF0dXJlSW5NYXBFeHRlbnQpIHtcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbC5nZXRGZWF0dXJlc0luRXh0ZW50KFxyXG4gICAgICAgICAgICBsYXkubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvbEZlYXR1cmVzID0gb2wuZ2V0RmVhdHVyZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheS5kYXRhU291cmNlIGluc3RhbmNlb2YgQ2x1c3RlckRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgIG9sRmVhdHVyZXMgPSBvbEZlYXR1cmVzLmZsYXRNYXAoKGNsdXN0ZXI6IGFueSkgPT5cclxuICAgICAgICAgICAgY2x1c3Rlci5nZXQoJ2ZlYXR1cmVzJylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XHJcbiAgICAgIGxldCBnZW9tVHlwZXM6IHsgZ2VvbWV0cnlUeXBlOiBzdHJpbmcsIGZlYXR1cmVzOiBhbnlbXSB9W10gPSBbXTtcclxuICAgICAgaWYgKGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlIHx8IGRhdGEuZm9ybWF0ID09PSBFeHBvcnRGb3JtYXQuR1BYKSB7XHJcbiAgICAgICAgb2xGZWF0dXJlcy5mb3JFYWNoKChvbEZlYXR1cmUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZlYXR1cmVHZW9tVHlwZSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKTtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRHZW9tVHlwZSA9IGdlb21UeXBlcy5maW5kKGdlb21UeXBlID0+IGdlb21UeXBlLmdlb21ldHJ5VHlwZSA9PT0gZmVhdHVyZUdlb21UeXBlKTtcclxuICAgICAgICAgIGlmIChjdXJyZW50R2VvbVR5cGUpIHtcclxuICAgICAgICAgICAgY3VycmVudEdlb21UeXBlLmZlYXR1cmVzLnB1c2gob2xGZWF0dXJlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdlb21UeXBlcy5wdXNoKHsgZ2VvbWV0cnlUeXBlOiBmZWF0dXJlR2VvbVR5cGUsIGZlYXR1cmVzOiBbb2xGZWF0dXJlXSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBnZW9tVHlwZXMgPSBbeyBnZW9tZXRyeVR5cGU6ICcnLCBmZWF0dXJlczogb2xGZWF0dXJlcyB9XTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZ2VvbVR5cGVzLmZvckVhY2goZ2VvbVR5cGUgPT4ge1xyXG4gICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goZmVhdHVyZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByYWRpdXM6IG51bWJlciA9IGZlYXR1cmUuZ2V0KCdyYWQnKTtcclxuICAgICAgICAgIGlmIChyYWRpdXMpIHtcclxuICAgICAgICAgICAgY29uc3QgY2VudGVyNDMyNjogQXJyYXk8bnVtYmVyPiA9IFtmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXTtcclxuICAgICAgICAgICAgY29uc3QgY2lyY2xlID0gY2lyY3VsYXIoY2VudGVyNDMyNiwgcmFkaXVzLCA1MDApO1xyXG4gICAgICAgICAgICBjaXJjbGUudHJhbnNmb3JtKCdFUFNHOjQzMjYnLCBmZWF0dXJlLmdldCgnX3Byb2plY3Rpb24nKSk7XHJcbiAgICAgICAgICAgIGZlYXR1cmUuc2V0R2VvbWV0cnkoY2lyY2xlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5HUFgpIHtcclxuICAgICAgICBjb25zdCBncHhGZWF0dXJlQ250ID0gZ2VvbVR5cGVzLmxlbmd0aDtcclxuICAgICAgICBnZW9tVHlwZXMgPSBnZW9tVHlwZXMuZmlsdGVyKGdlb21UeXBlID0+IFsnTGluZVN0cmluZycsICdQb2ludCddLmluY2x1ZGVzKGdlb21UeXBlLmdlb21ldHJ5VHlwZSkpO1xyXG4gICAgICAgIGNvbnN0IGdweEZlYXR1cmVDbnRQb2ludE9yUG9seSA9IGdlb21UeXBlcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGdweEZlYXR1cmVDbnQgPiBncHhGZWF0dXJlQ250UG9pbnRPclBvbHkpIHtcclxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LmdweC5lcnJvci5wb2x5LnRpdGxlJyk7XHJcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LmdweC5lcnJvci5wb2x5LnRleHQnKTtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IobWVzc2FnZSwgdGl0bGUsIHsgdGltZU91dDogMjAwMDAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fCBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hKSAmJiBkYXRhLmNvbWJpbmVMYXllcnMpIHtcclxuICAgICAgICBnZW9tVHlwZXMuZm9yRWFjaChnZW9tVHlwZSA9PiBnZW9tVHlwZXNDU1YucHVzaChnZW9tVHlwZSkpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXJJbmRleCAhPT0gZGF0YS5sYXllcnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBwcmV2aW91c0ZlYXR1cmUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBnZW9tVHlwZXNDU1YuZm9yRWFjaChnZW9tVHlwZSA9PiB7XHJcbiAgICAgICAgICAgIGdlb21UeXBlLmZlYXR1cmVzLmZvckVhY2goY3VycmVudEZlYXR1cmUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChkYXRhLnNlcGFyYXRvcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzRmVhdHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSAhPT1cclxuICAgICAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlLmdldCgnX2ZlYXR1cmVTdG9yZScpLmxheWVyLm9wdGlvbnMudGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IHRoaXMuY3JlYXRlVGl0bGVFbXB0eVJvd3MocHJldmlvdXNGZWF0dXJlLCBjdXJyZW50RmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1syXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaCh0aXRsZUVtcHR5Um93c1sxXSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlRW1wdHlSb3dzID0gdGhpcy5jcmVhdGVUaXRsZUVtcHR5Um93cyhjdXJyZW50RmVhdHVyZSwgY3VycmVudEZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICBmZWF0dXJlc0NTVi5wdXNoKHRpdGxlRW1wdHlSb3dzWzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZmVhdHVyZXNDU1YucHVzaChjdXJyZW50RmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlID0gY3VycmVudEZlYXR1cmU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZ2VvbVR5cGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQubm90aGluZy50aXRsZScpO1xyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQubm90aGluZy50ZXh0Jyk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihtZXNzYWdlLCB0aXRsZSwgeyB0aW1lT3V0OiAyMDAwMCB9KTtcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCEoZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24gfHwgZGF0YS5mb3JtYXQgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYSkgfHwgIWRhdGEuY29tYmluZUxheWVycykge1xyXG4gICAgICAgICAgZ2VvbVR5cGVzLm1hcChnZW9tVHlwZSA9PlxyXG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0KGdlb21UeXBlLmZlYXR1cmVzLCBkYXRhLmZvcm1hdCwgZmlsZW5hbWUgKyBnZW9tVHlwZS5nZW9tZXRyeVR5cGUsIGRhdGEuZW5jb2RpbmcsIHRoaXMubWFwLnByb2plY3Rpb24pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgKGVycm9yOiBFcnJvcikgPT4gdGhpcy5vbkZpbGVFeHBvcnRFcnJvcihlcnJvciksXHJcbiAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkZpbGVFeHBvcnRTdWNjZXNzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZ2VvbVR5cGUuZmVhdHVyZXMuZm9yRWFjaChmZWF0dXJlID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaXJjbGVUb1BvaW50KGZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKChkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbiB8fCBkYXRhLmZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hKSAmJiBkYXRhLmNvbWJpbmVMYXllcnMpIHtcclxuICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydChmZWF0dXJlc0NTViwgZGF0YS5mb3JtYXQsIGZpbGVuYW1lLCBkYXRhLmVuY29kaW5nLCB0aGlzLm1hcC5wcm9qZWN0aW9uKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICgpID0+IHt9LFxyXG4gICAgICAgIChlcnJvcjogRXJyb3IpID0+IHRoaXMub25GaWxlRXhwb3J0RXJyb3IoZXJyb3IpLFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMub25GaWxlRXhwb3J0U3VjY2VzcygpO1xyXG5cclxuICAgICAgICAgIGZlYXR1cmVzQ1NWLmZvckVhY2goZmVhdHVyZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2lyY2xlVG9Qb2ludChmZWF0dXJlKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVUaXRsZUVtcHR5Um93cyhwcmV2aW91c0ZlYXR1cmUsIGN1cnJlbnRGZWF0dXJlKSB7XHJcbiAgICBjb25zdCB0aXRsZVJvdyA9IGN1cnJlbnRGZWF0dXJlLmNsb25lKCk7XHJcbiAgICBjb25zdCBoZWFkZXJSb3cgPSBjdXJyZW50RmVhdHVyZS5jbG9uZSgpO1xyXG4gICAgY29uc3QgZW1wdHlSb3cgPSBjdXJyZW50RmVhdHVyZS5jbG9uZSgpO1xyXG4gICAgY29uc3QgcHJldmlvdXNGZWF0dXJlS2V5czogQXJyYXk8c3RyaW5nPiA9IHByZXZpb3VzRmVhdHVyZS5nZXRLZXlzKCk7XHJcbiAgICBsZXQgZmlyc3RLZXlQcmV2aW91czogc3RyaW5nID0gJyc7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwcmV2aW91c0ZlYXR1cmVLZXlzKSB7XHJcbiAgICAgIGlmIChwcmV2aW91c0ZlYXR1cmVLZXlzW2tleV0gIT09ICdnZW9tZXRyeScpIHtcclxuICAgICAgICBmaXJzdEtleVByZXZpb3VzID0gcHJldmlvdXNGZWF0dXJlS2V5c1trZXldO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudEZlYXR1cmVLZXlzOiBBcnJheTxzdHJpbmc+ID0gY3VycmVudEZlYXR1cmUuZ2V0S2V5cygpO1xyXG4gICAgbGV0IGZpcnN0S2V5Q3VycmVudDogc3RyaW5nID0gJyc7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBjdXJyZW50RmVhdHVyZUtleXMpIHtcclxuICAgICAgaWYgKGN1cnJlbnRGZWF0dXJlS2V5c1trZXldICE9PSAnZ2VvbWV0cnknKSB7XHJcbiAgICAgICAgZmlyc3RLZXlDdXJyZW50ID0gY3VycmVudEZlYXR1cmVLZXlzW2tleV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGFsbEtleXM6IEFycmF5PHN0cmluZz4gPSBjdXJyZW50RmVhdHVyZS5nZXRLZXlzKCk7XHJcbiAgICBwcmV2aW91c0ZlYXR1cmVLZXlzLmZvckVhY2gocHJldmlvdXNLZXkgPT4ge1xyXG4gICAgICBpZiAoYWxsS2V5cy5pbmNsdWRlcyhwcmV2aW91c0tleSkgJiYgcHJldmlvdXNLZXkgIT09IGZpcnN0S2V5UHJldmlvdXMpIHtcclxuICAgICAgICBhbGxLZXlzLnB1c2gocHJldmlvdXNLZXkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGFsbEtleXMudW5zaGlmdChmaXJzdEtleVByZXZpb3VzKTtcclxuXHJcbiAgICBsZXQgZmlyc3RLZXlBbGw6IHN0cmluZyA9ICcnO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gYWxsS2V5cykge1xyXG4gICAgICBpZiAoYWxsS2V5c1trZXldICE9PSAnZ2VvbWV0cnknKSB7XHJcbiAgICAgICAgZmlyc3RLZXlBbGwgPSBhbGxLZXlzW2tleV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGFsbEtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBjb25zdCBzYW1lS2V5czogYm9vbGVhbiA9IHByZXZpb3VzRmVhdHVyZUtleXMubGVuZ3RoID09PSBjdXJyZW50RmVhdHVyZUtleXMubGVuZ3RoICYmXHJcbiAgICAgIHByZXZpb3VzRmVhdHVyZUtleXMuZXZlcnkoKHZhbHVlLCBpbmRleCkgPT4gdmFsdWUgPT09IGN1cnJlbnRGZWF0dXJlS2V5c1tpbmRleF0pO1xyXG4gICAgICBpZiAoa2V5ID09PSBmaXJzdEtleUFsbCAmJiAhc2FtZUtleXMpIHtcclxuICAgICAgICB0aXRsZVJvdy5zZXQoa2V5LCBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlICsgXCIgPT09PT09PT09PT09PT09PlwiLCB0cnVlKTtcclxuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcclxuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gZmlyc3RLZXlBbGwgJiYgc2FtZUtleXMpIHtcclxuICAgICAgICB0aXRsZVJvdy5zZXQoa2V5LCBjdXJyZW50RmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKS5sYXllci5vcHRpb25zLnRpdGxlLCB0cnVlKTtcclxuICAgICAgICBoZWFkZXJSb3cuc2V0KGtleSwga2V5LCB0cnVlKTtcclxuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gZmlyc3RLZXlDdXJyZW50KSB7XHJcbiAgICAgICAgdGl0bGVSb3cuc2V0KGtleSwgY3VycmVudEZlYXR1cmUuZ2V0KCdfZmVhdHVyZVN0b3JlJykubGF5ZXIub3B0aW9ucy50aXRsZSwgdHJ1ZSk7XHJcbiAgICAgICAgaGVhZGVyUm93LnNldChrZXksIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgZW1wdHlSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgfSBlbHNlIGlmIChrZXkgIT09ICdnZW9tZXRyeScpIHtcclxuICAgICAgICB0aXRsZVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICAgIGhlYWRlclJvdy5zZXQoa2V5LCBrZXksIHRydWUpO1xyXG4gICAgICAgIGVtcHR5Um93LnVuc2V0KGtleSwgdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGl0bGVSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgICBlbXB0eVJvdy51bnNldChrZXksIHRydWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShjdXJyZW50RmVhdHVyZUtleXMuaW5jbHVkZXMoa2V5KSkpIHtcclxuICAgICAgICBoZWFkZXJSb3cudW5zZXQoa2V5LCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCB0aXRsZUVtcHR5Um93cyA9IFt0aXRsZVJvdywgaGVhZGVyUm93LCBlbXB0eVJvd107XHJcbiAgICByZXR1cm4gdGl0bGVFbXB0eVJvd3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNpcmNsZVRvUG9pbnQoZmVhdHVyZSkge1xyXG4gICAgY29uc3QgcmFkaXVzOiBudW1iZXIgPSBmZWF0dXJlLmdldCgncmFkJyk7XHJcblxyXG4gICAgaWYgKHJhZGl1cykge1xyXG4gICAgICBjb25zdCBwb2ludCA9IG5ldyBvbFBvaW50KFtmZWF0dXJlLmdldCgnbG9uZ2l0dWRlJyksIGZlYXR1cmUuZ2V0KCdsYXRpdHVkZScpXSk7XHJcbiAgICAgIHBvaW50LnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgZmVhdHVyZS5nZXQoJ19wcm9qZWN0aW9uJykpO1xyXG4gICAgICBmZWF0dXJlLnNldEdlb21ldHJ5KHBvaW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRGb3JtKCkge1xyXG4gICAgdGhpcy5pbXBvcnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIGlucHV0UHJvajogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZU5hbWluZykge1xyXG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBmb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBsYXllcnM6IFtbXSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBsYXllcnNXaXRoU2VsZWN0aW9uOiBbW11dLFxyXG4gICAgICAgIGVuY29kaW5nOiBbRW5jb2RpbmdGb3JtYXQuVVRGOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBjb21iaW5lTGF5ZXJzOiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBzZXBhcmF0b3I6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBmZWF0dXJlSW5NYXBFeHRlbnQ6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBuYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBmb3JtYXQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBsYXllcnM6IFtbXSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBsYXllcnNXaXRoU2VsZWN0aW9uOiBbW11dLFxyXG4gICAgICAgIGVuY29kaW5nOiBbRW5jb2RpbmdGb3JtYXQuVVRGOCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBjb21iaW5lTGF5ZXJzOiBbdHJ1ZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBzZXBhcmF0b3I6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgICBmZWF0dXJlSW5NYXBFeHRlbnQ6IFtmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRmlsZUltcG9ydFN1Y2Nlc3MoZmlsZTogRmlsZSwgZmVhdHVyZXM6IEZlYXR1cmVbXSkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydFdpdGhTdHlsZScpKSB7XHJcbiAgICAgIGhhbmRsZUZpbGVJbXBvcnRTdWNjZXNzKFxyXG4gICAgICAgIGZpbGUsXHJcbiAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgdGhpcy5tYXAsXHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaGFuZGxlRmlsZUltcG9ydFN1Y2Nlc3MoXHJcbiAgICAgICAgZmlsZSxcclxuICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICB0aGlzLm1hcCxcclxuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHRoaXMuc3R5bGVMaXN0U2VydmljZSxcclxuICAgICAgICB0aGlzLnN0eWxlU2VydmljZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZpbGVJbXBvcnRFcnJvcihmaWxlOiBGaWxlLCBlcnJvcjogRXJyb3IpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICBoYW5kbGVGaWxlSW1wb3J0RXJyb3IoXHJcbiAgICAgIGZpbGUsXHJcbiAgICAgIGVycm9yLFxyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgICB0aGlzLmxhbmd1YWdlU2VydmljZSxcclxuICAgICAgdGhpcy5maWxlU2l6ZU1iXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblBvcHVwQmxvY2tlZEVycm9yKHByZUNoZWNrOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5sb2FkaW5nJC5uZXh0KGZhbHNlKTtcclxuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcclxuICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC50aXRsZScpO1xyXG4gICAgY29uc3QgZXh0cmFNZXNzYWdlID0gcHJlQ2hlY2sgP1xyXG4gICAgICB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnNlbGVjdEFnYWluJykgOlxyXG4gICAgICB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQucG9wdXBCbG9ja2VkLnJldHJ5Jyk7XHJcbiAgICBjb25zdCBtZXNzYWdlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LnBvcHVwQmxvY2tlZC50ZXh0JywgeyBleHRyYU1lc3NhZ2UgfSk7XHJcbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKG1lc3NhZ2UsIHRpdGxlLCB7IHRpbWVPdXQ6IDIwMDAwIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkZpbGVFeHBvcnRFcnJvcihlcnJvcjogRXJyb3IpIHtcclxuICAgIHRoaXMubG9hZGluZyQubmV4dChmYWxzZSk7XHJcbiAgICBoYW5kbGVGaWxlRXhwb3J0RXJyb3IoZXJyb3IsIHRoaXMubWVzc2FnZVNlcnZpY2UsIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZENvbmZpZygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JjZU5hbWluZycpICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5mb3JjZU5hbWluZyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnaW1wb3J0RXhwb3J0LmZvcmNlTmFtaW5nJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7XHJcbiAgICB0aGlzLmxvYWRFbmNvZGluZ3MoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbmNvZGluZ0RlZmF1bHRWYWx1ZShmb3JtYXQ6IEV4cG9ydEZvcm1hdCkge1xyXG4gICAgaWYgKGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVmNvbW1hIHx8IGZvcm1hdCA9PT0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbikge1xyXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjEgfSk7XHJcbiAgICAgIHJldHVybiBFbmNvZGluZ0Zvcm1hdC5MQVRJTjE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IGVuY29kaW5nOiBFbmNvZGluZ0Zvcm1hdC5VVEY4IH0pO1xyXG4gICAgICByZXR1cm4gRW5jb2RpbmdGb3JtYXQuVVRGODtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZEVuY29kaW5ncygpIHtcclxuICAgIHRoaXMuZW5jb2RpbmdzJC5uZXh0KEVuY29kaW5nRm9ybWF0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZUZvcm1hdHMobGF5ZXJzPzogQW55TGF5ZXJbXSkge1xyXG4gICAgbGV0IGFwcGxpZWRmb3JtYXRzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKEV4cG9ydEZvcm1hdCk7XHJcbiAgICBjb25zdCBmb3JtYXRzVHlwZSA9IHtcclxuICAgICAgb25seVVybDogZmFsc2UsXHJcbiAgICAgIG9ubHlWZWN0b3I6IGZhbHNlLFxyXG4gICAgICB2ZWN0b3JBbmRVcmw6IGZhbHNlLFxyXG4gICAgICBjdXN0b21MaXN0OiBmYWxzZVxyXG4gICAgfTtcclxuICAgIGNvbnN0IGN1c3RvbUxpc3QgPSBbXTtcclxuICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCkge1xyXG4gICAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcclxuICAgICAgICBpZiAoIWxheWVyKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQ/LmFsbG93ZWRGb3JtYXRzKSB7XHJcbiAgICAgICAgICBmb3JtYXRzVHlwZS5jdXN0b21MaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIGN1c3RvbUxpc3QucHVzaCh7bGF5ZXI6IGxheWVyLnRpdGxlLCBmb3JtYXRzOiB0aGlzLnZhbGlkYXRlTGlzdEZvcm1hdChsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZG93bmxvYWQuYWxsb3dlZEZvcm1hdHMpfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICEobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllcikgJiZcclxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxyXG4gICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLnVybFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCAmJlxyXG4gICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZC51cmwgfHwgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmRvd25sb2FkLmR5bmFtaWNVcmwpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBmb3JtYXRzVHlwZS52ZWN0b3JBbmRVcmwgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGF5ZXIgaW5zdGFuY2VvZiBWZWN0b3JMYXllcikge1xyXG4gICAgICAgICAgZm9ybWF0c1R5cGUub25seVZlY3RvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmIChmb3JtYXRzVHlwZS5vbmx5VXJsID09PSB0cnVlICYmIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgYXBwbGllZGZvcm1hdHMgPSBbJ1VSTCddO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGZvcm1hdHNUeXBlLm9ubHlWZWN0b3IgPT09IHRydWUgJiZcclxuICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VXJsID09PSBmYWxzZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XHJcbiAgICAgICAgaWYgKEV4cG9ydEZvcm1hdC5VUkwgaW4gdGhpcy5mb3JtYXRzJC52YWx1ZSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpLmZpbHRlcihcclxuICAgICAgICAgICAgKGtleSkgPT4ga2V5ICE9PSAnVVJMJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGFwcGxpZWRmb3JtYXRzID0ga2V5cztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZm9ybWF0c1R5cGUudmVjdG9yQW5kVXJsID09PSB0cnVlICYmXHJcbiAgICAgICAgZm9ybWF0c1R5cGUub25seVVybCA9PT0gZmFsc2UgJiZcclxuICAgICAgICBmb3JtYXRzVHlwZS5vbmx5VmVjdG9yID09PSBmYWxzZVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmNvbXB1dGVGb3JtYXRzKCk7IC8vIHJlc2V0XHJcbiAgICAgICAgaWYgKCEoRXhwb3J0Rm9ybWF0LlVSTCBpbiB0aGlzLmZvcm1hdHMkLnZhbHVlKSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZm9ybWF0cyQudmFsdWUpO1xyXG4gICAgICAgICAga2V5cy5wdXNoKCdVUkwnKTtcclxuICAgICAgICAgIGFwcGxpZWRmb3JtYXRzID0ga2V5cztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRDb25maWcoJ2ltcG9ydEV4cG9ydC5mb3JtYXRzJykgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCB2YWxpZGF0ZWRMaXN0Rm9ybWF0ID0gdGhpcy52YWxpZGF0ZUxpc3RGb3JtYXQoXHJcbiAgICAgICAgdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdpbXBvcnRFeHBvcnQuZm9ybWF0cycpXHJcbiAgICAgICk7XHJcbiAgICAgIGFwcGxpZWRmb3JtYXRzID0gdmFsaWRhdGVkTGlzdEZvcm1hdDtcclxuICAgIH1cclxuICAgIGlmIChmb3JtYXRzVHlwZS5jdXN0b21MaXN0KSB7XHJcbiAgICAgIGxldCBjb21tb25Gb3JtYXRzO1xyXG4gICAgICBjb25zdCBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cyA9IFtdO1xyXG4gICAgICBsZXQgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cyA9IGN1c3RvbUxpc3RbMF0uZm9ybWF0cztcclxuICAgICAgY3VzdG9tTGlzdC5tYXAobGlzdCA9PiB7XHJcbiAgICAgICAgbGF5ZXJzV2l0aEN1c3RvbUZvcm1hdHMucHVzaChsaXN0LmxheWVyKTtcclxuICAgICAgICBjb21tb25Gb3JtYXRzID0gbGlzdC5mb3JtYXRzLmZpbHRlcih2YWx1ZSA9PiBwcmV2aW91c0N1c3RvbUxpc3RGb3JtYXRzLmluY2x1ZGVzKHZhbHVlKSk7XHJcbiAgICAgICAgcHJldmlvdXNDdXN0b21MaXN0Rm9ybWF0cyA9IGxpc3QuZm9ybWF0cztcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGZpbmFsRm9ybWF0cyA9IGNvbW1vbkZvcm1hdHMuZmlsdGVyKHZhbHVlID0+IGFwcGxpZWRmb3JtYXRzLmluY2x1ZGVzKHZhbHVlKSk7XHJcbiAgICAgIGlmIChmaW5hbEZvcm1hdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChzdHJFbnVtKGZpbmFsRm9ybWF0cykpO1xyXG5cclxuICAgICAgICBpZiAobGF5ZXJzICYmIGxheWVycy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChsYXllcnMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFsZXJ0KFxyXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmV4cG9ydC5jdXN0b21MaXN0LnRleHQnLCB7IHZhbHVlOiBsYXllcnNXaXRoQ3VzdG9tRm9ybWF0cy5qb2luKCkgfSksXHJcbiAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0LmN1c3RvbUxpc3QudGl0bGUnKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm1hdHMkLm5leHQoW10pO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQoXHJcbiAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5leHBvcnQubm9Gb3JtYXQudGV4dCcpLFxyXG4gICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZXhwb3J0Lm5vRm9ybWF0LnRpdGxlJylcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybWF0cyQubmV4dChzdHJFbnVtKGFwcGxpZWRmb3JtYXRzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlTGlzdEZvcm1hdChmb3JtYXRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBmb3JtYXRzXHJcbiAgICAgIC5maWx0ZXIoKGZvcm1hdCkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuQ1NWY29tbWEudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24udG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HTUwudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HUFgudG9VcHBlckNhc2UoKSB8fFxyXG4gICAgICAgICAgZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HZW9KU09OLnRvVXBwZXJDYXNlKCkgfHxcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkgfHxcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuU2hhcGVmaWxlLnRvVXBwZXJDYXNlKCkgfHxcclxuICAgICAgICAgIGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuVVJMLnRvVXBwZXJDYXNlKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAubWFwKChmb3JtYXQpID0+IHtcclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1Zjb21tYS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuQ1NWY29tbWE7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5DU1ZzZW1pY29sb24udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LkNTVnNlbWljb2xvbjtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmb3JtYXQudG9VcHBlckNhc2UoKSA9PT0gRXhwb3J0Rm9ybWF0LkdNTC50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgICAgICBmb3JtYXQgPSBFeHBvcnRGb3JtYXQuR01MO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuR1BYLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HUFg7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5HZW9KU09OLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5HZW9KU09OO1xyXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZvcm1hdC50b1VwcGVyQ2FzZSgpID09PSBFeHBvcnRGb3JtYXQuS01MLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgIGZvcm1hdCA9IEV4cG9ydEZvcm1hdC5LTUw7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5TaGFwZWZpbGUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LlNoYXBlZmlsZTtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9ybWF0LnRvVXBwZXJDYXNlKCkgPT09IEV4cG9ydEZvcm1hdC5VUkwudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgZm9ybWF0ID0gRXhwb3J0Rm9ybWF0LlVSTDtcclxuICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb2RlQ2hhbmdlZChtb2RlKSB7XHJcbiAgICB0aGlzLnNlbGVjdE1vZGUuZW1pdChtb2RlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25GaWxlRXhwb3J0U3VjY2VzcygpIHtcclxuICAgIGhhbmRsZUZpbGVFeHBvcnRTdWNjZXNzKHRoaXMubWVzc2FnZVNlcnZpY2UsIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIG9uSW1wb3J0RXhwb3J0Q2hhbmdlKGV2ZW50KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkTW9kZSA9IGV2ZW50LnZhbHVlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW1wb3J0LWV4cG9ydC10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIj5cclxuICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcclxuICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRNb2RlXCJcclxuICAgICAgICAoY2hhbmdlKT1cIm9uSW1wb3J0RXhwb3J0Q2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidpbXBvcnQnXCI+XHJcbiAgICAgICAgICB7eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0VGFiVGl0bGUnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiJ2V4cG9ydCdcIj5cclxuICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRUYWJUaXRsZScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuPC9kaXY+XHJcblxyXG48Zm9ybSBjbGFzcz1cImlnby1mb3JtXCIgW2Zvcm1Hcm91cF09XCJpbXBvcnRGb3JtXCIgKm5nSWY9XCJzZWxlY3RlZE1vZGUgPT09ICdpbXBvcnQnXCI+XHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0UHJvalBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgWyh2YWx1ZSldPVwiaW5wdXRQcm9qXCI+XHJcbiAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9qZWN0aW9uIG9mIChwcm9qZWN0aW9ucyQgfCBhc3luYylcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cInByb2plY3Rpb25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgPHAgbWF0LWxpbmUgKm5nSWY9XCJwcm9qZWN0aW9uLnRyYW5zbGF0ZUtleVwiPnt7KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMuJyArIHByb2plY3Rpb24udHJhbnNsYXRlS2V5KSB8IHRyYW5zbGF0ZTogcHJvamVjdGlvbn19PC9wPlxyXG4gICAgICAgICAgPHAgbWF0LWxpbmUgKm5nSWY9XCIhcHJvamVjdGlvbi50cmFuc2xhdGVLZXlcIj57e3Byb2plY3Rpb24uYWxpYXN9fTwvcD5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgIFttYXRUb29sdGlwXT1cImltcG9ydEZvcm0uaW52YWxpZCA/ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLmNob29zZScgfCB0cmFuc2xhdGUpIDogKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSlcIlxyXG4gICAgY2xhc3M9XCJpZ28tZm9ybS1idXR0b24tZ3JvdXBcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImltcG9ydEZvcm0uaW52YWxpZCB8fCAobG9hZGluZyQgfCBhc3luYylcIlxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XHJcbiAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEJ1dHRvbicgfCB0cmFuc2xhdGV9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIGhpZGRlblxyXG4gICAgICAjZmlsZUlucHV0XHJcbiAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgW3N0eWxlLmRpc3BsYXldPVwiJ25vbmUnXCJcclxuICAgICAgKGNsaWNrKT1cImZpbGVJbnB1dC52YWx1ZSA9IG51bGxcIlxyXG4gICAgICAoY2hhbmdlKT1cImltcG9ydEZpbGVzKCRldmVudC50YXJnZXQuZmlsZXMpXCI+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuPHNlY3Rpb24gY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiICpuZ0lmPVwic2VsZWN0ZWRNb2RlID09PSAnaW1wb3J0J1wiPlxyXG4gIDxoND57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0Q2xhcmlmaWNhdGlvbnMnIHwgdHJhbnNsYXRlfX08L2g0PlxyXG4gIDx1bD5cclxuICAgIDxsaT57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uaW1wb3J0U2l6ZU1heCcgfCB0cmFuc2xhdGU6IHtzaXplOiBmaWxlU2l6ZU1ifSB9fTwvbGk+XHJcbiAgICA8bGk+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmltcG9ydEZvcm1hdEF1dGhvcml6ZWQnIHwgdHJhbnNsYXRlfX08L2xpPlxyXG4gICAgPGxpPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5pbXBvcnRTaHBaaXAnIHwgdHJhbnNsYXRlfX08L2xpPlxyXG4gIDwvdWw+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxzZWN0aW9uIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cIihleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRNb2RlID09PSAnZXhwb3J0J1wiPlxyXG4gIDxoND57eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0Tm9MYXllcnNFeHBvcnRhYmxlJyB8IHRyYW5zbGF0ZX19PC9oND5cclxuPC9zZWN0aW9uPlxyXG5cclxuPGZvcm0gY2xhc3M9XCJpZ28tZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiICpuZ0lmPVwiKGV4cG9ydGFibGVMYXllcnMkIHwgYXN5bmMpLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRNb2RlID09PSAnZXhwb3J0J1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydExheWVyUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICBbKHZhbHVlKV09XCJsYXllcnNcIiBtdWx0aXBsZT5cclxuICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICAgICAge3tsYXllcnMubGVuZ3RoID8gZ2V0TGF5ZXJUaXRsZUJ5SWQobGF5ZXJzWzBdKSA6ICcnfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibGF5ZXJzLmxlbmd0aCA+IDFcIiBjbGFzcz1cImV4cG9ydC1zZWxlY3QtdHJpZ2dlclwiPlxyXG4gICAgICAgICAgICAoK3t7bGF5ZXJzLmxlbmd0aCAtIDF9fSB7eyhsYXllcnM/Lmxlbmd0aCA9PT0gMiA/ICdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ub3RoZXInIDogJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5vdGhlcnMnKSB8IHRyYW5zbGF0ZSB9fSlcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGxheWVyIG9mIChleHBvcnRhYmxlTGF5ZXJzJCB8IGFzeW5jKVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2lnby1leHBvcnQtbGF5ZXItbWF0LW9wdGlvbic6IGxheWVySGFzU2VsZWN0ZWRGZWF0dXJlcyhsYXllcil9XCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJsYXllci5pZFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICA8cCBtYXQtbGluZT57e2xheWVyLnRpdGxlfX08L3A+XHJcbiAgICAgICAgICA8cCBtYXQtbGluZT5cclxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgKm5nSWY9XCJsYXllckhhc1NlbGVjdGVkRmVhdHVyZXMobGF5ZXIpXCJcclxuICAgICAgICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYWZ0ZXInXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwib25seVNlbGVjdGVkQ2xpY2soJGV2ZW50LGxheWVyLmlkKVwiXHJcbiAgICAgICAgICAgICAgKGNoZWNrZWQpPVwiaW5MYXllcnNJZFRvRXhwb3J0U2VsZWN0aW9uT25seShsYXllcilcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25seVNlbGVjdGVkKCRldmVudCxsYXllci5pZClcIj5cclxuICAgICAgICAgICAgICA8c21hbGw+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydFNlbGVjdGVkRmVhdHVyZScgfCB0cmFuc2xhdGV9fTwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpZ28taW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZvcm1hdFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZm9ybWF0XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmb3JtYXRzJCB8IGFzeW5jKS5sZW5ndGggIT09IDBcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBmb3JtYXQgb2YgKGZvcm1hdHMkIHwgYXN5bmMpIHwga2V5dmFsdWVcIiBbdmFsdWVdPVwiZm9ybWF0LmtleVwiPlxyXG4gICAgICAgICAgICB7eydpZ28uZ2VvLmV4cG9ydC5mb3JtYXQuJyArIGZvcm1hdC52YWx1ZSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIoZm9ybWF0cyQgfCBhc3luYykubGVuZ3RoID09PSAwXCIgZGlzYWJsZWQ9XCJ0cnVlXCI+XHJcbiAgICAgICAgICB7eydpZ28uZ2VvLmV4cG9ydC5ub0Zvcm1hdC50aXRsZScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImZvcmNlTmFtaW5nICYmIGZvcm0udmFsdWUuZm9ybWF0ICE9PSAnVVJMJ1wiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0RmlsZU5hbWVQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fVwiPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8IGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJ1wiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5lbmNvZGluZ1BsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5jb2RpbmdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGVuY29kaW5ncyQgfCBhc3luYykubGVuZ3RoICE9PSAwXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZW5jb2Rpbmcgb2YgKGVuY29kaW5ncyQgfCBhc3luYykgfCBrZXl2YWx1ZVwiIFt2YWx1ZV09XCJlbmNvZGluZy5rZXlcIj5cclxuICAgICAgICAgICAge3snaWdvLmdlby5leHBvcnQuZW5jb2RpbmcuJyArIGVuY29kaW5nLnZhbHVlIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImV4cG9ydC1jb21iaW5lLWxheWVycyBtYXQtdHlwb2dyYXBoeVwiICpuZ0lmPVwibGF5ZXJzLmxlbmd0aCA+IDEgJiYgKGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8IGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJylcIj5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tYmluZUxheWVyc1wiXHJcbiAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIj5cclxuICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRDb21iaW5lUmVzdWx0cycgfCB0cmFuc2xhdGV9fVxyXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZXhwb3J0LXNlcGFyYXRvciBtYXQtdHlwb2dyYXBoeVwiICpuZ0lmPVwibGF5ZXJzLmxlbmd0aCA+IDEgJiYgKGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWY29tbWEnIHx8IGZvcm0udmFsdWUuZm9ybWF0ID09PSAnQ1NWc2VtaWNvbG9uJykgJiYgZm9ybS52YWx1ZS5jb21iaW5lTGF5ZXJzXCI+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlcGFyYXRvclwiXHJcbiAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIj5cclxuICAgICAgICAgIHt7J2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5leHBvcnRTZXBhcmF0b3InIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImV4cG9ydC1vcHRpb25zIG1hdC10eXBvZ3JhcGh5XCIgKm5nSWY9XCJmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCdcIj5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmVhdHVyZUluTWFwRXh0ZW50XCJcclxuICAgICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiPlxyXG4gICAgICAgICAge3snaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEZlYXR1cmVJbkV4dGVudCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiIWZvcm0udmFsaWQgfHwgKGxvYWRpbmckIHwgYXN5bmMpXCJcclxuICAgICAgKGNsaWNrKT1cImhhbmRsZUV4cG9ydEZvcm1TdWJtaXQoZm9ybS52YWx1ZSlcIj5cclxuICAgICAge3tmb3JtLnZhbHVlLmZvcm1hdCAhPT0gJ1VSTCcgID8gKCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0uZXhwb3J0QnV0dG9uJyB8IHRyYW5zbGF0ZSk6IChmb3JtLnZhbHVlLmxheWVycy5sZW5ndGggPiAxICA/ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbkxpbmtzJyB8IHRyYW5zbGF0ZSk6ICgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLmV4cG9ydEJ1dHRvbkxpbmsnIHwgdHJhbnNsYXRlKSl9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8aWdvLXNwaW5uZXIgW3Nob3duXT1cImxvYWRpbmckIHwgYXN5bmNcIj48L2lnby1zcGlubmVyPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9mb3JtPlxyXG4iXX0=
|