@igo2/geo 1.13.2 → 1.13.4
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/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
- package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +2 -2
- package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
- package/esm2020/lib/catalog/catalog.module.mjs +1 -1
- package/esm2020/lib/catalog/index.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.service.mjs +1 -1
- package/esm2020/lib/catalog/shared/index.mjs +1 -1
- package/esm2020/lib/datasource/datasource.module.mjs +1 -1
- package/esm2020/lib/datasource/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/capabilities.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasource.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +2 -1
- package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/index.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
- package/esm2020/lib/datasource/utils/esri-style-generator.mjs +1 -1
- package/esm2020/lib/datasource/utils/index.mjs +1 -1
- package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
- package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +2 -2
- package/esm2020/lib/directions/directions-buttons/index.mjs +1 -1
- package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
- package/esm2020/lib/directions/directions-inputs/index.mjs +1 -1
- package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
- package/esm2020/lib/directions/directions-results/index.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/index.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
- package/esm2020/lib/directions/directions.component.mjs +2 -2
- package/esm2020/lib/directions/directions.module.mjs +1 -1
- package/esm2020/lib/directions/index.mjs +1 -1
- package/esm2020/lib/directions/shared/directions-source.service.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.enum.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.utils.mjs +1 -1
- package/esm2020/lib/directions/shared/index.mjs +1 -1
- package/esm2020/lib/directions/shared/store.mjs +1 -1
- package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
- package/esm2020/lib/download/download-button/index.mjs +1 -1
- package/esm2020/lib/download/download.module.mjs +1 -1
- package/esm2020/lib/download/index.mjs +1 -1
- package/esm2020/lib/download/shared/download.interface.mjs +1 -1
- package/esm2020/lib/download/shared/download.service.mjs +1 -1
- package/esm2020/lib/download/shared/index.mjs +1 -1
- package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +55 -0
- package/esm2020/lib/draw/draw/draw-popup.component.mjs +2 -2
- package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
- package/esm2020/lib/draw/draw/draw.component.mjs +417 -173
- package/esm2020/lib/draw/draw/draw.module.mjs +4 -3
- package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
- package/esm2020/lib/draw/index.mjs +1 -1
- package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
- package/esm2020/lib/draw/shared/draw-style.service.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.enum.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
- package/esm2020/lib/draw/shared/index.mjs +1 -1
- package/esm2020/lib/feature/feature-details/feature-details.component.mjs +13 -11
- package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
- package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
- package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
- package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
- package/esm2020/lib/feature/feature.module.mjs +1 -1
- package/esm2020/lib/feature/index.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.enums.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.utils.mjs +1 -1
- package/esm2020/lib/feature/shared/index.mjs +1 -1
- package/esm2020/lib/feature/shared/store.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/index.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
- package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
- package/esm2020/lib/filter/filter.module.mjs +1 -1
- package/esm2020/lib/filter/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-time/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
- package/esm2020/lib/filter/ogc-filterable-list/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +2 -2
- package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
- package/esm2020/lib/filter/shared/index.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +2 -2
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +2 -2
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
- package/esm2020/lib/filter/time-filter-list/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
- package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
- package/esm2020/lib/geo.module.mjs +1 -1
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +1 -1
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
- package/esm2020/lib/geometry/geometry.module.mjs +1 -1
- package/esm2020/lib/geometry/index.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/index.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
- package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
- package/esm2020/lib/geometry/shared/index.mjs +1 -1
- package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
- package/esm2020/lib/import-export/export-button/index.mjs +1 -1
- package/esm2020/lib/import-export/import-export/import-export.component.mjs +2 -2
- package/esm2020/lib/import-export/import-export/index.mjs +1 -1
- package/esm2020/lib/import-export/import-export.module.mjs +1 -1
- package/esm2020/lib/import-export/index.mjs +1 -1
- package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.errors.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.service.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.utils.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.utils.mjs +1 -1
- package/esm2020/lib/import-export/shared/index.mjs +1 -1
- package/esm2020/lib/import-export/style-list/index.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.module.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.provider.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.service.mjs +1 -1
- package/esm2020/lib/layer/index.mjs +1 -1
- package/esm2020/lib/layer/layer-item/index.mjs +1 -1
- package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
- package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +2 -2
- package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
- package/esm2020/lib/layer/layer-legend-list/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
- package/esm2020/lib/layer/layer-list/index.mjs +1 -1
- package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
- package/esm2020/lib/layer/layer-list/layer-list.component.mjs +2 -2
- package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/index.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
- package/esm2020/lib/layer/layer.module.mjs +1 -1
- package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
- package/esm2020/lib/layer/shared/index.mjs +1 -1
- package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
- package/esm2020/lib/layer/shared/layer.service.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/image-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/index.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vector-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/style.service.mjs +1 -1
- package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
- package/esm2020/lib/layer/style-modal/index.mjs +1 -1
- package/esm2020/lib/layer/style-modal/style-modal.component.mjs +2 -2
- package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
- package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
- package/esm2020/lib/layer/utils/image-watcher.mjs +1 -1
- package/esm2020/lib/layer/utils/index.mjs +1 -1
- package/esm2020/lib/layer/utils/layer.utils.mjs +1 -1
- package/esm2020/lib/layer/utils/outputLegend.mjs +1 -1
- package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
- package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
- package/esm2020/lib/map/baselayers-switcher/index.mjs +1 -1
- package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +2 -2
- package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +2 -2
- package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
- package/esm2020/lib/map/index.mjs +1 -1
- package/esm2020/lib/map/info-section/index.mjs +1 -1
- package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
- package/esm2020/lib/map/map-browser/index.mjs +1 -1
- package/esm2020/lib/map/map-browser/map-browser.component.mjs +2 -2
- package/esm2020/lib/map/map-center/index.mjs +1 -1
- package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
- package/esm2020/lib/map/map.module.mjs +1 -1
- package/esm2020/lib/map/menu-button/index.mjs +1 -1
- package/esm2020/lib/map/menu-button/menu-button.component.mjs +2 -2
- package/esm2020/lib/map/offline-button/index.mjs +1 -1
- package/esm2020/lib/map/offline-button/offline-button.component.mjs +2 -2
- package/esm2020/lib/map/rotation-button/index.mjs +1 -1
- package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +2 -2
- package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
- package/esm2020/lib/map/shared/controllers/geolocation.mjs +1 -1
- package/esm2020/lib/map/shared/controllers/index.mjs +1 -1
- package/esm2020/lib/map/shared/controllers/view.mjs +1 -1
- package/esm2020/lib/map/shared/hover-feature.directive.mjs +1 -1
- package/esm2020/lib/map/shared/index.mjs +1 -1
- package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
- package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
- package/esm2020/lib/map/shared/map.enums.mjs +1 -1
- package/esm2020/lib/map/shared/map.interface.mjs +1 -1
- package/esm2020/lib/map/shared/map.mjs +1 -1
- package/esm2020/lib/map/shared/map.service.mjs +1 -1
- package/esm2020/lib/map/shared/map.utils.mjs +1 -1
- package/esm2020/lib/map/shared/mapOffline.directive.mjs +1 -1
- package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
- package/esm2020/lib/map/shared/projection.service.mjs +1 -1
- package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
- package/esm2020/lib/map/swipe-control/index.mjs +1 -1
- package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +2 -2
- package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
- package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
- package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +2 -2
- package/esm2020/lib/map/zoom-button/index.mjs +1 -1
- package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
- package/esm2020/lib/measure/index.mjs +1 -1
- package/esm2020/lib/measure/measure.module.mjs +1 -1
- package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
- package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
- package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
- package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
- package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
- package/esm2020/lib/measure/shared/index.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
- package/esm2020/lib/metadata/index.mjs +1 -1
- package/esm2020/lib/metadata/metadata-button/index.mjs +1 -1
- package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
- package/esm2020/lib/metadata/metadata.module.mjs +1 -1
- package/esm2020/lib/metadata/shared/index.mjs +1 -1
- package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
- package/esm2020/lib/metadata/shared/metadata.service.mjs +1 -1
- package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.service.mjs +1 -1
- package/esm2020/lib/offline/geoDB/index.mjs +1 -1
- package/esm2020/lib/offline/index.mjs +1 -1
- package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
- package/esm2020/lib/offline/shared/index.mjs +1 -1
- package/esm2020/lib/overlay/index.mjs +1 -1
- package/esm2020/lib/overlay/overlay.module.mjs +1 -1
- package/esm2020/lib/overlay/shared/index.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
- package/esm2020/lib/overlay/shared/overlay.utils.mjs +1 -1
- package/esm2020/lib/print/index.mjs +1 -1
- package/esm2020/lib/print/print/print.component.mjs +2 -2
- package/esm2020/lib/print/print-form/index.mjs +1 -1
- package/esm2020/lib/print/print-form/print-form.component.mjs +2 -2
- package/esm2020/lib/print/print.module.mjs +1 -1
- package/esm2020/lib/print/shared/index.mjs +1 -1
- package/esm2020/lib/print/shared/print.interface.mjs +1 -1
- package/esm2020/lib/print/shared/print.service.mjs +1 -1
- package/esm2020/lib/print/shared/print.type.mjs +1 -1
- package/esm2020/lib/query/index.mjs +1 -1
- package/esm2020/lib/query/query.module.mjs +1 -1
- package/esm2020/lib/query/shared/index.mjs +1 -1
- package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
- package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
- package/esm2020/lib/query/shared/query.directive.mjs +1 -1
- package/esm2020/lib/query/shared/query.enums.mjs +1 -1
- package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
- package/esm2020/lib/query/shared/query.service.mjs +1 -1
- package/esm2020/lib/query/shared/query.utils.mjs +1 -1
- package/esm2020/lib/search/index.mjs +1 -1
- package/esm2020/lib/search/search-bar/search-bar.component.mjs +2 -2
- package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
- package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
- package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +2 -2
- package/esm2020/lib/search/search-results/search-results-item.component.mjs +2 -2
- package/esm2020/lib/search/search-results/search-results.component.mjs +2 -2
- package/esm2020/lib/search/search-results/search-results.module.mjs +1 -1
- package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
- package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
- package/esm2020/lib/search/search-settings/search-settings.component.mjs +2 -2
- package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
- package/esm2020/lib/search/search.module.mjs +1 -1
- package/esm2020/lib/search/shared/index.mjs +1 -1
- package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +1 -1
- package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
- package/esm2020/lib/search/shared/search-source.service.mjs +1 -1
- package/esm2020/lib/search/shared/search.enums.mjs +1 -1
- package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/search.service.mjs +1 -1
- package/esm2020/lib/search/shared/search.utils.mjs +1 -1
- package/esm2020/lib/search/shared/sources/cadastre.mjs +1 -1
- package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/coordinates.mjs +1 -1
- package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/icherche.mjs +1 -1
- package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/ilayer.mjs +1 -1
- package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/index.mjs +1 -1
- package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
- package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
- package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/source.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
- package/esm2020/lib/toast/index.mjs +1 -1
- package/esm2020/lib/toast/toast.component.mjs +2 -2
- package/esm2020/lib/toast/toast.module.mjs +1 -1
- package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
- package/esm2020/lib/utils/commonVectorStyle.mjs +1 -1
- package/esm2020/lib/utils/googleLinks.mjs +1 -1
- package/esm2020/lib/utils/id-generator.mjs +1 -1
- package/esm2020/lib/utils/index.mjs +1 -1
- package/esm2020/lib/utils/osmLinks.mjs +1 -1
- package/esm2020/lib/wkt/index.mjs +1 -1
- package/esm2020/lib/wkt/shared/index.mjs +1 -1
- package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
- package/esm2020/lib/wkt/wkt.module.mjs +1 -1
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
- package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
- package/esm2020/lib/workspace/index.mjs +1 -1
- package/esm2020/lib/workspace/shared/edition-workspace.mjs +1 -1
- package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
- package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/index.mjs +1 -1
- package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
- package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +1 -1
- package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
- package/esm2020/lib/workspace/widgets/index.mjs +1 -1
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
- package/esm2020/lib/workspace/widgets/widgets.mjs +1 -1
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
- package/esm2020/lib/workspace/workspace.module.mjs +1 -1
- package/esm2020/public_api.mjs +1 -1
- package/fesm2015/igo2-geo.mjs +596 -289
- package/fesm2015/igo2-geo.mjs.map +1 -1
- package/fesm2020/igo2-geo.mjs +582 -289
- package/fesm2020/igo2-geo.mjs.map +1 -1
- package/lib/draw/draw/draw-layer-popup.component.d.ts +14 -0
- package/lib/draw/draw/draw.component.d.ts +38 -10
- package/lib/draw/draw/draw.module.d.ts +22 -21
- package/lib/draw/shared/draw.interface.d.ts +6 -0
- package/lib/feature/feature-details/feature-details.component.d.ts +2 -3
- package/lib/import-export/shared/import.interface.d.ts +1 -0
- package/ngcc.config.js +3 -3
- package/package.json +4 -4
- package/style/geo.theming.scss +12 -12
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Component, Input, ChangeDetectionStrategy, Output } from '@angular/core';
|
|
2
|
-
import { FEATURE, FeatureStoreSelectionStrategy, tryBindStoreLayer, tryAddLoadingStrategy, tryAddSelectionStrategy, FeatureMotion, FeatureStoreLoadingStrategy, featureToOl } from '../../feature';
|
|
1
|
+
import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter, ViewChild } from '@angular/core';
|
|
2
|
+
import { FEATURE, FeatureStore, FeatureStoreSelectionStrategy, tryBindStoreLayer, tryAddLoadingStrategy, tryAddSelectionStrategy, FeatureMotion, FeatureStoreLoadingStrategy, featureToOl } from '../../feature';
|
|
3
3
|
import { FontType, GeometryType } from '../shared/draw.enum';
|
|
4
4
|
import { BehaviorSubject } from 'rxjs';
|
|
5
5
|
import { VectorLayer } from '../../layer/shared/layers/vector-layer';
|
|
@@ -11,7 +11,7 @@ import OlCircle from 'ol/geom/Circle';
|
|
|
11
11
|
import OlPoint from 'ol/geom/Point';
|
|
12
12
|
import OlGeoJSON from 'ol/format/GeoJSON';
|
|
13
13
|
import { getDistance } from 'ol/sphere';
|
|
14
|
-
import {
|
|
14
|
+
import { first, skip } from 'rxjs/operators';
|
|
15
15
|
import { DrawPopupComponent } from './draw-popup.component';
|
|
16
16
|
import { DrawShorcutsComponent } from './draw-shorcuts.component';
|
|
17
17
|
import { getTooltipsOfOlGeometry } from '../../measure/shared/measure.utils';
|
|
@@ -20,6 +20,7 @@ import { transform } from 'ol/proj';
|
|
|
20
20
|
import { StyleModalComponent } from '../../layer/style-modal/style-modal.component';
|
|
21
21
|
import { trigger, state, style, animate, transition } from '@angular/animations';
|
|
22
22
|
import Point from 'ol/geom/Point';
|
|
23
|
+
import { DrawLayerPopupComponent } from './draw-layer-popup.component';
|
|
23
24
|
import * as i0 from "@angular/core";
|
|
24
25
|
import * as i1 from "@igo2/core";
|
|
25
26
|
import * as i2 from "@angular/forms";
|
|
@@ -29,92 +30,118 @@ import * as i5 from "../shared/draw-icon.service";
|
|
|
29
30
|
import * as i6 from "@angular/common";
|
|
30
31
|
import * as i7 from "@angular/material/button";
|
|
31
32
|
import * as i8 from "@angular/material/button-toggle";
|
|
32
|
-
import * as i9 from "@angular/material/
|
|
33
|
-
import * as i10 from "@angular/material/
|
|
34
|
-
import * as i11 from "@angular/material/
|
|
35
|
-
import * as i12 from "@angular/material/
|
|
36
|
-
import * as i13 from "@angular/material/
|
|
37
|
-
import * as i14 from "@angular/material/
|
|
38
|
-
import * as i15 from "@angular/material/
|
|
39
|
-
import * as i16 from "@
|
|
40
|
-
import * as i17 from "@
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
i0.ɵɵ
|
|
33
|
+
import * as i9 from "@angular/material/divider";
|
|
34
|
+
import * as i10 from "@angular/material/form-field";
|
|
35
|
+
import * as i11 from "@angular/material/icon";
|
|
36
|
+
import * as i12 from "@angular/material/badge";
|
|
37
|
+
import * as i13 from "@angular/material/tooltip";
|
|
38
|
+
import * as i14 from "@angular/material/select";
|
|
39
|
+
import * as i15 from "@angular/material/core";
|
|
40
|
+
import * as i16 from "@angular/material/slide-toggle";
|
|
41
|
+
import * as i17 from "@igo2/common";
|
|
42
|
+
import * as i18 from "@ngx-translate/core";
|
|
43
|
+
const _c0 = ["selectedLayer"];
|
|
44
|
+
function DrawComponent_mat_option_30_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "mat-option", 2);
|
|
46
|
+
i0.ɵɵtext(1);
|
|
47
|
+
i0.ɵɵelementEnd();
|
|
48
|
+
} if (rf & 2) {
|
|
49
|
+
const layer_r7 = ctx.$implicit;
|
|
50
|
+
i0.ɵɵproperty("value", layer_r7);
|
|
51
|
+
i0.ɵɵadvance(1);
|
|
52
|
+
i0.ɵɵtextInterpolate1(" ", layer_r7.title, " ");
|
|
53
|
+
} }
|
|
54
|
+
function DrawComponent_button_34_Template(rf, ctx) { if (rf & 1) {
|
|
55
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
56
|
+
i0.ɵɵelementStart(0, "button", 20);
|
|
57
|
+
i0.ɵɵlistener("click", function DrawComponent_button_34_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.activeDrawingLayer.visible = !ctx_r8.activeDrawingLayer.visible); });
|
|
58
|
+
i0.ɵɵpipe(1, "translate");
|
|
59
|
+
i0.ɵɵpipe(2, "translate");
|
|
60
|
+
i0.ɵɵelement(3, "mat-icon", 21);
|
|
61
|
+
i0.ɵɵelementEnd();
|
|
62
|
+
} if (rf & 2) {
|
|
63
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
64
|
+
i0.ɵɵproperty("color", ctx_r2.activeDrawingLayer.visible ? "primary" : "default")("matTooltip", ctx_r2.activeDrawingLayer.visible ? i0.ɵɵpipeBind1(1, 3, "igo.geo.layer.hideLayer") : i0.ɵɵpipeBind1(2, 5, "igo.geo.layer.showLayer"));
|
|
65
|
+
i0.ɵɵadvance(3);
|
|
66
|
+
i0.ɵɵproperty("svgIcon", ctx_r2.activeDrawingLayer.visible ? "eye" : "eye-off");
|
|
67
|
+
} }
|
|
68
|
+
function DrawComponent_button_37_Template(rf, ctx) { if (rf & 1) {
|
|
69
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
70
|
+
i0.ɵɵelementStart(0, "button", 22);
|
|
71
|
+
i0.ɵɵlistener("click", function DrawComponent_button_37_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r10 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r10.deleteDrawings()); });
|
|
45
72
|
i0.ɵɵpipe(1, "translate");
|
|
46
73
|
i0.ɵɵpipe(2, "async");
|
|
47
|
-
i0.ɵɵelement(3, "mat-icon",
|
|
74
|
+
i0.ɵɵelement(3, "mat-icon", 23);
|
|
48
75
|
i0.ɵɵelementEnd();
|
|
49
76
|
} if (rf & 2) {
|
|
50
|
-
const
|
|
51
|
-
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.geo.draw.delete"))("disabled", i0.ɵɵpipeBind1(2, 4,
|
|
77
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
78
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.geo.draw.delete"))("disabled", i0.ɵɵpipeBind1(2, 4, ctx_r3.selectedFeatures$).length === 0);
|
|
52
79
|
} }
|
|
53
|
-
function
|
|
54
|
-
i0.ɵɵelementStart(0, "div",
|
|
55
|
-
i0.ɵɵelement(1, "img",
|
|
80
|
+
function DrawComponent_mat_form_field_42_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
+
i0.ɵɵelementStart(0, "div", 27);
|
|
82
|
+
i0.ɵɵelement(1, "img", 28);
|
|
56
83
|
i0.ɵɵelementEnd();
|
|
57
84
|
} if (rf & 2) {
|
|
58
|
-
const
|
|
85
|
+
const ctx_r12 = i0.ɵɵnextContext(2);
|
|
59
86
|
i0.ɵɵadvance(1);
|
|
60
|
-
i0.ɵɵpropertyInterpolate("src",
|
|
87
|
+
i0.ɵɵpropertyInterpolate("src", ctx_r12.icon, i0.ɵɵsanitizeUrl);
|
|
61
88
|
} }
|
|
62
|
-
function
|
|
63
|
-
const
|
|
64
|
-
i0.ɵɵelementStart(0, "mat-option",
|
|
65
|
-
i0.ɵɵlistener("click", function
|
|
66
|
-
i0.ɵɵelementStart(1, "div",
|
|
67
|
-
i0.ɵɵelement(2, "img",
|
|
89
|
+
function DrawComponent_mat_form_field_42_mat_option_10_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
91
|
+
i0.ɵɵelementStart(0, "mat-option", 29);
|
|
92
|
+
i0.ɵɵlistener("click", function DrawComponent_mat_form_field_42_mat_option_10_Template_mat_option_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r16); const icon_html_r14 = restoredCtx.$implicit; const ctx_r15 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r15.onIconChange(icon_html_r14)); });
|
|
93
|
+
i0.ɵɵelementStart(1, "div", 27);
|
|
94
|
+
i0.ɵɵelement(2, "img", 28);
|
|
68
95
|
i0.ɵɵelementEnd()();
|
|
69
96
|
} if (rf & 2) {
|
|
70
|
-
const
|
|
71
|
-
i0.ɵɵproperty("value",
|
|
97
|
+
const icon_html_r14 = ctx.$implicit;
|
|
98
|
+
i0.ɵɵproperty("value", icon_html_r14);
|
|
72
99
|
i0.ɵɵadvance(2);
|
|
73
|
-
i0.ɵɵpropertyInterpolate("src",
|
|
100
|
+
i0.ɵɵpropertyInterpolate("src", icon_html_r14, i0.ɵɵsanitizeUrl);
|
|
74
101
|
} }
|
|
75
|
-
function
|
|
76
|
-
const
|
|
102
|
+
function DrawComponent_mat_form_field_42_Template(rf, ctx) { if (rf & 1) {
|
|
103
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
77
104
|
i0.ɵɵelementStart(0, "mat-form-field")(1, "mat-label");
|
|
78
105
|
i0.ɵɵtext(2);
|
|
79
106
|
i0.ɵɵpipe(3, "translate");
|
|
80
107
|
i0.ɵɵelementEnd();
|
|
81
108
|
i0.ɵɵelementStart(4, "mat-select")(5, "mat-select-trigger");
|
|
82
|
-
i0.ɵɵtemplate(6,
|
|
109
|
+
i0.ɵɵtemplate(6, DrawComponent_mat_form_field_42_div_6_Template, 2, 1, "div", 24);
|
|
83
110
|
i0.ɵɵelementEnd();
|
|
84
|
-
i0.ɵɵelementStart(7, "mat-option",
|
|
85
|
-
i0.ɵɵlistener("click", function
|
|
111
|
+
i0.ɵɵelementStart(7, "mat-option", 25);
|
|
112
|
+
i0.ɵɵlistener("click", function DrawComponent_mat_form_field_42_Template_mat_option_click_7_listener() { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r17.onIconChange()); });
|
|
86
113
|
i0.ɵɵtext(8);
|
|
87
114
|
i0.ɵɵpipe(9, "translate");
|
|
88
115
|
i0.ɵɵelementEnd();
|
|
89
|
-
i0.ɵɵtemplate(10,
|
|
116
|
+
i0.ɵɵtemplate(10, DrawComponent_mat_form_field_42_mat_option_10_Template, 3, 2, "mat-option", 26);
|
|
90
117
|
i0.ɵɵelementEnd()();
|
|
91
118
|
} if (rf & 2) {
|
|
92
|
-
const
|
|
119
|
+
const ctx_r5 = i0.ɵɵnextContext();
|
|
93
120
|
i0.ɵɵadvance(2);
|
|
94
121
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.draw.icon"));
|
|
95
122
|
i0.ɵɵadvance(4);
|
|
96
|
-
i0.ɵɵproperty("ngIf",
|
|
123
|
+
i0.ɵɵproperty("ngIf", ctx_r5.icon);
|
|
97
124
|
i0.ɵɵadvance(2);
|
|
98
125
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 6, "igo.geo.draw.noIcon"));
|
|
99
126
|
i0.ɵɵadvance(2);
|
|
100
|
-
i0.ɵɵproperty("ngForOf",
|
|
127
|
+
i0.ɵɵproperty("ngForOf", ctx_r5.icons);
|
|
101
128
|
} }
|
|
102
|
-
function
|
|
103
|
-
const
|
|
104
|
-
i0.ɵɵelementStart(0, "button",
|
|
105
|
-
i0.ɵɵlistener("click", function
|
|
129
|
+
function DrawComponent_button_46_Template(rf, ctx) { if (rf & 1) {
|
|
130
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
131
|
+
i0.ɵɵelementStart(0, "button", 30);
|
|
132
|
+
i0.ɵɵlistener("click", function DrawComponent_button_46_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r19.openStyleModalDialog()); });
|
|
106
133
|
i0.ɵɵpipe(1, "translate");
|
|
107
134
|
i0.ɵɵtext(2);
|
|
108
135
|
i0.ɵɵpipe(3, "translate");
|
|
109
|
-
i0.ɵɵelement(4, "mat-icon",
|
|
136
|
+
i0.ɵɵelement(4, "mat-icon", 31);
|
|
110
137
|
i0.ɵɵelementEnd();
|
|
111
138
|
} if (rf & 2) {
|
|
112
|
-
const
|
|
139
|
+
const ctx_r6 = i0.ɵɵnextContext();
|
|
113
140
|
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 3, "igo.geo.layer.style.styleModalTooltip"));
|
|
114
141
|
i0.ɵɵadvance(2);
|
|
115
142
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 5, "igo.geo.layer.style.styleModal"), " ");
|
|
116
143
|
i0.ɵɵadvance(2);
|
|
117
|
-
i0.ɵɵproperty("matBadge",
|
|
144
|
+
i0.ɵɵproperty("matBadge", ctx_r6.selectedFeatures$.value.length);
|
|
118
145
|
} }
|
|
119
146
|
export class DrawComponent {
|
|
120
147
|
constructor(languageService, formBuilder, drawStyleService, dialog, drawIconService) {
|
|
@@ -146,13 +173,21 @@ export class DrawComponent {
|
|
|
146
173
|
]
|
|
147
174
|
};
|
|
148
175
|
this.geometryType = GeometryType; // Reference to the GeometryType enum
|
|
176
|
+
this._stores = [];
|
|
177
|
+
this._drawControls = [];
|
|
178
|
+
this.activeLayerChange = new EventEmitter();
|
|
179
|
+
this.drawControlsEvent = new EventEmitter();
|
|
180
|
+
this.layersIDEvent = new EventEmitter();
|
|
181
|
+
this.layerCounterID = 0;
|
|
149
182
|
this.draw$ = new BehaviorSubject({}); // Observable of draw
|
|
150
|
-
this.
|
|
183
|
+
this.activeDrawingLayerSource = new OlVectorSource();
|
|
151
184
|
this.selectedFeatures$ = new BehaviorSubject([]);
|
|
152
185
|
this.drawControlIsDisabled = true;
|
|
153
186
|
this.drawControlIsActive = false;
|
|
154
187
|
this.subscriptions$$ = [];
|
|
155
188
|
this.position = 'bottom';
|
|
189
|
+
this.isCreatingNewLayer = false;
|
|
190
|
+
this.currGeometryType = this.geometryType.Point;
|
|
156
191
|
this.buildForm();
|
|
157
192
|
this.fillColor = this.drawStyleService.getFillColor();
|
|
158
193
|
this.strokeColor = this.drawStyleService.getStrokeColor();
|
|
@@ -163,19 +198,85 @@ export class DrawComponent {
|
|
|
163
198
|
this.fontSize = this.drawStyleService.getFontSize();
|
|
164
199
|
this.fontStyle = this.drawStyleService.getFontStyle();
|
|
165
200
|
}
|
|
201
|
+
get stores() {
|
|
202
|
+
return this._stores;
|
|
203
|
+
}
|
|
204
|
+
set stores(value) {
|
|
205
|
+
this._stores = value;
|
|
206
|
+
}
|
|
207
|
+
get drawControls() {
|
|
208
|
+
return this._drawControls;
|
|
209
|
+
}
|
|
210
|
+
set drawControls(value) {
|
|
211
|
+
this._drawControls = value;
|
|
212
|
+
}
|
|
213
|
+
get activeDrawingLayer() {
|
|
214
|
+
return this._activeDrawingLayer;
|
|
215
|
+
}
|
|
216
|
+
set activeDrawingLayer(value) {
|
|
217
|
+
this._activeDrawingLayer = value;
|
|
218
|
+
}
|
|
166
219
|
// Initialize the store that will contain the entities and create the Draw control
|
|
167
220
|
ngOnInit() {
|
|
168
|
-
this.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
221
|
+
if (!this.stores.length) {
|
|
222
|
+
this.activeStore = new FeatureStore([], {
|
|
223
|
+
map: this.map
|
|
224
|
+
});
|
|
225
|
+
this.initStore();
|
|
226
|
+
this.activeDrawControl = this.createDrawControl(this.fillColor, this.strokeColor, this.strokeWidth);
|
|
227
|
+
this.activeDrawControl.setGeometryType(this.geometryType.Point);
|
|
228
|
+
this.toggleDrawControl();
|
|
229
|
+
this.stores.push(this.activeStore);
|
|
230
|
+
this.drawControls.push([this.activeDrawingLayer.id, this.activeDrawControl]);
|
|
231
|
+
this.drawControlsEvent.emit(this.drawControls);
|
|
232
|
+
this.layersIDEvent.emit(this.activeDrawingLayer.id);
|
|
233
|
+
this.onLayerChange(this.activeDrawingLayer);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
this.activeStore = this.stores.find(store => store.layer.id === this.activeDrawingLayer.id);
|
|
237
|
+
this.activeDrawControl = this.drawControls.find(dc => dc[0] === this.activeDrawingLayer.id)[1];
|
|
238
|
+
this.deactivateDrawControl();
|
|
239
|
+
this.allLayers.forEach(layer => {
|
|
240
|
+
if (layer.id !== this.activeDrawingLayer.id) {
|
|
241
|
+
layer.opacity = 0;
|
|
242
|
+
}
|
|
243
|
+
let store = this.stores.find(s => s.layer.id === layer.id);
|
|
244
|
+
this.subscriptions$$.push(store.stateView
|
|
245
|
+
.manyBy$((record) => {
|
|
246
|
+
return record.state.selected === true;
|
|
247
|
+
})
|
|
248
|
+
.pipe(first())
|
|
249
|
+
.subscribe((records) => {
|
|
250
|
+
records.forEach((record) => {
|
|
251
|
+
record.state.selected = false;
|
|
252
|
+
});
|
|
253
|
+
}));
|
|
254
|
+
this.subscriptions$$.push(store.stateView
|
|
255
|
+
.manyBy$((record) => {
|
|
256
|
+
return record.state.selected === true;
|
|
257
|
+
})
|
|
258
|
+
.pipe(skip(1) // Skip initial emission
|
|
259
|
+
)
|
|
260
|
+
.subscribe((records) => {
|
|
261
|
+
this.selectedFeatures$.next(records.map((record) => record.entity));
|
|
262
|
+
}));
|
|
263
|
+
this.subscriptions$$.push(store.count$.subscribe((cnt) => {
|
|
264
|
+
cnt >= 1
|
|
265
|
+
? (this.activeStore.layer.options.showInLayerList = true)
|
|
266
|
+
: (this.activeStore.layer.options.showInLayerList = false);
|
|
267
|
+
}));
|
|
268
|
+
});
|
|
269
|
+
this.onLayerChange(this.activeDrawingLayer);
|
|
270
|
+
}
|
|
172
271
|
}
|
|
173
272
|
/**
|
|
174
273
|
* Remove the drawing layer and the interactions
|
|
175
274
|
* @internal
|
|
176
275
|
*/
|
|
177
276
|
ngOnDestroy() {
|
|
178
|
-
this.
|
|
277
|
+
this.allLayers.forEach(layer => layer.opacity = 1);
|
|
278
|
+
this.activeStore.state.updateAll({ selected: false });
|
|
279
|
+
this.deactivateDrawControl();
|
|
179
280
|
this.subscriptions$$.map((s) => s.unsubscribe());
|
|
180
281
|
}
|
|
181
282
|
/**
|
|
@@ -186,61 +287,20 @@ export class DrawComponent {
|
|
|
186
287
|
* @returns a Draw Control
|
|
187
288
|
*/
|
|
188
289
|
createDrawControl(fillColor, strokeColor, strokeWidth) {
|
|
189
|
-
const
|
|
290
|
+
const activeDrawControl = new DrawControl({
|
|
190
291
|
geometryType: undefined,
|
|
191
|
-
drawingLayerSource: this.
|
|
292
|
+
drawingLayerSource: this.activeDrawingLayerSource,
|
|
192
293
|
drawingLayerStyle: new OlStyle.Style({}),
|
|
193
294
|
interactionStyle: createInteractionStyle(fillColor, strokeColor, strokeWidth)
|
|
194
295
|
});
|
|
195
|
-
return
|
|
296
|
+
return activeDrawControl;
|
|
196
297
|
}
|
|
197
298
|
/**
|
|
198
299
|
* Store initialization, including drawing layer creation
|
|
199
300
|
*/
|
|
200
|
-
initStore() {
|
|
201
|
-
this.
|
|
202
|
-
|
|
203
|
-
this.olDrawingLayer = new VectorLayer({
|
|
204
|
-
isIgoInternalLayer: true,
|
|
205
|
-
id: 'igo-draw-layer',
|
|
206
|
-
title: this.languageService.translate.instant('igo.geo.draw.drawing'),
|
|
207
|
-
zIndex: 200,
|
|
208
|
-
source: new FeatureDataSource(),
|
|
209
|
-
style: (feature, resolution) => {
|
|
210
|
-
return this.drawStyleService.createIndividualElementStyle(feature, resolution, this.labelsAreShown, feature.get('fontStyle'), feature.get('drawingStyle').fill, feature.get('drawingStyle').stroke, feature.get('offsetX'), feature.get('offsetY'), this.icon);
|
|
211
|
-
},
|
|
212
|
-
showInLayerList: true,
|
|
213
|
-
exportable: true,
|
|
214
|
-
browsable: false,
|
|
215
|
-
workspace: {
|
|
216
|
-
enabled: false
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
tryBindStoreLayer(this.store, this.olDrawingLayer);
|
|
220
|
-
tryAddLoadingStrategy(this.store, new FeatureStoreLoadingStrategy({
|
|
221
|
-
motion: FeatureMotion.None
|
|
222
|
-
}));
|
|
223
|
-
tryAddSelectionStrategy(this.store, new FeatureStoreSelectionStrategy({
|
|
224
|
-
map: this.map,
|
|
225
|
-
motion: FeatureMotion.None,
|
|
226
|
-
many: true
|
|
227
|
-
}));
|
|
228
|
-
this.store.layer.visible = true;
|
|
229
|
-
this.store.source.ol.on('removefeature', (event) => {
|
|
230
|
-
const olGeometry = event.feature.getGeometry();
|
|
231
|
-
this.clearLabelsOfOlGeometry(olGeometry);
|
|
232
|
-
});
|
|
233
|
-
this.subscriptions$$.push(this.store.stateView
|
|
234
|
-
.manyBy$((record) => {
|
|
235
|
-
return record.state.selected === true;
|
|
236
|
-
})
|
|
237
|
-
.pipe(first())
|
|
238
|
-
.subscribe((records) => {
|
|
239
|
-
records.forEach((record) => {
|
|
240
|
-
record.state.selected = false;
|
|
241
|
-
});
|
|
242
|
-
}));
|
|
243
|
-
this.subscriptions$$.push(this.store.stateView
|
|
301
|
+
initStore(newTitle, isNewLayer) {
|
|
302
|
+
this.createLayer(newTitle, isNewLayer);
|
|
303
|
+
this.subscriptions$$.push(this.activeStore.stateView
|
|
244
304
|
.manyBy$((record) => {
|
|
245
305
|
return record.state.selected === true;
|
|
246
306
|
})
|
|
@@ -249,13 +309,10 @@ export class DrawComponent {
|
|
|
249
309
|
.subscribe((records) => {
|
|
250
310
|
this.selectedFeatures$.next(records.map((record) => record.entity));
|
|
251
311
|
}));
|
|
252
|
-
this.subscriptions$$.push(this.
|
|
253
|
-
if (cnt > 0) {
|
|
254
|
-
this.store.setLayerExtent();
|
|
255
|
-
}
|
|
312
|
+
this.subscriptions$$.push(this.activeStore.count$.subscribe((cnt) => {
|
|
256
313
|
cnt >= 1
|
|
257
|
-
? (this.
|
|
258
|
-
: (this.
|
|
314
|
+
? (this.activeStore.layer.options.showInLayerList = true)
|
|
315
|
+
: (this.activeStore.layer.options.showInLayerList = false);
|
|
259
316
|
}));
|
|
260
317
|
}
|
|
261
318
|
/**
|
|
@@ -322,12 +379,12 @@ export class DrawComponent {
|
|
|
322
379
|
}
|
|
323
380
|
// deletes the feature
|
|
324
381
|
else {
|
|
325
|
-
this.
|
|
382
|
+
this.activeDrawingLayerSource
|
|
326
383
|
.getFeatures()
|
|
327
384
|
.forEach((drawingLayerFeature) => {
|
|
328
385
|
const geometry = drawingLayerFeature.getGeometry();
|
|
329
386
|
if (olGeometry === geometry) {
|
|
330
|
-
this.
|
|
387
|
+
this.activeDrawingLayerSource.removeFeature(drawingLayerFeature);
|
|
331
388
|
}
|
|
332
389
|
});
|
|
333
390
|
}
|
|
@@ -341,10 +398,10 @@ export class DrawComponent {
|
|
|
341
398
|
onDrawEnd(olGeometry, radius) {
|
|
342
399
|
this.addFeatureToStore(olGeometry, radius);
|
|
343
400
|
this.clearLabelsOfOlGeometry(olGeometry);
|
|
344
|
-
this.
|
|
401
|
+
this.activeStore.layer.ol.getSource().refresh();
|
|
345
402
|
}
|
|
346
403
|
onModifyDraw(olGeometry) {
|
|
347
|
-
const entities = this.
|
|
404
|
+
const entities = this.activeStore.all();
|
|
348
405
|
entities.forEach((entity) => {
|
|
349
406
|
const entityId = entity.properties.id;
|
|
350
407
|
const olGeometryId = olGeometry.ol_uid;
|
|
@@ -358,7 +415,7 @@ export class DrawComponent {
|
|
|
358
415
|
});
|
|
359
416
|
}
|
|
360
417
|
onSelectDraw(olFeature, label) {
|
|
361
|
-
const entities = this.
|
|
418
|
+
const entities = this.activeStore.all();
|
|
362
419
|
const olGeometry = olFeature.getGeometry();
|
|
363
420
|
olGeometry.ol_uid = olFeature.get('id');
|
|
364
421
|
const olGeometryCoordinates = JSON.stringify(olGeometry.getCoordinates()[0]);
|
|
@@ -429,7 +486,7 @@ export class DrawComponent {
|
|
|
429
486
|
lon4326 = point4326[0];
|
|
430
487
|
lat4326 = point4326[1];
|
|
431
488
|
}
|
|
432
|
-
this.
|
|
489
|
+
this.activeStore.update({
|
|
433
490
|
type: FEATURE,
|
|
434
491
|
geometry,
|
|
435
492
|
projection: projection.getCode(),
|
|
@@ -458,6 +515,40 @@ export class DrawComponent {
|
|
|
458
515
|
stroke: ['']
|
|
459
516
|
});
|
|
460
517
|
}
|
|
518
|
+
setupLayer(isNewLayer) {
|
|
519
|
+
setTimeout(() => {
|
|
520
|
+
const dialogRef = this.dialog.open(DrawLayerPopupComponent, {
|
|
521
|
+
disableClose: false,
|
|
522
|
+
});
|
|
523
|
+
dialogRef.afterClosed().subscribe((label) => {
|
|
524
|
+
if (dialogRef.componentInstance.confirmFlag) {
|
|
525
|
+
this.activeStore.state.updateAll({ selected: false });
|
|
526
|
+
this.activeStore = new FeatureStore([], { map: this.map });
|
|
527
|
+
this.activeDrawingLayerSource = new OlVectorSource();
|
|
528
|
+
this.activeDrawingLayer.opacity = 0;
|
|
529
|
+
this.deactivateDrawControl();
|
|
530
|
+
this.initStore(label, isNewLayer);
|
|
531
|
+
this.activeDrawControl = this.createDrawControl(this.fillColor, this.strokeColor, this.strokeWidth);
|
|
532
|
+
this.activeDrawControl.setGeometryType(this.currGeometryType);
|
|
533
|
+
this.toggleDrawControl();
|
|
534
|
+
this.stores.push(this.activeStore);
|
|
535
|
+
this.drawControls.push([this.activeDrawingLayer.id, this.activeDrawControl]);
|
|
536
|
+
this.drawControlsEvent.emit(this.drawControls);
|
|
537
|
+
this.layersIDEvent.emit(this.activeDrawingLayer.id);
|
|
538
|
+
this.isCreatingNewLayer = false;
|
|
539
|
+
if (!this.labelsAreShown) {
|
|
540
|
+
this.onToggleLabels();
|
|
541
|
+
}
|
|
542
|
+
this.activeLayerChange.emit(this.activeDrawingLayer);
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
this.select.value = this.activeDrawingLayer;
|
|
546
|
+
this.select.selectionChange.emit(this.activeDrawingLayer);
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
}, 250);
|
|
550
|
+
}
|
|
551
|
+
// HTML user interactions
|
|
461
552
|
/**
|
|
462
553
|
* Called when the user double-clicks the selected drawing
|
|
463
554
|
*/
|
|
@@ -471,12 +562,14 @@ export class DrawComponent {
|
|
|
471
562
|
this.dialog.open(DrawShorcutsComponent);
|
|
472
563
|
}
|
|
473
564
|
deleteDrawings() {
|
|
474
|
-
this.
|
|
565
|
+
this.activeStore.deleteMany(this.selectedFeatures$.value);
|
|
475
566
|
this.selectedFeatures$.value.forEach((selectedFeature) => {
|
|
476
|
-
this.
|
|
567
|
+
this.activeDrawingLayerSource
|
|
568
|
+
.getFeatures()
|
|
569
|
+
.forEach((drawingLayerFeature) => {
|
|
477
570
|
const geometry = drawingLayerFeature.getGeometry();
|
|
478
571
|
if (selectedFeature.properties.id === geometry.ol_uid) {
|
|
479
|
-
this.
|
|
572
|
+
this.activeDrawingLayerSource.removeFeature(drawingLayerFeature);
|
|
480
573
|
}
|
|
481
574
|
});
|
|
482
575
|
});
|
|
@@ -489,8 +582,9 @@ export class DrawComponent {
|
|
|
489
582
|
this.drawStyleService.toggleLabelsAreShown();
|
|
490
583
|
this.labelsAreShown = !this.labelsAreShown;
|
|
491
584
|
this.icon
|
|
492
|
-
? this.
|
|
493
|
-
: this.
|
|
585
|
+
? this.elementStyle(this.labelsAreShown, true)
|
|
586
|
+
: this.elementStyle(this.labelsAreShown, false);
|
|
587
|
+
this.createDrawControl();
|
|
494
588
|
}
|
|
495
589
|
/**
|
|
496
590
|
* Called when the user toggles the Draw control is toggled
|
|
@@ -500,6 +594,69 @@ export class DrawComponent {
|
|
|
500
594
|
toggleIsChecked ? this.toggleDrawControl() : this.deactivateDrawControl();
|
|
501
595
|
}
|
|
502
596
|
// User changes properties of a drawing element
|
|
597
|
+
/**
|
|
598
|
+
* Display the current layer with the current store and the current layerSource
|
|
599
|
+
*/
|
|
600
|
+
onLayerChange(currLayer) {
|
|
601
|
+
if (currLayer) {
|
|
602
|
+
this.activeStore.state.updateAll({ selected: false });
|
|
603
|
+
this.isCreatingNewLayer = false;
|
|
604
|
+
this.activeDrawingLayer.opacity = 0;
|
|
605
|
+
this.activeDrawingLayer = currLayer;
|
|
606
|
+
this.activeDrawingLayer.opacity = 1;
|
|
607
|
+
this.deactivateDrawControl();
|
|
608
|
+
if (!this.labelsAreShown) {
|
|
609
|
+
this.onToggleLabels();
|
|
610
|
+
}
|
|
611
|
+
this.activeStore = this.stores.find(store => store.layer.id === this.activeDrawingLayer.id);
|
|
612
|
+
this.activeDrawControl = this.drawControls.find(dc => dc[0] === this.activeDrawingLayer.id)[1];
|
|
613
|
+
this.activeDrawingLayerSource = this.activeDrawControl.olDrawingLayerSource;
|
|
614
|
+
this.activeDrawControl.setGeometryType(this.currGeometryType);
|
|
615
|
+
this.toggleDrawControl();
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
this.setupLayer(true);
|
|
619
|
+
}
|
|
620
|
+
this.activeLayerChange.emit(this.activeDrawingLayer);
|
|
621
|
+
}
|
|
622
|
+
createLayer(newTitle, isNewLayer) {
|
|
623
|
+
for (const layer of this.allLayers) {
|
|
624
|
+
let numberId = Number(layer.id.replace('igo-draw-layer', ''));
|
|
625
|
+
this.layerCounterID = Math.max(numberId, this.layerCounterID);
|
|
626
|
+
}
|
|
627
|
+
this.activeDrawingLayer = new VectorLayer({
|
|
628
|
+
isIgoInternalLayer: true,
|
|
629
|
+
id: 'igo-draw-layer' + ++this.layerCounterID,
|
|
630
|
+
title: isNewLayer
|
|
631
|
+
? newTitle
|
|
632
|
+
: this.languageService.translate.instant('igo.geo.draw.drawing'),
|
|
633
|
+
zIndex: 200,
|
|
634
|
+
source: new FeatureDataSource(),
|
|
635
|
+
style: (feature, resolution) => {
|
|
636
|
+
return this.drawStyleService.createIndividualElementStyle(feature, resolution, this.labelsAreShown, feature.get('fontStyle'), feature.get('drawingStyle').fill, feature.get('drawingStyle').stroke, feature.get('offsetX'), feature.get('offsetY'), this.icon);
|
|
637
|
+
},
|
|
638
|
+
showInLayerList: true,
|
|
639
|
+
exportable: true,
|
|
640
|
+
browsable: false,
|
|
641
|
+
workspace: {
|
|
642
|
+
enabled: false
|
|
643
|
+
}
|
|
644
|
+
});
|
|
645
|
+
tryBindStoreLayer(this.activeStore, this.activeDrawingLayer);
|
|
646
|
+
tryAddLoadingStrategy(this.activeStore, new FeatureStoreLoadingStrategy({
|
|
647
|
+
motion: FeatureMotion.None
|
|
648
|
+
}));
|
|
649
|
+
tryAddSelectionStrategy(this.activeStore, new FeatureStoreSelectionStrategy({
|
|
650
|
+
map: this.map,
|
|
651
|
+
motion: FeatureMotion.None,
|
|
652
|
+
many: true
|
|
653
|
+
}));
|
|
654
|
+
this.activeStore.layer.visible = true;
|
|
655
|
+
this.activeStore.source.ol.on('removefeature', (event) => {
|
|
656
|
+
const olGeometry = event.feature.getGeometry();
|
|
657
|
+
this.clearLabelsOfOlGeometry(olGeometry);
|
|
658
|
+
});
|
|
659
|
+
}
|
|
503
660
|
/**
|
|
504
661
|
* Called when the user changes the color in a color picker
|
|
505
662
|
* @param labelsAreShown wheter the labels are shown or not
|
|
@@ -512,16 +669,14 @@ export class DrawComponent {
|
|
|
512
669
|
this.selectedFeatures$.value.forEach((feature) => {
|
|
513
670
|
let olFeature = featureToOl(feature, this.map.ol.getView().getProjection().getCode());
|
|
514
671
|
this.updateFillAndStrokeColor(olFeature, fillColor, strokeColor);
|
|
515
|
-
const entity = this.
|
|
672
|
+
const entity = this.activeStore
|
|
516
673
|
.all()
|
|
517
674
|
.find((e) => e.meta.id === olFeature.getId());
|
|
518
675
|
entity.properties.drawingStyle.fill = olFeature.get('fillColor_');
|
|
519
676
|
entity.properties.drawingStyle.stroke = olFeature.get('strokeColor_');
|
|
520
|
-
this.
|
|
677
|
+
this.activeStore.update(entity);
|
|
521
678
|
});
|
|
522
679
|
}
|
|
523
|
-
this.fillColor = fillColor;
|
|
524
|
-
this.strokeColor = strokeColor;
|
|
525
680
|
this.elementStyle(labelsAreShown, isAnIcon);
|
|
526
681
|
this.createDrawControl();
|
|
527
682
|
}
|
|
@@ -536,12 +691,12 @@ export class DrawComponent {
|
|
|
536
691
|
this.selectedFeatures$.value.forEach((feature) => {
|
|
537
692
|
let olFeature = featureToOl(feature, this.map.ol.getView().getProjection().getCode());
|
|
538
693
|
this.updateFontSizeAndStyle(olFeature, size, style);
|
|
539
|
-
const entity = this.
|
|
694
|
+
const entity = this.activeStore
|
|
540
695
|
.all()
|
|
541
696
|
.find((e) => e.meta.id === olFeature.getId());
|
|
542
697
|
entity.properties.fontStyle = olFeature.get('fontStyle_');
|
|
543
|
-
this.
|
|
544
|
-
olFeature = this.
|
|
698
|
+
this.activeStore.update(entity);
|
|
699
|
+
olFeature = this.activeStore.layer.ol.getSource().getFeatures().find(f => f.getId() === entity.meta.id);
|
|
545
700
|
olFeature.setProperties({ fontStyle: entity.properties.fontStyle });
|
|
546
701
|
olFeature.changed();
|
|
547
702
|
});
|
|
@@ -563,13 +718,13 @@ export class DrawComponent {
|
|
|
563
718
|
this.selectedFeatures$.value.forEach((feature) => {
|
|
564
719
|
let olFeature = featureToOl(feature, this.map.ol.getView().getProjection().getCode());
|
|
565
720
|
this.updateOffset(olFeature, offsetX, offsetY);
|
|
566
|
-
const entity = this.
|
|
721
|
+
const entity = this.activeStore
|
|
567
722
|
.all()
|
|
568
723
|
.find((e) => e.meta.id === olFeature.getId());
|
|
569
724
|
entity.properties.offsetX = olFeature.get('offsetX_');
|
|
570
725
|
entity.properties.offsetY = olFeature.get('offsetY_');
|
|
571
|
-
this.
|
|
572
|
-
olFeature = this.
|
|
726
|
+
this.activeStore.update(entity);
|
|
727
|
+
olFeature = this.activeStore.layer.ol.getSource().getFeatures().find(f => f.getId() === entity.meta.id);
|
|
573
728
|
olFeature.setProperties({ offsetX: entity.properties.offsetX, offsetY: entity.properties.offsetY });
|
|
574
729
|
olFeature.changed();
|
|
575
730
|
});
|
|
@@ -586,7 +741,8 @@ export class DrawComponent {
|
|
|
586
741
|
* @param geometryType the geometry type selected by the user
|
|
587
742
|
*/
|
|
588
743
|
onGeometryTypeChange(geometryType) {
|
|
589
|
-
this.
|
|
744
|
+
this.currGeometryType = geometryType;
|
|
745
|
+
this.activeDrawControl.setGeometryType(geometryType);
|
|
590
746
|
this.toggleDrawControl();
|
|
591
747
|
}
|
|
592
748
|
// Updates the properties of olFeature inputted
|
|
@@ -617,13 +773,57 @@ export class DrawComponent {
|
|
|
617
773
|
offsetY_: offsetY
|
|
618
774
|
}, true);
|
|
619
775
|
}
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
776
|
+
// Updates values of the selected element on the HTML view
|
|
777
|
+
getFeatureFontSize() {
|
|
778
|
+
return this.selectedFeatures$.value.length > 0
|
|
779
|
+
? this.selectedFeatures$.value[0].properties.fontStyle
|
|
780
|
+
.split(' ')[0]
|
|
781
|
+
.replace('px', '')
|
|
782
|
+
: '20';
|
|
783
|
+
}
|
|
784
|
+
getFeatureFontStyle() {
|
|
785
|
+
return this.selectedFeatures$.value.length > 0
|
|
786
|
+
? this.selectedFeatures$.value[0].properties.fontStyle.substring(this.selectedFeatures$.value[0].properties.fontStyle.indexOf(' ') + 1)
|
|
787
|
+
: FontType.Arial;
|
|
788
|
+
}
|
|
789
|
+
getFeatureFillColor() {
|
|
790
|
+
return this.selectedFeatures$.value.length > 0
|
|
791
|
+
? this.selectedFeatures$.value[0].properties.drawingStyle.fill
|
|
792
|
+
: 'rgba(255,255,255,0.4)';
|
|
793
|
+
}
|
|
794
|
+
getFeatureStrokeColor() {
|
|
795
|
+
return this.selectedFeatures$.value.length > 0
|
|
796
|
+
? this.selectedFeatures$.value[0].properties.drawingStyle.stroke
|
|
797
|
+
: 'rgba(143,7,7,1)';
|
|
798
|
+
}
|
|
799
|
+
getFeatureOffsetX() {
|
|
800
|
+
return this.selectedFeatures$.value.length > 0
|
|
801
|
+
? this.selectedFeatures$.value[0].properties.offsetX
|
|
802
|
+
: this.drawStyleService.getOffsetX();
|
|
803
|
+
}
|
|
804
|
+
getFeatureOffsetY() {
|
|
805
|
+
return this.selectedFeatures$.value.length > 0
|
|
806
|
+
? this.selectedFeatures$.value[0].properties.offsetY
|
|
807
|
+
: '0';
|
|
808
|
+
}
|
|
809
|
+
get allFontStyles() {
|
|
810
|
+
return Object.values(FontType);
|
|
811
|
+
}
|
|
812
|
+
get allLayers() {
|
|
813
|
+
return this.map.layers.filter((layer) => layer.id.includes('igo-draw-layer'));
|
|
814
|
+
}
|
|
623
815
|
updateHeightTable() {
|
|
624
|
-
|
|
625
|
-
this.numberOfDrawings
|
|
816
|
+
// Check the amount of rows as a possible alternative
|
|
817
|
+
this.numberOfDrawings = this.activeStore.count$.getValue();
|
|
818
|
+
this.numberOfDrawings > 10
|
|
819
|
+
? (this.tableTemplate.tableHeight = '35vh')
|
|
820
|
+
: (this.tableTemplate.tableHeight = 'auto');
|
|
626
821
|
}
|
|
822
|
+
updateActiveLayer() {
|
|
823
|
+
let currLayer = this.allLayers.find(layer => layer.title === this.activeDrawingLayer.title);
|
|
824
|
+
return currLayer ? currLayer : this.allLayers[0];
|
|
825
|
+
}
|
|
826
|
+
// Helper methods
|
|
627
827
|
/**
|
|
628
828
|
* Activate the correct control
|
|
629
829
|
*/
|
|
@@ -648,20 +848,20 @@ export class DrawComponent {
|
|
|
648
848
|
* @param olGeometry the new geometry to insert in the store
|
|
649
849
|
*/
|
|
650
850
|
replaceFeatureInStore(entity, olGeometry, radius) {
|
|
651
|
-
this.
|
|
851
|
+
this.activeStore.delete(entity);
|
|
652
852
|
this.onDrawEnd(olGeometry, radius);
|
|
653
853
|
}
|
|
654
854
|
/**
|
|
655
855
|
* Deactivate the active draw control
|
|
656
856
|
*/
|
|
657
857
|
deactivateDrawControl() {
|
|
658
|
-
if (!this.
|
|
858
|
+
if (!this.activeDrawControl) {
|
|
659
859
|
return;
|
|
660
860
|
}
|
|
661
861
|
if (this.drawEnd$$) {
|
|
662
862
|
this.drawEnd$$.unsubscribe();
|
|
663
863
|
}
|
|
664
|
-
this.
|
|
864
|
+
this.activeDrawControl.setOlMap(undefined);
|
|
665
865
|
this.drawControlIsActive = false;
|
|
666
866
|
}
|
|
667
867
|
/**
|
|
@@ -670,37 +870,43 @@ export class DrawComponent {
|
|
|
670
870
|
activateDrawControl() {
|
|
671
871
|
this.drawControlIsDisabled = false;
|
|
672
872
|
this.drawControlIsActive = true;
|
|
673
|
-
this.drawEnd$$ = this.
|
|
873
|
+
this.drawEnd$$ = this.activeDrawControl.end$.subscribe((olGeometry) => {
|
|
674
874
|
this.openDrawDialog(olGeometry, true);
|
|
675
875
|
});
|
|
676
|
-
this.
|
|
876
|
+
this.activeDrawControl.modify$.subscribe((olGeometry) => {
|
|
677
877
|
this.onModifyDraw(olGeometry);
|
|
678
878
|
});
|
|
679
879
|
if (!this.drawSelect$$) {
|
|
680
|
-
this.drawSelect$$ = this.
|
|
880
|
+
this.drawSelect$$ = this.activeDrawControl.select$.subscribe((olFeature) => {
|
|
681
881
|
this.openDrawDialog(olFeature, false);
|
|
682
882
|
});
|
|
683
883
|
}
|
|
684
|
-
this.
|
|
884
|
+
this.activeDrawControl.setOlMap(this.map.ol, true);
|
|
685
885
|
}
|
|
686
886
|
/**
|
|
687
887
|
* Recreates the style of the feature stored
|
|
688
888
|
*/
|
|
689
889
|
elementStyle(labelsAreShown, isAnIcon) {
|
|
690
890
|
if (isAnIcon) {
|
|
691
|
-
this.
|
|
891
|
+
this.activeStore.layer.ol.setStyle((feature, resolution) => {
|
|
692
892
|
return this.drawStyleService.createIndividualElementStyle(feature, resolution, labelsAreShown, feature.get('fontStyle'), feature.get('drawingStyle').fill, feature.get('drawingStyle').stroke, feature.get('offsetX'), feature.get('offsetY'), this.icon);
|
|
693
893
|
});
|
|
694
894
|
}
|
|
695
895
|
else {
|
|
696
|
-
this.
|
|
896
|
+
this.activeStore.layer.ol.setStyle((feature, resolution) => {
|
|
697
897
|
return this.drawStyleService.createIndividualElementStyle(feature, resolution, labelsAreShown, feature.get('fontStyle'), feature.get('drawingStyle').fill, feature.get('drawingStyle').stroke, feature.get('offsetX'), feature.get('offsetY'));
|
|
698
898
|
});
|
|
699
899
|
}
|
|
700
900
|
}
|
|
701
901
|
}
|
|
702
902
|
DrawComponent.ɵfac = function DrawComponent_Factory(t) { return new (t || DrawComponent)(i0.ɵɵdirectiveInject(i1.LanguageService), i0.ɵɵdirectiveInject(i2.UntypedFormBuilder), i0.ɵɵdirectiveInject(i3.DrawStyleService), i0.ɵɵdirectiveInject(i4.MatDialog), i0.ɵɵdirectiveInject(i5.DrawIconService)); };
|
|
703
|
-
DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent, selectors: [["igo-draw"]],
|
|
903
|
+
DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent, selectors: [["igo-draw"]], viewQuery: function DrawComponent_Query(rf, ctx) { if (rf & 1) {
|
|
904
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
905
|
+
} if (rf & 2) {
|
|
906
|
+
let _t;
|
|
907
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.select = _t.first);
|
|
908
|
+
} }, inputs: { map: "map", stores: "stores", drawControls: "drawControls", activeDrawingLayer: "activeDrawingLayer" }, outputs: { activeLayerChange: "activeLayerChange", drawControlsEvent: "drawControlsEvent", layersIDEvent: "layersIDEvent", fillColor: "fillColor", strokeColor: "strokeColor", strokeWidth: "strokeWidth", fontSize: "fontSize", fontStyle: "fontStyle" }, decls: 47, vars: 45, consts: [[1, "geometry-type-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], [1, "draw-options", "mat-typography"], [3, "disabled", "checked", "labelPosition", "change"], [3, "checked", "labelPosition", "change"], ["appearance", "outline", 1, "layer-select"], [3, "value", "selectionChange"], ["selectedLayer", ""], [3, "value", 4, "ngFor", "ngForOf"], ["id", "createNewLayer"], ["mat-icon-button", "", "collapsibleButton", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "color", "matTooltip", "click", 4, "ngIf"], ["class", "deleteBtn", "mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "disabled", "click", 4, "ngIf"], [1, "table-compact", 3, "store", "template", "dblclick"], ["table", ""], [1, "icon-options"], [4, "ngIf"], ["mat-icon-button", "", "color", "accent", "disableRipple", "true", 3, "click"], ["svgIcon", "keyboard-outline", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "shortcuts-icon", 3, "matTooltip"], ["mat-raised-button", "", "color", "primary", 3, "matTooltip", "click", 4, "ngIf"], ["mat-icon-button", "", "collapsibleButton", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "color", "matTooltip", "click"], [3, "svgIcon"], ["mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "deleteBtn", 3, "matTooltip", "disabled", "click"], ["svgIcon", "delete"], ["class", "box", 4, "ngIf"], ["value", "", 3, "click"], [3, "value", "click", 4, "ngFor", "ngForOf"], [1, "box"], [3, "src"], [3, "value", "click"], ["mat-raised-button", "", "color", "primary", 3, "matTooltip", "click"], ["svgIcon", "palette", "matBadgeColor", "warn", "matBadgeSize", "medium", 1, "style-icon", 3, "matBadge"]], template: function DrawComponent_Template(rf, ctx) { if (rf & 1) {
|
|
909
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
704
910
|
i0.ɵɵelementStart(0, "div")(1, "div", 0)(2, "mat-button-toggle-group", 1);
|
|
705
911
|
i0.ɵɵlistener("change", function DrawComponent_Template_mat_button_toggle_group_change_2_listener($event) { return ctx.onGeometryTypeChange($event.value); });
|
|
706
912
|
i0.ɵɵelementStart(3, "mat-button-toggle", 2);
|
|
@@ -729,20 +935,35 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
|
|
|
729
935
|
i0.ɵɵtext(20);
|
|
730
936
|
i0.ɵɵpipe(21, "translate");
|
|
731
937
|
i0.ɵɵelementEnd()();
|
|
732
|
-
i0.ɵɵ
|
|
733
|
-
i0.ɵɵ
|
|
734
|
-
i0.ɵɵ
|
|
735
|
-
i0.ɵɵ
|
|
938
|
+
i0.ɵɵelement(22, "mat-divider");
|
|
939
|
+
i0.ɵɵelementStart(23, "div")(24, "mat-form-field", 6)(25, "mat-label");
|
|
940
|
+
i0.ɵɵtext(26);
|
|
941
|
+
i0.ɵɵpipe(27, "translate");
|
|
942
|
+
i0.ɵɵelementEnd();
|
|
943
|
+
i0.ɵɵelementStart(28, "mat-select", 7, 8);
|
|
944
|
+
i0.ɵɵlistener("selectionChange", function DrawComponent_Template_mat_select_selectionChange_28_listener() { i0.ɵɵrestoreView(_r21); const _r0 = i0.ɵɵreference(29); return i0.ɵɵresetView(ctx.onLayerChange(_r0.value)); });
|
|
945
|
+
i0.ɵɵtemplate(30, DrawComponent_mat_option_30_Template, 2, 2, "mat-option", 9);
|
|
946
|
+
i0.ɵɵelementStart(31, "mat-option", 10);
|
|
947
|
+
i0.ɵɵtext(32);
|
|
948
|
+
i0.ɵɵpipe(33, "translate");
|
|
949
|
+
i0.ɵɵelementEnd()()();
|
|
950
|
+
i0.ɵɵtemplate(34, DrawComponent_button_34_Template, 4, 7, "button", 11);
|
|
951
|
+
i0.ɵɵelementEnd();
|
|
952
|
+
i0.ɵɵelement(35, "mat-divider");
|
|
953
|
+
i0.ɵɵelementStart(36, "div");
|
|
954
|
+
i0.ɵɵtemplate(37, DrawComponent_button_37_Template, 4, 6, "button", 12);
|
|
955
|
+
i0.ɵɵelementStart(38, "div")(39, "igo-entity-table", 13, 14);
|
|
956
|
+
i0.ɵɵlistener("dblclick", function DrawComponent_Template_igo_entity_table_dblclick_39_listener() { return ctx.editLabelDrawing(); });
|
|
736
957
|
i0.ɵɵelementEnd()()();
|
|
737
|
-
i0.ɵɵelementStart(
|
|
738
|
-
i0.ɵɵtemplate(
|
|
958
|
+
i0.ɵɵelementStart(41, "div", 15);
|
|
959
|
+
i0.ɵɵtemplate(42, DrawComponent_mat_form_field_42_Template, 11, 8, "mat-form-field", 16);
|
|
739
960
|
i0.ɵɵelementEnd();
|
|
740
|
-
i0.ɵɵelementStart(
|
|
741
|
-
i0.ɵɵlistener("click", function
|
|
742
|
-
i0.ɵɵelement(
|
|
743
|
-
i0.ɵɵpipe(
|
|
961
|
+
i0.ɵɵelementStart(43, "button", 17);
|
|
962
|
+
i0.ɵɵlistener("click", function DrawComponent_Template_button_click_43_listener() { return ctx.openShorcutsDialog(); });
|
|
963
|
+
i0.ɵɵelement(44, "mat-icon", 18);
|
|
964
|
+
i0.ɵɵpipe(45, "translate");
|
|
744
965
|
i0.ɵɵelementEnd();
|
|
745
|
-
i0.ɵɵtemplate(
|
|
966
|
+
i0.ɵɵtemplate(46, DrawComponent_button_46_Template, 5, 7, "button", 19);
|
|
746
967
|
i0.ɵɵelementEnd();
|
|
747
968
|
} if (rf & 2) {
|
|
748
969
|
i0.ɵɵadvance(2);
|
|
@@ -750,38 +971,48 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
|
|
|
750
971
|
i0.ɵɵadvance(1);
|
|
751
972
|
i0.ɵɵproperty("value", ctx.geometryType.Point);
|
|
752
973
|
i0.ɵɵadvance(1);
|
|
753
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5,
|
|
974
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 27, "igo.geo.draw." + ctx.geometryType.Point), " ");
|
|
754
975
|
i0.ɵɵadvance(2);
|
|
755
976
|
i0.ɵɵproperty("value", ctx.geometryType.LineString);
|
|
756
977
|
i0.ɵɵadvance(1);
|
|
757
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8,
|
|
978
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 29, "igo.geo.draw." + ctx.geometryType.LineString), " ");
|
|
758
979
|
i0.ɵɵadvance(2);
|
|
759
980
|
i0.ɵɵproperty("value", ctx.geometryType.Polygon);
|
|
760
981
|
i0.ɵɵadvance(1);
|
|
761
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11,
|
|
982
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 31, "igo.geo.draw." + ctx.geometryType.Polygon), " ");
|
|
762
983
|
i0.ɵɵadvance(2);
|
|
763
984
|
i0.ɵɵproperty("value", ctx.geometryType.Circle);
|
|
764
985
|
i0.ɵɵadvance(1);
|
|
765
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14,
|
|
986
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14, 33, "igo.geo.draw." + ctx.geometryType.Circle), " ");
|
|
766
987
|
i0.ɵɵadvance(3);
|
|
767
988
|
i0.ɵɵproperty("disabled", ctx.drawControlIsDisabled)("checked", ctx.drawControlIsActive)("labelPosition", "before");
|
|
768
989
|
i0.ɵɵadvance(1);
|
|
769
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18,
|
|
990
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(18, 35, "igo.geo.spatialFilter.drawControl"), " ");
|
|
770
991
|
i0.ɵɵadvance(2);
|
|
771
992
|
i0.ɵɵproperty("checked", ctx.labelsAreShown)("labelPosition", "before");
|
|
772
993
|
i0.ɵɵadvance(1);
|
|
773
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(21,
|
|
994
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(21, 37, "igo.geo.draw.toggleMapTooltips"), " ");
|
|
995
|
+
i0.ɵɵadvance(6);
|
|
996
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(27, 39, "igo.geo.draw.layer.title"));
|
|
997
|
+
i0.ɵɵadvance(2);
|
|
998
|
+
i0.ɵɵproperty("value", ctx.updateActiveLayer());
|
|
999
|
+
i0.ɵɵadvance(2);
|
|
1000
|
+
i0.ɵɵproperty("ngForOf", ctx.allLayers);
|
|
1001
|
+
i0.ɵɵadvance(2);
|
|
1002
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(33, 41, "igo.geo.draw.layer.createNewLayer"), " ");
|
|
1003
|
+
i0.ɵɵadvance(2);
|
|
1004
|
+
i0.ɵɵproperty("ngIf", ctx.activeDrawingLayer);
|
|
774
1005
|
i0.ɵɵadvance(3);
|
|
775
|
-
i0.ɵɵproperty("ngIf", ctx.
|
|
1006
|
+
i0.ɵɵproperty("ngIf", ctx.activeStore.count$.getValue() > 0);
|
|
776
1007
|
i0.ɵɵadvance(2);
|
|
777
|
-
i0.ɵɵproperty("store", ctx.
|
|
1008
|
+
i0.ɵɵproperty("store", ctx.activeStore)("template", ctx.tableTemplate);
|
|
778
1009
|
i0.ɵɵadvance(3);
|
|
779
1010
|
i0.ɵɵproperty("ngIf", ctx.icons.length >= 1);
|
|
780
1011
|
i0.ɵɵadvance(2);
|
|
781
|
-
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(
|
|
1012
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(45, 43, "igo.geo.draw.shortcuts"));
|
|
782
1013
|
i0.ɵɵadvance(2);
|
|
783
1014
|
i0.ɵɵproperty("ngIf", ctx.selectedFeatures$.value.length);
|
|
784
|
-
} }, dependencies: [i6.NgForOf, i6.NgIf, i7.MatButton, i8.MatButtonToggleGroup, i8.MatButtonToggle, i9.MatFormField,
|
|
1015
|
+
} }, dependencies: [i6.NgForOf, i6.NgIf, i7.MatButton, i8.MatButtonToggleGroup, i8.MatButtonToggle, i9.MatDivider, i10.MatFormField, i10.MatLabel, i11.MatIcon, i12.MatBadge, i13.MatTooltip, i14.MatSelect, i14.MatSelectTrigger, i15.MatOption, i16.MatSlideToggle, i17.EntityTableComponent, i6.AsyncPipe, i18.TranslatePipe], styles: [".geometry-type-toggle[_ngcontent-%COMP%]{padding:10px;text-align:center}.geometry-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%]{width:100%}.geometry-type-toggle[_ngcontent-%COMP%] mat-button-toggle-group[_ngcontent-%COMP%] mat-button-toggle[_ngcontent-%COMP%]{width:25%}.draw-options[_ngcontent-%COMP%]{overflow-x:hidden}.draw-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%]{width:100%;margin:10px}.draw-options[_ngcontent-%COMP%] mat-slide-toggle[_ngcontent-%COMP%] .mat-slide-toggle-content{width:calc(100% - 60px)}.icon-options[_ngcontent-%COMP%]{margin:5px 5px 0}.edition-drawing[_ngcontent-%COMP%]{padding:10px 0}img[_ngcontent-%COMP%]{width:100%;height:100%}.deleteBtn[_ngcontent-%COMP%]{margin-left:12px}.storeTable[_ngcontent-%COMP%]{height:auto!important}.layer-select[_ngcontent-%COMP%]{width:85%;padding:10px 10px 0%}.input-button-container[_ngcontent-%COMP%]{padding:10px}.input-button-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{width:25%}.input-button-container[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{left:8px;bottom:10px}"], data: { animation: [
|
|
785
1016
|
trigger('openClose', [
|
|
786
1017
|
state('open', style({
|
|
787
1018
|
opacity: 1
|
|
@@ -806,8 +1037,22 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
|
|
|
806
1037
|
transition('open => closed', [animate('600ms ease')]),
|
|
807
1038
|
transition('closed => open', [animate('800ms ease')])
|
|
808
1039
|
])
|
|
809
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\
|
|
810
|
-
}], function () { return [{ type: i1.LanguageService }, { type: i2.UntypedFormBuilder }, { type: i3.DrawStyleService }, { type: i4.MatDialog }, { type: i5.DrawIconService }]; }, {
|
|
1040
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\" [value]=\"geometryType.Point\">\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{'igo.geo.draw.' + geometryType.Point | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{'igo.geo.draw.' + geometryType.LineString | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{'igo.geo.draw.' + geometryType.Polygon | translate}}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{'igo.geo.draw.' + geometryType.Circle | translate}}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\">\n {{'igo.geo.spatialFilter.drawControl' | translate}}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\"\n >\n {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n </mat-slide-toggle>\n </div>\n\n <mat-divider></mat-divider>\n\n <div>\n <mat-form-field appearance=\"outline\" class=\"layer-select\">\n <mat-label>{{'igo.geo.draw.layer.title' | translate}}</mat-label>\n <mat-select #selectedLayer (selectionChange)=\"onLayerChange(selectedLayer.value)\" [value]=\"updateActiveLayer()\">\n <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n {{ layer.title }}\n </mat-option>\n <mat-option id=\"createNewLayer\" >\n {{'igo.geo.draw.layer.createNewLayer' | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button\n *ngIf=\"activeDrawingLayer\"\n mat-icon-button\n [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"activeDrawingLayer.visible ?\n ('igo.geo.layer.hideLayer' | translate) :\n ('igo.geo.layer.showLayer' | translate)\"\n (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\">\n <mat-icon\n [svgIcon]=\"activeDrawingLayer.visible ? 'eye' : 'eye-off'\">\n </mat-icon>\n </button>\n </div>\n <mat-divider></mat-divider>\n <div>\n <button\n *ngIf=\"activeStore.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\">\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"activeStore\"\n [template]=\"tableTemplate\"\n (dblclick)=\"editLabelDrawing()\">\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\">\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{ 'igo.geo.draw.noIcon' | translate }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\">\n <div class=\"box\">\n <img src=\"{{ icon_html }}\">\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\"\n >\n <mat-icon\n class=\"shortcuts-icon\"\n svgIcon=\"keyboard-outline\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n >\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.layer.style.styleModalTooltip' | translate\">\n {{'igo.geo.layer.style.styleModal' | translate}}\n <mat-icon\n class=\"style-icon\"\n svgIcon=\"palette\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\">\n </mat-icon>\n </button>\n</div>\n", styles: [".geometry-type-toggle{padding:10px;text-align:center}.geometry-type-toggle mat-button-toggle-group{width:100%}.geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}.draw-options{overflow-x:hidden}.draw-options mat-slide-toggle{width:100%;margin:10px}.draw-options mat-slide-toggle ::ng-deep .mat-slide-toggle-content{width:calc(100% - 60px)}.icon-options{margin:5px 5px 0}.edition-drawing{padding:10px 0}img{width:100%;height:100%}.deleteBtn{margin-left:12px}.storeTable{height:auto!important}.layer-select{width:85%;padding:10px 10px 0%}.input-button-container{padding:10px}.input-button-container mat-form-field{width:25%}.input-button-container button{left:8px;bottom:10px}\n"] }]
|
|
1041
|
+
}], function () { return [{ type: i1.LanguageService }, { type: i2.UntypedFormBuilder }, { type: i3.DrawStyleService }, { type: i4.MatDialog }, { type: i5.DrawIconService }]; }, { map: [{
|
|
1042
|
+
type: Input
|
|
1043
|
+
}], stores: [{
|
|
1044
|
+
type: Input
|
|
1045
|
+
}], drawControls: [{
|
|
1046
|
+
type: Input
|
|
1047
|
+
}], activeDrawingLayer: [{
|
|
1048
|
+
type: Input
|
|
1049
|
+
}], activeLayerChange: [{
|
|
1050
|
+
type: Output
|
|
1051
|
+
}], drawControlsEvent: [{
|
|
1052
|
+
type: Output
|
|
1053
|
+
}], layersIDEvent: [{
|
|
1054
|
+
type: Output
|
|
1055
|
+
}], fillColor: [{
|
|
811
1056
|
type: Output
|
|
812
1057
|
}], strokeColor: [{
|
|
813
1058
|
type: Output
|
|
@@ -817,9 +1062,8 @@ DrawComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawComponent
|
|
|
817
1062
|
type: Output
|
|
818
1063
|
}], fontStyle: [{
|
|
819
1064
|
type: Output
|
|
820
|
-
}],
|
|
821
|
-
type:
|
|
822
|
-
|
|
823
|
-
type: Input
|
|
1065
|
+
}], select: [{
|
|
1066
|
+
type: ViewChild,
|
|
1067
|
+
args: ['selectedLayer']
|
|
824
1068
|
}] }); })();
|
|
825
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxPQUFPLEVBRVAsNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFJckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU1sRSxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFcEMsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFJMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxN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LFNBQVM7MkJBQ0UsVUFBVSxjQUNSO29CQUNWLE9BQU8sQ0FBQyxXQUFXLEVBQUU7d0JBQ25CLEtBQUssQ0FDSCxNQUFNLEVBQ04sS0FBSyxDQUFDOzRCQUNKLE9BQU8sRUFBRSxDQUFDO3lCQUNYLENBQUMsQ0FDSDt3QkFDRCxLQUFLLENBQ0gsUUFBUSxFQUNSLEtBQUssQ0FBQzs0QkFDSixPQUFPLEVBQUUsQ0FBQzt5QkFDWCxDQUFDLENBQ0g7d0JBQ0QsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7d0JBQ3JELFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3FCQUN0RCxDQUFDO2lCQUNILG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNO3dMQTRCckMsU0FBUztrQkFBbEIsTUFBTTtZQUNHLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxXQUFXO2tCQUFwQixNQUFNO1lBRUcsUUFBUTtrQkFBakIsTUFBTTtZQUNHLFNBQVM7a0JBQWxCLE1BQU07WUFDRSxHQUFHO2tCQUFYLEtBQUs7WUFDRyxLQUFLO2tCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHtcclxuICBGRUFUVVJFLFxyXG4gIEZlYXR1cmVTdG9yZSxcclxuICBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSxcclxuICB0cnlCaW5kU3RvcmVMYXllcixcclxuICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3ksXHJcbiAgdHJ5QWRkU2VsZWN0aW9uU3RyYXRlZ3ksXHJcbiAgRmVhdHVyZU1vdGlvbixcclxuICBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3ksXHJcbiAgZmVhdHVyZVRvT2xcclxufSBmcm9tICcuLi8uLi9mZWF0dXJlJztcclxuXHJcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBGb250VHlwZSwgR2VvbWV0cnlUeXBlIH0gZnJvbSAnLi4vc2hhcmVkL2RyYXcuZW51bSc7XHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRHJhdywgRmVhdHVyZVdpdGhEcmF3IH0gZnJvbSAnLi4vc2hhcmVkL2RyYXcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBWZWN0b3JTb3VyY2VFdmVudCBhcyBPbFZlY3RvclNvdXJjZUV2ZW50IH0gZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XHJcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xyXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2ZlYXR1cmUtZGF0YXNvdXJjZSc7XHJcbmltcG9ydCB7IERyYXdDb250cm9sIH0gZnJvbSAnLi4vLi4vZ2VvbWV0cnkvc2hhcmVkL2NvbnRyb2xzL2RyYXcnO1xyXG5pbXBvcnQge1xyXG4gIEVudGl0eVJlY29yZCxcclxuICBFbnRpdHlUYWJsZVRlbXBsYXRlXHJcbn0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuXHJcbmltcG9ydCAqIGFzIE9sU3R5bGUgZnJvbSAnb2wvc3R5bGUnO1xyXG5pbXBvcnQgT2xWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XHJcbmltcG9ydCBPbENpcmNsZSBmcm9tICdvbC9nZW9tL0NpcmNsZSc7XHJcbmltcG9ydCBPbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xyXG5pbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xyXG5pbXBvcnQgT2xHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcclxuaW1wb3J0IE9sT3ZlcmxheSBmcm9tICdvbC9PdmVybGF5JztcclxuaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xyXG5pbXBvcnQgeyBnZXREaXN0YW5jZSB9IGZyb20gJ29sL3NwaGVyZSc7XHJcbmltcG9ydCB7IERyYXdTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy1zdHlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgc2tpcCwgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERyYXdQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vZHJhdy1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEcmF3U2hvcmN1dHNDb21wb25lbnQgfSBmcm9tICcuL2RyYXctc2hvcmN1dHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgZ2V0VG9vbHRpcHNPZk9sR2VvbWV0cnkgfSBmcm9tICcuLi8uLi9tZWFzdXJlL3NoYXJlZC9tZWFzdXJlLnV0aWxzJztcclxuaW1wb3J0IHsgY3JlYXRlSW50ZXJhY3Rpb25TdHlsZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LnV0aWxzJztcclxuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSAnb2wvcHJvaic7XHJcbmltcG9ydCB7IERyYXdJY29uU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LWljb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN0eWxlTW9kYWxDb21wb25lbnQsIFN0eWxlTW9kYWxEYXRhIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc3R5bGUtbW9kYWwvc3R5bGUtbW9kYWwuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7XHJcbiAgdHJpZ2dlcixcclxuICBzdGF0ZSxcclxuICBzdHlsZSxcclxuICBhbmltYXRlLFxyXG4gIHRyYW5zaXRpb25cclxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tZHJhdycsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignb3BlbkNsb3NlJywgW1xyXG4gICAgICBzdGF0ZShcclxuICAgICAgICAnb3BlbicsXHJcbiAgICAgICAgc3R5bGUoe1xyXG4gICAgICAgICAgb3BhY2l0eTogMVxyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXRlKFxyXG4gICAgICAgICdjbG9zZWQnLFxyXG4gICAgICAgIHN0eWxlKHtcclxuICAgICAgICAgIG9wYWNpdHk6IDBcclxuICAgICAgICB9KVxyXG4gICAgICApLFxyXG4gICAgICB0cmFuc2l0aW9uKCdvcGVuID0+IGNsb3NlZCcsIFthbmltYXRlKCc2MDBtcyBlYXNlJyldKSxcclxuICAgICAgdHJhbnNpdGlvbignY2xvc2VkID0+IG9wZW4nLCBbYW5pbWF0ZSgnODAwbXMgZWFzZScpXSlcclxuICAgIF0pXHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHJhdy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHJhdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcmF3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKlxyXG4gICAqIFRhYmxlIHRlbXBsYXRlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHVibGljIHRhYmxlVGVtcGxhdGU6IEVudGl0eVRhYmxlVGVtcGxhdGUgPSB7XHJcbiAgICBzZWxlY3Rpb246IHRydWUsXHJcbiAgICBzZWxlY3RNYW55OiB0cnVlLFxyXG4gICAgc2VsZWN0aW9uQ2hlY2tib3g6IHRydWUsXHJcbiAgICBzb3J0OiB0cnVlLFxyXG4gICAgZml4ZWRIZWFkZXI6IHRydWUsXHJcbiAgICB0YWJsZUhlaWdodDogJ2F1dG8nLFxyXG4gICAgY29sdW1uczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0RyYXdpbmcnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3LmxhYmVscycpLFxyXG4gICAgICAgIHRvb2x0aXA6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcuY2hhbmdlTGFiZWwnKSxcclxuICAgICAgICB2YWx1ZUFjY2Vzc29yOiAoZmVhdHVyZTogRmVhdHVyZVdpdGhEcmF3KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZmVhdHVyZS5wcm9wZXJ0aWVzLmRyYXc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGdlb21ldHJ5VHlwZSA9IEdlb21ldHJ5VHlwZTsgLy8gUmVmZXJlbmNlIHRvIHRoZSBHZW9tZXRyeVR5cGUgZW51bVxyXG5cclxuICBAT3V0cHV0KCkgZmlsbENvbG9yOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHN0cm9rZUNvbG9yOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHN0cm9rZVdpZHRoOiBudW1iZXI7XHJcblxyXG4gIEBPdXRwdXQoKSBmb250U2l6ZTogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSBmb250U3R5bGU6IHN0cmluZztcclxuICBASW5wdXQoKSBtYXA6IElnb01hcDsgLy8gTWFwIHRvIGRyYXcgb25cclxuICBASW5wdXQoKSBzdG9yZTogRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz47IC8vIERyYXdpbmcgc3RvcmVcclxuXHJcbiAgcHVibGljIGRyYXckOiBCZWhhdmlvclN1YmplY3Q8RHJhdz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTsgLy8gT2JzZXJ2YWJsZSBvZiBkcmF3XHJcblxyXG4gIHByaXZhdGUgb2xEcmF3aW5nTGF5ZXJTb3VyY2UgPSBuZXcgT2xWZWN0b3JTb3VyY2UoKTtcclxuICBwcml2YXRlIGRyYXdDb250cm9sOiBEcmF3Q29udHJvbDtcclxuICBwcml2YXRlIGRyYXdFbmQkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgZHJhd1NlbGVjdCQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBvbERyYXdpbmdMYXllcjogVmVjdG9yTGF5ZXI7XHJcbiAgcHVibGljIHNlbGVjdGVkRmVhdHVyZXMkOiBCZWhhdmlvclN1YmplY3Q8RmVhdHVyZVdpdGhEcmF3W10+ID1cclxuICAgIG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG4gIHB1YmxpYyBmaWxsRm9ybTogc3RyaW5nO1xyXG4gIHB1YmxpYyBzdHJva2VGb3JtOiBzdHJpbmc7XHJcbiAgcHVibGljIGRyYXdDb250cm9sSXNEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGRyYXdDb250cm9sSXNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgbGFiZWxzQXJlU2hvd246IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zJCQ6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHB1YmxpYyBwb3NpdGlvbjogc3RyaW5nID0gJ2JvdHRvbSc7XHJcbiAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgcHVibGljIGljb25zOiBBcnJheTxzdHJpbmc+O1xyXG4gIHB1YmxpYyBpY29uOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgbnVtYmVyT2ZEcmF3aW5nczogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGRyYXdTdHlsZVNlcnZpY2U6IERyYXdTdHlsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBkcmF3SWNvblNlcnZpY2U6IERyYXdJY29uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICAgIHRoaXMuZmlsbENvbG9yID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEZpbGxDb2xvcigpO1xyXG4gICAgdGhpcy5zdHJva2VDb2xvciA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRTdHJva2VDb2xvcigpO1xyXG4gICAgdGhpcy5zdHJva2VXaWR0aCA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRTdHJva2VXaWR0aCgpO1xyXG4gICAgdGhpcy5sYWJlbHNBcmVTaG93biA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRMYWJlbHNBcmVTaG93bigpO1xyXG4gICAgdGhpcy5pY29ucyA9IHRoaXMuZHJhd0ljb25TZXJ2aWNlLmdldEljb25zKCk7XHJcbiAgICB0aGlzLmljb24gPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0SWNvbigpO1xyXG5cclxuICAgIHRoaXMuZm9udFNpemUgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0Rm9udFNpemUoKTtcclxuICAgIHRoaXMuZm9udFN0eWxlID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEZvbnRTdHlsZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RvcmUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGVudGl0aWVzIGFuZCBjcmVhdGUgdGhlIERyYXcgY29udHJvbFxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pbml0U3RvcmUoKTtcclxuICAgIHRoaXMuZHJhd0NvbnRyb2wgPSB0aGlzLmNyZWF0ZURyYXdDb250cm9sKFxyXG4gICAgICB0aGlzLmZpbGxDb2xvcixcclxuICAgICAgdGhpcy5zdHJva2VDb2xvcixcclxuICAgICAgdGhpcy5zdHJva2VXaWR0aFxyXG4gICAgKTtcclxuICAgIHRoaXMuZHJhd0NvbnRyb2wuc2V0R2VvbWV0cnlUeXBlKHRoaXMuZ2VvbWV0cnlUeXBlLlBvaW50IGFzIGFueSk7XHJcbiAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgdGhlIGRyYXdpbmcgbGF5ZXIgYW5kIHRoZSBpbnRlcmFjdGlvbnNcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZHJhd0NvbnRyb2wuc2V0T2xNYXAodW5kZWZpbmVkKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLm1hcCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIERyYXcgQ29udHJvbFxyXG4gICAqIEBwYXJhbSBmaWxsQ29sb3IgdGhlIGZpbGwgY29sb3JcclxuICAgKiBAcGFyYW0gc3Ryb2tlQ29sb3IgdGhlIHN0cm9rZSBjb2xvclxyXG4gICAqIEBwYXJhbSBzdHJva2VXaWR0aCB0aGUgc3Ryb2tlIHdpZHRoXHJcbiAgICogQHJldHVybnMgYSBEcmF3IENvbnRyb2xcclxuICAgKi9cclxuICBjcmVhdGVEcmF3Q29udHJvbChcclxuICAgIGZpbGxDb2xvcj86IHN0cmluZyxcclxuICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nLFxyXG4gICAgc3Ryb2tlV2lkdGg/OiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGRyYXdDb250cm9sID0gbmV3IERyYXdDb250cm9sKHtcclxuICAgICAgZ2VvbWV0cnlUeXBlOiB1bmRlZmluZWQsXHJcbiAgICAgIGRyYXdpbmdMYXllclNvdXJjZTogdGhpcy5vbERyYXdpbmdMYXllclNvdXJjZSxcclxuICAgICAgZHJhd2luZ0xheWVyU3R5bGU6IG5ldyBPbFN0eWxlLlN0eWxlKHt9KSxcclxuICAgICAgaW50ZXJhY3Rpb25TdHlsZTogY3JlYXRlSW50ZXJhY3Rpb25TdHlsZShcclxuICAgICAgICBmaWxsQ29sb3IsXHJcbiAgICAgICAgc3Ryb2tlQ29sb3IsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGhcclxuICAgICAgKVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRyYXdDb250cm9sO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgaW5pdGlhbGl6YXRpb24sIGluY2x1ZGluZyBkcmF3aW5nIGxheWVyIGNyZWF0aW9uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpbml0U3RvcmUoKSB7XHJcbiAgICB0aGlzLm1hcC5yZW1vdmVMYXllcih0aGlzLm9sRHJhd2luZ0xheWVyKTtcclxuXHJcbiAgICAvLyB0aGlzLm1hcC5hZGRMYXllcigpXHJcbiAgICB0aGlzLm9sRHJhd2luZ0xheWVyID0gbmV3IFZlY3RvckxheWVyKHtcclxuICAgICAgaXNJZ29JbnRlcm5hbExheWVyOiB0cnVlLFxyXG4gICAgICBpZDogJ2lnby1kcmF3LWxheWVyJyxcclxuICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcuZHJhd2luZycpLFxyXG4gICAgICB6SW5kZXg6IDIwMCxcclxuICAgICAgc291cmNlOiBuZXcgRmVhdHVyZURhdGFTb3VyY2UoKSxcclxuICAgICAgc3R5bGU6IChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd1N0eWxlU2VydmljZS5jcmVhdGVJbmRpdmlkdWFsRWxlbWVudFN0eWxlKFxyXG4gICAgICAgICAgZmVhdHVyZSxcclxuICAgICAgICAgIHJlc29sdXRpb24sXHJcbiAgICAgICAgICB0aGlzLmxhYmVsc0FyZVNob3duLFxyXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLFxyXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLmZpbGwsXHJcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlLFxyXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFgnKSxcclxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRZJyksXHJcbiAgICAgICAgICB0aGlzLmljb25cclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgICBzaG93SW5MYXllckxpc3Q6IHRydWUsXHJcbiAgICAgIGV4cG9ydGFibGU6IHRydWUsXHJcbiAgICAgIGJyb3dzYWJsZTogZmFsc2UsXHJcbiAgICAgIHdvcmtzcGFjZToge1xyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdHJ5QmluZFN0b3JlTGF5ZXIodGhpcy5zdG9yZSwgdGhpcy5vbERyYXdpbmdMYXllcik7XHJcblxyXG4gICAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5KFxyXG4gICAgICB0aGlzLnN0b3JlLFxyXG4gICAgICBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcclxuICAgICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0cnlBZGRTZWxlY3Rpb25TdHJhdGVneShcclxuICAgICAgdGhpcy5zdG9yZSxcclxuICAgICAgbmV3IEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5KHtcclxuICAgICAgICBtYXA6IHRoaXMubWFwLFxyXG4gICAgICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbi5Ob25lLFxyXG4gICAgICAgIG1hbnk6IHRydWVcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnN0b3JlLmxheWVyLnZpc2libGUgPSB0cnVlO1xyXG4gICAgdGhpcy5zdG9yZS5zb3VyY2Uub2wub24oXHJcbiAgICAgICdyZW1vdmVmZWF0dXJlJyxcclxuICAgICAgKGV2ZW50OiBPbFZlY3RvclNvdXJjZUV2ZW50PE9sR2VvbWV0cnk+KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb2xHZW9tZXRyeSA9IGV2ZW50LmZlYXR1cmUuZ2V0R2VvbWV0cnkoKTtcclxuICAgICAgICB0aGlzLmNsZWFyTGFiZWxzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcclxuICAgICAgICAgIHJldHVybiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGZpcnN0KClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz5bXSkgPT4ge1xyXG4gICAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgcmVjb3JkLnN0YXRlLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxyXG4gICAgICB0aGlzLnN0b3JlLnN0YXRlVmlld1xyXG4gICAgICAgIC5tYW55QnkkKChyZWNvcmQ6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBza2lwKDEpIC8vIFNraXAgaW5pdGlhbCBlbWlzc2lvblxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PltdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLm5leHQocmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmVudGl0eSkpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXHJcbiAgICAgIHRoaXMuc3RvcmUuY291bnQkLnN1YnNjcmliZSgoY250KSA9PiB7XHJcbiAgICAgICAgaWYgKGNudCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuc2V0TGF5ZXJFeHRlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY250ID49IDFcclxuICAgICAgICAgID8gKHRoaXMuc3RvcmUubGF5ZXIub3B0aW9ucy5zaG93SW5MYXllckxpc3QgPSB0cnVlKVxyXG4gICAgICAgICAgOiAodGhpcy5zdG9yZS5sYXllci5vcHRpb25zLnNob3dJbkxheWVyTGlzdCA9IGZhbHNlKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIE9wZW4gdGhlIHN0eWxlIG1vZGFsIGRpYWxvZyBib3hcclxuICovXHJcbiAgb3BlblN0eWxlTW9kYWxEaWFsb2coKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIHN0eWxlIGZlYXR1cmVzXHJcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU3R5bGVNb2RhbENvbXBvbmVudCwge1xyXG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgZmVhdHVyZXM6IHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQuZ2V0VmFsdWUoKSxcclxuICAgICAgICAgIGljb25zOiB0aGlzLmljb25zLFxyXG4gICAgICAgICAgaWNvbjogdGhpcy5pY29uXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gd2hlbiBkaWFsb2cgYm94IGlzIGNsb3NlZCwgZ2V0IGxhYmVsIGFuZCBzZXQgaXQgdG8gZ2VvbWV0cnlcclxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBTdHlsZU1vZGFsRGF0YSkgPT4ge1xyXG4gICAgICAgIC8vIGNoZWNrcyBpZiB0aGUgdXNlciBjbGlja2VkIG9rXHJcbiAgICAgICAgaWYgKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtRmxhZykge1xyXG4gICAgICAgICAgdGhpcy5vbkZvbnRDaGFuZ2UodGhpcy5sYWJlbHNBcmVTaG93biwgZGF0YS5mb250U2l6ZSwgZGF0YS5mb250U3R5bGUpO1xyXG4gICAgICAgICAgdGhpcy5vbkNvbG9yQ2hhbmdlKHRoaXMubGFiZWxzQXJlU2hvd24sIHRoaXMuaWNvbiA/IHRydWUgOiBmYWxzZSwgZGF0YS5maWxsQ29sb3IsIGRhdGEuc3Ryb2tlQ29sb3IpO1xyXG4gICAgICAgICAgdGhpcy5vbk9mZnNldExhYmVsQ2hhbmdlKHRoaXMubGFiZWxzQXJlU2hvd24sIGRhdGEub2Zmc2V0WCwgZGF0YS5vZmZzZXRZKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgMjUwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYSBkaWFsb2cgYm94IHRvIGVudGVyIGxhYmVsIGFuZCBkbyBzb21ldGhpbmdcclxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBnZW9tZXRyeSBhdCBkcmF3IGVuZCBvciBzZWxlY3RlZCBnZW9tZXRyeVxyXG4gICAqIEBwYXJhbSBkcmF3RW5kIGV2ZW50IGZpcmVkIGF0IGRyYXdFbmQ/XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBvcGVuRHJhd0RpYWxvZyhvbEdlb21ldHJ5LCBpc0RyYXdFbmQ6IGJvb2xlYW4pIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBvcGVuIHRoZSBkaWFsb2cgYm94IHVzZWQgdG8gZW50ZXIgbGFiZWxcclxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEcmF3UG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICAgIGRhdGE6IHsgY3VycmVudExhYmVsOiBvbEdlb21ldHJ5LmdldCgnZHJhdycpIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyB3aGVuIGRpYWxvZyBib3ggaXMgY2xvc2VkLCBnZXQgbGFiZWwgYW5kIHNldCBpdCB0byBnZW9tZXRyeVxyXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGxhYmVsOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAvLyBjaGVja3MgaWYgdGhlIHVzZXIgY2xpY2tlZCBva1xyXG4gICAgICAgIGlmIChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUZsYWcpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgbGFiZWwpO1xyXG4gICAgICAgICAgaWYgKCFvbEdlb21ldHJ5LnZhbHVlc18uZm9udFN0eWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEdlb21ldHJ5LCAnMjAnLCBGb250VHlwZS5BcmlhbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIW9sR2VvbWV0cnkudmFsdWVzXy5kcmF3aW5nU3R5bGUpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXHJcbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSxcclxuICAgICAgICAgICAgICAncmdiYSgyNTUsMjU1LDI1NSwwLjQpJyxcclxuICAgICAgICAgICAgICAncmdiYSgxNDMsNyw3LDEpJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCEob2xHZW9tZXRyeS52YWx1ZXNfLm9mZnNldFggfHwgb2xHZW9tZXRyeS52YWx1ZXNfLm9mZnNldFkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KFxyXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICBvbEdlb21ldHJ5IGluc3RhbmNlb2YgUG9pbnQgPyAtMTUgOiAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaWYgZXZlbnQgd2FzIGZpcmVkIGF0IGRyYXcgZW5kXHJcbiAgICAgICAgICBpZiAoaXNEcmF3RW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnkpO1xyXG4gICAgICAgICAgICAvLyBpZiBldmVudCB3YXMgZmlyZWQgYXQgc2VsZWN0XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0RHJhdyhvbEdlb21ldHJ5LCBsYWJlbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUhlaWdodFRhYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRlbGV0ZXMgdGhlIGZlYXR1cmVcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub2xEcmF3aW5nTGF5ZXJTb3VyY2VcclxuICAgICAgICAgICAgLmdldEZlYXR1cmVzKClcclxuICAgICAgICAgICAgLmZvckVhY2goKGRyYXdpbmdMYXllckZlYXR1cmUpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGRyYXdpbmdMYXllckZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgaWYgKG9sR2VvbWV0cnkgPT09IGdlb21ldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sRHJhd2luZ0xheWVyU291cmNlLnJlbW92ZUZlYXR1cmUoZHJhd2luZ0xheWVyRmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSwgMjUwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSBkcmF3IHNvdXJjZSBhbmQgdHJhY2sgdGhlIGdlb21ldHJ5IGJlaW5nIGRyYXdcclxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPbCBsaW5lc3RyaW5nIG9yIHBvbHlnb25cclxuICAgKi9cclxuICBwcml2YXRlIG9uRHJhd0VuZChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LCByYWRpdXM/OiBudW1iZXIpIHtcclxuICAgIHRoaXMuYWRkRmVhdHVyZVRvU3RvcmUob2xHZW9tZXRyeSwgcmFkaXVzKTtcclxuICAgIHRoaXMuY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XHJcbiAgICB0aGlzLnN0b3JlLmxheWVyLm9sLmdldFNvdXJjZSgpLnJlZnJlc2goKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25Nb2RpZnlEcmF3KG9sR2VvbWV0cnkpIHtcclxuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zdG9yZS5hbGwoKTtcclxuXHJcbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcclxuICAgICAgY29uc3QgZW50aXR5SWQgPSBlbnRpdHkucHJvcGVydGllcy5pZDtcclxuXHJcbiAgICAgIGNvbnN0IG9sR2VvbWV0cnlJZCA9IG9sR2VvbWV0cnkub2xfdWlkO1xyXG5cclxuICAgICAgaWYgKGVudGl0eUlkID09PSBvbEdlb21ldHJ5SWQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXcpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShcclxuICAgICAgICAgIG9sR2VvbWV0cnksXHJcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUuc3BsaXQoJyAnKVswXS5yZXBsYWNlKCdweCcsICcnKSxcclxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zdWJzdHJpbmcoXHJcbiAgICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5pbmRleE9mKCcgJykgKyAxXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihcclxuICAgICAgICAgIG9sR2VvbWV0cnksXHJcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuZmlsbCxcclxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5zdHJva2VcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KFxyXG4gICAgICAgICAgb2xHZW9tZXRyeSxcclxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFgsXHJcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRZXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJlcGxhY2VGZWF0dXJlSW5TdG9yZShlbnRpdHksIG9sR2VvbWV0cnkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25TZWxlY3REcmF3KG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LCBsYWJlbDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuc3RvcmUuYWxsKCk7XHJcblxyXG4gICAgY29uc3Qgb2xHZW9tZXRyeSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcclxuICAgIG9sR2VvbWV0cnkub2xfdWlkID0gb2xGZWF0dXJlLmdldCgnaWQnKTtcclxuXHJcbiAgICBjb25zdCBvbEdlb21ldHJ5Q29vcmRpbmF0ZXMgPSBKU09OLnN0cmluZ2lmeShcclxuICAgICAgb2xHZW9tZXRyeS5nZXRDb29yZGluYXRlcygpWzBdXHJcbiAgICApO1xyXG5cclxuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xyXG4gICAgICBjb25zdCBlbnRpdHlDb29yZGluYXRlcyA9IEpTT04uc3RyaW5naWZ5KGVudGl0eS5nZW9tZXRyeS5jb29yZGluYXRlc1swXSk7XHJcblxyXG4gICAgICBpZiAob2xHZW9tZXRyeUNvb3JkaW5hdGVzID09PSBlbnRpdHlDb29yZGluYXRlcykge1xyXG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gb2xGZWF0dXJlXHJcbiAgICAgICAgICAuZ2V0KCdmb250U3R5bGUnKVxyXG4gICAgICAgICAgLnNwbGl0KCcgJylbMF1cclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKTtcclxuICAgICAgICBjb25zdCBmb250U3R5bGUgPSBvbEZlYXR1cmVcclxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXHJcbiAgICAgICAgICAuc3Vic3RyaW5nKG9sRmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLmluZGV4T2YoJyAnKSArIDEpO1xyXG5cclxuICAgICAgICBjb25zdCBmaWxsQ29sb3IgPSBvbEZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsO1xyXG4gICAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gb2xGZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlO1xyXG5cclxuICAgICAgICBjb25zdCBvZmZzZXRYID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WCcpO1xyXG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSBvbEZlYXR1cmUuZ2V0KCdvZmZzZXRZJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJhZDogbnVtYmVyID0gZW50aXR5LnByb3BlcnRpZXMucmFkXHJcbiAgICAgICAgICA/IGVudGl0eS5wcm9wZXJ0aWVzLnJhZFxyXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsYWJlbCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGb250U2l6ZUFuZFN0eWxlKG9sR2VvbWV0cnksIGZvbnRTaXplLCBmb250U3R5bGUpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRmlsbEFuZFN0cm9rZUNvbG9yKG9sR2VvbWV0cnksIGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KG9sR2VvbWV0cnksIG9mZnNldFgsIG9mZnNldFkpO1xyXG4gICAgICAgIHRoaXMucmVwbGFjZUZlYXR1cmVJblN0b3JlKGVudGl0eSwgb2xHZW9tZXRyeSwgcmFkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgYSBmZWF0dXJlIHdpdGggZHJhdyBsYWJlbCB0byB0aGUgc3RvcmUuIFRoZSBsb2FkaW5nIHN0cmFnZWd5IG9mIHRoZSBzdG9yZVxyXG4gICAqIHdpbGwgdHJpZ2dlciBhbmQgYWRkIHRoZSBmZWF0dXJlIHRvIHRoZSBtYXAuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRGZWF0dXJlVG9TdG9yZShcclxuICAgIG9sR2VvbWV0cnksXHJcbiAgICByYWRpdXM/OiBudW1iZXIsXHJcbiAgICBmZWF0dXJlPzogRmVhdHVyZVdpdGhEcmF3XHJcbiAgKSB7XHJcbiAgICBsZXQgcmFkOiBudW1iZXI7XHJcbiAgICBsZXQgY2VudGVyNDMyNjogQXJyYXk8bnVtYmVyPjtcclxuICAgIGxldCBwb2ludDQzMjY6IEFycmF5PG51bWJlcj47XHJcbiAgICBsZXQgbG9uNDMyNjogbnVtYmVyO1xyXG4gICAgbGV0IGxhdDQzMjY6IG51bWJlcjtcclxuICAgIGNvbnN0IGZlYXR1cmVJZCA9IGZlYXR1cmUgPyBmZWF0dXJlLnByb3BlcnRpZXMuaWQgOiBvbEdlb21ldHJ5Lm9sX3VpZDtcclxuICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3Qob2xHZW9tZXRyeSwge1xyXG4gICAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbixcclxuICAgICAgZGF0YVByb2plY3Rpb246IHByb2plY3Rpb25cclxuICAgIH0pIGFzIGFueTtcclxuXHJcbiAgICBpZiAob2xHZW9tZXRyeSBpbnN0YW5jZW9mIE9sQ2lyY2xlIHx8IHJhZGl1cykge1xyXG4gICAgICBpZiAocmFkaXVzKSB7XHJcbiAgICAgICAgcmFkID0gcmFkaXVzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdlb21ldHJ5LnR5cGUgPSAnUG9pbnQnO1xyXG4gICAgICAgIGdlb21ldHJ5LmNvb3JkaW5hdGVzID0gb2xHZW9tZXRyeS5nZXRDZW50ZXIoKTtcclxuICAgICAgICBjb25zdCBleHRlbnQ0MzI2ID0gdHJhbnNmb3JtKFxyXG4gICAgICAgICAgW1xyXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzJdLFxyXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzNdXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgcHJvamVjdGlvbixcclxuICAgICAgICAgICdFUFNHOjQzMjYnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjZW50ZXI0MzI2ID0gdHJhbnNmb3JtKFxyXG4gICAgICAgICAgW1xyXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzBdLFxyXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzFdXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgcHJvamVjdGlvbixcclxuICAgICAgICAgICdFUFNHOjQzMjYnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsb240MzI2ID0gY2VudGVyNDMyNlswXTtcclxuICAgICAgICBsYXQ0MzI2ID0gY2VudGVyNDMyNlsxXTtcclxuICAgICAgICByYWQgPSBnZXREaXN0YW5jZShjZW50ZXI0MzI2LCBleHRlbnQ0MzI2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xQb2ludCkge1xyXG4gICAgICBwb2ludDQzMjYgPSB0cmFuc2Zvcm0oXHJcbiAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKSxcclxuICAgICAgICBwcm9qZWN0aW9uLFxyXG4gICAgICAgICdFUFNHOjQzMjYnXHJcbiAgICAgICk7XHJcbiAgICAgIGxvbjQzMjYgPSBwb2ludDQzMjZbMF07XHJcbiAgICAgIGxhdDQzMjYgPSBwb2ludDQzMjZbMV07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdG9yZS51cGRhdGUoe1xyXG4gICAgICB0eXBlOiBGRUFUVVJFLFxyXG4gICAgICBnZW9tZXRyeSxcclxuICAgICAgcHJvamVjdGlvbjogcHJvamVjdGlvbi5nZXRDb2RlKCksXHJcbiAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICBpZDogZmVhdHVyZUlkLFxyXG4gICAgICAgIGRyYXc6IG9sR2VvbWV0cnkuZ2V0KCdfbGFiZWwnKSxcclxuICAgICAgICBsb25naXR1ZGU6IGxvbjQzMjYgPyBsb240MzI2IDogbnVsbCxcclxuICAgICAgICBsYXRpdHVkZTogbGF0NDMyNiA/IGxhdDQzMjYgOiBudWxsLFxyXG4gICAgICAgIHJhZDogcmFkID8gcmFkIDogbnVsbCxcclxuICAgICAgICBmb250U3R5bGU6IG9sR2VvbWV0cnkuZ2V0KCdmb250U3R5bGVfJyksXHJcbiAgICAgICAgZHJhd2luZ1N0eWxlOiB7XHJcbiAgICAgICAgICBmaWxsOiBvbEdlb21ldHJ5LmdldCgnZmlsbENvbG9yXycpLFxyXG4gICAgICAgICAgc3Ryb2tlOiBvbEdlb21ldHJ5LmdldCgnc3Ryb2tlQ29sb3JfJylcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9mZnNldFg6IG9sR2VvbWV0cnkuZ2V0KCdvZmZzZXRYXycpLFxyXG4gICAgICAgIG9mZnNldFk6IG9sR2VvbWV0cnkuZ2V0KCdvZmZzZXRZXycpXHJcbiAgICAgIH0sXHJcbiAgICAgIG1ldGE6IHtcclxuICAgICAgICBpZDogZmVhdHVyZUlkXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgZmlsbDogWycnXSxcclxuICAgICAgc3Ryb2tlOiBbJyddXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGRvdWJsZS1jbGlja3MgdGhlIHNlbGVjdGVkIGRyYXdpbmdcclxuICAgKi9cclxuICBlZGl0TGFiZWxEcmF3aW5nKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBmZWF0dXJlVG9PbChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLFxyXG4gICAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMub3BlbkRyYXdEaWFsb2cob2xHZW9tZXRyeSwgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblNob3JjdXRzRGlhbG9nKCkge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihEcmF3U2hvcmN1dHNDb21wb25lbnQpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRHJhd2luZ3MoKSB7XHJcbiAgICB0aGlzLnN0b3JlLmRlbGV0ZU1hbnkodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goKHNlbGVjdGVkRmVhdHVyZSkgPT4ge1xyXG4gICAgICB0aGlzLm9sRHJhd2luZ0xheWVyU291cmNlLmdldEZlYXR1cmVzKCkuZm9yRWFjaCgoZHJhd2luZ0xheWVyRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZHJhd2luZ0xheWVyRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlLnByb3BlcnRpZXMuaWQgPT09IGdlb21ldHJ5Lm9sX3VpZCkge1xyXG4gICAgICAgICAgdGhpcy5vbERyYXdpbmdMYXllclNvdXJjZS5yZW1vdmVGZWF0dXJlKGRyYXdpbmdMYXllckZlYXR1cmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudXBkYXRlSGVpZ2h0VGFibGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHRvZ2dsZXMgdGhlIGxhYmVscyB0b2dnbGVcclxuICAgKi9cclxuICBvblRvZ2dsZUxhYmVscygpIHtcclxuICAgIHRoaXMuZHJhd1N0eWxlU2VydmljZS50b2dnbGVMYWJlbHNBcmVTaG93bigpO1xyXG4gICAgdGhpcy5sYWJlbHNBcmVTaG93biA9ICF0aGlzLmxhYmVsc0FyZVNob3duO1xyXG4gICAgdGhpcy5pY29uXHJcbiAgICAgID8gdGhpcy5vbkNvbG9yQ2hhbmdlKFxyXG4gICAgICAgICAgdGhpcy5sYWJlbHNBcmVTaG93bixcclxuICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICB0aGlzLmZpbGxDb2xvcixcclxuICAgICAgICAgIHRoaXMuc3Ryb2tlQ29sb3JcclxuICAgICAgICApXHJcbiAgICAgIDogdGhpcy5vbkNvbG9yQ2hhbmdlKFxyXG4gICAgICAgICAgdGhpcy5sYWJlbHNBcmVTaG93bixcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgdGhpcy5maWxsQ29sb3IsXHJcbiAgICAgICAgICB0aGlzLnN0cm9rZUNvbG9yXHJcbiAgICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHRvZ2dsZXMgdGhlIERyYXcgY29udHJvbCBpcyB0b2dnbGVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Ub2dnbGVEcmF3Q29udHJvbCh0b2dnbGVJc0NoZWNrZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRvZ2dsZUlzQ2hlY2tlZCA/IHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKSA6IHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvLyBVc2VyIGNoYW5nZXMgcHJvcGVydGllcyBvZiBhIGRyYXdpbmcgZWxlbWVudFxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjb2xvciBpbiBhIGNvbG9yIHBpY2tlclxyXG4gICAqIEBwYXJhbSBsYWJlbHNBcmVTaG93biB3aGV0ZXIgdGhlIGxhYmVscyBhcmUgc2hvd24gb3Igbm90XHJcbiAgICogQHBhcmFtIGlzQW5JY29uIHdoZXRlciB0aGUgZmVhdHVyZSBpcyBhbiBpY29uIG9yIG5vdFxyXG4gICAqIEBwYXJhbSBmaWxsQ29sb3Igd2hpY2ggaXMgdGhlIGZpbGxpbmcgY29sb3JcclxuICAgKiBAcGFyYW0gc3Ryb2tlQ29sb3Igd2hpY2ggaXMgdGhlIHN0cm9rZSBjb2xvclxyXG4gICAqL1xyXG4gIG9uQ29sb3JDaGFuZ2UoXHJcbiAgICBsYWJlbHNBcmVTaG93bjogYm9vbGVhbixcclxuICAgIGlzQW5JY29uOiBib29sZWFuLFxyXG4gICAgZmlsbENvbG9yOiBzdHJpbmcsXHJcbiAgICBzdHJva2VDb2xvcjogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwICYmICFpc0FuSWNvbikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goKGZlYXR1cmUpID0+IHtcclxuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXHJcbiAgICAgICAgICBmZWF0dXJlLFxyXG4gICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRmlsbEFuZFN0cm9rZUNvbG9yKG9sRmVhdHVyZSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XHJcblxyXG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuc3RvcmVcclxuICAgICAgICAgIC5hbGwoKVxyXG4gICAgICAgICAgLmZpbmQoKGUpID0+IGUubWV0YS5pZCA9PT0gb2xGZWF0dXJlLmdldElkKCkpO1xyXG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5maWxsID0gb2xGZWF0dXJlLmdldCgnZmlsbENvbG9yXycpO1xyXG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5zdHJva2UgPSBvbEZlYXR1cmUuZ2V0KCdzdHJva2VDb2xvcl8nKTtcclxuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZShlbnRpdHkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsbENvbG9yID0gZmlsbENvbG9yO1xyXG4gICAgdGhpcy5zdHJva2VDb2xvciA9IHN0cm9rZUNvbG9yO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duLCBpc0FuSWNvbik7XHJcbiAgICB0aGlzLmNyZWF0ZURyYXdDb250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBmb250IHNpemUgb3IvYW5kIHN0eWxlXHJcbiAgICogQHBhcmFtIGxhYmVsc0FyZVNob3duIHdoZXRlciB0aGUgbGFiZWxzIGFyZSBzaG93biBvciBub3RcclxuICAgKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgZm9udFxyXG4gICAqIEBwYXJhbSBzdHlsZSB0aGUgc3R5bGUgb2YgdGhlIGZvbnRcclxuICAgKi9cclxuXHJcbiAgb25Gb250Q2hhbmdlKGxhYmVsc0FyZVNob3duOiBib29sZWFuLCBzaXplOiBzdHJpbmcsIHN0eWxlOiBGb250VHlwZSkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goKGZlYXR1cmUpID0+IHtcclxuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXHJcbiAgICAgICAgICBmZWF0dXJlLFxyXG4gICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEZlYXR1cmUsIHNpemUsIHN0eWxlKTtcclxuICAgICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLnN0b3JlXHJcbiAgICAgICAgICAuYWxsKClcclxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcclxuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUgPSBvbEZlYXR1cmUuZ2V0KCdmb250U3R5bGVfJyk7XHJcbiAgICAgICAgdGhpcy5zdG9yZS51cGRhdGUoZW50aXR5KTtcclxuICAgICAgICBvbEZlYXR1cmUgPSB0aGlzLnN0b3JlLmxheWVyLm9sLmdldFNvdXJjZSgpLmdldEZlYXR1cmVzKCkuZmluZChmID0+IGYuZ2V0SWQoKSA9PT0gZW50aXR5Lm1ldGEuaWQpO1xyXG4gICAgICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKHsgZm9udFN0eWxlOiBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUgfSk7XHJcbiAgICAgICAgb2xGZWF0dXJlLmNoYW5nZWQoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmZvbnRTaXplID0gc2l6ZTtcclxuICAgICAgdGhpcy5mb250U3R5bGUgPSBzdHlsZTtcclxuXHJcbiAgICAgIHRoaXMuZHJhd1N0eWxlU2VydmljZS5zZXRGb250U2l6ZShzaXplKTtcclxuICAgICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEZvbnRTdHlsZShzdHlsZSk7XHJcblxyXG4gICAgICB0aGlzLmVsZW1lbnRTdHlsZShsYWJlbHNBcmVTaG93bik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiB0aGUgaG9yaXpvbnRhbC92ZXJ0aWNhbCBvZmZzZXRcclxuICAgKiBAcGFyYW0gbGFiZWxzQXJlU2hvd24gd2hldGVyIHRoZSBsYWJlbHMgYXJlIHNob3duIG9yIG5vdFxyXG4gICAqIEBwYXJhbSBvZmZzZXRYIGhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSBsYWJlbFxyXG4gICAqIEBwYXJhbSBvZmZzZXRZIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgbGFiZWxcclxuICAgKi9cclxuXHJcbiAgb25PZmZzZXRMYWJlbENoYW5nZShcclxuICAgIGxhYmVsc0FyZVNob3duOiBib29sZWFuLFxyXG4gICAgb2Zmc2V0WDogbnVtYmVyLFxyXG4gICAgb2Zmc2V0WTogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xyXG4gICAgICAgIGxldCBvbEZlYXR1cmUgPSBmZWF0dXJlVG9PbChcclxuICAgICAgICAgIGZlYXR1cmUsXHJcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQob2xGZWF0dXJlLCBvZmZzZXRYLCBvZmZzZXRZKTtcclxuICAgICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLnN0b3JlXHJcbiAgICAgICAgICAuYWxsKClcclxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcclxuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRYID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WF8nKTtcclxuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRZID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WV8nKTtcclxuICAgICAgICB0aGlzLnN0b3JlLnVwZGF0ZShlbnRpdHkpO1xyXG4gICAgICAgIG9sRmVhdHVyZSA9IHRoaXMuc3RvcmUubGF5ZXIub2wuZ2V0U291cmNlKCkuZ2V0RmVhdHVyZXMoKS5maW5kKGYgPT4gZi5nZXRJZCgpID09PSBlbnRpdHkubWV0YS5pZCk7XHJcbiAgICAgICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoeyBvZmZzZXRYOiBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRYLCBvZmZzZXRZOiBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRZIH0pO1xyXG4gICAgICAgIG9sRmVhdHVyZS5jaGFuZ2VkKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmVsZW1lbnRTdHlsZShsYWJlbHNBcmVTaG93bik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkljb25DaGFuZ2UoZXZlbnQ/KSB7XHJcbiAgICB0aGlzLmljb24gPSBldmVudDtcclxuICAgIHRoaXMuZHJhd1N0eWxlU2VydmljZS5zZXRJY29uKHRoaXMuaWNvbik7XHJcbiAgICB0aGlzLmVsZW1lbnRTdHlsZSh0cnVlLCB0aGlzLmljb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyBnZW9tZXRyeSB0eXBlXHJcbiAgICogQHBhcmFtIGdlb21ldHJ5VHlwZSB0aGUgZ2VvbWV0cnkgdHlwZSBzZWxlY3RlZCBieSB0aGUgdXNlclxyXG4gICAqL1xyXG4gIG9uR2VvbWV0cnlUeXBlQ2hhbmdlKGdlb21ldHJ5VHlwZTogVHlwZSkge1xyXG4gICAgdGhpcy5kcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUoZ2VvbWV0cnlUeXBlKTtcclxuICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZXMgdGhlIHByb3BlcnRpZXMgb2Ygb2xGZWF0dXJlIGlucHV0dGVkXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgbGFiZWwgb2YgYSBnZW9tZXRyeSB3aGVuIGEgbGFiZWwgaXMgZW50ZXJlZCBpbiBhIGRpYWxvZyBib3hcclxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSB0aGUgZ2VvbWV0cnlcclxuICAgKiBAcGFyYW0gbGFiZWwgdGhlIGxhYmVsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LCBsYWJlbDogc3RyaW5nKSB7XHJcbiAgICBvbEdlb21ldHJ5LnNldFByb3BlcnRpZXMoXHJcbiAgICAgIHtcclxuICAgICAgICBfbGFiZWw6IGxhYmVsXHJcbiAgICAgIH0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZvbnRTaXplQW5kU3R5bGUoXHJcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcclxuICAgIGZvbnRTaXplOiBzdHJpbmcsXHJcbiAgICBmb250U3R5bGU6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXHJcbiAgICAgIHtcclxuICAgICAgICBmb250U3R5bGVfOiBgJHtmb250U2l6ZX1weCAke2ZvbnRTdHlsZX1gXHJcbiAgICAgIH0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihcclxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxyXG4gICAgZmlsbENvbG9yOiBzdHJpbmcsXHJcbiAgICBzdHJva2VDb2xvcjogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyhcclxuICAgICAge1xyXG4gICAgICAgIGZpbGxDb2xvcl86IGZpbGxDb2xvcixcclxuICAgICAgICBzdHJva2VDb2xvcl86IHN0cm9rZUNvbG9yXHJcbiAgICAgIH0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU9mZnNldChcclxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxyXG4gICAgb2Zmc2V0WDogbnVtYmVyLFxyXG4gICAgb2Zmc2V0WTogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyhcclxuICAgICAge1xyXG4gICAgICAgIG9mZnNldFhfOiBvZmZzZXRYLFxyXG4gICAgICAgIG9mZnNldFlfOiBvZmZzZXRZXHJcbiAgICAgIH0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayB0aGUgYW1vdW50IG9mIHJvd3MgYXMgYSBwb3NzaWJsZSBhbHRlcm5hdGl2ZVxyXG4gICAqL1xyXG4gIHVwZGF0ZUhlaWdodFRhYmxlKCkge1xyXG4gICAgdGhpcy5udW1iZXJPZkRyYXdpbmdzID0gdGhpcy5zdG9yZS5jb3VudCQuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMubnVtYmVyT2ZEcmF3aW5ncyA+IDEwID8gdGhpcy50YWJsZVRlbXBsYXRlLnRhYmxlSGVpZ2h0ID0gJzM1dmgnOiB0aGlzLnRhYmxlVGVtcGxhdGUudGFibGVIZWlnaHQgPSAnYXV0byc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmF0ZSB0aGUgY29ycmVjdCBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB0b2dnbGVEcmF3Q29udHJvbCgpIHtcclxuICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XHJcbiAgICB0aGlzLmFjdGl2YXRlRHJhd0NvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIHRoZSB0b29sdGlwcyBvZiBhbiBPTCBnZW9tZXRyeVxyXG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IE9MIGdlb21ldHJ5IHdpdGggdG9vbHRpcHNcclxuICAgKi9cclxuICBwcml2YXRlIGNsZWFyTGFiZWxzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpIHtcclxuICAgIGdldFRvb2x0aXBzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpLmZvckVhY2goXHJcbiAgICAgIChvbFRvb2x0aXA6IE9sT3ZlcmxheSB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgICAgIGlmIChvbFRvb2x0aXAgJiYgb2xUb29sdGlwLmdldE1hcCgpKSB7XHJcbiAgICAgICAgICB0aGlzLm1hcC5vbC5yZW1vdmVPdmVybGF5KG9sVG9vbHRpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXBsYWNlIHRoZSBmZWF0dXJlIGluIHRoZSBzdG9yZVxyXG4gICAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0byByZXBsYWNlXHJcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgdGhlIG5ldyBnZW9tZXRyeSB0byBpbnNlcnQgaW4gdGhlIHN0b3JlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZXBsYWNlRmVhdHVyZUluU3RvcmUoXHJcbiAgICBlbnRpdHksXHJcbiAgICBvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LFxyXG4gICAgcmFkaXVzPzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLnN0b3JlLmRlbGV0ZShlbnRpdHkpO1xyXG4gICAgdGhpcy5vbkRyYXdFbmQob2xHZW9tZXRyeSwgcmFkaXVzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlYWN0aXZhdGUgdGhlIGFjdGl2ZSBkcmF3IGNvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIGRlYWN0aXZhdGVEcmF3Q29udHJvbCgpIHtcclxuICAgIGlmICghdGhpcy5kcmF3Q29udHJvbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZHJhd0VuZCQkKSB7XHJcbiAgICAgIHRoaXMuZHJhd0VuZCQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kcmF3Q29udHJvbC5zZXRPbE1hcCh1bmRlZmluZWQpO1xyXG4gICAgdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3RpdmF0ZSBhIGdpdmVuIGNvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIGFjdGl2YXRlRHJhd0NvbnRyb2woKSB7XHJcbiAgICB0aGlzLmRyYXdDb250cm9sSXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMuZHJhd0VuZCQkID0gdGhpcy5kcmF3Q29udHJvbC5lbmQkLnN1YnNjcmliZShcclxuICAgICAgKG9sR2VvbWV0cnk6IE9sR2VvbWV0cnkpID0+IHtcclxuICAgICAgICB0aGlzLm9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnksIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZHJhd0NvbnRyb2wubW9kaWZ5JC5zdWJzY3JpYmUoKG9sR2VvbWV0cnk6IE9sR2VvbWV0cnkpID0+IHtcclxuICAgICAgdGhpcy5vbk1vZGlmeURyYXcob2xHZW9tZXRyeSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZHJhd1NlbGVjdCQkKSB7XHJcbiAgICAgIHRoaXMuZHJhd1NlbGVjdCQkID0gdGhpcy5kcmF3Q29udHJvbC5zZWxlY3QkLnN1YnNjcmliZShcclxuICAgICAgICAob2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pID0+IHtcclxuICAgICAgICAgIHRoaXMub3BlbkRyYXdEaWFsb2cob2xGZWF0dXJlLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZHJhd0NvbnRyb2wuc2V0T2xNYXAodGhpcy5tYXAub2wsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjcmVhdGVzIHRoZSBzdHlsZSBvZiB0aGUgZmVhdHVyZSBzdG9yZWRcclxuICAgKi9cclxuICBwcml2YXRlIGVsZW1lbnRTdHlsZShsYWJlbHNBcmVTaG93bjogYm9vbGVhbiwgaXNBbkljb24/KSB7XHJcbiAgICBpZiAoaXNBbkljb24pIHtcclxuICAgICAgdGhpcy5zdG9yZS5sYXllci5vbC5zZXRTdHlsZSgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlSW5kaXZpZHVhbEVsZW1lbnRTdHlsZShcclxuICAgICAgICAgIGZlYXR1cmUsXHJcbiAgICAgICAgICByZXNvbHV0aW9uLFxyXG4gICAgICAgICAgbGFiZWxzQXJlU2hvd24sXHJcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZm9udFN0eWxlJyksXHJcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuZmlsbCxcclxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXHJcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WCcpLFxyXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFknKSxcclxuICAgICAgICAgIHRoaXMuaWNvblxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9yZS5sYXllci5vbC5zZXRTdHlsZSgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlSW5kaXZpZHVhbEVsZW1lbnRTdHlsZShcclxuICAgICAgICAgIGZlYXR1cmUsXHJcbiAgICAgICAgICByZXNvbHV0aW9uLFxyXG4gICAgICAgICAgbGFiZWxzQXJlU2hvd24sXHJcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZm9udFN0eWxlJyksXHJcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuZmlsbCxcclxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXHJcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WCcpLFxyXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFknKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJnZW9tZXRyeS10eXBlLXRvZ2dsZSBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXHJcbiAgICAgIChjaGFuZ2UpPVwib25HZW9tZXRyeVR5cGVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuUG9pbnRcIj5cclxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuUG9pbnRcIj5cclxuICAgICAgICB7eydpZ28uZ2VvLmRyYXcuJyArIGdlb21ldHJ5VHlwZS5Qb2ludCB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcblxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nXCI+XHJcbiAgICAgICAge3snaWdvLmdlby5kcmF3LicgKyBnZW9tZXRyeVR5cGUuTGluZVN0cmluZyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcblxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2x5Z29uXCI+XHJcbiAgICAgICAge3snaWdvLmdlby5kcmF3LicgKyBnZW9tZXRyeVR5cGUuUG9seWdvbiB8IHRyYW5zbGF0ZX19XHJcbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcblxyXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5DaXJjbGVcIj5cclxuICAgICAgICB7eydpZ28uZ2VvLmRyYXcuJyArIGdlb21ldHJ5VHlwZS5DaXJjbGUgfCB0cmFuc2xhdGV9fVxyXG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImRyYXctb3B0aW9ucyBtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgW2Rpc2FibGVkXT1cImRyYXdDb250cm9sSXNEaXNhYmxlZFwiXHJcbiAgICAgIFtjaGVja2VkXT1cImRyYXdDb250cm9sSXNBY3RpdmVcIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVEcmF3Q29udHJvbCgkZXZlbnQuY2hlY2tlZClcIj5cclxuICAgICAge3snaWdvLmdlby5zcGF0aWFsRmlsdGVyLmRyYXdDb250cm9sJyB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcblxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgW2NoZWNrZWRdPVwibGFiZWxzQXJlU2hvd25cIlxyXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVMYWJlbHMoKVwiPlxyXG4gICAgICB7eydpZ28uZ2VvLmRyYXcudG9nZ2xlTWFwVG9vbHRpcHMnIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJzdG9yZS5jb3VudCQuZ2V0VmFsdWUoKSA+IDBcIlxyXG4gICAgICBjbGFzcz1cImRlbGV0ZUJ0blwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZHJhdy5kZWxldGUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW2Rpc2FibGVkXT1cIihzZWxlY3RlZEZlYXR1cmVzJCB8IGFzeW5jKS5sZW5ndGggPT09IDBcIlxyXG4gICAgICAoY2xpY2spPVwiZGVsZXRlRHJhd2luZ3MoKVwiPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRlbGV0ZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8ZGl2PlxyXG4gICAgICA8aWdvLWVudGl0eS10YWJsZVxyXG4gICAgICAgICN0YWJsZVxyXG4gICAgICAgIGNsYXNzPVwidGFibGUtY29tcGFjdFwiXHJcbiAgICAgICAgaWQ9XCJzdG9yZUVsZW1lbnRzXCJcclxuICAgICAgICBbc3RvcmVdPVwic3RvcmVcIlxyXG4gICAgICAgIFt0ZW1wbGF0ZV09XCJ0YWJsZVRlbXBsYXRlXCJcclxuICAgICAgICAoZGJsY2xpY2spPVwiZWRpdExhYmVsRHJhd2luZygpXCI+XHJcbiAgICAgIDwvaWdvLWVudGl0eS10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiaWNvbi1vcHRpb25zXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJpY29ucy5sZW5ndGggPj0gMVwiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLmRyYXcuaWNvbicgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1zZWxlY3Q+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpY29uXCIgY2xhc3M9XCJib3hcIj5cclxuICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyBpY29uIH19XCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiIChjbGljayk9XCJvbkljb25DaGFuZ2UoKVwiPnt7ICdpZ28uZ2VvLmRyYXcubm9JY29uJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGljb25faHRtbCBvZiBpY29uc1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwiaWNvbl9odG1sXCJcclxuICAgICAgICAgIChjbGljayk9XCJvbkljb25DaGFuZ2UoaWNvbl9odG1sKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJveFwiPlxyXG4gICAgICAgICAgICA8aW1nIHNyYz1cInt7IGljb25faHRtbCB9fVwiPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8YnV0dG9uXHJcbiAgICBtYXQtaWNvbi1idXR0b25cclxuICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCJcclxuICAgIChjbGljayk9XCJvcGVuU2hvcmN1dHNEaWFsb2coKVwiPlxyXG4gICAgPG1hdC1pY29uXHJcbiAgICAgIGNsYXNzPVwic2hvcnRjdXRzLWljb25cIlxyXG4gICAgICBzdmdJY29uPVwia2V5Ym9hcmQtb3V0bGluZVwiXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5kcmF3LnNob3J0Y3V0cycgfCB0cmFuc2xhdGVcIj5cclxuICAgIDwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxidXR0b25cclxuICAgICpuZ0lmPVwic2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoXCJcclxuICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgKGNsaWNrKT1cIm9wZW5TdHlsZU1vZGFsRGlhbG9nKClcIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIuc3R5bGUuc3R5bGVNb2RhbFRvb2x0aXAnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICB7eydpZ28uZ2VvLmxheWVyLnN0eWxlLnN0eWxlTW9kYWwnIHwgdHJhbnNsYXRlfX1cclxuICAgIDxtYXQtaWNvblxyXG4gICAgICBjbGFzcz1cInN0eWxlLWljb25cIlxyXG4gICAgICBzdmdJY29uPVwicGFsZXR0ZVwiXHJcbiAgICAgIFttYXRCYWRnZV09XCJzZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGhcIlxyXG4gICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXHJcbiAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiPlxyXG4gICAgPC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
1069
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLE9BQU8sRUFDUCxZQUFZLEVBQ1osNkJBQTZCLEVBQzdCLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYiwyQkFBMkIsRUFDM0IsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFJckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU1sRSxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFcEMsT0FBTyxTQUFTLE1BQU0sbUJBQW1CLENBQUM7QUFJMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxP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QUM7eUJBQ1gsQ0FBQyxDQUNIO3dCQUNELFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO3dCQUNyRCxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztxQkFDdEQsQ0FBQztpQkFDSCxtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTTt3TEEyQnRDLEdBQUc7a0JBQVgsS0FBSztZQUdGLE1BQU07a0JBRFQsS0FBSztZQVVGLFlBQVk7a0JBRGYsS0FBSztZQVVGLGtCQUFrQjtrQkFEckIsS0FBSztZQVNJLGlCQUFpQjtrQkFBMUIsTUFBTTtZQUNHLGlCQUFpQjtrQkFBMUIsTUFBTTtZQUNHLGFBQWE7a0JBQXRCLE1BQU07WUFFRyxTQUFTO2tCQUFsQixNQUFNO1lBQ0csV0FBVztrQkFBcEIsTUFBTTtZQUNHLFdBQVc7a0JBQXBCLE1BQU07WUFFRyxRQUFRO2tCQUFqQixNQUFNO1lBQ0csU0FBUztrQkFBbEIsTUFBTTtZQTJCcUIsTUFBTTtrQkFBakMsU0FBUzttQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBGRUFUVVJFLFxuICBGZWF0dXJlU3RvcmUsXG4gIEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5LFxuICB0cnlCaW5kU3RvcmVMYXllcixcbiAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5LFxuICB0cnlBZGRTZWxlY3Rpb25TdHJhdGVneSxcbiAgRmVhdHVyZU1vdGlvbixcbiAgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5LFxuICBmZWF0dXJlVG9PbFxufSBmcm9tICcuLi8uLi9mZWF0dXJlJztcblxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRm9udFR5cGUsIEdlb21ldHJ5VHlwZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LmVudW0nO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERyYXcsIEZlYXR1cmVXaXRoRHJhdyB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LmludGVyZmFjZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBWZWN0b3JTb3VyY2VFdmVudCBhcyBPbFZlY3RvclNvdXJjZUV2ZW50IH0gZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9yLWxheWVyJztcbmltcG9ydCB7IEZlYXR1cmVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZmVhdHVyZS1kYXRhc291cmNlJztcbmltcG9ydCB7IERyYXdDb250cm9sIH0gZnJvbSAnLi4vLi4vZ2VvbWV0cnkvc2hhcmVkL2NvbnRyb2xzL2RyYXcnO1xuaW1wb3J0IHtcbiAgRW50aXR5UmVjb3JkLFxuICBFbnRpdHlUYWJsZVRlbXBsYXRlXG59IGZyb20gJ0BpZ28yL2NvbW1vbic7XG5cbmltcG9ydCAqIGFzIE9sU3R5bGUgZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IE9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IE9sQ2lyY2xlIGZyb20gJ29sL2dlb20vQ2lyY2xlJztcbmltcG9ydCBPbFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCBPbEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0IE9sT3ZlcmxheSBmcm9tICdvbC9PdmVybGF5JztcbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXREaXN0YW5jZSB9IGZyb20gJ29sL3NwaGVyZSc7XG5pbXBvcnQgeyBEcmF3U3R5bGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2RyYXctc3R5bGUuc2VydmljZSc7XG5pbXBvcnQgeyBmaXJzdCwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERyYXdQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vZHJhdy1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJhd1Nob3JjdXRzQ29tcG9uZW50IH0gZnJvbSAnLi9kcmF3LXNob3JjdXRzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRUb29sdGlwc09mT2xHZW9tZXRyeSB9IGZyb20gJy4uLy4uL21lYXN1cmUvc2hhcmVkL21lYXN1cmUudXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlSW50ZXJhY3Rpb25TdHlsZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LnV0aWxzJztcbmltcG9ydCB7IHRyYW5zZm9ybSB9IGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IHsgRHJhd0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2RyYXctaWNvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN0eWxlTW9kYWxDb21wb25lbnQsIFN0eWxlTW9kYWxEYXRhIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc3R5bGUtbW9kYWwvc3R5bGUtbW9kYWwuY29tcG9uZW50JztcblxuaW1wb3J0IHtcbiAgdHJpZ2dlcixcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICBhbmltYXRlLFxuICB0cmFuc2l0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IFBvaW50IGZyb20gJ29sL2dlb20vUG9pbnQnO1xuXG5pbXBvcnQgeyBEcmF3TGF5ZXJQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vZHJhdy1sYXllci1wb3B1cC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tZHJhdycsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdvcGVuQ2xvc2UnLCBbXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ29wZW4nLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogMVxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKFxuICAgICAgICAnY2xvc2VkJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICB0cmFuc2l0aW9uKCdvcGVuID0+IGNsb3NlZCcsIFthbmltYXRlKCc2MDBtcyBlYXNlJyldKSxcbiAgICAgIHRyYW5zaXRpb24oJ2Nsb3NlZCA9PiBvcGVuJywgW2FuaW1hdGUoJzgwMG1zIGVhc2UnKV0pXG4gICAgXSlcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RyYXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcmF3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERyYXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBUYWJsZSB0ZW1wbGF0ZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyB0YWJsZVRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlID0ge1xuICAgIHNlbGVjdGlvbjogdHJ1ZSxcbiAgICBzZWxlY3RNYW55OiB0cnVlLFxuICAgIHNlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgIHNvcnQ6IHRydWUsXG4gICAgZml4ZWRIZWFkZXI6IHRydWUsXG4gICAgdGFibGVIZWlnaHQ6ICdhdXRvJyxcbiAgICBjb2x1bW5zOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdEcmF3aW5nJyxcbiAgICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcubGFiZWxzJyksXG4gICAgICAgIHRvb2x0aXA6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcuY2hhbmdlTGFiZWwnKSxcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGZlYXR1cmU6IEZlYXR1cmVXaXRoRHJhdykgPT4ge1xuICAgICAgICAgIHJldHVybiBmZWF0dXJlLnByb3BlcnRpZXMuZHJhdztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfTtcblxuICBwdWJsaWMgZ2VvbWV0cnlUeXBlID0gR2VvbWV0cnlUeXBlOyAvLyBSZWZlcmVuY2UgdG8gdGhlIEdlb21ldHJ5VHlwZSBlbnVtXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwOyAvLyBNYXAgdG8gZHJhdyBvblxuXG4gIEBJbnB1dCgpXG4gIGdldCBzdG9yZXMoKTogRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlcztcbiAgfVxuICBzZXQgc3RvcmVzKHZhbHVlOiBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PltdKSB7XG4gICAgdGhpcy5fc3RvcmVzID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc3RvcmVzOkZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+W10gPSBbXTtcblxuICBASW5wdXQoKVxuICBnZXQgZHJhd0NvbnRyb2xzKCk6IFtzdHJpbmcsIERyYXdDb250cm9sXVtde1xuICAgIHJldHVybiB0aGlzLl9kcmF3Q29udHJvbHM7XG4gIH1cbiAgc2V0IGRyYXdDb250cm9scyh2YWx1ZTogW3N0cmluZywgRHJhd0NvbnRyb2xdW10pe1xuICAgIHRoaXMuX2RyYXdDb250cm9scyA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2RyYXdDb250cm9scyA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBhY3RpdmVEcmF3aW5nTGF5ZXIoKTogVmVjdG9yTGF5ZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVEcmF3aW5nTGF5ZXI7XG4gIH1cbiAgc2V0IGFjdGl2ZURyYXdpbmdMYXllcih2YWx1ZTogVmVjdG9yTGF5ZXIpIHtcbiAgICB0aGlzLl9hY3RpdmVEcmF3aW5nTGF5ZXIgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9hY3RpdmVEcmF3aW5nTGF5ZXI6IFZlY3RvckxheWVyO1xuXG4gIEBPdXRwdXQoKSBhY3RpdmVMYXllckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VmVjdG9yTGF5ZXI+KCk7XG4gIEBPdXRwdXQoKSBkcmF3Q29udHJvbHNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8W3N0cmluZywgRHJhd0NvbnRyb2xdW10+KCk7XG4gIEBPdXRwdXQoKSBsYXllcnNJREV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpIGZpbGxDb2xvcjogc3RyaW5nO1xuICBAT3V0cHV0KCkgc3Ryb2tlQ29sb3I6IHN0cmluZztcbiAgQE91dHB1dCgpIHN0cm9rZVdpZHRoOiBudW1iZXI7XG5cbiAgQE91dHB1dCgpIGZvbnRTaXplOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBmb250U3R5bGU6IHN0cmluZztcblxuICBwdWJsaWMgYWN0aXZlU3RvcmU6IEZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+O1xuICBwcml2YXRlIGxheWVyQ291bnRlcklEOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgZHJhdyQ6IEJlaGF2aW9yU3ViamVjdDxEcmF3PiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pOyAvLyBPYnNlcnZhYmxlIG9mIGRyYXdcbiAgcHJpdmF0ZSBhY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UgPSBuZXcgT2xWZWN0b3JTb3VyY2UoKTtcbiAgcHJpdmF0ZSBhY3RpdmVEcmF3Q29udHJvbDogRHJhd0NvbnRyb2w7XG4gIHByaXZhdGUgZHJhd0VuZCQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZHJhd1NlbGVjdCQkOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBzZWxlY3RlZEZlYXR1cmVzJDogQmVoYXZpb3JTdWJqZWN0PEZlYXR1cmVXaXRoRHJhd1tdPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHB1YmxpYyBmaWxsRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgc3Ryb2tlRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgZHJhd0NvbnRyb2xJc0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGRyYXdDb250cm9sSXNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxhYmVsc0FyZVNob3duOiBib29sZWFuO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMkJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBwdWJsaWMgcG9zaXRpb246IHN0cmluZyA9ICdib3R0b20nO1xuICBwdWJsaWMgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcbiAgcHVibGljIGljb25zOiBBcnJheTxzdHJpbmc+O1xuICBwdWJsaWMgaWNvbjogc3RyaW5nO1xuXG4gIHByaXZhdGUgbnVtYmVyT2ZEcmF3aW5nczogbnVtYmVyO1xuICBwdWJsaWMgaXNDcmVhdGluZ05ld0xheWVyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY3Vyckdlb21ldHJ5VHlwZSA9IHRoaXMuZ2VvbWV0cnlUeXBlLlBvaW50IGFzIGFueTtcblxuICBAVmlld0NoaWxkKCdzZWxlY3RlZExheWVyJykgc2VsZWN0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZHJhd1N0eWxlU2VydmljZTogRHJhd1N0eWxlU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgZHJhd0ljb25TZXJ2aWNlOiBEcmF3SWNvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5idWlsZEZvcm0oKTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRGaWxsQ29sb3IoKTtcbiAgICB0aGlzLnN0cm9rZUNvbG9yID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldFN0cm9rZUNvbG9yKCk7XG4gICAgdGhpcy5zdHJva2VXaWR0aCA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRTdHJva2VXaWR0aCgpO1xuICAgIHRoaXMubGFiZWxzQXJlU2hvd24gPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0TGFiZWxzQXJlU2hvd24oKTtcbiAgICB0aGlzLmljb25zID0gdGhpcy5kcmF3SWNvblNlcnZpY2UuZ2V0SWNvbnMoKTtcbiAgICB0aGlzLmljb24gPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0SWNvbigpO1xuXG4gICAgdGhpcy5mb250U2l6ZSA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRGb250U2l6ZSgpO1xuICAgIHRoaXMuZm9udFN0eWxlID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEZvbnRTdHlsZSgpO1xuICB9XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RvcmUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGVudGl0aWVzIGFuZCBjcmVhdGUgdGhlIERyYXcgY29udHJvbFxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuc3RvcmVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZSA9IG5ldyBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PihbXSwge1xuICAgICAgICBtYXA6IHRoaXMubWFwXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW5pdFN0b3JlKCk7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdGhpcy5jcmVhdGVEcmF3Q29udHJvbChcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IsXG4gICAgICAgIHRoaXMuc3Ryb2tlV2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnNldEdlb21ldHJ5VHlwZSh0aGlzLmdlb21ldHJ5VHlwZS5Qb2ludCBhcyBhbnkpO1xuICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICAgICAgdGhpcy5zdG9yZXMucHVzaCh0aGlzLmFjdGl2ZVN0b3JlKTtcbiAgICAgIHRoaXMuZHJhd0NvbnRyb2xzLnB1c2goW3RoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkLCB0aGlzLmFjdGl2ZURyYXdDb250cm9sXSk7XG4gICAgICB0aGlzLmRyYXdDb250cm9sc0V2ZW50LmVtaXQodGhpcy5kcmF3Q29udHJvbHMpO1xuICAgICAgdGhpcy5sYXllcnNJREV2ZW50LmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWQpO1xuICAgICAgdGhpcy5vbkxheWVyQ2hhbmdlKHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZSA9IHRoaXMuc3RvcmVzLmZpbmQoc3RvcmUgPT4gc3RvcmUubGF5ZXIuaWQgPT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKTtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wgPSB0aGlzLmRyYXdDb250cm9scy5maW5kKGRjID0+IGRjWzBdID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZClbMV07XG4gICAgICB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICAgICAgdGhpcy5hbGxMYXllcnMuZm9yRWFjaChsYXllciA9PiB7XG4gICAgICAgIGlmIChsYXllci5pZCAhPT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWQpIHtcbiAgICAgICAgICBsYXllci5vcGFjaXR5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RvcmUgPSB0aGlzLnN0b3Jlcy5maW5kKHMgPT4gcy5sYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICAgICAgc3RvcmUuc3RhdGVWaWV3XG4gICAgICAgICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBmaXJzdCgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PltdKSA9PiB7XG4gICAgICAgICAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVjb3JkLnN0YXRlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgICAgIHN0b3JlLnN0YXRlVmlld1xuICAgICAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgc2tpcCgxKSAvLyBTa2lwIGluaXRpYWwgZW1pc3Npb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC5uZXh0KHJlY29yZHMubWFwKChyZWNvcmQpID0+IHJlY29yZC5lbnRpdHkpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zJCQucHVzaChcbiAgICAgICAgICBzdG9yZS5jb3VudCQuc3Vic2NyaWJlKChjbnQpID0+IHtcbiAgICAgICAgICAgIGNudCA+PSAxXG4gICAgICAgICAgICAgID8gKHRoaXMuYWN0aXZlU3RvcmUubGF5ZXIub3B0aW9ucy5zaG93SW5MYXllckxpc3QgPSB0cnVlKVxuICAgICAgICAgICAgICA6ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gZmFsc2UpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMub25MYXllckNoYW5nZSh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgZHJhd2luZyBsYXllciBhbmQgdGhlIGludGVyYWN0aW9uc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuYWxsTGF5ZXJzLmZvckVhY2gobGF5ZXIgPT4gbGF5ZXIub3BhY2l0eSA9IDEpO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUuc3RhdGUudXBkYXRlQWxsKHtzZWxlY3RlZDogZmFsc2V9KTtcbiAgICB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLm1hcCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEcmF3IENvbnRyb2xcbiAgICogQHBhcmFtIGZpbGxDb2xvciB0aGUgZmlsbCBjb2xvclxuICAgKiBAcGFyYW0gc3Ryb2tlQ29sb3IgdGhlIHN0cm9rZSBjb2xvclxuICAgKiBAcGFyYW0gc3Ryb2tlV2lkdGggdGhlIHN0cm9rZSB3aWR0aFxuICAgKiBAcmV0dXJucyBhIERyYXcgQ29udHJvbFxuICAgKi9cbiAgY3JlYXRlRHJhd0NvbnRyb2woXG4gICAgZmlsbENvbG9yPzogc3RyaW5nLFxuICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nLFxuICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyXG4gICkge1xuICAgIGNvbnN0IGFjdGl2ZURyYXdDb250cm9sID0gbmV3IERyYXdDb250cm9sKHtcbiAgICAgIGdlb21ldHJ5VHlwZTogdW5kZWZpbmVkLFxuICAgICAgZHJhd2luZ0xheWVyU291cmNlOiB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZSxcbiAgICAgIGRyYXdpbmdMYXllclN0eWxlOiBuZXcgT2xTdHlsZS5TdHlsZSh7fSksXG4gICAgICBpbnRlcmFjdGlvblN0eWxlOiBjcmVhdGVJbnRlcmFjdGlvblN0eWxlKFxuICAgICAgICBmaWxsQ29sb3IsXG4gICAgICAgIHN0cm9rZUNvbG9yLFxuICAgICAgICBzdHJva2VXaWR0aFxuICAgICAgKVxuICAgIH0pO1xuICAgIHJldHVybiBhY3RpdmVEcmF3Q29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBpbml0aWFsaXphdGlvbiwgaW5jbHVkaW5nIGRyYXdpbmcgbGF5ZXIgY3JlYXRpb25cbiAgICovXG5cbiAgcHJpdmF0ZSBpbml0U3RvcmUobmV3VGl0bGU/OiBzdHJpbmcsIGlzTmV3TGF5ZXI/OiBib29sZWFuKSB7XG4gICAgdGhpcy5jcmVhdGVMYXllcihuZXdUaXRsZSwgaXNOZXdMYXllcik7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQucHVzaChcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUuc3RhdGVWaWV3XG4gICAgICAgIC5tYW55QnkkKChyZWNvcmQ6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc2tpcCgxKSAvLyBTa2lwIGluaXRpYWwgZW1pc3Npb25cbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PltdKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC5uZXh0KHJlY29yZHMubWFwKChyZWNvcmQpID0+IHJlY29yZC5lbnRpdHkpKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQucHVzaChcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUuY291bnQkLnN1YnNjcmliZSgoY250KSA9PiB7XG4gICAgICAgIGNudCA+PSAxXG4gICAgICAgICAgPyAodGhpcy5hY3RpdmVTdG9yZS5sYXllci5vcHRpb25zLnNob3dJbkxheWVyTGlzdCA9IHRydWUpXG4gICAgICAgICAgOiAodGhpcy5hY3RpdmVTdG9yZS5sYXllci5vcHRpb25zLnNob3dJbkxheWVyTGlzdCA9IGZhbHNlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4vKipcbiAqIE9wZW4gdGhlIHN0eWxlIG1vZGFsIGRpYWxvZyBib3hcbiAqL1xuICBvcGVuU3R5bGVNb2RhbERpYWxvZygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIG9wZW4gdGhlIGRpYWxvZyBib3ggdXNlZCB0byBzdHlsZSBmZWF0dXJlc1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTdHlsZU1vZGFsQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmZWF0dXJlczogdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGljb25zOiB0aGlzLmljb25zLFxuICAgICAgICAgIGljb246IHRoaXMuaWNvblxuICAgICAgICB9LFxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgLy8gd2hlbiBkaWFsb2cgYm94IGlzIGNsb3NlZCwgZ2V0IGxhYmVsIGFuZCBzZXQgaXQgdG8gZ2VvbWV0cnlcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoZGF0YTogU3R5bGVNb2RhbERhdGEpID0+IHtcbiAgICAgICAgLy8gY2hlY2tzIGlmIHRoZSB1c2VyIGNsaWNrZWQgb2tcbiAgICAgICAgaWYgKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtRmxhZykge1xuICAgICAgICAgIHRoaXMub25Gb250Q2hhbmdlKHRoaXMubGFiZWxzQXJlU2hvd24sIGRhdGEuZm9udFNpemUsIGRhdGEuZm9udFN0eWxlKTtcbiAgICAgICAgICB0aGlzLm9uQ29sb3JDaGFuZ2UodGhpcy5sYWJlbHNBcmVTaG93biwgdGhpcy5pY29uID8gdHJ1ZSA6IGZhbHNlLCBkYXRhLmZpbGxDb2xvciwgZGF0YS5zdHJva2VDb2xvcik7XG4gICAgICAgICAgdGhpcy5vbk9mZnNldExhYmVsQ2hhbmdlKHRoaXMubGFiZWxzQXJlU2hvd24sIGRhdGEub2Zmc2V0WCwgZGF0YS5vZmZzZXRZKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMjUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgZGlhbG9nIGJveCB0byBlbnRlciBsYWJlbCBhbmQgZG8gc29tZXRoaW5nXG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IGdlb21ldHJ5IGF0IGRyYXcgZW5kIG9yIHNlbGVjdGVkIGdlb21ldHJ5XG4gICAqIEBwYXJhbSBkcmF3RW5kIGV2ZW50IGZpcmVkIGF0IGRyYXdFbmQ/XG4gICAqL1xuICBwcml2YXRlIG9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnksIGlzRHJhd0VuZDogYm9vbGVhbikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIGVudGVyIGxhYmVsXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERyYXdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBkYXRhOiB7IGN1cnJlbnRMYWJlbDogb2xHZW9tZXRyeS5nZXQoJ2RyYXcnKSB9XG4gICAgICB9KTtcblxuICAgICAgLy8gd2hlbiBkaWFsb2cgYm94IGlzIGNsb3NlZCwgZ2V0IGxhYmVsIGFuZCBzZXQgaXQgdG8gZ2VvbWV0cnlcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgobGFiZWw6IHN0cmluZykgPT4ge1xuICAgICAgICAvLyBjaGVja3MgaWYgdGhlIHVzZXIgY2xpY2tlZCBva1xuICAgICAgICBpZiAoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm1GbGFnKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsYWJlbCk7XG4gICAgICAgICAgaWYgKCFvbEdlb21ldHJ5LnZhbHVlc18uZm9udFN0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplQW5kU3R5bGUob2xHZW9tZXRyeSwgJzIwJywgRm9udFR5cGUuQXJpYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIW9sR2VvbWV0cnkudmFsdWVzXy5kcmF3aW5nU3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsbEFuZFN0cm9rZUNvbG9yKFxuICAgICAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgICAgICAncmdiYSgyNTUsMjU1LDI1NSwwLjQpJyxcbiAgICAgICAgICAgICAgJ3JnYmEoMTQzLDcsNywxKSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghKG9sR2VvbWV0cnkudmFsdWVzXy5vZmZzZXRYIHx8IG9sR2VvbWV0cnkudmFsdWVzXy5vZmZzZXRZKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQoXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBQb2ludCA/IC0xNSA6IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgZXZlbnQgd2FzIGZpcmVkIGF0IGRyYXcgZW5kXG4gICAgICAgICAgaWYgKGlzRHJhd0VuZCkge1xuICAgICAgICAgICAgdGhpcy5vbkRyYXdFbmQob2xHZW9tZXRyeSk7XG4gICAgICAgICAgICAvLyBpZiBldmVudCB3YXMgZmlyZWQgYXQgc2VsZWN0XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3REcmF3KG9sR2VvbWV0cnksIGxhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHRUYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRlbGV0ZXMgdGhlIGZlYXR1cmVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2VcbiAgICAgICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgICAgICAuZm9yRWFjaCgoZHJhd2luZ0xheWVyRmVhdHVyZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGRyYXdpbmdMYXllckZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XG4gICAgICAgICAgICAgIGlmIChvbEdlb21ldHJ5ID09PSBnZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlLnJlbW92ZUZlYXR1cmUoXG4gICAgICAgICAgICAgICAgICBkcmF3aW5nTGF5ZXJGZWF0dXJlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDI1MCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGRyYXcgc291cmNlIGFuZCB0cmFjayB0aGUgZ2VvbWV0cnkgYmVpbmcgZHJhd1xuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPbCBsaW5lc3RyaW5nIG9yIHBvbHlnb25cbiAgICovXG4gIHByaXZhdGUgb25EcmF3RW5kKG9sR2VvbWV0cnk6IE9sR2VvbWV0cnksIHJhZGl1cz86IG51bWJlcikge1xuICAgIHRoaXMuYWRkRmVhdHVyZVRvU3RvcmUob2xHZW9tZXRyeSwgcmFkaXVzKTtcbiAgICB0aGlzLmNsZWFyTGFiZWxzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUubGF5ZXIub2wuZ2V0U291cmNlKCkucmVmcmVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1vZGlmeURyYXcob2xHZW9tZXRyeSkge1xuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5hY3RpdmVTdG9yZS5hbGwoKTtcblxuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5SWQgPSBlbnRpdHkucHJvcGVydGllcy5pZDtcblxuICAgICAgY29uc3Qgb2xHZW9tZXRyeUlkID0gb2xHZW9tZXRyeS5vbF91aWQ7XG5cbiAgICAgIGlmIChlbnRpdHlJZCA9PT0gb2xHZW9tZXRyeUlkKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgZW50aXR5LnByb3BlcnRpZXMuZHJhdyk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShcbiAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zcGxpdCgnICcpWzBdLnJlcGxhY2UoJ3B4JywgJycpLFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUuaW5kZXhPZignICcpICsgMVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXG4gICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuZmlsbCxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuc3Ryb2tlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KFxuICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WCxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRZXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVwbGFjZUZlYXR1cmVJblN0b3JlKGVudGl0eSwgb2xHZW9tZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2VsZWN0RHJhdyhvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PiwgbGFiZWw6IHN0cmluZykge1xuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5hY3RpdmVTdG9yZS5hbGwoKTtcblxuICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XG4gICAgb2xHZW9tZXRyeS5vbF91aWQgPSBvbEZlYXR1cmUuZ2V0KCdpZCcpO1xuXG4gICAgY29uc3Qgb2xHZW9tZXRyeUNvb3JkaW5hdGVzID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICBvbEdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClbMF1cbiAgICApO1xuXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHlDb29yZGluYXRlcyA9IEpTT04uc3RyaW5naWZ5KGVudGl0eS5nZW9tZXRyeS5jb29yZGluYXRlc1swXSk7XG4gICAgICBpZiAob2xHZW9tZXRyeUNvb3JkaW5hdGVzID09PSBlbnRpdHlDb29yZGluYXRlcykge1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnNwbGl0KCcgJylbMF1cbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJyk7XG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnN1YnN0cmluZyhvbEZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKS5pbmRleE9mKCcgJykgKyAxKTtcblxuICAgICAgICBjb25zdCBmaWxsQ29sb3IgPSBvbEZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsO1xuICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IG9sRmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLnN0cm9rZTtcblxuICAgICAgICBjb25zdCBvZmZzZXRYID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WCcpO1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WScpO1xuXG4gICAgICAgIGNvbnN0IHJhZDogbnVtYmVyID0gZW50aXR5LnByb3BlcnRpZXMucmFkXG4gICAgICAgICAgPyBlbnRpdHkucHJvcGVydGllcy5yYWRcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsYWJlbCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEdlb21ldHJ5LCBmb250U2l6ZSwgZm9udFN0eWxlKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3Iob2xHZW9tZXRyeSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KG9sR2VvbWV0cnksIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICB0aGlzLnJlcGxhY2VGZWF0dXJlSW5TdG9yZShlbnRpdHksIG9sR2VvbWV0cnksIHJhZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZmVhdHVyZSB3aXRoIGRyYXcgbGFiZWwgdG8gdGhlIHN0b3JlLiBUaGUgbG9hZGluZyBzdHJhZ2VneSBvZiB0aGUgc3RvcmVcbiAgICogd2lsbCB0cmlnZ2VyIGFuZCBhZGQgdGhlIGZlYXR1cmUgdG8gdGhlIG1hcC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGFkZEZlYXR1cmVUb1N0b3JlKFxuICAgIG9sR2VvbWV0cnksXG4gICAgcmFkaXVzPzogbnVtYmVyLFxuICAgIGZlYXR1cmU/OiBGZWF0dXJlV2l0aERyYXdcbiAgKSB7XG4gICAgbGV0IHJhZDogbnVtYmVyO1xuICAgIGxldCBjZW50ZXI0MzI2OiBBcnJheTxudW1iZXI+O1xuICAgIGxldCBwb2ludDQzMjY6IEFycmF5PG51bWJlcj47XG4gICAgbGV0IGxvbjQzMjY6IG51bWJlcjtcbiAgICBsZXQgbGF0NDMyNjogbnVtYmVyO1xuICAgIGNvbnN0IGZlYXR1cmVJZCA9IGZlYXR1cmUgPyBmZWF0dXJlLnByb3BlcnRpZXMuaWQgOiBvbEdlb21ldHJ5Lm9sX3VpZDtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcblxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3Qob2xHZW9tZXRyeSwge1xuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb24sXG4gICAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvblxuICAgIH0pIGFzIGFueTtcblxuICAgIGlmIChvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xDaXJjbGUgfHwgcmFkaXVzKSB7XG4gICAgICBpZiAocmFkaXVzKSB7XG4gICAgICAgIHJhZCA9IHJhZGl1cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdlb21ldHJ5LnR5cGUgPSAnUG9pbnQnO1xuICAgICAgICBnZW9tZXRyeS5jb29yZGluYXRlcyA9IG9sR2VvbWV0cnkuZ2V0Q2VudGVyKCk7XG4gICAgICAgIGNvbnN0IGV4dGVudDQzMjYgPSB0cmFuc2Zvcm0oXG4gICAgICAgICAgW1xuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsyXSxcbiAgICAgICAgICAgIG9sR2VvbWV0cnkuZ2V0RmxhdENvb3JkaW5hdGVzKClbM11cbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICAgKTtcbiAgICAgICAgY2VudGVyNDMyNiA9IHRyYW5zZm9ybShcbiAgICAgICAgICBbXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzBdLFxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsxXVxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgICApO1xuICAgICAgICBsb240MzI2ID0gY2VudGVyNDMyNlswXTtcbiAgICAgICAgbGF0NDMyNiA9IGNlbnRlcjQzMjZbMV07XG4gICAgICAgIHJhZCA9IGdldERpc3RhbmNlKGNlbnRlcjQzMjYsIGV4dGVudDQzMjYpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xQb2ludCkge1xuICAgICAgcG9pbnQ0MzI2ID0gdHJhbnNmb3JtKFxuICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpLFxuICAgICAgICBwcm9qZWN0aW9uLFxuICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgKTtcbiAgICAgIGxvbjQzMjYgPSBwb2ludDQzMjZbMF07XG4gICAgICBsYXQ0MzI2ID0gcG9pbnQ0MzI2WzFdO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlU3RvcmUudXBkYXRlKHtcbiAgICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgICBnZW9tZXRyeSxcbiAgICAgIHByb2plY3Rpb246IHByb2plY3Rpb24uZ2V0Q29kZSgpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogZmVhdHVyZUlkLFxuICAgICAgICBkcmF3OiBvbEdlb21ldHJ5LmdldCgnX2xhYmVsJyksXG4gICAgICAgIGxvbmdpdHVkZTogbG9uNDMyNiA/IGxvbjQzMjYgOiBudWxsLFxuICAgICAgICBsYXRpdHVkZTogbGF0NDMyNiA/IGxhdDQzMjYgOiBudWxsLFxuICAgICAgICByYWQ6IHJhZCA/IHJhZCA6IG51bGwsXG4gICAgICAgIGZvbnRTdHlsZTogb2xHZW9tZXRyeS5nZXQoJ2ZvbnRTdHlsZV8nKSxcbiAgICAgICAgZHJhd2luZ1N0eWxlOiB7XG4gICAgICAgICAgZmlsbDogb2xHZW9tZXRyeS5nZXQoJ2ZpbGxDb2xvcl8nKSxcbiAgICAgICAgICBzdHJva2U6IG9sR2VvbWV0cnkuZ2V0KCdzdHJva2VDb2xvcl8nKVxuICAgICAgICB9LFxuICAgICAgICBvZmZzZXRYOiBvbEdlb21ldHJ5LmdldCgnb2Zmc2V0WF8nKSxcbiAgICAgICAgb2Zmc2V0WTogb2xHZW9tZXRyeS5nZXQoJ29mZnNldFlfJylcbiAgICAgIH0sXG4gICAgICBtZXRhOiB7XG4gICAgICAgIGlkOiBmZWF0dXJlSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGb3JtKCkge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZmlsbDogWycnXSxcbiAgICAgIHN0cm9rZTogWycnXVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldHVwTGF5ZXIoaXNOZXdMYXllcj86IGJvb2xlYW4pIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRHJhd0xheWVyUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChsYWJlbDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUZsYWcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7c2VsZWN0ZWQ6IGZhbHNlfSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdG9yZSA9IG5ldyBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PihbXSwgeyBtYXA6IHRoaXMubWFwIH0pO1xuICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlID0gbmV3IE9sVmVjdG9yU291cmNlKCk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICAgICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgICAgICAgICB0aGlzLmluaXRTdG9yZShsYWJlbCwgaXNOZXdMYXllcik7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbCA9IHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woXG4gICAgICAgICAgICB0aGlzLmZpbGxDb2xvcixcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgICB0aGlzLnN0cm9rZVdpZHRoXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnNldEdlb21ldHJ5VHlwZSh0aGlzLmN1cnJHZW9tZXRyeVR5cGUpO1xuICAgICAgICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgICAgICAgICB0aGlzLnN0b3Jlcy5wdXNoKHRoaXMuYWN0aXZlU3RvcmUpO1xuICAgICAgICAgIHRoaXMuZHJhd0NvbnRyb2xzLnB1c2goW3RoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkLCB0aGlzLmFjdGl2ZURyYXdDb250cm9sXSk7XG4gICAgICAgICAgdGhpcy5kcmF3Q29udHJvbHNFdmVudC5lbWl0KHRoaXMuZHJhd0NvbnRyb2xzKTtcbiAgICAgICAgICB0aGlzLmxheWVyc0lERXZlbnQuZW1pdCh0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZCk7XG4gICAgICAgICAgdGhpcy5pc0NyZWF0aW5nTmV3TGF5ZXIgPSBmYWxzZTtcbiAgICAgICAgICBpZiAoIXRoaXMubGFiZWxzQXJlU2hvd24pe1xuICAgICAgICAgICAgdGhpcy5vblRvZ2dsZUxhYmVscygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFjdGl2ZUxheWVyQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXI7XG4gICAgICAgICAgdGhpcy5zZWxlY3Quc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLy8gSFRNTCB1c2VyIGludGVyYWN0aW9uc1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIHRoZSBzZWxlY3RlZCBkcmF3aW5nXG4gICAqL1xuICBlZGl0TGFiZWxEcmF3aW5nKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCkge1xuICAgICAgY29uc3Qgb2xHZW9tZXRyeSA9IGZlYXR1cmVUb09sKFxuICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLFxuICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgKTtcbiAgICAgIHRoaXMub3BlbkRyYXdEaWFsb2cob2xHZW9tZXRyeSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5TaG9yY3V0c0RpYWxvZygpIHtcbiAgICB0aGlzLmRpYWxvZy5vcGVuKERyYXdTaG9yY3V0c0NvbXBvbmVudCk7XG4gIH1cblxuICBkZWxldGVEcmF3aW5ncygpIHtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmRlbGV0ZU1hbnkodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5mb3JFYWNoKChzZWxlY3RlZEZlYXR1cmUpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlXG4gICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgIC5mb3JFYWNoKChkcmF3aW5nTGF5ZXJGZWF0dXJlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBkcmF3aW5nTGF5ZXJGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xuICAgICAgICAgIGlmIChzZWxlY3RlZEZlYXR1cmUucHJvcGVydGllcy5pZCA9PT0gZ2VvbWV0cnkub2xfdWlkKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZS5yZW1vdmVGZWF0dXJlKGRyYXdpbmdMYXllckZlYXR1cmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVIZWlnaHRUYWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHRvZ2dsZXMgdGhlIGxhYmVscyB0b2dnbGVcbiAgICovXG4gIG9uVG9nZ2xlTGFiZWxzKCkge1xuICAgIHRoaXMuZHJhd1N0eWxlU2VydmljZS50b2dnbGVMYWJlbHNBcmVTaG93bigpO1xuICAgIHRoaXMubGFiZWxzQXJlU2hvd24gPSAhdGhpcy5sYWJlbHNBcmVTaG93bjtcbiAgICB0aGlzLmljb25cbiAgICAgID8gdGhpcy5lbGVtZW50U3R5bGUoXG4gICAgICAgICAgdGhpcy5sYWJlbHNBcmVTaG93bixcbiAgICAgICAgICB0cnVlXG4gICAgICAgIClcbiAgICAgIDogdGhpcy5lbGVtZW50U3R5bGUoXG4gICAgICAgICAgdGhpcy5sYWJlbHNBcmVTaG93bixcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgIHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciB0b2dnbGVzIHRoZSBEcmF3IGNvbnRyb2wgaXMgdG9nZ2xlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uVG9nZ2xlRHJhd0NvbnRyb2wodG9nZ2xlSXNDaGVja2VkOiBib29sZWFuKSB7XG4gICAgdG9nZ2xlSXNDaGVja2VkID8gdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpIDogdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIC8vIFVzZXIgY2hhbmdlcyBwcm9wZXJ0aWVzIG9mIGEgZHJhd2luZyBlbGVtZW50XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIGN1cnJlbnQgbGF5ZXIgd2l0aCB0aGUgY3VycmVudCBzdG9yZSBhbmQgdGhlIGN1cnJlbnQgbGF5ZXJTb3VyY2VcbiAgICovXG5cbiAgcHVibGljIG9uTGF5ZXJDaGFuZ2UoY3VyckxheWVyPzogVmVjdG9yTGF5ZXIpIHtcbiAgICBpZiAoY3VyckxheWVyKSB7XG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7c2VsZWN0ZWQ6IGZhbHNlfSk7XG4gICAgICB0aGlzLmlzQ3JlYXRpbmdOZXdMYXllciA9IGZhbHNlO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllciA9IGN1cnJMYXllcjtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLm9wYWNpdHkgPSAxO1xuICAgICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgICAgIGlmICghdGhpcy5sYWJlbHNBcmVTaG93bil7XG4gICAgICAgIHRoaXMub25Ub2dnbGVMYWJlbHMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUgPSB0aGlzLnN0b3Jlcy5maW5kKHN0b3JlID0+IHN0b3JlLmxheWVyLmlkID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZCk7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdGhpcy5kcmF3Q29udHJvbHMuZmluZChkYyA9PiBkY1swXSA9PT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWQpWzFdO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UgPSB0aGlzLmFjdGl2ZURyYXdDb250cm9sLm9sRHJhd2luZ0xheWVyU291cmNlO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUodGhpcy5jdXJyR2VvbWV0cnlUeXBlKTtcbiAgICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXR1cExheWVyKHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZUxheWVyQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUxheWVyKG5ld1RpdGxlPywgaXNOZXdMYXllcj8pIHtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMuYWxsTGF5ZXJzKXtcbiAgICAgIGxldCBudW1iZXJJZCA9IE51bWJlcihsYXllci5pZC5yZXBsYWNlKCdpZ28tZHJhdy1sYXllcicsJycpKTtcbiAgICAgIHRoaXMubGF5ZXJDb3VudGVySUQgPSBNYXRoLm1heChudW1iZXJJZCx0aGlzLmxheWVyQ291bnRlcklEKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgaXNJZ29JbnRlcm5hbExheWVyOiB0cnVlLFxuICAgICAgaWQ6ICdpZ28tZHJhdy1sYXllcicgKyArK3RoaXMubGF5ZXJDb3VudGVySUQsXG4gICAgICB0aXRsZTogaXNOZXdMYXllclxuICAgICAgICA/IG5ld1RpdGxlXG4gICAgICAgIDogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZHJhdy5kcmF3aW5nJyksXG4gICAgICB6SW5kZXg6IDIwMCxcbiAgICAgIHNvdXJjZTogbmV3IEZlYXR1cmVEYXRhU291cmNlKCksXG4gICAgICBzdHlsZTogKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd1N0eWxlU2VydmljZS5jcmVhdGVJbmRpdmlkdWFsRWxlbWVudFN0eWxlKFxuICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgcmVzb2x1dGlvbixcbiAgICAgICAgICB0aGlzLmxhYmVsc0FyZVNob3duLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuZmlsbCxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRYJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFknKSxcbiAgICAgICAgICB0aGlzLmljb25cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzaG93SW5MYXllckxpc3Q6IHRydWUsXG4gICAgICBleHBvcnRhYmxlOiB0cnVlLFxuICAgICAgYnJvd3NhYmxlOiBmYWxzZSxcbiAgICAgIHdvcmtzcGFjZToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5QmluZFN0b3JlTGF5ZXIodGhpcy5hY3RpdmVTdG9yZSwgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuXG4gICAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5KFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZSxcbiAgICAgIG5ldyBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3koe1xuICAgICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdHJ5QWRkU2VsZWN0aW9uU3RyYXRlZ3koXG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLFxuICAgICAgbmV3IEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5KHtcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmUsXG4gICAgICAgIG1hbnk6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUuc291cmNlLm9sLm9uKFxuICAgICAgJ3JlbW92ZWZlYXR1cmUnLFxuICAgICAgKGV2ZW50OiBPbFZlY3RvclNvdXJjZUV2ZW50PE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBldmVudC5mZWF0dXJlLmdldEdlb21ldHJ5KCk7XG4gICAgICAgIHRoaXMuY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjb2xvciBpbiBhIGNvbG9yIHBpY2tlclxuICAgKiBAcGFyYW0gbGFiZWxzQXJlU2hvd24gd2hldGVyIHRoZSBsYWJlbHMgYXJlIHNob3duIG9yIG5vdFxuICAgKiBAcGFyYW0gaXNBbkljb24gd2hldGVyIHRoZSBmZWF0dXJlIGlzIGFuIGljb24gb3Igbm90XG4gICAqIEBwYXJhbSBmaWxsQ29sb3Igd2hpY2ggaXMgdGhlIGZpbGxpbmcgY29sb3JcbiAgICogQHBhcmFtIHN0cm9rZUNvbG9yIHdoaWNoIGlzIHRoZSBzdHJva2UgY29sb3JcbiAgICovXG4gIG9uQ29sb3JDaGFuZ2UoXG4gICAgbGFiZWxzQXJlU2hvd246IGJvb2xlYW4sXG4gICAgaXNBbkljb246IGJvb2xlYW4sXG4gICAgZmlsbENvbG9yOiBzdHJpbmcsXG4gICAgc3Ryb2tlQ29sb3I6IHN0cmluZ1xuICApIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwICYmICFpc0FuSWNvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XG4gICAgICAgIGxldCBvbEZlYXR1cmUgPSBmZWF0dXJlVG9PbChcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsbEFuZFN0cm9rZUNvbG9yKG9sRmVhdHVyZSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XG5cbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5hY3RpdmVTdG9yZVxuICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLmZpbGwgPSBvbEZlYXR1cmUuZ2V0KCdmaWxsQ29sb3JfJyk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5zdHJva2UgPSBvbEZlYXR1cmUuZ2V0KCdzdHJva2VDb2xvcl8nKTtcbiAgICAgICAgdGhpcy5hY3RpdmVTdG9yZS51cGRhdGUoZW50aXR5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duLCBpc0FuSWNvbik7XG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGZvbnQgc2l6ZSBvci9hbmQgc3R5bGVcbiAgICogQHBhcmFtIGxhYmVsc0FyZVNob3duIHdoZXRlciB0aGUgbGFiZWxzIGFyZSBzaG93biBvciBub3RcbiAgICogQHBhcmFtIHNpemUgdGhlIHNpemUgb2YgdGhlIGZvbnRcbiAgICogQHBhcmFtIHN0eWxlIHRoZSBzdHlsZSBvZiB0aGUgZm9udFxuICAgKi9cblxuICBvbkZvbnRDaGFuZ2UobGFiZWxzQXJlU2hvd246IGJvb2xlYW4sIHNpemU6IHN0cmluZywgc3R5bGU6IEZvbnRUeXBlKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XG4gICAgICAgIGxldCBvbEZlYXR1cmUgPSBmZWF0dXJlVG9PbChcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEZlYXR1cmUsIHNpemUsIHN0eWxlKTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5hY3RpdmVTdG9yZVxuICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMuZm9udFN0eWxlID0gb2xGZWF0dXJlLmdldCgnZm9udFN0eWxlXycpO1xuICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnVwZGF0ZShlbnRpdHkpO1xuICAgICAgICBvbEZlYXR1cmUgPSB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sLmdldFNvdXJjZSgpLmdldEZlYXR1cmVzKCkuZmluZChmID0+IGYuZ2V0SWQoKSA9PT0gZW50aXR5Lm1ldGEuaWQpO1xuICAgICAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyh7IGZvbnRTdHlsZTogZW50aXR5LnByb3BlcnRpZXMuZm9udFN0eWxlIH0pO1xuICAgICAgICBvbEZlYXR1cmUuY2hhbmdlZCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZm9udFNpemUgPSBzaXplO1xuICAgICAgdGhpcy5mb250U3R5bGUgPSBzdHlsZTtcblxuICAgICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEZvbnRTaXplKHNpemUpO1xuICAgICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEZvbnRTdHlsZShzdHlsZSk7XG5cbiAgICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgdmFsdWUgb2YgdGhlIGhvcml6b250YWwvdmVydGljYWwgb2Zmc2V0XG4gICAqIEBwYXJhbSBsYWJlbHNBcmVTaG93biB3aGV0ZXIgdGhlIGxhYmVscyBhcmUgc2hvd24gb3Igbm90XG4gICAqIEBwYXJhbSBvZmZzZXRYIGhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSBsYWJlbFxuICAgKiBAcGFyYW0gb2Zmc2V0WSB2ZXJ0aWNhbCBvZmZzZXQgb2YgdGhlIGxhYmVsXG4gICAqL1xuXG4gIG9uT2Zmc2V0TGFiZWxDaGFuZ2UoXG4gICAgbGFiZWxzQXJlU2hvd246IGJvb2xlYW4sXG4gICAgb2Zmc2V0WDogbnVtYmVyLFxuICAgIG9mZnNldFk6IG51bWJlclxuICApIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goKGZlYXR1cmUpID0+IHtcbiAgICAgICAgbGV0IG9sRmVhdHVyZSA9IGZlYXR1cmVUb09sKFxuICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQob2xGZWF0dXJlLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5hY3RpdmVTdG9yZVxuICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WCA9IG9sRmVhdHVyZS5nZXQoJ29mZnNldFhfJyk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFkgPSBvbEZlYXR1cmUuZ2V0KCdvZmZzZXRZXycpO1xuICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnVwZGF0ZShlbnRpdHkpO1xuICAgICAgICBvbEZlYXR1cmUgPSB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sLmdldFNvdXJjZSgpLmdldEZlYXR1cmVzKCkuZmluZChmID0+IGYuZ2V0SWQoKSA9PT0gZW50aXR5Lm1ldGEuaWQpO1xuICAgICAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyh7IG9mZnNldFg6IGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFgsIG9mZnNldFk6IGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFkgfSk7XG4gICAgICAgIG9sRmVhdHVyZS5jaGFuZ2VkKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duKTtcbiAgICB9XG4gIH1cblxuICBvbkljb25DaGFuZ2UoZXZlbnQ/KSB7XG4gICAgdGhpcy5pY29uID0gZXZlbnQ7XG4gICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEljb24odGhpcy5pY29uKTtcbiAgICB0aGlzLmVsZW1lbnRTdHlsZSh0cnVlLCB0aGlzLmljb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgZ2VvbWV0cnkgdHlwZVxuICAgKiBAcGFyYW0gZ2VvbWV0cnlUeXBlIHRoZSBnZW9tZXRyeSB0eXBlIHNlbGVjdGVkIGJ5IHRoZSB1c2VyXG4gICAqL1xuICBvbkdlb21ldHJ5VHlwZUNoYW5nZShnZW9tZXRyeVR5cGU6IFR5cGUpIHtcbiAgICB0aGlzLmN1cnJHZW9tZXRyeVR5cGUgPSBnZW9tZXRyeVR5cGU7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUoZ2VvbWV0cnlUeXBlKTtcbiAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvLyBVcGRhdGVzIHRoZSBwcm9wZXJ0aWVzIG9mIG9sRmVhdHVyZSBpbnB1dHRlZFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxhYmVsIG9mIGEgZ2VvbWV0cnkgd2hlbiBhIGxhYmVsIGlzIGVudGVyZWQgaW4gYSBkaWFsb2cgYm94XG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IHRoZSBnZW9tZXRyeVxuICAgKiBAcGFyYW0gbGFiZWwgdGhlIGxhYmVsXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnk6IE9sR2VvbWV0cnksIGxhYmVsOiBzdHJpbmcpIHtcbiAgICBvbEdlb21ldHJ5LnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIF9sYWJlbDogbGFiZWxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9udFNpemVBbmRTdHlsZShcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBmb250U2l6ZTogc3RyaW5nLFxuICAgIGZvbnRTdHlsZTogc3RyaW5nXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBmb250U3R5bGVfOiBgJHtmb250U2l6ZX1weCAke2ZvbnRTdHlsZX1gXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBmaWxsQ29sb3I6IHN0cmluZyxcbiAgICBzdHJva2VDb2xvcjogc3RyaW5nXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBmaWxsQ29sb3JfOiBmaWxsQ29sb3IsXG4gICAgICAgIHN0cm9rZUNvbG9yXzogc3Ryb2tlQ29sb3JcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT2Zmc2V0KFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIG9mZnNldFg6IG51bWJlcixcbiAgICBvZmZzZXRZOiBudW1iZXJcbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIG9mZnNldFhfOiBvZmZzZXRYLFxuICAgICAgICBvZmZzZXRZXzogb2Zmc2V0WVxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgLy8gVXBkYXRlcyB2YWx1ZXMgb2YgdGhlIHNlbGVjdGVkIGVsZW1lbnQgb24gdGhlIEhUTUwgdmlld1xuXG4gIGdldEZlYXR1cmVGb250U2l6ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLmZvbnRTdHlsZVxuICAgICAgICAgIC5zcGxpdCgnICcpWzBdXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXG4gICAgICA6ICcyMCc7XG4gIH1cblxuICBnZXRGZWF0dXJlRm9udFN0eWxlKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zdWJzdHJpbmcoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5pbmRleE9mKCcgJykgKyAxXG4gICAgICAgIClcbiAgICAgIDogRm9udFR5cGUuQXJpYWw7XG4gIH1cblxuICBnZXRGZWF0dXJlRmlsbENvbG9yKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5maWxsXG4gICAgICA6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuNCknO1xuICB9XG5cbiAgZ2V0RmVhdHVyZVN0cm9rZUNvbG9yKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5zdHJva2VcbiAgICAgIDogJ3JnYmEoMTQzLDcsNywxKSc7XG4gIH1cblxuICBnZXRGZWF0dXJlT2Zmc2V0WCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWVbMF0ucHJvcGVydGllcy5vZmZzZXRYXG4gICAgICA6IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRPZmZzZXRYKCk7XG4gIH1cblxuICBnZXRGZWF0dXJlT2Zmc2V0WSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWVbMF0ucHJvcGVydGllcy5vZmZzZXRZXG4gICAgICA6ICcwJztcbiAgfVxuXG4gIGdldCBhbGxGb250U3R5bGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhGb250VHlwZSk7XG4gIH1cblxuICBnZXQgYWxsTGF5ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLm1hcC5sYXllcnMuZmlsdGVyKChsYXllcikgPT5cbiAgICAgIGxheWVyLmlkLmluY2x1ZGVzKCdpZ28tZHJhdy1sYXllcicpXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUhlaWdodFRhYmxlKCkge1xuICAgIC8vIENoZWNrIHRoZSBhbW91bnQgb2Ygcm93cyBhcyBhIHBvc3NpYmxlIGFsdGVybmF0aXZlXG5cbiAgICB0aGlzLm51bWJlck9mRHJhd2luZ3MgPSB0aGlzLmFjdGl2ZVN0b3JlLmNvdW50JC5nZXRWYWx1ZSgpO1xuICAgIHRoaXMubnVtYmVyT2ZEcmF3aW5ncyA+IDEwXG4gICAgICA/ICh0aGlzLnRhYmxlVGVtcGxhdGUudGFibGVIZWlnaHQgPSAnMzV2aCcpXG4gICAgICA6ICh0aGlzLnRhYmxlVGVtcGxhdGUudGFibGVIZWlnaHQgPSAnYXV0bycpO1xuICB9XG5cbiAgdXBkYXRlQWN0aXZlTGF5ZXIoKSB7XG4gICAgbGV0IGN1cnJMYXllciA9IHRoaXMuYWxsTGF5ZXJzLmZpbmQobGF5ZXIgPT4gbGF5ZXIudGl0bGUgPT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLnRpdGxlKTtcbiAgICByZXR1cm4gY3VyckxheWVyID8gY3VyckxheWVyIDogdGhpcy5hbGxMYXllcnNbMF07XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kc1xuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSB0aGUgY29ycmVjdCBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIHRvZ2dsZURyYXdDb250cm9sKCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgdGhpcy5hY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHRvb2x0aXBzIG9mIGFuIE9MIGdlb21ldHJ5XG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IE9MIGdlb21ldHJ5IHdpdGggdG9vbHRpcHNcbiAgICovXG4gIHByaXZhdGUgY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSkge1xuICAgIGdldFRvb2x0aXBzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpLmZvckVhY2goXG4gICAgICAob2xUb29sdGlwOiBPbE92ZXJsYXkgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKG9sVG9vbHRpcCAmJiBvbFRvb2x0aXAuZ2V0TWFwKCkpIHtcbiAgICAgICAgICB0aGlzLm1hcC5vbC5yZW1vdmVPdmVybGF5KG9sVG9vbHRpcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBmZWF0dXJlIGluIHRoZSBzdG9yZVxuICAgKiBAcGFyYW0gZW50aXR5IHRoZSBlbnRpdHkgdG8gcmVwbGFjZVxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSB0aGUgbmV3IGdlb21ldHJ5IHRvIGluc2VydCBpbiB0aGUgc3RvcmVcbiAgICovXG4gIHByaXZhdGUgcmVwbGFjZUZlYXR1cmVJblN0b3JlKFxuICAgIGVudGl0eSxcbiAgICBvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LFxuICAgIHJhZGl1cz86IG51bWJlclxuICApIHtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmRlbGV0ZShlbnRpdHkpO1xuICAgIHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnksIHJhZGl1cyk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZSB0aGUgYWN0aXZlIGRyYXcgY29udHJvbFxuICAgKi9cbiAgcHJpdmF0ZSBkZWFjdGl2YXRlRHJhd0NvbnRyb2woKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZURyYXdDb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd0VuZCQkKSB7XG4gICAgICB0aGlzLmRyYXdFbmQkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xNYXAodW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYXdDb250cm9sSXNBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBhIGdpdmVuIGNvbnRyb2xcbiAgICovXG4gIHByaXZhdGUgYWN0aXZhdGVEcmF3Q29udHJvbCgpIHtcbiAgICB0aGlzLmRyYXdDb250cm9sSXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5kcmF3RW5kJCQgPSB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmVuZCQuc3Vic2NyaWJlKFxuICAgICAgKG9sR2VvbWV0cnk6IE9sR2VvbWV0cnkpID0+IHtcbiAgICAgICAgdGhpcy5vcGVuRHJhd0RpYWxvZyhvbEdlb21ldHJ5LCB0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5tb2RpZnkkLnN1YnNjcmliZSgob2xHZW9tZXRyeTogT2xHZW9tZXRyeSkgPT4ge1xuICAgICAgdGhpcy5vbk1vZGlmeURyYXcob2xHZW9tZXRyeSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuZHJhd1NlbGVjdCQkKSB7XG4gICAgICB0aGlzLmRyYXdTZWxlY3QkJCA9IHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2VsZWN0JC5zdWJzY3JpYmUoXG4gICAgICAgIChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgICAgICAgIHRoaXMub3BlbkRyYXdEaWFsb2cob2xGZWF0dXJlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRPbE1hcCh0aGlzLm1hcC5vbCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBzdHlsZSBvZiB0aGUgZmVhdHVyZSBzdG9yZWRcbiAgICovXG4gIHByaXZhdGUgZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duOiBib29sZWFuLCBpc0FuSWNvbj8pIHtcbiAgICBpZiAoaXNBbkljb24pIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUubGF5ZXIub2wuc2V0U3R5bGUoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd1N0eWxlU2VydmljZS5jcmVhdGVJbmRpdmlkdWFsRWxlbWVudFN0eWxlKFxuICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgcmVzb2x1dGlvbixcbiAgICAgICAgICBsYWJlbHNBcmVTaG93bixcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZm9udFN0eWxlJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLmZpbGwsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLnN0cm9rZSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WCcpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRZJyksXG4gICAgICAgICAgdGhpcy5pY29uXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5sYXllci5vbC5zZXRTdHlsZSgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmNyZWF0ZUluZGl2aWR1YWxFbGVtZW50U3R5bGUoXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgIGxhYmVsc0FyZVNob3duLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuZmlsbCxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRYJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFknKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2IGNsYXNzPVwiZ2VvbWV0cnktdHlwZS10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIj5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcbiAgICAgIChjaGFuZ2UpPVwib25HZW9tZXRyeVR5cGVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuUG9pbnRcIj5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiZ2VvbWV0cnlUeXBlLlBvaW50XCI+XG4gICAgICAgIHt7J2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLlBvaW50IHwgdHJhbnNsYXRlfX1cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiZ2VvbWV0cnlUeXBlLkxpbmVTdHJpbmdcIj5cbiAgICAgICAge3snaWdvLmdlby5kcmF3LicgKyBnZW9tZXRyeVR5cGUuTGluZVN0cmluZyB8IHRyYW5zbGF0ZX19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2x5Z29uXCI+XG4gICAgICAgIHt7J2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLlBvbHlnb24gfCB0cmFuc2xhdGV9fVxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cblxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuQ2lyY2xlXCI+XG4gICAgICAgIHt7J2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLkNpcmNsZSB8IHRyYW5zbGF0ZX19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkcmF3LW9wdGlvbnMgbWF0LXR5cG9ncmFwaHlcIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgW2Rpc2FibGVkXT1cImRyYXdDb250cm9sSXNEaXNhYmxlZFwiXG4gICAgICBbY2hlY2tlZF09XCJkcmF3Q29udHJvbElzQWN0aXZlXCJcbiAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcbiAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVEcmF3Q29udHJvbCgkZXZlbnQuY2hlY2tlZClcIj5cbiAgICAgIHt7J2lnby5nZW8uc3BhdGlhbEZpbHRlci5kcmF3Q29udHJvbCcgfCB0cmFuc2xhdGV9fVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICBbY2hlY2tlZF09XCJsYWJlbHNBcmVTaG93blwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlTGFiZWxzKClcIlxuICAgID5cbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcudG9nZ2xlTWFwVG9vbHRpcHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cblxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cblxuICA8ZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibGF5ZXItc2VsZWN0XCI+XG4gICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8uZHJhdy5sYXllci50aXRsZScgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgI3NlbGVjdGVkTGF5ZXIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkxheWVyQ2hhbmdlKHNlbGVjdGVkTGF5ZXIudmFsdWUpXCIgW3ZhbHVlXT1cInVwZGF0ZUFjdGl2ZUxheWVyKClcIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGxheWVyIG9mIGFsbExheWVyc1wiIFt2YWx1ZV09XCJsYXllclwiPlxuICAgICAgICAgIHt7IGxheWVyLnRpdGxlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPG1hdC1vcHRpb24gaWQ9XCJjcmVhdGVOZXdMYXllclwiID5cbiAgICAgICAgICB7eydpZ28uZ2VvLmRyYXcubGF5ZXIuY3JlYXRlTmV3TGF5ZXInIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJhY3RpdmVEcmF3aW5nTGF5ZXJcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbY29sb3JdPVwiYWN0aXZlRHJhd2luZ0xheWVyLnZpc2libGUgPyAncHJpbWFyeScgOiAnZGVmYXVsdCdcIlxuICAgICAgY29sbGFwc2libGVCdXR0b25cbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cImFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID9cbiAgICAgICAgICAgICAgICAgICAgKCdpZ28uZ2VvLmxheWVyLmhpZGVMYXllcicgfCB0cmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgKCdpZ28uZ2VvLmxheWVyLnNob3dMYXllcicgfCB0cmFuc2xhdGUpXCJcbiAgICAgIChjbGljayk9XCJhY3RpdmVEcmF3aW5nTGF5ZXIudmlzaWJsZSA9ICFhY3RpdmVEcmF3aW5nTGF5ZXIudmlzaWJsZVwiPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIFtzdmdJY29uXT1cImFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID8gJ2V5ZScgOiAnZXllLW9mZidcIj5cbiAgICAgIDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGRpdj5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cImFjdGl2ZVN0b3JlLmNvdW50JC5nZXRWYWx1ZSgpID4gMFwiXG4gICAgICBjbGFzcz1cImRlbGV0ZUJ0blwiXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5kcmF3LmRlbGV0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Rpc2FibGVkXT1cIihzZWxlY3RlZEZlYXR1cmVzJCB8IGFzeW5jKS5sZW5ndGggPT09IDBcIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZURyYXdpbmdzKClcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZGVsZXRlXCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXY+XG4gICAgICA8aWdvLWVudGl0eS10YWJsZVxuICAgICAgICAjdGFibGVcbiAgICAgICAgY2xhc3M9XCJ0YWJsZS1jb21wYWN0XCJcbiAgICAgICAgW3N0b3JlXT1cImFjdGl2ZVN0b3JlXCJcbiAgICAgICAgW3RlbXBsYXRlXT1cInRhYmxlVGVtcGxhdGVcIlxuICAgICAgICAoZGJsY2xpY2spPVwiZWRpdExhYmVsRHJhd2luZygpXCI+XG4gICAgICA8L2lnby1lbnRpdHktdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJpY29uLW9wdGlvbnNcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJpY29ucy5sZW5ndGggPj0gMVwiPlxuICAgICAgPG1hdC1sYWJlbD57eyAnaWdvLmdlby5kcmF3Lmljb24nIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdD5cbiAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaWNvblwiIGNsYXNzPVwiYm94XCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cInt7IGljb24gfX1cIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiXCIgKGNsaWNrKT1cIm9uSWNvbkNoYW5nZSgpXCI+e3sgJ2lnby5nZW8uZHJhdy5ub0ljb24nIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpY29uX2h0bWwgb2YgaWNvbnNcIlxuICAgICAgICAgIFt2YWx1ZV09XCJpY29uX2h0bWxcIlxuICAgICAgICAgIChjbGljayk9XCJvbkljb25DaGFuZ2UoaWNvbl9odG1sKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3hcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwie3sgaWNvbl9odG1sIH19XCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8YnV0dG9uXG4gICAgbWF0LWljb24tYnV0dG9uXG4gICAgY29sb3I9XCJhY2NlbnRcIlxuICAgIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCJcbiAgICAoY2xpY2spPVwib3BlblNob3JjdXRzRGlhbG9nKClcIlxuICA+XG4gICAgPG1hdC1pY29uXG4gICAgICBjbGFzcz1cInNob3J0Y3V0cy1pY29uXCJcbiAgICAgIHN2Z0ljb249XCJrZXlib2FyZC1vdXRsaW5lXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmRyYXcuc2hvcnRjdXRzJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgIDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICAqbmdJZj1cInNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aFwiXG4gICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgIChjbGljayk9XCJvcGVuU3R5bGVNb2RhbERpYWxvZygpXCJcbiAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5zdHlsZS5zdHlsZU1vZGFsVG9vbHRpcCcgfCB0cmFuc2xhdGVcIj5cbiAgICB7eydpZ28uZ2VvLmxheWVyLnN0eWxlLnN0eWxlTW9kYWwnIHwgdHJhbnNsYXRlfX1cbiAgICA8bWF0LWljb25cbiAgICAgIGNsYXNzPVwic3R5bGUtaWNvblwiXG4gICAgICBzdmdJY29uPVwicGFsZXR0ZVwiXG4gICAgICBbbWF0QmFkZ2VdPVwic2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoXCJcbiAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiPlxuICAgIDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|