@igo2/geo 16.3.0 → 17.0.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +30 -14
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +35 -17
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +18 -11
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +8 -62
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +46 -19
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +22 -10
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +28 -14
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +8 -71
- package/esm2022/lib/catalog/catalog-library/index.mjs +9 -0
- package/esm2022/lib/catalog/catalog.module.mjs +9 -37
- package/esm2022/lib/catalog/index.mjs +7 -1
- package/esm2022/lib/catalog/shared/catalog.service.mjs +9 -6
- package/esm2022/lib/catalog/shared/index.mjs +1 -1
- package/esm2022/lib/datasource/index.mjs +1 -1
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +5 -5
- package/esm2022/lib/datasource/shared/datasource.service.mjs +8 -12
- package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/data.service.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +5 -5
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/index.mjs +1 -1
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +6 -6
- package/esm2022/lib/datasource/shared/options/options.service.mjs +1 -1
- package/esm2022/lib/datasource/utils/tilegrid.mjs +1 -1
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +23 -12
- package/esm2022/lib/directions/directions-buttons/index.mjs +1 -1
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +42 -17
- package/esm2022/lib/directions/directions-inputs/index.mjs +1 -1
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +34 -14
- package/esm2022/lib/directions/directions-results/index.mjs +1 -1
- package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
- package/esm2022/lib/directions/directions-sources/index.mjs +1 -1
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +5 -5
- package/esm2022/lib/directions/directions.component.mjs +18 -10
- package/esm2022/lib/directions/directions.module.mjs +17 -70
- package/esm2022/lib/directions/index.mjs +1 -1
- package/esm2022/lib/directions/shared/directions-source.service.mjs +1 -1
- package/esm2022/lib/directions/shared/directions.enum.mjs +1 -1
- package/esm2022/lib/directions/shared/directions.service.mjs +6 -6
- package/esm2022/lib/directions/shared/directions.utils.mjs +1 -1
- package/esm2022/lib/directions/shared/index.mjs +1 -1
- package/esm2022/lib/download/download-button/download-button.component.mjs +21 -11
- package/esm2022/lib/download/download-button/index.mjs +1 -1
- package/esm2022/lib/download/download.module.mjs +10 -27
- package/esm2022/lib/download/index.mjs +1 -1
- package/esm2022/lib/download/shared/download.interface.mjs +1 -1
- package/esm2022/lib/download/shared/download.service.mjs +5 -5
- package/esm2022/lib/download/shared/index.mjs +1 -1
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +21 -10
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +39 -16
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +19 -9
- package/esm2022/lib/draw/draw/draw.component.mjs +52 -22
- package/esm2022/lib/draw/draw/draw.module.mjs +7 -104
- package/esm2022/lib/draw/drawingTool.module.mjs +8 -7
- package/esm2022/lib/draw/index.mjs +1 -1
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +5 -5
- package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
- package/esm2022/lib/draw/shared/index.mjs +1 -1
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +23 -11
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +8 -7
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +8 -27
- package/esm2022/lib/feature/feature-details/index.mjs +9 -0
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +8 -8
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +8 -11
- package/esm2022/lib/feature/feature.module.mjs +9 -10
- package/esm2022/lib/feature/index.mjs +8 -2
- package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
- package/esm2022/lib/feature/shared/feature.enums.mjs +1 -1
- package/esm2022/lib/feature/shared/feature.utils.mjs +1 -1
- package/esm2022/lib/feature/shared/store.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/index.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/loading.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies/search.mjs +4 -4
- package/esm2022/lib/feature/shared/strategies/selection.mjs +1 -1
- package/esm2022/lib/feature/shared/strategies.utils.mjs +1 -1
- package/esm2022/lib/filter/filter.module.mjs +47 -177
- package/esm2022/lib/filter/index.mjs +36 -1
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +29 -15
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +46 -20
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +52 -21
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +13 -10
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +45 -18
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +18 -12
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +42 -18
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +8 -7
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +21 -12
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +6 -5
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +5 -5
- package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +1 -1
- package/esm2022/lib/filter/shared/ogc-filter.mjs +1 -1
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +5 -5
- package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +1 -1
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +5 -5
- package/esm2022/lib/filter/shared/time-filter.enum.mjs +1 -1
- package/esm2022/lib/filter/shared/time-filter.interface.mjs +1 -1
- package/esm2022/lib/filter/shared/time-filter.service.mjs +5 -5
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +63 -27
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +32 -15
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +34 -15
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +28 -14
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +47 -20
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +31 -13
- package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +8 -7
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +16 -10
- package/esm2022/lib/geo.module.mjs +5 -43
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +7 -7
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +33 -16
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +8 -43
- package/esm2022/lib/geometry/geometry-form-field/index.mjs +9 -0
- package/esm2022/lib/geometry/geometry.module.mjs +9 -10
- package/esm2022/lib/geometry/index.mjs +2 -3
- package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/index.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -1
- package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
- package/esm2022/lib/geometry/shared/geometry.utils.mjs +1 -1
- package/esm2022/lib/geometry/shared/index.mjs +1 -1
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +20 -10
- package/esm2022/lib/import-export/export-button/index.mjs +1 -1
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +45 -17
- package/esm2022/lib/import-export/import-export/index.mjs +1 -1
- package/esm2022/lib/import-export/import-export.module.mjs +10 -81
- package/esm2022/lib/import-export/index.mjs +9 -1
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +7 -6
- package/esm2022/lib/import-export/shared/export.errors.mjs +1 -1
- package/esm2022/lib/import-export/shared/export.service.mjs +5 -5
- package/esm2022/lib/import-export/shared/export.utils.mjs +1 -1
- package/esm2022/lib/import-export/shared/import.service.mjs +5 -5
- package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
- package/esm2022/lib/import-export/shared/index.mjs +1 -1
- package/esm2022/lib/layer/index.mjs +19 -1
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +33 -14
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +41 -17
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +11 -9
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +8 -7
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +28 -13
- package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +8 -7
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +48 -18
- package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +1 -1
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +33 -14
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +5 -5
- package/esm2022/lib/layer/layer.module.mjs +16 -93
- package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
- package/esm2022/lib/layer/shared/layer.service.mjs +6 -6
- package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/index.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +21 -11
- package/esm2022/lib/layer/utils/image-watcher.mjs +1 -1
- package/esm2022/lib/layer/utils/layer.utils.mjs +1 -1
- package/esm2022/lib/layer/utils/outputLegend.mjs +1 -1
- package/esm2022/lib/layer/utils/tile-watcher.mjs +1 -1
- package/esm2022/lib/layer/utils/vector-watcher.mjs +1 -1
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +25 -12
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +8 -8
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +22 -11
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +13 -9
- package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +1 -1
- package/esm2022/lib/map/home-extent-button/index.mjs +1 -1
- package/esm2022/lib/map/index.mjs +32 -1
- package/esm2022/lib/map/info-section/info-section.component.mjs +7 -7
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +6 -6
- package/esm2022/lib/map/map-center/map-center.component.mjs +6 -6
- package/esm2022/lib/map/map.module.mjs +36 -66
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +21 -11
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +21 -11
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +23 -11
- package/esm2022/lib/map/shared/controllers/controller.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/geolocation.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/index.mjs +1 -1
- package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +8 -7
- package/esm2022/lib/map/shared/index.mjs +1 -1
- package/esm2022/lib/map/shared/linkedLayers.utils.mjs +1 -1
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +8 -7
- package/esm2022/lib/map/shared/map.interface.mjs +1 -1
- package/esm2022/lib/map/shared/map.mjs +1 -1
- package/esm2022/lib/map/shared/map.service.mjs +5 -5
- package/esm2022/lib/map/shared/map.utils.mjs +1 -1
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +7 -6
- package/esm2022/lib/map/shared/projection.interfaces.mjs +1 -1
- package/esm2022/lib/map/shared/projection.service.mjs +5 -5
- package/esm2022/lib/map/shared/projection.utils.mjs +1 -1
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +6 -6
- package/esm2022/lib/map/utils/layer-watcher.mjs +1 -1
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +21 -11
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +13 -9
- package/esm2022/lib/measure/index.mjs +2 -3
- package/esm2022/lib/measure/measure.module.mjs +8 -5
- package/esm2022/lib/measure/measurer/index.mjs +6 -0
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +6 -5
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +18 -11
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +27 -13
- package/esm2022/lib/measure/measurer/measurer.component.mjs +35 -17
- package/esm2022/lib/measure/measurer/measurer.module.mjs +7 -69
- package/esm2022/lib/measure/shared/index.mjs +1 -1
- package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
- package/esm2022/lib/metadata/index.mjs +6 -1
- package/esm2022/lib/metadata/metadata-button/index.mjs +1 -1
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +35 -18
- package/esm2022/lib/metadata/metadata.module.mjs +10 -31
- package/esm2022/lib/metadata/shared/index.mjs +1 -1
- package/esm2022/lib/metadata/shared/metadata.service.mjs +5 -5
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +5 -5
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +5 -5
- package/esm2022/lib/offline/geoDB/index.mjs +1 -1
- package/esm2022/lib/offline/index.mjs +1 -1
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +5 -5
- package/esm2022/lib/offline/shared/geo-network.service.mjs +5 -5
- package/esm2022/lib/offline/shared/index.mjs +1 -1
- package/esm2022/lib/overlay/index.mjs +1 -1
- package/esm2022/lib/overlay/overlay.module.mjs +10 -8
- package/esm2022/lib/overlay/shared/index.mjs +1 -1
- package/esm2022/lib/overlay/shared/overlay.directive.mjs +8 -7
- package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
- package/esm2022/lib/overlay/shared/overlay.service.mjs +5 -5
- package/esm2022/lib/print/index.mjs +1 -1
- package/esm2022/lib/print/print/print.component.mjs +7 -7
- package/esm2022/lib/print/print-form/index.mjs +1 -1
- package/esm2022/lib/print/print-form/print-form.component.mjs +34 -14
- package/esm2022/lib/print/print.module.mjs +10 -54
- package/esm2022/lib/print/shared/index.mjs +1 -1
- package/esm2022/lib/print/shared/print.service.mjs +10 -10
- package/esm2022/lib/query/index.mjs +1 -1
- package/esm2022/lib/query/query.module.mjs +7 -8
- package/esm2022/lib/query/shared/index.mjs +1 -1
- package/esm2022/lib/query/shared/query-search-source.mjs +6 -6
- package/esm2022/lib/query/shared/query.directive.mjs +8 -7
- package/esm2022/lib/query/shared/query.enums.mjs +1 -1
- package/esm2022/lib/query/shared/query.service.mjs +7 -9
- package/esm2022/lib/search/index.mjs +14 -5
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +36 -16
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +8 -61
- package/esm2022/lib/search/search-results/index.mjs +10 -0
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +42 -17
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +28 -14
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +22 -12
- package/esm2022/lib/search/search-results/search-results.component.mjs +24 -12
- package/esm2022/lib/search/search-results/search-results.module.mjs +8 -91
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +27 -12
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +8 -44
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +37 -14
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +7 -47
- package/esm2022/lib/search/search.module.mjs +10 -13
- package/esm2022/lib/search/shared/index.mjs +1 -1
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +8 -7
- package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
- package/esm2022/lib/search/shared/search.service.mjs +5 -5
- package/esm2022/lib/search/shared/search.utils.mjs +1 -1
- package/esm2022/lib/search/shared/sources/cadastre.mjs +8 -7
- package/esm2022/lib/search/shared/sources/coordinates.mjs +10 -10
- package/esm2022/lib/search/shared/sources/icherche.mjs +16 -16
- package/esm2022/lib/search/shared/sources/ilayer.mjs +10 -10
- package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/sources/nominatim.mjs +6 -6
- package/esm2022/lib/search/shared/sources/source.mjs +1 -1
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +11 -11
- package/esm2022/lib/search/shared/sources/workspace.mjs +7 -8
- package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +1 -1
- package/esm2022/lib/style/shared/datasource/index.mjs +1 -1
- package/esm2022/lib/style/shared/feature/feature-style.mjs +1 -1
- package/esm2022/lib/style/shared/feature/index.mjs +1 -1
- package/esm2022/lib/style/shared/overlay/index.mjs +1 -1
- package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
- package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
- package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
- package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
- package/esm2022/lib/style/shared/vector/index.mjs +1 -1
- package/esm2022/lib/style/style-list/index.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.interface.mjs +1 -1
- package/esm2022/lib/style/style-list/style-list.module.mjs +5 -5
- package/esm2022/lib/style/style-list/style-list.service.mjs +5 -5
- package/esm2022/lib/style/style-modal/drawing/index.mjs +1 -1
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +40 -17
- package/esm2022/lib/style/style-modal/index.mjs +1 -1
- package/esm2022/lib/style/style-modal/layer/index.mjs +1 -1
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +28 -14
- package/esm2022/lib/style/style-modal/layer-button/index.mjs +1 -1
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +13 -9
- package/esm2022/lib/style/style-modal/shared/index.mjs +1 -1
- package/esm2022/lib/style/style-service/draw-style.service.mjs +5 -5
- package/esm2022/lib/style/style-service/index.mjs +1 -1
- package/esm2022/lib/style/style-service/style.service.mjs +4 -4
- package/esm2022/lib/style/style.module.mjs +12 -57
- package/esm2022/lib/toast/index.mjs +1 -1
- package/esm2022/lib/toast/toast.component.mjs +19 -11
- package/esm2022/lib/toast/toast.module.mjs +10 -30
- package/esm2022/lib/utils/id-generator.mjs +1 -1
- package/esm2022/lib/utils/index.mjs +1 -1
- package/esm2022/lib/utils/propertyTypeDetector/index.mjs +1 -1
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +5 -5
- package/esm2022/lib/wkt/index.mjs +1 -1
- package/esm2022/lib/wkt/shared/index.mjs +1 -1
- package/esm2022/lib/wkt/shared/wkt.service.mjs +5 -5
- package/esm2022/lib/wkt/wkt.module.mjs +8 -5
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +9 -8
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +8 -24
- package/esm2022/lib/workspace/index.mjs +1 -1
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +5 -5
- package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +5 -5
- package/esm2022/lib/workspace/shared/index.mjs +1 -1
- package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +5 -5
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +5 -5
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +1 -1
- package/esm2022/lib/workspace/widgets/index.mjs +1 -1
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +7 -7
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +8 -13
- package/esm2022/lib/workspace/widgets/widgets.mjs +1 -1
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +7 -6
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +8 -10
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +7 -6
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +8 -10
- package/esm2022/lib/workspace/workspace.module.mjs +10 -35
- package/esm2022/public_api.mjs +11 -12
- package/fesm2022/igo2-geo.mjs +34458 -34603
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
- package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +2 -14
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +1 -1
- package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
- package/lib/catalog/catalog-library/catalog-library.component.d.ts +1 -1
- package/lib/catalog/catalog-library/catalog-library.module.d.ts +3 -18
- package/lib/catalog/catalog-library/index.d.ts +5 -0
- package/lib/catalog/catalog.module.d.ts +6 -9
- package/lib/catalog/index.d.ts +2 -0
- package/lib/datasource/shared/datasource.service.d.ts +2 -4
- package/lib/directions/directions-buttons/directions-buttons.component.d.ts +1 -1
- package/lib/directions/directions-inputs/directions-inputs.component.d.ts +1 -1
- package/lib/directions/directions-results/directions-results.component.d.ts +1 -1
- package/lib/directions/directions.component.d.ts +1 -1
- package/lib/directions/directions.module.d.ts +9 -20
- package/lib/download/download-button/download-button.component.d.ts +1 -1
- package/lib/download/download.module.d.ts +4 -6
- package/lib/draw/draw/draw-layer-popup.component.d.ts +1 -1
- package/lib/draw/draw/draw-popup.component.d.ts +4 -4
- package/lib/draw/draw/draw-shorcuts.component.d.ts +1 -1
- package/lib/draw/draw/draw.component.d.ts +1 -1
- package/lib/draw/draw/draw.module.d.ts +2 -25
- package/lib/draw/drawingTool.module.d.ts +3 -0
- package/lib/feature/feature-details/feature-details.component.d.ts +4 -2
- package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.module.d.ts +2 -6
- package/lib/feature/feature-details/index.d.ts +5 -0
- package/lib/feature/feature-form/feature-form.component.d.ts +2 -2
- package/lib/feature/feature-form/feature-form.module.d.ts +2 -4
- package/lib/feature/feature.module.d.ts +6 -4
- package/lib/feature/index.d.ts +3 -1
- package/lib/filter/filter.module.d.ts +4 -28
- package/lib/filter/index.d.ts +16 -0
- package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +3 -3
- package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +3 -3
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +3 -3
- package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +2 -2
- package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +3 -3
- package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +3 -3
- package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
- package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +3 -3
- package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +4 -4
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +1 -1
- package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
- package/lib/filter/time-filter-form/time-filter-form.component.d.ts +3 -3
- package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
- package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
- package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
- package/lib/geo.module.d.ts +14 -24
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -1
- package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -1
- package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +2 -10
- package/lib/geometry/geometry-form-field/index.d.ts +5 -0
- package/lib/geometry/geometry.module.d.ts +5 -3
- package/lib/geometry/index.d.ts +1 -2
- package/lib/import-export/export-button/export-button.component.d.ts +1 -1
- package/lib/import-export/import-export/import-export.component.d.ts +1 -1
- package/lib/import-export/import-export.module.d.ts +4 -15
- package/lib/import-export/index.d.ts +4 -0
- package/lib/import-export/shared/drop-geo-file.directive.d.ts +1 -1
- package/lib/layer/index.d.ts +8 -0
- package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
- package/lib/layer/layer-legend/layer-legend.component.d.ts +1 -1
- package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
- package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
- package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
- package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
- package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
- package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
- package/lib/layer/layer.module.d.ts +4 -18
- package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
- package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
- package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
- package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
- package/lib/map/home-extent-button/home-extent-button.component.d.ts +1 -1
- package/lib/map/index.d.ts +14 -0
- package/lib/map/info-section/info-section.component.d.ts +1 -1
- package/lib/map/map-browser/map-browser.component.d.ts +1 -1
- package/lib/map/map-center/map-center.component.d.ts +1 -1
- package/lib/map/map.module.d.ts +4 -7
- package/lib/map/menu-button/menu-button.component.d.ts +1 -1
- package/lib/map/offline-button/offline-button.component.d.ts +2 -2
- package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
- package/lib/map/shared/hover-feature.directive.d.ts +1 -1
- package/lib/map/shared/map-pointer-position.directive.d.ts +1 -1
- package/lib/map/shared/mapOffline.directive.d.ts +1 -1
- package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
- package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +1 -1
- package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
- package/lib/measure/index.d.ts +1 -2
- package/lib/measure/measure.module.d.ts +3 -0
- package/lib/measure/measurer/index.d.ts +5 -0
- package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
- package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
- package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
- package/lib/measure/measurer/measurer.component.d.ts +2 -3
- package/lib/measure/measurer/measurer.module.d.ts +3 -18
- package/lib/metadata/index.d.ts +2 -0
- package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
- package/lib/metadata/metadata.module.d.ts +4 -7
- package/lib/overlay/overlay.module.d.ts +4 -1
- package/lib/overlay/shared/overlay.directive.d.ts +1 -1
- package/lib/print/print/print.component.d.ts +1 -1
- package/lib/print/print-form/print-form.component.d.ts +1 -1
- package/lib/print/print.module.d.ts +4 -12
- package/lib/query/query.module.d.ts +4 -4
- package/lib/query/shared/query.directive.d.ts +1 -1
- package/lib/query/shared/query.service.d.ts +2 -3
- package/lib/search/index.d.ts +6 -4
- package/lib/search/search-bar/search-bar.component.d.ts +1 -1
- package/lib/search/search-bar/search-bar.module.d.ts +2 -16
- package/lib/search/search-results/index.d.ts +6 -0
- package/lib/search/search-results/save-feature-dialog.component.d.ts +1 -1
- package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
- package/lib/search/search-results/search-results-item.component.d.ts +1 -1
- package/lib/search/search-results/search-results.component.d.ts +1 -1
- package/lib/search/search-results/search-results.module.d.ts +3 -21
- package/lib/search/search-selector/search-selector.component.d.ts +1 -1
- package/lib/search/search-selector/search-selector.module.d.ts +2 -11
- package/lib/search/search-settings/search-settings.component.d.ts +1 -1
- package/lib/search/search-settings/search-settings.module.d.ts +2 -12
- package/lib/search/search.module.d.ts +6 -7
- package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
- package/lib/search/shared/sources/cadastre.providers.d.ts +1 -1
- package/lib/search/shared/sources/coordinates.providers.d.ts +1 -1
- package/lib/search/shared/sources/icherche.providers.d.ts +2 -2
- package/lib/search/shared/sources/ilayer.providers.d.ts +1 -1
- package/lib/search/shared/sources/nominatim.providers.d.ts +1 -1
- package/lib/search/shared/sources/storedqueries.providers.d.ts +2 -2
- package/lib/search/shared/sources/workspace.providers.d.ts +1 -1
- package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +1 -1
- package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +1 -1
- package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +1 -1
- package/lib/style/style.module.d.ts +5 -16
- package/lib/toast/toast.component.d.ts +1 -1
- package/lib/toast/toast.module.d.ts +4 -6
- package/lib/wkt/wkt.module.d.ts +3 -0
- package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
- package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +2 -6
- package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
- package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +2 -6
- package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
- package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +2 -3
- package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
- package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +2 -3
- package/lib/workspace/workspace.module.d.ts +5 -9
- package/locale/en.geo.json +3 -3
- package/locale/fr.geo.json +3 -3
- package/package.json +14 -12
- package/public_api.d.ts +10 -11
- package/src/geo-theme.scss +23 -23
- package/src/lib/filter/filter.theming.scss +13 -13
- package/src/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -18
- package/src/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -5
- package/src/lib/layer/layer-item/layer-item.theme.scss +33 -33
- package/src/lib/layer/layer-legend/layer-legend.theming.scss +10 -10
- package/src/lib/layer/layer-list-tool/layer-list-tool.theming.scss +34 -34
- package/src/lib/layer/layer.theming.scss +10 -10
- package/src/lib/map/map-browser/map-browser.theming.scss +46 -46
- package/src/lib/map/map.theming.scss +9 -9
- package/src/lib/map/menu-button/menu-button.theming.scss +20 -20
- package/src/lib/map/zoom-button/zoom-button.theming.scss +32 -32
- package/src/style/style.scss +1 -1
- package/esm2022/lib/datasource/datasource.module.mjs +0 -22
- package/esm2022/lib/search/search-bar/search-url-param.directive.mjs +0 -40
- package/lib/datasource/datasource.module.d.ts +0 -8
- package/lib/search/search-bar/search-url-param.directive.d.ts +0 -13
package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs
CHANGED
|
@@ -1,16 +1,31 @@
|
|
|
1
1
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
2
2
|
import { NestedTreeControl } from '@angular/cdk/tree';
|
|
3
|
+
import { AsyncPipe, NgFor, NgIf } from '@angular/common';
|
|
3
4
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
4
|
-
import { UntypedFormControl } from '@angular/forms';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
|
|
6
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
7
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
8
|
+
import { MatOptionModule } from '@angular/material/core';
|
|
9
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
10
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
11
|
+
import { MatInputModule } from '@angular/material/input';
|
|
12
|
+
import { MatRadioModule } from '@angular/material/radio';
|
|
13
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
14
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
15
|
+
import { MatTableModule } from '@angular/material/table';
|
|
16
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
17
|
+
import { MatTreeModule, MatTreeNestedDataSource } from '@angular/material/tree';
|
|
18
|
+
import { EntityStore, EntityStoreFilterSelectionStrategy, EntityTableColumnRenderer, EntityTableComponent } from '@igo2/common';
|
|
7
19
|
import { LanguageService, MessageService } from '@igo2/core';
|
|
8
20
|
import * as olproj from 'ol/proj';
|
|
9
21
|
import * as olStyle from 'ol/style';
|
|
22
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
10
23
|
import { BehaviorSubject } from 'rxjs';
|
|
11
24
|
import { debounceTime } from 'rxjs/operators';
|
|
12
25
|
import { FeatureDataSource } from '../../../datasource/shared';
|
|
26
|
+
import { GeometryType } from '../../../draw';
|
|
13
27
|
import { FeatureMotion, FeatureStoreSelectionStrategy } from '../../../feature';
|
|
28
|
+
import { GeometryFormFieldInputComponent } from '../../../geometry/geometry-form-field/geometry-form-field-input.component';
|
|
14
29
|
import { VectorLayer } from '../../../layer/shared';
|
|
15
30
|
import { IgoMap } from '../../../map/shared/map';
|
|
16
31
|
import { MeasureLengthUnit } from '../../../measure';
|
|
@@ -20,23 +35,20 @@ import { SpatialFilterItemType } from './../../shared/spatial-filter.enum';
|
|
|
20
35
|
import * as i0 from "@angular/core";
|
|
21
36
|
import * as i1 from "../../shared/spatial-filter.service";
|
|
22
37
|
import * as i2 from "@igo2/core";
|
|
23
|
-
import * as i3 from "@angular/
|
|
24
|
-
import * as i4 from "@angular/
|
|
25
|
-
import * as i5 from "@angular/material/
|
|
26
|
-
import * as i6 from "@angular/material/
|
|
27
|
-
import * as i7 from "@angular/material/
|
|
28
|
-
import * as i8 from "@angular/material/
|
|
29
|
-
import * as i9 from "@angular/material/
|
|
30
|
-
import * as i10 from "@angular/material/
|
|
38
|
+
import * as i3 from "@angular/forms";
|
|
39
|
+
import * as i4 from "@angular/material/slide-toggle";
|
|
40
|
+
import * as i5 from "@angular/material/form-field";
|
|
41
|
+
import * as i6 from "@angular/material/input";
|
|
42
|
+
import * as i7 from "@angular/material/select";
|
|
43
|
+
import * as i8 from "@angular/material/core";
|
|
44
|
+
import * as i9 from "@angular/material/radio";
|
|
45
|
+
import * as i10 from "@angular/material/table";
|
|
31
46
|
import * as i11 from "@angular/material/checkbox";
|
|
32
|
-
import * as i12 from "@angular/material/
|
|
33
|
-
import * as i13 from "@angular/material/
|
|
34
|
-
import * as i14 from "@angular/material/
|
|
35
|
-
import * as i15 from "@angular/material/
|
|
36
|
-
import * as i16 from "@
|
|
37
|
-
import * as i17 from "@igo2/common";
|
|
38
|
-
import * as i18 from "../../../geometry/geometry-form-field/geometry-form-field-input.component";
|
|
39
|
-
import * as i19 from "@ngx-translate/core";
|
|
47
|
+
import * as i12 from "@angular/material/tree";
|
|
48
|
+
import * as i13 from "@angular/material/button";
|
|
49
|
+
import * as i14 from "@angular/material/icon";
|
|
50
|
+
import * as i15 from "@angular/material/tooltip";
|
|
51
|
+
import * as i16 from "@ngx-translate/core";
|
|
40
52
|
/**
|
|
41
53
|
* Spatial-Filter-Item (search parameters)
|
|
42
54
|
*/
|
|
@@ -76,7 +88,7 @@ export class SpatialFilterItemComponent {
|
|
|
76
88
|
image: new olStyle.Circle({
|
|
77
89
|
radius: this.radius /
|
|
78
90
|
Math.cos((Math.PI / 180) * coordinates[1]) /
|
|
79
|
-
resolution,
|
|
91
|
+
resolution, // Latitude correction
|
|
80
92
|
stroke: new olStyle.Stroke({
|
|
81
93
|
width: 2,
|
|
82
94
|
color: 'rgba(0, 153, 255)'
|
|
@@ -201,7 +213,10 @@ export class SpatialFilterItemComponent {
|
|
|
201
213
|
formControl = new UntypedFormControl();
|
|
202
214
|
geometryType;
|
|
203
215
|
geometryTypeField = false;
|
|
204
|
-
geometryTypes = [
|
|
216
|
+
geometryTypes = [
|
|
217
|
+
GeometryType.Point,
|
|
218
|
+
GeometryType.Polygon
|
|
219
|
+
];
|
|
205
220
|
drawGuideField = false;
|
|
206
221
|
drawGuide = null;
|
|
207
222
|
drawGuidePlaceholder = '';
|
|
@@ -779,13 +794,34 @@ export class SpatialFilterItemComponent {
|
|
|
779
794
|
columns
|
|
780
795
|
};
|
|
781
796
|
}
|
|
782
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
783
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SpatialFilterItemComponent, selector: "igo-spatial-filter-item", inputs: { map: "map", type: "type", queryType: "queryType", zone: "zone", loading: "loading", store: "store", layers: "layers", allLayers: "allLayers", thematicLength: "thematicLength" }, outputs: { toggleSearch: "toggleSearch", itemTypeChange: "itemTypeChange", thematicChange: "thematicChange", drawZoneEvent: "drawZoneEvent", bufferEvent: "bufferEvent", zoneWithBufferChange: "zoneWithBufferChange", measureUnitChange: "measureUnitChange", radiusEvent: "radiusEvent", freehandControl: "freehandControl", predefinedRadius: "predefinedRadius", clearButtonEvent: "clearButtonEvent", clearSearchEvent: "clearSearchEvent", export: "export", openWorkspace: "openWorkspace", entityChange: "entityChange" }, ngImport: i0, template: "<igo-geometry-form-field-input\r\n [formControl]=\"formControl\"\r\n [map]=\"map\"\r\n [geometryType]=\"geometryType\"\r\n [drawGuide]=\"drawGuide$ | async\"\r\n [measure]=\"measure\"\r\n [drawControlIsActive]=\"drawControlIsActive\"\r\n [freehandDrawIsActive]=\"freehandDrawIsActive\"\r\n [drawStyle]=\"drawStyle$ | async\"\r\n [overlayStyle]=\"overlayStyle$ | async\"\r\n [radius]=\"radius\"\r\n [predefinedRadius]=\"predefinedRadius\"\r\n>\r\n</igo-geometry-form-field-input>\r\n\r\n<div class=\"header\">\r\n <mat-slide-toggle\r\n *ngIf=\"!isPredefined()\"\r\n [checked]=\"drawControlIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onDrawControlChange()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.drawControl' | translate }}\r\n </mat-slide-toggle>\r\n <mat-slide-toggle\r\n *ngIf=\"!isPredefined()\"\r\n [checked]=\"freehandDrawIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onfreehandControlChange()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.freehandControl' | translate }}\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"buffer-unit\" *ngIf=\"isPolygon()\">\r\n <mat-form-field class=\"buffer\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n placeholder=\"{{ 'igo.geo.spatialFilter.buffer' | translate }}\"\r\n [formControl]=\"bufferFormControl\"\r\n [value]=\"0\"\r\n [readonly]=\"this.formControl.value === null\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let measureUnit of measureUnits\"\r\n [value]=\"measureUnit\"\r\n >\r\n {{ 'igo.geo.measure.' + measureUnit | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<div class=\"radius-unit\" *ngIf=\"isPoint()\">\r\n <mat-form-field class=\"radius\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\r\n [formControl]=\"radiusFormControl\"\r\n [value]=\"1000\"\r\n (input)=\"getRadius()\"\r\n [readonly]=\"this.freehandDrawIsActive && this.formControl.value === null\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let measureUnit of measureUnits\"\r\n [value]=\"measureUnit\"\r\n >\r\n {{ 'igo.geo.measure.' + measureUnit | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<mat-label class=\"title mat-typography\"\r\n >{{ 'igo.geo.spatialFilter.search' | translate }} :\r\n</mat-label>\r\n<mat-radio-group [value]=\"selectedItemType\">\r\n <mat-radio-button\r\n *ngFor=\"let item of itemType\"\r\n [value]=\"item\"\r\n (change)=\"onItemTypeChange($event)\"\r\n >\r\n {{ 'igo.geo.spatialFilter.' + item | translate }}\r\n </mat-radio-button>\r\n</mat-radio-group>\r\n\r\n<div\r\n class=\"thematics\"\r\n *ngIf=\"\r\n (selectedItemType === 'Thematics' && !tableTemplate) ||\r\n (selectedItemType === 'Thematics' && tableTemplate && !listIsVisible)\r\n \"\r\n>\r\n <mat-table>\r\n <!-- Name Column -->\r\n <ng-container matColumnDef=\"name\">\r\n <mat-header-cell *matHeaderCellDef class=\"thematics-header\">{{\r\n 'igo.geo.spatialFilter.Thematics' | translate\r\n }}</mat-header-cell>\r\n </ng-container>\r\n\r\n <!-- Select Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef class=\"checks-header\">\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"selectedThematics.hasValue() && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\r\n </mat-table>\r\n\r\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\r\n <li class=\"mat-tree-node\">\r\n <!-- use a disabled button to provide padding for tree leaf -->\r\n <button mat-icon-button disabled></button>\r\n {{ node.name }}\r\n <mat-checkbox\r\n class=\"tree-check\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onToggleChange(node) : null\"\r\n [checked]=\"selectedThematics.isSelected(node)\"\r\n >\r\n </mat-checkbox>\r\n </li>\r\n </mat-tree-node>\r\n\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\r\n <div class=\"mat-tree-node\">\r\n <button mat-icon-button (click)=\"onToggleClick(node)\">\r\n <mat-icon\r\n [svgIcon]=\"\r\n treeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n {{ node.name }}\r\n <mat-checkbox\r\n class=\"tree-check-2\"\r\n (change)=\"$event ? childrensToggle(node) : null\"\r\n [checked]=\"isAllSelected(node)\"\r\n [indeterminate]=\"hasChildrenSelected(node) && !isAllSelected(node)\"\r\n >\r\n </mat-checkbox>\r\n </div>\r\n <ul\r\n class=\"tree-ul\"\r\n [class.example-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </ul>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n</div>\r\n\r\n<div class=\"buttons\">\r\n <button\r\n *ngIf=\"isPredefined()\"\r\n mat-raised-button\r\n class=\"clear-search-button\"\r\n [disabled]=\"disabledClearSearch()\"\r\n (click)=\"clearSearch()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.clearSearch' | translate }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"isPolygon() || isPoint()\"\r\n mat-raised-button\r\n class=\"clear-form-button\"\r\n [disabled]=\"this.formControl.value === null\"\r\n (click)=\"clearDrawZone()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.clearForm' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"search-button\"\r\n [disabled]=\"disableSearchButton()\"\r\n color=\"primary\"\r\n (click)=\"toggleSearchButton()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.goSearch' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"remove-button\"\r\n [disabled]=\"allLayers.length === 0\"\r\n (click)=\"clearButton()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.removeLayer' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"export-button\"\r\n [disabled]=\"!store.entities$.getValue().length\"\r\n (click)=\"export.emit()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.exportLayer' | translate }}\r\n </button>\r\n</div>\r\n\r\n<button\r\n class=\"chevron-down\"\r\n *ngIf=\"store.all().length && tableTemplate && !listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.showSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\"\r\n>\r\n <mat-icon svgIcon=\"chevron-down\"></mat-icon>\r\n</button>\r\n\r\n<div\r\n class=\"results\"\r\n *ngIf=\"store.all().length && tableTemplate && listIsVisible\"\r\n>\r\n <button\r\n *ngIf=\"listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.hideSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\"\r\n >\r\n <mat-icon svgIcon=\"chevron-up\"></mat-icon>\r\n </button>\r\n <igo-entity-table\r\n class=\"results-list\"\r\n [template]=\"tableTemplate\"\r\n [store]=\"store\"\r\n (entitySelectChange)=\"entityChange.emit($event)\"\r\n >\r\n </igo-entity-table>\r\n</div>\r\n", styles: [":host .header{margin-top:5px;width:100%}:host .mat-mdc-slide-toggle{padding:5px;width:100%}:host .mat-mdc-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .mat-mdc-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .title{margin-left:5px;font-size:initial}:host .mat-mdc-radio-group{display:flex;flex-direction:column}:host .mat-mdc-radio-button{display:inline-flex;position:relative;margin-left:12px}:host .mat-mdc-form-field{margin-top:5px}:host .mat-column-select{overflow:auto}:host .buttons{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:16px 0}:host .thematics{max-height:35%;overflow:auto;margin-top:5px;width:98%}:host .results{overflow:auto;max-height:250px;width:98%}:host .mat-column-typeResults{max-width:100px;margin-right:5px}:host .buffer-unit,:host .radius-unit{display:flex;width:100%;padding:5px;box-sizing:border-box}:host .radius,:host .buffer{flex-flow:column nowrap;flex:2}:host .unit-field{flex:1;margin-left:8px}:host .example-tree-invisible{display:none}:host .tree-ul{margin:0;padding:0 0 0 20px;list-style-type:none}:host .tree-check,:host .tree-check-2{position:relative;margin-left:auto;margin-right:5px}:host .thematics-header{max-width:250px}:host .checks-header{padding:none;max-width:calc(100% - 316px);overflow:hidden}:host .mat-mdc-checkbox{padding:5px}:host .mat-tree-node{position:relative;min-height:42px;width:280px}:host .mat-mdc-header-cell{height:56px}:host .results{max-height:45%;width:98%}:host .results igo-entity-table ::ng-deep div.table-container{overflow:unset}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i8.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i10.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["role", "disabled", "tabIndex", "matNestedTreeNode"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i10.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: i10.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i13.MatLabel, selector: "mat-label" }, { kind: "directive", type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i15.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i17.EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "component", type: i18.GeometryFormFieldInputComponent, selector: "igo-geometry-form-field-input", inputs: ["map", "geometryType", "drawGuide", "measure", "drawControlIsActive", "freehandDrawIsActive", "predefinedRadius", "controlOptions", "drawStyle", "overlayStyle", "value", "radius"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i19.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
797
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: SpatialFilterItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SpatialFilterService }, { token: i2.MessageService }, { token: i2.LanguageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
798
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: SpatialFilterItemComponent, isStandalone: true, selector: "igo-spatial-filter-item", inputs: { map: "map", type: "type", queryType: "queryType", zone: "zone", loading: "loading", store: "store", layers: "layers", allLayers: "allLayers", thematicLength: "thematicLength" }, outputs: { toggleSearch: "toggleSearch", itemTypeChange: "itemTypeChange", thematicChange: "thematicChange", drawZoneEvent: "drawZoneEvent", bufferEvent: "bufferEvent", zoneWithBufferChange: "zoneWithBufferChange", measureUnitChange: "measureUnitChange", radiusEvent: "radiusEvent", freehandControl: "freehandControl", predefinedRadius: "predefinedRadius", clearButtonEvent: "clearButtonEvent", clearSearchEvent: "clearSearchEvent", export: "export", openWorkspace: "openWorkspace", entityChange: "entityChange" }, ngImport: i0, template: "<igo-geometry-form-field-input\r\n [formControl]=\"formControl\"\r\n [map]=\"map\"\r\n [geometryType]=\"geometryType\"\r\n [drawGuide]=\"drawGuide$ | async\"\r\n [measure]=\"measure\"\r\n [drawControlIsActive]=\"drawControlIsActive\"\r\n [freehandDrawIsActive]=\"freehandDrawIsActive\"\r\n [drawStyle]=\"drawStyle$ | async\"\r\n [overlayStyle]=\"overlayStyle$ | async\"\r\n [radius]=\"radius\"\r\n [predefinedRadius]=\"$any(predefinedRadius)\"\r\n>\r\n</igo-geometry-form-field-input>\r\n\r\n<div class=\"header\">\r\n <mat-slide-toggle\r\n *ngIf=\"!isPredefined()\"\r\n [checked]=\"drawControlIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onDrawControlChange()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.drawControl' | translate }}\r\n </mat-slide-toggle>\r\n <mat-slide-toggle\r\n *ngIf=\"!isPredefined()\"\r\n [checked]=\"freehandDrawIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onfreehandControlChange()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.freehandControl' | translate }}\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"buffer-unit\" *ngIf=\"isPolygon()\">\r\n <mat-form-field class=\"buffer\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n placeholder=\"{{ 'igo.geo.spatialFilter.buffer' | translate }}\"\r\n [formControl]=\"bufferFormControl\"\r\n [value]=\"0\"\r\n [readonly]=\"this.formControl.value === null\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let measureUnit of measureUnits\"\r\n [value]=\"measureUnit\"\r\n >\r\n {{ 'igo.geo.measure.' + measureUnit | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<div class=\"radius-unit\" *ngIf=\"isPoint()\">\r\n <mat-form-field class=\"radius\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\r\n [formControl]=\"radiusFormControl\"\r\n [value]=\"1000\"\r\n (input)=\"getRadius()\"\r\n [readonly]=\"this.freehandDrawIsActive && this.formControl.value === null\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let measureUnit of measureUnits\"\r\n [value]=\"measureUnit\"\r\n >\r\n {{ 'igo.geo.measure.' + measureUnit | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<mat-label class=\"title mat-typography\"\r\n >{{ 'igo.geo.spatialFilter.search' | translate }} :\r\n</mat-label>\r\n<mat-radio-group [value]=\"selectedItemType\">\r\n <mat-radio-button\r\n *ngFor=\"let item of itemType\"\r\n [value]=\"item\"\r\n (change)=\"onItemTypeChange($event)\"\r\n >\r\n {{ 'igo.geo.spatialFilter.' + item | translate }}\r\n </mat-radio-button>\r\n</mat-radio-group>\r\n\r\n<div\r\n class=\"thematics\"\r\n *ngIf=\"\r\n (selectedItemType === 'Thematics' && !tableTemplate) ||\r\n (selectedItemType === 'Thematics' && tableTemplate && !listIsVisible)\r\n \"\r\n>\r\n <mat-table>\r\n <!-- Name Column -->\r\n <ng-container matColumnDef=\"name\">\r\n <mat-header-cell *matHeaderCellDef class=\"thematics-header\">{{\r\n 'igo.geo.spatialFilter.Thematics' | translate\r\n }}</mat-header-cell>\r\n </ng-container>\r\n\r\n <!-- Select Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef class=\"checks-header\">\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"selectedThematics.hasValue() && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\r\n </mat-table>\r\n\r\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\r\n <li class=\"mat-tree-node\">\r\n <!-- use a disabled button to provide padding for tree leaf -->\r\n <button mat-icon-button disabled></button>\r\n {{ node.name }}\r\n <mat-checkbox\r\n class=\"tree-check\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onToggleChange(node) : null\"\r\n [checked]=\"selectedThematics.isSelected(node)\"\r\n >\r\n </mat-checkbox>\r\n </li>\r\n </mat-tree-node>\r\n\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\r\n <div class=\"mat-tree-node\">\r\n <button mat-icon-button (click)=\"onToggleClick(node)\">\r\n <mat-icon\r\n [svgIcon]=\"\r\n treeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n {{ node.name }}\r\n <mat-checkbox\r\n class=\"tree-check-2\"\r\n (change)=\"$event ? childrensToggle(node) : null\"\r\n [checked]=\"isAllSelected(node)\"\r\n [indeterminate]=\"hasChildrenSelected(node) && !isAllSelected(node)\"\r\n >\r\n </mat-checkbox>\r\n </div>\r\n <ul\r\n class=\"tree-ul\"\r\n [class.example-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </ul>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n</div>\r\n\r\n<div class=\"buttons\">\r\n <button\r\n *ngIf=\"isPredefined()\"\r\n mat-raised-button\r\n class=\"clear-search-button\"\r\n [disabled]=\"disabledClearSearch()\"\r\n (click)=\"clearSearch()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.clearSearch' | translate }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"isPolygon() || isPoint()\"\r\n mat-raised-button\r\n class=\"clear-form-button\"\r\n [disabled]=\"this.formControl.value === null\"\r\n (click)=\"clearDrawZone()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.clearForm' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"search-button\"\r\n [disabled]=\"disableSearchButton()\"\r\n color=\"primary\"\r\n (click)=\"toggleSearchButton()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.goSearch' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"remove-button\"\r\n [disabled]=\"allLayers.length === 0\"\r\n (click)=\"clearButton()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.removeLayer' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"export-button\"\r\n [disabled]=\"!store.entities$.getValue().length\"\r\n (click)=\"export.emit()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.exportLayer' | translate }}\r\n </button>\r\n</div>\r\n\r\n<button\r\n class=\"chevron-down\"\r\n *ngIf=\"store.all().length && tableTemplate && !listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.showSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\"\r\n>\r\n <mat-icon svgIcon=\"chevron-down\"></mat-icon>\r\n</button>\r\n\r\n<div\r\n class=\"results\"\r\n *ngIf=\"store.all().length && tableTemplate && listIsVisible\"\r\n>\r\n <button\r\n *ngIf=\"listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.hideSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\"\r\n >\r\n <mat-icon svgIcon=\"chevron-up\"></mat-icon>\r\n </button>\r\n <igo-entity-table\r\n class=\"results-list\"\r\n [template]=\"tableTemplate\"\r\n [store]=\"store\"\r\n (entitySelectChange)=\"entityChange.emit($event)\"\r\n >\r\n </igo-entity-table>\r\n</div>\r\n", styles: [":host .header{margin-top:5px;width:100%}:host .mat-mdc-slide-toggle{padding:5px;width:100%}:host .mat-mdc-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .mat-mdc-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .title{margin-left:5px;font-size:initial}:host .mat-mdc-radio-group{display:flex;flex-direction:column}:host .mat-mdc-radio-button{display:inline-flex;position:relative;margin-left:12px}:host .mat-mdc-form-field{margin-top:5px}:host .mat-column-select{overflow:auto}:host .buttons{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:16px 0}:host .thematics{max-height:35%;overflow:auto;margin-top:5px;width:98%}:host .results{overflow:auto;max-height:250px;width:98%}:host .mat-column-typeResults{max-width:100px;margin-right:5px}:host .buffer-unit,:host .radius-unit{display:flex;width:100%;padding:5px;box-sizing:border-box}:host .radius,:host .buffer{flex-flow:column nowrap;flex:2}:host .unit-field{flex:1;margin-left:8px}:host .example-tree-invisible{display:none}:host .tree-ul{margin:0;padding:0 0 0 20px;list-style-type:none}:host .tree-check,:host .tree-check-2{position:relative;margin-left:auto;margin-right:5px}:host .thematics-header{max-width:250px}:host .checks-header{padding:none;max-width:calc(100% - 316px);overflow:hidden}:host .mat-mdc-checkbox{padding:5px}:host .mat-tree-node{position:relative;min-height:42px;width:280px}:host .mat-mdc-header-cell{height:56px}:host .results{max-height:45%;width:98%}:host .results igo-entity-table ::ng-deep div.table-container{overflow:unset}\n"], dependencies: [{ kind: "component", type: GeometryFormFieldInputComponent, selector: "igo-geometry-form-field-input", inputs: ["map", "geometryType", "drawGuide", "measure", "drawControlIsActive", "freehandDrawIsActive", "predefinedRadius", "controlOptions", "drawStyle", "overlayStyle", "value", "radius"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i9.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i9.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i10.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i10.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i10.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i10.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i10.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i10.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: i10.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i10.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i12.MatNestedTreeNode, selector: "mat-nested-tree-node", inputs: ["matNestedTreeNode", "disabled", "tabIndex"], exportAs: ["matNestedTreeNode"] }, { kind: "directive", type: i12.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i12.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i12.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i12.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "directive", type: i12.MatTreeNodeOutlet, selector: "[matTreeNodeOutlet]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i15.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i16.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
784
799
|
}
|
|
785
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
800
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: SpatialFilterItemComponent, decorators: [{
|
|
786
801
|
type: Component,
|
|
787
|
-
args: [{ selector: 'igo-spatial-filter-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-geometry-form-field-input\r\n [formControl]=\"formControl\"\r\n [map]=\"map\"\r\n [geometryType]=\"geometryType\"\r\n [drawGuide]=\"drawGuide$ | async\"\r\n [measure]=\"measure\"\r\n [drawControlIsActive]=\"drawControlIsActive\"\r\n [freehandDrawIsActive]=\"freehandDrawIsActive\"\r\n [drawStyle]=\"drawStyle$ | async\"\r\n [overlayStyle]=\"overlayStyle$ | async\"\r\n [radius]=\"radius\"\r\n [predefinedRadius]=\"predefinedRadius\"\r\n>\r\n</igo-geometry-form-field-input>\r\n\r\n<div class=\"header\">\r\n <mat-slide-toggle\r\n *ngIf=\"!isPredefined()\"\r\n [checked]=\"drawControlIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onDrawControlChange()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.drawControl' | translate }}\r\n </mat-slide-toggle>\r\n <mat-slide-toggle\r\n *ngIf=\"!isPredefined()\"\r\n [checked]=\"freehandDrawIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onfreehandControlChange()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.freehandControl' | translate }}\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"buffer-unit\" *ngIf=\"isPolygon()\">\r\n <mat-form-field class=\"buffer\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n placeholder=\"{{ 'igo.geo.spatialFilter.buffer' | translate }}\"\r\n [formControl]=\"bufferFormControl\"\r\n [value]=\"0\"\r\n [readonly]=\"this.formControl.value === null\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let measureUnit of measureUnits\"\r\n [value]=\"measureUnit\"\r\n >\r\n {{ 'igo.geo.measure.' + measureUnit | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<div class=\"radius-unit\" *ngIf=\"isPoint()\">\r\n <mat-form-field class=\"radius\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\r\n [formControl]=\"radiusFormControl\"\r\n [value]=\"1000\"\r\n (input)=\"getRadius()\"\r\n [readonly]=\"this.freehandDrawIsActive && this.formControl.value === null\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let measureUnit of measureUnits\"\r\n [value]=\"measureUnit\"\r\n >\r\n {{ 'igo.geo.measure.' + measureUnit | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<mat-label class=\"title mat-typography\"\r\n >{{ 'igo.geo.spatialFilter.search' | translate }} :\r\n</mat-label>\r\n<mat-radio-group [value]=\"selectedItemType\">\r\n <mat-radio-button\r\n *ngFor=\"let item of itemType\"\r\n [value]=\"item\"\r\n (change)=\"onItemTypeChange($event)\"\r\n >\r\n {{ 'igo.geo.spatialFilter.' + item | translate }}\r\n </mat-radio-button>\r\n</mat-radio-group>\r\n\r\n<div\r\n class=\"thematics\"\r\n *ngIf=\"\r\n (selectedItemType === 'Thematics' && !tableTemplate) ||\r\n (selectedItemType === 'Thematics' && tableTemplate && !listIsVisible)\r\n \"\r\n>\r\n <mat-table>\r\n <!-- Name Column -->\r\n <ng-container matColumnDef=\"name\">\r\n <mat-header-cell *matHeaderCellDef class=\"thematics-header\">{{\r\n 'igo.geo.spatialFilter.Thematics' | translate\r\n }}</mat-header-cell>\r\n </ng-container>\r\n\r\n <!-- Select Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef class=\"checks-header\">\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"selectedThematics.hasValue() && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\r\n </mat-table>\r\n\r\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\r\n <li class=\"mat-tree-node\">\r\n <!-- use a disabled button to provide padding for tree leaf -->\r\n <button mat-icon-button disabled></button>\r\n {{ node.name }}\r\n <mat-checkbox\r\n class=\"tree-check\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onToggleChange(node) : null\"\r\n [checked]=\"selectedThematics.isSelected(node)\"\r\n >\r\n </mat-checkbox>\r\n </li>\r\n </mat-tree-node>\r\n\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\r\n <div class=\"mat-tree-node\">\r\n <button mat-icon-button (click)=\"onToggleClick(node)\">\r\n <mat-icon\r\n [svgIcon]=\"\r\n treeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n {{ node.name }}\r\n <mat-checkbox\r\n class=\"tree-check-2\"\r\n (change)=\"$event ? childrensToggle(node) : null\"\r\n [checked]=\"isAllSelected(node)\"\r\n [indeterminate]=\"hasChildrenSelected(node) && !isAllSelected(node)\"\r\n >\r\n </mat-checkbox>\r\n </div>\r\n <ul\r\n class=\"tree-ul\"\r\n [class.example-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </ul>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n</div>\r\n\r\n<div class=\"buttons\">\r\n <button\r\n *ngIf=\"isPredefined()\"\r\n mat-raised-button\r\n class=\"clear-search-button\"\r\n [disabled]=\"disabledClearSearch()\"\r\n (click)=\"clearSearch()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.clearSearch' | translate }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"isPolygon() || isPoint()\"\r\n mat-raised-button\r\n class=\"clear-form-button\"\r\n [disabled]=\"this.formControl.value === null\"\r\n (click)=\"clearDrawZone()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.clearForm' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"search-button\"\r\n [disabled]=\"disableSearchButton()\"\r\n color=\"primary\"\r\n (click)=\"toggleSearchButton()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.goSearch' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"remove-button\"\r\n [disabled]=\"allLayers.length === 0\"\r\n (click)=\"clearButton()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.removeLayer' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"export-button\"\r\n [disabled]=\"!store.entities$.getValue().length\"\r\n (click)=\"export.emit()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.exportLayer' | translate }}\r\n </button>\r\n</div>\r\n\r\n<button\r\n class=\"chevron-down\"\r\n *ngIf=\"store.all().length && tableTemplate && !listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.showSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\"\r\n>\r\n <mat-icon svgIcon=\"chevron-down\"></mat-icon>\r\n</button>\r\n\r\n<div\r\n class=\"results\"\r\n *ngIf=\"store.all().length && tableTemplate && listIsVisible\"\r\n>\r\n <button\r\n *ngIf=\"listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.hideSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\"\r\n >\r\n <mat-icon svgIcon=\"chevron-up\"></mat-icon>\r\n </button>\r\n <igo-entity-table\r\n class=\"results-list\"\r\n [template]=\"tableTemplate\"\r\n [store]=\"store\"\r\n (entitySelectChange)=\"entityChange.emit($event)\"\r\n >\r\n </igo-entity-table>\r\n</div>\r\n", styles: [":host .header{margin-top:5px;width:100%}:host .mat-mdc-slide-toggle{padding:5px;width:100%}:host .mat-mdc-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .mat-mdc-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .title{margin-left:5px;font-size:initial}:host .mat-mdc-radio-group{display:flex;flex-direction:column}:host .mat-mdc-radio-button{display:inline-flex;position:relative;margin-left:12px}:host .mat-mdc-form-field{margin-top:5px}:host .mat-column-select{overflow:auto}:host .buttons{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:16px 0}:host .thematics{max-height:35%;overflow:auto;margin-top:5px;width:98%}:host .results{overflow:auto;max-height:250px;width:98%}:host .mat-column-typeResults{max-width:100px;margin-right:5px}:host .buffer-unit,:host .radius-unit{display:flex;width:100%;padding:5px;box-sizing:border-box}:host .radius,:host .buffer{flex-flow:column nowrap;flex:2}:host .unit-field{flex:1;margin-left:8px}:host .example-tree-invisible{display:none}:host .tree-ul{margin:0;padding:0 0 0 20px;list-style-type:none}:host .tree-check,:host .tree-check-2{position:relative;margin-left:auto;margin-right:5px}:host .thematics-header{max-width:250px}:host .checks-header{padding:none;max-width:calc(100% - 316px);overflow:hidden}:host .mat-mdc-checkbox{padding:5px}:host .mat-tree-node{position:relative;min-height:42px;width:280px}:host .mat-mdc-header-cell{height:56px}:host .results{max-height:45%;width:98%}:host .results igo-entity-table ::ng-deep div.table-container{overflow:unset}\n"] }]
|
|
788
|
-
|
|
802
|
+
args: [{ selector: 'igo-spatial-filter-item', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
803
|
+
GeometryFormFieldInputComponent,
|
|
804
|
+
FormsModule,
|
|
805
|
+
ReactiveFormsModule,
|
|
806
|
+
NgIf,
|
|
807
|
+
MatSlideToggleModule,
|
|
808
|
+
MatFormFieldModule,
|
|
809
|
+
MatInputModule,
|
|
810
|
+
MatSelectModule,
|
|
811
|
+
NgFor,
|
|
812
|
+
MatOptionModule,
|
|
813
|
+
MatRadioModule,
|
|
814
|
+
MatTableModule,
|
|
815
|
+
MatCheckboxModule,
|
|
816
|
+
MatTreeModule,
|
|
817
|
+
MatButtonModule,
|
|
818
|
+
MatIconModule,
|
|
819
|
+
MatTooltipModule,
|
|
820
|
+
EntityTableComponent,
|
|
821
|
+
AsyncPipe,
|
|
822
|
+
TranslateModule
|
|
823
|
+
], template: "<igo-geometry-form-field-input\r\n [formControl]=\"formControl\"\r\n [map]=\"map\"\r\n [geometryType]=\"geometryType\"\r\n [drawGuide]=\"drawGuide$ | async\"\r\n [measure]=\"measure\"\r\n [drawControlIsActive]=\"drawControlIsActive\"\r\n [freehandDrawIsActive]=\"freehandDrawIsActive\"\r\n [drawStyle]=\"drawStyle$ | async\"\r\n [overlayStyle]=\"overlayStyle$ | async\"\r\n [radius]=\"radius\"\r\n [predefinedRadius]=\"$any(predefinedRadius)\"\r\n>\r\n</igo-geometry-form-field-input>\r\n\r\n<div class=\"header\">\r\n <mat-slide-toggle\r\n *ngIf=\"!isPredefined()\"\r\n [checked]=\"drawControlIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onDrawControlChange()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.drawControl' | translate }}\r\n </mat-slide-toggle>\r\n <mat-slide-toggle\r\n *ngIf=\"!isPredefined()\"\r\n [checked]=\"freehandDrawIsActive\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"onfreehandControlChange()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.freehandControl' | translate }}\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"buffer-unit\" *ngIf=\"isPolygon()\">\r\n <mat-form-field class=\"buffer\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n placeholder=\"{{ 'igo.geo.spatialFilter.buffer' | translate }}\"\r\n [formControl]=\"bufferFormControl\"\r\n [value]=\"0\"\r\n [readonly]=\"this.formControl.value === null\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let measureUnit of measureUnits\"\r\n [value]=\"measureUnit\"\r\n >\r\n {{ 'igo.geo.measure.' + measureUnit | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<div class=\"radius-unit\" *ngIf=\"isPoint()\">\r\n <mat-form-field class=\"radius\">\r\n <input\r\n type=\"number\"\r\n matInput\r\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\r\n [formControl]=\"radiusFormControl\"\r\n [value]=\"1000\"\r\n (input)=\"getRadius()\"\r\n [readonly]=\"this.freehandDrawIsActive && this.formControl.value === null\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select\r\n [value]=\"measureUnit\"\r\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let measureUnit of measureUnits\"\r\n [value]=\"measureUnit\"\r\n >\r\n {{ 'igo.geo.measure.' + measureUnit | translate }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>\r\n\r\n<mat-label class=\"title mat-typography\"\r\n >{{ 'igo.geo.spatialFilter.search' | translate }} :\r\n</mat-label>\r\n<mat-radio-group [value]=\"selectedItemType\">\r\n <mat-radio-button\r\n *ngFor=\"let item of itemType\"\r\n [value]=\"item\"\r\n (change)=\"onItemTypeChange($event)\"\r\n >\r\n {{ 'igo.geo.spatialFilter.' + item | translate }}\r\n </mat-radio-button>\r\n</mat-radio-group>\r\n\r\n<div\r\n class=\"thematics\"\r\n *ngIf=\"\r\n (selectedItemType === 'Thematics' && !tableTemplate) ||\r\n (selectedItemType === 'Thematics' && tableTemplate && !listIsVisible)\r\n \"\r\n>\r\n <mat-table>\r\n <!-- Name Column -->\r\n <ng-container matColumnDef=\"name\">\r\n <mat-header-cell *matHeaderCellDef class=\"thematics-header\">{{\r\n 'igo.geo.spatialFilter.Thematics' | translate\r\n }}</mat-header-cell>\r\n </ng-container>\r\n\r\n <!-- Select Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <mat-header-cell *matHeaderCellDef class=\"checks-header\">\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"selectedThematics.hasValue() && !isAllSelected()\"\r\n >\r\n </mat-checkbox>\r\n </mat-header-cell>\r\n </ng-container>\r\n\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns\"></mat-header-row>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns\"></mat-row>\r\n </mat-table>\r\n\r\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <!-- This is the tree node template for leaf nodes -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle>\r\n <li class=\"mat-tree-node\">\r\n <!-- use a disabled button to provide padding for tree leaf -->\r\n <button mat-icon-button disabled></button>\r\n {{ node.name }}\r\n <mat-checkbox\r\n class=\"tree-check\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? onToggleChange(node) : null\"\r\n [checked]=\"selectedThematics.isSelected(node)\"\r\n >\r\n </mat-checkbox>\r\n </li>\r\n </mat-tree-node>\r\n\r\n <!-- This is the tree node template for expandable nodes -->\r\n <mat-nested-tree-node *matTreeNodeDef=\"let node; when: hasChild\">\r\n <div class=\"mat-tree-node\">\r\n <button mat-icon-button (click)=\"onToggleClick(node)\">\r\n <mat-icon\r\n [svgIcon]=\"\r\n treeControl.isExpanded(node) ? 'chevron-down' : 'chevron-right'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n {{ node.name }}\r\n <mat-checkbox\r\n class=\"tree-check-2\"\r\n (change)=\"$event ? childrensToggle(node) : null\"\r\n [checked]=\"isAllSelected(node)\"\r\n [indeterminate]=\"hasChildrenSelected(node) && !isAllSelected(node)\"\r\n >\r\n </mat-checkbox>\r\n </div>\r\n <ul\r\n class=\"tree-ul\"\r\n [class.example-tree-invisible]=\"!treeControl.isExpanded(node)\"\r\n >\r\n <ng-container matTreeNodeOutlet></ng-container>\r\n </ul>\r\n </mat-nested-tree-node>\r\n </mat-tree>\r\n</div>\r\n\r\n<div class=\"buttons\">\r\n <button\r\n *ngIf=\"isPredefined()\"\r\n mat-raised-button\r\n class=\"clear-search-button\"\r\n [disabled]=\"disabledClearSearch()\"\r\n (click)=\"clearSearch()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.clearSearch' | translate }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"isPolygon() || isPoint()\"\r\n mat-raised-button\r\n class=\"clear-form-button\"\r\n [disabled]=\"this.formControl.value === null\"\r\n (click)=\"clearDrawZone()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.clearForm' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"search-button\"\r\n [disabled]=\"disableSearchButton()\"\r\n color=\"primary\"\r\n (click)=\"toggleSearchButton()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.goSearch' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"remove-button\"\r\n [disabled]=\"allLayers.length === 0\"\r\n (click)=\"clearButton()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.removeLayer' | translate }}\r\n </button>\r\n\r\n <button\r\n mat-raised-button\r\n class=\"export-button\"\r\n [disabled]=\"!store.entities$.getValue().length\"\r\n (click)=\"export.emit()\"\r\n >\r\n {{ 'igo.geo.spatialFilter.exportLayer' | translate }}\r\n </button>\r\n</div>\r\n\r\n<button\r\n class=\"chevron-down\"\r\n *ngIf=\"store.all().length && tableTemplate && !listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.showSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\"\r\n>\r\n <mat-icon svgIcon=\"chevron-down\"></mat-icon>\r\n</button>\r\n\r\n<div\r\n class=\"results\"\r\n *ngIf=\"store.all().length && tableTemplate && listIsVisible\"\r\n>\r\n <button\r\n *ngIf=\"listIsVisible\"\r\n mat-icon-button\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.spatialFilter.hideSearchResults' | translate\"\r\n (click)=\"toggleVisibleList()\"\r\n >\r\n <mat-icon svgIcon=\"chevron-up\"></mat-icon>\r\n </button>\r\n <igo-entity-table\r\n class=\"results-list\"\r\n [template]=\"tableTemplate\"\r\n [store]=\"store\"\r\n (entitySelectChange)=\"entityChange.emit($event)\"\r\n >\r\n </igo-entity-table>\r\n</div>\r\n", styles: [":host .header{margin-top:5px;width:100%}:host .mat-mdc-slide-toggle{padding:5px;width:100%}:host .mat-mdc-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .mat-mdc-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .title{margin-left:5px;font-size:initial}:host .mat-mdc-radio-group{display:flex;flex-direction:column}:host .mat-mdc-radio-button{display:inline-flex;position:relative;margin-left:12px}:host .mat-mdc-form-field{margin-top:5px}:host .mat-column-select{overflow:auto}:host .buttons{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:16px 0}:host .thematics{max-height:35%;overflow:auto;margin-top:5px;width:98%}:host .results{overflow:auto;max-height:250px;width:98%}:host .mat-column-typeResults{max-width:100px;margin-right:5px}:host .buffer-unit,:host .radius-unit{display:flex;width:100%;padding:5px;box-sizing:border-box}:host .radius,:host .buffer{flex-flow:column nowrap;flex:2}:host .unit-field{flex:1;margin-left:8px}:host .example-tree-invisible{display:none}:host .tree-ul{margin:0;padding:0 0 0 20px;list-style-type:none}:host .tree-check,:host .tree-check-2{position:relative;margin-left:auto;margin-right:5px}:host .thematics-header{max-width:250px}:host .checks-header{padding:none;max-width:calc(100% - 316px);overflow:hidden}:host .mat-mdc-checkbox{padding:5px}:host .mat-tree-node{position:relative;min-height:42px;width:280px}:host .mat-mdc-header-cell{height:56px}:host .results{max-height:45%;width:98%}:host .results igo-entity-table ::ng-deep div.table-container{overflow:unset}\n"] }]
|
|
824
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.SpatialFilterService }, { type: i2.MessageService }, { type: i2.LanguageService }], propDecorators: { map: [{
|
|
789
825
|
type: Input
|
|
790
826
|
}], type: [{
|
|
791
827
|
type: Input
|
|
@@ -834,4 +870,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
834
870
|
}], entityChange: [{
|
|
835
871
|
type: Output
|
|
836
872
|
}] } });
|
|
837
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1maWx0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvc3BhdGlhbC1maWx0ZXIvc3BhdGlhbC1maWx0ZXItaXRlbS9zcGF0aWFsLWZpbHRlci1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9zcGF0aWFsLWZpbHRlci9zcGF0aWFsLWZpbHRlci1pdGVtL3NwYXRpYWwtZmlsdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVqRSxPQUFPLEVBQ0wsV0FBVyxFQUNYLGtDQUFrQyxFQUNsQyx5QkFBeUIsRUFFMUIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFNN0QsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxVQUFVLENBQUM7QUFFcEMsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlD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QkFHRixjQUFjO3NCQURqQixLQUFLO2dCQVNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsY0FBYztzQkFBdkIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBOZXN0ZWRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0VHJlZU5lc3RlZERhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRW50aXR5U3RvcmUsXHJcbiAgRW50aXR5U3RvcmVGaWx0ZXJTZWxlY3Rpb25TdHJhdGVneSxcclxuICBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLFxyXG4gIEVudGl0eVRhYmxlVGVtcGxhdGVcclxufSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcblxyXG5pbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xyXG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcclxuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9sR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcclxuaW1wb3J0IE9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XHJcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcclxuaW1wb3J0ICogYXMgb2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XHJcblxyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkJztcclxuaW1wb3J0IHsgRmVhdHVyZU1vdGlvbiwgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi8uLi9mZWF0dXJlJztcclxuaW1wb3J0IHsgR2VvSlNPTkdlb21ldHJ5IH0gZnJvbSAnLi4vLi4vLi4vZ2VvbWV0cnkvc2hhcmVkL2dlb21ldHJ5LmludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBMYXllciwgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi8uLi9sYXllci9zaGFyZWQnO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi8uLi9tYXAvc2hhcmVkL21hcCc7XHJcbmltcG9ydCB7IE1lYXN1cmVMZW5ndGhVbml0IH0gZnJvbSAnLi4vLi4vLi4vbWVhc3VyZSc7XHJcbmltcG9ydCB7XHJcbiAgU3BhdGlhbEZpbHRlclF1ZXJ5VHlwZSxcclxuICBTcGF0aWFsRmlsdGVyVHlwZVxyXG59IGZyb20gJy4uLy4uL3NoYXJlZC9zcGF0aWFsLWZpbHRlci5lbnVtJztcclxuaW1wb3J0IHsgU3BhdGlhbEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc3BhdGlhbC1maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEZlYXR1cmUgfSBmcm9tICcuLy4uLy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IFNwYXRpYWxGaWx0ZXJJdGVtVHlwZSB9IGZyb20gJy4vLi4vLi4vc2hhcmVkL3NwYXRpYWwtZmlsdGVyLmVudW0nO1xyXG5pbXBvcnQgeyBTcGF0aWFsRmlsdGVyVGhlbWF0aWMgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9zcGF0aWFsLWZpbHRlci5pbnRlcmZhY2UnO1xyXG5cclxuLyoqXHJcbiAqIFNwYXRpYWwtRmlsdGVyLUl0ZW0gKHNlYXJjaCBwYXJhbWV0ZXJzKVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tc3BhdGlhbC1maWx0ZXItaXRlbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NwYXRpYWwtZmlsdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NwYXRpYWwtZmlsdGVyLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BhdGlhbEZpbHRlckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHR5cGUoKTogU3BhdGlhbEZpbHRlclR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XHJcbiAgfVxyXG4gIHNldCB0eXBlKHR5cGU6IFNwYXRpYWxGaWx0ZXJUeXBlKSB7XHJcbiAgICB0aGlzLl90eXBlID0gdHlwZTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZW9tZXRyeVR5cGVzLmZpbmRJbmRleCgoZ2VvbSkgPT4gZ2VvbSA9PT0gdGhpcy50eXBlKTtcclxuICAgIHRoaXMuZ2VvbWV0cnlUeXBlID0gdGhpcy5nZW9tZXRyeVR5cGVzW2luZGV4XTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAgIHRoaXMucmFkaXVzID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5kcmF3R3VpZGUkLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLmRyYXdTdHlsZSQubmV4dCh1bmRlZmluZWQpO1xyXG5cclxuICAgIC8vIE5lY2Vzc2FyeSB0byBrZWVwIHJlZmVyZW5jZSB0byB0aGUgZ2VvbWV0cnkgZm9ybSBmaWVsZCBpbnB1dFxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBnZW9qc29uOiBHZW9KU09OR2VvbWV0cnkgPSB7XHJcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcclxuICAgICAgICBjb29yZGluYXRlczogJydcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShnZW9qc29uKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOZWNlc3NhcnkgdG8gYXBwbHkgdGhlIHJpZ2h0IHN0eWxlIHdoZW4gZ2VvbWV0cnkgdHlwZSBpcyBQb2ludFxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9pbnQpIHtcclxuICAgICAgdGhpcy5yYWRpdXMgPSAxMDAwOyAvLyBCYXNlIHJhZGl1c1xyXG4gICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMucmFkaXVzKTtcclxuICAgICAgdGhpcy5Qb2ludFN0eWxlID0gKFxyXG4gICAgICAgIGZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcclxuICAgICAgICByZXNvbHV0aW9uOiBudW1iZXJcclxuICAgICAgKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ2VvbSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBPbFBvaW50O1xyXG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gb2xwcm9qLnRyYW5zZm9ybShcclxuICAgICAgICAgIGdlb20uZ2V0Q29vcmRpbmF0ZXMoKSxcclxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXHJcbiAgICAgICAgICAnRVBTRzo0MzI2J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBvbFN0eWxlLlN0eWxlKHtcclxuICAgICAgICAgIGltYWdlOiBuZXcgb2xTdHlsZS5DaXJjbGUoe1xyXG4gICAgICAgICAgICByYWRpdXM6XHJcbiAgICAgICAgICAgICAgdGhpcy5yYWRpdXMgL1xyXG4gICAgICAgICAgICAgIE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIGNvb3JkaW5hdGVzWzFdKSAvXHJcbiAgICAgICAgICAgICAgcmVzb2x1dGlvbiwgLy8gTGF0aXR1ZGUgY29ycmVjdGlvblxyXG4gICAgICAgICAgICBzdHJva2U6IG5ldyBvbFN0eWxlLlN0cm9rZSh7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1KSdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGZpbGw6IG5ldyBvbFN0eWxlLkZpbGwoe1xyXG4gICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAxNTMsIDI1NSwgMC4yKSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMub3ZlcmxheVN0eWxlID0gdGhpcy5Qb2ludFN0eWxlO1xyXG4gICAgICB0aGlzLmRyYXdTdHlsZSQubmV4dCh0aGlzLm92ZXJsYXlTdHlsZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBJZiBnZW9tZXRyeSB0eXBlcyBpcyBQb2x5Z29uXHJcbiAgICAgIHRoaXMucmFkaXVzID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLlBvbHlTdHlsZSA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IG9sU3R5bGUuU3R5bGUoe1xyXG4gICAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xyXG4gICAgICAgICAgICB3aWR0aDogMixcclxuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1KSdcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgZmlsbDogbmV3IG9sU3R5bGUuRmlsbCh7XHJcbiAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAxNTMsIDI1NSwgMC4yKSdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGNvbG9yID0gWzAsIDE1MywgMjU1XTtcclxuICAgICAgY29uc3QgZHJhd1N0eWxlID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgb2xTdHlsZS5TdHlsZSh7XHJcbiAgICAgICAgICBpbWFnZTogbmV3IG9sU3R5bGUuQ2lyY2xlKHtcclxuICAgICAgICAgICAgcmFkaXVzOiA4LFxyXG4gICAgICAgICAgICBzdHJva2U6IG5ldyBvbFN0eWxlLlN0cm9rZSh7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1KSdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGZpbGw6IG5ldyBvbFN0eWxlLkZpbGwoe1xyXG4gICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAxNTMsIDI1NSwgMC4yKSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IuY29uY2F0KFsxXSksXHJcbiAgICAgICAgICAgIHdpZHRoOiAyXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGZpbGw6IG5ldyBvbFN0eWxlLkZpbGwoe1xyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IuY29uY2F0KFswLjJdKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5vdmVybGF5U3R5bGUgPSB0aGlzLlBvbHlTdHlsZTtcclxuICAgICAgdGhpcy5kcmF3U3R5bGUkLm5leHQoZHJhd1N0eWxlKTtcclxuICAgIH1cclxuICAgIHRoaXMub3ZlcmxheVN0eWxlJC5uZXh0KHRoaXMub3ZlcmxheVN0eWxlKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdHlwZTogU3BhdGlhbEZpbHRlclR5cGU7XHJcblxyXG4gIEBJbnB1dCgpIHF1ZXJ5VHlwZTogU3BhdGlhbEZpbHRlclF1ZXJ5VHlwZTtcclxuXHJcbiAgQElucHV0KCkgem9uZTogRmVhdHVyZTtcclxuXHJcbiAgQElucHV0KCkgbG9hZGluZztcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgc3RvcmUoKTogRW50aXR5U3RvcmU8RmVhdHVyZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlO1xyXG4gIH1cclxuICBzZXQgc3RvcmUoc3RvcmU6IEVudGl0eVN0b3JlPEZlYXR1cmU+KSB7XHJcbiAgICB0aGlzLl9zdG9yZSA9IHN0b3JlO1xyXG4gICAgdGhpcy5fc3RvcmUuZW50aXRpZXMkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N0b3JlOiBFbnRpdHlTdG9yZTxGZWF0dXJlPjtcclxuXHJcbiAgLyoqXHJcbiAgICogQXZhaWxhYmxlIG1lYXN1cmUgdW5pdHMgZm9yIHRoZSBtZWFzdXJlIHR5cGUgZ2l2ZW5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgbWVhc3VyZVVuaXRzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzLCBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzXTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGxheWVyczogTGF5ZXJbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBhbGxMYXllcnM6IExheWVyW10gPSBbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgdGhlbWF0aWNMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90aGVtYXRpY0xlbmd0aDtcclxuICB9XHJcbiAgc2V0IHRoZW1hdGljTGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3RoZW1hdGljTGVuZ3RoID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RoZW1hdGljTGVuZ3RoOiBudW1iZXI7XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKSBpdGVtVHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U3BhdGlhbEZpbHRlckl0ZW1UeXBlPigpO1xyXG5cclxuICBAT3V0cHV0KCkgdGhlbWF0aWNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNwYXRpYWxGaWx0ZXJUaGVtYXRpY1tdPigpO1xyXG5cclxuICBAT3V0cHV0KCkgZHJhd1pvbmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RmVhdHVyZT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIGJ1ZmZlckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpIHpvbmVXaXRoQnVmZmVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGZWF0dXJlPigpO1xyXG4gIEBPdXRwdXQoKSBtZWFzdXJlVW5pdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVhc3VyZUxlbmd0aFVuaXQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSByYWRpdXNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBmcmVlaGFuZENvbnRyb2wgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIHByZWRlZmluZWRSYWRpdXMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBjbGVhckJ1dHRvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KCkgY2xlYXJTZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIGV4cG9ydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIG9wZW5Xb3Jrc3BhY2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGVudGl0eUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwdWJsaWMgaXRlbVR5cGU6IFNwYXRpYWxGaWx0ZXJJdGVtVHlwZVtdID0gW1xyXG4gICAgU3BhdGlhbEZpbHRlckl0ZW1UeXBlLkFkZHJlc3MsXHJcbiAgICBTcGF0aWFsRmlsdGVySXRlbVR5cGUuVGhlbWF0aWNzXHJcbiAgXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtVHlwZTogU3BhdGlhbEZpbHRlckl0ZW1UeXBlID1cclxuICAgIFNwYXRpYWxGaWx0ZXJJdGVtVHlwZS5BZGRyZXNzO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFNvdXJjZUFkZHJlc3M7XHJcblxyXG4gIHRyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxTcGF0aWFsRmlsdGVyVGhlbWF0aWM+ID1cclxuICAgIG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxTcGF0aWFsRmlsdGVyVGhlbWF0aWM+KChub2RlKSA9PiBub2RlLmNoaWxkcmVuKTtcclxuXHJcbiAgLy8gRm9yIHRoZW1hdGljcyBhbmQgcmVzdWx0cyB0YWJsZXNcclxuICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbJ25hbWUnLCAnc2VsZWN0J107XHJcbiAgcHVibGljIGNoaWxkcmVuczogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICBwdWJsaWMgZ3JvdXBzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyB0aGVtYXRpY3M6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpY1tdID0gW107XHJcbiAgcHVibGljIGRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZU5lc3RlZERhdGFTb3VyY2U8U3BhdGlhbEZpbHRlclRoZW1hdGljPigpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFRoZW1hdGljcyA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxTcGF0aWFsRmlsdGVyVGhlbWF0aWM+KFxyXG4gICAgdHJ1ZSxcclxuICAgIFtdXHJcbiAgKTtcclxuXHJcbiAgLy8gRm9yIGdlb21ldHJ5IGZvcm0gZmllbGQgaW5wdXRcclxuICB2YWx1ZSQ6IEJlaGF2aW9yU3ViamVjdDxHZW9KU09OR2VvbWV0cnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIGRyYXdHdWlkZSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuICBvdmVybGF5U3R5bGUkOiBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBvbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBvbFN0eWxlLlN0eWxlKVxyXG4gID4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgZHJhd1N0eWxlJDogQmVoYXZpb3JTdWJqZWN0PFxyXG4gICAgb2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gb2xTdHlsZS5TdHlsZSlcclxuICA+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG5cclxuICBwcml2YXRlIHZhbHVlJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHJhZGl1c0NoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgYnVmZmVyQ2hhbmdlcyQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHB1YmxpYyBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICBwdWJsaWMgZ2VvbWV0cnlUeXBlOiBUeXBlIHwgc3RyaW5nO1xyXG4gIHB1YmxpYyBnZW9tZXRyeVR5cGVGaWVsZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBnZW9tZXRyeVR5cGVzOiBzdHJpbmdbXSA9IFsnUG9pbnQnLCAnUG9seWdvbiddO1xyXG4gIHB1YmxpYyBkcmF3R3VpZGVGaWVsZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkcmF3R3VpZGU6IG51bWJlciA9IG51bGw7XHJcbiAgcHVibGljIGRyYXdHdWlkZVBsYWNlaG9sZGVyID0gJyc7XHJcbiAgcHVibGljIG1lYXN1cmUgPSBmYWxzZTtcclxuICBwdWJsaWMgZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IHRydWU7XHJcbiAgcHVibGljIGZyZWVoYW5kRHJhd0lzQWN0aXZlID0gZmFsc2U7XHJcbiAgcHVibGljIGRyYXdTdHlsZTogb2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gb2xTdHlsZS5TdHlsZSk7XHJcbiAgcHVibGljIGRyYXdab25lO1xyXG4gIHB1YmxpYyBvdmVybGF5U3R5bGU6IG9sU3R5bGUuU3R5bGUgfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IG9sU3R5bGUuU3R5bGUpO1xyXG4gIHB1YmxpYyBQb2ludFN0eWxlOiBvbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBvbFN0eWxlLlN0eWxlKTtcclxuICBwdWJsaWMgUG9seVN0eWxlOiBvbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBvbFN0eWxlLlN0eWxlKTtcclxuXHJcbiAgcHVibGljIHJhZGl1czogbnVtYmVyO1xyXG4gIHB1YmxpYyBidWZmZXI6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIHJhZGl1c0Zvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyBidWZmZXJGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgcHVibGljIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCA9IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycztcclxuICBwdWJsaWMgem9uZVdpdGhCdWZmZXI7XHJcblxyXG4gIHB1YmxpYyBsaXN0SXNWaXNpYmxlID0gdHJ1ZTtcclxuICBwdWJsaWMgdGFibGVUZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc3BhdGlhbEZpbHRlclNlcnZpY2U6IFNwYXRpYWxGaWx0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc3BhdGlhbEZpbHRlclNlcnZpY2VcclxuICAgICAgLmxvYWRUaGVtYXRpY3NMaXN0KClcclxuICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpY1tdKSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICB0aGlzLmNoaWxkcmVucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgdGhpcy5jaGlsZHJlbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8udGVycmFwaS5saW1pdGVzJylcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGxpbWl0czogU3BhdGlhbEZpbHRlclRoZW1hdGljID0ge1xyXG4gICAgICAgICAgbmFtZTogdGhpcy5ncm91cHNbMF0sXHJcbiAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGhlbWF0aWNzLnB1c2gobGltaXRzKTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVucy5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoaWxkLmdyb3VwICYmIHRoaXMuZ3JvdXBzLmluZGV4T2YoY2hpbGQuZ3JvdXApID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKGNoaWxkLmdyb3VwKTtcclxuICAgICAgICAgICAgY29uc3QgdGhlbWF0aWM6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYyA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjaGlsZC5ncm91cCxcclxuICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy50aGVtYXRpY3MucHVzaCh0aGVtYXRpYyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCFjaGlsZC5ncm91cCkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgY2hpbGQubmFtZSA9PT1cclxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAgICAgICAnaWdvLmdlby50ZXJyYXBpLkFkbVJlZ2lvbidcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICBjaGlsZC5uYW1lID09PVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8udGVycmFwaS5NdW4nKSB8fFxyXG4gICAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICAgICAgICAgJ2lnby5nZW8udGVycmFwaS5BcnJvbmQnXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgY2hpbGQubmFtZSA9PT1cclxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAgICAgICAnaWdvLmdlby50ZXJyYXBpLkNpcmNGZWQnXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgY2hpbGQubmFtZSA9PT1cclxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAgICAgICAnaWdvLmdlby50ZXJyYXBpLkNpcmNQcm92J1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICAgICAgICAgJ2lnby5nZW8udGVycmFwaS5EaXJSZWcnXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgY2hpbGQubmFtZSA9PT1cclxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuTVJDJykgfHxcclxuICAgICAgICAgICAgICBjaGlsZC5uYW1lID09PVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAgICAgICAgICdpZ28uZ2VvLnRlcnJhcGkuUmVnVG91cidcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgY2hpbGQuZ3JvdXAgPSBsaW1pdHMubmFtZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBjaGlsZC5uYW1lID09PVxyXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkucm91dGVzJylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgY2hpbGQuZ3JvdXAgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICAgICAgICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuZ3JvdXAudHJhbnNwb3J0J1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGhlbWF0aWM6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYyA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGNoaWxkLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICBzb3VyY2U6IGNoaWxkLnNvdXJjZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgdGhpcy50aGVtYXRpY3MucHVzaCh0aGVtYXRpYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudGhlbWF0aWNzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRoZW1hdGljcy5mb3JFYWNoKCh0aGVtYXRpYykgPT4ge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVucykge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuZ3JvdXAgPT09IHRoZW1hdGljLm5hbWUpIHtcclxuICAgICAgICAgICAgICB0aGVtYXRpYy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudGhlbWF0aWNzO1xyXG5cclxuICAgIHRoaXMuZHJhd0d1aWRlJC5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy52YWx1ZSQubmV4dChcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgOiB1bmRlZmluZWRcclxuICAgICk7XHJcbiAgICB0aGlzLnZhbHVlJCQgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXHJcbiAgICAgICh2YWx1ZTogR2VvSlNPTkdlb21ldHJ5KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlJC5uZXh0KHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuZHJhd1pvbmUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIGFzIEZlYXR1cmU7XHJcbiAgICAgICAgICBpZiAodGhpcy5idWZmZXIgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3Wm9uZUV2ZW50LmVtaXQodGhpcy5kcmF3Wm9uZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5idWZmZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICB0aGlzLmRyYXdab25lID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdldFJhZGl1cygpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmFkaXVzQ2hhbmdlcyQkID0gdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5nZXRSYWRpdXMoKTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmJ1ZmZlckNoYW5nZXMkJCA9IHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycyAmJlxyXG4gICAgICAgICAgdmFsdWUgPiAwICYmXHJcbiAgICAgICAgICB2YWx1ZSA8PSAxMDAwMDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLmJ1ZmZlckV2ZW50LmVtaXQodmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5zcGF0aWFsRmlsdGVyU2VydmljZVxyXG4gICAgICAgICAgICAubG9hZEJ1ZmZlckdlb21ldHJ5KHRoaXMuZHJhd1pvbmUsIFNwYXRpYWxGaWx0ZXJUeXBlLlBvbHlnb24sIHZhbHVlKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChmZWF0dXJlR2VvbTogRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXIgPSBmZWF0dXJlR2VvbTtcclxuICAgICAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyQ2hhbmdlLmVtaXQodGhpcy56b25lV2l0aEJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzICYmXHJcbiAgICAgICAgICB2YWx1ZSA+IDAgJiZcclxuICAgICAgICAgIHZhbHVlIDw9IDEwMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMuYnVmZmVyRXZlbnQuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLnNwYXRpYWxGaWx0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5sb2FkQnVmZmVyR2VvbWV0cnkoXHJcbiAgICAgICAgICAgICAgdGhpcy5kcmF3Wm9uZSxcclxuICAgICAgICAgICAgICBTcGF0aWFsRmlsdGVyVHlwZS5Qb2x5Z29uLFxyXG4gICAgICAgICAgICAgIHZhbHVlICogMTAwMFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZlYXR1cmVHZW9tOiBGZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy56b25lV2l0aEJ1ZmZlciA9IGZlYXR1cmVHZW9tO1xyXG4gICAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXJDaGFuZ2UuZW1pdCh0aGlzLnpvbmVXaXRoQnVmZmVyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMuYnVmZmVyRXZlbnQuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLmRyYXdab25lKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgdmFsdWUgPCAwIHx8XHJcbiAgICAgICAgICAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzICYmIHZhbHVlID4gMTAwMDAwKSB8fFxyXG4gICAgICAgICAgKHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0LktpbG9tZXRlcnMgJiYgdmFsdWUgPiAxMDApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSAwO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcclxuICAgICAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5idWZmZXJBbGVydCcsXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIud2FybmluZydcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFJlY29yZFN0cmF0ZWd5ID0gbmV3IEVudGl0eVN0b3JlRmlsdGVyU2VsZWN0aW9uU3RyYXRlZ3koe30pO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3koe1xyXG4gICAgICBsYXllcjogbmV3IFZlY3RvckxheWVyKHtcclxuICAgICAgICB6SW5kZXg6IDMwMCxcclxuICAgICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxyXG4gICAgICAgIHN0eWxlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgc2hvd0luTGF5ZXJMaXN0OiBmYWxzZSxcclxuICAgICAgICBleHBvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgICBicm93c2FibGU6IGZhbHNlXHJcbiAgICAgIH0pLFxyXG4gICAgICBtYXA6IHRoaXMubWFwLFxyXG4gICAgICBoaXRUb2xlcmFuY2U6IDE1LFxyXG4gICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCxcclxuICAgICAgbWFueTogdHJ1ZSxcclxuICAgICAgZHJhZ0JveDogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdG9yZS5hZGRTdHJhdGVneShzZWxlY3Rpb25TdHJhdGVneSwgdHJ1ZSk7XHJcbiAgICB0aGlzLnN0b3JlLmFkZFN0cmF0ZWd5KHNlbGVjdGVkUmVjb3JkU3RyYXRlZ3ksIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIHRvIHRoZSB2YWx1ZSBzdHJlYW1cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudmFsdWUkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5yYWRpdXNDaGFuZ2VzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYnVmZmVyQ2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGFjaCgpO1xyXG4gICAgaWYgKHRoaXMucmFkaXVzQ2hhbmdlcyQkKSB7XHJcbiAgICAgIHRoaXMucmFkaXVzQ2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWx1ZSQkKSB7XHJcbiAgICAgIHRoaXMudmFsdWUkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtVHlwZUNoYW5nZShldmVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID0gZXZlbnQudmFsdWU7XHJcbiAgICB0aGlzLml0ZW1UeXBlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1UeXBlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgbWVhc3VyZSB1bml0XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25NZWFzdXJlVW5pdENoYW5nZSh1bml0OiBNZWFzdXJlTGVuZ3RoVW5pdCkge1xyXG4gICAgaWYgKHVuaXQgPT09IHRoaXMubWVhc3VyZVVuaXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9IHVuaXQ7XHJcbiAgICAgIHRoaXMubWVhc3VyZVVuaXRDaGFuZ2UuZW1pdCh0aGlzLm1lYXN1cmVVbml0KTtcclxuICAgICAgaWYgKHRoaXMuaXNQb2x5Z29uKCkpIHtcclxuICAgICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnNcclxuICAgICAgICAgID8gdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlICogMTAwMClcclxuICAgICAgICAgIDogdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlIC8gMTAwMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNQb2ludCgpKSB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzXHJcbiAgICAgICAgICA/IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAqIDEwMDApXHJcbiAgICAgICAgICA6IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAvIDEwMDBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNQcmVkZWZpbmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGlzUG9seWdvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNwYXRpYWxGaWx0ZXJUeXBlLlBvbHlnb247XHJcbiAgfVxyXG5cclxuICBpc1BvaW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9pbnQ7XHJcbiAgfVxyXG5cclxuICBoYXNDaGlsZChfOiBudW1iZXIsIG5vZGU6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25Ub2dnbGVDbGljayhub2RlOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcclxuICAgIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKVxyXG4gICAgICA/IHRoaXMudHJlZUNvbnRyb2wuY29sbGFwc2Uobm9kZSlcclxuICAgICAgOiB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcclxuICB9XHJcblxyXG4gIGlzQWxsU2VsZWN0ZWQobm9kZT86IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgbGV0IG51bVNlbGVjdGVkO1xyXG4gICAgbGV0IG51bU5vZGVzID0gMDtcclxuICAgIGlmICghbm9kZSkge1xyXG4gICAgICBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgICB0aGlzLnRoZW1hdGljcy5mb3JFYWNoKCh0aGVtYXRpYykgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3Vwcy5pbmRleE9mKHRoZW1hdGljLm5hbWUpID09PSAtMSkge1xyXG4gICAgICAgICAgbnVtTm9kZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNoaWxkcmVucy5mb3JFYWNoKChjaGlsZHJlbikgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnRoZW1hdGljcy5maW5kKFxyXG4gICAgICAgICAgICAodGhlbWF0aWMpID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gY2hpbGRyZW4uc291cmNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBudW1Ob2RlcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBudW1TZWxlY3RlZCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkcmVuKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgICAodGhlbWF0aWMpID0+IHRoZW1hdGljID09PSBjaGlsZHJlblxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbnVtTm9kZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChudW1Ob2RlcyA+PSAxKSB7XHJcbiAgICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtTm9kZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNDaGlsZHJlblNlbGVjdGVkKG5vZGU6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgbGV0IGJvb2wgPSBmYWxzZTtcclxuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAgICh0aGVtYXRpYykgPT4gdGhlbWF0aWMuc291cmNlID09PSBjaGlsZC5zb3VyY2VcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIGJvb2wgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBib29sO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgaGVhZGVyIGNoZWNrYm94XHJcbiAgICovXHJcbiAgbWFzdGVyVG9nZ2xlKCkge1xyXG4gICAgdGhpcy5pc0FsbFNlbGVjdGVkKCkgPyB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLmNsZWFyKCkgOiB0aGlzLnNlbGVjdEFsbCgpO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVGhlbWF0aWNzTmFtZTogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xyXG4gICAgICBzZWxlY3RlZFRoZW1hdGljc05hbWUucHVzaCh0aGVtYXRpYyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XHJcbiAgICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2goKHRoZW1hdGljKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGQoMCwgdGhlbWF0aWMpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGVtYXRpYyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2goKHRoZW1hdGljKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGQoMCwgdGhlbWF0aWMpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKHRoZW1hdGljKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy50aGVtYXRpY0NoYW5nZS5lbWl0KHNlbGVjdGVkVGhlbWF0aWNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwobm9kZT86IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgaWYgKCFub2RlKSB7XHJcbiAgICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2goKHRoZW1hdGljKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzLmluZGV4T2YodGhlbWF0aWMubmFtZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdCh0aGVtYXRpYyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jaGlsZHJlbnMuZm9yRWFjaCgoY2hpbGRyZW4pID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgICAodGhlbWF0aWMpID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gY2hpbGRyZW4uc291cmNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdChjaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmhhc0NoaWxkKDAsIG5vZGUpKSB7XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZHJlbikgPT5cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0KGNoaWxkcmVuKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoaWxkcmVuc1RvZ2dsZShub2RlOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcclxuICAgIHRoaXMuaXNBbGxTZWxlY3RlZChub2RlKVxyXG4gICAgICA/IG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3MuZGVzZWxlY3QoY2hpbGQpKVxyXG4gICAgICA6IHRoaXMuc2VsZWN0QWxsKG5vZGUpO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVGhlbWF0aWNzTmFtZTogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xyXG4gICAgICBzZWxlY3RlZFRoZW1hdGljc05hbWUucHVzaCh0aGVtYXRpYyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcclxuICAgIHRoaXMudGhlbWF0aWNDaGFuZ2UuZW1pdChzZWxlY3RlZFRoZW1hdGljc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgY2hhbmdlcyB0byB0aGUgdGhlbWF0aWNzIHNlbGVjdGVkIHRyZWUgYW5kIGVtaXQgZXZlbnRcclxuICAgKi9cclxuICBvblRvZ2dsZUNoYW5nZShub2RlU2VsZWN0ZWQ6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAodGhlbWF0aWMpID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gbm9kZVNlbGVjdGVkLnNvdXJjZVxyXG4gICAgICApICE9PSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICBzZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGlsZHJlbnMuZm9yRWFjaCgoY2hpbGRyZW4pID0+IHtcclxuICAgICAgaWYgKGNoaWxkcmVuID09PSBub2RlU2VsZWN0ZWQgJiYgc2VsZWN0ZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3QoY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGlsZHJlbiA9PT0gbm9kZVNlbGVjdGVkICYmIHNlbGVjdGVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5kZXNlbGVjdChjaGlsZHJlbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy50aGVtYXRpY3MuZm9yRWFjaCgodGhlbWF0aWMpID0+IHtcclxuICAgICAgaWYgKHRoZW1hdGljID09PSBub2RlU2VsZWN0ZWQgJiYgc2VsZWN0ZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3QodGhlbWF0aWMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGVtYXRpYyA9PT0gbm9kZVNlbGVjdGVkICYmIHNlbGVjdGVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5kZXNlbGVjdCh0aGVtYXRpYyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVGhlbWF0aWNzTmFtZTogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xyXG4gICAgICBzZWxlY3RlZFRoZW1hdGljc05hbWUucHVzaCh0aGVtYXRpYyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRoZW1hdGljQ2hhbmdlLmVtaXQoc2VsZWN0ZWRUaGVtYXRpY3NOYW1lKTtcclxuICB9XHJcblxyXG4gIG9uRHJhd0NvbnRyb2xDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmRyYXdDb250cm9sSXNBY3RpdmUgPSAhdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgb25mcmVlaGFuZENvbnRyb2xDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlID0gIXRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmU7XHJcbiAgICB0aGlzLmZyZWVoYW5kQ29udHJvbC5lbWl0KHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpO1xyXG4gICAgaWYgKHRoaXMuaXNQb2ludCgpKSB7XHJcbiAgICAgIHRoaXMucHJlZGVmaW5lZFJhZGl1cy5lbWl0KCF0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKTtcclxuICAgICAgaWYgKHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLm92ZXJsYXlTdHlsZSQubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMuZHJhd1N0eWxlJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJlZGVmaW5lZFJhZGl1cy5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExhdW5jaCBzZWFyY2ggYnV0dG9uXHJcbiAgICovXHJcbiAgdG9nZ2xlU2VhcmNoQnV0dG9uKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzUHJlZGVmaW5lZCgpKSB7XHJcbiAgICAgIGlmICh0aGlzLmJ1ZmZlciA+IDApIHtcclxuICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyLm1ldGEgPSB7XHJcbiAgICAgICAgICBpZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdGl0bGU6ICdab25lJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy56b25lV2l0aEJ1ZmZlci5wcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgbm9tOiAnWm9uZScsXHJcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLnpvbmVXaXRoQnVmZmVyKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRyYXdab25lLm1ldGEgPSB7XHJcbiAgICAgICAgICBpZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdGl0bGU6ICdab25lJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5kcmF3Wm9uZS5wcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgbm9tOiAnWm9uZScsXHJcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLmRyYXdab25lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNQb2ludCgpKSB7XHJcbiAgICAgIHRoaXMucmFkaXVzRXZlbnQuZW1pdCh0aGlzLnJhZGl1cyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNQb2x5Z29uKCkpIHtcclxuICAgICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KHRoaXMuYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMudG9nZ2xlU2VhcmNoLmVtaXQoKTtcclxuICAgIHRoaXMuc3RvcmUuZW50aXRpZXMkLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCAmJiB0aGlzLmxheWVycy5sZW5ndGggPT09IHRoaXMudGhlbWF0aWNMZW5ndGggKyAxKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuV29ya3NwYWNlLmVtaXQoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZVRhYmxlVGVtcGxhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMYXVuY2ggY2xlYXIgYnV0dG9uIChjbGVhciBzdG9yZSBhbmQgbWFwIGxheWVycylcclxuICAgKi9cclxuICBjbGVhckJ1dHRvbigpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5zdG9yZSkge1xyXG4gICAgICB0aGlzLnN0b3JlLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1BvaW50KCkgfHwgdGhpcy5pc1BvbHlnb24oKSkge1xyXG4gICAgICB0aGlzLmRyYXdab25lID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgdGhpcy5idWZmZXIgPSAwO1xyXG4gICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KDApO1xyXG4gICAgdGhpcy5jbGVhckJ1dHRvbkV2ZW50LmVtaXQoKTtcclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy50YWJsZVRlbXBsYXRlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJEcmF3Wm9uZSgpIHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAgIHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoMCk7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMYXVuY2ggY2xlYXIgc2VhcmNoIChjbGVhciBmaWVsZCBpZiB0eXBlIGlzIHByZWRlZmluZWQpXHJcbiAgICovXHJcbiAgY2xlYXJTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLmNsZWFyKCk7XHJcbiAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgdGhpcy5idWZmZXIgPSAwO1xyXG4gICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KDApO1xyXG4gICAgdGhpcy50aGVtYXRpY0NoYW5nZS5lbWl0KFtdKTtcclxuICAgIHRoaXMuY2xlYXJTZWFyY2hFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWZXJpZnkgY29uZGl0aW9ucyBvZiBpbmNvbXBsZXRlIGZpZWxkcyBvciBidXN5IHNlcnZpY2VcclxuICAgKi9cclxuICBkaXNhYmxlU2VhcmNoQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuQWRkcmVzcykge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5VHlwZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuem9uZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuVGhlbWF0aWNzKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5xdWVyeVR5cGUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy56b25lICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy50eXBlID09PSBTcGF0aWFsRmlsdGVyVHlwZS5Qb2x5Z29uIHx8XHJcbiAgICAgIHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9pbnRcclxuICAgICkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuQWRkcmVzcyAmJlxyXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IG51bGxcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuVGhlbWF0aWNzKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBudWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlZENsZWFyU2VhcmNoKCkge1xyXG4gICAgbGV0IGRpc2FibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuQWRkcmVzc1xyXG4gICAgICA/IChkaXNhYmxlID0gdGhpcy5xdWVyeVR5cGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgOiAoZGlzYWJsZSA9XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5VHlwZSA9PT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCk7XHJcblxyXG4gICAgcmV0dXJuIGRpc2FibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYW5hZ2UgcmFkaXVzIHZhbHVlIGF0IHVzZXIgY2hhbmdlXHJcbiAgICovXHJcbiAgZ2V0UmFkaXVzKCkge1xyXG4gICAgbGV0IGZvcm1WYWx1ZTtcclxuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVyc1xyXG4gICAgICAgID8gKGZvcm1WYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUucmFkaXVzKVxyXG4gICAgICAgIDogKGZvcm1WYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUucmFkaXVzIC8gMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3JtVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9pbnQpIHtcclxuICAgICAgaWYgKCF0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSA8IDAgfHxcclxuICAgICAgICAgICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMgJiZcclxuICAgICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSA+PSAxMDAwMDApIHx8XHJcbiAgICAgICAgICAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuS2lsb21ldGVycyAmJlxyXG4gICAgICAgICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlID49IDEwMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQoXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIucmFkaXVzQWxlcnQnLFxyXG4gICAgICAgICAgICAnaWdvLmdlby5zcGF0aWFsRmlsdGVyLndhcm5pbmcnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5yYWRpdXMgPSAxMDAwO1xyXG4gICAgICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzXHJcbiAgICAgICAgICAgID8gdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnJhZGl1cylcclxuICAgICAgICAgICAgOiB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMucmFkaXVzIC8gMTAwMCk7XHJcbiAgICAgICAgICB0aGlzLmRyYXdHdWlkZSQubmV4dCh0aGlzLnJhZGl1cyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChmb3JtVmFsdWUpIHtcclxuICAgICAgICAgIGlmIChmb3JtVmFsdWUgPj0gMTAwMDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQoXHJcbiAgICAgICAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5yYWRpdXNBbGVydCcsXHJcbiAgICAgICAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci53YXJuaW5nJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChmb3JtVmFsdWUgIT09IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZShmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMpIHtcclxuICAgICAgICB0aGlzLnJhZGl1cyA9IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgdGhpcy5kcmF3R3VpZGUkLm5leHQodGhpcy5yYWRpdXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmFkaXVzID0gdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAqIDEwMDA7XHJcbiAgICAgICAgdGhpcy5kcmF3R3VpZGUkLm5leHQodGhpcy5yYWRpdXMgKiAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm92ZXJsYXlTdHlsZSQubmV4dCh0aGlzLlBvaW50U3R5bGUpO1xyXG4gICAgICB0aGlzLmRyYXdTdHlsZSQubmV4dCh0aGlzLlBvaW50U3R5bGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVmlzaWJsZUxpc3QoKSB7XHJcbiAgICB0aGlzLmxpc3RJc1Zpc2libGUgPSAhdGhpcy5saXN0SXNWaXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVUYWJsZVRlbXBsYXRlKCkge1xyXG4gICAgY29uc3QgdHlwZUNvbHVtbiA9IHtcclxuICAgICAgbmFtZTogJ21ldGEudGl0bGUnLFxyXG4gICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci50eXBlJ1xyXG4gICAgICApLFxyXG4gICAgICByZW5kZXJlcjogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUxcclxuICAgIH07XHJcbiAgICBjb25zdCBuYW1lQ29sdW1uID0ge1xyXG4gICAgICBuYW1lOiAncHJvcGVydGllcy5ub20nLFxyXG4gICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5zZWFyY2hSZXN1bHRzJ1xyXG4gICAgICApLFxyXG4gICAgICByZW5kZXJlcjogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb2x1bW5zID0gW3R5cGVDb2x1bW4sIG5hbWVDb2x1bW5dO1xyXG5cclxuICAgIHRoaXMudGFibGVUZW1wbGF0ZSA9IHtcclxuICAgICAgc2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICBzb3J0OiB0cnVlLFxyXG4gICAgICBjb2x1bW5zXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCI8aWdvLWdlb21ldHJ5LWZvcm0tZmllbGQtaW5wdXRcclxuICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxyXG4gIFttYXBdPVwibWFwXCJcclxuICBbZ2VvbWV0cnlUeXBlXT1cImdlb21ldHJ5VHlwZVwiXHJcbiAgW2RyYXdHdWlkZV09XCJkcmF3R3VpZGUkIHwgYXN5bmNcIlxyXG4gIFttZWFzdXJlXT1cIm1lYXN1cmVcIlxyXG4gIFtkcmF3Q29udHJvbElzQWN0aXZlXT1cImRyYXdDb250cm9sSXNBY3RpdmVcIlxyXG4gIFtmcmVlaGFuZERyYXdJc0FjdGl2ZV09XCJmcmVlaGFuZERyYXdJc0FjdGl2ZVwiXHJcbiAgW2RyYXdTdHlsZV09XCJkcmF3U3R5bGUkIHwgYXN5bmNcIlxyXG4gIFtvdmVybGF5U3R5bGVdPVwib3ZlcmxheVN0eWxlJCB8IGFzeW5jXCJcclxuICBbcmFkaXVzXT1cInJhZGl1c1wiXHJcbiAgW3ByZWRlZmluZWRSYWRpdXNdPVwicHJlZGVmaW5lZFJhZGl1c1wiXHJcbj5cclxuPC9pZ28tZ2VvbWV0cnktZm9ybS1maWVsZC1pbnB1dD5cclxuXHJcbjxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgKm5nSWY9XCIhaXNQcmVkZWZpbmVkKClcIlxyXG4gICAgW2NoZWNrZWRdPVwiZHJhd0NvbnRyb2xJc0FjdGl2ZVwiXHJcbiAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAoY2hhbmdlKT1cIm9uRHJhd0NvbnRyb2xDaGFuZ2UoKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5kcmF3Q29udHJvbCcgfCB0cmFuc2xhdGUgfX1cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICpuZ0lmPVwiIWlzUHJlZGVmaW5lZCgpXCJcclxuICAgIFtjaGVja2VkXT1cImZyZWVoYW5kRHJhd0lzQWN0aXZlXCJcclxuICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcclxuICAgIChjaGFuZ2UpPVwib25mcmVlaGFuZENvbnRyb2xDaGFuZ2UoKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5mcmVlaGFuZENvbnRyb2wnIHwgdHJhbnNsYXRlIH19XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJidWZmZXItdW5pdFwiICpuZ0lmPVwiaXNQb2x5Z29uKClcIj5cclxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJidWZmZXJcIj5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgbWF0SW5wdXRcclxuICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnaWdvLmdlby5zcGF0aWFsRmlsdGVyLmJ1ZmZlcicgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiYnVmZmVyRm9ybUNvbnRyb2xcIlxyXG4gICAgICBbdmFsdWVdPVwiMFwiXHJcbiAgICAgIFtyZWFkb25seV09XCJ0aGlzLmZvcm1Db250cm9sLnZhbHVlID09PSBudWxsXCJcclxuICAgIC8+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidW5pdC1maWVsZFwiPlxyXG4gICAgPG1hdC1zZWxlY3RcclxuICAgICAgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCJcclxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk1lYXN1cmVVbml0Q2hhbmdlKCRldmVudC52YWx1ZSlcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBtZWFzdXJlVW5pdCBvZiBtZWFzdXJlVW5pdHNcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJtZWFzdXJlVW5pdFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyAnaWdvLmdlby5tZWFzdXJlLicgKyBtZWFzdXJlVW5pdCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwicmFkaXVzLXVuaXRcIiAqbmdJZj1cImlzUG9pbnQoKVwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJhZGl1c1wiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICBtYXRJbnB1dFxyXG4gICAgICBwbGFjZWhvbGRlcj1cInt7ICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIucmFkaXVzJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgIFtmb3JtQ29udHJvbF09XCJyYWRpdXNGb3JtQ29udHJvbFwiXHJcbiAgICAgIFt2YWx1ZV09XCIxMDAwXCJcclxuICAgICAgKGlucHV0KT1cImdldFJhZGl1cygpXCJcclxuICAgICAgW3JlYWRvbmx5XT1cInRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUgJiYgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbFwiXHJcbiAgICAvPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInVuaXQtZmllbGRcIj5cclxuICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgIFt2YWx1ZV09XCJtZWFzdXJlVW5pdFwiXHJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25NZWFzdXJlVW5pdENoYW5nZSgkZXZlbnQudmFsdWUpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgbWVhc3VyZVVuaXQgb2YgbWVhc3VyZVVuaXRzXCJcclxuICAgICAgICBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgJ2lnby5nZW8ubWVhc3VyZS4nICsgbWVhc3VyZVVuaXQgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PlxyXG5cclxuPG1hdC1sYWJlbCBjbGFzcz1cInRpdGxlIG1hdC10eXBvZ3JhcGh5XCJcclxuICA+e3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5zZWFyY2gnIHwgdHJhbnNsYXRlIH19IDpcclxuPC9tYXQtbGFiZWw+XHJcbjxtYXQtcmFkaW8tZ3JvdXAgW3ZhbHVlXT1cInNlbGVjdGVkSXRlbVR5cGVcIj5cclxuICA8bWF0LXJhZGlvLWJ1dHRvblxyXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbVR5cGVcIlxyXG4gICAgW3ZhbHVlXT1cIml0ZW1cIlxyXG4gICAgKGNoYW5nZSk9XCJvbkl0ZW1UeXBlQ2hhbmdlKCRldmVudClcIlxyXG4gID5cclxuICAgIHt7ICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuJyArIGl0ZW0gfCB0cmFuc2xhdGUgfX1cclxuICA8L21hdC1yYWRpby1idXR0b24+XHJcbjwvbWF0LXJhZGlvLWdyb3VwPlxyXG5cclxuPGRpdlxyXG4gIGNsYXNzPVwidGhlbWF0aWNzXCJcclxuICAqbmdJZj1cIlxyXG4gICAgKHNlbGVjdGVkSXRlbVR5cGUgPT09ICdUaGVtYXRpY3MnICYmICF0YWJsZVRlbXBsYXRlKSB8fFxyXG4gICAgKHNlbGVjdGVkSXRlbVR5cGUgPT09ICdUaGVtYXRpY3MnICYmIHRhYmxlVGVtcGxhdGUgJiYgIWxpc3RJc1Zpc2libGUpXHJcbiAgXCJcclxuPlxyXG4gIDxtYXQtdGFibGU+XHJcbiAgICA8IS0tIE5hbWUgQ29sdW1uIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJuYW1lXCI+XHJcbiAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ0aGVtYXRpY3MtaGVhZGVyXCI+e3tcclxuICAgICAgICAnaWdvLmdlby5zcGF0aWFsRmlsdGVyLlRoZW1hdGljcycgfCB0cmFuc2xhdGVcclxuICAgICAgfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gU2VsZWN0IENvbHVtbiAtLT5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XHJcbiAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJjaGVja3MtaGVhZGVyXCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGVkVGhlbWF0aWNzLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XHJcbiAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LXJvdz5cclxuICA8L21hdC10YWJsZT5cclxuXHJcbiAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIj5cclxuICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBsZWFmIG5vZGVzIC0tPlxyXG4gICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBtYXRUcmVlTm9kZVRvZ2dsZT5cclxuICAgICAgPGxpIGNsYXNzPVwibWF0LXRyZWUtbm9kZVwiPlxyXG4gICAgICAgIDwhLS0gdXNlIGEgZGlzYWJsZWQgYnV0dG9uIHRvIHByb3ZpZGUgcGFkZGluZyBmb3IgdHJlZSBsZWFmIC0tPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkPjwvYnV0dG9uPlxyXG4gICAgICAgIHt7IG5vZGUubmFtZSB9fVxyXG4gICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgIGNsYXNzPVwidHJlZS1jaGVja1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gb25Ub2dnbGVDaGFuZ2Uobm9kZSkgOiBudWxsXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGhlbWF0aWNzLmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPC9saT5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuXHJcbiAgICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cclxuICAgIDxtYXQtbmVzdGVkLXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1hdC10cmVlLW5vZGVcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib25Ub2dnbGVDbGljayhub2RlKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgIFtzdmdJY29uXT1cIlxyXG4gICAgICAgICAgICAgIHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnY2hldnJvbi1kb3duJyA6ICdjaGV2cm9uLXJpZ2h0J1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAge3sgbm9kZS5uYW1lIH19XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgY2xhc3M9XCJ0cmVlLWNoZWNrLTJcIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBjaGlsZHJlbnNUb2dnbGUobm9kZSkgOiBudWxsXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaGFzQ2hpbGRyZW5TZWxlY3RlZChub2RlKSAmJiAhaXNBbGxTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHVsXHJcbiAgICAgICAgY2xhc3M9XCJ0cmVlLXVsXCJcclxuICAgICAgICBbY2xhc3MuZXhhbXBsZS10cmVlLWludmlzaWJsZV09XCIhdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyIG1hdFRyZWVOb2RlT3V0bGV0PjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9tYXQtbmVzdGVkLXRyZWUtbm9kZT5cclxuICA8L21hdC10cmVlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJidXR0b25zXCI+XHJcbiAgPGJ1dHRvblxyXG4gICAgKm5nSWY9XCJpc1ByZWRlZmluZWQoKVwiXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgY2xhc3M9XCJjbGVhci1zZWFyY2gtYnV0dG9uXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZENsZWFyU2VhcmNoKClcIlxyXG4gICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIlxyXG4gID5cclxuICAgIHt7ICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuY2xlYXJTZWFyY2gnIHwgdHJhbnNsYXRlIH19XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxidXR0b25cclxuICAgICpuZ0lmPVwiaXNQb2x5Z29uKCkgfHwgaXNQb2ludCgpXCJcclxuICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICBjbGFzcz1cImNsZWFyLWZvcm0tYnV0dG9uXCJcclxuICAgIFtkaXNhYmxlZF09XCJ0aGlzLmZvcm1Db250cm9sLnZhbHVlID09PSBudWxsXCJcclxuICAgIChjbGljayk9XCJjbGVhckRyYXdab25lKClcIlxyXG4gID5cclxuICAgIHt7ICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuY2xlYXJGb3JtJyB8IHRyYW5zbGF0ZSB9fVxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgY2xhc3M9XCJzZWFyY2gtYnV0dG9uXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2VhcmNoQnV0dG9uKClcIlxyXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgIChjbGljayk9XCJ0b2dnbGVTZWFyY2hCdXR0b24oKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5nb1NlYXJjaCcgfCB0cmFuc2xhdGUgfX1cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIGNsYXNzPVwicmVtb3ZlLWJ1dHRvblwiXHJcbiAgICBbZGlzYWJsZWRdPVwiYWxsTGF5ZXJzLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAoY2xpY2spPVwiY2xlYXJCdXR0b24oKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5yZW1vdmVMYXllcicgfCB0cmFuc2xhdGUgfX1cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiXHJcbiAgICBbZGlzYWJsZWRdPVwiIXN0b3JlLmVudGl0aWVzJC5nZXRWYWx1ZSgpLmxlbmd0aFwiXHJcbiAgICAoY2xpY2spPVwiZXhwb3J0LmVtaXQoKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5leHBvcnRMYXllcicgfCB0cmFuc2xhdGUgfX1cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcblxyXG48YnV0dG9uXHJcbiAgY2xhc3M9XCJjaGV2cm9uLWRvd25cIlxyXG4gICpuZ0lmPVwic3RvcmUuYWxsKCkubGVuZ3RoICYmIHRhYmxlVGVtcGxhdGUgJiYgIWxpc3RJc1Zpc2libGVcIlxyXG4gIG1hdC1pY29uLWJ1dHRvblxyXG4gIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuc2hvd1NlYXJjaFJlc3VsdHMnIHwgdHJhbnNsYXRlXCJcclxuICAoY2xpY2spPVwidG9nZ2xlVmlzaWJsZUxpc3QoKVwiXHJcbj5cclxuICA8bWF0LWljb24gc3ZnSWNvbj1cImNoZXZyb24tZG93blwiPjwvbWF0LWljb24+XHJcbjwvYnV0dG9uPlxyXG5cclxuPGRpdlxyXG4gIGNsYXNzPVwicmVzdWx0c1wiXHJcbiAgKm5nSWY9XCJzdG9yZS5hbGwoKS5sZW5ndGggJiYgdGFibGVUZW1wbGF0ZSAmJiBsaXN0SXNWaXNpYmxlXCJcclxuPlxyXG4gIDxidXR0b25cclxuICAgICpuZ0lmPVwibGlzdElzVmlzaWJsZVwiXHJcbiAgICBtYXQtaWNvbi1idXR0b25cclxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5oaWRlU2VhcmNoUmVzdWx0cycgfCB0cmFuc2xhdGVcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZVZpc2libGVMaXN0KClcIlxyXG4gID5cclxuICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY2hldnJvbi11cFwiPjwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgPGlnby1lbnRpdHktdGFibGVcclxuICAgIGNsYXNzPVwicmVzdWx0cy1saXN0XCJcclxuICAgIFt0ZW1wbGF0ZV09XCJ0YWJsZVRlbXBsYXRlXCJcclxuICAgIFtzdG9yZV09XCJzdG9yZVwiXHJcbiAgICAoZW50aXR5U2VsZWN0Q2hhbmdlKT1cImVudGl0eUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gID5cclxuICA8L2lnby1lbnRpdHktdGFibGU+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
873
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhdGlhbC1maWx0ZXItaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9maWx0ZXIvc3BhdGlhbC1maWx0ZXIvc3BhdGlhbC1maWx0ZXItaXRlbS9zcGF0aWFsLWZpbHRlci1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9zcGF0aWFsLWZpbHRlci9zcGF0aWFsLWZpbHRlci1pdGVtL3NwYXRpYWwtZmlsdGVyLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FB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aUI7d0JBQ2pCLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixTQUFTO3dCQUNULGVBQWU7cUJBQ2hCO29MQUdRLEdBQUc7c0JBQVgsS0FBSztnQkFHRixJQUFJO3NCQURQLEtBQUs7Z0JBbUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFHRixLQUFLO3NCQURSLEtBQUs7Z0JBb0JHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdGLGNBQWM7c0JBRGpCLEtBQUs7Z0JBU0ksWUFBWTtzQkFBckIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFFRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xyXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybXNNb2R1bGUsXHJcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICBVbnR5cGVkRm9ybUNvbnRyb2xcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XHJcbmltcG9ydCB7IE1hdFRhYmxlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE1hdFRyZWVNb2R1bGUsIE1hdFRyZWVOZXN0ZWREYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEVudGl0eVN0b3JlLFxyXG4gIEVudGl0eVN0b3JlRmlsdGVyU2VsZWN0aW9uU3RyYXRlZ3ksXHJcbiAgRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlcixcclxuICBFbnRpdHlUYWJsZUNvbXBvbmVudCxcclxuICBFbnRpdHlUYWJsZVRlbXBsYXRlXHJcbn0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5cclxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcclxuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9sR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcclxuaW1wb3J0IE9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XHJcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcclxuaW1wb3J0ICogYXMgb2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi8uLi9kYXRhc291cmNlL3NoYXJlZCc7XHJcbmltcG9ydCB7IEdlb21ldHJ5VHlwZSB9IGZyb20gJy4uLy4uLy4uL2RyYXcnO1xyXG5pbXBvcnQgeyBGZWF0dXJlTW90aW9uLCBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gJy4uLy4uLy4uL2ZlYXR1cmUnO1xyXG5pbXBvcnQgeyBHZW9tZXRyeUZvcm1GaWVsZElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vZ2VvbWV0cnkvZ2VvbWV0cnktZm9ybS1maWVsZC9nZW9tZXRyeS1mb3JtLWZpZWxkLWlucHV0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdlb0pTT05HZW9tZXRyeSB9IGZyb20gJy4uLy4uLy4uL2dlb21ldHJ5L3NoYXJlZC9nZW9tZXRyeS5pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgTGF5ZXIsIFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vLi4vbGF5ZXIvc2hhcmVkJztcclxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xyXG5pbXBvcnQgeyBNZWFzdXJlTGVuZ3RoVW5pdCB9IGZyb20gJy4uLy4uLy4uL21lYXN1cmUnO1xyXG5pbXBvcnQge1xyXG4gIFNwYXRpYWxGaWx0ZXJRdWVyeVR5cGUsXHJcbiAgU3BhdGlhbEZpbHRlclR5cGVcclxufSBmcm9tICcuLi8uLi9zaGFyZWQvc3BhdGlhbC1maWx0ZXIuZW51bSc7XHJcbmltcG9ydCB7IFNwYXRpYWxGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NwYXRpYWwtZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi8uLi8uLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBTcGF0aWFsRmlsdGVySXRlbVR5cGUgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9zcGF0aWFsLWZpbHRlci5lbnVtJztcclxuaW1wb3J0IHsgU3BhdGlhbEZpbHRlclRoZW1hdGljIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvc3BhdGlhbC1maWx0ZXIuaW50ZXJmYWNlJztcclxuXHJcbi8qKlxyXG4gKiBTcGF0aWFsLUZpbHRlci1JdGVtIChzZWFyY2ggcGFyYW1ldGVycylcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLXNwYXRpYWwtZmlsdGVyLWl0ZW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zcGF0aWFsLWZpbHRlci1pdGVtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zcGF0aWFsLWZpbHRlci1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBHZW9tZXRyeUZvcm1GaWVsZElucHV0Q29tcG9uZW50LFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTmdJZixcclxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBOZ0ZvcixcclxuICAgIE1hdE9wdGlvbk1vZHVsZSxcclxuICAgIE1hdFJhZGlvTW9kdWxlLFxyXG4gICAgTWF0VGFibGVNb2R1bGUsXHJcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcclxuICAgIE1hdFRyZWVNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIEVudGl0eVRhYmxlQ29tcG9uZW50LFxyXG4gICAgQXN5bmNQaXBlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU3BhdGlhbEZpbHRlckl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHR5cGUoKTogU3BhdGlhbEZpbHRlclR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX3R5cGU7XHJcbiAgfVxyXG4gIHNldCB0eXBlKHR5cGU6IFNwYXRpYWxGaWx0ZXJUeXBlKSB7XHJcbiAgICB0aGlzLl90eXBlID0gdHlwZTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZW9tZXRyeVR5cGVzLmZpbmRJbmRleChcclxuICAgICAgKGdlb20pID0+IGdlb20gPT09ICh0aGlzLnR5cGUgYXMgYW55KVxyXG4gICAgKTtcclxuICAgIHRoaXMuZ2VvbWV0cnlUeXBlID0gdGhpcy5nZW9tZXRyeVR5cGVzW2luZGV4XTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAgIHRoaXMucmFkaXVzID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5kcmF3R3VpZGUkLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLmRyYXdTdHlsZSQubmV4dCh1bmRlZmluZWQpO1xyXG5cclxuICAgIC8vIE5lY2Vzc2FyeSB0byBrZWVwIHJlZmVyZW5jZSB0byB0aGUgZ2VvbWV0cnkgZm9ybSBmaWVsZCBpbnB1dFxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCBnZW9qc29uOiBHZW9KU09OR2VvbWV0cnkgPSB7XHJcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcclxuICAgICAgICBjb29yZGluYXRlczogJydcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShnZW9qc29uKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOZWNlc3NhcnkgdG8gYXBwbHkgdGhlIHJpZ2h0IHN0eWxlIHdoZW4gZ2VvbWV0cnkgdHlwZSBpcyBQb2ludFxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9pbnQpIHtcclxuICAgICAgdGhpcy5yYWRpdXMgPSAxMDAwOyAvLyBCYXNlIHJhZGl1c1xyXG4gICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMucmFkaXVzKTtcclxuICAgICAgdGhpcy5Qb2ludFN0eWxlID0gKFxyXG4gICAgICAgIGZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcclxuICAgICAgICByZXNvbHV0aW9uOiBudW1iZXJcclxuICAgICAgKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ2VvbSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBPbFBvaW50O1xyXG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gb2xwcm9qLnRyYW5zZm9ybShcclxuICAgICAgICAgIGdlb20uZ2V0Q29vcmRpbmF0ZXMoKSxcclxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXHJcbiAgICAgICAgICAnRVBTRzo0MzI2J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBvbFN0eWxlLlN0eWxlKHtcclxuICAgICAgICAgIGltYWdlOiBuZXcgb2xTdHlsZS5DaXJjbGUoe1xyXG4gICAgICAgICAgICByYWRpdXM6XHJcbiAgICAgICAgICAgICAgdGhpcy5yYWRpdXMgL1xyXG4gICAgICAgICAgICAgIE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIGNvb3JkaW5hdGVzWzFdKSAvXHJcbiAgICAgICAgICAgICAgcmVzb2x1dGlvbiwgLy8gTGF0aXR1ZGUgY29ycmVjdGlvblxyXG4gICAgICAgICAgICBzdHJva2U6IG5ldyBvbFN0eWxlLlN0cm9rZSh7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1KSdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGZpbGw6IG5ldyBvbFN0eWxlLkZpbGwoe1xyXG4gICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAxNTMsIDI1NSwgMC4yKSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMub3ZlcmxheVN0eWxlID0gdGhpcy5Qb2ludFN0eWxlO1xyXG4gICAgICB0aGlzLmRyYXdTdHlsZSQubmV4dCh0aGlzLm92ZXJsYXlTdHlsZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBJZiBnZW9tZXRyeSB0eXBlcyBpcyBQb2x5Z29uXHJcbiAgICAgIHRoaXMucmFkaXVzID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLlBvbHlTdHlsZSA9ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IG9sU3R5bGUuU3R5bGUoe1xyXG4gICAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xyXG4gICAgICAgICAgICB3aWR0aDogMixcclxuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1KSdcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgZmlsbDogbmV3IG9sU3R5bGUuRmlsbCh7XHJcbiAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAxNTMsIDI1NSwgMC4yKSdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGNvbG9yID0gWzAsIDE1MywgMjU1XTtcclxuICAgICAgY29uc3QgZHJhd1N0eWxlID0gKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgb2xTdHlsZS5TdHlsZSh7XHJcbiAgICAgICAgICBpbWFnZTogbmV3IG9sU3R5bGUuQ2lyY2xlKHtcclxuICAgICAgICAgICAgcmFkaXVzOiA4LFxyXG4gICAgICAgICAgICBzdHJva2U6IG5ldyBvbFN0eWxlLlN0cm9rZSh7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDIsXHJcbiAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDE1MywgMjU1KSdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIGZpbGw6IG5ldyBvbFN0eWxlLkZpbGwoe1xyXG4gICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgwLCAxNTMsIDI1NSwgMC4yKSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IuY29uY2F0KFsxXSksXHJcbiAgICAgICAgICAgIHdpZHRoOiAyXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIGZpbGw6IG5ldyBvbFN0eWxlLkZpbGwoe1xyXG4gICAgICAgICAgICBjb2xvcjogY29sb3IuY29uY2F0KFswLjJdKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5vdmVybGF5U3R5bGUgPSB0aGlzLlBvbHlTdHlsZTtcclxuICAgICAgdGhpcy5kcmF3U3R5bGUkLm5leHQoZHJhd1N0eWxlKTtcclxuICAgIH1cclxuICAgIHRoaXMub3ZlcmxheVN0eWxlJC5uZXh0KHRoaXMub3ZlcmxheVN0eWxlKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdHlwZTogU3BhdGlhbEZpbHRlclR5cGU7XHJcblxyXG4gIEBJbnB1dCgpIHF1ZXJ5VHlwZTogU3BhdGlhbEZpbHRlclF1ZXJ5VHlwZTtcclxuXHJcbiAgQElucHV0KCkgem9uZTogRmVhdHVyZTtcclxuXHJcbiAgQElucHV0KCkgbG9hZGluZztcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgc3RvcmUoKTogRW50aXR5U3RvcmU8RmVhdHVyZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlO1xyXG4gIH1cclxuICBzZXQgc3RvcmUoc3RvcmU6IEVudGl0eVN0b3JlPEZlYXR1cmU+KSB7XHJcbiAgICB0aGlzLl9zdG9yZSA9IHN0b3JlO1xyXG4gICAgdGhpcy5fc3RvcmUuZW50aXRpZXMkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3N0b3JlOiBFbnRpdHlTdG9yZTxGZWF0dXJlPjtcclxuXHJcbiAgLyoqXHJcbiAgICogQXZhaWxhYmxlIG1lYXN1cmUgdW5pdHMgZm9yIHRoZSBtZWFzdXJlIHR5cGUgZ2l2ZW5cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgbWVhc3VyZVVuaXRzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzLCBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzXTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGxheWVyczogTGF5ZXJbXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBhbGxMYXllcnM6IExheWVyW10gPSBbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgdGhlbWF0aWNMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl90aGVtYXRpY0xlbmd0aDtcclxuICB9XHJcbiAgc2V0IHRoZW1hdGljTGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3RoZW1hdGljTGVuZ3RoID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RoZW1hdGljTGVuZ3RoOiBudW1iZXI7XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKSBpdGVtVHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U3BhdGlhbEZpbHRlckl0ZW1UeXBlPigpO1xyXG5cclxuICBAT3V0cHV0KCkgdGhlbWF0aWNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNwYXRpYWxGaWx0ZXJUaGVtYXRpY1tdPigpO1xyXG5cclxuICBAT3V0cHV0KCkgZHJhd1pvbmVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RmVhdHVyZT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIGJ1ZmZlckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpIHpvbmVXaXRoQnVmZmVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGZWF0dXJlPigpO1xyXG4gIEBPdXRwdXQoKSBtZWFzdXJlVW5pdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVhc3VyZUxlbmd0aFVuaXQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSByYWRpdXNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBmcmVlaGFuZENvbnRyb2wgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIHByZWRlZmluZWRSYWRpdXMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBjbGVhckJ1dHRvbkV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KCkgY2xlYXJTZWFyY2hFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIGV4cG9ydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIG9wZW5Xb3Jrc3BhY2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGVudGl0eUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwdWJsaWMgaXRlbVR5cGU6IFNwYXRpYWxGaWx0ZXJJdGVtVHlwZVtdID0gW1xyXG4gICAgU3BhdGlhbEZpbHRlckl0ZW1UeXBlLkFkZHJlc3MsXHJcbiAgICBTcGF0aWFsRmlsdGVySXRlbVR5cGUuVGhlbWF0aWNzXHJcbiAgXTtcclxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtVHlwZTogU3BhdGlhbEZpbHRlckl0ZW1UeXBlID1cclxuICAgIFNwYXRpYWxGaWx0ZXJJdGVtVHlwZS5BZGRyZXNzO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFNvdXJjZUFkZHJlc3M7XHJcblxyXG4gIHRyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxTcGF0aWFsRmlsdGVyVGhlbWF0aWM+ID1cclxuICAgIG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxTcGF0aWFsRmlsdGVyVGhlbWF0aWM+KChub2RlKSA9PiBub2RlLmNoaWxkcmVuKTtcclxuXHJcbiAgLy8gRm9yIHRoZW1hdGljcyBhbmQgcmVzdWx0cyB0YWJsZXNcclxuICBwdWJsaWMgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbJ25hbWUnLCAnc2VsZWN0J107XHJcbiAgcHVibGljIGNoaWxkcmVuczogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICBwdWJsaWMgZ3JvdXBzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyB0aGVtYXRpY3M6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpY1tdID0gW107XHJcbiAgcHVibGljIGRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZU5lc3RlZERhdGFTb3VyY2U8U3BhdGlhbEZpbHRlclRoZW1hdGljPigpO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFRoZW1hdGljcyA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxTcGF0aWFsRmlsdGVyVGhlbWF0aWM+KFxyXG4gICAgdHJ1ZSxcclxuICAgIFtdXHJcbiAgKTtcclxuXHJcbiAgLy8gRm9yIGdlb21ldHJ5IGZvcm0gZmllbGQgaW5wdXRcclxuICB2YWx1ZSQ6IEJlaGF2aW9yU3ViamVjdDxHZW9KU09OR2VvbWV0cnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG4gIGRyYXdHdWlkZSQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcclxuICBvdmVybGF5U3R5bGUkOiBCZWhhdmlvclN1YmplY3Q8XHJcbiAgICBvbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBvbFN0eWxlLlN0eWxlKVxyXG4gID4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcbiAgZHJhd1N0eWxlJDogQmVoYXZpb3JTdWJqZWN0PFxyXG4gICAgb2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gb2xTdHlsZS5TdHlsZSlcclxuICA+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh1bmRlZmluZWQpO1xyXG5cclxuICBwcml2YXRlIHZhbHVlJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHJhZGl1c0NoYW5nZXMkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgYnVmZmVyQ2hhbmdlcyQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHB1YmxpYyBmb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICBwdWJsaWMgZ2VvbWV0cnlUeXBlOiBHZW9tZXRyeVR5cGU7XHJcbiAgcHVibGljIGdlb21ldHJ5VHlwZUZpZWxkID0gZmFsc2U7XHJcbiAgcHVibGljIGdlb21ldHJ5VHlwZXM6IEdlb21ldHJ5VHlwZVtdID0gW1xyXG4gICAgR2VvbWV0cnlUeXBlLlBvaW50LFxyXG4gICAgR2VvbWV0cnlUeXBlLlBvbHlnb25cclxuICBdO1xyXG4gIHB1YmxpYyBkcmF3R3VpZGVGaWVsZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkcmF3R3VpZGU6IG51bWJlciA9IG51bGw7XHJcbiAgcHVibGljIGRyYXdHdWlkZVBsYWNlaG9sZGVyID0gJyc7XHJcbiAgcHVibGljIG1lYXN1cmUgPSBmYWxzZTtcclxuICBwdWJsaWMgZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IHRydWU7XHJcbiAgcHVibGljIGZyZWVoYW5kRHJhd0lzQWN0aXZlID0gZmFsc2U7XHJcbiAgcHVibGljIGRyYXdTdHlsZTogb2xTdHlsZS5TdHlsZSB8ICgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4gb2xTdHlsZS5TdHlsZSk7XHJcbiAgcHVibGljIGRyYXdab25lO1xyXG4gIHB1YmxpYyBvdmVybGF5U3R5bGU6IG9sU3R5bGUuU3R5bGUgfCAoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IG9sU3R5bGUuU3R5bGUpO1xyXG4gIHB1YmxpYyBQb2ludFN0eWxlOiBvbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBvbFN0eWxlLlN0eWxlKTtcclxuICBwdWJsaWMgUG9seVN0eWxlOiBvbFN0eWxlLlN0eWxlIHwgKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiBvbFN0eWxlLlN0eWxlKTtcclxuXHJcbiAgcHVibGljIHJhZGl1czogbnVtYmVyO1xyXG4gIHB1YmxpYyBidWZmZXI6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIHJhZGl1c0Zvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyBidWZmZXJGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgcHVibGljIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCA9IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycztcclxuICBwdWJsaWMgem9uZVdpdGhCdWZmZXI7XHJcblxyXG4gIHB1YmxpYyBsaXN0SXNWaXNpYmxlID0gdHJ1ZTtcclxuICBwdWJsaWMgdGFibGVUZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc3BhdGlhbEZpbHRlclNlcnZpY2U6IFNwYXRpYWxGaWx0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc3BhdGlhbEZpbHRlclNlcnZpY2VcclxuICAgICAgLmxvYWRUaGVtYXRpY3NMaXN0KClcclxuICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpY1tdKSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgICB0aGlzLmNoaWxkcmVucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgdGhpcy5jaGlsZHJlbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8udGVycmFwaS5saW1pdGVzJylcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGxpbWl0czogU3BhdGlhbEZpbHRlclRoZW1hdGljID0ge1xyXG4gICAgICAgICAgbmFtZTogdGhpcy5ncm91cHNbMF0sXHJcbiAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGhlbWF0aWNzLnB1c2gobGltaXRzKTtcclxuICAgICAgICB0aGlzLmNoaWxkcmVucy5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoaWxkLmdyb3VwICYmIHRoaXMuZ3JvdXBzLmluZGV4T2YoY2hpbGQuZ3JvdXApID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKGNoaWxkLmdyb3VwKTtcclxuICAgICAgICAgICAgY29uc3QgdGhlbWF0aWM6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYyA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjaGlsZC5ncm91cCxcclxuICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy50aGVtYXRpY3MucHVzaCh0aGVtYXRpYyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCFjaGlsZC5ncm91cCkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgY2hpbGQubmFtZSA9PT1cclxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAgICAgICAnaWdvLmdlby50ZXJyYXBpLkFkbVJlZ2lvbidcclxuICAgICAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgICBjaGlsZC5uYW1lID09PVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8udGVycmFwaS5NdW4nKSB8fFxyXG4gICAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICAgICAgICAgJ2lnby5nZW8udGVycmFwaS5BcnJvbmQnXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgY2hpbGQubmFtZSA9PT1cclxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAgICAgICAnaWdvLmdlby50ZXJyYXBpLkNpcmNGZWQnXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgY2hpbGQubmFtZSA9PT1cclxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgICAgICAgICAnaWdvLmdlby50ZXJyYXBpLkNpcmNQcm92J1xyXG4gICAgICAgICAgICAgICAgKSB8fFxyXG4gICAgICAgICAgICAgIGNoaWxkLm5hbWUgPT09XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICAgICAgICAgJ2lnby5nZW8udGVycmFwaS5EaXJSZWcnXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgY2hpbGQubmFtZSA9PT1cclxuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkuTVJDJykgfHxcclxuICAgICAgICAgICAgICBjaGlsZC5uYW1lID09PVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAgICAgICAgICdpZ28uZ2VvLnRlcnJhcGkuUmVnVG91cidcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgY2hpbGQuZ3JvdXAgPSBsaW1pdHMubmFtZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICBjaGlsZC5uYW1lID09PVxyXG4gICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLnRlcnJhcGkucm91dGVzJylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgY2hpbGQuZ3JvdXAgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICAgICAgICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuZ3JvdXAudHJhbnNwb3J0J1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGhlbWF0aWM6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYyA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGNoaWxkLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICBzb3VyY2U6IGNoaWxkLnNvdXJjZVxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgdGhpcy50aGVtYXRpY3MucHVzaCh0aGVtYXRpYyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudGhlbWF0aWNzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRoZW1hdGljcy5mb3JFYWNoKCh0aGVtYXRpYykgPT4ge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkcmVucykge1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuZ3JvdXAgPT09IHRoZW1hdGljLm5hbWUpIHtcclxuICAgICAgICAgICAgICB0aGVtYXRpYy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMudGhlbWF0aWNzO1xyXG5cclxuICAgIHRoaXMuZHJhd0d1aWRlJC5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy52YWx1ZSQubmV4dChcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgOiB1bmRlZmluZWRcclxuICAgICk7XHJcbiAgICB0aGlzLnZhbHVlJCQgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXHJcbiAgICAgICh2YWx1ZTogR2VvSlNPTkdlb21ldHJ5KSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlJC5uZXh0KHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuZHJhd1pvbmUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIGFzIEZlYXR1cmU7XHJcbiAgICAgICAgICBpZiAodGhpcy5idWZmZXIgIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kcmF3Wm9uZUV2ZW50LmVtaXQodGhpcy5kcmF3Wm9uZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5idWZmZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnZhbHVlJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICB0aGlzLmRyYXdab25lID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnZhbHVlJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmdldFJhZGl1cygpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmFkaXVzQ2hhbmdlcyQkID0gdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5nZXRSYWRpdXMoKTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmJ1ZmZlckNoYW5nZXMkJCA9IHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycyAmJlxyXG4gICAgICAgICAgdmFsdWUgPiAwICYmXHJcbiAgICAgICAgICB2YWx1ZSA8PSAxMDAwMDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLmJ1ZmZlckV2ZW50LmVtaXQodmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5zcGF0aWFsRmlsdGVyU2VydmljZVxyXG4gICAgICAgICAgICAubG9hZEJ1ZmZlckdlb21ldHJ5KHRoaXMuZHJhd1pvbmUsIFNwYXRpYWxGaWx0ZXJUeXBlLlBvbHlnb24sIHZhbHVlKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChmZWF0dXJlR2VvbTogRmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXIgPSBmZWF0dXJlR2VvbTtcclxuICAgICAgICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyQ2hhbmdlLmVtaXQodGhpcy56b25lV2l0aEJ1ZmZlcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzICYmXHJcbiAgICAgICAgICB2YWx1ZSA+IDAgJiZcclxuICAgICAgICAgIHZhbHVlIDw9IDEwMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMuYnVmZmVyRXZlbnQuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLnNwYXRpYWxGaWx0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5sb2FkQnVmZmVyR2VvbWV0cnkoXHJcbiAgICAgICAgICAgICAgdGhpcy5kcmF3Wm9uZSxcclxuICAgICAgICAgICAgICBTcGF0aWFsRmlsdGVyVHlwZS5Qb2x5Z29uLFxyXG4gICAgICAgICAgICAgIHZhbHVlICogMTAwMFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZlYXR1cmVHZW9tOiBGZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy56b25lV2l0aEJ1ZmZlciA9IGZlYXR1cmVHZW9tO1xyXG4gICAgICAgICAgICAgIHRoaXMuem9uZVdpdGhCdWZmZXJDaGFuZ2UuZW1pdCh0aGlzLnpvbmVXaXRoQnVmZmVyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMuYnVmZmVyRXZlbnQuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLmRyYXdab25lKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgdmFsdWUgPCAwIHx8XHJcbiAgICAgICAgICAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzICYmIHZhbHVlID4gMTAwMDAwKSB8fFxyXG4gICAgICAgICAgKHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0LktpbG9tZXRlcnMgJiYgdmFsdWUgPiAxMDApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSAwO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hbGVydChcclxuICAgICAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5idWZmZXJBbGVydCcsXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIud2FybmluZydcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFJlY29yZFN0cmF0ZWd5ID0gbmV3IEVudGl0eVN0b3JlRmlsdGVyU2VsZWN0aW9uU3RyYXRlZ3koe30pO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uU3RyYXRlZ3kgPSBuZXcgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3koe1xyXG4gICAgICBsYXllcjogbmV3IFZlY3RvckxheWVyKHtcclxuICAgICAgICB6SW5kZXg6IDMwMCxcclxuICAgICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxyXG4gICAgICAgIHN0eWxlOiB1bmRlZmluZWQsXHJcbiAgICAgICAgc2hvd0luTGF5ZXJMaXN0OiBmYWxzZSxcclxuICAgICAgICBleHBvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgICBicm93c2FibGU6IGZhbHNlXHJcbiAgICAgIH0pLFxyXG4gICAgICBtYXA6IHRoaXMubWFwLFxyXG4gICAgICBoaXRUb2xlcmFuY2U6IDE1LFxyXG4gICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCxcclxuICAgICAgbWFueTogdHJ1ZSxcclxuICAgICAgZHJhZ0JveDogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdG9yZS5hZGRTdHJhdGVneShzZWxlY3Rpb25TdHJhdGVneSwgdHJ1ZSk7XHJcbiAgICB0aGlzLnN0b3JlLmFkZFN0cmF0ZWd5KHNlbGVjdGVkUmVjb3JkU3RyYXRlZ3ksIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIHRvIHRoZSB2YWx1ZSBzdHJlYW1cclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudmFsdWUkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5yYWRpdXNDaGFuZ2VzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuYnVmZmVyQ2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmNkUmVmLmRldGFjaCgpO1xyXG4gICAgaWYgKHRoaXMucmFkaXVzQ2hhbmdlcyQkKSB7XHJcbiAgICAgIHRoaXMucmFkaXVzQ2hhbmdlcyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWx1ZSQkKSB7XHJcbiAgICAgIHRoaXMudmFsdWUkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25JdGVtVHlwZUNoYW5nZShldmVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID0gZXZlbnQudmFsdWU7XHJcbiAgICB0aGlzLml0ZW1UeXBlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1UeXBlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgbWVhc3VyZSB1bml0XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25NZWFzdXJlVW5pdENoYW5nZSh1bml0OiBNZWFzdXJlTGVuZ3RoVW5pdCkge1xyXG4gICAgaWYgKHVuaXQgPT09IHRoaXMubWVhc3VyZVVuaXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9IHVuaXQ7XHJcbiAgICAgIHRoaXMubWVhc3VyZVVuaXRDaGFuZ2UuZW1pdCh0aGlzLm1lYXN1cmVVbml0KTtcclxuICAgICAgaWYgKHRoaXMuaXNQb2x5Z29uKCkpIHtcclxuICAgICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnNcclxuICAgICAgICAgID8gdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlICogMTAwMClcclxuICAgICAgICAgIDogdGhpcy5idWZmZXJGb3JtQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnZhbHVlIC8gMTAwMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNQb2ludCgpKSB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzXHJcbiAgICAgICAgICA/IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAqIDEwMDApXHJcbiAgICAgICAgICA6IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUoXHJcbiAgICAgICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAvIDEwMDBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNQcmVkZWZpbmVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGlzUG9seWdvbigpIHtcclxuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNwYXRpYWxGaWx0ZXJUeXBlLlBvbHlnb247XHJcbiAgfVxyXG5cclxuICBpc1BvaW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9pbnQ7XHJcbiAgfVxyXG5cclxuICBoYXNDaGlsZChfOiBudW1iZXIsIG5vZGU6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcclxuICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25Ub2dnbGVDbGljayhub2RlOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcclxuICAgIHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKVxyXG4gICAgICA/IHRoaXMudHJlZUNvbnRyb2wuY29sbGFwc2Uobm9kZSlcclxuICAgICAgOiB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcclxuICB9XHJcblxyXG4gIGlzQWxsU2VsZWN0ZWQobm9kZT86IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgbGV0IG51bVNlbGVjdGVkO1xyXG4gICAgbGV0IG51bU5vZGVzID0gMDtcclxuICAgIGlmICghbm9kZSkge1xyXG4gICAgICBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgICB0aGlzLnRoZW1hdGljcy5mb3JFYWNoKCh0aGVtYXRpYykgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3Vwcy5pbmRleE9mKHRoZW1hdGljLm5hbWUpID09PSAtMSkge1xyXG4gICAgICAgICAgbnVtTm9kZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNoaWxkcmVucy5mb3JFYWNoKChjaGlsZHJlbikgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnRoZW1hdGljcy5maW5kKFxyXG4gICAgICAgICAgICAodGhlbWF0aWMpID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gY2hpbGRyZW4uc291cmNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBudW1Ob2RlcysrO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBudW1TZWxlY3RlZCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkcmVuKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgICAodGhlbWF0aWMpID0+IHRoZW1hdGljID09PSBjaGlsZHJlblxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbnVtTm9kZXMrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChudW1Ob2RlcyA+PSAxKSB7XHJcbiAgICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtTm9kZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNDaGlsZHJlblNlbGVjdGVkKG5vZGU6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgbGV0IGJvb2wgPSBmYWxzZTtcclxuICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAgICh0aGVtYXRpYykgPT4gdGhlbWF0aWMuc291cmNlID09PSBjaGlsZC5zb3VyY2VcclxuICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgIGJvb2wgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBib29sO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgaGVhZGVyIGNoZWNrYm94XHJcbiAgICovXHJcbiAgbWFzdGVyVG9nZ2xlKCkge1xyXG4gICAgdGhpcy5pc0FsbFNlbGVjdGVkKCkgPyB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLmNsZWFyKCkgOiB0aGlzLnNlbGVjdEFsbCgpO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVGhlbWF0aWNzTmFtZTogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xyXG4gICAgICBzZWxlY3RlZFRoZW1hdGljc05hbWUucHVzaCh0aGVtYXRpYyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCgpKSB7XHJcbiAgICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2goKHRoZW1hdGljKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGQoMCwgdGhlbWF0aWMpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZCh0aGVtYXRpYyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2goKHRoZW1hdGljKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGQoMCwgdGhlbWF0aWMpKSB7XHJcbiAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlKHRoZW1hdGljKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy50aGVtYXRpY0NoYW5nZS5lbWl0KHNlbGVjdGVkVGhlbWF0aWNzTmFtZSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwobm9kZT86IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgaWYgKCFub2RlKSB7XHJcbiAgICAgIHRoaXMudGhlbWF0aWNzLmZvckVhY2goKHRoZW1hdGljKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzLmluZGV4T2YodGhlbWF0aWMubmFtZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdCh0aGVtYXRpYyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jaGlsZHJlbnMuZm9yRWFjaCgoY2hpbGRyZW4pID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5maW5kKFxyXG4gICAgICAgICAgICAodGhlbWF0aWMpID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gY2hpbGRyZW4uc291cmNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdChjaGlsZHJlbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmhhc0NoaWxkKDAsIG5vZGUpKSB7XHJcbiAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZHJlbikgPT5cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0KGNoaWxkcmVuKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoaWxkcmVuc1RvZ2dsZShub2RlOiBTcGF0aWFsRmlsdGVyVGhlbWF0aWMpIHtcclxuICAgIHRoaXMuaXNBbGxTZWxlY3RlZChub2RlKVxyXG4gICAgICA/IG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3MuZGVzZWxlY3QoY2hpbGQpKVxyXG4gICAgICA6IHRoaXMuc2VsZWN0QWxsKG5vZGUpO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVGhlbWF0aWNzTmFtZTogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xyXG4gICAgICBzZWxlY3RlZFRoZW1hdGljc05hbWUucHVzaCh0aGVtYXRpYyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcclxuICAgIHRoaXMudGhlbWF0aWNDaGFuZ2UuZW1pdChzZWxlY3RlZFRoZW1hdGljc05hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgY2hhbmdlcyB0byB0aGUgdGhlbWF0aWNzIHNlbGVjdGVkIHRyZWUgYW5kIGVtaXQgZXZlbnRcclxuICAgKi9cclxuICBvblRvZ2dsZUNoYW5nZShub2RlU2VsZWN0ZWQ6IFNwYXRpYWxGaWx0ZXJUaGVtYXRpYykge1xyXG4gICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQuZmluZChcclxuICAgICAgICAodGhlbWF0aWMpID0+IHRoZW1hdGljLnNvdXJjZSA9PT0gbm9kZVNlbGVjdGVkLnNvdXJjZVxyXG4gICAgICApICE9PSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICBzZWxlY3RlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGlsZHJlbnMuZm9yRWFjaCgoY2hpbGRyZW4pID0+IHtcclxuICAgICAgaWYgKGNoaWxkcmVuID09PSBub2RlU2VsZWN0ZWQgJiYgc2VsZWN0ZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3QoY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGlsZHJlbiA9PT0gbm9kZVNlbGVjdGVkICYmIHNlbGVjdGVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5kZXNlbGVjdChjaGlsZHJlbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy50aGVtYXRpY3MuZm9yRWFjaCgodGhlbWF0aWMpID0+IHtcclxuICAgICAgaWYgKHRoZW1hdGljID09PSBub2RlU2VsZWN0ZWQgJiYgc2VsZWN0ZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3QodGhlbWF0aWMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGVtYXRpYyA9PT0gbm9kZVNlbGVjdGVkICYmIHNlbGVjdGVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5kZXNlbGVjdCh0aGVtYXRpYyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVGhlbWF0aWNzTmFtZTogU3BhdGlhbEZpbHRlclRoZW1hdGljW10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgdGhlbWF0aWMgb2YgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZCkge1xyXG4gICAgICBzZWxlY3RlZFRoZW1hdGljc05hbWUucHVzaCh0aGVtYXRpYyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRoZW1hdGljQ2hhbmdlLmVtaXQoc2VsZWN0ZWRUaGVtYXRpY3NOYW1lKTtcclxuICB9XHJcblxyXG4gIG9uRHJhd0NvbnRyb2xDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmRyYXdDb250cm9sSXNBY3RpdmUgPSAhdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgb25mcmVlaGFuZENvbnRyb2xDaGFuZ2UoKSB7XHJcbiAgICB0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlID0gIXRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmU7XHJcbiAgICB0aGlzLmZyZWVoYW5kQ29udHJvbC5lbWl0KHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpO1xyXG4gICAgaWYgKHRoaXMuaXNQb2ludCgpKSB7XHJcbiAgICAgIHRoaXMucHJlZGVmaW5lZFJhZGl1cy5lbWl0KCF0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKTtcclxuICAgICAgaWYgKHRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUpIHtcclxuICAgICAgICB0aGlzLm92ZXJsYXlTdHlsZSQubmV4dCh1bmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMuZHJhd1N0eWxlJC5uZXh0KHVuZGVmaW5lZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHJlZGVmaW5lZFJhZGl1cy5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExhdW5jaCBzZWFyY2ggYnV0dG9uXHJcbiAgICovXHJcbiAgdG9nZ2xlU2VhcmNoQnV0dG9uKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzUHJlZGVmaW5lZCgpKSB7XHJcbiAgICAgIGlmICh0aGlzLmJ1ZmZlciA+IDApIHtcclxuICAgICAgICB0aGlzLnpvbmVXaXRoQnVmZmVyLm1ldGEgPSB7XHJcbiAgICAgICAgICBpZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdGl0bGU6ICdab25lJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy56b25lV2l0aEJ1ZmZlci5wcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgbm9tOiAnWm9uZScsXHJcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLnpvbmVXaXRoQnVmZmVyKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmRyYXdab25lLm1ldGEgPSB7XHJcbiAgICAgICAgICBpZDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdGl0bGU6ICdab25lJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5kcmF3Wm9uZS5wcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgbm9tOiAnWm9uZScsXHJcbiAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUgYXMgc3RyaW5nXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmRyYXdab25lRXZlbnQuZW1pdCh0aGlzLmRyYXdab25lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXNQb2ludCgpKSB7XHJcbiAgICAgIHRoaXMucmFkaXVzRXZlbnQuZW1pdCh0aGlzLnJhZGl1cyk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNQb2x5Z29uKCkpIHtcclxuICAgICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KHRoaXMuYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRoaXMudG9nZ2xlU2VhcmNoLmVtaXQoKTtcclxuICAgIHRoaXMuc3RvcmUuZW50aXRpZXMkLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCAmJiB0aGlzLmxheWVycy5sZW5ndGggPT09IHRoaXMudGhlbWF0aWNMZW5ndGggKyAxKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuV29ya3NwYWNlLmVtaXQoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZVRhYmxlVGVtcGxhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMYXVuY2ggY2xlYXIgYnV0dG9uIChjbGVhciBzdG9yZSBhbmQgbWFwIGxheWVycylcclxuICAgKi9cclxuICBjbGVhckJ1dHRvbigpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5zdG9yZSkge1xyXG4gICAgICB0aGlzLnN0b3JlLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pc1BvaW50KCkgfHwgdGhpcy5pc1BvbHlnb24oKSkge1xyXG4gICAgICB0aGlzLmRyYXdab25lID0gdW5kZWZpbmVkO1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgdGhpcy5idWZmZXIgPSAwO1xyXG4gICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KDApO1xyXG4gICAgdGhpcy5jbGVhckJ1dHRvbkV2ZW50LmVtaXQoKTtcclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy50YWJsZVRlbXBsYXRlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJEcmF3Wm9uZSgpIHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wucmVzZXQoKTtcclxuICAgIHRoaXMuYnVmZmVyRm9ybUNvbnRyb2wuc2V0VmFsdWUoMCk7XHJcbiAgICB0aGlzLmJ1ZmZlciA9IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMYXVuY2ggY2xlYXIgc2VhcmNoIChjbGVhciBmaWVsZCBpZiB0eXBlIGlzIHByZWRlZmluZWQpXHJcbiAgICovXHJcbiAgY2xlYXJTZWFyY2goKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLmNsZWFyKCk7XHJcbiAgICB0aGlzLmJ1ZmZlckZvcm1Db250cm9sLnNldFZhbHVlKDApO1xyXG4gICAgdGhpcy5idWZmZXIgPSAwO1xyXG4gICAgdGhpcy5idWZmZXJFdmVudC5lbWl0KDApO1xyXG4gICAgdGhpcy50aGVtYXRpY0NoYW5nZS5lbWl0KFtdKTtcclxuICAgIHRoaXMuY2xlYXJTZWFyY2hFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWZXJpZnkgY29uZGl0aW9ucyBvZiBpbmNvbXBsZXRlIGZpZWxkcyBvciBidXN5IHNlcnZpY2VcclxuICAgKi9cclxuICBkaXNhYmxlU2VhcmNoQnV0dG9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUHJlZGVmaW5lZCkge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuQWRkcmVzcykge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXJ5VHlwZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuem9uZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuVGhlbWF0aWNzKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5xdWVyeVR5cGUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgdGhpcy56b25lICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaGVtYXRpY3Muc2VsZWN0ZWQubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgdGhpcy50eXBlID09PSBTcGF0aWFsRmlsdGVyVHlwZS5Qb2x5Z29uIHx8XHJcbiAgICAgIHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9pbnRcclxuICAgICkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuQWRkcmVzcyAmJlxyXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgIT09IG51bGxcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuVGhlbWF0aWNzKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRoZW1hdGljcy5zZWxlY3RlZC5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBudWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlZENsZWFyU2VhcmNoKCkge1xyXG4gICAgbGV0IGRpc2FibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID09PSBTcGF0aWFsRmlsdGVySXRlbVR5cGUuQWRkcmVzc1xyXG4gICAgICA/IChkaXNhYmxlID0gdGhpcy5xdWVyeVR5cGUgPT09IHVuZGVmaW5lZClcclxuICAgICAgOiAoZGlzYWJsZSA9XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5VHlwZSA9PT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGhlbWF0aWNzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCk7XHJcblxyXG4gICAgcmV0dXJuIGRpc2FibGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYW5hZ2UgcmFkaXVzIHZhbHVlIGF0IHVzZXIgY2hhbmdlXHJcbiAgICovXHJcbiAgZ2V0UmFkaXVzKCkge1xyXG4gICAgbGV0IGZvcm1WYWx1ZTtcclxuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVyc1xyXG4gICAgICAgID8gKGZvcm1WYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUucmFkaXVzKVxyXG4gICAgICAgIDogKGZvcm1WYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUucmFkaXVzIC8gMTAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3JtVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudHlwZSA9PT0gU3BhdGlhbEZpbHRlclR5cGUuUG9pbnQpIHtcclxuICAgICAgaWYgKCF0aGlzLmZyZWVoYW5kRHJhd0lzQWN0aXZlKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSA8IDAgfHxcclxuICAgICAgICAgICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMgJiZcclxuICAgICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSA+PSAxMDAwMDApIHx8XHJcbiAgICAgICAgICAodGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuS2lsb21ldGVycyAmJlxyXG4gICAgICAgICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlID49IDEwMClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQoXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIucmFkaXVzQWxlcnQnLFxyXG4gICAgICAgICAgICAnaWdvLmdlby5zcGF0aWFsRmlsdGVyLndhcm5pbmcnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5yYWRpdXMgPSAxMDAwO1xyXG4gICAgICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzXHJcbiAgICAgICAgICAgID8gdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnJhZGl1cylcclxuICAgICAgICAgICAgOiB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMucmFkaXVzIC8gMTAwMCk7XHJcbiAgICAgICAgICB0aGlzLmRyYXdHdWlkZSQubmV4dCh0aGlzLnJhZGl1cyk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChmb3JtVmFsdWUpIHtcclxuICAgICAgICAgIGlmIChmb3JtVmFsdWUgPj0gMTAwMDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWxlcnQoXHJcbiAgICAgICAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5yYWRpdXNBbGVydCcsXHJcbiAgICAgICAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci53YXJuaW5nJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChmb3JtVmFsdWUgIT09IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZShmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMpIHtcclxuICAgICAgICB0aGlzLnJhZGl1cyA9IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgdGhpcy5kcmF3R3VpZGUkLm5leHQodGhpcy5yYWRpdXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmFkaXVzID0gdGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAqIDEwMDA7XHJcbiAgICAgICAgdGhpcy5kcmF3R3VpZGUkLm5leHQodGhpcy5yYWRpdXMgKiAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm92ZXJsYXlTdHlsZSQubmV4dCh0aGlzLlBvaW50U3R5bGUpO1xyXG4gICAgICB0aGlzLmRyYXdTdHlsZSQubmV4dCh0aGlzLlBvaW50U3R5bGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVmlzaWJsZUxpc3QoKSB7XHJcbiAgICB0aGlzLmxpc3RJc1Zpc2libGUgPSAhdGhpcy5saXN0SXNWaXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVUYWJsZVRlbXBsYXRlKCkge1xyXG4gICAgY29uc3QgdHlwZUNvbHVtbiA9IHtcclxuICAgICAgbmFtZTogJ21ldGEudGl0bGUnLFxyXG4gICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci50eXBlJ1xyXG4gICAgICApLFxyXG4gICAgICByZW5kZXJlcjogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUxcclxuICAgIH07XHJcbiAgICBjb25zdCBuYW1lQ29sdW1uID0ge1xyXG4gICAgICBuYW1lOiAncHJvcGVydGllcy5ub20nLFxyXG4gICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5zZWFyY2hSZXN1bHRzJ1xyXG4gICAgICApLFxyXG4gICAgICByZW5kZXJlcjogRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUxcclxuICAgIH07XHJcbiAgICBjb25zdCBjb2x1bW5zID0gW3R5cGVDb2x1bW4sIG5hbWVDb2x1bW5dO1xyXG5cclxuICAgIHRoaXMudGFibGVUZW1wbGF0ZSA9IHtcclxuICAgICAgc2VsZWN0aW9uOiB0cnVlLFxyXG4gICAgICBzb3J0OiB0cnVlLFxyXG4gICAgICBjb2x1bW5zXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCI8aWdvLWdlb21ldHJ5LWZvcm0tZmllbGQtaW5wdXRcclxuICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxyXG4gIFttYXBdPVwibWFwXCJcclxuICBbZ2VvbWV0cnlUeXBlXT1cImdlb21ldHJ5VHlwZVwiXHJcbiAgW2RyYXdHdWlkZV09XCJkcmF3R3VpZGUkIHwgYXN5bmNcIlxyXG4gIFttZWFzdXJlXT1cIm1lYXN1cmVcIlxyXG4gIFtkcmF3Q29udHJvbElzQWN0aXZlXT1cImRyYXdDb250cm9sSXNBY3RpdmVcIlxyXG4gIFtmcmVlaGFuZERyYXdJc0FjdGl2ZV09XCJmcmVlaGFuZERyYXdJc0FjdGl2ZVwiXHJcbiAgW2RyYXdTdHlsZV09XCJkcmF3U3R5bGUkIHwgYXN5bmNcIlxyXG4gIFtvdmVybGF5U3R5bGVdPVwib3ZlcmxheVN0eWxlJCB8IGFzeW5jXCJcclxuICBbcmFkaXVzXT1cInJhZGl1c1wiXHJcbiAgW3ByZWRlZmluZWRSYWRpdXNdPVwiJGFueShwcmVkZWZpbmVkUmFkaXVzKVwiXHJcbj5cclxuPC9pZ28tZ2VvbWV0cnktZm9ybS1maWVsZC1pbnB1dD5cclxuXHJcbjxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgKm5nSWY9XCIhaXNQcmVkZWZpbmVkKClcIlxyXG4gICAgW2NoZWNrZWRdPVwiZHJhd0NvbnRyb2xJc0FjdGl2ZVwiXHJcbiAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAoY2hhbmdlKT1cIm9uRHJhd0NvbnRyb2xDaGFuZ2UoKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5kcmF3Q29udHJvbCcgfCB0cmFuc2xhdGUgfX1cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICpuZ0lmPVwiIWlzUHJlZGVmaW5lZCgpXCJcclxuICAgIFtjaGVja2VkXT1cImZyZWVoYW5kRHJhd0lzQWN0aXZlXCJcclxuICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcclxuICAgIChjaGFuZ2UpPVwib25mcmVlaGFuZENvbnRyb2xDaGFuZ2UoKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5mcmVlaGFuZENvbnRyb2wnIHwgdHJhbnNsYXRlIH19XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJidWZmZXItdW5pdFwiICpuZ0lmPVwiaXNQb2x5Z29uKClcIj5cclxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJidWZmZXJcIj5cclxuICAgIDxpbnB1dFxyXG4gICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgbWF0SW5wdXRcclxuICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnaWdvLmdlby5zcGF0aWFsRmlsdGVyLmJ1ZmZlcicgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiYnVmZmVyRm9ybUNvbnRyb2xcIlxyXG4gICAgICBbdmFsdWVdPVwiMFwiXHJcbiAgICAgIFtyZWFkb25seV09XCJ0aGlzLmZvcm1Db250cm9sLnZhbHVlID09PSBudWxsXCJcclxuICAgIC8+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidW5pdC1maWVsZFwiPlxyXG4gICAgPG1hdC1zZWxlY3RcclxuICAgICAgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCJcclxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk1lYXN1cmVVbml0Q2hhbmdlKCRldmVudC52YWx1ZSlcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBtZWFzdXJlVW5pdCBvZiBtZWFzdXJlVW5pdHNcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJtZWFzdXJlVW5pdFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyAnaWdvLmdlby5tZWFzdXJlLicgKyBtZWFzdXJlVW5pdCB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwicmFkaXVzLXVuaXRcIiAqbmdJZj1cImlzUG9pbnQoKVwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJhZGl1c1wiPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICBtYXRJbnB1dFxyXG4gICAgICBwbGFjZWhvbGRlcj1cInt7ICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIucmFkaXVzJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgIFtmb3JtQ29udHJvbF09XCJyYWRpdXNGb3JtQ29udHJvbFwiXHJcbiAgICAgIFt2YWx1ZV09XCIxMDAwXCJcclxuICAgICAgKGlucHV0KT1cImdldFJhZGl1cygpXCJcclxuICAgICAgW3JlYWRvbmx5XT1cInRoaXMuZnJlZWhhbmREcmF3SXNBY3RpdmUgJiYgdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA9PT0gbnVsbFwiXHJcbiAgICAvPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInVuaXQtZmllbGRcIj5cclxuICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgIFt2YWx1ZV09XCJtZWFzdXJlVW5pdFwiXHJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25NZWFzdXJlVW5pdENoYW5nZSgkZXZlbnQudmFsdWUpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgbWVhc3VyZVVuaXQgb2YgbWVhc3VyZVVuaXRzXCJcclxuICAgICAgICBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgJ2lnby5nZW8ubWVhc3VyZS4nICsgbWVhc3VyZVVuaXQgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZGl2PlxyXG5cclxuPG1hdC1sYWJlbCBjbGFzcz1cInRpdGxlIG1hdC10eXBvZ3JhcGh5XCJcclxuICA+e3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5zZWFyY2gnIHwgdHJhbnNsYXRlIH19IDpcclxuPC9tYXQtbGFiZWw+XHJcbjxtYXQtcmFkaW8tZ3JvdXAgW3ZhbHVlXT1cInNlbGVjdGVkSXRlbVR5cGVcIj5cclxuICA8bWF0LXJhZGlvLWJ1dHRvblxyXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbVR5cGVcIlxyXG4gICAgW3ZhbHVlXT1cIml0ZW1cIlxyXG4gICAgKGNoYW5nZSk9XCJvbkl0ZW1UeXBlQ2hhbmdlKCRldmVudClcIlxyXG4gID5cclxuICAgIHt7ICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuJyArIGl0ZW0gfCB0cmFuc2xhdGUgfX1cclxuICA8L21hdC1yYWRpby1idXR0b24+XHJcbjwvbWF0LXJhZGlvLWdyb3VwPlxyXG5cclxuPGRpdlxyXG4gIGNsYXNzPVwidGhlbWF0aWNzXCJcclxuICAqbmdJZj1cIlxyXG4gICAgKHNlbGVjdGVkSXRlbVR5cGUgPT09ICdUaGVtYXRpY3MnICYmICF0YWJsZVRlbXBsYXRlKSB8fFxyXG4gICAgKHNlbGVjdGVkSXRlbVR5cGUgPT09ICdUaGVtYXRpY3MnICYmIHRhYmxlVGVtcGxhdGUgJiYgIWxpc3RJc1Zpc2libGUpXHJcbiAgXCJcclxuPlxyXG4gIDxtYXQtdGFibGU+XHJcbiAgICA8IS0tIE5hbWUgQ29sdW1uIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJuYW1lXCI+XHJcbiAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ0aGVtYXRpY3MtaGVhZGVyXCI+e3tcclxuICAgICAgICAnaWdvLmdlby5zcGF0aWFsRmlsdGVyLlRoZW1hdGljcycgfCB0cmFuc2xhdGVcclxuICAgICAgfX08L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gU2VsZWN0IENvbHVtbiAtLT5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XHJcbiAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJjaGVja3MtaGVhZGVyXCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBtYXN0ZXJUb2dnbGUoKSA6IG51bGxcIlxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGVkVGhlbWF0aWNzLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L21hdC1oZWFkZXItY2VsbD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LWhlYWRlci1yb3c+XHJcbiAgICA8bWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvbWF0LXJvdz5cclxuICA8L21hdC10YWJsZT5cclxuXHJcbiAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIj5cclxuICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBsZWFmIG5vZGVzIC0tPlxyXG4gICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBtYXRUcmVlTm9kZVRvZ2dsZT5cclxuICAgICAgPGxpIGNsYXNzPVwibWF0LXRyZWUtbm9kZVwiPlxyXG4gICAgICAgIDwhLS0gdXNlIGEgZGlzYWJsZWQgYnV0dG9uIHRvIHByb3ZpZGUgcGFkZGluZyBmb3IgdHJlZSBsZWFmIC0tPlxyXG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkPjwvYnV0dG9uPlxyXG4gICAgICAgIHt7IG5vZGUubmFtZSB9fVxyXG4gICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgIGNsYXNzPVwidHJlZS1jaGVja1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gb25Ub2dnbGVDaGFuZ2Uobm9kZSkgOiBudWxsXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkVGhlbWF0aWNzLmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPC9saT5cclxuICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuXHJcbiAgICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgZXhwYW5kYWJsZSBub2RlcyAtLT5cclxuICAgIDxtYXQtbmVzdGVkLXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1hdC10cmVlLW5vZGVcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwib25Ub2dnbGVDbGljayhub2RlKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgIFtzdmdJY29uXT1cIlxyXG4gICAgICAgICAgICAgIHRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnY2hldnJvbi1kb3duJyA6ICdjaGV2cm9uLXJpZ2h0J1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPjwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAge3sgbm9kZS5uYW1lIH19XHJcbiAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgY2xhc3M9XCJ0cmVlLWNoZWNrLTJcIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBjaGlsZHJlbnNUb2dnbGUobm9kZSkgOiBudWxsXCJcclxuICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaGFzQ2hpbGRyZW5TZWxlY3RlZChub2RlKSAmJiAhaXNBbGxTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHVsXHJcbiAgICAgICAgY2xhc3M9XCJ0cmVlLXVsXCJcclxuICAgICAgICBbY2xhc3MuZXhhbXBsZS10cmVlLWludmlzaWJsZV09XCIhdHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyIG1hdFRyZWVOb2RlT3V0bGV0PjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9tYXQtbmVzdGVkLXRyZWUtbm9kZT5cclxuICA8L21hdC10cmVlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJidXR0b25zXCI+XHJcbiAgPGJ1dHRvblxyXG4gICAgKm5nSWY9XCJpc1ByZWRlZmluZWQoKVwiXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgY2xhc3M9XCJjbGVhci1zZWFyY2gtYnV0dG9uXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZENsZWFyU2VhcmNoKClcIlxyXG4gICAgKGNsaWNrKT1cImNsZWFyU2VhcmNoKClcIlxyXG4gID5cclxuICAgIHt7ICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuY2xlYXJTZWFyY2gnIHwgdHJhbnNsYXRlIH19XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDxidXR0b25cclxuICAgICpuZ0lmPVwiaXNQb2x5Z29uKCkgfHwgaXNQb2ludCgpXCJcclxuICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICBjbGFzcz1cImNsZWFyLWZvcm0tYnV0dG9uXCJcclxuICAgIFtkaXNhYmxlZF09XCJ0aGlzLmZvcm1Db250cm9sLnZhbHVlID09PSBudWxsXCJcclxuICAgIChjbGljayk9XCJjbGVhckRyYXdab25lKClcIlxyXG4gID5cclxuICAgIHt7ICdpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuY2xlYXJGb3JtJyB8IHRyYW5zbGF0ZSB9fVxyXG4gIDwvYnV0dG9uPlxyXG5cclxuICA8YnV0dG9uXHJcbiAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgY2xhc3M9XCJzZWFyY2gtYnV0dG9uXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2VhcmNoQnV0dG9uKClcIlxyXG4gICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgIChjbGljayk9XCJ0b2dnbGVTZWFyY2hCdXR0b24oKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5nb1NlYXJjaCcgfCB0cmFuc2xhdGUgfX1cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIGNsYXNzPVwicmVtb3ZlLWJ1dHRvblwiXHJcbiAgICBbZGlzYWJsZWRdPVwiYWxsTGF5ZXJzLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAoY2xpY2spPVwiY2xlYXJCdXR0b24oKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5yZW1vdmVMYXllcicgfCB0cmFuc2xhdGUgfX1cclxuICA8L2J1dHRvbj5cclxuXHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiXHJcbiAgICBbZGlzYWJsZWRdPVwiIXN0b3JlLmVudGl0aWVzJC5nZXRWYWx1ZSgpLmxlbmd0aFwiXHJcbiAgICAoY2xpY2spPVwiZXhwb3J0LmVtaXQoKVwiXHJcbiAgPlxyXG4gICAge3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5leHBvcnRMYXllcicgfCB0cmFuc2xhdGUgfX1cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcblxyXG48YnV0dG9uXHJcbiAgY2xhc3M9XCJjaGV2cm9uLWRvd25cIlxyXG4gICpuZ0lmPVwic3RvcmUuYWxsKCkubGVuZ3RoICYmIHRhYmxlVGVtcGxhdGUgJiYgIWxpc3RJc1Zpc2libGVcIlxyXG4gIG1hdC1pY29uLWJ1dHRvblxyXG4gIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLnNwYXRpYWxGaWx0ZXIuc2hvd1NlYXJjaFJlc3VsdHMnIHwgdHJhbnNsYXRlXCJcclxuICAoY2xpY2spPVwidG9nZ2xlVmlzaWJsZUxpc3QoKVwiXHJcbj5cclxuICA8bWF0LWljb24gc3ZnSWNvbj1cImNoZXZyb24tZG93blwiPjwvbWF0LWljb24+XHJcbjwvYnV0dG9uPlxyXG5cclxuPGRpdlxyXG4gIGNsYXNzPVwicmVzdWx0c1wiXHJcbiAgKm5nSWY9XCJzdG9yZS5hbGwoKS5sZW5ndGggJiYgdGFibGVUZW1wbGF0ZSAmJiBsaXN0SXNWaXNpYmxlXCJcclxuPlxyXG4gIDxidXR0b25cclxuICAgICpuZ0lmPVwibGlzdElzVmlzaWJsZVwiXHJcbiAgICBtYXQtaWNvbi1idXR0b25cclxuICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5oaWRlU2VhcmNoUmVzdWx0cycgfCB0cmFuc2xhdGVcIlxyXG4gICAgKGNsaWNrKT1cInRvZ2dsZVZpc2libGVMaXN0KClcIlxyXG4gID5cclxuICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiY2hldnJvbi11cFwiPjwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgPGlnby1lbnRpdHktdGFibGVcclxuICAgIGNsYXNzPVwicmVzdWx0cy1saXN0XCJcclxuICAgIFt0ZW1wbGF0ZV09XCJ0YWJsZVRlbXBsYXRlXCJcclxuICAgIFtzdG9yZV09XCJzdG9yZVwiXHJcbiAgICAoZW50aXR5U2VsZWN0Q2hhbmdlKT1cImVudGl0eUNoYW5nZS5lbWl0KCRldmVudClcIlxyXG4gID5cclxuICA8L2lnby1lbnRpdHktdGFibGU+XHJcbjwvZGl2PlxyXG4iXX0=
|