@igo2/geo 1.11.0 → 1.12.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/assets/icons/cross_black_18px.svg +88 -88
- package/assets/icons/place_blue_36px.svg +55 -55
- package/assets/icons/place_green_36px.svg +55 -55
- package/assets/icons/place_red_36px.svg +55 -55
- package/assets/icons/place_yellow_36px.svg +55 -55
- package/bundles/igo2-geo.umd.js +3075 -1245
- package/bundles/igo2-geo.umd.js.map +1 -1
- package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +1 -1
- package/esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js +1 -1
- package/esm2015/lib/catalog/catalog-browser/catalog-browser.component.js +1 -1
- package/esm2015/lib/catalog/catalog-browser/catalog-browser.module.js +1 -1
- package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +1 -1
- package/esm2015/lib/catalog/catalog-library/catalog-library-item.component.js +1 -1
- package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +1 -1
- package/esm2015/lib/catalog/catalog-library/catalog-library.module.js +1 -1
- package/esm2015/lib/catalog/catalog.module.js +1 -1
- package/esm2015/lib/catalog/index.js +1 -1
- package/esm2015/lib/catalog/shared/catalog.abstract.js +1 -1
- package/esm2015/lib/catalog/shared/catalog.enum.js +1 -1
- package/esm2015/lib/catalog/shared/catalog.interface.js +1 -1
- package/esm2015/lib/catalog/shared/catalog.service.js +113 -42
- package/esm2015/lib/catalog/shared/index.js +1 -1
- package/esm2015/lib/datasource/datasource.module.js +1 -1
- package/esm2015/lib/datasource/index.js +1 -1
- package/esm2015/lib/datasource/shared/capabilities.service.js +1 -1
- package/esm2015/lib/datasource/shared/datasource.service.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/any-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/any-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/carto-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/cluster-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/cluster-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/data.service.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/feature-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/feature-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/index.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/mvt-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/osm-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/websocket-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wfs-datasource.js +4 -1
- package/esm2015/lib/datasource/shared/datasources/wfs.service.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wms-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wms-datasource.js +5 -2
- package/esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/wmts-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js +1 -1
- package/esm2015/lib/datasource/shared/datasources/xyz-datasource.js +1 -1
- package/esm2015/lib/datasource/shared/index.js +1 -1
- package/esm2015/lib/datasource/shared/options/index.js +1 -1
- package/esm2015/lib/datasource/shared/options/options-api.interface.js +1 -1
- package/esm2015/lib/datasource/shared/options/options-api.providers.js +1 -1
- package/esm2015/lib/datasource/shared/options/options-api.service.js +1 -1
- package/esm2015/lib/datasource/shared/options/options.service.js +1 -1
- package/esm2015/lib/datasource/utils/esri-style-generator.js +1 -1
- package/esm2015/lib/datasource/utils/index.js +1 -1
- package/esm2015/lib/datasource/utils/tilegrid.js +1 -1
- package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +1 -1
- package/esm2015/lib/directions/directions-buttons/index.js +1 -1
- package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +1 -1
- package/esm2015/lib/directions/directions-inputs/index.js +1 -1
- package/esm2015/lib/directions/directions-results/directions-results.component.js +1 -1
- package/esm2015/lib/directions/directions-results/index.js +1 -1
- package/esm2015/lib/directions/directions-sources/directions-source.interface.js +1 -1
- package/esm2015/lib/directions/directions-sources/directions-source.js +1 -1
- package/esm2015/lib/directions/directions-sources/directions-source.provider.js +1 -1
- package/esm2015/lib/directions/directions-sources/index.js +1 -1
- package/esm2015/lib/directions/directions-sources/osrm-directions-source.js +1 -1
- package/esm2015/lib/directions/directions.component.js +1 -1
- package/esm2015/lib/directions/directions.module.js +1 -1
- package/esm2015/lib/directions/index.js +1 -1
- package/esm2015/lib/directions/shared/directions-source.service.js +1 -1
- package/esm2015/lib/directions/shared/directions.enum.js +1 -1
- package/esm2015/lib/directions/shared/directions.interface.js +1 -1
- package/esm2015/lib/directions/shared/directions.service.js +1 -1
- package/esm2015/lib/directions/shared/directions.utils.js +1 -1
- package/esm2015/lib/directions/shared/index.js +1 -1
- package/esm2015/lib/directions/shared/store.js +1 -1
- package/esm2015/lib/download/download-button/download-button.component.js +1 -1
- package/esm2015/lib/download/download-button/index.js +1 -1
- package/esm2015/lib/download/download.module.js +1 -1
- package/esm2015/lib/download/index.js +1 -1
- package/esm2015/lib/download/shared/download.interface.js +1 -1
- package/esm2015/lib/download/shared/download.service.js +1 -1
- package/esm2015/lib/download/shared/index.js +1 -1
- package/esm2015/lib/draw/draw/draw-popup.component.js +21 -15
- package/esm2015/lib/draw/draw/draw-shorcuts.component.js +1 -1
- package/esm2015/lib/draw/draw/draw.component.js +185 -77
- package/esm2015/lib/draw/draw/draw.module.js +1 -1
- package/esm2015/lib/draw/drawingTool.module.js +1 -1
- package/esm2015/lib/draw/index.js +1 -1
- package/esm2015/lib/draw/shared/draw-icon.service.js +1 -1
- package/esm2015/lib/draw/shared/draw-style.service.js +24 -5
- package/esm2015/lib/draw/shared/draw.enum.js +17 -1
- package/esm2015/lib/draw/shared/draw.interface.js +1 -1
- package/esm2015/lib/draw/shared/draw.utils.js +1 -1
- package/esm2015/lib/draw/shared/index.js +1 -1
- package/esm2015/lib/feature/feature-details/feature-details.component.js +119 -43
- package/esm2015/lib/feature/feature-details/feature-details.directive.js +2 -57
- package/esm2015/lib/feature/feature-details/feature-details.module.js +1 -1
- package/esm2015/lib/feature/feature-form/feature-form.component.js +1 -1
- package/esm2015/lib/feature/feature-form/feature-form.module.js +1 -1
- package/esm2015/lib/feature/feature.module.js +1 -1
- package/esm2015/lib/feature/index.js +1 -1
- package/esm2015/lib/feature/shared/feature.enums.js +1 -1
- package/esm2015/lib/feature/shared/feature.interfaces.js +1 -1
- package/esm2015/lib/feature/shared/feature.utils.js +1 -1
- package/esm2015/lib/feature/shared/index.js +1 -1
- package/esm2015/lib/feature/shared/store.js +1 -1
- package/esm2015/lib/feature/shared/strategies/in-map-extent.js +1 -1
- package/esm2015/lib/feature/shared/strategies/in-map-resolution.js +1 -1
- package/esm2015/lib/feature/shared/strategies/index.js +1 -1
- package/esm2015/lib/feature/shared/strategies/loading-layer.js +1 -1
- package/esm2015/lib/feature/shared/strategies/loading.js +1 -1
- package/esm2015/lib/feature/shared/strategies/selection.js +1 -1
- package/esm2015/lib/feature/shared/strategies.utils.js +1 -1
- package/esm2015/lib/filter/filter.module.js +6 -3
- package/esm2015/lib/filter/index.js +1 -1
- package/esm2015/lib/filter/ogc-filter-button/index.js +1 -1
- package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +32 -7
- package/esm2015/lib/filter/ogc-filter-form/index.js +1 -1
- package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +1 -1
- package/esm2015/lib/filter/ogc-filter-selection/index.js +1 -1
- package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +652 -290
- package/esm2015/lib/filter/ogc-filter-time/index.js +1 -1
- package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.js +1 -1
- package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-form/index.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-form/ogc-filterable-form.component.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-item/index.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +3 -2
- package/esm2015/lib/filter/ogc-filterable-list/index.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js +1 -1
- package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js +1 -1
- package/esm2015/lib/filter/shared/filterable-datasource.pipe.js +3 -2
- package/esm2015/lib/filter/shared/index.js +1 -1
- package/esm2015/lib/filter/shared/ogc-filter-time.service.js +1 -1
- package/esm2015/lib/filter/shared/ogc-filter.enum.js +1 -1
- package/esm2015/lib/filter/shared/ogc-filter.interface.js +1 -1
- package/esm2015/lib/filter/shared/ogc-filter.js +17 -6
- package/esm2015/lib/filter/shared/ogc-filter.service.js +1 -1
- package/esm2015/lib/filter/shared/spatial-filter.enum.js +1 -1
- package/esm2015/lib/filter/shared/spatial-filter.interface.js +1 -1
- package/esm2015/lib/filter/shared/spatial-filter.service.js +1 -1
- package/esm2015/lib/filter/shared/time-filter.enum.js +1 -1
- package/esm2015/lib/filter/shared/time-filter.interface.js +1 -1
- package/esm2015/lib/filter/shared/time-filter.service.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js +1 -1
- package/esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js +1 -1
- package/esm2015/lib/filter/time-filter-button/index.js +1 -1
- package/esm2015/lib/filter/time-filter-button/time-filter-button.component.js +1 -1
- package/esm2015/lib/filter/time-filter-form/index.js +1 -1
- package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +1 -1
- package/esm2015/lib/filter/time-filter-item/index.js +1 -1
- package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +1 -1
- package/esm2015/lib/filter/time-filter-list/index.js +1 -1
- package/esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js +1 -1
- package/esm2015/lib/filter/time-filter-list/time-filter-list.component.js +1 -1
- package/esm2015/lib/geo.module.js +1 -1
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js +1 -1
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +1 -1
- package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js +1 -1
- package/esm2015/lib/geometry/geometry.module.js +1 -1
- package/esm2015/lib/geometry/index.js +1 -1
- package/esm2015/lib/geometry/shared/controls/draw.js +1 -1
- package/esm2015/lib/geometry/shared/controls/index.js +1 -1
- package/esm2015/lib/geometry/shared/controls/modify.js +1 -1
- package/esm2015/lib/geometry/shared/controls/slice.js +1 -1
- package/esm2015/lib/geometry/shared/geometry.errors.js +1 -1
- package/esm2015/lib/geometry/shared/geometry.interfaces.js +1 -1
- package/esm2015/lib/geometry/shared/geometry.utils.js +1 -1
- package/esm2015/lib/geometry/shared/index.js +1 -1
- package/esm2015/lib/import-export/export-button/export-button.component.js +1 -1
- package/esm2015/lib/import-export/export-button/index.js +1 -1
- package/esm2015/lib/import-export/import-export/import-export.component.js +1 -1
- package/esm2015/lib/import-export/import-export/index.js +1 -1
- package/esm2015/lib/import-export/import-export.module.js +1 -1
- package/esm2015/lib/import-export/index.js +1 -1
- package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +1 -1
- package/esm2015/lib/import-export/shared/export.errors.js +1 -1
- package/esm2015/lib/import-export/shared/export.interface.js +1 -1
- package/esm2015/lib/import-export/shared/export.service.js +10 -2
- package/esm2015/lib/import-export/shared/export.type.js +1 -1
- package/esm2015/lib/import-export/shared/export.utils.js +1 -1
- package/esm2015/lib/import-export/shared/import.errors.js +1 -1
- package/esm2015/lib/import-export/shared/import.interface.js +1 -1
- package/esm2015/lib/import-export/shared/import.service.js +1 -1
- package/esm2015/lib/import-export/shared/import.utils.js +65 -38
- package/esm2015/lib/import-export/shared/index.js +1 -1
- package/esm2015/lib/import-export/style-list/index.js +1 -1
- package/esm2015/lib/import-export/style-list/style-list.interface.js +1 -1
- package/esm2015/lib/import-export/style-list/style-list.module.js +1 -1
- package/esm2015/lib/import-export/style-list/style-list.provider.js +1 -1
- package/esm2015/lib/import-export/style-list/style-list.service.js +1 -1
- package/esm2015/lib/layer/index.js +1 -1
- package/esm2015/lib/layer/layer-item/index.js +1 -1
- package/esm2015/lib/layer/layer-item/layer-item.component.js +15 -8
- package/esm2015/lib/layer/layer-legend/index.js +1 -1
- package/esm2015/lib/layer/layer-legend/layer-legend.component.js +6 -5
- package/esm2015/lib/layer/layer-legend-item/index.js +1 -1
- package/esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js +1 -1
- package/esm2015/lib/layer/layer-legend-list/index.js +1 -1
- package/esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js +1 -1
- package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +1 -1
- package/esm2015/lib/layer/layer-list/index.js +1 -1
- package/esm2015/lib/layer/layer-list/layer-list-binding.directive.js +1 -1
- package/esm2015/lib/layer/layer-list/layer-list.component.js +2 -2
- package/esm2015/lib/layer/layer-list/layer-list.enum.js +1 -1
- package/esm2015/lib/layer/layer-list-tool/index.js +1 -1
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +1 -1
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js +1 -1
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js +1 -1
- package/esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js +1 -1
- package/esm2015/lib/layer/layer.module.js +1 -1
- package/esm2015/lib/layer/shared/clusterParam.js +1 -1
- package/esm2015/lib/layer/shared/index.js +1 -1
- package/esm2015/lib/layer/shared/layer.enums.js +1 -1
- package/esm2015/lib/layer/shared/layer.service.js +44 -20
- package/esm2015/lib/layer/shared/layers/any-layer.interface.js +1 -1
- package/esm2015/lib/layer/shared/layers/any-layer.js +1 -1
- package/esm2015/lib/layer/shared/layers/image-layer.interface.js +1 -1
- package/esm2015/lib/layer/shared/layers/image-layer.js +1 -1
- package/esm2015/lib/layer/shared/layers/index.js +1 -1
- package/esm2015/lib/layer/shared/layers/layer.interface.js +1 -1
- package/esm2015/lib/layer/shared/layers/layer.js +1 -1
- package/esm2015/lib/layer/shared/layers/tile-layer.interface.js +1 -1
- package/esm2015/lib/layer/shared/layers/tile-layer.js +1 -1
- package/esm2015/lib/layer/shared/layers/vector-layer.interface.js +1 -1
- package/esm2015/lib/layer/shared/layers/vector-layer.js +94 -43
- package/esm2015/lib/layer/shared/layers/vectortile-layer.interface.js +1 -1
- package/esm2015/lib/layer/shared/layers/vectortile-layer.js +1 -1
- package/esm2015/lib/layer/shared/style.service.js +80 -11
- package/esm2015/lib/layer/shared/vector-style.interface.js +1 -1
- package/esm2015/lib/layer/track-feature-button/index.js +1 -1
- package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +1 -1
- package/esm2015/lib/layer/utils/image-watcher.js +1 -1
- package/esm2015/lib/layer/utils/index.js +1 -1
- package/esm2015/lib/layer/utils/layer.utils.js +1 -1
- package/esm2015/lib/layer/utils/layerSync-watcher.js +4 -8
- package/esm2015/lib/layer/utils/outputLegend.js +5 -3
- package/esm2015/lib/layer/utils/tile-watcher.js +1 -1
- package/esm2015/lib/layer/utils/vector-watcher.js +1 -1
- package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js +1 -1
- package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.component.js +1 -1
- package/esm2015/lib/map/baselayers-switcher/index.js +1 -1
- package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +1 -1
- package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +52 -17
- package/esm2015/lib/map/geolocate-button/index.js +1 -1
- package/esm2015/lib/map/index.js +2 -1
- package/esm2015/lib/map/info-section/index.js +1 -1
- package/esm2015/lib/map/info-section/info-section.component.js +1 -1
- package/esm2015/lib/map/map-browser/index.js +1 -1
- package/esm2015/lib/map/map-browser/map-browser.component.js +2 -2
- package/esm2015/lib/map/map-center/index.js +1 -1
- package/esm2015/lib/map/map-center/map-center.component.js +1 -1
- package/esm2015/lib/map/map.module.js +6 -1
- package/esm2015/lib/map/menu-button/index.js +1 -1
- package/esm2015/lib/map/menu-button/menu-button.component.js +1 -1
- package/esm2015/lib/map/offline-button/index.js +1 -1
- package/esm2015/lib/map/offline-button/offline-button.component.js +1 -1
- package/esm2015/lib/map/rotation-button/index.js +1 -1
- package/esm2015/lib/map/rotation-button/rotation-button.component.js +1 -1
- package/esm2015/lib/map/shared/controllers/controller.js +1 -1
- package/esm2015/lib/map/shared/controllers/geolocation.js +310 -0
- package/esm2015/lib/map/shared/controllers/index.js +2 -1
- package/esm2015/lib/map/shared/controllers/view.js +17 -1
- package/esm2015/lib/map/shared/hover-feature.directive.js +8 -7
- package/esm2015/lib/map/shared/index.js +1 -1
- package/esm2015/lib/map/shared/map-pointer-position.directive.js +1 -1
- package/esm2015/lib/map/shared/map.enums.js +1 -1
- package/esm2015/lib/map/shared/map.interface.js +1 -1
- package/esm2015/lib/map/shared/map.js +15 -135
- package/esm2015/lib/map/shared/map.service.js +1 -1
- package/esm2015/lib/map/shared/map.utils.js +1 -1
- package/esm2015/lib/map/shared/mapOffline.directive.js +1 -1
- package/esm2015/lib/map/shared/projection.interfaces.js +1 -1
- package/esm2015/lib/map/shared/projection.service.js +1 -1
- package/esm2015/lib/map/shared/projection.utils.js +1 -1
- package/esm2015/lib/map/swipe-control/index.js +1 -1
- package/esm2015/lib/map/swipe-control/swipe-control.component.js +1 -1
- package/esm2015/lib/map/utils/layer-watcher.js +1 -1
- package/esm2015/lib/map/wake-lock-button/index.js +2 -0
- package/esm2015/lib/map/wake-lock-button/wake-lock-button.component.js +122 -0
- package/esm2015/lib/map/zoom-button/index.js +1 -1
- package/esm2015/lib/map/zoom-button/zoom-button.component.js +1 -1
- package/esm2015/lib/measure/index.js +1 -1
- package/esm2015/lib/measure/measure.module.js +1 -1
- package/esm2015/lib/measure/measurer/measure-format.pipe.js +1 -1
- package/esm2015/lib/measure/measurer/measurer-dialog.component.js +1 -1
- package/esm2015/lib/measure/measurer/measurer-item.component.js +1 -1
- package/esm2015/lib/measure/measurer/measurer.component.js +1 -1
- package/esm2015/lib/measure/measurer/measurer.module.js +1 -1
- package/esm2015/lib/measure/shared/index.js +1 -1
- package/esm2015/lib/measure/shared/measure.enum.js +1 -1
- package/esm2015/lib/measure/shared/measure.interfaces.js +1 -1
- package/esm2015/lib/measure/shared/measure.utils.js +1 -1
- package/esm2015/lib/metadata/index.js +1 -1
- package/esm2015/lib/metadata/metadata-button/index.js +1 -1
- package/esm2015/lib/metadata/metadata-button/metadata-button.component.js +13 -2
- package/esm2015/lib/metadata/metadata.module.js +1 -1
- package/esm2015/lib/metadata/shared/index.js +1 -1
- package/esm2015/lib/metadata/shared/metadata.interface.js +1 -1
- package/esm2015/lib/metadata/shared/metadata.service.js +1 -1
- package/esm2015/lib/offline/geoDB/geoDB.enums.js +6 -0
- package/esm2015/lib/offline/geoDB/geoDB.interface.js +2 -0
- package/esm2015/lib/offline/geoDB/geoDB.service.js +161 -0
- package/esm2015/lib/offline/geoDB/index.js +4 -0
- package/esm2015/lib/offline/index.js +3 -0
- package/esm2015/lib/offline/shared/geo-network.service.js +66 -0
- package/esm2015/lib/offline/shared/index.js +2 -0
- package/esm2015/lib/overlay/index.js +1 -1
- package/esm2015/lib/overlay/overlay.module.js +1 -1
- package/esm2015/lib/overlay/shared/index.js +1 -1
- package/esm2015/lib/overlay/shared/overlay-marker-style.utils.js +1 -1
- package/esm2015/lib/overlay/shared/overlay.directive.js +1 -1
- package/esm2015/lib/overlay/shared/overlay.enum.js +1 -1
- package/esm2015/lib/overlay/shared/overlay.js +1 -1
- package/esm2015/lib/overlay/shared/overlay.service.js +1 -1
- package/esm2015/lib/overlay/shared/overlay.utils.js +3 -3
- package/esm2015/lib/print/index.js +1 -1
- package/esm2015/lib/print/print/print.component.js +1 -1
- package/esm2015/lib/print/print-form/index.js +1 -1
- package/esm2015/lib/print/print-form/print-form.component.js +1 -1
- package/esm2015/lib/print/print.module.js +1 -1
- package/esm2015/lib/print/shared/index.js +1 -1
- package/esm2015/lib/print/shared/print.interface.js +1 -1
- package/esm2015/lib/print/shared/print.service.js +22 -16
- package/esm2015/lib/print/shared/print.type.js +1 -1
- package/esm2015/lib/query/index.js +1 -1
- package/esm2015/lib/query/query.module.js +5 -4
- package/esm2015/lib/query/shared/index.js +1 -1
- package/esm2015/lib/query/shared/query-search-source.js +1 -1
- package/esm2015/lib/query/shared/query-search-source.providers.js +1 -1
- package/esm2015/lib/query/shared/query.directive.js +1 -1
- package/esm2015/lib/query/shared/query.enums.js +1 -1
- package/esm2015/lib/query/shared/query.interfaces.js +1 -1
- package/esm2015/lib/query/shared/query.service.js +33 -6
- package/esm2015/lib/query/shared/query.utils.js +1 -1
- package/esm2015/lib/search/index.js +1 -1
- package/esm2015/lib/search/search-bar/search-bar.component.js +1 -1
- package/esm2015/lib/search/search-bar/search-bar.module.js +1 -1
- package/esm2015/lib/search/search-bar/search-url-param.directive.js +1 -1
- package/esm2015/lib/search/search-results/search-results-add-button.component.js +1 -1
- package/esm2015/lib/search/search-results/search-results-item.component.js +1 -1
- package/esm2015/lib/search/search-results/search-results.component.js +1 -1
- package/esm2015/lib/search/search-results/search-results.module.js +1 -1
- package/esm2015/lib/search/search-selector/search-selector.component.js +1 -1
- package/esm2015/lib/search/search-selector/search-selector.module.js +1 -1
- package/esm2015/lib/search/search-settings/search-settings.component.js +1 -1
- package/esm2015/lib/search/search-settings/search-settings.module.js +1 -1
- package/esm2015/lib/search/search.module.js +1 -1
- package/esm2015/lib/search/shared/index.js +1 -1
- package/esm2015/lib/search/shared/search-pointer-summary.directive.js +1 -1
- package/esm2015/lib/search/shared/search-source-service.providers.js +1 -1
- package/esm2015/lib/search/shared/search-source.service.js +1 -1
- package/esm2015/lib/search/shared/search.enums.js +1 -1
- package/esm2015/lib/search/shared/search.interfaces.js +1 -1
- package/esm2015/lib/search/shared/search.service.js +1 -1
- package/esm2015/lib/search/shared/search.utils.js +1 -1
- package/esm2015/lib/search/shared/sources/cadastre.js +1 -1
- package/esm2015/lib/search/shared/sources/cadastre.providers.js +1 -1
- package/esm2015/lib/search/shared/sources/coordinates.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/coordinates.js +1 -1
- package/esm2015/lib/search/shared/sources/coordinates.providers.js +1 -1
- package/esm2015/lib/search/shared/sources/icherche.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/icherche.js +1 -1
- package/esm2015/lib/search/shared/sources/icherche.providers.js +1 -1
- package/esm2015/lib/search/shared/sources/ilayer.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/ilayer.js +1 -1
- package/esm2015/lib/search/shared/sources/ilayer.providers.js +1 -1
- package/esm2015/lib/search/shared/sources/index.js +1 -1
- package/esm2015/lib/search/shared/sources/nominatim.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/nominatim.js +2 -2
- package/esm2015/lib/search/shared/sources/nominatim.providers.js +1 -1
- package/esm2015/lib/search/shared/sources/source.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/source.js +2 -2
- package/esm2015/lib/search/shared/sources/storedqueries.interfaces.js +1 -1
- package/esm2015/lib/search/shared/sources/storedqueries.js +1 -1
- package/esm2015/lib/search/shared/sources/storedqueries.providers.js +1 -1
- package/esm2015/lib/toast/index.js +1 -1
- package/esm2015/lib/toast/toast.component.js +1 -1
- package/esm2015/lib/toast/toast.module.js +1 -1
- package/esm2015/lib/utils/commonVectorStyle.interface.js +1 -1
- package/esm2015/lib/utils/commonVectorStyle.js +1 -1
- package/esm2015/lib/utils/googleLinks.js +1 -1
- package/esm2015/lib/utils/id-generator.js +1 -1
- package/esm2015/lib/utils/index.js +1 -1
- package/esm2015/lib/utils/osmLinks.js +1 -1
- package/esm2015/lib/wkt/index.js +1 -1
- package/esm2015/lib/wkt/shared/index.js +1 -1
- package/esm2015/lib/wkt/shared/wkt.service.js +15 -15
- package/esm2015/lib/wkt/wkt.module.js +1 -1
- package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.component.js +1 -1
- package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.module.js +1 -1
- package/esm2015/lib/workspace/confirmation-popup/index.js +1 -1
- package/esm2015/lib/workspace/index.js +1 -1
- package/esm2015/lib/workspace/shared/edition-workspace.js +12 -4
- package/esm2015/lib/workspace/shared/edition-workspace.service.js +40 -13
- package/esm2015/lib/workspace/shared/feature-workspace.js +1 -1
- package/esm2015/lib/workspace/shared/feature-workspace.service.js +10 -5
- package/esm2015/lib/workspace/shared/index.js +1 -1
- package/esm2015/lib/workspace/shared/wfs-workspace.js +1 -1
- package/esm2015/lib/workspace/shared/wfs-workspace.service.js +10 -5
- package/esm2015/lib/workspace/shared/wms-workspace.service.js +31 -7
- package/esm2015/lib/workspace/shared/workspace.utils.js +1 -1
- package/esm2015/lib/workspace/widgets/index.js +1 -1
- package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js +1 -1
- package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js +1 -1
- package/esm2015/lib/workspace/widgets/widgets.js +1 -1
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +1 -1
- package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +1 -1
- package/esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js +1 -1
- package/esm2015/lib/workspace/workspace-updator/workspace-updator.module.js +1 -1
- package/esm2015/lib/workspace/workspace.module.js +1 -1
- package/esm2015/public_api.js +2 -1
- package/fesm2015/igo2-geo.js +2453 -946
- package/fesm2015/igo2-geo.js.map +1 -1
- package/lib/catalog/shared/catalog.interface.d.ts +9 -1
- package/lib/catalog/shared/catalog.service.d.ts +1 -0
- package/lib/datasource/shared/datasources/datasource.interface.d.ts +7 -1
- package/lib/draw/draw/draw-popup.component.d.ts +4 -2
- package/lib/draw/draw/draw.component.d.ts +19 -2
- package/lib/draw/shared/draw-style.service.d.ts +6 -0
- package/lib/draw/shared/draw.enum.d.ts +15 -0
- package/lib/feature/feature-details/feature-details.component.d.ts +12 -2
- package/lib/feature/feature-details/feature-details.directive.d.ts +2 -13
- package/lib/filter/filter.module.d.ts +1 -1
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +31 -13
- package/lib/filter/shared/ogc-filter.interface.d.ts +19 -2
- package/lib/import-export/shared/import.utils.d.ts +1 -1
- package/lib/layer/layer-item/layer-item.component.d.ts +1 -0
- package/lib/layer/layer-legend/layer-legend.component.d.ts +3 -2
- package/lib/layer/shared/layer.service.d.ts +6 -3
- package/lib/layer/shared/layers/layer.interface.d.ts +1 -0
- package/lib/layer/shared/layers/vector-layer.d.ts +5 -1
- package/lib/layer/shared/style.service.d.ts +38 -3
- package/lib/layer/shared/vector-style.interface.d.ts +11 -0
- package/lib/map/geolocate-button/geolocate-button.component.d.ts +8 -1
- package/lib/map/index.d.ts +1 -0
- package/lib/map/map.module.d.ts +13 -12
- package/lib/map/shared/controllers/geolocation.d.ts +112 -0
- package/lib/map/shared/controllers/index.d.ts +1 -0
- package/lib/map/shared/controllers/view.d.ts +7 -0
- package/lib/map/shared/hover-feature.directive.d.ts +1 -1
- package/lib/map/shared/map.d.ts +7 -19
- package/lib/map/shared/map.interface.d.ts +0 -1
- package/lib/map/wake-lock-button/index.d.ts +1 -0
- package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +30 -0
- package/lib/offline/geoDB/geoDB.enums.d.ts +4 -0
- package/lib/offline/geoDB/geoDB.interface.d.ts +9 -0
- package/lib/offline/geoDB/geoDB.service.d.ts +35 -0
- package/lib/offline/geoDB/index.d.ts +3 -0
- package/lib/offline/index.d.ts +2 -0
- package/lib/offline/shared/geo-network.service.d.ts +28 -0
- package/lib/offline/shared/index.d.ts +1 -0
- package/lib/print/shared/print.service.d.ts +3 -2
- package/lib/query/query.module.d.ts +2 -1
- package/lib/query/shared/query.service.d.ts +7 -1
- package/lib/workspace/shared/edition-workspace.d.ts +2 -1
- package/lib/workspace/shared/edition-workspace.service.d.ts +5 -2
- package/lib/workspace/shared/feature-workspace.service.d.ts +3 -2
- package/lib/workspace/shared/wfs-workspace.service.d.ts +3 -2
- package/lib/workspace/shared/wms-workspace.service.d.ts +5 -2
- package/ngcc.config.js +3 -3
- package/package.json +7 -5
- package/public_api.d.ts +1 -0
- package/style/geo.theming.scss +12 -12
|
@@ -94,4 +94,4 @@ RotationButtonComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Rot
|
|
|
94
94
|
}], color: [{
|
|
95
95
|
type: Input
|
|
96
96
|
}] }); })();
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9yb3RhdGlvbi1idXR0b24vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9yb3RhdGlvbi1idXR0b24vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7SUNBakQsOEJBRTRCOzs7SUFDMUIsaUNBQytDO0lBQTdDLG9LQUFTLHlDQUFrQyxJQUFDO0lBQzVDLDhCQUNXO0lBQ2IsaUJBQVM7SUFDWCxpQkFBTTs7O0lBUEosK0pBQXlIO0lBRXZFLGVBQWU7SUFBZixvQ0FBZSw2QkFBQTtJQUVyRCxlQUEyRDtJQUEzRCx1RkFBMkQ7Ozs7SUFLekUsOEJBRTRCOzs7SUFDMUIsaUNBQytDO0lBQTdDLG9LQUFTLHlDQUFrQyxJQUFDO0lBQzVDLDhCQUNXO0lBQ2IsaUJBQVM7SUFDWCxpQkFBTTs7O0lBUEosK0pBQXlIO0lBRXZFLGVBQWU7SUFBZixvQ0FBZSw2QkFBQTtJQUVyRCxlQUEyRDtJQUEzRCx1RkFBMkQ7O0FETnpFLE1BQU0sT0FBTyx1QkFBdUI7SUFnQ2xDLGdCQUFlLENBQUM7SUEvQmhCLElBQ0ksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBR0QsSUFDSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksZ0JBQWdCLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLENBQUM7SUFHRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQWE7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFJRCxhQUFhLENBQUMsT0FBTztRQUNuQixNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUM5QyxPQUFPO1lBQ0wsU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQztJQUNKLENBQUM7OzhGQXZDVSx1QkFBdUI7MEVBQXZCLHVCQUF1QjtRQ1RwQyx3RUFRTTtRQUVOLHdFQVFNOztRQWxCQSwyREFBa0M7UUFVbEMsZUFBc0I7UUFBdEIsMkNBQXNCOzt1RkREZix1QkFBdUI7Y0FMbkMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLFdBQVcsRUFBRSxrQ0FBa0M7Z0JBQy9DLFNBQVMsRUFBRSxDQUFDLGtDQUFrQyxDQUFDO2FBQ2hEO3NDQUdLLEdBQUc7a0JBRE4sS0FBSztZQVVGLGdCQUFnQjtrQkFEbkIsS0FBSztZQVVGLEtBQUs7a0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vc2hhcmVkL21hcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1yb3RhdGlvbi1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcm90YXRpb24tYnV0dG9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUm90YXRpb25CdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKVxuICBnZXQgbWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcDtcbiAgfVxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcbiAgICB0aGlzLl9tYXAgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcblxuICBASW5wdXQoKVxuICBnZXQgc2hvd0lmTm9Sb3RhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0lmTm9Sb3RhdGlvbjtcbiAgfVxuICBzZXQgc2hvd0lmTm9Sb3RhdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dJZk5vUm90YXRpb24gPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9zaG93SWZOb1JvdGF0aW9uOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb2xvcjtcbiAgfVxuICBzZXQgY29sb3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2NvbG9yID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfY29sb3I6IHN0cmluZztcblxuICBnZXQgcm90YXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0Um90YXRpb24oKSAhPT0gMDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICByb3RhdGlvblN0eWxlKHJhZGlhbnMpOiB7fSB7XG4gICAgY29uc3Qgcm90YXRpb24gPSAncm90YXRlKCcgKyByYWRpYW5zICsgJ3JhZCknO1xuICAgIHJldHVybiB7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0aW9uXG4gICAgfTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cInJvdGF0ZWQgJiYgIXNob3dJZk5vUm90YXRpb25cIiBjbGFzcz1cImlnby1yb3RhdGlvbi1idXR0b24tY29udGFpbmVyXCJcbiAgW21hdFRvb2x0aXBdPVwicm90YXRlZCA/ICgnaWdvLmdlby5tYXBCdXR0b25zLnJlc2V0Um90YXRpb24nIHwgdHJhbnNsYXRlKTogKCdpZ28uZ2VvLm1hcEJ1dHRvbnMudGlwUm90YXRpb24nIHwgdHJhbnNsYXRlKVwiXG4gIG1hdFRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCIhcm90YXRlZFwiXG4gICAgKGNsaWNrKT1cIm1hcC52aWV3Q29udHJvbGxlci5yZXNldFJvdGF0aW9uKClcIj5cbiAgICA8bWF0LWljb24gW25nU3R5bGVdPVwicm90YXRpb25TdHlsZShtYXAudmlld0NvbnRyb2xsZXIuZ2V0Um90YXRpb24oKSlcIiBzdmdJY29uPVwibmF2aWdhdGlvblwiPlxuICAgIDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzaG93SWZOb1JvdGF0aW9uXCIgY2xhc3M9XCJpZ28tcm90YXRpb24tYnV0dG9uLWNvbnRhaW5lclwiXG4gIFttYXRUb29sdGlwXT1cInJvdGF0ZWQgPyAoJ2lnby5nZW8ubWFwQnV0dG9ucy5yZXNldFJvdGF0aW9uJyB8IHRyYW5zbGF0ZSk6ICgnaWdvLmdlby5tYXBCdXR0b25zLnRpcFJvdGF0aW9uJyB8IHRyYW5zbGF0ZSlcIlxuICBtYXRUb29sdGlwUG9zaXRpb249XCJsZWZ0XCI+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIiBbY29sb3JdPVwiY29sb3JcIiBbZGlzYWJsZWRdPVwiIXJvdGF0ZWRcIlxuICAgIChjbGljayk9XCJtYXAudmlld0NvbnRyb2xsZXIucmVzZXRSb3RhdGlvbigpXCI+XG4gICAgPG1hdC1pY29uIFtuZ1N0eWxlXT1cInJvdGF0aW9uU3R5bGUobWFwLnZpZXdDb250cm9sbGVyLmdldFJvdGF0aW9uKCkpXCIgc3ZnSWNvbj1cIm5hdmlnYXRpb25cIj5cbiAgICA8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvZGl2PiJdfQ==
|
|
@@ -39,4 +39,4 @@ export class MapController {
|
|
|
39
39
|
this.observerKeys = [];
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvY29udHJvbGxlcnMvY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFBMUI7UUFPRTs7V0FFRztRQUNPLGlCQUFZLEdBQWdCLEVBQUUsQ0FBQztJQW9DM0MsQ0FBQztJQWxDQzs7O09BR0c7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsS0FBd0I7UUFDL0IsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxTQUFTLEVBQUU7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1NBQy9EO1FBRUQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQjtRQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudHNLZXkgfSBmcm9tICdvbC9ldmVudHMnO1xuaW1wb3J0IE9sTWFwIGZyb20gJ29sL01hcCc7XG5pbXBvcnQgeyB1bkJ5S2V5IH0gZnJvbSAnb2wvT2JzZXJ2YWJsZSc7XG5cbi8qKlxuICogQmFzZSBtYXAgY29udHJvbGxlclxuICovXG5leHBvcnQgY2xhc3MgTWFwQ29udHJvbGxlciB7XG5cbiAgLyoqXG4gICAqIE9MIE1hcFxuICAgKi9cbiAgcHJvdGVjdGVkIG9sTWFwOiBPbE1hcDtcblxuICAvKipcbiAgICogQXJyYXkgb2Ygb2JzZXJ2ZXIga2V5c1xuICAgKi9cbiAgcHJvdGVjdGVkIG9ic2VydmVyS2V5czogRXZlbnRzS2V5W10gPSBbXTtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBPTCBtYXAgdGhpcyBjb250cm9sbGVyIGlzIGJvdW5kIHRvXG4gICAqIEByZXR1cm5zIE9MIE1hcFxuICAgKi9cbiAgZ2V0T2xNYXAoKTogT2xNYXAge1xuICAgIHJldHVybiB0aGlzLm9sTWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvciByZW1vdmUgdGhpcyBjb250cm9sbGVyIHRvL2Zyb20gYSBtYXAuXG4gICAqIEBwYXJhbSBtYXAgT0wgTWFwXG4gICAqL1xuICBzZXRPbE1hcChvbE1hcDogT2xNYXAgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAob2xNYXAgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmdldE9sTWFwKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGlzIGNvbnRyb2xsZXIgaXMgYWxyZWFkeSBib3VuZCB0byBhIG1hcC4nKTtcbiAgICB9XG5cbiAgICBpZiAob2xNYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50ZWFyZG93bk9ic2VydmVycygpO1xuICAgICAgdGhpcy5vbE1hcCA9IG9sTWFwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub2xNYXAgPSBvbE1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWFyZG93biBhbnkgb2JzZXJ2ZXJzXG4gICAqL1xuICB0ZWFyZG93bk9ic2VydmVycygpIHtcbiAgICB0aGlzLm9ic2VydmVyS2V5cy5mb3JFYWNoKChrZXk6IEV2ZW50c0tleSkgPT4gdW5CeUtleShrZXkpKTtcbiAgICB0aGlzLm9ic2VydmVyS2V5cyA9IFtdO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import olGeolocation from 'ol/Geolocation';
|
|
2
|
+
import { BehaviorSubject, interval } from 'rxjs';
|
|
3
|
+
import olFeature from 'ol/Feature';
|
|
4
|
+
import { MapController } from './controller';
|
|
5
|
+
import { Point } from 'ol/geom';
|
|
6
|
+
import { fromCircle } from 'ol/geom/Polygon';
|
|
7
|
+
import OlCircle from 'ol/geom/Circle';
|
|
8
|
+
import * as olstyle from 'ol/style';
|
|
9
|
+
import { Overlay } from '../../../overlay/shared/overlay';
|
|
10
|
+
import { FeatureMotion } from '../../../feature/shared/feature.enums';
|
|
11
|
+
import { switchMap } from 'rxjs/operators';
|
|
12
|
+
var GeolocationOverlayType;
|
|
13
|
+
(function (GeolocationOverlayType) {
|
|
14
|
+
GeolocationOverlayType["Position"] = "position";
|
|
15
|
+
GeolocationOverlayType["Accuracy"] = "accuracy";
|
|
16
|
+
GeolocationOverlayType["Buffer"] = "buffer";
|
|
17
|
+
})(GeolocationOverlayType || (GeolocationOverlayType = {}));
|
|
18
|
+
/**
|
|
19
|
+
* Controller to handle map view interactions
|
|
20
|
+
*/
|
|
21
|
+
export class MapGeolocationController extends MapController {
|
|
22
|
+
constructor(map, options, storageService, configService) {
|
|
23
|
+
super();
|
|
24
|
+
this.map = map;
|
|
25
|
+
this.options = options;
|
|
26
|
+
this.storageService = storageService;
|
|
27
|
+
this.configService = configService;
|
|
28
|
+
this.subscriptions$$ = [];
|
|
29
|
+
this.positionFeatureStyle = new olstyle.Style({
|
|
30
|
+
image: new olstyle.Circle({
|
|
31
|
+
radius: 6,
|
|
32
|
+
fill: new olstyle.Fill({
|
|
33
|
+
color: '#3399CC',
|
|
34
|
+
}),
|
|
35
|
+
stroke: new olstyle.Stroke({
|
|
36
|
+
color: '#fff',
|
|
37
|
+
width: 2,
|
|
38
|
+
}),
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
this.accuracyFeatureStyle = new olstyle.Style({
|
|
42
|
+
stroke: new olstyle.Stroke({
|
|
43
|
+
color: 'rgba(120, 120, 120, 0.4)',
|
|
44
|
+
width: 1,
|
|
45
|
+
}),
|
|
46
|
+
fill: new olstyle.Fill({
|
|
47
|
+
color: 'rgba(120, 120, 120, 0.4)',
|
|
48
|
+
}),
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Observable of the current emission interval of the position. In seconds
|
|
52
|
+
*/
|
|
53
|
+
this.emissionIntervalSeconds$ = new BehaviorSubject(5);
|
|
54
|
+
/**
|
|
55
|
+
* Observable of the current position
|
|
56
|
+
*/
|
|
57
|
+
this.position$ = new BehaviorSubject(undefined);
|
|
58
|
+
/**
|
|
59
|
+
* Observable of the tracking state
|
|
60
|
+
*/
|
|
61
|
+
this.tracking$ = new BehaviorSubject(undefined);
|
|
62
|
+
/**
|
|
63
|
+
* Observable of the follow position state
|
|
64
|
+
*/
|
|
65
|
+
this.followPosition$ = new BehaviorSubject(undefined);
|
|
66
|
+
this._buffer = this.options && this.options.buffer ? this.options.buffer : undefined;
|
|
67
|
+
this._accuracyThreshold = this.options && this.options.accuracyThreshold ? this.options.accuracyThreshold : 5000;
|
|
68
|
+
this._followPosition = this.options && this.options.followPosition ? this.options.followPosition : false;
|
|
69
|
+
this.geolocationOverlay = new Overlay(this.map);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* History of positions
|
|
73
|
+
*/
|
|
74
|
+
// private positions: MapGeolocationState[] = [];
|
|
75
|
+
/**
|
|
76
|
+
* Whether the geolocate controller should keep the position history
|
|
77
|
+
*/
|
|
78
|
+
/*
|
|
79
|
+
// todo: refine this method
|
|
80
|
+
set keepPositionHistory(value) {
|
|
81
|
+
this._keepPositionHistory = value;
|
|
82
|
+
}
|
|
83
|
+
get keepPositionHistory(): boolean {
|
|
84
|
+
return this._keepPositionHistory;
|
|
85
|
+
}
|
|
86
|
+
private _keepPositionHistory: boolean = this.options && this.options.keepPositionHistory ? this.options.keepPositionHistory : true;
|
|
87
|
+
*/
|
|
88
|
+
/**
|
|
89
|
+
* Whether the geolocate should show a buffer around the current position
|
|
90
|
+
*/
|
|
91
|
+
set buffer(value) {
|
|
92
|
+
this._buffer = value;
|
|
93
|
+
this.handleFeatureCreation(this.position$.value);
|
|
94
|
+
}
|
|
95
|
+
get buffer() {
|
|
96
|
+
return this._buffer;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Whether the geolocate controller accuracy threshold to store/show the position.
|
|
100
|
+
*/
|
|
101
|
+
set accuracyThreshold(value) {
|
|
102
|
+
this._accuracyThreshold = value;
|
|
103
|
+
this.handleFeatureCreation(this.position$.value);
|
|
104
|
+
}
|
|
105
|
+
get accuracyThreshold() {
|
|
106
|
+
return this._accuracyThreshold;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Whether the activate the geolocation.
|
|
110
|
+
*/
|
|
111
|
+
get tracking() {
|
|
112
|
+
return this.geolocation.getTracking();
|
|
113
|
+
}
|
|
114
|
+
set tracking(value) {
|
|
115
|
+
this.geolocation.setTracking(value || false);
|
|
116
|
+
this.tracking$.next(value);
|
|
117
|
+
if (this.storageService && value !== undefined) {
|
|
118
|
+
this.storageService.set('geolocation.tracking', value);
|
|
119
|
+
}
|
|
120
|
+
if (!value) {
|
|
121
|
+
this.position$.next(undefined);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Whether the activate the view tracking of the current position
|
|
126
|
+
*/
|
|
127
|
+
set followPosition(value) {
|
|
128
|
+
var _a;
|
|
129
|
+
this._followPosition = value;
|
|
130
|
+
this.followPosition$.next(value);
|
|
131
|
+
if (((_a = this.configService) === null || _a === void 0 ? void 0 : _a.getConfig('geolocate.followPosition')) === false) {
|
|
132
|
+
this._followPosition = false;
|
|
133
|
+
this.followPosition$.next(false);
|
|
134
|
+
}
|
|
135
|
+
this.handleFeatureCreation(this.position$.value);
|
|
136
|
+
if (this.storageService && value !== undefined) {
|
|
137
|
+
this.storageService.set('geolocation.followPosition', value);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
get followPosition() {
|
|
141
|
+
return this._followPosition;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Add or remove this controller to/from a map.
|
|
145
|
+
* @param map OL Map
|
|
146
|
+
*/
|
|
147
|
+
setOlMap(olMap) {
|
|
148
|
+
super.setOlMap(olMap);
|
|
149
|
+
this.setupObservers();
|
|
150
|
+
}
|
|
151
|
+
deleteGeolocationFeatures() {
|
|
152
|
+
this.deleteFeatureByType(GeolocationOverlayType.Position);
|
|
153
|
+
this.deleteFeatureByType(GeolocationOverlayType.Accuracy);
|
|
154
|
+
this.deleteFeatureByType(GeolocationOverlayType.Buffer);
|
|
155
|
+
}
|
|
156
|
+
setupObservers() {
|
|
157
|
+
this.tracking$.subscribe(tracking => {
|
|
158
|
+
if (tracking) {
|
|
159
|
+
this.onPositionChange(true, true);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
this.deleteGeolocationFeatures();
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
this.geolocation = new olGeolocation({
|
|
166
|
+
// enableHighAccuracy must be set to true to have the heading value.
|
|
167
|
+
trackingOptions: {
|
|
168
|
+
enableHighAccuracy: true,
|
|
169
|
+
maximumAge: 10000,
|
|
170
|
+
timeout: 600000
|
|
171
|
+
},
|
|
172
|
+
projection: this.options.projection,
|
|
173
|
+
});
|
|
174
|
+
let tracking = false;
|
|
175
|
+
this.subscriptions$$.push(this.emissionIntervalSeconds$
|
|
176
|
+
.pipe(switchMap(value => interval(value * 1000)))
|
|
177
|
+
.subscribe(() => {
|
|
178
|
+
if (tracking === this.tracking) {
|
|
179
|
+
this.onPositionChange(true);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
tracking = this.tracking;
|
|
183
|
+
this.onPositionChange(true, true);
|
|
184
|
+
}
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
updateGeolocationOptions(options) {
|
|
188
|
+
if (!options) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
// todo maybe a dedicated interface for geolocation should be defined instead of putting these inside the mapviewoptions?
|
|
192
|
+
let tracking = options.geolocate;
|
|
193
|
+
let followPosition = options.alwaysTracking;
|
|
194
|
+
if (this.storageService) {
|
|
195
|
+
const storedTracking = this.storageService.get('geolocation.tracking');
|
|
196
|
+
if (storedTracking !== null && storedTracking !== undefined) {
|
|
197
|
+
tracking = storedTracking;
|
|
198
|
+
}
|
|
199
|
+
const storedFollowPosition = this.storageService.get('geolocation.followPosition');
|
|
200
|
+
if (storedFollowPosition !== null && storedFollowPosition !== undefined) {
|
|
201
|
+
followPosition = storedFollowPosition;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
this.tracking = tracking;
|
|
205
|
+
this.followPosition = followPosition;
|
|
206
|
+
this.buffer = options.buffer;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Teardown any observers
|
|
210
|
+
*/
|
|
211
|
+
teardownObservers() {
|
|
212
|
+
if (this.subscriptions$$.length) {
|
|
213
|
+
this.subscriptions$$.map(s => s.unsubscribe());
|
|
214
|
+
}
|
|
215
|
+
super.teardownObservers();
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Clear the position history
|
|
219
|
+
*/
|
|
220
|
+
/*
|
|
221
|
+
// todo
|
|
222
|
+
clearPositionsHistory() {
|
|
223
|
+
this.positions = [];
|
|
224
|
+
}*/
|
|
225
|
+
/**
|
|
226
|
+
* On position change, get the position, show it on the map and record it.
|
|
227
|
+
* @param emitEvent Map event
|
|
228
|
+
*/
|
|
229
|
+
onPositionChange(emitEvent = false, zoomTo = false) {
|
|
230
|
+
var _a;
|
|
231
|
+
if (!this.tracking) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
const geolocateProperties = this.geolocation.getProperties();
|
|
235
|
+
if (geolocateProperties.accuracy > this.accuracyThreshold) {
|
|
236
|
+
console.warn('Poor geolocation accuracy. No position are stored/shown');
|
|
237
|
+
this.position$.next(undefined);
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
const position = {
|
|
241
|
+
position: geolocateProperties.position,
|
|
242
|
+
projection: this.geolocation.getProjection().getCode(),
|
|
243
|
+
accuracy: geolocateProperties.accuracy,
|
|
244
|
+
altitude: geolocateProperties.altitude,
|
|
245
|
+
altitudeAccuracy: geolocateProperties.altitudeAccuracy,
|
|
246
|
+
heading: geolocateProperties.heading,
|
|
247
|
+
speed: geolocateProperties.speed,
|
|
248
|
+
enableHighAccuracy: ((_a = geolocateProperties.trackingOptions) === null || _a === void 0 ? void 0 : _a.enableHighAccuracy) ? true : false,
|
|
249
|
+
timestamp: new Date()
|
|
250
|
+
};
|
|
251
|
+
this.handleFeatureCreation(position, zoomTo);
|
|
252
|
+
if (emitEvent) {
|
|
253
|
+
this.position$.next(position);
|
|
254
|
+
/*if (this.keepPositionHistory === true) {
|
|
255
|
+
// handle position diff to store only true diff;
|
|
256
|
+
this.positions.push(position);
|
|
257
|
+
}*/
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
deleteFeatureByType(type) {
|
|
261
|
+
const featureById = this.geolocationOverlay.dataSource.ol.getFeatureById(type);
|
|
262
|
+
if (featureById) {
|
|
263
|
+
this.geolocationOverlay.dataSource.ol.removeFeature(featureById);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
handleFeatureCreation(position, zoomTo = false) {
|
|
267
|
+
if (!position || !position.position) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
this.deleteGeolocationFeatures();
|
|
271
|
+
const positionGeometry = new Point(position.position);
|
|
272
|
+
const accuracyGeometry = fromCircle(new OlCircle(position.position, position.accuracy || 0));
|
|
273
|
+
const positionFeature = new olFeature({ geometry: positionGeometry });
|
|
274
|
+
const accuracyFeature = new olFeature({ geometry: accuracyGeometry });
|
|
275
|
+
if (positionGeometry) {
|
|
276
|
+
let motion = this.followPosition ? FeatureMotion.Move : FeatureMotion.None;
|
|
277
|
+
if (zoomTo) {
|
|
278
|
+
motion = FeatureMotion.Zoom;
|
|
279
|
+
}
|
|
280
|
+
positionFeature.setId(GeolocationOverlayType.Position);
|
|
281
|
+
positionFeature.setStyle(this.positionFeatureStyle);
|
|
282
|
+
this.geolocationOverlay.addOlFeature(positionFeature, motion);
|
|
283
|
+
if (accuracyGeometry) {
|
|
284
|
+
accuracyFeature.setId(GeolocationOverlayType.Accuracy);
|
|
285
|
+
accuracyFeature.setStyle(this.accuracyFeatureStyle);
|
|
286
|
+
this.geolocationOverlay.addOlFeature(accuracyFeature, motion);
|
|
287
|
+
}
|
|
288
|
+
if (this.buffer) {
|
|
289
|
+
const bufferFeature = new olFeature(new OlCircle(position.position, this.buffer.bufferRadius));
|
|
290
|
+
const bufferStyle = new olstyle.Style({
|
|
291
|
+
stroke: new olstyle.Stroke({ width: 2, color: this.buffer.bufferStroke }),
|
|
292
|
+
fill: new olstyle.Fill({ color: this.buffer.bufferFill }),
|
|
293
|
+
text: new olstyle.Text({
|
|
294
|
+
textAlign: 'left',
|
|
295
|
+
offsetX: 10,
|
|
296
|
+
offsetY: -10,
|
|
297
|
+
font: '12px Calibri,sans-serif',
|
|
298
|
+
text: this.buffer.showBufferRadius ? `${this.buffer.bufferRadius}m` : '',
|
|
299
|
+
fill: new olstyle.Fill({ color: '#000' }),
|
|
300
|
+
stroke: new olstyle.Stroke({ color: '#fff', width: 3 })
|
|
301
|
+
})
|
|
302
|
+
});
|
|
303
|
+
bufferFeature.setId(GeolocationOverlayType.Buffer);
|
|
304
|
+
bufferFeature.setStyle(bufferStyle);
|
|
305
|
+
this.geolocationOverlay.addOlFeature(bufferFeature, motion);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL2NvbnRyb2xsZXJzL2dlb2xvY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sYUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUcvRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFXLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0QyxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQTJCM0MsSUFBSyxzQkFJSjtBQUpELFdBQUssc0JBQXNCO0lBQ3pCLCtDQUFxQixDQUFBO0lBQ3JCLCtDQUFxQixDQUFBO0lBQ3JCLDJDQUFnQixDQUFBO0FBQ2xCLENBQUMsRUFKSSxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBSTFCO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsYUFBYTtJQXFJekQsWUFDVSxHQUFXLEVBQ1gsT0FBeUMsRUFDekMsY0FBK0IsRUFDL0IsYUFBNkI7UUFDckMsS0FBSyxFQUFFLENBQUM7UUFKQSxRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsWUFBTyxHQUFQLE9BQU8s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QUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUN6RCxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUNyQixTQUFTLEVBQUUsTUFBTTt3QkFDakIsT0FBTyxFQUFFLEVBQUU7d0JBQ1gsT0FBTyxFQUFFLENBQUMsRUFBRTt3QkFDWixJQUFJLEVBQUUseUJBQXlCO3dCQUMvQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN4RSxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO3dCQUN6QyxNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7cUJBQ3hELENBQUM7aUJBQ0gsQ0FBQyxDQUFDO2dCQUNILGFBQWEsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25ELGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzdEO1NBRUY7SUFFSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2xNYXAgZnJvbSAnb2wvTWFwJztcbmltcG9ydCBvbEdlb2xvY2F0aW9uIGZyb20gJ29sL0dlb2xvY2F0aW9uJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgaW50ZXJ2YWwsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHsgTWFwQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcic7XG5pbXBvcnQgeyBQb2ludCwgUG9seWdvbiB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgZnJvbUNpcmNsZSB9IGZyb20gJ29sL2dlb20vUG9seWdvbic7XG5pbXBvcnQgT2xDaXJjbGUgZnJvbSAnb2wvZ2VvbS9DaXJjbGUnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vbWFwJztcbmltcG9ydCAqIGFzIG9sc3R5bGUgZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uLy4uL292ZXJsYXkvc2hhcmVkL292ZXJsYXknO1xuaW1wb3J0IHsgRmVhdHVyZU1vdGlvbiB9IGZyb20gJy4uLy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuZW51bXMnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UsIENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IE1hcFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vbWFwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5leHBvcnQgaW50ZXJmYWNlIE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlck9wdGlvbnMge1xuICAvLyAgdG9kbyBrZWVwUG9zaXRpb25IaXN0b3J5PzogYm9vbGVhbjtcbiAgcHJvamVjdGlvbjogb2xwcm9qLlByb2plY3Rpb25MaWtlXG4gIGFjY3VyYWN5VGhyZXNob2xkPzogbnVtYmVyO1xuICBmb2xsb3dQb3NpdGlvbj86IGJvb2xlYW47XG4gIGJ1ZmZlcj86IEdlb2xvY2F0aW9uQnVmZmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBNYXBHZW9sb2NhdGlvblN0YXRlIHtcbiAgcG9zaXRpb246IG51bWJlcltdO1xuICBwcm9qZWN0aW9uOiBzdHJpbmc7XG4gIGFjY3VyYWN5OiBudW1iZXI7XG4gIGFsdGl0dWRlOiBudW1iZXI7XG4gIGFsdGl0dWRlQWNjdXJhY3k6IG51bWJlcjtcbiAgaGVhZGluZzogbnVtYmVyO1xuICBzcGVlZDogbnVtYmVyO1xuICBlbmFibGVIaWdoQWNjdXJhY3k6IGJvb2xlYW47XG4gIHRpbWVzdGFtcDogRGF0ZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2VvbG9jYXRpb25CdWZmZXIge1xuICBidWZmZXJSYWRpdXM/OiBudW1iZXI7XG4gIGJ1ZmZlclN0cm9rZT86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICBidWZmZXJGaWxsPzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gIHNob3dCdWZmZXJSYWRpdXM/OiBib29sZWFuO1xufVxuXG5cbmVudW0gR2VvbG9jYXRpb25PdmVybGF5VHlwZSB7XG4gIFBvc2l0aW9uID0gJ3Bvc2l0aW9uJyxcbiAgQWNjdXJhY3kgPSAnYWNjdXJhY3knLFxuICBCdWZmZXI9ICdidWZmZXInXG59XG5cbi8qKlxuICogQ29udHJvbGxlciB0byBoYW5kbGUgbWFwIHZpZXcgaW50ZXJhY3Rpb25zXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXBHZW9sb2NhdGlvbkNvbnRyb2xsZXIgZXh0ZW5kcyBNYXBDb250cm9sbGVyIHtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMkJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBnZW9sb2NhdGlvbk92ZXJsYXk6IE92ZXJsYXk7XG4gIHByaXZhdGUgcG9zaXRpb25GZWF0dXJlU3R5bGU6IG9sc3R5bGUuU3R5bGUgfCBvbHN0eWxlLlN0eWxlW10gPSBuZXcgb2xzdHlsZS5TdHlsZSh7XG4gICAgaW1hZ2U6IG5ldyBvbHN0eWxlLkNpcmNsZSh7XG4gICAgICByYWRpdXM6IDYsXG4gICAgICBmaWxsOiBuZXcgb2xzdHlsZS5GaWxsKHtcbiAgICAgICAgY29sb3I6ICcjMzM5OUNDJyxcbiAgICAgIH0pLFxuICAgICAgc3Ryb2tlOiBuZXcgb2xzdHlsZS5TdHJva2Uoe1xuICAgICAgICBjb2xvcjogJyNmZmYnLFxuICAgICAgICB3aWR0aDogMixcbiAgICAgIH0pLFxuICAgIH0pLFxuICB9KVxuICBwcml2YXRlIGFjY3VyYWN5RmVhdHVyZVN0eWxlOiBvbHN0eWxlLlN0eWxlIHwgb2xzdHlsZS5TdHlsZVtdID0gbmV3IG9sc3R5bGUuU3R5bGUoe1xuICAgIHN0cm9rZTogbmV3IG9sc3R5bGUuU3Ryb2tlKHtcbiAgICAgIGNvbG9yOiAncmdiYSgxMjAsIDEyMCwgMTIwLCAwLjQpJyxcbiAgICAgIHdpZHRoOiAxLFxuICAgIH0pLFxuICAgIGZpbGw6IG5ldyBvbHN0eWxlLkZpbGwoe1xuICAgICAgY29sb3I6ICdyZ2JhKDEyMCwgMTIwLCAxMjAsIDAuNCknLFxuICAgIH0pLFxuICB9KVxuXG4gIHByaXZhdGUgZ2VvbG9jYXRpb246IG9sR2VvbG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGN1cnJlbnQgZW1pc3Npb24gaW50ZXJ2YWwgb2YgdGhlIHBvc2l0aW9uLiBJbiBzZWNvbmRzXG4gICAqL1xuICAgcHVibGljIHJlYWRvbmx5IGVtaXNzaW9uSW50ZXJ2YWxTZWNvbmRzJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDUpO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXBHZW9sb2NhdGlvblN0YXRlPih1bmRlZmluZWQpO1xuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgdHJhY2tpbmcgc3RhdGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0cmFja2luZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIG9mIHRoZSBmb2xsb3cgcG9zaXRpb24gc3RhdGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmb2xsb3dQb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHVuZGVmaW5lZCk7XG5cblxuICAvKipcbiAgICogSGlzdG9yeSBvZiBwb3NpdGlvbnNcbiAgICovXG4gIC8vIHByaXZhdGUgcG9zaXRpb25zOiBNYXBHZW9sb2NhdGlvblN0YXRlW10gPSBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2VvbG9jYXRlIGNvbnRyb2xsZXIgc2hvdWxkIGtlZXAgdGhlIHBvc2l0aW9uIGhpc3RvcnlcbiAgICovXG4gIC8qXG4gIC8vIHRvZG86IHJlZmluZSB0aGlzIG1ldGhvZFxuICBzZXQga2VlcFBvc2l0aW9uSGlzdG9yeSh2YWx1ZSkge1xuICAgIHRoaXMuX2tlZXBQb3NpdGlvbkhpc3RvcnkgPSB2YWx1ZTtcbiAgfVxuICBnZXQga2VlcFBvc2l0aW9uSGlzdG9yeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fa2VlcFBvc2l0aW9uSGlzdG9yeTtcbiAgfVxuICBwcml2YXRlIF9rZWVwUG9zaXRpb25IaXN0b3J5OiBib29sZWFuID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5rZWVwUG9zaXRpb25IaXN0b3J5ID8gdGhpcy5vcHRpb25zLmtlZXBQb3NpdGlvbkhpc3RvcnkgOiB0cnVlO1xuKi9cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdlb2xvY2F0ZSBzaG91bGQgc2hvdyBhIGJ1ZmZlciBhcm91bmQgdGhlIGN1cnJlbnQgcG9zaXRpb25cbiAgICovXG4gICBzZXQgYnVmZmVyKHZhbHVlOiBHZW9sb2NhdGlvbkJ1ZmZlcikge1xuICAgIHRoaXMuX2J1ZmZlciA9IHZhbHVlO1xuICAgIHRoaXMuaGFuZGxlRmVhdHVyZUNyZWF0aW9uKHRoaXMucG9zaXRpb24kLnZhbHVlKTtcbiAgfVxuICAgZ2V0IGJ1ZmZlcigpOiBHZW9sb2NhdGlvbkJ1ZmZlciB7XG4gICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcbiAgfVxuICBwcml2YXRlIF9idWZmZXI6IEdlb2xvY2F0aW9uQnVmZmVyID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5idWZmZXIgPyB0aGlzLm9wdGlvbnMuYnVmZmVyIDogdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBnZW9sb2NhdGUgY29udHJvbGxlciBhY2N1cmFjeSB0aHJlc2hvbGQgdG8gc3RvcmUvc2hvdyB0aGUgcG9zaXRpb24uXG4gICAqL1xuICBzZXQgYWNjdXJhY3lUaHJlc2hvbGQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2FjY3VyYWN5VGhyZXNob2xkID0gdmFsdWU7XG4gICAgdGhpcy5oYW5kbGVGZWF0dXJlQ3JlYXRpb24odGhpcy5wb3NpdGlvbiQudmFsdWUpO1xuICB9XG5cbiAgZ2V0IGFjY3VyYWN5VGhyZXNob2xkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjY3VyYWN5VGhyZXNob2xkO1xuICB9XG4gIHByaXZhdGUgX2FjY3VyYWN5VGhyZXNob2xkID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5hY2N1cmFjeVRocmVzaG9sZCA/IHRoaXMub3B0aW9ucy5hY2N1cmFjeVRocmVzaG9sZCA6IDUwMDA7XG5cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYWN0aXZhdGUgdGhlIGdlb2xvY2F0aW9uLlxuICAgKi9cbiAgZ2V0IHRyYWNraW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdlb2xvY2F0aW9uLmdldFRyYWNraW5nKCk7XG4gIH1cblxuICBzZXQgdHJhY2tpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmdlb2xvY2F0aW9uLnNldFRyYWNraW5nKHZhbHVlIHx8IGZhbHNlKTtcbiAgICB0aGlzLnRyYWNraW5nJC5uZXh0KHZhbHVlKTtcbiAgICBpZiAodGhpcy5zdG9yYWdlU2VydmljZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldCgnZ2VvbG9jYXRpb24udHJhY2tpbmcnLCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHRoaXMucG9zaXRpb24kLm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICAgIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBhY3RpdmF0ZSB0aGUgdmlldyB0cmFja2luZyBvZiB0aGUgY3VycmVudCBwb3NpdGlvblxuICAgKi9cbiAgc2V0IGZvbGxvd1Bvc2l0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZm9sbG93UG9zaXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLmZvbGxvd1Bvc2l0aW9uJC5uZXh0KHZhbHVlKTtcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlPy5nZXRDb25maWcoJ2dlb2xvY2F0ZS5mb2xsb3dQb3NpdGlvbicpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fZm9sbG93UG9zaXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9sbG93UG9zaXRpb24kLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUZlYXR1cmVDcmVhdGlvbih0aGlzLnBvc2l0aW9uJC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2dlb2xvY2F0aW9uLmZvbGxvd1Bvc2l0aW9uJywgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmb2xsb3dQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9sbG93UG9zaXRpb247XG4gIH1cblxuXG4gIHByaXZhdGUgX2ZvbGxvd1Bvc2l0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5mb2xsb3dQb3NpdGlvbiA/IHRoaXMub3B0aW9ucy5mb2xsb3dQb3NpdGlvbiA6IGZhbHNlO1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtYXA6IElnb01hcCxcbiAgICBwcml2YXRlIG9wdGlvbnM/OiBNYXBHZW9sb2NhdGlvbkNvbnRyb2xsZXJPcHRpb25zLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U/OiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U/OiBDb25maWdTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheSA9IG5ldyBPdmVybGF5KHRoaXMubWFwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgb3IgcmVtb3ZlIHRoaXMgY29udHJvbGxlciB0by9mcm9tIGEgbWFwLlxuICAgKiBAcGFyYW0gbWFwIE9MIE1hcFxuICAgKi9cbiAgc2V0T2xNYXAob2xNYXA6IE9sTWFwIHwgdW5kZWZpbmVkKSB7XG4gICAgc3VwZXIuc2V0T2xNYXAob2xNYXApO1xuICAgIHRoaXMuc2V0dXBPYnNlcnZlcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlR2VvbG9jYXRpb25GZWF0dXJlcygpIHtcbiAgICB0aGlzLmRlbGV0ZUZlYXR1cmVCeVR5cGUoR2VvbG9jYXRpb25PdmVybGF5VHlwZS5Qb3NpdGlvbik7XG4gICAgdGhpcy5kZWxldGVGZWF0dXJlQnlUeXBlKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuQWNjdXJhY3kpO1xuICAgIHRoaXMuZGVsZXRlRmVhdHVyZUJ5VHlwZShHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkJ1ZmZlcik7XG4gIH1cblxuICBzZXR1cE9ic2VydmVycygpIHtcbiAgICB0aGlzLnRyYWNraW5nJC5zdWJzY3JpYmUodHJhY2tpbmcgPT4ge1xuICAgICAgaWYgKHRyYWNraW5nKSB7XG4gICAgICAgIHRoaXMub25Qb3NpdGlvbkNoYW5nZSh0cnVlLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGVsZXRlR2VvbG9jYXRpb25GZWF0dXJlcygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5nZW9sb2NhdGlvbiA9IG5ldyBvbEdlb2xvY2F0aW9uKHtcbiAgICAgIC8vIGVuYWJsZUhpZ2hBY2N1cmFjeSBtdXN0IGJlIHNldCB0byB0cnVlIHRvIGhhdmUgdGhlIGhlYWRpbmcgdmFsdWUuXG4gICAgICB0cmFja2luZ09wdGlvbnM6IHtcbiAgICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiB0cnVlLFxuICAgICAgICBtYXhpbXVtQWdlOiAxMDAwMCxcbiAgICAgICAgdGltZW91dDogNjAwMDAwXG4gICAgICB9LFxuICAgICAgcHJvamVjdGlvbjogdGhpcy5vcHRpb25zLnByb2plY3Rpb24sXG4gICAgfSk7XG4gICAgbGV0IHRyYWNraW5nID0gZmFsc2U7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQucHVzaCh0aGlzLmVtaXNzaW9uSW50ZXJ2YWxTZWNvbmRzJFxuICAgICAgLnBpcGUoc3dpdGNoTWFwKHZhbHVlID0+IGludGVydmFsKHZhbHVlICogMTAwMCkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0cmFja2luZyA9PT0gdGhpcy50cmFja2luZykge1xuICAgICAgICAgIHRoaXMub25Qb3NpdGlvbkNoYW5nZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cmFja2luZyA9IHRoaXMudHJhY2tpbmc7XG4gICAgICAgICAgdGhpcy5vblBvc2l0aW9uQ2hhbmdlKHRydWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlR2VvbG9jYXRpb25PcHRpb25zKG9wdGlvbnM6IE1hcFZpZXdPcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zKSB7IHJldHVybjt9XG4gICAgLy8gdG9kbyBtYXliZSBhIGRlZGljYXRlZCBpbnRlcmZhY2UgZm9yIGdlb2xvY2F0aW9uIHNob3VsZCBiZSBkZWZpbmVkIGluc3RlYWQgb2YgcHV0dGluZyB0aGVzZSBpbnNpZGUgdGhlIG1hcHZpZXdvcHRpb25zP1xuICAgIGxldCB0cmFja2luZyA9IG9wdGlvbnMuZ2VvbG9jYXRlO1xuICAgIGxldCBmb2xsb3dQb3NpdGlvbiA9IG9wdGlvbnMuYWx3YXlzVHJhY2tpbmc7XG4gICAgaWYgKHRoaXMuc3RvcmFnZVNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IHN0b3JlZFRyYWNraW5nID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2dlb2xvY2F0aW9uLnRyYWNraW5nJykgYXMgYm9vbGVhbjtcbiAgICAgIGlmIChzdG9yZWRUcmFja2luZyAhPT0gbnVsbCAmJiBzdG9yZWRUcmFja2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRyYWNraW5nID0gc3RvcmVkVHJhY2tpbmc7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0b3JlZEZvbGxvd1Bvc2l0aW9uID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoJ2dlb2xvY2F0aW9uLmZvbGxvd1Bvc2l0aW9uJykgYXMgYm9vbGVhbjtcbiAgICAgIGlmIChzdG9yZWRGb2xsb3dQb3NpdGlvbiAhPT0gbnVsbCAmJiBzdG9yZWRGb2xsb3dQb3NpdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvbGxvd1Bvc2l0aW9uID0gc3RvcmVkRm9sbG93UG9zaXRpb247XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudHJhY2tpbmcgPSB0cmFja2luZztcbiAgICB0aGlzLmZvbGxvd1Bvc2l0aW9uID0gZm9sbG93UG9zaXRpb247XG4gICAgdGhpcy5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZWFyZG93biBhbnkgb2JzZXJ2ZXJzXG4gICAqL1xuICB0ZWFyZG93bk9ic2VydmVycygpIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zJCQubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5tYXAocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cbiAgICBzdXBlci50ZWFyZG93bk9ic2VydmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBwb3NpdGlvbiAgaGlzdG9yeVxuICAgKi9cbiAgLypcbiAgLy8gdG9kb1xuICBjbGVhclBvc2l0aW9uc0hpc3RvcnkoKSB7XG4gICAgdGhpcy5wb3NpdGlvbnMgPSBbXTtcbiAgfSovXG5cbiAgLyoqXG4gICAqIE9uIHBvc2l0aW9uIGNoYW5nZSwgZ2V0IHRoZSBwb3NpdGlvbiwgc2hvdyBpdCBvbiB0aGUgbWFwIGFuZCByZWNvcmQgaXQuXG4gICAqIEBwYXJhbSBlbWl0RXZlbnQgTWFwIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIG9uUG9zaXRpb25DaGFuZ2UoZW1pdEV2ZW50OiBib29sZWFuID0gZmFsc2UsIHpvb21UbzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnRyYWNraW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGdlb2xvY2F0ZVByb3BlcnRpZXMgPSB0aGlzLmdlb2xvY2F0aW9uLmdldFByb3BlcnRpZXMoKTtcblxuICAgIGlmIChnZW9sb2NhdGVQcm9wZXJ0aWVzLmFjY3VyYWN5ID4gdGhpcy5hY2N1cmFjeVRocmVzaG9sZCkge1xuICAgICAgY29uc29sZS53YXJuKCdQb29yIGdlb2xvY2F0aW9uIGFjY3VyYWN5LiBObyBwb3NpdGlvbiBhcmUgc3RvcmVkL3Nob3duJyk7XG4gICAgICB0aGlzLnBvc2l0aW9uJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcG9zaXRpb246IE1hcEdlb2xvY2F0aW9uU3RhdGUgPSB7XG4gICAgICBwb3NpdGlvbjogZ2VvbG9jYXRlUHJvcGVydGllcy5wb3NpdGlvbixcbiAgICAgIHByb2plY3Rpb246IHRoaXMuZ2VvbG9jYXRpb24uZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKSxcbiAgICAgIGFjY3VyYWN5OiBnZW9sb2NhdGVQcm9wZXJ0aWVzLmFjY3VyYWN5LFxuICAgICAgYWx0aXR1ZGU6IGdlb2xvY2F0ZVByb3BlcnRpZXMuYWx0aXR1ZGUsXG4gICAgICBhbHRpdHVkZUFjY3VyYWN5OiBnZW9sb2NhdGVQcm9wZXJ0aWVzLmFsdGl0dWRlQWNjdXJhY3ksXG4gICAgICBoZWFkaW5nOiBnZW9sb2NhdGVQcm9wZXJ0aWVzLmhlYWRpbmcsXG4gICAgICBzcGVlZDogZ2VvbG9jYXRlUHJvcGVydGllcy5zcGVlZCxcbiAgICAgIGVuYWJsZUhpZ2hBY2N1cmFjeTogZ2VvbG9jYXRlUHJvcGVydGllcy50cmFja2luZ09wdGlvbnM/LmVuYWJsZUhpZ2hBY2N1cmFjeSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKVxuICAgIH07XG4gICAgdGhpcy5oYW5kbGVGZWF0dXJlQ3JlYXRpb24ocG9zaXRpb24sIHpvb21Ubyk7XG4gICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgdGhpcy5wb3NpdGlvbiQubmV4dChwb3NpdGlvbik7XG4gICAgICAvKmlmICh0aGlzLmtlZXBQb3NpdGlvbkhpc3RvcnkgPT09IHRydWUpIHtcbiAgICAgICAgLy8gaGFuZGxlIHBvc2l0aW9uIGRpZmYgdG8gc3RvcmUgb25seSB0cnVlIGRpZmY7XG4gICAgICAgIHRoaXMucG9zaXRpb25zLnB1c2gocG9zaXRpb24pO1xuICAgICAgfSovXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVGZWF0dXJlQnlUeXBlKHR5cGU6IEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUpIHtcbiAgICBjb25zdCBmZWF0dXJlQnlJZCA9IHRoaXMuZ2VvbG9jYXRpb25PdmVybGF5LmRhdGFTb3VyY2Uub2wuZ2V0RmVhdHVyZUJ5SWQodHlwZSk7XG4gICAgaWYgKGZlYXR1cmVCeUlkKSB7XG4gICAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5kYXRhU291cmNlLm9sLnJlbW92ZUZlYXR1cmUoZmVhdHVyZUJ5SWQpO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGZWF0dXJlQ3JlYXRpb24ocG9zaXRpb246IE1hcEdlb2xvY2F0aW9uU3RhdGUsIHpvb21UbzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCFwb3NpdGlvbiB8fCAhcG9zaXRpb24ucG9zaXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWxldGVHZW9sb2NhdGlvbkZlYXR1cmVzKCk7XG4gICAgY29uc3QgcG9zaXRpb25HZW9tZXRyeSA9IG5ldyBQb2ludChwb3NpdGlvbi5wb3NpdGlvbik7XG4gICAgY29uc3QgYWNjdXJhY3lHZW9tZXRyeSA9IGZyb21DaXJjbGUobmV3IE9sQ2lyY2xlKHBvc2l0aW9uLnBvc2l0aW9uLCBwb3NpdGlvbi5hY2N1cmFjeSB8fCAwKSk7XG5cbiAgICBjb25zdCBwb3NpdGlvbkZlYXR1cmUgPSBuZXcgb2xGZWF0dXJlPFBvaW50Pih7IGdlb21ldHJ5OiBwb3NpdGlvbkdlb21ldHJ5IH0pO1xuICAgIGNvbnN0IGFjY3VyYWN5RmVhdHVyZSA9IG5ldyBvbEZlYXR1cmU8UG9seWdvbj4oeyBnZW9tZXRyeTogYWNjdXJhY3lHZW9tZXRyeSB9KTtcblxuICAgIGlmIChwb3NpdGlvbkdlb21ldHJ5KSB7XG4gICAgICBsZXQgbW90aW9uID0gdGhpcy5mb2xsb3dQb3NpdGlvbiA/IEZlYXR1cmVNb3Rpb24uTW92ZSA6IEZlYXR1cmVNb3Rpb24uTm9uZTtcbiAgICAgIGlmICh6b29tVG8pIHtcbiAgICAgICAgbW90aW9uID0gRmVhdHVyZU1vdGlvbi5ab29tO1xuICAgICAgfVxuICAgICAgcG9zaXRpb25GZWF0dXJlLnNldElkKEdlb2xvY2F0aW9uT3ZlcmxheVR5cGUuUG9zaXRpb24pO1xuICAgICAgcG9zaXRpb25GZWF0dXJlLnNldFN0eWxlKHRoaXMucG9zaXRpb25GZWF0dXJlU3R5bGUpO1xuICAgICAgdGhpcy5nZW9sb2NhdGlvbk92ZXJsYXkuYWRkT2xGZWF0dXJlKHBvc2l0aW9uRmVhdHVyZSwgbW90aW9uKTtcbiAgICAgIGlmIChhY2N1cmFjeUdlb21ldHJ5KSB7XG4gICAgICAgIGFjY3VyYWN5RmVhdHVyZS5zZXRJZChHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkFjY3VyYWN5KTtcbiAgICAgICAgYWNjdXJhY3lGZWF0dXJlLnNldFN0eWxlKHRoaXMuYWNjdXJhY3lGZWF0dXJlU3R5bGUpO1xuICAgICAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5hZGRPbEZlYXR1cmUoYWNjdXJhY3lGZWF0dXJlLCBtb3Rpb24pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlckZlYXR1cmUgPSBuZXcgb2xGZWF0dXJlKG5ldyBPbENpcmNsZShwb3NpdGlvbi5wb3NpdGlvbiwgdGhpcy5idWZmZXIuYnVmZmVyUmFkaXVzKSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlclN0eWxlID0gbmV3IG9sc3R5bGUuU3R5bGUoe1xuICAgICAgICAgIHN0cm9rZTogbmV3IG9sc3R5bGUuU3Ryb2tlKHsgd2lkdGg6IDIsIGNvbG9yOiB0aGlzLmJ1ZmZlci5idWZmZXJTdHJva2UgfSksXG4gICAgICAgICAgZmlsbDogbmV3IG9sc3R5bGUuRmlsbCh7IGNvbG9yOiB0aGlzLmJ1ZmZlci5idWZmZXJGaWxsIH0pLFxuICAgICAgICAgIHRleHQ6IG5ldyBvbHN0eWxlLlRleHQoe1xuICAgICAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgICAgICBvZmZzZXRYOiAxMCxcbiAgICAgICAgICAgIG9mZnNldFk6IC0xMCxcbiAgICAgICAgICAgIGZvbnQ6ICcxMnB4IENhbGlicmksc2Fucy1zZXJpZicsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLmJ1ZmZlci5zaG93QnVmZmVyUmFkaXVzID8gYCR7dGhpcy5idWZmZXIuYnVmZmVyUmFkaXVzfW1gIDogJycsXG4gICAgICAgICAgICBmaWxsOiBuZXcgb2xzdHlsZS5GaWxsKHsgY29sb3I6ICcjMDAwJyB9KSxcbiAgICAgICAgICAgIHN0cm9rZTogbmV3IG9sc3R5bGUuU3Ryb2tlKHsgY29sb3I6ICcjZmZmJywgd2lkdGg6IDMgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgICAgYnVmZmVyRmVhdHVyZS5zZXRJZChHZW9sb2NhdGlvbk92ZXJsYXlUeXBlLkJ1ZmZlcik7XG4gICAgICAgIGJ1ZmZlckZlYXR1cmUuc2V0U3R5bGUoYnVmZmVyU3R5bGUpO1xuICAgICAgICB0aGlzLmdlb2xvY2F0aW9uT3ZlcmxheS5hZGRPbEZlYXR1cmUoYnVmZmVyRmVhdHVyZSwgbW90aW9uKTtcbiAgICAgIH1cblxuICAgIH1cblxuICB9XG59XG4iXX0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './controller';
|
|
2
|
+
export * from './geolocation';
|
|
2
3
|
export * from './view';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL2NvbnRyb2xsZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jb250cm9sbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZ2VvbG9jYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi92aWV3JztcbiJdfQ==
|
|
@@ -22,6 +22,7 @@ export class MapViewController extends MapController {
|
|
|
22
22
|
this.state$ = new BehaviorSubject(undefined);
|
|
23
23
|
/**
|
|
24
24
|
* View Padding
|
|
25
|
+
* Values in the array are top, right, bottom and left padding.
|
|
25
26
|
*/
|
|
26
27
|
this.padding = [0, 0, 0, 0];
|
|
27
28
|
/**
|
|
@@ -53,6 +54,21 @@ export class MapViewController extends MapController {
|
|
|
53
54
|
get olView() {
|
|
54
55
|
return this.olMap.getView();
|
|
55
56
|
}
|
|
57
|
+
setPadding(padding) {
|
|
58
|
+
// Values in the array are top, right, bottom and left padding.
|
|
59
|
+
if (padding.top || padding.top === 0) {
|
|
60
|
+
this.padding[0] = padding.top;
|
|
61
|
+
}
|
|
62
|
+
if (padding.right || padding.right === 0) {
|
|
63
|
+
this.padding[1] = padding.right;
|
|
64
|
+
}
|
|
65
|
+
if (padding.bottom || padding.bottom === 0) {
|
|
66
|
+
this.padding[2] = padding.bottom;
|
|
67
|
+
}
|
|
68
|
+
if (padding.left || padding.left === 0) {
|
|
69
|
+
this.padding[3] = padding.left;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
56
72
|
/**
|
|
57
73
|
* Add or remove this controller to/from a map.
|
|
58
74
|
* @param map OL Map
|
|
@@ -323,4 +339,4 @@ export class MapViewController extends MapController {
|
|
|
323
339
|
this.state$.next(state);
|
|
324
340
|
}
|
|
325
341
|
}
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvY29udHJvbGxlcnMvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBSWxDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQTREbEQsWUFBb0IsT0FBa0M7UUFDcEQsS0FBSyxFQUFFLENBQUM7UUFEVSxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQTNEdEQ7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFTLFNBQVMsQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFlLFNBQVMsQ0FBQyxDQUFDO1FBRXREOztXQUVHO1FBQ0gsWUFBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdkI7O1dBRUc7UUFDSCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQU9yQjs7V0FFRztRQUNLLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBZ0QsQ0FBQztRQU85RTs7V0FFRztRQUNLLFdBQU0sR0FBbUIsRUFBRSxDQUFDO1FBRXBDOztXQUVHO1FB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LENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUMxQztTQUNGO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE9sTWFwIGZyb20gJ29sL01hcCc7XHJcbmltcG9ydCBPbE1hcEV2ZW50IGZyb20gJ29sL01hcEV2ZW50JztcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCAqIGFzIG9sZWFzaW5nIGZyb20gJ29sL2Vhc2luZyc7XHJcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcclxuaW1wb3J0IE9sUHJvamVjdGlvbiBmcm9tICdvbC9wcm9qL1Byb2plY3Rpb24nO1xyXG5pbXBvcnQgT2xWaWV3IGZyb20gJ29sL1ZpZXcnO1xyXG5cclxuaW1wb3J0IHsgTWFwVmlld0FjdGlvbiB9IGZyb20gJy4uL21hcC5lbnVtcyc7XHJcbmltcG9ydCB7IE1hcEV4dGVudCwgTWFwVmlld1N0YXRlIH0gZnJvbSAnLi4vbWFwLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IGdldFNjYWxlRnJvbVJlc29sdXRpb24sIHZpZXdTdGF0ZXNBcmVFcXVhbCB9IGZyb20gJy4uL21hcC51dGlscyc7XHJcbmltcG9ydCB7IE1hcENvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXInO1xyXG5pbXBvcnQgeyBFdmVudHNLZXkgfSBmcm9tICdvbC9ldmVudHMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNYXBWaWV3Q29udHJvbGxlck9wdGlvbnMge1xyXG4gIHN0YXRlSGlzdG9yeTogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnRyb2xsZXIgdG8gaGFuZGxlIG1hcCB2aWV3IGludGVyYWN0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIE1hcFZpZXdDb250cm9sbGVyIGV4dGVuZHMgTWFwQ29udHJvbGxlciB7XHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCByZXNvbHV0aW9uXHJcbiAgICovXHJcbiAgcmVzb2x1dGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odW5kZWZpbmVkKTtcclxuXHJcbiAgLyoqXHJcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCBzdGF0ZVxyXG4gICAqL1xyXG4gIHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWFwVmlld1N0YXRlPih1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBWaWV3IFBhZGRpbmdcclxuICAgKi9cclxuICBwYWRkaW5nID0gWzAsIDAsIDAsIDBdO1xyXG5cclxuICAvKipcclxuICAgKiBNYXggem9vbSBhZnRlciBzZXQgZXh0ZW50XHJcbiAgICovXHJcbiAgbWF4Wm9vbU9uRXh0ZW50ID0gMTk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heCBleHRlbnQgcG9zc2libGUgd2hlbiB6b29taW5nXHJcbiAgICovXHJcbiAgbWF4TGF5ZXJab29tRXh0ZW50OiBNYXBFeHRlbnQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4dGVudCBzdHJlYW1cclxuICAgKi9cclxuICBwcml2YXRlIGV4dGVudCQgPSBuZXcgU3ViamVjdDx7IGV4dGVudDogTWFwRXh0ZW50OyBhY3Rpb246IE1hcFZpZXdBY3Rpb24gfT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBtb3ZlbWVudCBzdHJlYW1cclxuICAgKi9cclxuICBwcml2YXRlIGV4dGVudCQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIEhpc3Rvcnkgb2Ygc3RhdGVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0ZXM6IE1hcFZpZXdTdGF0ZVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1cnJlbnQgc3RhdGUgaW5kZXhcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRlSW5kZXg6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgdGhlIHZpZXcgY29udHJvbGxlciBzaG91bGQga2VlcCB0aGUgdmlldydzIHN0YXRlIGhpc3RvcnlcclxuICAgKi9cclxuICBnZXQgc3RhdGVIaXN0b3J5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucyA/IHRoaXMub3B0aW9ucy5zdGF0ZUhpc3RvcnkgPT09IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9MIFZpZXdcclxuICAgKi9cclxuICBnZXQgb2xWaWV3KCk6IE9sVmlldyB7XHJcbiAgICByZXR1cm4gdGhpcy5vbE1hcC5nZXRWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM/OiBNYXBWaWV3Q29udHJvbGxlck9wdGlvbnMpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgb3IgcmVtb3ZlIHRoaXMgY29udHJvbGxlciB0by9mcm9tIGEgbWFwLlxyXG4gICAqIEBwYXJhbSBtYXAgT0wgTWFwXHJcbiAgICovXHJcbiAgc2V0T2xNYXAob2xNYXA6IE9sTWFwIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBzdXBlci5zZXRPbE1hcChvbE1hcCk7XHJcbiAgICB0aGlzLnNldHVwT2JzZXJ2ZXJzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnNlcnZlIG1vdmUgbW92ZWVuZCBhbmQgc3Vic2NyaWJlIHRvIHRoZSBleHRlbnQgc3RyZWFtXHJcbiAgICovXHJcbiAgc2V0dXBPYnNlcnZlcnMoKSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZUhpc3RvcnkgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5vYnNlcnZlcktleXMucHVzaChcclxuICAgICAgICB0aGlzLm9sTWFwLm9uKCdtb3ZlZW5kJywgKGV2ZW50OiBPbE1hcEV2ZW50KSA9PiB0aGlzLm9uTW92ZUVuZChldmVudCkpIGFzIEV2ZW50c0tleVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZXh0ZW50JCQgPSB0aGlzLmV4dGVudCRcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDI1KSlcclxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHsgZXh0ZW50OiBNYXBFeHRlbnQ7IGFjdGlvbjogTWFwVmlld0FjdGlvbiB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRFeHRlbnQodmFsdWUuZXh0ZW50LCB2YWx1ZS5hY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRlYXJkb3duIGFueSBvYnNlcnZlcnNcclxuICAgKi9cclxuICB0ZWFyZG93bk9ic2VydmVycygpIHtcclxuICAgIHN1cGVyLnRlYXJkb3duT2JzZXJ2ZXJzKCk7XHJcbiAgICBpZiAodGhpcy5leHRlbnQkJCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZXh0ZW50JCQudW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy5leHRlbnQkJCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgdmlldydzIE9MIHByb2plY3Rpb25cclxuICAgKiBAcmV0dXJucyBPTCBwcm9qZWN0aW9uXHJcbiAgICovXHJcbiAgZ2V0T2xQcm9qZWN0aW9uKCk6IE9sUHJvamVjdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vbFZpZXcuZ2V0UHJvamVjdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IG1hcCB2aWV3IGNlbnRlclxyXG4gICAqIEBwYXJhbSBwcm9qZWN0aW9uIE91dHB1dCBwcm9qZWN0aW9uXHJcbiAgICogQHJldHVybnMgQ2VudGVyXHJcbiAgICovXHJcbiAgZ2V0Q2VudGVyKHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBbbnVtYmVyLCBudW1iZXJdIHtcclxuICAgIGxldCBjZW50ZXIgPSB0aGlzLm9sVmlldy5nZXRDZW50ZXIoKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgaWYgKHByb2plY3Rpb24gJiYgY2VudGVyKSB7XHJcbiAgICAgIGNlbnRlciA9IG9scHJvai50cmFuc2Zvcm0oY2VudGVyLCB0aGlzLmdldE9sUHJvamVjdGlvbigpLCBwcm9qZWN0aW9uKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNlbnRlcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgY3VycmVudCB2aWV3IGV4dGVudFxyXG4gICAqIEBwYXJhbSBwcm9qZWN0aW9uIE91dHB1dCBwcm9qZWN0aW9uXHJcbiAgICogQHJldHVybnMgRXh0ZW50XHJcbiAgICovXHJcbiAgZ2V0RXh0ZW50KHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBNYXBFeHRlbnQge1xyXG4gICAgbGV0IGV4dGVudCA9IHRoaXMub2xWaWV3LmNhbGN1bGF0ZUV4dGVudCh0aGlzLm9sTWFwLmdldFNpemUoKSk7XHJcbiAgICBpZiAocHJvamVjdGlvbiAmJiBleHRlbnQpIHtcclxuICAgICAgZXh0ZW50ID0gb2xwcm9qLnRyYW5zZm9ybUV4dGVudChcclxuICAgICAgICBleHRlbnQsXHJcbiAgICAgICAgdGhpcy5nZXRPbFByb2plY3Rpb24oKSxcclxuICAgICAgICBwcm9qZWN0aW9uXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXh0ZW50IGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IHNjYWxlXHJcbiAgICogQHBhcmFtIGRwaSBEb3QgcGVyIGluY2hlc1xyXG4gICAqIEByZXR1cm5zIFZpZXcgc2NhbGVcclxuICAgKi9cclxuICBnZXRTY2FsZShkcGkgPSA5Nikge1xyXG4gICAgcmV0dXJuIGdldFNjYWxlRnJvbVJlc29sdXRpb24oXHJcbiAgICAgIHRoaXMuZ2V0UmVzb2x1dGlvbigpLFxyXG4gICAgICB0aGlzLmdldE9sUHJvamVjdGlvbigpLmdldFVuaXRzKCksXHJcbiAgICAgIGRwaVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgY3VycmVudCByZXNvbHV0aW9uXHJcbiAgICogQHJldHVybnMgUHJvamVjdGlvbiBkZW5vbWluYXRvclxyXG4gICAqL1xyXG4gIGdldFJlc29sdXRpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLm9sVmlldy5nZXRSZXNvbHV0aW9uKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGN1cnJlbnQgem9vbSBsZXZlbFxyXG4gICAqIEByZXR1cm5zIFpvb20gbGV2ZWxcclxuICAgKi9cclxuICBnZXRab29tKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLm9sVmlldy5nZXRab29tKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogWm9vbSBpblxyXG4gICAqL1xyXG4gIHpvb21JbigpIHtcclxuICAgIHRoaXMuem9vbVRvKHRoaXMub2xWaWV3LmdldFpvb20oKSArIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogWm9vbSBvdXRcclxuICAgKi9cclxuICB6b29tT3V0KCkge1xyXG4gICAgdGhpcy56b29tVG8odGhpcy5vbFZpZXcuZ2V0Wm9vbSgpIC0gMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBab29tIHRvIHNwZWNpZmljIHpvb20gbGV2ZWxcclxuICAgKiBAcGFyYW0gem9vbSBab29tIGxldmVsXHJcbiAgICovXHJcbiAgem9vbVRvKHpvb206IG51bWJlcikge1xyXG4gICAgdGhpcy5vbFZpZXcuY2FuY2VsQW5pbWF0aW9ucygpO1xyXG4gICAgdGhpcy5vbFZpZXcuYW5pbWF0ZSh7XHJcbiAgICAgIHpvb20sXHJcbiAgICAgIGR1cmF0aW9uOiAyNTAsXHJcbiAgICAgIGVhc2luZzogb2xlYXNpbmcuZWFzZU91dFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlIHRvIGV4dGVudCBhZnRlciBhIHNob3J0IGRlbGF5ICgxMDBtcykgdW5sZXNzXHJcbiAgICogYSBuZXcgbW92ZW1lbnQgZ2V0cyByZWdpc3RlcmVkIGluIHRoZSBtZWFudGltZS5cclxuICAgKiBAcGFyYW0gZXh0ZW50IEV4dGVudCB0byBtb3ZlIHRvXHJcbiAgICovXHJcbiAgbW92ZVRvRXh0ZW50KGV4dGVudDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcclxuICAgIHRoaXMuZXh0ZW50JC5uZXh0KHsgZXh0ZW50LCBhY3Rpb246IE1hcFZpZXdBY3Rpb24uTW92ZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFpvb20gdG8gZXh0ZW50IGFmdGVyIGEgc2hvcnQgZGVsYXkgKDEwMG1zKSB1bmxlc3NcclxuICAgKiBhIG5ldyBtb3ZlbWVudCBnZXRzIHJlZ2lzdGVyZWQgaW4gdGhlIG1lYW50aW1lLlxyXG4gICAqIEBwYXJhbSBleHRlbnQgRXh0ZW50IHRvIHpvb20gdG9cclxuICAgKi9cclxuICB6b29tVG9FeHRlbnQoZXh0ZW50OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xyXG4gICAgdGhpcy5leHRlbnQkLm5leHQoeyBleHRlbnQsIGFjdGlvbjogTWFwVmlld0FjdGlvbi5ab29tIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHZpZXcgcm90YXRpb25cclxuICAgKiBAcmV0dXJucyBSb3RhdGlvbiBhbmdsZSBpbiBkZWdyZWVzXHJcbiAgICovXHJcbiAgZ2V0Um90YXRpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLm9sVmlldy5nZXRSb3RhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgdGhlIHZpZXcgcm90YXRpb24gdG8gMFxyXG4gICAqL1xyXG4gIHJlc2V0Um90YXRpb24oKSB7XHJcbiAgICB0aGlzLm9sVmlldy5hbmltYXRlKHsgcm90YXRpb246IDAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHRoZSB2aWV3IGhhcyBhIHByZXZpb3VzIHN0YXRlXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmlldyBoYXMgYSBwcmV2aW91cyBzdGF0ZVxyXG4gICAqL1xyXG4gIGhhc1ByZXZpb3VzU3RhdGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXMubGVuZ3RoID4gMSAmJiB0aGlzLnN0YXRlSW5kZXggPiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciB0aGUgdmlldyBoYXMgYSBuZXh0IHN0YXRlXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmlldyBoYXMgYSBuZXh0IHN0YXRlXHJcbiAgICovXHJcbiAgaGFzTmV4dFN0YXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVzLmxlbmd0aCA+IDEgJiYgdGhpcy5zdGF0ZUluZGV4IDwgdGhpcy5zdGF0ZXMubGVuZ3RoIC0gMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3RvcmUgdGhlIHByZXZpb3VzIHZpZXcgc3RhdGVcclxuICAgKi9cclxuICBwcmV2aW91c1N0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuaGFzUHJldmlvdXNTdGF0ZSgpKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGVJbmRleCh0aGlzLnN0YXRlSW5kZXggLSAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc3RvcmUgdGhlIG5leHQgdmlldyBzdGF0ZVxyXG4gICAqL1xyXG4gIG5leHRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmhhc05leHRTdGF0ZSgpKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGVJbmRleCh0aGlzLnN0YXRlSW5kZXggKyAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSBzdGF0ZSBoaXN0b3J5XHJcbiAgICovXHJcbiAgY2xlYXJTdGF0ZUhpc3RvcnkoKSB7XHJcbiAgICB0aGlzLnN0YXRlcyA9IFtdO1xyXG4gICAgdGhpcy5zdGF0ZUluZGV4ID0gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgdGhlIHZpZXcgdG8gaXQncyBpbnRpYWwgc3RhdGVcclxuICAgKi9cclxuICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlSW5kZXgoMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlIHRvIHRoZSBleHRlbnQgcmV0cmlldmVkIGZyb20gdGhlIHN0cmVhbVxyXG4gICAqIEBwYXJhbSBleHRlbnQgRXh0ZW50XHJcbiAgICogQHBhcmFtIGFjdGlvbiBFaXRoZXIgem9vbSBvciBtb3ZlXHJcbiAgICogQHBhcmFtIGFuaW1hdGlvbiBXaXRoIG9yIHdpdGhvdXQgYW5pbWF0aW9uIHRvIHRoZSB0YXJnZXQgZXh0ZW50LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0RXh0ZW50KFxyXG4gICAgZXh0ZW50OiBNYXBFeHRlbnQsXHJcbiAgICBhY3Rpb246IE1hcFZpZXdBY3Rpb24sXHJcbiAgICBhbmltYXRpb246IGJvb2xlYW4gPSB0cnVlXHJcbiAgKSB7XHJcbiAgICBjb25zdCBvbFZpZXcgPSB0aGlzLm9sVmlldztcclxuICAgIG9sVmlldy5jYW5jZWxBbmltYXRpb25zKCk7XHJcbiAgICBjb25zdCBkdXJhdGlvbiA9IGFuaW1hdGlvbiA/IDUwMCA6IDA7XHJcbiAgICBjb25zdCB6b29tID0gb2xWaWV3LmdldFpvb20oKTtcclxuXHJcbiAgICBjb25zdCBmcm9tQ2VudGVyID0gb2xWaWV3LmdldENlbnRlcigpO1xyXG4gICAgY29uc3QgdG9DZW50ZXIgPSBbXHJcbiAgICAgIGV4dGVudFswXSArIChleHRlbnRbMl0gLSBleHRlbnRbMF0pIC8gMixcclxuICAgICAgZXh0ZW50WzFdICsgKGV4dGVudFszXSAtIGV4dGVudFsxXSkgLyAyXHJcbiAgICBdO1xyXG4gICAgY29uc3QgZGlzdENlbnRlciA9IE1hdGguc3FydChcclxuICAgICAgTWF0aC5wb3coZnJvbUNlbnRlclswXSAtIHRvQ2VudGVyWzBdLCAyKSArXHJcbiAgICAgICAgTWF0aC5wb3coZnJvbUNlbnRlclsxXSAtIHRvQ2VudGVyWzFdLCAyKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGZyb21FeHRlbnQgPSBvbFZpZXcuY2FsY3VsYXRlRXh0ZW50KCk7XHJcbiAgICBjb25zdCBmcm9tU2l6ZSA9IE1hdGguc3FydChcclxuICAgICAgTWF0aC5wb3coZnJvbUV4dGVudFsyXSAtIGZyb21FeHRlbnRbMF0sIDIpICtcclxuICAgICAgICBNYXRoLnBvdyhmcm9tRXh0ZW50WzNdIC0gZnJvbUV4dGVudFsxXSwgMilcclxuICAgICk7XHJcbiAgICBjb25zdCB0b1NpemUgPSBNYXRoLnNxcnQoXHJcbiAgICAgIE1hdGgucG93KGV4dGVudFsyXSAtIGV4dGVudFswXSwgMikgKyBNYXRoLnBvdyhleHRlbnRbM10gLSBleHRlbnRbMV0sIDIpXHJcbiAgICApO1xyXG4gICAgY29uc3QgbW95U2l6ZSA9ICh0b1NpemUgKyBmcm9tU2l6ZSkgLyAyO1xyXG4gICAgY29uc3QgeFNpemUgPSBkaXN0Q2VudGVyIC8gbW95U2l6ZTtcclxuXHJcbiAgICBjb25zdCBtYXhab29tID1cclxuICAgICAgYWN0aW9uID09PSBNYXBWaWV3QWN0aW9uLk1vdmUgfHwgem9vbSA+IHRoaXMubWF4Wm9vbU9uRXh0ZW50XHJcbiAgICAgICAgPyB6b29tXHJcbiAgICAgICAgOiB0aGlzLm1heFpvb21PbkV4dGVudDtcclxuXHJcbiAgICBvbFZpZXcuZml0KGV4dGVudCwge1xyXG4gICAgICBzaXplOiB0aGlzLm9sTWFwLmdldFNpemUoKSxcclxuICAgICAgbWF4Wm9vbSxcclxuICAgICAgcGFkZGluZzogdGhpcy5wYWRkaW5nLFxyXG4gICAgICBkdXJhdGlvbjogeFNpemUgPiA0ID8gMCA6IGR1cmF0aW9uLFxyXG4gICAgICBjYWxsYmFjazogKGlzRmluaXNoZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoIWlzRmluaXNoZWQpIHtcclxuICAgICAgICAgIG9sVmlldy5maXQoZXh0ZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6IHRoaXMub2xNYXAuZ2V0U2l6ZSgpLFxyXG4gICAgICAgICAgICBtYXhab29tLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiB0aGlzLnBhZGRpbmcsXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiB4U2l6ZSA+IDQgPyAwIDogZHVyYXRpb25cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHZpZXcgc3RhdGUgaW5kZXhcclxuICAgKiBAcGFyYW0gaW5kZXggU3RhdGUgaW5kZXhcclxuICAgKi9cclxuICBwcml2YXRlIHNldFN0YXRlSW5kZXgoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdGF0ZUluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGVzW2luZGV4XSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHZpZXcgc3RhdGVcclxuICAgKiBAcGFyYW0gc3RhdGUgVmlldyBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0U3RhdGUoc3RhdGU6IE1hcFZpZXdTdGF0ZSkge1xyXG4gICAgdGhpcy5vbFZpZXcuYW5pbWF0ZSh7XHJcbiAgICAgIHJlc29sdXRpb246IHN0YXRlLnJlc29sdXRpb24sXHJcbiAgICAgIGNlbnRlcjogc3RhdGUuY2VudGVyLFxyXG4gICAgICBkdXJhdGlvbjogMFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBtb3ZlIGVuZCwgZ2V0IHRoZSB2aWV3IHN0YXRlIGFuZCByZWNvcmQgaXQuXHJcbiAgICogQHBhcmFtIGV2ZW50IE1hcCBldmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgb25Nb3ZlRW5kKGV2ZW50OiBPbE1hcEV2ZW50KSB7XHJcbiAgICBjb25zdCByZXNvbHV0aW9uID0gdGhpcy5nZXRSZXNvbHV0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5yZXNvbHV0aW9uJC52YWx1ZSAhPT0gcmVzb2x1dGlvbikge1xyXG4gICAgICB0aGlzLnJlc29sdXRpb24kLm5leHQocmVzb2x1dGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhdGUgPSB7XHJcbiAgICAgIHJlc29sdXRpb24sXHJcbiAgICAgIGNlbnRlcjogdGhpcy5nZXRDZW50ZXIoKSxcclxuICAgICAgem9vbTogdGhpcy5nZXRab29tKClcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc3RhdGVIaXN0b3J5ID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IHN0YXRlSW5kZXggPSB0aGlzLnN0YXRlSW5kZXg7XHJcbiAgICAgIGNvbnN0IHN0YXRlQXRJbmRleCA9XHJcbiAgICAgICAgdGhpcy5zdGF0ZXMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGhpcy5zdGF0ZXNbc3RhdGVJbmRleF07XHJcbiAgICAgIGlmICghdmlld1N0YXRlc0FyZUVxdWFsKHN0YXRlLCBzdGF0ZUF0SW5kZXgpKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSB0aGlzLnN0YXRlcy5zbGljZSgwLCBzdGF0ZUluZGV4ICsgMSkuY29uY2F0KFtzdGF0ZV0pO1xyXG4gICAgICAgIHRoaXMuc3RhdGVJbmRleCA9IHRoaXMuc3RhdGVzLmxlbmd0aCAtIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0YXRlJC5uZXh0KHN0YXRlKTtcclxuICB9XHJcbn1cclxuIl19
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL21hcC9zaGFyZWQvY29udHJvbGxlcnMvdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBSWxDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFPN0M7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsYUFBYTtJQTZEbEQsWUFBb0IsT0FBa0M7UUFDcEQsS0FBSyxFQUFFLENBQUM7UUFEVSxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQTVEdEQ7O1dBRUc7UUFDSCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFTLFNBQVMsQ0FBQyxDQUFDO1FBRXJEOztXQUVHO1FBQ0gsV0FBTSxHQUFHLElBQUksZUFBZSxDQUFlLFNBQVMsQ0FBQyxDQUFDO1FBRXREOzs7V0FHRztRQUNILFlBQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZCOztXQUVHO1FBQ0gsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFPckI7O1dBRUc7UUFDSyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQWdELENBQUM7UUFPOUU7O1dBRUc7UUFDSyxXQUFNLEdBQW1CLEVBQUUsQ0FBQztRQUVwQzs7V0FFRztR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QU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDeEMsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUMzQyxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM3QyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDdEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDeEUsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztR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QUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT2xNYXAgZnJvbSAnb2wvTWFwJztcbmltcG9ydCBPbE1hcEV2ZW50IGZyb20gJ29sL01hcEV2ZW50JztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0ICogYXMgb2xlYXNpbmcgZnJvbSAnb2wvZWFzaW5nJztcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcbmltcG9ydCBPbFByb2plY3Rpb24gZnJvbSAnb2wvcHJvai9Qcm9qZWN0aW9uJztcbmltcG9ydCBPbFZpZXcgZnJvbSAnb2wvVmlldyc7XG5cbmltcG9ydCB7IE1hcFZpZXdBY3Rpb24gfSBmcm9tICcuLi9tYXAuZW51bXMnO1xuaW1wb3J0IHsgTWFwRXh0ZW50LCBNYXBWaWV3U3RhdGUgfSBmcm9tICcuLi9tYXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdldFNjYWxlRnJvbVJlc29sdXRpb24sIHZpZXdTdGF0ZXNBcmVFcXVhbCB9IGZyb20gJy4uL21hcC51dGlscyc7XG5pbXBvcnQgeyBNYXBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyJztcbmltcG9ydCB7IEV2ZW50c0tleSB9IGZyb20gJ29sL2V2ZW50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwVmlld0NvbnRyb2xsZXJPcHRpb25zIHtcbiAgc3RhdGVIaXN0b3J5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnRyb2xsZXIgdG8gaGFuZGxlIG1hcCB2aWV3IGludGVyYWN0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgTWFwVmlld0NvbnRyb2xsZXIgZXh0ZW5kcyBNYXBDb250cm9sbGVyIHtcbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIGN1cnJlbnQgcmVzb2x1dGlvblxuICAgKi9cbiAgcmVzb2x1dGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odW5kZWZpbmVkKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBvZiB0aGUgY3VycmVudCBzdGF0ZVxuICAgKi9cbiAgc3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNYXBWaWV3U3RhdGU+KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFZpZXcgUGFkZGluZ1xuICAgKiBWYWx1ZXMgaW4gdGhlIGFycmF5IGFyZSB0b3AsIHJpZ2h0LCBib3R0b20gYW5kIGxlZnQgcGFkZGluZy5cbiAgICovXG4gIHBhZGRpbmcgPSBbMCwgMCwgMCwgMF07XG5cbiAgLyoqXG4gICAqIE1heCB6b29tIGFmdGVyIHNldCBleHRlbnRcbiAgICovXG4gIG1heFpvb21PbkV4dGVudCA9IDE5O1xuXG4gIC8qKlxuICAgKiBNYXggZXh0ZW50IHBvc3NpYmxlIHdoZW4gem9vbWluZ1xuICAgKi9cbiAgbWF4TGF5ZXJab29tRXh0ZW50OiBNYXBFeHRlbnQ7XG5cbiAgLyoqXG4gICAqIEV4dGVudCBzdHJlYW1cbiAgICovXG4gIHByaXZhdGUgZXh0ZW50JCA9IG5ldyBTdWJqZWN0PHsgZXh0ZW50OiBNYXBFeHRlbnQ7IGFjdGlvbjogTWFwVmlld0FjdGlvbiB9PigpO1xuXG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24gdG8gdGhlIG1vdmVtZW50IHN0cmVhbVxuICAgKi9cbiAgcHJpdmF0ZSBleHRlbnQkJDogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBIaXN0b3J5IG9mIHN0YXRlc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0ZXM6IE1hcFZpZXdTdGF0ZVtdID0gW107XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc3RhdGUgaW5kZXhcbiAgICovXG4gIHByaXZhdGUgc3RhdGVJbmRleDogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdmlldyBjb250cm9sbGVyIHNob3VsZCBrZWVwIHRoZSB2aWV3J3Mgc3RhdGUgaGlzdG9yeVxuICAgKi9cbiAgZ2V0IHN0YXRlSGlzdG9yeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zID8gdGhpcy5vcHRpb25zLnN0YXRlSGlzdG9yeSA9PT0gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE9MIFZpZXdcbiAgICovXG4gIGdldCBvbFZpZXcoKTogT2xWaWV3IHtcbiAgICByZXR1cm4gdGhpcy5vbE1hcC5nZXRWaWV3KCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG9wdGlvbnM/OiBNYXBWaWV3Q29udHJvbGxlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgc2V0UGFkZGluZyhwYWRkaW5nOiB7IHRvcD86IG51bWJlciwgYm90dG9tPzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciB9KSB7XG4gICAgLy8gVmFsdWVzIGluIHRoZSBhcnJheSBhcmUgdG9wLCByaWdodCwgYm90dG9tIGFuZCBsZWZ0IHBhZGRpbmcuXG4gICAgaWYgKHBhZGRpbmcudG9wIHx8IHBhZGRpbmcudG9wID09PSAwKSB7XG4gICAgICB0aGlzLnBhZGRpbmdbMF0gPSBwYWRkaW5nLnRvcDtcbiAgICB9XG4gICAgaWYgKHBhZGRpbmcucmlnaHQgfHwgcGFkZGluZy5yaWdodCA9PT0gMCkge1xuICAgICAgdGhpcy5wYWRkaW5nWzFdID0gcGFkZGluZy5yaWdodDtcbiAgICB9XG4gICAgaWYgKHBhZGRpbmcuYm90dG9tIHx8IHBhZGRpbmcuYm90dG9tID09PSAwKSB7XG4gICAgICB0aGlzLnBhZGRpbmdbMl0gPSBwYWRkaW5nLmJvdHRvbTtcbiAgICB9XG4gICAgaWYgKHBhZGRpbmcubGVmdCB8fCBwYWRkaW5nLmxlZnQgPT09IDApIHtcbiAgICAgIHRoaXMucGFkZGluZ1szXSA9IHBhZGRpbmcubGVmdDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9yIHJlbW92ZSB0aGlzIGNvbnRyb2xsZXIgdG8vZnJvbSBhIG1hcC5cbiAgICogQHBhcmFtIG1hcCBPTCBNYXBcbiAgICovXG4gIHNldE9sTWFwKG9sTWFwOiBPbE1hcCB8IHVuZGVmaW5lZCkge1xuICAgIHN1cGVyLnNldE9sTWFwKG9sTWFwKTtcbiAgICB0aGlzLnNldHVwT2JzZXJ2ZXJzKCk7XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2ZSBtb3ZlIG1vdmVlbmQgYW5kIHN1YnNjcmliZSB0byB0aGUgZXh0ZW50IHN0cmVhbVxuICAgKi9cbiAgc2V0dXBPYnNlcnZlcnMoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVIaXN0b3J5ID09PSB0cnVlKSB7XG4gICAgICB0aGlzLm9ic2VydmVyS2V5cy5wdXNoKFxuICAgICAgICB0aGlzLm9sTWFwLm9uKCdtb3ZlZW5kJywgKGV2ZW50OiBPbE1hcEV2ZW50KSA9PiB0aGlzLm9uTW92ZUVuZChldmVudCkpIGFzIEV2ZW50c0tleVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmV4dGVudCQkID0gdGhpcy5leHRlbnQkXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjUpKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWU6IHsgZXh0ZW50OiBNYXBFeHRlbnQ7IGFjdGlvbjogTWFwVmlld0FjdGlvbiB9KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0RXh0ZW50KHZhbHVlLmV4dGVudCwgdmFsdWUuYWN0aW9uKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlYXJkb3duIGFueSBvYnNlcnZlcnNcbiAgICovXG4gIHRlYXJkb3duT2JzZXJ2ZXJzKCkge1xuICAgIHN1cGVyLnRlYXJkb3duT2JzZXJ2ZXJzKCk7XG4gICAgaWYgKHRoaXMuZXh0ZW50JCQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5leHRlbnQkJC51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5leHRlbnQkJCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2aWV3J3MgT0wgcHJvamVjdGlvblxuICAgKiBAcmV0dXJucyBPTCBwcm9qZWN0aW9uXG4gICAqL1xuICBnZXRPbFByb2plY3Rpb24oKTogT2xQcm9qZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5vbFZpZXcuZ2V0UHJvamVjdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBtYXAgdmlldyBjZW50ZXJcbiAgICogQHBhcmFtIHByb2plY3Rpb24gT3V0cHV0IHByb2plY3Rpb25cbiAgICogQHJldHVybnMgQ2VudGVyXG4gICAqL1xuICBnZXRDZW50ZXIocHJvamVjdGlvbj86IHN0cmluZyB8IE9sUHJvamVjdGlvbik6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIGxldCBjZW50ZXIgPSB0aGlzLm9sVmlldy5nZXRDZW50ZXIoKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGlmIChwcm9qZWN0aW9uICYmIGNlbnRlcikge1xuICAgICAgY2VudGVyID0gb2xwcm9qLnRyYW5zZm9ybShjZW50ZXIsIHRoaXMuZ2V0T2xQcm9qZWN0aW9uKCksIHByb2plY3Rpb24pIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgfVxuICAgIHJldHVybiBjZW50ZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHZpZXcgZXh0ZW50XG4gICAqIEBwYXJhbSBwcm9qZWN0aW9uIE91dHB1dCBwcm9qZWN0aW9uXG4gICAqIEByZXR1cm5zIEV4dGVudFxuICAgKi9cbiAgZ2V0RXh0ZW50KHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBNYXBFeHRlbnQge1xuICAgIGxldCBleHRlbnQgPSB0aGlzLm9sVmlldy5jYWxjdWxhdGVFeHRlbnQodGhpcy5vbE1hcC5nZXRTaXplKCkpO1xuICAgIGlmIChwcm9qZWN0aW9uICYmIGV4dGVudCkge1xuICAgICAgZXh0ZW50ID0gb2xwcm9qLnRyYW5zZm9ybUV4dGVudChcbiAgICAgICAgZXh0ZW50LFxuICAgICAgICB0aGlzLmdldE9sUHJvamVjdGlvbigpLFxuICAgICAgICBwcm9qZWN0aW9uXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZXh0ZW50IGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBzY2FsZVxuICAgKiBAcGFyYW0gZHBpIERvdCBwZXIgaW5jaGVzXG4gICAqIEByZXR1cm5zIFZpZXcgc2NhbGVcbiAgICovXG4gIGdldFNjYWxlKGRwaSA9IDk2KSB7XG4gICAgcmV0dXJuIGdldFNjYWxlRnJvbVJlc29sdXRpb24oXG4gICAgICB0aGlzLmdldFJlc29sdXRpb24oKSxcbiAgICAgIHRoaXMuZ2V0T2xQcm9qZWN0aW9uKCkuZ2V0VW5pdHMoKSxcbiAgICAgIGRwaVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHJlc29sdXRpb25cbiAgICogQHJldHVybnMgUHJvamVjdGlvbiBkZW5vbWluYXRvclxuICAgKi9cbiAgZ2V0UmVzb2x1dGlvbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm9sVmlldy5nZXRSZXNvbHV0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHpvb20gbGV2ZWxcbiAgICogQHJldHVybnMgWm9vbSBsZXZlbFxuICAgKi9cbiAgZ2V0Wm9vbSgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMub2xWaWV3LmdldFpvb20oKSk7XG4gIH1cblxuICAvKipcbiAgICogWm9vbSBpblxuICAgKi9cbiAgem9vbUluKCkge1xuICAgIHRoaXMuem9vbVRvKHRoaXMub2xWaWV3LmdldFpvb20oKSArIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb20gb3V0XG4gICAqL1xuICB6b29tT3V0KCkge1xuICAgIHRoaXMuem9vbVRvKHRoaXMub2xWaWV3LmdldFpvb20oKSAtIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb20gdG8gc3BlY2lmaWMgem9vbSBsZXZlbFxuICAgKiBAcGFyYW0gem9vbSBab29tIGxldmVsXG4gICAqL1xuICB6b29tVG8oem9vbTogbnVtYmVyKSB7XG4gICAgdGhpcy5vbFZpZXcuY2FuY2VsQW5pbWF0aW9ucygpO1xuICAgIHRoaXMub2xWaWV3LmFuaW1hdGUoe1xuICAgICAgem9vbSxcbiAgICAgIGR1cmF0aW9uOiAyNTAsXG4gICAgICBlYXNpbmc6IG9sZWFzaW5nLmVhc2VPdXRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIGV4dGVudCBhZnRlciBhIHNob3J0IGRlbGF5ICgxMDBtcykgdW5sZXNzXG4gICAqIGEgbmV3IG1vdmVtZW50IGdldHMgcmVnaXN0ZXJlZCBpbiB0aGUgbWVhbnRpbWUuXG4gICAqIEBwYXJhbSBleHRlbnQgRXh0ZW50IHRvIG1vdmUgdG9cbiAgICovXG4gIG1vdmVUb0V4dGVudChleHRlbnQ6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgdGhpcy5leHRlbnQkLm5leHQoeyBleHRlbnQsIGFjdGlvbjogTWFwVmlld0FjdGlvbi5Nb3ZlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFpvb20gdG8gZXh0ZW50IGFmdGVyIGEgc2hvcnQgZGVsYXkgKDEwMG1zKSB1bmxlc3NcbiAgICogYSBuZXcgbW92ZW1lbnQgZ2V0cyByZWdpc3RlcmVkIGluIHRoZSBtZWFudGltZS5cbiAgICogQHBhcmFtIGV4dGVudCBFeHRlbnQgdG8gem9vbSB0b1xuICAgKi9cbiAgem9vbVRvRXh0ZW50KGV4dGVudDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICB0aGlzLmV4dGVudCQubmV4dCh7IGV4dGVudCwgYWN0aW9uOiBNYXBWaWV3QWN0aW9uLlpvb20gfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHZpZXcgcm90YXRpb25cbiAgICogQHJldHVybnMgUm90YXRpb24gYW5nbGUgaW4gZGVncmVlc1xuICAgKi9cbiAgZ2V0Um90YXRpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vbFZpZXcuZ2V0Um90YXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgdmlldyByb3RhdGlvbiB0byAwXG4gICAqL1xuICByZXNldFJvdGF0aW9uKCkge1xuICAgIHRoaXMub2xWaWV3LmFuaW1hdGUoeyByb3RhdGlvbjogMCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB2aWV3IGhhcyBhIHByZXZpb3VzIHN0YXRlXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZpZXcgaGFzIGEgcHJldmlvdXMgc3RhdGVcbiAgICovXG4gIGhhc1ByZXZpb3VzU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVzLmxlbmd0aCA+IDEgJiYgdGhpcy5zdGF0ZUluZGV4ID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB2aWV3IGhhcyBhIG5leHQgc3RhdGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmlldyBoYXMgYSBuZXh0IHN0YXRlXG4gICAqL1xuICBoYXNOZXh0U3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVzLmxlbmd0aCA+IDEgJiYgdGhpcy5zdGF0ZUluZGV4IDwgdGhpcy5zdGF0ZXMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBwcmV2aW91cyB2aWV3IHN0YXRlXG4gICAqL1xuICBwcmV2aW91c1N0YXRlKCkge1xuICAgIGlmICh0aGlzLmhhc1ByZXZpb3VzU3RhdGUoKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZUluZGV4KHRoaXMuc3RhdGVJbmRleCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHRoZSBuZXh0IHZpZXcgc3RhdGVcbiAgICovXG4gIG5leHRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5oYXNOZXh0U3RhdGUoKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZUluZGV4KHRoaXMuc3RhdGVJbmRleCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgc3RhdGUgaGlzdG9yeVxuICAgKi9cbiAgY2xlYXJTdGF0ZUhpc3RvcnkoKSB7XG4gICAgdGhpcy5zdGF0ZXMgPSBbXTtcbiAgICB0aGlzLnN0YXRlSW5kZXggPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgdGhlIHZpZXcgdG8gaXQncyBpbnRpYWwgc3RhdGVcbiAgICovXG4gIHNldEluaXRpYWxTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZUluZGV4KDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRvIHRoZSBleHRlbnQgcmV0cmlldmVkIGZyb20gdGhlIHN0cmVhbVxuICAgKiBAcGFyYW0gZXh0ZW50IEV4dGVudFxuICAgKiBAcGFyYW0gYWN0aW9uIEVpdGhlciB6b29tIG9yIG1vdmVcbiAgICogQHBhcmFtIGFuaW1hdGlvbiBXaXRoIG9yIHdpdGhvdXQgYW5pbWF0aW9uIHRvIHRoZSB0YXJnZXQgZXh0ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRFeHRlbnQoXG4gICAgZXh0ZW50OiBNYXBFeHRlbnQsXG4gICAgYWN0aW9uOiBNYXBWaWV3QWN0aW9uLFxuICAgIGFuaW1hdGlvbjogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgY29uc3Qgb2xWaWV3ID0gdGhpcy5vbFZpZXc7XG4gICAgb2xWaWV3LmNhbmNlbEFuaW1hdGlvbnMoKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IGFuaW1hdGlvbiA/IDUwMCA6IDA7XG4gICAgY29uc3Qgem9vbSA9IG9sVmlldy5nZXRab29tKCk7XG5cbiAgICBjb25zdCBmcm9tQ2VudGVyID0gb2xWaWV3LmdldENlbnRlcigpO1xuICAgIGNvbnN0IHRvQ2VudGVyID0gW1xuICAgICAgZXh0ZW50WzBdICsgKGV4dGVudFsyXSAtIGV4dGVudFswXSkgLyAyLFxuICAgICAgZXh0ZW50WzFdICsgKGV4dGVudFszXSAtIGV4dGVudFsxXSkgLyAyXG4gICAgXTtcbiAgICBjb25zdCBkaXN0Q2VudGVyID0gTWF0aC5zcXJ0KFxuICAgICAgTWF0aC5wb3coZnJvbUNlbnRlclswXSAtIHRvQ2VudGVyWzBdLCAyKSArXG4gICAgICAgIE1hdGgucG93KGZyb21DZW50ZXJbMV0gLSB0b0NlbnRlclsxXSwgMilcbiAgICApO1xuICAgIGNvbnN0IGZyb21FeHRlbnQgPSBvbFZpZXcuY2FsY3VsYXRlRXh0ZW50KCk7XG4gICAgY29uc3QgZnJvbVNpemUgPSBNYXRoLnNxcnQoXG4gICAgICBNYXRoLnBvdyhmcm9tRXh0ZW50WzJdIC0gZnJvbUV4dGVudFswXSwgMikgK1xuICAgICAgICBNYXRoLnBvdyhmcm9tRXh0ZW50WzNdIC0gZnJvbUV4dGVudFsxXSwgMilcbiAgICApO1xuICAgIGNvbnN0IHRvU2l6ZSA9IE1hdGguc3FydChcbiAgICAgIE1hdGgucG93KGV4dGVudFsyXSAtIGV4dGVudFswXSwgMikgKyBNYXRoLnBvdyhleHRlbnRbM10gLSBleHRlbnRbMV0sIDIpXG4gICAgKTtcbiAgICBjb25zdCBtb3lTaXplID0gKHRvU2l6ZSArIGZyb21TaXplKSAvIDI7XG4gICAgY29uc3QgeFNpemUgPSBkaXN0Q2VudGVyIC8gbW95U2l6ZTtcblxuICAgIGNvbnN0IG1heFpvb20gPVxuICAgICAgYWN0aW9uID09PSBNYXBWaWV3QWN0aW9uLk1vdmUgfHwgem9vbSA+IHRoaXMubWF4Wm9vbU9uRXh0ZW50XG4gICAgICAgID8gem9vbVxuICAgICAgICA6IHRoaXMubWF4Wm9vbU9uRXh0ZW50O1xuXG4gICAgb2xWaWV3LmZpdChleHRlbnQsIHtcbiAgICAgIHNpemU6IHRoaXMub2xNYXAuZ2V0U2l6ZSgpLFxuICAgICAgbWF4Wm9vbSxcbiAgICAgIHBhZGRpbmc6IHRoaXMucGFkZGluZyxcbiAgICAgIGR1cmF0aW9uOiB4U2l6ZSA+IDQgPyAwIDogZHVyYXRpb24sXG4gICAgICBjYWxsYmFjazogKGlzRmluaXNoZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKCFpc0ZpbmlzaGVkKSB7XG4gICAgICAgICAgb2xWaWV3LmZpdChleHRlbnQsIHtcbiAgICAgICAgICAgIHNpemU6IHRoaXMub2xNYXAuZ2V0U2l6ZSgpLFxuICAgICAgICAgICAgbWF4Wm9vbSxcbiAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMucGFkZGluZyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiB4U2l6ZSA+IDQgPyAwIDogZHVyYXRpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdmlldyBzdGF0ZSBpbmRleFxuICAgKiBAcGFyYW0gaW5kZXggU3RhdGUgaW5kZXhcbiAgICovXG4gIHByaXZhdGUgc2V0U3RhdGVJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zdGF0ZUluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlc1tpbmRleF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdmlldyBzdGF0ZVxuICAgKiBAcGFyYW0gc3RhdGUgVmlldyBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTdGF0ZShzdGF0ZTogTWFwVmlld1N0YXRlKSB7XG4gICAgdGhpcy5vbFZpZXcuYW5pbWF0ZSh7XG4gICAgICByZXNvbHV0aW9uOiBzdGF0ZS5yZXNvbHV0aW9uLFxuICAgICAgY2VudGVyOiBzdGF0ZS5jZW50ZXIsXG4gICAgICBkdXJhdGlvbjogMFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIG1vdmUgZW5kLCBnZXQgdGhlIHZpZXcgc3RhdGUgYW5kIHJlY29yZCBpdC5cbiAgICogQHBhcmFtIGV2ZW50IE1hcCBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBvbk1vdmVFbmQoZXZlbnQ6IE9sTWFwRXZlbnQpIHtcbiAgICBjb25zdCByZXNvbHV0aW9uID0gdGhpcy5nZXRSZXNvbHV0aW9uKCk7XG4gICAgaWYgKHRoaXMucmVzb2x1dGlvbiQudmFsdWUgIT09IHJlc29sdXRpb24pIHtcbiAgICAgIHRoaXMucmVzb2x1dGlvbiQubmV4dChyZXNvbHV0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgIHJlc29sdXRpb24sXG4gICAgICBjZW50ZXI6IHRoaXMuZ2V0Q2VudGVyKCksXG4gICAgICB6b29tOiB0aGlzLmdldFpvb20oKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zdGF0ZUhpc3RvcnkgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IHN0YXRlSW5kZXggPSB0aGlzLnN0YXRlSW5kZXg7XG4gICAgICBjb25zdCBzdGF0ZUF0SW5kZXggPVxuICAgICAgICB0aGlzLnN0YXRlcy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiB0aGlzLnN0YXRlc1tzdGF0ZUluZGV4XTtcbiAgICAgIGlmICghdmlld1N0YXRlc0FyZUVxdWFsKHN0YXRlLCBzdGF0ZUF0SW5kZXgpKSB7XG4gICAgICAgIHRoaXMuc3RhdGVzID0gdGhpcy5zdGF0ZXMuc2xpY2UoMCwgc3RhdGVJbmRleCArIDEpLmNvbmNhdChbc3RhdGVdKTtcbiAgICAgICAgdGhpcy5zdGF0ZUluZGV4ID0gdGhpcy5zdGF0ZXMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlJC5uZXh0KHN0YXRlKTtcbiAgfVxufVxuIl19
|