@igo2/geo 17.0.0-next.0 → 17.0.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +4 -4
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +19 -17
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +14 -12
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +4 -4
- package/esm2022/lib/catalog/catalog.module.mjs +4 -4
- package/esm2022/lib/catalog/shared/catalog.service.mjs +12 -8
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +3 -3
- package/esm2022/lib/datasource/shared/datasource.service.mjs +10 -8
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.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/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 +3 -3
- package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +2 -2
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +3 -3
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +17 -13
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +6 -6
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +6 -6
- package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +2 -2
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +6 -6
- package/esm2022/lib/directions/directions.component.mjs +6 -6
- package/esm2022/lib/directions/directions.module.mjs +4 -4
- package/esm2022/lib/directions/shared/directions.service.mjs +13 -9
- package/esm2022/lib/directions/shared/directions.utils.mjs +1 -1
- package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
- package/esm2022/lib/download/download.module.mjs +4 -4
- package/esm2022/lib/download/shared/download.service.mjs +6 -6
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +3 -3
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +6 -6
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
- package/esm2022/lib/draw/draw/draw.component.mjs +6 -6
- package/esm2022/lib/draw/draw/draw.module.mjs +4 -4
- package/esm2022/lib/draw/drawingTool.module.mjs +4 -4
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +6 -6
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +13 -10
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +3 -3
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +4 -4
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +3 -3
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +4 -4
- package/esm2022/lib/feature/feature.module.mjs +4 -4
- package/esm2022/lib/filter/filter.module.mjs +4 -4
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +6 -6
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +3 -3
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +3 -3
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +3 -3
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +3 -3
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +3 -3
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +9 -7
- package/esm2022/lib/filter/shared/time-filter.service.mjs +3 -3
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +23 -21
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +6 -6
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
- package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +3 -3
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
- package/esm2022/lib/geo.module.mjs +4 -4
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +3 -3
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +3 -3
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +4 -4
- package/esm2022/lib/geometry/geometry.module.mjs +4 -4
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +3 -3
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +28 -22
- package/esm2022/lib/import-export/import-export.module.mjs +4 -4
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +11 -9
- package/esm2022/lib/import-export/shared/export.service.mjs +6 -6
- package/esm2022/lib/import-export/shared/export.utils.mjs +1 -1
- package/esm2022/lib/import-export/shared/import.service.mjs +6 -6
- package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +6 -6
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +18 -16
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +6 -6
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +3 -3
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +3 -3
- package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +6 -6
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +3 -3
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +3 -3
- package/esm2022/lib/layer/layer.module.mjs +4 -4
- package/esm2022/lib/layer/shared/layer.service.mjs +6 -6
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
- package/esm2022/lib/layer/shared/layers/layer.interface.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 +3 -3
- package/esm2022/lib/layer/utils/image-watcher.mjs +1 -1
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +6 -6
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +7 -7
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +6 -6
- package/esm2022/lib/map/info-section/info-section.component.mjs +3 -3
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +6 -6
- package/esm2022/lib/map/map-center/map-center.component.mjs +3 -3
- package/esm2022/lib/map/map.module.mjs +4 -4
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +6 -6
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +3 -3
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
- package/esm2022/lib/map/shared/controllers/geolocation.mjs +1 -1
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +6 -6
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +6 -6
- package/esm2022/lib/map/shared/map.mjs +1 -1
- package/esm2022/lib/map/shared/map.service.mjs +3 -3
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +9 -7
- package/esm2022/lib/map/shared/projection.service.mjs +6 -6
- package/esm2022/lib/map/shared/projection.utils.mjs +1 -1
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +3 -3
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +6 -6
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +3 -3
- package/esm2022/lib/measure/measure.module.mjs +4 -4
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +3 -3
- package/esm2022/lib/measure/measurer/measurer.component.mjs +16 -14
- package/esm2022/lib/measure/measurer/measurer.module.mjs +4 -4
- package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +6 -6
- package/esm2022/lib/metadata/metadata.module.mjs +4 -4
- package/esm2022/lib/metadata/shared/metadata.service.mjs +3 -3
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +6 -6
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +8 -10
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +3 -3
- package/esm2022/lib/offline/shared/geo-network.service.mjs +6 -6
- package/esm2022/lib/overlay/overlay.module.mjs +4 -4
- package/esm2022/lib/overlay/shared/overlay.directive.mjs +3 -3
- package/esm2022/lib/overlay/shared/overlay.service.mjs +3 -3
- package/esm2022/lib/print/print/print.component.mjs +3 -3
- package/esm2022/lib/print/print-form/print-form.component.mjs +6 -6
- package/esm2022/lib/print/print.module.mjs +4 -4
- package/esm2022/lib/print/shared/print.service.mjs +13 -7
- package/esm2022/lib/query/query.module.mjs +6 -6
- package/esm2022/lib/query/shared/query-search-source.mjs +3 -3
- package/esm2022/lib/query/shared/query-search-source.providers.mjs +2 -2
- package/esm2022/lib/query/shared/query.directive.mjs +3 -3
- package/esm2022/lib/query/shared/query.service.mjs +6 -6
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +6 -6
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +4 -4
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +6 -6
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +6 -6
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +3 -3
- package/esm2022/lib/search/search-results/search-results.component.mjs +6 -6
- package/esm2022/lib/search/search-results/search-results.module.mjs +4 -4
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +3 -3
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +4 -4
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +18 -16
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +4 -4
- package/esm2022/lib/search/search.module.mjs +4 -4
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +6 -6
- package/esm2022/lib/search/shared/search.service.mjs +6 -6
- package/esm2022/lib/search/shared/sources/cadastre.mjs +9 -7
- package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/coordinates.mjs +12 -10
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/icherche.mjs +16 -14
- package/esm2022/lib/search/shared/sources/icherche.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/ilayer.mjs +12 -10
- package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/nominatim.mjs +6 -6
- package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +3 -2
- package/esm2022/lib/search/shared/sources/source.mjs +1 -1
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +13 -11
- package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +4 -2
- package/esm2022/lib/search/shared/sources/workspace.mjs +9 -7
- package/esm2022/lib/search/shared/sources/workspace.providers.mjs +4 -2
- package/esm2022/lib/style/style-list/style-list.module.mjs +4 -4
- package/esm2022/lib/style/style-list/style-list.service.mjs +3 -3
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +3 -3
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +3 -3
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
- package/esm2022/lib/style/style-service/draw-style.service.mjs +3 -3
- package/esm2022/lib/style/style-service/style.service.mjs +3 -3
- package/esm2022/lib/style/style.module.mjs +4 -4
- package/esm2022/lib/toast/toast.component.mjs +3 -3
- package/esm2022/lib/toast/toast.module.mjs +4 -4
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +6 -6
- package/esm2022/lib/wkt/shared/wkt.service.mjs +3 -3
- package/esm2022/lib/wkt/wkt.module.mjs +4 -4
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +6 -6
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +4 -4
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +1 -1
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +15 -11
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +12 -10
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +12 -10
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +10 -8
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -2
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +3 -3
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +3 -3
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace.module.mjs +4 -4
- package/fesm2022/igo2-geo.mjs +701 -690
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +2 -1
- package/lib/catalog/catalog-library/catalog-library.component.d.ts +2 -1
- package/lib/catalog/shared/catalog.service.d.ts +3 -1
- package/lib/datasource/shared/datasource.service.d.ts +2 -1
- package/lib/datasource/shared/options/options-api.providers.d.ts +1 -1
- package/lib/directions/directions-buttons/directions-buttons.component.d.ts +3 -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-sources/directions-source.provider.d.ts +1 -1
- package/lib/directions/directions-sources/osrm-directions-source.d.ts +1 -1
- package/lib/directions/directions.component.d.ts +1 -1
- package/lib/directions/shared/directions.service.d.ts +3 -1
- package/lib/directions/shared/directions.utils.d.ts +1 -1
- package/lib/download/shared/download.service.d.ts +1 -1
- package/lib/draw/draw/draw-popup.component.d.ts +1 -1
- package/lib/draw/draw/draw.component.d.ts +1 -1
- package/lib/draw/shared/draw-icon.service.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.component.d.ts +3 -2
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +1 -1
- package/lib/filter/shared/spatial-filter.service.d.ts +2 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +2 -1
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +1 -1
- package/lib/import-export/import-export/import-export.component.d.ts +4 -1
- package/lib/import-export/shared/drop-geo-file.directive.d.ts +2 -1
- package/lib/import-export/shared/export.service.d.ts +1 -1
- package/lib/import-export/shared/export.utils.d.ts +1 -1
- package/lib/import-export/shared/import.service.d.ts +1 -1
- package/lib/import-export/shared/import.utils.d.ts +1 -1
- package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
- package/lib/layer/layer-legend/layer-legend.component.d.ts +2 -1
- package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
- package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
- package/lib/layer/shared/layer.service.d.ts +1 -1
- package/lib/layer/shared/layers/image-layer.d.ts +1 -1
- package/lib/layer/shared/layers/layer.d.ts +1 -1
- package/lib/layer/shared/layers/layer.interface.d.ts +1 -1
- package/lib/layer/shared/layers/tile-layer.d.ts +1 -1
- package/lib/layer/shared/layers/vector-layer.d.ts +1 -1
- package/lib/layer/shared/layers/vectortile-layer.d.ts +1 -1
- package/lib/layer/utils/image-watcher.d.ts +1 -1
- package/lib/map/baselayers-switcher/baselayers-switcher.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/map-browser/map-browser.component.d.ts +1 -1
- package/lib/map/menu-button/menu-button.component.d.ts +1 -1
- package/lib/map/shared/controllers/geolocation.d.ts +2 -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/map.d.ts +2 -1
- package/lib/map/shared/mapOffline.directive.d.ts +2 -1
- package/lib/map/shared/projection.service.d.ts +1 -1
- package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +1 -1
- package/lib/measure/measurer/measurer.component.d.ts +2 -1
- package/lib/measure/shared/measure.utils.d.ts +1 -1
- package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -1
- package/lib/offline/geoDB/geoDB.service.d.ts +2 -3
- package/lib/offline/shared/geo-network.service.d.ts +1 -1
- package/lib/print/print-form/print-form.component.d.ts +1 -1
- package/lib/print/shared/print.service.d.ts +4 -1
- package/lib/query/query.module.d.ts +1 -1
- package/lib/query/shared/query-search-source.providers.d.ts +1 -1
- package/lib/query/shared/query.service.d.ts +1 -1
- package/lib/search/search-bar/search-bar.component.d.ts +1 -1
- 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.component.d.ts +1 -1
- package/lib/search/search-settings/search-settings.component.d.ts +2 -1
- package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
- package/lib/search/shared/search.service.d.ts +1 -1
- package/lib/search/shared/sources/cadastre.d.ts +2 -1
- package/lib/search/shared/sources/cadastre.providers.d.ts +3 -1
- package/lib/search/shared/sources/coordinates.d.ts +2 -1
- package/lib/search/shared/sources/coordinates.providers.d.ts +3 -1
- package/lib/search/shared/sources/icherche.d.ts +2 -1
- package/lib/search/shared/sources/icherche.providers.d.ts +3 -1
- package/lib/search/shared/sources/ilayer.d.ts +2 -1
- package/lib/search/shared/sources/ilayer.providers.d.ts +3 -1
- package/lib/search/shared/sources/nominatim.d.ts +1 -1
- package/lib/search/shared/sources/nominatim.providers.d.ts +2 -1
- package/lib/search/shared/sources/source.d.ts +1 -1
- package/lib/search/shared/sources/storedqueries.d.ts +2 -1
- package/lib/search/shared/sources/storedqueries.providers.d.ts +3 -1
- package/lib/search/shared/sources/workspace.d.ts +2 -1
- package/lib/search/shared/sources/workspace.providers.d.ts +3 -1
- package/lib/utils/propertyTypeDetector/propertyTypeDetector.service.d.ts +1 -1
- package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
- package/lib/workspace/shared/edition-workspace.d.ts +1 -1
- package/lib/workspace/shared/edition-workspace.service.d.ts +3 -1
- package/lib/workspace/shared/feature-workspace.service.d.ts +2 -1
- package/lib/workspace/shared/wfs-workspace.service.d.ts +2 -1
- package/lib/workspace/shared/wms-workspace.service.d.ts +2 -1
- package/package.json +5 -5
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
3
|
import { SecureImagePipe } from '@igo2/common';
|
|
4
|
-
import { ActivityService
|
|
4
|
+
import { ActivityService } from '@igo2/core/activity';
|
|
5
|
+
import { ConfigService } from '@igo2/core/config';
|
|
6
|
+
import { LanguageService } from '@igo2/core/language';
|
|
7
|
+
import { MessageService } from '@igo2/core/message';
|
|
5
8
|
import { SubjectStatus } from '@igo2/utils';
|
|
6
9
|
import { saveAs } from 'file-saver';
|
|
7
10
|
import html2canvas from 'html2canvas';
|
|
@@ -15,7 +18,10 @@ import GeoPdfPlugin from './geopdf';
|
|
|
15
18
|
import { PrintPaperFormat } from './print.type';
|
|
16
19
|
import * as i0 from "@angular/core";
|
|
17
20
|
import * as i1 from "@angular/common/http";
|
|
18
|
-
import * as i2 from "@igo2/core";
|
|
21
|
+
import * as i2 from "@igo2/core/message";
|
|
22
|
+
import * as i3 from "@igo2/core/activity";
|
|
23
|
+
import * as i4 from "@igo2/core/language";
|
|
24
|
+
import * as i5 from "@igo2/core/config";
|
|
19
25
|
export class PrintService {
|
|
20
26
|
http;
|
|
21
27
|
messageService;
|
|
@@ -1083,13 +1089,13 @@ export class PrintService {
|
|
|
1083
1089
|
}
|
|
1084
1090
|
return n * k;
|
|
1085
1091
|
}
|
|
1086
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.
|
|
1087
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.
|
|
1092
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PrintService, deps: [{ token: i1.HttpClient }, { token: i2.MessageService }, { token: i3.ActivityService }, { token: i4.LanguageService }, { token: i5.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1093
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PrintService, providedIn: 'root' });
|
|
1088
1094
|
}
|
|
1089
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.
|
|
1095
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PrintService, decorators: [{
|
|
1090
1096
|
type: Injectable,
|
|
1091
1097
|
args: [{
|
|
1092
1098
|
providedIn: 'root'
|
|
1093
1099
|
}]
|
|
1094
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.MessageService }, { type:
|
|
1095
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3ByaW50L3NoYXJlZC9wcmludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsZUFBZSxFQUNmLGNBQWMsRUFDZixNQUFNLFlBQVksQ0FBQztBQUNwQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxXQUFXLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN6QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLEdBQUcsSUFBSSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxZQUFZLE1BQU0sVUFBVSxDQUFDO0FBRXBDLE9BQU8sRUFFTCxnQkFBZ0IsRUFFakIsTUFBTSxjQUFjLENBQUM7Ozs7QUFXdEIsTUFBTSxPQUFPLFlBQVk7SUFrQmI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXJCVixPQUFPLENBQVE7SUFDZixl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Z0JBQ1AsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDUCxNQUFNO1lBQ1IsS0FBSyxJQUFJO2dCQUNQLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNaLE1BQU07WUFDUixLQUFLLElBQUk7Z0JBQ1AsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDUCxNQUFNO1lBQ1IsS0FBSyxJQUFJO2dCQUNQLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1AsTUFBTTtZQUNSLEtBQUssSUFBSTtnQkFDUCxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNOLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZixDQUFDO3VHQXo0Q1UsWUFBWTsyR0FBWixZQUFZLGNBRlgsTUFBTTs7MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTZWN1cmVJbWFnZVBpcGUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2aXR5U2VydmljZSxcclxuICBDb25maWdTZXJ2aWNlLFxyXG4gIExhbmd1YWdlU2VydmljZSxcclxuICBNZXNzYWdlU2VydmljZVxyXG59IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0U3RhdHVzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCBodG1sMmNhbnZhcyBmcm9tICdodG1sMmNhbnZhcyc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgSlNaaXAgfSBmcm9tICdqc3ppcCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCBhcyByeE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IExlZ2VuZE1hcFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sZWdlbmQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZ2V0TGF5ZXJzTGVnZW5kcyB9IGZyb20gJy4uLy4uL2xheWVyL3V0aWxzL291dHB1dExlZ2VuZCc7XHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcclxuaW1wb3J0IHsgZm9ybWF0U2NhbGUgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC51dGlscyc7XHJcbmltcG9ydCBHZW9QZGZQbHVnaW4gZnJvbSAnLi9nZW9wZGYnO1xyXG5pbXBvcnQgeyBQcmludE9wdGlvbnMsIFRleHRQZGZTaXplQW5kTWFyZ2luIH0gZnJvbSAnLi9wcmludC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIFByaW50TGVnZW5kUG9zaXRpb24sXHJcbiAgUHJpbnRQYXBlckZvcm1hdCxcclxuICBQcmludFJlc29sdXRpb25cclxufSBmcm9tICcuL3ByaW50LnR5cGUnO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBOYXZpZ2F0b3Ige1xyXG4gICAgbXNTYXZlQmxvYj86IChibG9iOiBhbnksIGRlZmF1bHROYW1lPzogc3RyaW5nKSA9PiBib29sZWFuO1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpbnRTZXJ2aWNlIHtcclxuICB6aXBGaWxlOiBKU1ppcDtcclxuICBuYkZpbGVUb1Byb2Nlc3M6IG51bWJlcjtcclxuICBhY3Rpdml0eUlkOiBzdHJpbmc7XHJcbiAgaW1nU2l6ZUFkZGVkOiBBcnJheTxudW1iZXI+O1xyXG4gIG1hcFByaW50RXh0ZW50OiBBcnJheTxudW1iZXI+O1xyXG5cclxuICBURVhUUERGRk9OVCA9IHtcclxuICAgIHRpdGxlRm9udDogJ1NhbnMgU2VyaWYnLFxyXG4gICAgdGl0bGVGb250U3R5bGU6ICdib2xkJyxcclxuICAgIHN1YnRpdGxlRm9udDogJ1NhbnMgU2VyaWYnLFxyXG4gICAgc3VidGl0bGVGb250U3R5bGU6ICdib2xkJyxcclxuICAgIGNvbW1lbnRGb250OiAnU2FucyBTZXJpZicsXHJcbiAgICBjb21tZW50Rm9udFN0eWxlOiAnbm9ybWFsJyxcclxuICAgIGNvbW1lbnRGb250U2l6ZTogMTJcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3Rpdml0eVNlcnZpY2U6IEFjdGl2aXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHByaW50KG1hcDogSWdvTWFwLCBvcHRpb25zOiBQcmludE9wdGlvbnMpOiBTdWJqZWN0PGFueT4ge1xyXG4gICAgY29uc3Qgc3RhdHVzJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBjb25zdCBwYXBlckZvcm1hdDogc3RyaW5nID0gb3B0aW9ucy5wYXBlckZvcm1hdDtcclxuICAgIGNvbnN0IHJlc29sdXRpb24gPSArb3B0aW9ucy5yZXNvbHV0aW9uOyAvLyBEZWZhdWx0IGlzIDk2XHJcbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IG9wdGlvbnMub3JpZW50YXRpb247XHJcbiAgICBjb25zdCBsZWdlbmRQb3N0aW9uID0gb3B0aW9ucy5sZWdlbmRQb3NpdGlvbjtcclxuICAgIHRoaXMuYWN0aXZpdHlJZCA9IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnJlZ2lzdGVyKCk7XHJcblxyXG4gICAgR2VvUGRmUGx1Z2luKGpzUERGLkFQSSk7XHJcblxyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHtcclxuICAgICAgb3JpZW50YXRpb24sXHJcbiAgICAgIGZvcm1hdDogcGFwZXJGb3JtYXQudG9Mb3dlckNhc2UoKSxcclxuICAgICAgdW5pdDogJ21tJyAvLyBkZWZhdWx0XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkaW1lbnNpb25zID0gW1xyXG4gICAgICBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGgsXHJcbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHRcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgbWFyZ2lucyA9IFsxMCwgMTAsIDEwLCAxMF07XHJcbiAgICBjb25zdCB3aWR0aCA9IGRpbWVuc2lvbnNbMF0gLSBtYXJnaW5zWzNdIC0gbWFyZ2luc1sxXTtcclxuICAgIGNvbnN0IGhlaWdodCA9IGRpbWVuc2lvbnNbMV0gLSBtYXJnaW5zWzBdIC0gbWFyZ2luc1syXTtcclxuICAgIGNvbnN0IHNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbd2lkdGgsIGhlaWdodF07XHJcbiAgICBsZXQgdGl0bGVTaXplczogVGV4dFBkZlNpemVBbmRNYXJnaW47XHJcbiAgICBsZXQgc3VidGl0bGVTaXplczogVGV4dFBkZlNpemVBbmRNYXJnaW47XHJcblxyXG4gICAgLy8gaWYgcGFwZXIgZm9ybWF0IEExIG9yIEEwIGFkZCBtYXJnaW4gdG9wXHJcbiAgICBpZiAoXHJcbiAgICAgIChvcHRpb25zLnRpdGxlICE9PSAnJyB8fCBvcHRpb25zLnN1YnRpdGxlICE9PSAnJykgJiZcclxuICAgICAgKHBhcGVyRm9ybWF0ID09PSBQcmludFBhcGVyRm9ybWF0LkExIHx8XHJcbiAgICAgICAgcGFwZXJGb3JtYXQgPT09IFByaW50UGFwZXJGb3JtYXQuQTApXHJcbiAgICApIHtcclxuICAgICAgbWFyZ2luc1swXSArPSAxMDtcclxuICAgIH1cclxuICAgIC8vIFBERiB0aXRsZVxyXG4gICAgY29uc3QgZm9udFNpemVJblB0ID0gTWF0aC5yb3VuZCgyICogKGhlaWdodCArIDE0NSkgKiAwLjA1KSAvIDI7IC8vY2FsY3VsYXRlIHRoZSBmb250U2l6ZSB0aXRsZSBmcm9tIHRoZSBwYWdlIGhlaWdodC5cclxuICAgIGlmIChvcHRpb25zLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aXRsZSAhPT0gJycpIHtcclxuICAgICAgdGl0bGVTaXplcyA9IHRoaXMuZ2V0VGV4dFBkZk9iamVjdFNpemVBbmRNYXJnKFxyXG4gICAgICAgIG9wdGlvbnMudGl0bGUsXHJcbiAgICAgICAgbWFyZ2lucyxcclxuICAgICAgICB0aGlzLlRFWFRQREZGT05ULnRpdGxlRm9udCxcclxuICAgICAgICBmb250U2l6ZUluUHQsXHJcbiAgICAgICAgdGhpcy5URVhUUERGRk9OVC50aXRsZUZvbnRTdHlsZSxcclxuICAgICAgICBkb2NcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuYWRkVGV4dEluUGRmRG9jKFxyXG4gICAgICAgIGRvYyxcclxuICAgICAgICBvcHRpb25zLnRpdGxlLFxyXG4gICAgICAgIHRoaXMuVEVYVFBERkZPTlQudGl0bGVGb250LFxyXG4gICAgICAgIHRoaXMuVEVYVFBERkZPTlQudGl0bGVGb250U3R5bGUsXHJcbiAgICAgICAgdGl0bGVTaXplcy5mb250U2l6ZSxcclxuICAgICAgICB0aXRsZVNpemVzLm1hcmdpbkxlZnQgKyBtYXJnaW5zWzNdLFxyXG4gICAgICAgIG1hcmdpbnNbMF1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIG1hcmdpbnNbMF0gPSB0aXRsZVNpemVzLmhlaWdodCArIG1hcmdpbnNbMF07IC8vIGN1bXVsYXRpdmUgbWFyZ2luIHRvcCBmb3IgbmV4dCBlbGVtIHRvIHBsYWNlIGluIHBkZiBkb2NcclxuICAgIH1cclxuXHJcbiAgICAvLyBQREYgc3VidGl0bGVcclxuICAgIGlmIChvcHRpb25zLnN1YnRpdGxlICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zdWJ0aXRsZSAhPT0gJycpIHtcclxuICAgICAgc3VidGl0bGVTaXplcyA9IHRoaXMuZ2V0VGV4dFBkZk9iamVjdFNpemVBbmRNYXJnKFxyXG4gICAgICAgIG9wdGlvbnMuc3VidGl0bGUsXHJcbiAgICAgICAgbWFyZ2lucyxcclxuICAgICAgICB0aGlzLlRFWFRQREZGT05ULnN1YnRpdGxlRm9udCxcclxuICAgICAgICBvcHRpb25zLnRpdGxlICE9PSAnJyA/IHRpdGxlU2l6ZXMuZm9udFNpemUgKiAwLjcgOiBmb250U2l6ZUluUHQgKiAwLjcsIC8vIDcwJSBzaXplIG9mIHRpdGxlXHJcbiAgICAgICAgdGhpcy5URVhUUERGRk9OVC5zdWJ0aXRsZUZvbnRTdHlsZSxcclxuICAgICAgICBkb2NcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuYWRkVGV4dEluUGRmRG9jKFxyXG4gICAgICAgIGRvYyxcclxuICAgICAgICBvcHRpb25zLnN1YnRpdGxlLFxyXG4gICAgICAgIHRoaXMuVEVYVFBERkZPTlQuc3VidGl0bGVGb250LFxyXG4gICAgICAgIHRoaXMuVEVYVFBERkZPTlQuc3VidGl0bGVGb250U3R5bGUsXHJcbiAgICAgICAgc3VidGl0bGVTaXplcy5mb250U2l6ZSxcclxuICAgICAgICBzdWJ0aXRsZVNpemVzLm1hcmdpbkxlZnQgKyBtYXJnaW5zWzNdLFxyXG4gICAgICAgIG1hcmdpbnNbMF1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIG1hcmdpbnNbMF0gKz0gNTsgLy8gY3VtdWxhdGl2ZSBtYXJnIHRvcCBmb3IgbmV4dCBlbGVtIHRvIHBsYWNlIGluIHBkZiBkb2MuIDUgaXMgYSBmaXggaXQgY291bGQgYmUgYWRqdXN0XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuc2hvd1Byb2plY3Rpb24gPT09IHRydWUgfHwgb3B0aW9ucy5zaG93U2NhbGUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hZGRQcm9qU2NhbGUoXHJcbiAgICAgICAgZG9jLFxyXG4gICAgICAgIG1hcCxcclxuICAgICAgICByZXNvbHV0aW9uLFxyXG4gICAgICAgIG9wdGlvbnMuc2hvd1Byb2plY3Rpb24sXHJcbiAgICAgICAgb3B0aW9ucy5zaG93U2NhbGVcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmNvbW1lbnQgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmNvbW1lbnQgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tbWVudChkb2MsIG9wdGlvbnMuY29tbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZGRNYXAoZG9jLCBtYXAsIHJlc29sdXRpb24sIHNpemUsIG1hcmdpbnMsIGxlZ2VuZFBvc3Rpb24pLnN1YnNjcmliZShcclxuICAgICAgYXN5bmMgKHN0YXR1czogU3ViamVjdFN0YXR1cykgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IFN1YmplY3RTdGF0dXMuRG9uZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVNZWFzdXJlTGF5ZXIoZG9jLCBtYXAsIG1hcmdpbnMpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pbWdTaXplQWRkZWRbMF07XHJcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltZ1NpemVBZGRlZFsxXTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFkZEdlb1JlZihkb2MsIHdpZHRoLCBoZWlnaHQsIG1hcmdpbnMpO1xyXG5cclxuICAgICAgICAgIGlmIChvcHRpb25zLmxlZ2VuZFBvc2l0aW9uICE9PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIFsndG9wbGVmdCcsICd0b3ByaWdodCcsICdib3R0b21sZWZ0JywgJ2JvdHRvbXJpZ2h0J10uaW5kZXhPZihcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMubGVnZW5kUG9zaXRpb25cclxuICAgICAgICAgICAgICApID4gLTFcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRMZWdlbmRTYW1lUGFnZShcclxuICAgICAgICAgICAgICAgIGRvYyxcclxuICAgICAgICAgICAgICAgIG1hcCxcclxuICAgICAgICAgICAgICAgIG1hcmdpbnMsXHJcbiAgICAgICAgICAgICAgICByZXNvbHV0aW9uLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5sZWdlbmRQb3NpdGlvblxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sZWdlbmRQb3NpdGlvbiA9PT0gJ25ld3BhZ2UnKSB7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRMZWdlbmQoZG9jLCBtYXAsIG1hcmdpbnMsIHJlc29sdXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IFN1YmplY3RTdGF0dXMuRG9uZSB8fCBzdGF0dXMgPT09IFN1YmplY3RTdGF0dXMuRXJyb3IpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcy5hY3Rpdml0eUlkKTtcclxuICAgICAgICAgIHN0YXR1cyQubmV4dChTdWJqZWN0U3RhdHVzLkRvbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gc3RhdHVzJDtcclxuICB9XHJcbiAgLy8gcmVmIEdlb01vb3NlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZW9tb29zZS9nbTMvdHJlZS9tYWluL3NyYy9nbTMvY29tcG9uZW50cy9wcmludFxyXG4gIGFkZEdlb1JlZihkb2MsIHdpZHRoLCBoZWlnaHQsIG1hcmdpbnMpIHtcclxuICAgIGNvbnN0IHVuaXQgPSAnbW0nO1xyXG4gICAgY29uc3QgZG9jSGVpZ2h0ID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpO1xyXG5cclxuICAgIC8vIHgseSA9IG1hcmdpbiBsZWZ0LWJvdHRvbSBjb3JuZXIgZm9yIGltZyBpbiBwZGYgZG9jXHJcbiAgICBjb25zdCB4ID0gbWFyZ2luc1szXTtcclxuICAgIGNvbnN0IHkgPSBkb2NIZWlnaHQgLSBtYXJnaW5zWzBdIC0gaGVpZ2h0O1xyXG5cclxuICAgIGxldCBwZGZfZXh0ZW50cyA9IFt4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHRdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZGZfZXh0ZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBwZGZfZXh0ZW50c1tpXSA9IHRoaXMucGRmX3VuaXRzMnBvaW50cyhwZGZfZXh0ZW50c1tpXSwgdW5pdCk7XHJcbiAgICB9XHJcbiAgICBkb2Muc2V0R2VvQXJlYShwZGZfZXh0ZW50cywgdGhpcy5tYXBQcmludEV4dGVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgbWVhc3VyZSBvdmVybGF5IG9uIHRoZSBtYXAgb24gdGhlIGRvY3VtZW50IHdoZW4gdGhlIG1lYXN1cmUgbGF5ZXIgaXMgcHJlc2VudFxyXG4gICAqIEBwYXJhbSAgZG9jIC0gUGRmIGRvY3VtZW50IHdoZXJlIG1lYXN1cmUgdG9vbHRpcCB3aWxsIGJlIGFkZGVkXHJcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxyXG4gICAqIEBwYXJhbSAgbWFyZ2lucyAtIFBhZ2UgbWFyZ2luc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlTWVhc3VyZUxheWVyKFxyXG4gICAgZG9jOiBqc1BERixcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPlxyXG4gICkge1xyXG4gICAgaWYgKFxyXG4gICAgICBtYXAubGF5ZXJzLmZpbmQoXHJcbiAgICAgICAgKGxheWVyKSA9PiBsYXllci52aXNpYmxlICYmIGxheWVyLmlkLnN0YXJ0c1dpdGgoJ2lnby1tZWFzdXJlcy0nKVxyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgbGV0IGNhbnZhc092ZXJsYXlIVE1MTWVhc3VyZXM7XHJcbiAgICAgIGNvbnN0IG1hcE92ZXJsYXlNZWFzdXJlc0hUTUwgPSBtYXAub2wuZ2V0T3ZlcmxheUNvbnRhaW5lcigpO1xyXG4gICAgICBhd2FpdCBodG1sMmNhbnZhcyhtYXBPdmVybGF5TWVhc3VyZXNIVE1MLCB7XHJcbiAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBudWxsXHJcbiAgICAgIH0pLnRoZW4oKGUpID0+IHtcclxuICAgICAgICBjYW52YXNPdmVybGF5SFRNTE1lYXN1cmVzID0gZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuYWRkQ2FudmFzKGRvYywgY2FudmFzT3ZlcmxheUhUTUxNZWFzdXJlcywgbWFyZ2lucyk7IC8vIHRoaXMgYWRkcyBtZWFzdXJlIG92ZXJsYXlzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgaHRtbCBjb2RlIGZvciBhbGwgbGF5ZXJzIGxlZ2VuZFxyXG4gICAqIEBwYXJhbSAgbWFwIElnb01hcFxyXG4gICAqIEBwYXJhbSAgd2lkdGggVGhlIHdpZHRoIHRoYXQgdGhlIGxlZ2VuZCBuZWVkIHRvIGJlXHJcbiAgICogQHJldHVybiBIdG1sIGNvZGUgZm9yIHRoZSBsZWdlbmRcclxuICAgKi9cclxuICBnZXRMYXllcnNMZWdlbmRIdG1sKFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyXHJcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgbGV0IGh0bWwgPSAnJztcclxuICAgICAgY29uc3QgbGVnZW5kcyA9IGdldExheWVyc0xlZ2VuZHMobWFwLmxheWVycywge1xyXG4gICAgICAgIHJlc29sdXRpb246IG1hcC52aWV3Q29udHJvbGxlci5nZXRSZXNvbHV0aW9uKCksXHJcbiAgICAgICAgZXh0ZW50OiBtYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCksXHJcbiAgICAgICAgcHJvamVjdGlvbjogbWFwLnZpZXdDb250cm9sbGVyLmdldE9sUHJvamVjdGlvbigpLmdldENvZGUoKSxcclxuICAgICAgICAvLyBzY2FsZTogbWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKHJlc29sdXRpb24pLFxyXG4gICAgICAgIHNpemU6IG1hcC5vbC5nZXRTaXplKClcclxuICAgICAgfSBhcyBMZWdlbmRNYXBWaWV3T3B0aW9ucyk7XHJcblxyXG4gICAgICBpZiAobGVnZW5kcy5maWx0ZXIoKGwpID0+IGwuZGlzcGxheSA9PT0gdHJ1ZSkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChodG1sKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBEZWZpbmUgaW1wb3J0YW50IHN0eWxlIHRvIGJlIHN1cmUgdGhhdCBhbGwgY29udGFpbmVyIGlzIGNvbnZlcnRcclxuICAgICAgLy8gdG8gaW1hZ2Ugbm90IGp1c3QgdmlzaWJsZSBwYXJ0XHJcbiAgICAgIGh0bWwgKz0gJzxzdHlsZSBtZWRpYT1cInNjcmVlblwiIHR5cGU9XCJ0ZXh0L2Nzc1wiPic7XHJcbiAgICAgIGh0bWwgKz1cclxuICAgICAgICAnLmh0bWwyY2FudmFzLWNvbnRhaW5lciB7IHdpZHRoOiAnICtcclxuICAgICAgICB3aWR0aCArXHJcbiAgICAgICAgJ21tICFpbXBvcnRhbnQ7IGhlaWdodDogMjAwMHB4ICFpbXBvcnRhbnQ7IH0nO1xyXG4gICAgICBodG1sICs9ICd0YWJsZS50YWJsZUxlZ2VuZCB7dGFibGUtbGF5b3V0OiBhdXRvO30nO1xyXG4gICAgICBodG1sICs9XHJcbiAgICAgICAgJ2Rpdi5zdHlsZUxlZ2VuZCB7cGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLWJvdHRvbTo1cHg7fSc7XHJcbiAgICAgIGh0bWwgKz0gJzwvc3R5bGU+JztcclxuICAgICAgLy8gVGhlIGZvbnQgc2l6ZSB3aWxsIGFsc28gYmUgbG93ZXJlZCBhZnRlcndhcmRzIChnbG9iYWxseSBhbG9uZyB0aGUgbGVnZW5kIHNpemUpXHJcbiAgICAgIC8vIHRoaXMgYWxsb3dzIGhhdmluZyBhIGdvb2QgcmVsYXRpdmUgZm9udCBzaXplIGhlcmUgYW5kIHRvIGtlZXAgYWp1c3RpbmcgdGhlIGxlZ2VuZCBzaXplXHJcbiAgICAgIC8vIHdoaWxlIGtlZXBpbmcgZ29vZCByZWxhdGl2ZSBmb250IHNpemVcclxuICAgICAgaHRtbCArPSAnPGZvbnQgc2l6ZT1cIjNcIiBmYWNlPVwiVGltZXNcIiA+JztcclxuICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInN0eWxlTGVnZW5kXCI+JztcclxuICAgICAgaHRtbCArPSAnPHRhYmxlIGNsYXNzPVwidGFibGVMZWdlbmRcIiA+JztcclxuXHJcbiAgICAgIC8vIEZvciBlYWNoIGxlZ2VuZCwgZGVmaW5lIGFuIGh0bWwgdGFibGUgY2VsbFxyXG4gICAgICBjb25zdCBpbWFnZXMkID0gbGVnZW5kc1xyXG4gICAgICAgIC5maWx0ZXIoKGwpID0+IGwuZGlzcGxheSAmJiBsLmlzSW5SZXNvbHV0aW9uc1JhbmdlID09PSB0cnVlKVxyXG4gICAgICAgIC5tYXAoKGxlZ2VuZCkgPT5cclxuICAgICAgICAgIHRoaXMuZ2V0RGF0YUltYWdlKGxlZ2VuZC51cmwpLnBpcGUoXHJcbiAgICAgICAgICAgIHJ4TWFwKChkYXRhSW1hZ2UpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgaHRtbEltZyA9XHJcbiAgICAgICAgICAgICAgICAnPHRyPjx0ZD4nICsgbGVnZW5kLnRpdGxlLnRvVXBwZXJDYXNlKCkgKyAnPC90ZD48L3RyPic7XHJcbiAgICAgICAgICAgICAgaHRtbEltZyArPSAnPHRyPjx0ZD48aW1nIHNyYz1cIicgKyBkYXRhSW1hZ2UgKyAnXCI+PC90ZD48L3RyPic7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGh0bWxJbWc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgZm9ya0pvaW4oaW1hZ2VzJCkuc3Vic2NyaWJlKChkYXRhSW1hZ2VzKSA9PiB7XHJcbiAgICAgICAgaHRtbCA9IGRhdGFJbWFnZXMucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IChhY2MgKz0gY3VycmVudCksIGh0bWwpO1xyXG4gICAgICAgIGh0bWwgKz0gJzwvdGFibGU+JztcclxuICAgICAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoaHRtbCk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldERhdGFJbWFnZSh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBzZWN1cmVJTUcgPSBuZXcgU2VjdXJlSW1hZ2VQaXBlKHRoaXMuaHR0cCwgdGhpcy5jb25maWdTZXJ2aWNlKTtcclxuICAgIHJldHVybiBzZWN1cmVJTUcudHJhbnNmb3JtKHVybCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsIHRoZSBsZWdlbmQgaW4gYSBzaW5nbGUgaW1hZ2VcclxuICAgKiAqIEBwYXJhbSAgZm9ybWF0IC0gSW1hZ2UgZm9ybWF0LiBkZWZhdWx0IHZhbHVlIHRvIFwicG5nXCJcclxuICAgKiBAcmV0dXJuIFRoZSBpbWFnZSBvZiB0aGUgbGVnZW5kXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0TGF5ZXJzTGVnZW5kSW1hZ2UoXHJcbiAgICBtYXAsXHJcbiAgICBmb3JtYXQ6IHN0cmluZyA9ICdwbmcnLFxyXG4gICAgZG9aaXBGaWxlOiBib29sZWFuLFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzdGF0dXMkID0gbmV3IFN1YmplY3QoKTtcclxuICAgIC8vIEdldCBodG1sIGNvZGUgZm9yIHRoZSBsZWdlbmRcclxuICAgIGNvbnN0IHdpZHRoID0gMjAwOyAvLyBtaWxpbWV0ZXJzIHVuaXQsIG9yaWdpbmFsbHkgZGVmaW5lIGZvciBkb2N1bWVudCBwZGZcclxuICAgIGxldCBodG1sID0gYXdhaXQgdGhpcy5nZXRMYXllcnNMZWdlbmRIdG1sKFxyXG4gICAgICBtYXAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICByZXNvbHV0aW9uXHJcbiAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgZm9ybWF0ID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgLy8gSWYgbm8gbGVnZW5kIHNob3cgTm8gTEVHRU5EIGluIGFuIGltYWdlXHJcbiAgICBpZiAoaHRtbC5sZW5ndGggPT09IDApIHtcclxuICAgICAgaHRtbCA9ICc8Zm9udCBzaXplPVwiMTJcIiBmYWNlPVwiQ291cmllciBOZXdcIiA+JztcclxuICAgICAgaHRtbCArPSAnPGRpdiBhbGlnbj1cImNlbnRlclwiPjxiPk5PIExFR0VORDwvYj48L2Rpdj4nO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIGRpdiB0byBjb250YWluIGh0bWwgY29kZSBmb3IgbGVnZW5kXHJcbiAgICBjb25zdCBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgZGl2LnN0eWxlLnRvcCA9ICcwJztcclxuICAgIGRpdi5zdHlsZS56SW5kZXggPSAnLTEnO1xyXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcblxyXG4gICAgYXdhaXQgdGhpcy50aW1lb3V0KDEpO1xyXG4gICAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMoZGl2LCB7IHVzZUNPUlM6IHRydWUgfSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVtb3ZlSHRtbEVsZW1lbnQoZGl2KTtcclxuICAgIGlmIChjYW52YXMpIHtcclxuICAgICAgbGV0IHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRG9uZTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoIWRvWmlwRmlsZSkge1xyXG4gICAgICAgICAgLy8gU2F2ZSB0aGUgY2FudmFzIGFzIGZpbGVcclxuICAgICAgICAgIHRoaXMuc2F2ZUNhbnZhc0ltYWdlQXNGaWxlKGNhbnZhcywgJ2xlZ2VuZEltYWdlJywgZm9ybWF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWRkIHRoZSBjYW52YXMgdG8gemlwXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2FudmFGaWxlVG9aaXAoY2FudmFzLCAnbGVnZW5kSW1hZ2UnICsgJy4nICsgZm9ybWF0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRXJyb3I7XHJcbiAgICAgIH1cclxuICAgICAgc3RhdHVzJC5uZXh0KHN0YXR1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0YXR1cyQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUh0bWxFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0UGRmT2JqZWN0U2l6ZUFuZE1hcmcoXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICBtYXJnaW5zLFxyXG4gICAgZm9udDogc3RyaW5nLFxyXG4gICAgZm9udFNpemVJblB0OiBudW1iZXIsXHJcbiAgICBmb250U3R5bGU6IHN0cmluZyxcclxuICAgIGRvYzoganNQREZcclxuICApOiBUZXh0UGRmU2l6ZUFuZE1hcmdpbiB7XHJcbiAgICBjb25zdCBwZGZSZXNvbHV0aW9uID0gOTY7XHJcbiAgICBjb25zdCBkb2NXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgcGFnZVdpZHRoID0gZG9jV2lkdGggLSBtYXJnaW5zWzFdIC0gbWFyZ2luc1szXTtcclxuXHJcbiAgICAvLyBpbXBvcnRhbnQgdG8gc2V0IGl0IGZpcnN0LCB0aGUgdGV4dERpbWVuc2lvbiBjaGFuZ2Ugd2hlbiBmb250IGNoYW5nZSFcclxuICAgIGRvYy5zZXRGb250KGZvbnQsIGZvbnRTdHlsZSk7XHJcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udFNpemVJblB0KTtcclxuXHJcbiAgICBsZXQgdGV4dERpbWVuc2lvbnMgPSBkb2MuZ2V0VGV4dERpbWVuc2lvbnModGV4dCk7XHJcbiAgICBsZXQgdGV4dE1hcmdpbkxlZnQ6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGV4dERpbWVuc2lvbnMudyA+IHBhZ2VXaWR0aCkge1xyXG4gICAgICAvLyBpZiB0aGUgdGV4dCBpcyB0byBsb25nLCByZWR1Y2UgZm9udFNpemUgNzAlIGFuZCB0aGUgb3ZlcmZsb3cgd2l0aCBiZSBjdXQgaW4gcHJpbnQuLi5cclxuICAgICAgdGV4dE1hcmdpbkxlZnQgPSAwO1xyXG4gICAgICBmb250U2l6ZUluUHQgPSBmb250U2l6ZUluUHQgKiAwLjc7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZShmb250U2l6ZUluUHQpO1xyXG4gICAgICB0ZXh0RGltZW5zaW9ucyA9IGRvYy5nZXRUZXh0RGltZW5zaW9ucyh0ZXh0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRleHRNYXJnaW5MZWZ0ID0gKHBhZ2VXaWR0aCAtIHRleHREaW1lbnNpb25zLncpIC8gMjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb250U2l6ZTogZm9udFNpemVJblB0LFxyXG4gICAgICBtYXJnaW5MZWZ0OiB0ZXh0TWFyZ2luTGVmdCxcclxuICAgICAgaGVpZ2h0OiB0ZXh0RGltZW5zaW9ucy5oXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGNvbW1lbnQgdG8gdGhlIGRvY3VtZW50XHJcbiAgICogKiBAcGFyYW0gIGRvYyAtIHBkZiBkb2N1bWVudFxyXG4gICAqICogQHBhcmFtICBjb21tZW50IC0gQ29tbWVudCB0byBhZGQgaW4gdGhlIGRvY3VtZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRDb21tZW50KGRvYzoganNQREYsIGNvbW1lbnQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29tbWVudE1hcmdpbkxlZnQgPSAxMDsgLy9tYXJnaW4gbGVmdCBhbmQgYm90dG9tIGlzIGZpeFxyXG4gICAgY29uc3QgY29tbWVudE1hcmdpbkJvdHRvbSA9IDEwO1xyXG4gICAgY29uc3QgbWFyZ2luVG9wID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodCAtIGNvbW1lbnRNYXJnaW5Cb3R0b207XHJcbiAgICB0aGlzLmFkZFRleHRJblBkZkRvYyhcclxuICAgICAgZG9jLFxyXG4gICAgICBjb21tZW50LFxyXG4gICAgICB0aGlzLlRFWFRQREZGT05ULmNvbW1lbnRGb250LFxyXG4gICAgICB0aGlzLlRFWFRQREZGT05ULmNvbW1lbnRGb250U3R5bGUsXHJcbiAgICAgIHRoaXMuVEVYVFBERkZPTlQuY29tbWVudEZvbnRTaXplLFxyXG4gICAgICBjb21tZW50TWFyZ2luTGVmdCxcclxuICAgICAgbWFyZ2luVG9wLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRUZXh0SW5QZGZEb2MoXHJcbiAgICBkb2M6IGpzUERGLFxyXG4gICAgdGV4dFRvQWRkOiBzdHJpbmcsXHJcbiAgICB0ZXh0Rm9udDogc3RyaW5nLFxyXG4gICAgdGV4dEZvbnRTdHlsZTogc3RyaW5nLFxyXG4gICAgdGV4dEZvbnRTaXplOiBudW1iZXIsXHJcbiAgICB0ZXh0TWFyZ2luTGVmdDogbnVtYmVyLFxyXG4gICAgdGV4dE1hcmdpblRvcDogbnVtYmVyLFxyXG4gICAgaXNDb21tZW50OiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIGRvYy5zZXRGb250KHRleHRGb250LCB0ZXh0Rm9udFN0eWxlKTtcclxuICAgIGRvYy5zZXRGb250U2l6ZSh0ZXh0Rm9udFNpemUpO1xyXG5cclxuICAgIGlmIChpc0NvbW1lbnQpIHtcclxuICAgICAgdGV4dFRvQWRkID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShcclxuICAgICAgICB0ZXh0VG9BZGQsXHJcbiAgICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCkgLSB0ZXh0TWFyZ2luTGVmdCAqIDNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGRvYy50ZXh0KHRleHRUb0FkZCwgdGV4dE1hcmdpbkxlZnQsIHRleHRNYXJnaW5Ub3ApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHByb2plY3Rpb24gYW5kL29yIHNjYWxlIHRvIHRoZSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSAgZG9jIC0gcGRmIGRvY3VtZW50XHJcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxyXG4gICAqIEBwYXJhbSAgZHBpIC0gRFBJIHJlc29sdXRpb24gb2YgdGhlIGRvY3VtZW50XHJcbiAgICogQHBhcmFtICBwcm9qZWN0aW9uIC0gQm9vbCB0byBpbmRpY2F0ZSBpZiBwcm9qZWN0aW9uIG5lZWQgdG8gYmUgYWRkZWRcclxuICAgKiBAcGFyYW0gIHNjYWxlIC0gQm9vbCB0byBpbmRpY2F0ZSBpZiBzY2FsZSBuZWVkIHRvIGJlIGFkZGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRQcm9qU2NhbGUoXHJcbiAgICBkb2M6IGpzUERGLFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICBkcGk6IG51bWJlcixcclxuICAgIHByb2plY3Rpb246IGJvb2xlYW4sXHJcbiAgICBzY2FsZTogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgY29uc3QgcHJvalNjYWxlU2l6ZSA9IDEyO1xyXG4gICAgY29uc3QgcHJvalNjYWxlTWFyZ2luTGVmdCA9IDEwO1xyXG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gMTU7XHJcbiAgICBjb25zdCBoZWlnaHRQaXhlbHMgPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0IC0gbWFyZ2luQm90dG9tO1xyXG5cclxuICAgIGxldCB0ZXh0UHJvalNjYWxlOiBzdHJpbmcgPSAnJztcclxuICAgIGlmIChwcm9qZWN0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IHByb2pUZXh0ID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8ucHJpbnRGb3JtLnByb2plY3Rpb24nKTtcclxuICAgICAgdGV4dFByb2pTY2FsZSArPSBwcm9qVGV4dCArICc6ICcgKyBtYXAucHJvamVjdGlvbjtcclxuICAgIH1cclxuICAgIGlmIChzY2FsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAocHJvamVjdGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRleHRQcm9qU2NhbGUgKz0gJyAgICc7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2NhbGVUZXh0ID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8ucHJpbnRGb3JtLnNjYWxlJyk7XHJcbiAgICAgIGNvbnN0IG1hcFNjYWxlID0gbWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKGRwaSk7XHJcbiAgICAgIHRleHRQcm9qU2NhbGUgKz0gc2NhbGVUZXh0ICsgJzogfiAxIC8gJyArIGZvcm1hdFNjYWxlKG1hcFNjYWxlKTtcclxuICAgIH1cclxuICAgIGRvYy5zZXRGb250KHRoaXMuVEVYVFBERkZPTlQuY29tbWVudEZvbnQpO1xyXG4gICAgZG9jLnNldEZvbnRTaXplKHByb2pTY2FsZVNpemUpO1xyXG4gICAgZG9jLnRleHQodGV4dFByb2pTY2FsZSwgcHJvalNjYWxlTWFyZ2luTGVmdCwgaGVpZ2h0UGl4ZWxzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgbGVnZW5kIHRvIHRoZSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSAgZG9jIC0gUGRmIGRvY3VtZW50IHdoZXJlIGxlZ2VuZCB3aWxsIGJlIGFkZGVkXHJcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxyXG4gICAqIEBwYXJhbSAgbWFyZ2lucyAtIFBhZ2UgbWFyZ2luc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgYWRkTGVnZW5kKFxyXG4gICAgZG9jOiBqc1BERixcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPixcclxuICAgIHJlc29sdXRpb246IG51bWJlclxyXG4gICkge1xyXG4gICAgLy8gR2V0IGh0bWwgY29kZSBmb3IgdGhlIGxlZ2VuZFxyXG4gICAgY29uc3Qgd2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGg7XHJcbiAgICBjb25zdCBodG1sID0gYXdhaXQgdGhpcy5nZXRMYXllcnNMZWdlbmRIdG1sKFxyXG4gICAgICBtYXAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICByZXNvbHV0aW9uXHJcbiAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgLy8gSWYgbm8gbGVnZW5kLCBzYXZlIHRoZSBtYXAgZGlyZWN0bHlcclxuICAgIGlmIChodG1sID09PSAnJykge1xyXG4gICAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyBDcmVhdGUgZGl2IHRvIGNvbnRhaW4gaHRtbCBjb2RlIGZvciBsZWdlbmRcclxuICAgIGNvbnN0IGRpdiA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICBkaXYuc3R5bGUudG9wID0gJzAnO1xyXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9ICctMSc7XHJcblxyXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcblxyXG4gICAgYXdhaXQgdGhpcy50aW1lb3V0KDEpO1xyXG4gICAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMoZGl2LCB7IHVzZUNPUlM6IHRydWUgfSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVtb3ZlSHRtbEVsZW1lbnQoZGl2KTtcclxuICAgIGlmIChjYW52YXMpIHtcclxuICAgICAgY29uc3QgcG91cmNlbnRhZ2VSZWR1Y3Rpb24gPSAwLjg1O1xyXG4gICAgICBjb25zdCBpbWFnZVNpemUgPSBbXHJcbiAgICAgICAgKHBvdXJjZW50YWdlUmVkdWN0aW9uICogKDI1LjQgKiBjYW52YXMud2lkdGgpKSAvIHJlc29sdXRpb24sXHJcbiAgICAgICAgKHBvdXJjZW50YWdlUmVkdWN0aW9uICogKDI1LjQgKiBjYW52YXMuaGVpZ2h0KSkgLyByZXNvbHV0aW9uXHJcbiAgICAgIF07XHJcbiAgICAgIGxldCBpbWdEYXRhO1xyXG4gICAgICBkb2MuYWRkUGFnZSgpO1xyXG4gICAgICBpbWdEYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICAgIGRvYy5hZGRJbWFnZShpbWdEYXRhLCAnUE5HJywgMTAsIDEwLCBpbWFnZVNpemVbMF0sIGltYWdlU2l6ZVsxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgdGhpcy5zYXZlRG9jKGRvYyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIGxlZ2VuZCB0byB0aGUgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gIGRvYyAtIFBkZiBkb2N1bWVudCB3aGVyZSBsZWdlbmQgd2lsbCBiZSBhZGRlZFxyXG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcclxuICAgKiBAcGFyYW0gIG1hcmdpbnMgLSBQYWdlIG1hcmdpbnNcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGFkZExlZ2VuZFNhbWVQYWdlKFxyXG4gICAgZG9jOiBqc1BERixcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPixcclxuICAgIHJlc29sdXRpb246IG51bWJlcixcclxuICAgIGxlZ2VuZFBvc2l0aW9uOiBzdHJpbmdcclxuICApIHtcclxuICAgIC8vIEdldCBodG1sIGNvZGUgZm9yIHRoZSBsZWdlbmRcclxuICAgIGNvbnN0IHdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoO1xyXG4gICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJzTGVnZW5kSHRtbChcclxuICAgICAgbWFwLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgcmVzb2x1dGlvblxyXG4gICAgKS50b1Byb21pc2UoKTtcclxuICAgIC8vIElmIG5vIGxlZ2VuZCwgc2F2ZSB0aGUgbWFwIGRpcmVjdGx5XHJcbiAgICBpZiAoaHRtbCA9PT0gJycpIHtcclxuICAgICAgYXdhaXQgdGhpcy5zYXZlRG9jKGRvYyk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIGRpdiB0byBjb250YWluIGh0bWwgY29kZSBmb3IgbGVnZW5kXHJcbiAgICBjb25zdCBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgZGl2LnN0eWxlLnRvcCA9ICcwJztcclxuICAgIGRpdi5zdHlsZS56SW5kZXggPSAnLTEnO1xyXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICBhd2FpdCB0aGlzLnRpbWVvdXQoMSk7XHJcbiAgICBjb25zdCBjYW52YXMgPSBhd2FpdCBodG1sMmNhbnZhcyhkaXYsIHsgdXNlQ09SUzogdHJ1ZSB9KS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZW1vdmVIdG1sRWxlbWVudChkaXYpO1xyXG4gICAgbGV0IG1hcmdpbnNMZWdlbmQ7XHJcbiAgICBpZiAoY2FudmFzKSB7XHJcbiAgICAgIGNvbnN0IHBvdXJjZW50YWdlUmVkdWN0aW9uID0gMC44NTtcclxuICAgICAgY29uc3QgaW1hZ2VTaXplID0gW1xyXG4gICAgICAgIChwb3VyY2VudGFnZVJlZHVjdGlvbiAqICgyNS40ICogY2FudmFzLndpZHRoKSkgLyByZXNvbHV0aW9uLFxyXG4gICAgICAgIChwb3VyY2VudGFnZVJlZHVjdGlvbiAqICgyNS40ICogY2FudmFzLmhlaWdodCkpIC8gcmVzb2x1dGlvblxyXG4gICAgICBdO1xyXG4gICAgICAvLyBNb3ZlIHRoZSBsZWdlbmQgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gb24gdGhlIHBhZ2VcclxuICAgICAgaWYgKGxlZ2VuZFBvc2l0aW9uID09PSAnYm90dG9tcmlnaHQnKSB7XHJcbiAgICAgICAgbWFyZ2luc0xlZ2VuZCA9IFtcclxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzJdIC0gaW1hZ2VTaXplWzFdLFxyXG4gICAgICAgICAgbWFyZ2luc1sxXSxcclxuICAgICAgICAgIG1hcmdpbnNbMl0sXHJcbiAgICAgICAgICBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLSBtYXJnaW5zWzFdIC0gaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgXTtcclxuICAgICAgfSBlbHNlIGlmIChsZWdlbmRQb3NpdGlvbiA9PT0gJ3RvcHJpZ2h0Jykge1xyXG4gICAgICAgIG1hcmdpbnNMZWdlbmQgPSBbXHJcbiAgICAgICAgICBtYXJnaW5zWzBdLFxyXG4gICAgICAgICAgbWFyZ2luc1sxXSxcclxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzBdIC0gaW1hZ2VTaXplWzFdLFxyXG4gICAgICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoIC0gbWFyZ2luc1sxXSAtIGltYWdlU2l6ZVswXVxyXG4gICAgICAgIF07XHJcbiAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICdib3R0b21sZWZ0Jykge1xyXG4gICAgICAgIC8vIFdoZW4gdGhlIGxlZ2VuZCBpcyBpbiB0aGUgYm90dG9tIGxlZnQsIHJhaXNlIHRoZSBsZWdlbmQgc2xpZ2h0bHkgdXB3YXJkIHNvIHRoYXQgYXR0cmlidXRpb25zIGFyZSB2aXNpYmxlXHJcbiAgICAgICAgbWFyZ2luc0xlZ2VuZCA9IFtcclxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzJdIC0gaW1hZ2VTaXplWzFdIC0gMTUsXHJcbiAgICAgICAgICBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLSBtYXJnaW5zWzNdIC0gaW1hZ2VTaXplWzBdLFxyXG4gICAgICAgICAgbWFyZ2luc1syXSArIDE1LFxyXG4gICAgICAgICAgbWFyZ2luc1szXVxyXG4gICAgICAgIF07XHJcbiAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICd0b3BsZWZ0Jykge1xyXG4gICAgICAgIG1hcmdpbnNMZWdlbmQgPSBbXHJcbiAgICAgICAgICBtYXJnaW5zWzBdLFxyXG4gICAgICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoIC0gbWFyZ2luc1szXSAtIGltYWdlU2l6ZVswXSxcclxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzBdIC0gaW1hZ2VTaXplWzFdLFxyXG4gICAgICAgICAgbWFyZ2luc1szXVxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hZGRDYW52YXMoZG9jLCBjYW52YXMsIG1hcmdpbnNMZWdlbmQpOyAvLyB0aGlzIGFkZHMgdGhlIGxlZ2VuZFxyXG4gICAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlZmluZU5iRmlsZVRvUHJvY2VzcyhuYkZpbGVUb1Byb2Nlc3MpIHtcclxuICAgIHRoaXMubmJGaWxlVG9Qcm9jZXNzID0gbmJGaWxlVG9Qcm9jZXNzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0aW1lb3V0KG1zKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQ2FudmFzKFxyXG4gICAgZG9jOiBqc1BERixcclxuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXHJcbiAgICBtYXJnaW5zOiBBcnJheTxudW1iZXI+XHJcbiAgKSB7XHJcbiAgICBsZXQgaW1hZ2U7XHJcbiAgICBpZiAoY2FudmFzKSB7XHJcbiAgICAgIGltYWdlID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGltYWdlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGltYWdlLmxlbmd0aCA8IDIwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1dhcm5pbmc6IEFuIGltYWdlIGNhbm5vdCBiZSBwcmludCBpbiBwZGYgZmlsZScpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbWFnZVNpemUgPSB0aGlzLmdldEltYWdlU2l6ZVRvRml0UGRmKGRvYywgY2FudmFzLCBtYXJnaW5zKTtcclxuICAgICAgZG9jLmFkZEltYWdlKFxyXG4gICAgICAgIGltYWdlLFxyXG4gICAgICAgICdQTkcnLFxyXG4gICAgICAgIG1hcmdpbnNbM10sXHJcbiAgICAgICAgbWFyZ2luc1swXSxcclxuICAgICAgICBpbWFnZVNpemVbMF0sXHJcbiAgICAgICAgaW1hZ2VTaXplWzFdXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBkb2MucmVjdChtYXJnaW5zWzNdLCBtYXJnaW5zWzBdLCBpbWFnZVNpemVbMF0sIGltYWdlU2l6ZVsxXSk7XHJcblxyXG4gICAgICB0aGlzLmltZ1NpemVBZGRlZCA9IGltYWdlU2l6ZTsgLy8ga2VlcCBpbWcgc2l6ZSBmb3IgZ2VvcmVmIGxhdGVyXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPIGZpeCBwcmludGluZyB3aXRoIGltYWdlIHJlc29sdXRpb25cclxuICBhZGRNYXAoXHJcbiAgICBkb2M6IGpzUERGLFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICByZXNvbHV0aW9uOiBudW1iZXIsXHJcbiAgICBkb2NTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPixcclxuICAgIGxlZ2VuZFBvc3Rpb246IFByaW50TGVnZW5kUG9zaXRpb25cclxuICApIHtcclxuICAgIGNvbnN0IG1hcFNpemUgPSBtYXAub2wuZ2V0U2l6ZSgpIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICBjb25zdCB2aWV3UmVzb2x1dGlvbiA9IG1hcC5vbC5nZXRWaWV3KCkuZ2V0UmVzb2x1dGlvbigpO1xyXG4gICAgY29uc3QgZGltZW5zaW9uUGl4ZWxzID0gdGhpcy5zZXRNYXBSZXNvbHV0aW9uKFxyXG4gICAgICBtYXAsXHJcbiAgICAgIGRvY1NpemUsXHJcbiAgICAgIHJlc29sdXRpb24sXHJcbiAgICAgIHZpZXdSZXNvbHV0aW9uXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc3RhdHVzJCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgbGV0IHRpbWVvdXQ7XHJcbiAgICBtYXAub2wub25jZSgncmVuZGVyY29tcGxldGUnLCBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBtYXBDYW52YXMgPSBldmVudC50YXJnZXRcclxuICAgICAgICAuZ2V0Vmlld3BvcnQoKVxyXG4gICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJykgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcbiAgICAgIGNvbnN0IG1hcFJlc3VsdENhbnZhcyA9IGF3YWl0IHRoaXMuZHJhd01hcChkaW1lbnNpb25QaXhlbHMsIG1hcENhbnZhcyk7XHJcbiAgICAgIHRoaXMubWFwUHJpbnRFeHRlbnQgPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCdFUFNHOjM4NTcnKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRPcmlnaW5hbE1hcFNpemUobWFwLCBtYXBTaXplLCB2aWV3UmVzb2x1dGlvbik7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmRyYXdNYXBDb250cm9scyhtYXAsIG1hcFJlc3VsdENhbnZhcywgbGVnZW5kUG9zdGlvbik7XHJcblxyXG4gICAgICBjb25zdCBtYXBTdGF0dXMkJCA9IG1hcC5zdGF0dXMkLnN1YnNjcmliZSgobWFwU3RhdHVzOiBTdWJqZWN0U3RhdHVzKSA9PiB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIGlmIChtYXBTdGF0dXMgIT09IFN1YmplY3RTdGF0dXMuRG9uZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXBTdGF0dXMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIGxldCBzdGF0dXMgPSBTdWJqZWN0U3RhdHVzLkRvbmU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmIChtYXBSZXN1bHRDYW52YXMud2lkdGggIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDYW52YXMoZG9jLCBtYXBSZXN1bHRDYW52YXMsIG1hcmdpbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5FcnJvcjtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlQm9keScsXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlSGVhZGVyJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdHVzJC5uZXh0KHN0YXR1cyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gSWYgbm8gbG9hZGluZyBhcyBzdGFydGVkIGFmdGVyIDIwMG1zLCB0aGVuIHByb2JhYmx5IG5vIGxvYWRpbmdcclxuICAgICAgLy8gaXMgcmVxdWlyZWQuXHJcbiAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgbWFwU3RhdHVzJCQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgbGV0IHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRG9uZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgaWYgKG1hcFJlc3VsdENhbnZhcy53aWR0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENhbnZhcyhkb2MsIG1hcFJlc3VsdENhbnZhcywgbWFyZ2lucyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBzdGF0dXMgPSBTdWJqZWN0U3RhdHVzLkVycm9yO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VCb2R5JyxcclxuICAgICAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VIZWFkZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlc2V0T3JpZ2luYWxNYXBTaXplKG1hcCwgbWFwU2l6ZSwgdmlld1Jlc29sdXRpb24pO1xyXG4gICAgICAgIHN0YXR1cyQubmV4dChzdGF0dXMpO1xyXG4gICAgICB9LCAyMDApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHN0YXR1cyQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1hcFJlc29sdXRpb24oXHJcbiAgICBtYXA6IElnb01hcCxcclxuICAgIGluaXRpYWxTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyLFxyXG4gICAgdmlld1Jlc29sdXRpb246IG51bWJlclxyXG4gICk6IFtudW1iZXIsIG51bWJlcl0ge1xyXG4gICAgY29uc3QgbWFwU2l6ZSA9IG1hcC5vbC5nZXRTaXplKCk7XHJcbiAgICBjb25zdCB3aWR0aFBpeGVscyA9IE1hdGgucm91bmQoKGluaXRpYWxTaXplWzBdICogcmVzb2x1dGlvbikgLyAyNS40KTtcclxuICAgIGNvbnN0IGhlaWdodFBpeGVscyA9IE1hdGgucm91bmQoKGluaXRpYWxTaXplWzFdICogcmVzb2x1dGlvbikgLyAyNS40KTtcclxuXHJcbiAgICAvLyBTZXQgcHJpbnQgc2l6ZVxyXG4gICAgY29uc3QgcHJpbnRTaXplID0gW3dpZHRoUGl4ZWxzLCBoZWlnaHRQaXhlbHNdO1xyXG4gICAgbWFwLm9sLnNldFNpemUocHJpbnRTaXplKTtcclxuICAgIGNvbnN0IHNjYWxpbmcgPSBNYXRoLm1pbihcclxuICAgICAgd2lkdGhQaXhlbHMgLyBtYXBTaXplWzBdLFxyXG4gICAgICBoZWlnaHRQaXhlbHMgLyBtYXBTaXplWzFdXHJcbiAgICApO1xyXG4gICAgbWFwLm9sLmdldFZpZXcoKS5zZXRSZXNvbHV0aW9uKHZpZXdSZXNvbHV0aW9uIC8gc2NhbGluZyk7XHJcblxyXG4gICAgcmV0dXJuIFt3aWR0aFBpeGVscywgaGVpZ2h0UGl4ZWxzXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRPcmlnaW5hbE1hcFNpemUoXHJcbiAgICBtYXA6IElnb01hcCxcclxuICAgIGluaXRpYWxTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgdmlld1Jlc29sdXRpb246IG51bWJlclxyXG4gICkge1xyXG4gICAgbWFwLm9sLnNldFNpemUoaW5pdGlhbFNpemUpO1xyXG4gICAgbWFwLm9sLmdldFZpZXcoKS5zZXRSZXNvbHV0aW9uKHZpZXdSZXNvbHV0aW9uKTtcclxuICAgIG1hcC5vbC51cGRhdGVTaXplKCk7XHJcbiAgICBtYXAub2wucmVuZGVyU3luYygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd01hcChcclxuICAgIHNpemU6IEFycmF5PG51bWJlcj4sXHJcbiAgICBtYXBDYW52YXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTENhbnZhc0VsZW1lbnQ+XHJcbiAgKTogUHJvbWlzZTxIVE1MQ2FudmFzRWxlbWVudD4ge1xyXG4gICAgY29uc3QgbWFwUmVzdWx0Q2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBtYXBSZXN1bHRDYW52YXMud2lkdGggPSBzaXplWzBdO1xyXG4gICAgbWFwUmVzdWx0Q2FudmFzLmhlaWdodCA9IHNpemVbMV07XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcENhbnZhcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgY2FudmFzID0gbWFwQ2FudmFzW2luZGV4XTtcclxuICAgICAgaWYgKGNhbnZhcy53aWR0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUNhbnZhcyhjYW52YXMsIG1hcFJlc3VsdENhbnZhcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtYXBSZXN1bHRDYW52YXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNhbnZhcyhcclxuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXHJcbiAgICBtYXBSZXN1bHRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50XHJcbiAgKSB7XHJcbiAgICBjb25zdCBtYXBDb250ZXh0UmVzdWx0ID0gbWFwUmVzdWx0Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjb25zdCBvcGFjaXR5ID0gY2FudmFzLnBhcmVudEVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBjYW52YXMuc3R5bGUub3BhY2l0eTtcclxuICAgIG1hcENvbnRleHRSZXN1bHQuZ2xvYmFsQWxwaGEgPSBvcGFjaXR5ID09PSAnJyA/IDEgOiBOdW1iZXIob3BhY2l0eSk7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBjYW52YXMuc3R5bGUudHJhbnNmb3JtO1xyXG4gICAgbGV0IG1hdHJpeDogbnVtYmVyW107XHJcbiAgICBpZiAodHJhbnNmb3JtKSB7XHJcbiAgICAgIC8vIEdldCB0aGUgdHJhbnNmb3JtIHBhcmFtZXRlcnMgZnJvbSB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gbWF0cml4XHJcbiAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybVxyXG4gICAgICAgIC5tYXRjaCgvXm1hdHJpeFxcKChbXlxcKF0qKVxcKSQvKVsxXVxyXG4gICAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgICAgLm1hcChOdW1iZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWF0cml4ID0gW1xyXG4gICAgICAgIHBhcnNlRmxvYXQoY2FudmFzLnN0eWxlLndpZHRoKSAvIGNhbnZhcy53aWR0aCxcclxuICAgICAgICAwLFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgcGFyc2VGbG9hdChjYW52YXMuc3R5bGUuaGVpZ2h0KSAvIGNhbnZhcy5oZWlnaHQsXHJcbiAgICAgICAgMCxcclxuICAgICAgICAwXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLnNldFRyYW5zZm9ybS5hcHBseShcclxuICAgICAgbWFwQ29udGV4dFJlc3VsdCxcclxuICAgICAgbWF0cml4XHJcbiAgICApO1xyXG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gY2FudmFzLnBhcmVudEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yO1xyXG4gICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xyXG4gICAgICBtYXBDb250ZXh0UmVzdWx0LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcclxuICAgICAgbWFwQ29udGV4dFJlc3VsdC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgbWFwQ29udGV4dFJlc3VsdC5kcmF3SW1hZ2UoY2FudmFzLCAwLCAwKTtcclxuICAgIG1hcENvbnRleHRSZXN1bHQuZ2xvYmFsQWxwaGEgPSAxO1xyXG4gICAgLy8gcmVzZXQgY2FudmFzIHRyYW5zZm9ybSB0byBpbml0aWFsXHJcbiAgICBtYXBDb250ZXh0UmVzdWx0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdNYXBDb250cm9scyhcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCxcclxuICAgIHBvc2l0aW9uOiBQcmludExlZ2VuZFBvc2l0aW9uXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAvLyBHZXQgdGhlIHNjYWxlIGFuZCBhdHRyaWJ1dGlvblxyXG4gICAgLy8gd2UgdXNlIGNsb25lTm9kZSB0byBtb2RpZnkgdGhlIG5vZGVzIHRvIHByaW50IHdpdGhvdXQgbW9kaWZ5aW5nIGl0IG9uIHRoZSBwYWdlLCB1c2luZyBkZWVwOnRydWUgdG8gZ2V0IGNoaWxkcmVuXHJcbiAgICBjb25zdCBtYXBPdmVybGF5SFRNTCA9IG1hcC5vbFxyXG4gICAgICAuZ2V0T3ZlcmxheUNvbnRhaW5lclN0b3BFdmVudCgpXHJcbiAgICAgIC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAvLyBhZGQgTm9ydGggRGlyZWN0aW9uIHRvIG1hcE92ZXJseVxyXG4gICAgYXdhaXQgdGhpcy5hZGROb3J0aERpcmVjdGlvbihtYXBPdmVybGF5SFRNTCwgcG9zaXRpb24pO1xyXG4gICAgLy8gYWRkIG1hcCBBdHRyaWJ1dGlvbiBkZXNpZ25lIHRvIHByaW50XHJcbiAgICBhd2FpdCB0aGlzLmFkZEF0dHJpYnV0aW9uKG1hcE92ZXJsYXlIVE1MKTtcclxuXHJcbiAgICAvLyBzZXQgJ092ZXJsYXlDb250YWluZXInIHNpemUgdG8gcHJpbnQgc2l6ZVxyXG4gICAgbWFwT3ZlcmxheUhUTUwuc3R5bGUud2lkdGggPSBjYW52YXMud2lkdGggKyAncHgnO1xyXG4gICAgbWFwT3ZlcmxheUhUTUwuc3R5bGUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodCArICdweCc7XHJcbiAgICAvLyB3ZSBhZGQgemluZGV4IC0xIHRvIG5vdCBzaG93IG1vZGlmaWNhdGlvbiB0byB0aGUgdXNlclxyXG4gICAgbWFwT3ZlcmxheUhUTUwuc3R5bGUuekluZGV4ID0gJy0xJztcclxuICAgIC8vIGFuZCBtYWtlIHN1cmUgaHRtbDJjYW52YXMgdG8gcmVuZGVyIHRoZSBpbWFnZSBjb3JyZWN0bHlcclxuICAgIGRvY3VtZW50XHJcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvbC12aWV3cG9ydCcpWzBdXHJcbiAgICAgIC5hcHBlbmRDaGlsZChtYXBPdmVybGF5SFRNTCk7XHJcbiAgICAvLyBDaGFuZ2UgdGhlIHN0eWxlcyBvZiBoeXBlcmxpbmsgaW4gdGhlIHByaW50ZWQgdmVyc2lvblxyXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBPdmVybGF5IGludG8gYSBjYW52YXNcclxuICAgIC8vIHNjYWxlIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IGluIGdvb2dsZSBjaHJvbWVcclxuICAgIC8vIGJhY2tncm91bmQgYXMgbnVsbCBiZWNhdXNlIG90aGVyd2lzZSBpdCBpcyB3aGl0ZSBhbmQgY292ZXIgdGhlIG1hcFxyXG4gICAgLy8gYWxsb3d0YWludCBpcyB0byBhbGxvdyByZW5kZXJpbmcgaW1hZ2VzIGluIHRoZSBhdHRyaWJ1dGlvbnNcclxuICAgIC8vIHVzZUNPUlM6IHRydWUgcG91ciBwZXJtZXR0cmUgZGUgcmVuZGVyZXIgbGVzIGltYWdlcyAobmUgbWFyY2hlIHBhcyBlbiBsb2NhbClcclxuICAgIGNvbnN0IGNhbnZhc092ZXJsYXlIVE1MID0gYXdhaXQgaHRtbDJjYW52YXMobWFwT3ZlcmxheUhUTUwsIHtcclxuICAgICAgc2NhbGU6IDEsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogbnVsbCxcclxuICAgICAgYWxsb3dUYWludDogdHJ1ZSxcclxuICAgICAgdXNlQ09SUzogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGNhbnZhc092ZXJsYXlIVE1MLndpZHRoICE9PSAwICYmIGNhbnZhc092ZXJsYXlIVE1MLmhlaWdodCAhPT0gMCkge1xyXG4gICAgICBjb250ZXh0LmRyYXdJbWFnZShjYW52YXNPdmVybGF5SFRNTCwgMCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVtb3ZlICdtYXBPdmVybGF5SFRNTCcgYWZ0ZXIgZ2VuZXJhdGluZyBjYW52YXNcclxuICAgIG1hcE92ZXJsYXlIVE1MLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZGROb3J0aERpcmVjdGlvbihcclxuICAgIG1hcE92ZXJsYXlIVE1MOiBIVE1MRWxlbWVudCxcclxuICAgIHBvc2l0aW9uOiBQcmludExlZ2VuZFBvc2l0aW9uXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBub3J0aERpcmVjdGlvbiA9IGRvY3VtZW50XHJcbiAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWdvLXJvdGF0aW9uLWJ1dHRvbicpWzBdXHJcbiAgICAgIC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBIVE1MQnV0dG9uID0gbm9ydGhEaXJlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXHJcbiAgICAgICdidXR0b24nXHJcbiAgICApWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCFIVE1MQnV0dG9uKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gaW4gY2FzZSBsZWdlbmQgcG9zaXRpb24gaXMgdG9wcmlnaHRcclxuICAgIC8vIHdlIGNoYW5nZSByb3RhdGUgYnRuIHRvIHRvcGxlZnRcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcHJpZ2h0Jykge1xyXG4gICAgICBub3J0aERpcmVjdGlvbi5zdHlsZS53aWR0aCA9ICdpbmhlcml0JztcclxuICAgICAgbm9ydGhEaXJlY3Rpb24uc3R5bGUubGVmdCA9ICcxMHB4JztcclxuICAgIH1cclxuICAgIEhUTUxCdXR0b24ucGFyZW50RWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcclxuICAgIEhUTUxCdXR0b24uc3R5bGUuY29sb3IgPSAnIzAwMCc7XHJcbiAgICBtYXBPdmVybGF5SFRNTC5hcHBlbmRDaGlsZChub3J0aERpcmVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGFkZEF0dHJpYnV0aW9uKG1hcE92ZXJsYXlIVE1MOiBIVE1MRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgSFRNTGF0dHJpYnV0aW9uID1cclxuICAgICAgbWFwT3ZlcmxheUhUTUwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb2wtYXR0cmlidXRpb24nKVswXTtcclxuICAgIGNvbnN0IEhUTUxCdXR0b24gPSBIVE1MYXR0cmlidXRpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpWzBdO1xyXG4gICAgaWYgKCFIVE1MQnV0dG9uKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgSFRNTEJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtaHRtbDJjYW52YXMtaWdub3JlJywgJ3RydWUnKTtcclxuICAgIGNvbnN0IG9sQ29sbGFwc2VkOiBib29sZWFuID1cclxuICAgICAgSFRNTGF0dHJpYnV0aW9uLmNsYXNzTGlzdC5jb250YWlucygnb2wtY29sbGFwc2VkJyk7XHJcbiAgICBpZiAob2xDb2xsYXBzZWQpIHtcclxuICAgICAgSFRNTGF0dHJpYnV0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ29sLWNvbGxhcHNlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWQgYW4gaW1hZ2Ugb2YgdGhlIG1hcCB3aXRoIGFkZGl0aW9uIG9mIGluZm9ybWF0aW9uc1xyXG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcclxuICAgKiBAcGFyYW0gIGZvcm1hdCAtIEltYWdlIGZvcm1hdC4gZGVmYXVsdCB2YWx1ZSB0byBcInBuZ1wiXHJcbiAgICogQHBhcmFtICBwcm9qZWN0aW9uIC0gSW5kaWNhdGUgaWYgcHJvamVjdGlvbiBuZWVkIHRvIGJlIGFkZC4gRGVmYXVsdCB0byBmYWxzZVxyXG4gICAqIEBwYXJhbSAgc2NhbGUgLSBJbmRpY2F0ZSBpZiBzY2FsZSBuZWVkIHRvIGJlIGFkZC4gRGVmYXVsdCB0byBmYWxzZVxyXG4gICAqIEBwYXJhbSAgbGVnZW5kIC0gSW5kaWNhdGUgaWYgdGhlIGxlZ2VuZCBvZiBsYXllcnMgbmVlZCB0byBiZSBkb3dubG9hZC4gRGVmYXVsdCB0byBmYWxzZVxyXG4gICAqIEBwYXJhbSAgdGl0bGUgLSBUaXRsZSB0byBhZGQgZm9yIHRoZSBtYXAgLSBEZWZhdWx0IHRvIGJsYW5rXHJcbiAgICogQHBhcmFtICBzdWJ0aXRsZSAtIFN1YnRpdGxlIHRvIGFkZCBmb3IgdGhlIG1hcCAtIERlZmF1bHQgdG8gYmxhbmtcclxuICAgKiBAcGFyYW0gIGNvbW1lbnQgLSBDb21tZW50IHRvIGFkZCBmb3IgdGhlIG1hcCAtIERlZmF1bHQgdG8gYmxhbmtcclxuICAgKiBAcGFyYW0gIGRvWmlwRmlsZSAtIEluZGljYXRlIGlmIHdlIGRvIGEgemlwIHdpdGggdGhlIGZpbGVcclxuICAgKiBAcmV0dXJuIEltYWdlIGZpbGUgb2YgdGhlIG1hcCB3aXRoIGV4dGVuc2lvbiBmb3JtYXQgZ2l2ZW4gYXMgcGFyYW1ldGVyXHJcbiAgICovXHJcbiAgZG93bmxvYWRNYXBJbWFnZShcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgcHJpbnRSZXNvbHV0aW9uOiBQcmludFJlc29sdXRpb24sXHJcbiAgICBmb3JtYXQgPSAncG5nJyxcclxuICAgIHByb2plY3Rpb24gPSBmYWxzZSxcclxuICAgIHNjYWxlID0gZmFsc2UsXHJcbiAgICB0aXRsZSA9ICcnLFxyXG4gICAgc3VidGl0bGUgPSAnJyxcclxuICAgIGNvbW1lbnQgPSAnJyxcclxuICAgIGRvWmlwRmlsZSA9IHRydWUsXHJcbiAgICBsZWdlbmRQb3NpdGlvbjogUHJpbnRMZWdlbmRQb3NpdGlvblxyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhdHVzJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICB0aGlzLmFjdGl2aXR5SWQgPSB0aGlzLmFjdGl2aXR5U2VydmljZS5yZWdpc3RlcigpO1xyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgZm9ybWF0ID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBjb25zdCByZXNvbHV0aW9uID0gK3ByaW50UmVzb2x1dGlvbjtcclxuICAgIGNvbnN0IGluaXRpYWxNYXBTaXplID0gbWFwLm9sLmdldFNpemUoKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgY29uc3Qgdmlld1Jlc29sdXRpb24gPSBtYXAub2wuZ2V0VmlldygpLmdldFJlc29sdXRpb24oKTtcclxuXHJcbiAgICBtYXAub2wub25jZSgncmVuZGVyY29tcGxldGUnLCBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBzaXplID0gbWFwLm9sLmdldFNpemUoKTtcclxuICAgICAgY29uc3QgbWFwQ2FudmFzID0gZXZlbnQudGFyZ2V0XHJcbiAgICAgICAgLmdldFZpZXdwb3J0KClcclxuICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gICAgICBjb25zdCBtYXBSZXN1bHRDYW52YXMgPSBhd2FpdCB0aGlzLmRyYXdNYXAoc2l6ZSwgbWFwQ2FudmFzKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRPcmlnaW5hbE1hcFNpemUobWFwLCBpbml0aWFsTWFwU2l6ZSwgdmlld1Jlc29sdXRpb24pO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5kcmF3TWFwQ29udHJvbHMobWFwLCBtYXBSZXN1bHRDYW52YXMsIGxlZ2VuZFBvc2l0aW9uKTtcclxuICAgICAgLy8gQ2hlY2sgdGhlIGxlZ2VuZFBvc2l0aW9uXHJcbiAgICAgIGlmIChsZWdlbmRQb3NpdGlvbiAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgWyd0b3BsZWZ0JywgJ3RvcHJpZ2h0JywgJ2JvdHRvbWxlZnQnLCAnYm90dG9tcmlnaHQnXS5pbmRleE9mKFxyXG4gICAgICAgICAgICBsZWdlbmRQb3NpdGlvblxyXG4gICAgICAgICAgKSA+IC0xXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZExlZ2VuZFRvSW1hZ2UoXHJcbiAgICAgICAgICAgIG1hcFJlc3VsdENhbnZhcyxcclxuICAgICAgICAgICAgbWFwLFxyXG4gICAgICAgICAgICByZXNvbHV0aW9uLFxyXG4gICAgICAgICAgICBsZWdlbmRQb3NpdGlvbixcclxuICAgICAgICAgICAgZm9ybWF0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICduZXdwYWdlJykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5nZXRMYXllcnNMZWdlbmRJbWFnZShtYXAsIGZvcm1hdCwgZG9aaXBGaWxlLCByZXNvbHV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gYWRkIG90aGVyIGluZm9ybWF0aW9uIHRvIGZpbmFsIGNhbnZhcyBiZWZvcmUgZXhwb3J0aW5nXHJcbiAgICAgIGNvbnN0IG5ld0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBuZXdDb250ZXh0ID0gbmV3Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgIC8vIFBvc3Rpb24gaW4gaGVpZ2h0IHRvIHNldCB0aGUgY2FudmFzIGluIG5ldyBjYW52YXNcclxuICAgICAgbGV0IHBvc2l0aW9uSENhbnZhcyA9IDA7XHJcbiAgICAgIC8vIEdldCBoZWlnaHQvd2lkdGggb2YgbWFwIGNhbnZhc1xyXG4gICAgICBjb25zdCB3aWR0aCA9IG1hcFJlc3VsdENhbnZhcy53aWR0aDtcclxuICAgICAgbGV0IGhlaWdodCA9IG1hcFJlc3VsdENhbnZhcy5oZWlnaHQ7XHJcbiAgICAgIC8vIFNldCBGb250IHRvIGNhbGN1bGF0ZSBjb21tZW50IHdpZHRoXHJcbiAgICAgIG5ld0NvbnRleHQuZm9udCA9ICcyMHB4IENhbGlicmknO1xyXG4gICAgICBjb25zdCBjb21tZW50V2lkdGggPSBuZXdDb250ZXh0Lm1lYXN1cmVUZXh0KGNvbW1lbnQpLndpZHRoO1xyXG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciB0aXRsZSBpZiBkZWZpbmVkXHJcbiAgICAgIGhlaWdodCA9IHRpdGxlICE9PSAnJyA/IGhlaWdodCArIDMwIDogaGVpZ2h0O1xyXG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciB0aXRsZSBpZiBkZWZpbmVkXHJcbiAgICAgIGhlaWdodCA9IHN1YnRpdGxlICE9PSAnJyA/IGhlaWdodCArIDMwIDogaGVpZ2h0O1xyXG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciBwcm9qZWN0aW9uIG9yIHNjYWxlIChzYW1lIGxpbmUpIGlmIGRlZmluZWRcclxuICAgICAgaGVpZ2h0ID0gcHJvamVjdGlvbiAhPT0gZmFsc2UgfHwgc2NhbGUgIT09IGZhbHNlID8gaGVpZ2h0ICsgMzAgOiBoZWlnaHQ7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uSFByb2pTY2FsZSA9IGhlaWdodCAtIDEwO1xyXG4gICAgICAvLyBEZWZpbmUgbnVtYmVyIG9mIGxpbmUgZGVwZW5kaW5nIG9mIHRoZSBjb21tZW50IGxlbmd0aFxyXG4gICAgICBjb25zdCBjb21tZW50TmJMaW5lID0gTWF0aC5jZWlsKGNvbW1lbnRXaWR0aCAvIHdpZHRoKTtcclxuICAgICAgLy8gQWRkIGhlaWdodCBmb3IgbXVsdGlsaW5lIGNvbW1lbnQgaWYgZGVmaW5lZFxyXG4gICAgICBoZWlnaHQgPSBjb21tZW50ICE9PSAnJyA/IGhlaWdodCArIGNvbW1lbnROYkxpbmUgKiAzMCA6IGhlaWdodDtcclxuICAgICAgbGV0IHBvc2l0aW9uSENvbW1lbnQgPSBoZWlnaHQgLSBjb21tZW50TmJMaW5lICogMjAgKyA1O1xyXG4gICAgICAvLyBTZXQgdGhlIG5ldyBjYW52YXMgd2l0aCB0aGUgbmV3IGNhbGN1bGF0ZWQgc2l6ZVxyXG4gICAgICBuZXdDYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgbmV3Q2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgIGlmIChbJ2JtcCcsICdnaWYnLCAnanBlZycsICdwbmcnLCAndGlmZiddLmluZGV4T2YoZm9ybWF0KSA+IC0xKSB7XHJcbiAgICAgICAgLy8gUGF0Y2ggSnBlZyBkZWZhdWx0IGJsYWNrIGJhY2tncm91bmQgdG8gd2hpdGVcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBmb3JtYXQgPT09ICdqcGVnJyB8fFxyXG4gICAgICAgICAgdGl0bGUgIT09ICcnIHx8XHJcbiAgICAgICAgICBzdWJ0aXRsZSAhPT0gJycgfHxcclxuICAgICAgICAgIGNvbW1lbnQgIT09ICcnIHx8XHJcbiAgICAgICAgICBwcm9qZWN0aW9uICE9PSBmYWxzZSB8fFxyXG4gICAgICAgICAgc2NhbGUgIT09IGZhbHNlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBuZXdDb250ZXh0LmZpbGxTdHlsZSA9ICcjZmZmZmZmJztcclxuICAgICAgICAgIG5ld0NvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICBuZXdDb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgYSB0aXRsZSBuZWVkIHRvIGJlIGFkZGVkIHRvIGNhbnZhc1xyXG4gICAgICBpZiAodGl0bGUgIT09ICcnKSB7XHJcbiAgICAgICAgLy8gU2V0IGZvbnQgZm9yIHRpdGxlXHJcbiAgICAgICAgLy8gQWRqdXN0IGFjY29yZGluZyB0byB0aXRsZSBsZW5ndGhcclxuICAgICAgICBuZXdDb250ZXh0LmZvbnQgPSAnMjZweCBDYWxpYnJpJztcclxuICAgICAgICBwb3NpdGlvbkhDYW52YXMgPSAzMDtcclxuICAgICAgICBuZXdDb250ZXh0LnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgIG5ld0NvbnRleHQuZmlsbFRleHQodGl0bGUsIHdpZHRoIC8gMiwgMjAsIHdpZHRoICogMC45KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHN1YnRpdGxlICE9PSAnJykge1xyXG4gICAgICAgIC8vIFNldCBmb250IGZvciBzdWJ0aXRsZVxyXG4gICAgICAgIC8vIEFkanVzdCBhY2NvcmRpbmcgdG8gdGl0bGUgbGVuZ3RoXHJcbiAgICAgICAgbmV3Q29udGV4dC5mb250ID0gJzI2cHggQ2FsaWJyaSc7XHJcbiAgICAgICAgcG9zaXRpb25IQ2FudmFzID0gNjA7XHJcbiAgICAgICAgbmV3Q29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KHN1YnRpdGxlLCB3aWR0aCAvIDIsIDUwLCB3aWR0aCAqIDAuOSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNldCBmb250IGZvciBuZXh0IHNlY3Rpb25cclxuICAgICAgbmV3Q29udGV4dC5mb250ID0gJzIwcHggQ2FsaWJyaSc7XHJcbiAgICAgIC8vIElmIHByb2plY3Rpb24gb3IvZW5kIHNjYWxlIG5lZWQgdG8gYmUgYWRkZWQgdG8gY2FudmFzXHJcbiAgICAgIGlmIChwcm9qZWN0aW9uICE9PSBmYWxzZSB8fCBzY2FsZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcHJvamVjdGlvblNjYWxlVGV4dCA9ICcnO1xyXG4gICAgICAgIGlmIChwcm9qZWN0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgY29uc3QgcHJvalRleHQgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5wcmludEZvcm0ucHJvamVjdGlvbicpO1xyXG4gICAgICAgICAgcHJvamVjdGlvblNjYWxlVGV4dCA9IHByb2pUZXh0ICsgJzogJyArIG1hcC5wcm9qZWN0aW9uICsgJyAgICAgICAgICc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2NhbGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBjb25zdCBzY2FsZVRleHQgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5wcmludEZvcm0uc2NhbGUnKTtcclxuICAgICAgICAgIGNvbnN0IG1hcFNjYWxlID0gbWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKHJlc29sdXRpb24pO1xyXG4gICAgICAgICAgcHJvamVjdGlvblNjYWxlVGV4dCArPSBzY2FsZVRleHQgKyAnOiB+IDEgLyAnICsgZm9ybWF0U2NhbGUobWFwU2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdDb250ZXh0LnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgIG5ld0NvbnRleHQuZmlsbFRleHQoXHJcbiAgICAgICAgICBwcm9qZWN0aW9uU2NhbGVUZXh0LFxyXG4gICAgICAgICAgd2lkdGggLyAyLFxyXG4gICAgICAgICAgcG9zaXRpb25IUHJvalNjYWxlLFxyXG4gICAgICAgICAgd2lkdGggKiAwLjlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiBhIGNvbW1lbnQgbmVlZCB0byBiZSBhZGRlZCB0byBjYW52YXNcclxuICAgICAgaWYgKGNvbW1lbnQgIT09ICcnKSB7XHJcbiAgICAgICAgbmV3Q29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICAvLyBJZiBvbmx5IG9uZSBsaW5lLCBubyBuZWVkIHRvIG11bHRpbGluZSB0aGUgY29tbWVudFxyXG4gICAgICAgIGlmIChjb21tZW50TmJMaW5lID09PSAxKSB7XHJcbiAgICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KGNvbW1lbnQsIHdpZHRoIC8gMiwgcG9zaXRpb25IQ29tbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFNlcGFyYXRlIHRoZSBzZXRlbnNlcyB0byBiZSBhcHByb3guIHRoZSBzYW1lIGxlbmd0aFxyXG4gICAgICAgICAgY29uc3QgbmJDb21tZW50Q2hhciA9IGNvbW1lbnQubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgQ29tbWVudExlbmd0aFRvQ3V0ID0gTWF0aC5mbG9vcihuYkNvbW1lbnRDaGFyIC8gY29tbWVudE5iTGluZSk7XHJcbiAgICAgICAgICBsZXQgY29tbWVudEN1cnJlbnRMaW5lID0gJyc7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25GaXJzdEN1dENoYXIgPSAwO1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uTGFzdEJsYW5rO1xyXG4gICAgICAgICAgLy8gTG9vcCBmb3IgdGhlIG51bWJlciBvZiBsaW5lIGNhbGN1bGF0ZWRcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWVudE5iTGluZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIEZvciBhbGwgbGluZSBleGNlcHQgbGFzdFxyXG4gICAgICAgICAgICBpZiAoY29tbWVudE5iTGluZSAtIDEgPiBpKSB7XHJcbiAgICAgICAgICAgICAgLy8gR2V0IGNvbW1lbnQgY3VycmVudCBsaW5lIHRvIGZpbmQgdGhlIHJpZ2h0IHBsYWNlIHR1IGN1dCBjb21tZW50XHJcbiAgICAgICAgICAgICAgY29tbWVudEN1cnJlbnRMaW5lID0gY29tbWVudC5zdWJzdHIoXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkZpcnN0Q3V0Q2hhcixcclxuICAgICAgICAgICAgICAgIENvbW1lbnRMZW5ndGhUb0N1dFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgLy8gQ3V0IHRoZSBzZXRlbmNlIGF0IGJsYW5rXHJcbiAgICAgICAgICAgICAgcG9zaXRpb25MYXN0QmxhbmsgPSBjb21tZW50Q3VycmVudExpbmUubGFzdEluZGV4T2YoJyAnKTtcclxuICAgICAgICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KFxyXG4gICAgICAgICAgICAgICAgY29tbWVudEN1cnJlbnRMaW5lLnN1YnN0cigwLCBwb3NpdGlvbkxhc3RCbGFuayksXHJcbiAgICAgICAgICAgICAgICB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkhDb21tZW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBwb3NpdGlvbkZpcnN0Q3V0Q2hhciArPSBwb3NpdGlvbkxhc3RCbGFuaztcclxuICAgICAgICAgICAgICAvLyBHbyB0byBuZXh0IGxpbmUgZm9yIGluc2VydGlvblxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uSENvbW1lbnQgKz0gMjA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gRG9uJ3QgY3V0IGxhc3QgcGFydFxyXG4gICAgICAgICAgICAgIG5ld0NvbnRleHQuZmlsbFRleHQoXHJcbiAgICAgICAgICAgICAgICBjb21tZW50LnN1YnN0cihwb3NpdGlvbkZpcnN0Q3V0Q2hhciksXHJcbiAgICAgICAgICAgICAgICB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkhDb21tZW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbmV3Q29udGV4dC5kcmF3SW1hZ2UobWFwUmVzdWx0Q2FudmFzLCAwLCBwb3NpdGlvbkhDYW52YXMpO1xyXG5cclxuICAgICAgbGV0IHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRG9uZTtcclxuICAgICAgbGV0IGZpbGVOYW1lV2l0aEV4dCA9ICdtYXAuJyArIGZvcm1hdDtcclxuICAgICAgaWYgKGZvcm1hdC50b0xvd2VyQ2FzZSgpID09PSAndGlmZicpIHtcclxuICAgICAgICBmaWxlTmFtZVdpdGhFeHQgPVxyXG4gICAgICAgICAgJ21hcCcgKyBtYXAucHJvamVjdGlvbi5yZXBsYWNlKCc6JywgJ18nKSArICcuJyArIGZvcm1hdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyBTYXZlIHRoZSBjYW52YXMgYXMgZmlsZVxyXG4gICAgICAgIGlmICghZG9aaXBGaWxlKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVDYW52YXNJbWFnZUFzRmlsZShuZXdDYW52YXMsIGZpbGVOYW1lV2l0aEV4dCwgZm9ybWF0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdC50b0xvd2VyQ2FzZSgpID09PSAndGlmZicpIHtcclxuICAgICAgICAgIC8vIEFkZCB0aGUgY2FudmFzIHRvIHppcFxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbnZhRmlsZVRvWmlwKG5ld0NhbnZhcywgZmlsZU5hbWVXaXRoRXh0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWRkIHRoZSBjYW52YXMgdG8gemlwXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2FudmFGaWxlVG9aaXAobmV3Q2FudmFzLCBmaWxlTmFtZVdpdGhFeHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5FcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBzdGF0dXMkLm5leHQoc3RhdHVzKTtcclxuXHJcbiAgICAgIGlmIChmb3JtYXQudG9Mb3dlckNhc2UoKSA9PT0gJ3RpZmYnKSB7XHJcbiAgICAgICAgY29uc3QgdGZ3RmlsZU5hbWVXaXRoRXh0ID1cclxuICAgICAgICAgIGZpbGVOYW1lV2l0aEV4dC5zdWJzdHJpbmcoXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIGZpbGVOYW1lV2l0aEV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJy50aWZmJylcclxuICAgICAgICAgICkgKyAnLnRmdyc7XHJcbiAgICAgICAgY29uc3QgdGl3Q29udGVudCA9IHRoaXMuZ2V0V29ybGRGaWxlSW5mb3JtYXRpb24obWFwKTtcclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Rpd0NvbnRlbnRdLCB7XHJcbiAgICAgICAgICB0eXBlOiAndGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghZG9aaXBGaWxlKSB7XHJcbiAgICAgICAgICAvLyBzYXZlQXMgYXV0b21hdGljbHkgcmVwbGFjZSAnOicgZm9yICdfJ1xyXG4gICAgICAgICAgc2F2ZUFzKGJsb2IsIHRmd0ZpbGVOYW1lV2l0aEV4dCk7XHJcbiAgICAgICAgICB0aGlzLnNhdmVGaWxlUHJvY2Vzc2luZygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBBZGQgdGhlIGNhbnZhcyB0byB6aXBcclxuICAgICAgICAgIHRoaXMuYWRkRmlsZVRvWmlwKHRmd0ZpbGVOYW1lV2l0aEV4dCwgYmxvYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldE1hcEltYWdlUmVzb2x1dGlvbihtYXAsIGluaXRpYWxNYXBTaXplLCByZXNvbHV0aW9uLCB2aWV3UmVzb2x1dGlvbik7XHJcblxyXG4gICAgcmV0dXJuIHN0YXR1cyQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1hcEltYWdlUmVzb2x1dGlvbihcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgaW5pdGlhbE1hcFNpemU6IFtudW1iZXIsIG51bWJlcl0sXHJcbiAgICByZXNvbHV0aW9uOiBudW1iZXIsXHJcbiAgICB2aWV3UmVzb2x1dGlvbjogbnVtYmVyXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBzY2FsZUZhY3RvciA9IHJlc29sdXRpb24gLyA5NjtcclxuICAgIGNvbnN0IG5ld01hcFNpemUgPSBbXHJcbiAgICAgIE1hdGgucm91bmQoaW5pdGlhbE1hcFNpemVbMF0gKiBzY2FsZUZhY3RvciksIC8vIHdpZHRoXHJcbiAgICAgIE1hdGgucm91bmQoaW5pdGlhbE1hcFNpemVbMV0gKiBzY2FsZUZhY3RvcikgLy8gaGVpZ2h0XHJcbiAgICBdO1xyXG4gICAgbWFwLm9sLnNldFNpemUobmV3TWFwU2l6ZSk7XHJcbiAgICBjb25zdCBzY2FsaW5nID0gTWF0aC5taW4oXHJcbiAgICAgIG5ld01hcFNpemVbMF0gLyBpbml0aWFsTWFwU2l6ZVswXSxcclxuICAgICAgbmV3TWFwU2l6ZVsxXSAvIGluaXRpYWxNYXBTaXplWzFdXHJcbiAgICApO1xyXG4gICAgY29uc3QgdmlldyA9IG1hcC5vbC5nZXRWaWV3KCk7XHJcbiAgICB2aWV3LnNldFJlc29sdXRpb24odmlld1Jlc29sdXRpb24gLyBzY2FsaW5nKTtcclxuICAgIG1hcC5vbC5yZW5kZXJTeW5jKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW5kIEFkZCBMZWdlbmQgdG8gdGhlIG1hcCBjYW52YXNcclxuICAgKiBAcGFyYW0gIGNhbnZhcyBDYW52YXMgb2YgdGhlIG1hcFxyXG4gICAqIEBwYXJhbSAgbWFwIE1hcCBvZiB0aGUgYXBwXHJcbiAgICogQHBhcmFtICByZXNvbHV0aW9uIFJlc29sdXRpb24gb2YgbWFwXHJcbiAgICogQHBhcmFtICBsZWdlbmRQb3NpdGlvbiBMZWdlbmQgcG9zaXRpb25cclxuICAgKiBAcGFyYW0gIGZvcm1hdCBJbWFnZSBmb3JtYXRcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGFkZExlZ2VuZFRvSW1hZ2UoXHJcbiAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICByZXNvbHV0aW9uOiBudW1iZXIsXHJcbiAgICBsZWdlbmRQb3NpdGlvbjogc3RyaW5nLFxyXG4gICAgZm9ybWF0OiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnN0IGZpbGVOYW1lV2l0aEV4dCA9ICdtYXAuJyArIGZvcm1hdDtcclxuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAvLyBHZXQgaHRtbCBjb2RlIGZvciB0aGUgbGVnZW5kXHJcbiAgICBjb25zdCBodG1sID0gYXdhaXQgdGhpcy5nZXRMYXllcnNMZWdlbmRIdG1sKFxyXG4gICAgICBtYXAsXHJcbiAgICAgIGNhbnZhcy53aWR0aCxcclxuICAgICAgcmVzb2x1dGlvblxyXG4gICAgKS50b1Byb21pc2UoKTtcclxuICAgIC8vIElmIG5vIGxlZ2VuZCwgc2F2ZSB0aGUgbWFwIGRpcmVjdGx5XHJcbiAgICBpZiAoaHRtbCA9PT0gJycpIHtcclxuICAgICAgYXdhaXQgdGhpcy5zYXZlQ2FudmFzSW1hZ2VBc0ZpbGUoY2FudmFzLCBmaWxlTmFtZVdpdGhFeHQsIGZvcm1hdCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIGRpdiB0byBjb250YWluIGh0bWwgY29kZSBmb3IgbGVnZW5kXHJcbiAgICBjb25zdCBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgZGl2LnN0eWxlLnRvcCA9ICcwJztcclxuICAgIGRpdi5zdHlsZS56SW5kZXggPSAnLTEnO1xyXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICBhd2FpdCB0aGlzLnRpbWVvdXQoMSk7XHJcbiAgICBjb25zdCBjYW52YXNMZWdlbmQgPSBhd2FpdCBodG1sMmNhbnZhcyhkaXYsIHsgdXNlQ09SUzogdHJ1ZSB9KS5jYXRjaChcclxuICAgICAgKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY2FudmFzTGVnZW5kKSB7XHJcbiAgICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gY2FudmFzLndpZHRoO1xyXG4gICAgICBjb25zdCBsZWdlbmRIZWlnaHQgPSBjYW52YXNMZWdlbmQuaGVpZ2h0O1xyXG4gICAgICBjb25zdCBsZWdlbmRXaWR0aCA9IGNhbnZhc0xlZ2VuZC53aWR0aDtcclxuICAgICAgLy8gTW92ZSB0aGUgbGVnZW5kIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uIG9uIHRoZSBwYWdlXHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IGNhbnZhc0hlaWdodCAqIDAuMDE7XHJcbiAgICAgIGxldCBsZWdlbmRYOiBudW1iZXI7XHJcbiAgICAgIGxldCBsZWdlbmRZOiBudW1iZXI7XHJcblxyXG4gICAgICBpZiAobGVnZW5kUG9zaXRpb24gPT09ICdib3R0b21yaWdodCcpIHtcclxuICAgICAgICBsZWdlbmRYID0gY2FudmFzV2lkdGggLSBsZWdlbmRXaWR0aCAtIG9mZnNldDtcclxuICAgICAgICBsZWdlbmRZID0gY2FudmFzSGVpZ2h0IC0gbGVnZW5kSGVpZ2h0IC0gb2Zmc2V0O1xyXG4gICAgICB9IGVsc2UgaWYgKGxlZ2VuZFBvc2l0aW9uID09PSAndG9wcmlnaHQnKSB7XHJcbiAgICAgICAgbGVnZW5kWCA9IGNhbnZhc1dpZHRoIC0gbGVnZW5kV2lkdGggLSBvZmZzZXQ7XHJcbiAgICAgICAgbGVnZW5kWSA9IG9mZnNldDtcclxuICAgICAgfSBlbHNlIGlmIChsZWdlbmRQb3NpdGlvbiA9PT0gJ2JvdHRvbWxlZnQnKSB7XHJcbiAgICAgICAgbGVnZW5kWCA9IG9mZnNldDtcclxuICAgICAgICBsZWdlbmRZID0gY2FudmFzSGVpZ2h0IC0gbGVnZW5kSGVpZ2h0IC0gb2Zmc2V0IC0gMTU7XHJcbiAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICd0b3BsZWZ0Jykge1xyXG4gICAgICAgIGxlZ2VuZFggPSBvZmZzZXQ7XHJcbiAgICAgICAgbGVnZW5kWSA9IG9mZnNldDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgY2FudmFzTGVnZW5kLFxyXG4gICAgICAgIGxlZ2VuZFgsXHJcbiAgICAgICAgbGVnZW5kWSxcclxuICAgICAgICBsZWdlbmRXaWR0aCxcclxuICAgICAgICBsZWdlbmRIZWlnaHRcclxuICAgICAgKTtcclxuICAgICAgY29udGV4dC5zdHJva2VSZWN0KGxlZ2VuZFgsIGxlZ2VuZFksIGxlZ2VuZFdpZHRoLCBsZWdlbmRIZWlnaHQpO1xyXG4gICAgICB0aGlzLnJlbW92ZUh0bWxFbGVtZW50KGRpdik7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJNYXAobWFwLCBzaXplLCBleHRlbnQpIHtcclxuICAgIG1hcC5vbC51cGRhdGVTaXplKCk7XHJcbiAgICBtYXAub2wucmVuZGVyU3luYygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSAgZG9jIC0gRG9jdW1lbnQgdG8gc2F2ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlRG9jKGRvYzoganNQREYpIHtcclxuICAgIGF3YWl0IGRvYy5zYXZlKCdtYXBfZ2VvcmVmLnBkZicsIHsgcmV0dXJuUHJvbWlzZTogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZSB0aGUgYmVzdCBJbWFnZSBzaXplIHRvIGZpdCBpbiBwZGZcclxuICAgKiBAcGFyYW0gZG9jIC0gUGRmIERvY3VtZW50XHJcbiAgICogQHBhcmFtIGNhbnZhcyAtIENhbnZhcyBvZiBpbWFnZVxyXG4gICAqIEBwYXJhbSBtYXJnaW5zIC0gUGFnZSBtYXJnaW5zXHJcbiAgICovXHJcbiAgZ2V0SW1hZ2VTaXplVG9GaXRQZGYoZG9jLCBjYW52YXMsIG1hcmdpbnMpIHtcclxuICAgIC8vIERlZmluZSB2YXJpYWJsZSB0byBjYWxjdWxhdGUgYmVzdCBzaXplIHRvIGZpdCBpbiBvbmUgcGFnZVxyXG4gICAgY29uc3QgcGFnZUhlaWdodCA9XHJcbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKSAtIChtYXJnaW5zWzBdICsgbWFyZ2luc1syXSArIDEwKTtcclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9XHJcbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpIC0gKG1hcmdpbnNbMV0gKyBtYXJnaW5zWzNdKTtcclxuICAgIGNvbnN0IGNhbkhlaWdodCA9IHRoaXMucGRmX3VuaXRzMnBvaW50cyhjYW52YXMuaGVpZ2h0LCAnbW0nKTtcclxuICAgIGNvbnN0IGNhbldpZHRoID0gdGhpcy5wZGZfdW5pdHMycG9pbnRzKGNhbnZhcy53aWR0aCwgJ21tJyk7XHJcblxyXG4gICAgY29uc3QgaGVpZ2h0UmF0aW8gPSBjYW5IZWlnaHQgLyBwYWdlSGVpZ2h0O1xyXG4gICAgY29uc3Qgd2lkdGhSYXRpbyA9IGNhbldpZHRoIC8gcGFnZVdpZHRoO1xyXG4gICAgY29uc3QgbWF4UmF0aW8gPSBoZWlnaHRSYXRpbyA+IHdpZHRoUmF0aW8gPyBoZWlnaHRSYXRpbyA6IHdpZHRoUmF0aW87XHJcbiAgICBjb25zdCBpbWdIZWlnaCA9IG1heFJhdGlvID4gMSA/IGNhbkhlaWdodCAvIG1heFJhdGlvIDogY2FuSGVpZ2h0O1xyXG4gICAgY29uc3QgaW1nV2lkdGggPSBtYXhSYXRpbyA+IDEgPyBjYW5XaWR0aCAvIG1heFJhdGlvIDogY2FuV2lkdGg7XHJcbiAgICByZXR1cm4gW2ltZ1dpZHRoLCBpbWdIZWlnaF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSB3b3JsZCBmaWxlIGluZm9ybWF0aW9uIGZvciB0aWZmXHJcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0V29ybGRGaWxlSW5mb3JtYXRpb24obWFwKSB7XHJcbiAgICBjb25zdCBjdXJyZW50UmVzb2x1dGlvbiA9IG1hcC52aWV3Q29udHJvbGxlci5nZXRSZXNvbHV0aW9uKCk7XHJcbiAgICBjb25zdCBjdXJyZW50RXh0ZW50ID0gbWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpOyAvLyBSZXR1cm4gW21pbngsIG1pbnksIG1heHgsIG1heHldXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBjdXJyZW50UmVzb2x1dGlvbixcclxuICAgICAgMCxcclxuICAgICAgMCxcclxuICAgICAgLWN1cnJlbnRSZXNvbHV0aW9uLFxyXG4gICAgICBjdXJyZW50RXh0ZW50WzBdICsgY3VycmVudFJlc29sdXRpb24gLyAwLjUsXHJcbiAgICAgIGN1cnJlbnRFeHRlbnRbM10gLSBjdXJyZW50UmVzb2x1dGlvbiAvIDAuNVxyXG4gICAgXS5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgY2FudmFzIGltYWdlIGFzIGZpbGVcclxuICAgKiBAcGFyYW0gY2FudmFzIC0gQ2FudmFzIHRvIHNhdmVcclxuICAgKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGZpbGVcclxuICAgKiBAcGFyYW0gZm9ybWF0IC0gZmlsZSBmb3JtYXRcclxuICAgKi9cclxuICBwcml2YXRlIHNhdmVDYW52YXNJbWFnZUFzRmlsZShjYW52YXMsIG5hbWVXaXRoRXh0LCBmb3JtYXQpIHtcclxuICAgIGNvbnN0IGJsb2JGb3JtYXQgPSAnaW1hZ2UvJyArIGZvcm1hdDtcclxuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNhbnZhcy50b0RhdGFVUkwoKTsgLy8gSnVzdCB0byBtYWtlIHRoZSBjYXRjaCB0cmlnZ2VyIHdpaHRvdXQgdG9CbG9iIEVycm9yIHRocm93IG5vdCBjYXRjaGVkXHJcbiAgICAgIGNhbnZhcy50b0Jsb2IoKGJsb2IpID0+IHtcclxuICAgICAgICAvLyBkb3dubG9hZCBpbWFnZVxyXG4gICAgICAgIHNhdmVBcyhibG9iLCBuYW1lV2l0aEV4dCk7XHJcbiAgICAgICAgdGhhdC5zYXZlRmlsZVByb2Nlc3NpbmcoKTtcclxuICAgICAgfSwgYmxvYkZvcm1hdCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcclxuICAgICAgICAnaWdvLmdlby5wcmludEZvcm0uY29yc0Vycm9yTWVzc2FnZUJvZHknLFxyXG4gICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlSGVhZGVyJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGZpbGUgdG8gYSB6aXBcclxuICAgKiBAcGFyYW0gY2FudmFzIC0gRmlsZSB0byBhZGQgdG8gdGhlIHppcFxyXG4gICAqIEBwYXJhbSAgbmFtZSAtTmFtZSBvZiB0aGUgZmlsZW92ZXJ2aWV3XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhbnZhRmlsZVRvWmlwKGNhbnZhcywgbmFtZSkge1xyXG4gICAgY29uc3QgYmxvYkZvcm1hdCA9ICdpbWFnZS8nICsgJ2pwZWcnO1xyXG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmhhc093blByb3BlcnR5KCd6aXBGaWxlJykgfHxcclxuICAgICAgdHlwZW9mIHRoaXMuemlwRmlsZSA9PT0gJ3VuZGVmaW5lZCdcclxuICAgICkge1xyXG4gICAgICB0aGlzLnppcEZpbGUgPSBuZXcgSlNaaXAoKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYW52YXMudG9EYXRhVVJMKCk7IC8vIEp1c3QgdG8gbWFrZSB0aGUgY2F0Y2ggdHJpZ2dlciB3aWh0b3V0IHRvQmxvYiBFcnJvciB0aHJvdyBub3QgY2F0Y2hlZFxyXG4gICAgICBpZiAobmF2aWdhdG9yLm1zU2F2ZUJsb2IpIHtcclxuICAgICAgICB0aGlzLmFkZEZpbGVUb1ppcChuYW1lLCBjYW52YXMubXNUb0Jsb2IoKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FudmFzLnRvQmxvYigoYmxvYikgPT4ge1xyXG4gICAgICAgICAgdGhhdC5hZGRGaWxlVG9aaXAobmFtZSwgYmxvYik7XHJcbiAgICAgICAgfSwgYmxvYkZvcm1hdCk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlQm9keScsXHJcbiAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VIZWFkZXInXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgZmlsZSB0byB6aXAsIGlmIGFsbCBmaWxlIGFyZSB6aXBwZWQsIGRvd25sb2FkXHJcbiAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBmaWxlc1xyXG4gICAqIEBwYXJhbSBibG9iIC0gQ29udGFpbiBvZiBmaWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRGaWxlVG9aaXAobmFtZSwgYmxvYikge1xyXG4gICAgLy8gYWRkIGZpbGUgdG8gemlwXHJcbiAgICB0aGlzLnppcEZpbGUuZmlsZShuYW1lLCBibG9iKTtcclxuICAgIHRoaXMubmJGaWxlVG9Qcm9jZXNzLS07XHJcblxyXG4gICAgLy8gSWYgYWxsIGZpbGVzIGFyZSBwcm9jY2Vzc2VkXHJcbiAgICBpZiAodGhpcy5uYkZpbGVUb1Byb2Nlc3MgPT09IDApIHtcclxuICAgICAgLy8gRG93bmxvYWQgemlwIGZpbGVcclxuICAgICAgdGhpcy5nZXRaaXBGaWxlKCk7XHJcbiAgICAgIC8vIFN0b3AgbG9hZGluZ1xyXG4gICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS51bnJlZ2lzdGVyKHRoaXMuYWN0aXZpdHlJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVGaWxlUHJvY2Vzc2luZygpIHtcclxuICAgIHRoaXMubmJGaWxlVG9Qcm9jZXNzLS07XHJcblxyXG4gICAgLy8gSWYgYWxsIGZpbGVzIGFyZSBwcm9jY2Vzc2VkXHJcbiAgICBpZiAodGhpcy5uYkZpbGVUb1Byb2Nlc3MgPT09IDApIHtcclxuICAgICAgLy8gU3RvcCBsb2FkaW5nXHJcbiAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcy5hY3Rpdml0eUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgemlwcGVkIGZpbGVcclxuICAgKiBAcmV0dXJuIFJldHVuIGEgemlwIGZpbGVcclxuICAgKi9cclxuICBwcml2YXRlIGdldFppcEZpbGUoKSB7XHJcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuICAgIHRoaXMuemlwRmlsZS5nZW5lcmF0ZUFzeW5jKHsgdHlwZTogJ2Jsb2InIH0pLnRoZW4oKGJsb2IpID0+IHtcclxuICAgICAgLy8gMSkgZ2VuZXJhdGUgdGhlIHppcCBmaWxlXHJcbiAgICAgIHNhdmVBcyhibG9iLCAnbWFwLnppcCcpO1xyXG4gICAgICBkZWxldGUgdGhhdC56aXBGaWxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBkZl91bml0czJwb2ludHMobiwgdW5pdCk6IG51bWJlciB7XHJcbiAgICBsZXQgayA9IDE7XHJcblxyXG4gICAgLy8gdGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20ganNQREZcclxuICAgIC8vICBhcyBpdCBkb2VzIG5vdCBleHBvc2UgYSBwdWJsaWMgQVBJXHJcbiAgICAvLyAgZm9yIGNvbnZlcnRpbmcgdW5pdHMgdG8gcG9pbnRzLlxyXG4gICAgc3dpdGNoICh1bml0KSB7XHJcbiAgICAgIGNhc2UgJ3B0JzpcclxuICAgICAgICBrID0gMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbW0nOlxyXG4gICAgICAgIGsgPSA3MiAvIDI1LjQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NtJzpcclxuICAgICAgICBrID0gNzIgLyAyLjU0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdpbic6XHJcbiAgICAgICAgayA9IDcyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgayA9IDk2IC8gNzI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3BjJzpcclxuICAgICAgICBrID0gMTI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2VtJzpcclxuICAgICAgICBrID0gMTI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2V4JzpcclxuICAgICAgICBrID0gNjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5pdDogJyArIHVuaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuICogaztcclxuICB9XHJcbn1cclxuIl19
|
|
1100
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.MessageService }, { type: i3.ActivityService }, { type: i4.LanguageService }, { type: i5.ConfigService }] });
|
|
1101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3ByaW50L3NoYXJlZC9wcmludC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLFdBQVcsTUFBTSxhQUFhLENBQUM7QUFDdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLElBQUksS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsR0FBRyxJQUFJLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLFlBQVksTUFBTSxVQUFVLENBQUM7QUFFcEMsT0FBTyxFQUVM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LEdBQUcsSUFBSSxDQUFDO2dCQUNkLE1BQU07WUFDUixLQUFLLElBQUk7Z0JBQ1AsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7Z0JBQ2QsTUFBTTtZQUNSLEtBQUssSUFBSTtnQkFDUCxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNQLE1BQU07WUFDUixLQUFLLElBQUk7Z0JBQ1AsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ1osTUFBTTtZQUNSLEtBQUssSUFBSTtnQkFDUCxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNQLE1BQU07WUFDUixLQUFLLElBQUk7Z0JBQ1AsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDUCxNQUFNO1lBQ1IsS0FBSyxJQUFJO2dCQUNQLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ04sTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7dUdBejRDVSxZQUFZOzJHQUFaLFlBQVksY0FGWCxNQUFNOzsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFNlY3VyZUltYWdlUGlwZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB7IEFjdGl2aXR5U2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvYWN0aXZpdHknO1xyXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9jb25maWcnO1xyXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL21lc3NhZ2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0U3RhdHVzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCBodG1sMmNhbnZhcyBmcm9tICdodG1sMmNhbnZhcyc7XHJcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgSlNaaXAgfSBmcm9tICdqc3ppcCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCBhcyByeE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IExlZ2VuZE1hcFZpZXdPcHRpb25zIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sZWdlbmQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZ2V0TGF5ZXJzTGVnZW5kcyB9IGZyb20gJy4uLy4uL2xheWVyL3V0aWxzL291dHB1dExlZ2VuZCc7XHJcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcC9zaGFyZWQvbWFwJztcclxuaW1wb3J0IHsgZm9ybWF0U2NhbGUgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC51dGlscyc7XHJcbmltcG9ydCBHZW9QZGZQbHVnaW4gZnJvbSAnLi9nZW9wZGYnO1xyXG5pbXBvcnQgeyBQcmludE9wdGlvbnMsIFRleHRQZGZTaXplQW5kTWFyZ2luIH0gZnJvbSAnLi9wcmludC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIFByaW50TGVnZW5kUG9zaXRpb24sXHJcbiAgUHJpbnRQYXBlckZvcm1hdCxcclxuICBQcmludFJlc29sdXRpb25cclxufSBmcm9tICcuL3ByaW50LnR5cGUnO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBOYXZpZ2F0b3Ige1xyXG4gICAgbXNTYXZlQmxvYj86IChibG9iOiBhbnksIGRlZmF1bHROYW1lPzogc3RyaW5nKSA9PiBib29sZWFuO1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJpbnRTZXJ2aWNlIHtcclxuICB6aXBGaWxlOiBKU1ppcDtcclxuICBuYkZpbGVUb1Byb2Nlc3M6IG51bWJlcjtcclxuICBhY3Rpdml0eUlkOiBzdHJpbmc7XHJcbiAgaW1nU2l6ZUFkZGVkOiBBcnJheTxudW1iZXI+O1xyXG4gIG1hcFByaW50RXh0ZW50OiBBcnJheTxudW1iZXI+O1xyXG5cclxuICBURVhUUERGRk9OVCA9IHtcclxuICAgIHRpdGxlRm9udDogJ1NhbnMgU2VyaWYnLFxyXG4gICAgdGl0bGVGb250U3R5bGU6ICdib2xkJyxcclxuICAgIHN1YnRpdGxlRm9udDogJ1NhbnMgU2VyaWYnLFxyXG4gICAgc3VidGl0bGVGb250U3R5bGU6ICdib2xkJyxcclxuICAgIGNvbW1lbnRGb250OiAnU2FucyBTZXJpZicsXHJcbiAgICBjb21tZW50Rm9udFN0eWxlOiAnbm9ybWFsJyxcclxuICAgIGNvbW1lbnRGb250U2l6ZTogMTJcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3Rpdml0eVNlcnZpY2U6IEFjdGl2aXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHByaW50KG1hcDogSWdvTWFwLCBvcHRpb25zOiBQcmludE9wdGlvbnMpOiBTdWJqZWN0PGFueT4ge1xyXG4gICAgY29uc3Qgc3RhdHVzJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICBjb25zdCBwYXBlckZvcm1hdDogc3RyaW5nID0gb3B0aW9ucy5wYXBlckZvcm1hdDtcclxuICAgIGNvbnN0IHJlc29sdXRpb24gPSArb3B0aW9ucy5yZXNvbHV0aW9uOyAvLyBEZWZhdWx0IGlzIDk2XHJcbiAgICBjb25zdCBvcmllbnRhdGlvbiA9IG9wdGlvbnMub3JpZW50YXRpb247XHJcbiAgICBjb25zdCBsZWdlbmRQb3N0aW9uID0gb3B0aW9ucy5sZWdlbmRQb3NpdGlvbjtcclxuICAgIHRoaXMuYWN0aXZpdHlJZCA9IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnJlZ2lzdGVyKCk7XHJcblxyXG4gICAgR2VvUGRmUGx1Z2luKGpzUERGLkFQSSk7XHJcblxyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHtcclxuICAgICAgb3JpZW50YXRpb24sXHJcbiAgICAgIGZvcm1hdDogcGFwZXJGb3JtYXQudG9Mb3dlckNhc2UoKSxcclxuICAgICAgdW5pdDogJ21tJyAvLyBkZWZhdWx0XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkaW1lbnNpb25zID0gW1xyXG4gICAgICBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGgsXHJcbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHRcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgbWFyZ2lucyA9IFsxMCwgMTAsIDEwLCAxMF07XHJcbiAgICBjb25zdCB3aWR0aCA9IGRpbWVuc2lvbnNbMF0gLSBtYXJnaW5zWzNdIC0gbWFyZ2luc1sxXTtcclxuICAgIGNvbnN0IGhlaWdodCA9IGRpbWVuc2lvbnNbMV0gLSBtYXJnaW5zWzBdIC0gbWFyZ2luc1syXTtcclxuICAgIGNvbnN0IHNpemU6IFtudW1iZXIsIG51bWJlcl0gPSBbd2lkdGgsIGhlaWdodF07XHJcbiAgICBsZXQgdGl0bGVTaXplczogVGV4dFBkZlNpemVBbmRNYXJnaW47XHJcbiAgICBsZXQgc3VidGl0bGVTaXplczogVGV4dFBkZlNpemVBbmRNYXJnaW47XHJcblxyXG4gICAgLy8gaWYgcGFwZXIgZm9ybWF0IEExIG9yIEEwIGFkZCBtYXJnaW4gdG9wXHJcbiAgICBpZiAoXHJcbiAgICAgIChvcHRpb25zLnRpdGxlICE9PSAnJyB8fCBvcHRpb25zLnN1YnRpdGxlICE9PSAnJykgJiZcclxuICAgICAgKHBhcGVyRm9ybWF0ID09PSBQcmludFBhcGVyRm9ybWF0LkExIHx8XHJcbiAgICAgICAgcGFwZXJGb3JtYXQgPT09IFByaW50UGFwZXJGb3JtYXQuQTApXHJcbiAgICApIHtcclxuICAgICAgbWFyZ2luc1swXSArPSAxMDtcclxuICAgIH1cclxuICAgIC8vIFBERiB0aXRsZVxyXG4gICAgY29uc3QgZm9udFNpemVJblB0ID0gTWF0aC5yb3VuZCgyICogKGhlaWdodCArIDE0NSkgKiAwLjA1KSAvIDI7IC8vY2FsY3VsYXRlIHRoZSBmb250U2l6ZSB0aXRsZSBmcm9tIHRoZSBwYWdlIGhlaWdodC5cclxuICAgIGlmIChvcHRpb25zLnRpdGxlICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy50aXRsZSAhPT0gJycpIHtcclxuICAgICAgdGl0bGVTaXplcyA9IHRoaXMuZ2V0VGV4dFBkZk9iamVjdFNpemVBbmRNYXJnKFxyXG4gICAgICAgIG9wdGlvbnMudGl0bGUsXHJcbiAgICAgICAgbWFyZ2lucyxcclxuICAgICAgICB0aGlzLlRFWFRQREZGT05ULnRpdGxlRm9udCxcclxuICAgICAgICBmb250U2l6ZUluUHQsXHJcbiAgICAgICAgdGhpcy5URVhUUERGRk9OVC50aXRsZUZvbnRTdHlsZSxcclxuICAgICAgICBkb2NcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuYWRkVGV4dEluUGRmRG9jKFxyXG4gICAgICAgIGRvYyxcclxuICAgICAgICBvcHRpb25zLnRpdGxlLFxyXG4gICAgICAgIHRoaXMuVEVYVFBERkZPTlQudGl0bGVGb250LFxyXG4gICAgICAgIHRoaXMuVEVYVFBERkZPTlQudGl0bGVGb250U3R5bGUsXHJcbiAgICAgICAgdGl0bGVTaXplcy5mb250U2l6ZSxcclxuICAgICAgICB0aXRsZVNpemVzLm1hcmdpbkxlZnQgKyBtYXJnaW5zWzNdLFxyXG4gICAgICAgIG1hcmdpbnNbMF1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIG1hcmdpbnNbMF0gPSB0aXRsZVNpemVzLmhlaWdodCArIG1hcmdpbnNbMF07IC8vIGN1bXVsYXRpdmUgbWFyZ2luIHRvcCBmb3IgbmV4dCBlbGVtIHRvIHBsYWNlIGluIHBkZiBkb2NcclxuICAgIH1cclxuXHJcbiAgICAvLyBQREYgc3VidGl0bGVcclxuICAgIGlmIChvcHRpb25zLnN1YnRpdGxlICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zdWJ0aXRsZSAhPT0gJycpIHtcclxuICAgICAgc3VidGl0bGVTaXplcyA9IHRoaXMuZ2V0VGV4dFBkZk9iamVjdFNpemVBbmRNYXJnKFxyXG4gICAgICAgIG9wdGlvbnMuc3VidGl0bGUsXHJcbiAgICAgICAgbWFyZ2lucyxcclxuICAgICAgICB0aGlzLlRFWFRQREZGT05ULnN1YnRpdGxlRm9udCxcclxuICAgICAgICBvcHRpb25zLnRpdGxlICE9PSAnJyA/IHRpdGxlU2l6ZXMuZm9udFNpemUgKiAwLjcgOiBmb250U2l6ZUluUHQgKiAwLjcsIC8vIDcwJSBzaXplIG9mIHRpdGxlXHJcbiAgICAgICAgdGhpcy5URVhUUERGRk9OVC5zdWJ0aXRsZUZvbnRTdHlsZSxcclxuICAgICAgICBkb2NcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuYWRkVGV4dEluUGRmRG9jKFxyXG4gICAgICAgIGRvYyxcclxuICAgICAgICBvcHRpb25zLnN1YnRpdGxlLFxyXG4gICAgICAgIHRoaXMuVEVYVFBERkZPTlQuc3VidGl0bGVGb250LFxyXG4gICAgICAgIHRoaXMuVEVYVFBERkZPTlQuc3VidGl0bGVGb250U3R5bGUsXHJcbiAgICAgICAgc3VidGl0bGVTaXplcy5mb250U2l6ZSxcclxuICAgICAgICBzdWJ0aXRsZVNpemVzLm1hcmdpbkxlZnQgKyBtYXJnaW5zWzNdLFxyXG4gICAgICAgIG1hcmdpbnNbMF1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIG1hcmdpbnNbMF0gKz0gNTsgLy8gY3VtdWxhdGl2ZSBtYXJnIHRvcCBmb3IgbmV4dCBlbGVtIHRvIHBsYWNlIGluIHBkZiBkb2MuIDUgaXMgYSBmaXggaXQgY291bGQgYmUgYWRqdXN0XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuc2hvd1Byb2plY3Rpb24gPT09IHRydWUgfHwgb3B0aW9ucy5zaG93U2NhbGUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hZGRQcm9qU2NhbGUoXHJcbiAgICAgICAgZG9jLFxyXG4gICAgICAgIG1hcCxcclxuICAgICAgICByZXNvbHV0aW9uLFxyXG4gICAgICAgIG9wdGlvbnMuc2hvd1Byb2plY3Rpb24sXHJcbiAgICAgICAgb3B0aW9ucy5zaG93U2NhbGVcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25zLmNvbW1lbnQgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmNvbW1lbnQgIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuYWRkQ29tbWVudChkb2MsIG9wdGlvbnMuY29tbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZGRNYXAoZG9jLCBtYXAsIHJlc29sdXRpb24sIHNpemUsIG1hcmdpbnMsIGxlZ2VuZFBvc3Rpb24pLnN1YnNjcmliZShcclxuICAgICAgYXN5bmMgKHN0YXR1czogU3ViamVjdFN0YXR1cykgPT4ge1xyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IFN1YmplY3RTdGF0dXMuRG9uZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVNZWFzdXJlTGF5ZXIoZG9jLCBtYXAsIG1hcmdpbnMpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5pbWdTaXplQWRkZWRbMF07XHJcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmltZ1NpemVBZGRlZFsxXTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFkZEdlb1JlZihkb2MsIHdpZHRoLCBoZWlnaHQsIG1hcmdpbnMpO1xyXG5cclxuICAgICAgICAgIGlmIChvcHRpb25zLmxlZ2VuZFBvc2l0aW9uICE9PSAnbm9uZScpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIFsndG9wbGVmdCcsICd0b3ByaWdodCcsICdib3R0b21sZWZ0JywgJ2JvdHRvbXJpZ2h0J10uaW5kZXhPZihcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMubGVnZW5kUG9zaXRpb25cclxuICAgICAgICAgICAgICApID4gLTFcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRMZWdlbmRTYW1lUGFnZShcclxuICAgICAgICAgICAgICAgIGRvYyxcclxuICAgICAgICAgICAgICAgIG1hcCxcclxuICAgICAgICAgICAgICAgIG1hcmdpbnMsXHJcbiAgICAgICAgICAgICAgICByZXNvbHV0aW9uLFxyXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5sZWdlbmRQb3NpdGlvblxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5sZWdlbmRQb3NpdGlvbiA9PT0gJ25ld3BhZ2UnKSB7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hZGRMZWdlbmQoZG9jLCBtYXAsIG1hcmdpbnMsIHJlc29sdXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMgPT09IFN1YmplY3RTdGF0dXMuRG9uZSB8fCBzdGF0dXMgPT09IFN1YmplY3RTdGF0dXMuRXJyb3IpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcy5hY3Rpdml0eUlkKTtcclxuICAgICAgICAgIHN0YXR1cyQubmV4dChTdWJqZWN0U3RhdHVzLkRvbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gc3RhdHVzJDtcclxuICB9XHJcbiAgLy8gcmVmIEdlb01vb3NlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZW9tb29zZS9nbTMvdHJlZS9tYWluL3NyYy9nbTMvY29tcG9uZW50cy9wcmludFxyXG4gIGFkZEdlb1JlZihkb2MsIHdpZHRoLCBoZWlnaHQsIG1hcmdpbnMpIHtcclxuICAgIGNvbnN0IHVuaXQgPSAnbW0nO1xyXG4gICAgY29uc3QgZG9jSGVpZ2h0ID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmdldEhlaWdodCgpO1xyXG5cclxuICAgIC8vIHgseSA9IG1hcmdpbiBsZWZ0LWJvdHRvbSBjb3JuZXIgZm9yIGltZyBpbiBwZGYgZG9jXHJcbiAgICBjb25zdCB4ID0gbWFyZ2luc1szXTtcclxuICAgIGNvbnN0IHkgPSBkb2NIZWlnaHQgLSBtYXJnaW5zWzBdIC0gaGVpZ2h0O1xyXG5cclxuICAgIGxldCBwZGZfZXh0ZW50cyA9IFt4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHRdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwZGZfZXh0ZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBwZGZfZXh0ZW50c1tpXSA9IHRoaXMucGRmX3VuaXRzMnBvaW50cyhwZGZfZXh0ZW50c1tpXSwgdW5pdCk7XHJcbiAgICB9XHJcbiAgICBkb2Muc2V0R2VvQXJlYShwZGZfZXh0ZW50cywgdGhpcy5tYXBQcmludEV4dGVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgbWVhc3VyZSBvdmVybGF5IG9uIHRoZSBtYXAgb24gdGhlIGRvY3VtZW50IHdoZW4gdGhlIG1lYXN1cmUgbGF5ZXIgaXMgcHJlc2VudFxyXG4gICAqIEBwYXJhbSAgZG9jIC0gUGRmIGRvY3VtZW50IHdoZXJlIG1lYXN1cmUgdG9vbHRpcCB3aWxsIGJlIGFkZGVkXHJcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxyXG4gICAqIEBwYXJhbSAgbWFyZ2lucyAtIFBhZ2UgbWFyZ2luc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlTWVhc3VyZUxheWVyKFxyXG4gICAgZG9jOiBqc1BERixcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPlxyXG4gICkge1xyXG4gICAgaWYgKFxyXG4gICAgICBtYXAubGF5ZXJzLmZpbmQoXHJcbiAgICAgICAgKGxheWVyKSA9PiBsYXllci52aXNpYmxlICYmIGxheWVyLmlkLnN0YXJ0c1dpdGgoJ2lnby1tZWFzdXJlcy0nKVxyXG4gICAgICApXHJcbiAgICApIHtcclxuICAgICAgbGV0IGNhbnZhc092ZXJsYXlIVE1MTWVhc3VyZXM7XHJcbiAgICAgIGNvbnN0IG1hcE92ZXJsYXlNZWFzdXJlc0hUTUwgPSBtYXAub2wuZ2V0T3ZlcmxheUNvbnRhaW5lcigpO1xyXG4gICAgICBhd2FpdCBodG1sMmNhbnZhcyhtYXBPdmVybGF5TWVhc3VyZXNIVE1MLCB7XHJcbiAgICAgICAgc2NhbGU6IDEsXHJcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBudWxsXHJcbiAgICAgIH0pLnRoZW4oKGUpID0+IHtcclxuICAgICAgICBjYW52YXNPdmVybGF5SFRNTE1lYXN1cmVzID0gZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuYWRkQ2FudmFzKGRvYywgY2FudmFzT3ZlcmxheUhUTUxNZWFzdXJlcywgbWFyZ2lucyk7IC8vIHRoaXMgYWRkcyBtZWFzdXJlIG92ZXJsYXlzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgaHRtbCBjb2RlIGZvciBhbGwgbGF5ZXJzIGxlZ2VuZFxyXG4gICAqIEBwYXJhbSAgbWFwIElnb01hcFxyXG4gICAqIEBwYXJhbSAgd2lkdGggVGhlIHdpZHRoIHRoYXQgdGhlIGxlZ2VuZCBuZWVkIHRvIGJlXHJcbiAgICogQHJldHVybiBIdG1sIGNvZGUgZm9yIHRoZSBsZWdlbmRcclxuICAgKi9cclxuICBnZXRMYXllcnNMZWdlbmRIdG1sKFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyXHJcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgbGV0IGh0bWwgPSAnJztcclxuICAgICAgY29uc3QgbGVnZW5kcyA9IGdldExheWVyc0xlZ2VuZHMobWFwLmxheWVycywge1xyXG4gICAgICAgIHJlc29sdXRpb246IG1hcC52aWV3Q29udHJvbGxlci5nZXRSZXNvbHV0aW9uKCksXHJcbiAgICAgICAgZXh0ZW50OiBtYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCksXHJcbiAgICAgICAgcHJvamVjdGlvbjogbWFwLnZpZXdDb250cm9sbGVyLmdldE9sUHJvamVjdGlvbigpLmdldENvZGUoKSxcclxuICAgICAgICAvLyBzY2FsZTogbWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKHJlc29sdXRpb24pLFxyXG4gICAgICAgIHNpemU6IG1hcC5vbC5nZXRTaXplKClcclxuICAgICAgfSBhcyBMZWdlbmRNYXBWaWV3T3B0aW9ucyk7XHJcblxyXG4gICAgICBpZiAobGVnZW5kcy5maWx0ZXIoKGwpID0+IGwuZGlzcGxheSA9PT0gdHJ1ZSkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChodG1sKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICAvLyBEZWZpbmUgaW1wb3J0YW50IHN0eWxlIHRvIGJlIHN1cmUgdGhhdCBhbGwgY29udGFpbmVyIGlzIGNvbnZlcnRcclxuICAgICAgLy8gdG8gaW1hZ2Ugbm90IGp1c3QgdmlzaWJsZSBwYXJ0XHJcbiAgICAgIGh0bWwgKz0gJzxzdHlsZSBtZWRpYT1cInNjcmVlblwiIHR5cGU9XCJ0ZXh0L2Nzc1wiPic7XHJcbiAgICAgIGh0bWwgKz1cclxuICAgICAgICAnLmh0bWwyY2FudmFzLWNvbnRhaW5lciB7IHdpZHRoOiAnICtcclxuICAgICAgICB3aWR0aCArXHJcbiAgICAgICAgJ21tICFpbXBvcnRhbnQ7IGhlaWdodDogMjAwMHB4ICFpbXBvcnRhbnQ7IH0nO1xyXG4gICAgICBodG1sICs9ICd0YWJsZS50YWJsZUxlZ2VuZCB7dGFibGUtbGF5b3V0OiBhdXRvO30nO1xyXG4gICAgICBodG1sICs9XHJcbiAgICAgICAgJ2Rpdi5zdHlsZUxlZ2VuZCB7cGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1yaWdodDo1cHg7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLWJvdHRvbTo1cHg7fSc7XHJcbiAgICAgIGh0bWwgKz0gJzwvc3R5bGU+JztcclxuICAgICAgLy8gVGhlIGZvbnQgc2l6ZSB3aWxsIGFsc28gYmUgbG93ZXJlZCBhZnRlcndhcmRzIChnbG9iYWxseSBhbG9uZyB0aGUgbGVnZW5kIHNpemUpXHJcbiAgICAgIC8vIHRoaXMgYWxsb3dzIGhhdmluZyBhIGdvb2QgcmVsYXRpdmUgZm9udCBzaXplIGhlcmUgYW5kIHRvIGtlZXAgYWp1c3RpbmcgdGhlIGxlZ2VuZCBzaXplXHJcbiAgICAgIC8vIHdoaWxlIGtlZXBpbmcgZ29vZCByZWxhdGl2ZSBmb250IHNpemVcclxuICAgICAgaHRtbCArPSAnPGZvbnQgc2l6ZT1cIjNcIiBmYWNlPVwiVGltZXNcIiA+JztcclxuICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cInN0eWxlTGVnZW5kXCI+JztcclxuICAgICAgaHRtbCArPSAnPHRhYmxlIGNsYXNzPVwidGFibGVMZWdlbmRcIiA+JztcclxuXHJcbiAgICAgIC8vIEZvciBlYWNoIGxlZ2VuZCwgZGVmaW5lIGFuIGh0bWwgdGFibGUgY2VsbFxyXG4gICAgICBjb25zdCBpbWFnZXMkID0gbGVnZW5kc1xyXG4gICAgICAgIC5maWx0ZXIoKGwpID0+IGwuZGlzcGxheSAmJiBsLmlzSW5SZXNvbHV0aW9uc1JhbmdlID09PSB0cnVlKVxyXG4gICAgICAgIC5tYXAoKGxlZ2VuZCkgPT5cclxuICAgICAgICAgIHRoaXMuZ2V0RGF0YUltYWdlKGxlZ2VuZC51cmwpLnBpcGUoXHJcbiAgICAgICAgICAgIHJ4TWFwKChkYXRhSW1hZ2UpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgaHRtbEltZyA9XHJcbiAgICAgICAgICAgICAgICAnPHRyPjx0ZD4nICsgbGVnZW5kLnRpdGxlLnRvVXBwZXJDYXNlKCkgKyAnPC90ZD48L3RyPic7XHJcbiAgICAgICAgICAgICAgaHRtbEltZyArPSAnPHRyPjx0ZD48aW1nIHNyYz1cIicgKyBkYXRhSW1hZ2UgKyAnXCI+PC90ZD48L3RyPic7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGh0bWxJbWc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgZm9ya0pvaW4oaW1hZ2VzJCkuc3Vic2NyaWJlKChkYXRhSW1hZ2VzKSA9PiB7XHJcbiAgICAgICAgaHRtbCA9IGRhdGFJbWFnZXMucmVkdWNlKChhY2MsIGN1cnJlbnQpID0+IChhY2MgKz0gY3VycmVudCksIGh0bWwpO1xyXG4gICAgICAgIGh0bWwgKz0gJzwvdGFibGU+JztcclxuICAgICAgICBodG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoaHRtbCk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldERhdGFJbWFnZSh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBzZWN1cmVJTUcgPSBuZXcgU2VjdXJlSW1hZ2VQaXBlKHRoaXMuaHR0cCwgdGhpcy5jb25maWdTZXJ2aWNlKTtcclxuICAgIHJldHVybiBzZWN1cmVJTUcudHJhbnNmb3JtKHVybCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsIHRoZSBsZWdlbmQgaW4gYSBzaW5nbGUgaW1hZ2VcclxuICAgKiAqIEBwYXJhbSAgZm9ybWF0IC0gSW1hZ2UgZm9ybWF0LiBkZWZhdWx0IHZhbHVlIHRvIFwicG5nXCJcclxuICAgKiBAcmV0dXJuIFRoZSBpbWFnZSBvZiB0aGUgbGVnZW5kXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0TGF5ZXJzTGVnZW5kSW1hZ2UoXHJcbiAgICBtYXAsXHJcbiAgICBmb3JtYXQ6IHN0cmluZyA9ICdwbmcnLFxyXG4gICAgZG9aaXBGaWxlOiBib29sZWFuLFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBjb25zdCBzdGF0dXMkID0gbmV3IFN1YmplY3QoKTtcclxuICAgIC8vIEdldCBodG1sIGNvZGUgZm9yIHRoZSBsZWdlbmRcclxuICAgIGNvbnN0IHdpZHRoID0gMjAwOyAvLyBtaWxpbWV0ZXJzIHVuaXQsIG9yaWdpbmFsbHkgZGVmaW5lIGZvciBkb2N1bWVudCBwZGZcclxuICAgIGxldCBodG1sID0gYXdhaXQgdGhpcy5nZXRMYXllcnNMZWdlbmRIdG1sKFxyXG4gICAgICBtYXAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICByZXNvbHV0aW9uXHJcbiAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgZm9ybWF0ID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgLy8gSWYgbm8gbGVnZW5kIHNob3cgTm8gTEVHRU5EIGluIGFuIGltYWdlXHJcbiAgICBpZiAoaHRtbC5sZW5ndGggPT09IDApIHtcclxuICAgICAgaHRtbCA9ICc8Zm9udCBzaXplPVwiMTJcIiBmYWNlPVwiQ291cmllciBOZXdcIiA+JztcclxuICAgICAgaHRtbCArPSAnPGRpdiBhbGlnbj1cImNlbnRlclwiPjxiPk5PIExFR0VORDwvYj48L2Rpdj4nO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIGRpdiB0byBjb250YWluIGh0bWwgY29kZSBmb3IgbGVnZW5kXHJcbiAgICBjb25zdCBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgZGl2LnN0eWxlLnRvcCA9ICcwJztcclxuICAgIGRpdi5zdHlsZS56SW5kZXggPSAnLTEnO1xyXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcblxyXG4gICAgYXdhaXQgdGhpcy50aW1lb3V0KDEpO1xyXG4gICAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMoZGl2LCB7IHVzZUNPUlM6IHRydWUgfSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVtb3ZlSHRtbEVsZW1lbnQoZGl2KTtcclxuICAgIGlmIChjYW52YXMpIHtcclxuICAgICAgbGV0IHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRG9uZTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoIWRvWmlwRmlsZSkge1xyXG4gICAgICAgICAgLy8gU2F2ZSB0aGUgY2FudmFzIGFzIGZpbGVcclxuICAgICAgICAgIHRoaXMuc2F2ZUNhbnZhc0ltYWdlQXNGaWxlKGNhbnZhcywgJ2xlZ2VuZEltYWdlJywgZm9ybWF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWRkIHRoZSBjYW52YXMgdG8gemlwXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2FudmFGaWxlVG9aaXAoY2FudmFzLCAnbGVnZW5kSW1hZ2UnICsgJy4nICsgZm9ybWF0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRXJyb3I7XHJcbiAgICAgIH1cclxuICAgICAgc3RhdHVzJC5uZXh0KHN0YXR1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN0YXR1cyQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUh0bWxFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0UGRmT2JqZWN0U2l6ZUFuZE1hcmcoXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICBtYXJnaW5zLFxyXG4gICAgZm9udDogc3RyaW5nLFxyXG4gICAgZm9udFNpemVJblB0OiBudW1iZXIsXHJcbiAgICBmb250U3R5bGU6IHN0cmluZyxcclxuICAgIGRvYzoganNQREZcclxuICApOiBUZXh0UGRmU2l6ZUFuZE1hcmdpbiB7XHJcbiAgICBjb25zdCBwZGZSZXNvbHV0aW9uID0gOTY7XHJcbiAgICBjb25zdCBkb2NXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgcGFnZVdpZHRoID0gZG9jV2lkdGggLSBtYXJnaW5zWzFdIC0gbWFyZ2luc1szXTtcclxuXHJcbiAgICAvLyBpbXBvcnRhbnQgdG8gc2V0IGl0IGZpcnN0LCB0aGUgdGV4dERpbWVuc2lvbiBjaGFuZ2Ugd2hlbiBmb250IGNoYW5nZSFcclxuICAgIGRvYy5zZXRGb250KGZvbnQsIGZvbnRTdHlsZSk7XHJcbiAgICBkb2Muc2V0Rm9udFNpemUoZm9udFNpemVJblB0KTtcclxuXHJcbiAgICBsZXQgdGV4dERpbWVuc2lvbnMgPSBkb2MuZ2V0VGV4dERpbWVuc2lvbnModGV4dCk7XHJcbiAgICBsZXQgdGV4dE1hcmdpbkxlZnQ6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodGV4dERpbWVuc2lvbnMudyA+IHBhZ2VXaWR0aCkge1xyXG4gICAgICAvLyBpZiB0aGUgdGV4dCBpcyB0byBsb25nLCByZWR1Y2UgZm9udFNpemUgNzAlIGFuZCB0aGUgb3ZlcmZsb3cgd2l0aCBiZSBjdXQgaW4gcHJpbnQuLi5cclxuICAgICAgdGV4dE1hcmdpbkxlZnQgPSAwO1xyXG4gICAgICBmb250U2l6ZUluUHQgPSBmb250U2l6ZUluUHQgKiAwLjc7XHJcbiAgICAgIGRvYy5zZXRGb250U2l6ZShmb250U2l6ZUluUHQpO1xyXG4gICAgICB0ZXh0RGltZW5zaW9ucyA9IGRvYy5nZXRUZXh0RGltZW5zaW9ucyh0ZXh0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRleHRNYXJnaW5MZWZ0ID0gKHBhZ2VXaWR0aCAtIHRleHREaW1lbnNpb25zLncpIC8gMjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb250U2l6ZTogZm9udFNpemVJblB0LFxyXG4gICAgICBtYXJnaW5MZWZ0OiB0ZXh0TWFyZ2luTGVmdCxcclxuICAgICAgaGVpZ2h0OiB0ZXh0RGltZW5zaW9ucy5oXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGNvbW1lbnQgdG8gdGhlIGRvY3VtZW50XHJcbiAgICogKiBAcGFyYW0gIGRvYyAtIHBkZiBkb2N1bWVudFxyXG4gICAqICogQHBhcmFtICBjb21tZW50IC0gQ29tbWVudCB0byBhZGQgaW4gdGhlIGRvY3VtZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRDb21tZW50KGRvYzoganNQREYsIGNvbW1lbnQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29tbWVudE1hcmdpbkxlZnQgPSAxMDsgLy9tYXJnaW4gbGVmdCBhbmQgYm90dG9tIGlzIGZpeFxyXG4gICAgY29uc3QgY29tbWVudE1hcmdpbkJvdHRvbSA9IDEwO1xyXG4gICAgY29uc3QgbWFyZ2luVG9wID0gZG9jLmludGVybmFsLnBhZ2VTaXplLmhlaWdodCAtIGNvbW1lbnRNYXJnaW5Cb3R0b207XHJcbiAgICB0aGlzLmFkZFRleHRJblBkZkRvYyhcclxuICAgICAgZG9jLFxyXG4gICAgICBjb21tZW50LFxyXG4gICAgICB0aGlzLlRFWFRQREZGT05ULmNvbW1lbnRGb250LFxyXG4gICAgICB0aGlzLlRFWFRQREZGT05ULmNvbW1lbnRGb250U3R5bGUsXHJcbiAgICAgIHRoaXMuVEVYVFBERkZPTlQuY29tbWVudEZvbnRTaXplLFxyXG4gICAgICBjb21tZW50TWFyZ2luTGVmdCxcclxuICAgICAgbWFyZ2luVG9wLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRUZXh0SW5QZGZEb2MoXHJcbiAgICBkb2M6IGpzUERGLFxyXG4gICAgdGV4dFRvQWRkOiBzdHJpbmcsXHJcbiAgICB0ZXh0Rm9udDogc3RyaW5nLFxyXG4gICAgdGV4dEZvbnRTdHlsZTogc3RyaW5nLFxyXG4gICAgdGV4dEZvbnRTaXplOiBudW1iZXIsXHJcbiAgICB0ZXh0TWFyZ2luTGVmdDogbnVtYmVyLFxyXG4gICAgdGV4dE1hcmdpblRvcDogbnVtYmVyLFxyXG4gICAgaXNDb21tZW50OiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIGRvYy5zZXRGb250KHRleHRGb250LCB0ZXh0Rm9udFN0eWxlKTtcclxuICAgIGRvYy5zZXRGb250U2l6ZSh0ZXh0Rm9udFNpemUpO1xyXG5cclxuICAgIGlmIChpc0NvbW1lbnQpIHtcclxuICAgICAgdGV4dFRvQWRkID0gZG9jLnNwbGl0VGV4dFRvU2l6ZShcclxuICAgICAgICB0ZXh0VG9BZGQsXHJcbiAgICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLmdldFdpZHRoKCkgLSB0ZXh0TWFyZ2luTGVmdCAqIDNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGRvYy50ZXh0KHRleHRUb0FkZCwgdGV4dE1hcmdpbkxlZnQsIHRleHRNYXJnaW5Ub3ApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHByb2plY3Rpb24gYW5kL29yIHNjYWxlIHRvIHRoZSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSAgZG9jIC0gcGRmIGRvY3VtZW50XHJcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxyXG4gICAqIEBwYXJhbSAgZHBpIC0gRFBJIHJlc29sdXRpb24gb2YgdGhlIGRvY3VtZW50XHJcbiAgICogQHBhcmFtICBwcm9qZWN0aW9uIC0gQm9vbCB0byBpbmRpY2F0ZSBpZiBwcm9qZWN0aW9uIG5lZWQgdG8gYmUgYWRkZWRcclxuICAgKiBAcGFyYW0gIHNjYWxlIC0gQm9vbCB0byBpbmRpY2F0ZSBpZiBzY2FsZSBuZWVkIHRvIGJlIGFkZGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRQcm9qU2NhbGUoXHJcbiAgICBkb2M6IGpzUERGLFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICBkcGk6IG51bWJlcixcclxuICAgIHByb2plY3Rpb246IGJvb2xlYW4sXHJcbiAgICBzY2FsZTogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgY29uc3QgcHJvalNjYWxlU2l6ZSA9IDEyO1xyXG4gICAgY29uc3QgcHJvalNjYWxlTWFyZ2luTGVmdCA9IDEwO1xyXG4gICAgY29uc3QgbWFyZ2luQm90dG9tID0gMTU7XHJcbiAgICBjb25zdCBoZWlnaHRQaXhlbHMgPSBkb2MuaW50ZXJuYWwucGFnZVNpemUuaGVpZ2h0IC0gbWFyZ2luQm90dG9tO1xyXG5cclxuICAgIGxldCB0ZXh0UHJvalNjYWxlOiBzdHJpbmcgPSAnJztcclxuICAgIGlmIChwcm9qZWN0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IHByb2pUZXh0ID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8ucHJpbnRGb3JtLnByb2plY3Rpb24nKTtcclxuICAgICAgdGV4dFByb2pTY2FsZSArPSBwcm9qVGV4dCArICc6ICcgKyBtYXAucHJvamVjdGlvbjtcclxuICAgIH1cclxuICAgIGlmIChzY2FsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAocHJvamVjdGlvbiA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHRleHRQcm9qU2NhbGUgKz0gJyAgICc7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2NhbGVUZXh0ID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8ucHJpbnRGb3JtLnNjYWxlJyk7XHJcbiAgICAgIGNvbnN0IG1hcFNjYWxlID0gbWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKGRwaSk7XHJcbiAgICAgIHRleHRQcm9qU2NhbGUgKz0gc2NhbGVUZXh0ICsgJzogfiAxIC8gJyArIGZvcm1hdFNjYWxlKG1hcFNjYWxlKTtcclxuICAgIH1cclxuICAgIGRvYy5zZXRGb250KHRoaXMuVEVYVFBERkZPTlQuY29tbWVudEZvbnQpO1xyXG4gICAgZG9jLnNldEZvbnRTaXplKHByb2pTY2FsZVNpemUpO1xyXG4gICAgZG9jLnRleHQodGV4dFByb2pTY2FsZSwgcHJvalNjYWxlTWFyZ2luTGVmdCwgaGVpZ2h0UGl4ZWxzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgbGVnZW5kIHRvIHRoZSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSAgZG9jIC0gUGRmIGRvY3VtZW50IHdoZXJlIGxlZ2VuZCB3aWxsIGJlIGFkZGVkXHJcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxyXG4gICAqIEBwYXJhbSAgbWFyZ2lucyAtIFBhZ2UgbWFyZ2luc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgYWRkTGVnZW5kKFxyXG4gICAgZG9jOiBqc1BERixcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPixcclxuICAgIHJlc29sdXRpb246IG51bWJlclxyXG4gICkge1xyXG4gICAgLy8gR2V0IGh0bWwgY29kZSBmb3IgdGhlIGxlZ2VuZFxyXG4gICAgY29uc3Qgd2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGg7XHJcbiAgICBjb25zdCBodG1sID0gYXdhaXQgdGhpcy5nZXRMYXllcnNMZWdlbmRIdG1sKFxyXG4gICAgICBtYXAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICByZXNvbHV0aW9uXHJcbiAgICApLnRvUHJvbWlzZSgpO1xyXG4gICAgLy8gSWYgbm8gbGVnZW5kLCBzYXZlIHRoZSBtYXAgZGlyZWN0bHlcclxuICAgIGlmIChodG1sID09PSAnJykge1xyXG4gICAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvLyBDcmVhdGUgZGl2IHRvIGNvbnRhaW4gaHRtbCBjb2RlIGZvciBsZWdlbmRcclxuICAgIGNvbnN0IGRpdiA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICBkaXYuc3R5bGUudG9wID0gJzAnO1xyXG4gICAgZGl2LnN0eWxlLnpJbmRleCA9ICctMSc7XHJcblxyXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcblxyXG4gICAgYXdhaXQgdGhpcy50aW1lb3V0KDEpO1xyXG4gICAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMoZGl2LCB7IHVzZUNPUlM6IHRydWUgfSkuY2F0Y2goKGUpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVtb3ZlSHRtbEVsZW1lbnQoZGl2KTtcclxuICAgIGlmIChjYW52YXMpIHtcclxuICAgICAgY29uc3QgcG91cmNlbnRhZ2VSZWR1Y3Rpb24gPSAwLjg1O1xyXG4gICAgICBjb25zdCBpbWFnZVNpemUgPSBbXHJcbiAgICAgICAgKHBvdXJjZW50YWdlUmVkdWN0aW9uICogKDI1LjQgKiBjYW52YXMud2lkdGgpKSAvIHJlc29sdXRpb24sXHJcbiAgICAgICAgKHBvdXJjZW50YWdlUmVkdWN0aW9uICogKDI1LjQgKiBjYW52YXMuaGVpZ2h0KSkgLyByZXNvbHV0aW9uXHJcbiAgICAgIF07XHJcbiAgICAgIGxldCBpbWdEYXRhO1xyXG4gICAgICBkb2MuYWRkUGFnZSgpO1xyXG4gICAgICBpbWdEYXRhID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICAgIGRvYy5hZGRJbWFnZShpbWdEYXRhLCAnUE5HJywgMTAsIDEwLCBpbWFnZVNpemVbMF0sIGltYWdlU2l6ZVsxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXdhaXQgdGhpcy5zYXZlRG9jKGRvYyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIGxlZ2VuZCB0byB0aGUgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gIGRvYyAtIFBkZiBkb2N1bWVudCB3aGVyZSBsZWdlbmQgd2lsbCBiZSBhZGRlZFxyXG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcclxuICAgKiBAcGFyYW0gIG1hcmdpbnMgLSBQYWdlIG1hcmdpbnNcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGFkZExlZ2VuZFNhbWVQYWdlKFxyXG4gICAgZG9jOiBqc1BERixcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPixcclxuICAgIHJlc29sdXRpb246IG51bWJlcixcclxuICAgIGxlZ2VuZFBvc2l0aW9uOiBzdHJpbmdcclxuICApIHtcclxuICAgIC8vIEdldCBodG1sIGNvZGUgZm9yIHRoZSBsZWdlbmRcclxuICAgIGNvbnN0IHdpZHRoID0gZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoO1xyXG4gICAgY29uc3QgaHRtbCA9IGF3YWl0IHRoaXMuZ2V0TGF5ZXJzTGVnZW5kSHRtbChcclxuICAgICAgbWFwLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgcmVzb2x1dGlvblxyXG4gICAgKS50b1Byb21pc2UoKTtcclxuICAgIC8vIElmIG5vIGxlZ2VuZCwgc2F2ZSB0aGUgbWFwIGRpcmVjdGx5XHJcbiAgICBpZiAoaHRtbCA9PT0gJycpIHtcclxuICAgICAgYXdhaXQgdGhpcy5zYXZlRG9jKGRvYyk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIGRpdiB0byBjb250YWluIGh0bWwgY29kZSBmb3IgbGVnZW5kXHJcbiAgICBjb25zdCBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgZGl2LnN0eWxlLnRvcCA9ICcwJztcclxuICAgIGRpdi5zdHlsZS56SW5kZXggPSAnLTEnO1xyXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICBhd2FpdCB0aGlzLnRpbWVvdXQoMSk7XHJcbiAgICBjb25zdCBjYW52YXMgPSBhd2FpdCBodG1sMmNhbnZhcyhkaXYsIHsgdXNlQ09SUzogdHJ1ZSB9KS5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5yZW1vdmVIdG1sRWxlbWVudChkaXYpO1xyXG4gICAgbGV0IG1hcmdpbnNMZWdlbmQ7XHJcbiAgICBpZiAoY2FudmFzKSB7XHJcbiAgICAgIGNvbnN0IHBvdXJjZW50YWdlUmVkdWN0aW9uID0gMC44NTtcclxuICAgICAgY29uc3QgaW1hZ2VTaXplID0gW1xyXG4gICAgICAgIChwb3VyY2VudGFnZVJlZHVjdGlvbiAqICgyNS40ICogY2FudmFzLndpZHRoKSkgLyByZXNvbHV0aW9uLFxyXG4gICAgICAgIChwb3VyY2VudGFnZVJlZHVjdGlvbiAqICgyNS40ICogY2FudmFzLmhlaWdodCkpIC8gcmVzb2x1dGlvblxyXG4gICAgICBdO1xyXG4gICAgICAvLyBNb3ZlIHRoZSBsZWdlbmQgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gb24gdGhlIHBhZ2VcclxuICAgICAgaWYgKGxlZ2VuZFBvc2l0aW9uID09PSAnYm90dG9tcmlnaHQnKSB7XHJcbiAgICAgICAgbWFyZ2luc0xlZ2VuZCA9IFtcclxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzJdIC0gaW1hZ2VTaXplWzFdLFxyXG4gICAgICAgICAgbWFyZ2luc1sxXSxcclxuICAgICAgICAgIG1hcmdpbnNbMl0sXHJcbiAgICAgICAgICBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLSBtYXJnaW5zWzFdIC0gaW1hZ2VTaXplWzBdXHJcbiAgICAgICAgXTtcclxuICAgICAgfSBlbHNlIGlmIChsZWdlbmRQb3NpdGlvbiA9PT0gJ3RvcHJpZ2h0Jykge1xyXG4gICAgICAgIG1hcmdpbnNMZWdlbmQgPSBbXHJcbiAgICAgICAgICBtYXJnaW5zWzBdLFxyXG4gICAgICAgICAgbWFyZ2luc1sxXSxcclxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzBdIC0gaW1hZ2VTaXplWzFdLFxyXG4gICAgICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoIC0gbWFyZ2luc1sxXSAtIGltYWdlU2l6ZVswXVxyXG4gICAgICAgIF07XHJcbiAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICdib3R0b21sZWZ0Jykge1xyXG4gICAgICAgIC8vIFdoZW4gdGhlIGxlZ2VuZCBpcyBpbiB0aGUgYm90dG9tIGxlZnQsIHJhaXNlIHRoZSBsZWdlbmQgc2xpZ2h0bHkgdXB3YXJkIHNvIHRoYXQgYXR0cmlidXRpb25zIGFyZSB2aXNpYmxlXHJcbiAgICAgICAgbWFyZ2luc0xlZ2VuZCA9IFtcclxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzJdIC0gaW1hZ2VTaXplWzFdIC0gMTUsXHJcbiAgICAgICAgICBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGggLSBtYXJnaW5zWzNdIC0gaW1hZ2VTaXplWzBdLFxyXG4gICAgICAgICAgbWFyZ2luc1syXSArIDE1LFxyXG4gICAgICAgICAgbWFyZ2luc1szXVxyXG4gICAgICAgIF07XHJcbiAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICd0b3BsZWZ0Jykge1xyXG4gICAgICAgIG1hcmdpbnNMZWdlbmQgPSBbXHJcbiAgICAgICAgICBtYXJnaW5zWzBdLFxyXG4gICAgICAgICAgZG9jLmludGVybmFsLnBhZ2VTaXplLndpZHRoIC0gbWFyZ2luc1szXSAtIGltYWdlU2l6ZVswXSxcclxuICAgICAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5oZWlnaHQgLSBtYXJnaW5zWzBdIC0gaW1hZ2VTaXplWzFdLFxyXG4gICAgICAgICAgbWFyZ2luc1szXVxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hZGRDYW52YXMoZG9jLCBjYW52YXMsIG1hcmdpbnNMZWdlbmQpOyAvLyB0aGlzIGFkZHMgdGhlIGxlZ2VuZFxyXG4gICAgICBhd2FpdCB0aGlzLnNhdmVEb2MoZG9jKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlZmluZU5iRmlsZVRvUHJvY2VzcyhuYkZpbGVUb1Byb2Nlc3MpIHtcclxuICAgIHRoaXMubmJGaWxlVG9Qcm9jZXNzID0gbmJGaWxlVG9Qcm9jZXNzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0aW1lb3V0KG1zKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkQ2FudmFzKFxyXG4gICAgZG9jOiBqc1BERixcclxuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXHJcbiAgICBtYXJnaW5zOiBBcnJheTxudW1iZXI+XHJcbiAgKSB7XHJcbiAgICBsZXQgaW1hZ2U7XHJcbiAgICBpZiAoY2FudmFzKSB7XHJcbiAgICAgIGltYWdlID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGltYWdlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKGltYWdlLmxlbmd0aCA8IDIwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1dhcm5pbmc6IEFuIGltYWdlIGNhbm5vdCBiZSBwcmludCBpbiBwZGYgZmlsZScpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbWFnZVNpemUgPSB0aGlzLmdldEltYWdlU2l6ZVRvRml0UGRmKGRvYywgY2FudmFzLCBtYXJnaW5zKTtcclxuICAgICAgZG9jLmFkZEltYWdlKFxyXG4gICAgICAgIGltYWdlLFxyXG4gICAgICAgICdQTkcnLFxyXG4gICAgICAgIG1hcmdpbnNbM10sXHJcbiAgICAgICAgbWFyZ2luc1swXSxcclxuICAgICAgICBpbWFnZVNpemVbMF0sXHJcbiAgICAgICAgaW1hZ2VTaXplWzFdXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBkb2MucmVjdChtYXJnaW5zWzNdLCBtYXJnaW5zWzBdLCBpbWFnZVNpemVbMF0sIGltYWdlU2l6ZVsxXSk7XHJcblxyXG4gICAgICB0aGlzLmltZ1NpemVBZGRlZCA9IGltYWdlU2l6ZTsgLy8ga2VlcCBpbWcgc2l6ZSBmb3IgZ2VvcmVmIGxhdGVyXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPIGZpeCBwcmludGluZyB3aXRoIGltYWdlIHJlc29sdXRpb25cclxuICBhZGRNYXAoXHJcbiAgICBkb2M6IGpzUERGLFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICByZXNvbHV0aW9uOiBudW1iZXIsXHJcbiAgICBkb2NTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgbWFyZ2luczogQXJyYXk8bnVtYmVyPixcclxuICAgIGxlZ2VuZFBvc3Rpb246IFByaW50TGVnZW5kUG9zaXRpb25cclxuICApIHtcclxuICAgIGNvbnN0IG1hcFNpemUgPSBtYXAub2wuZ2V0U2l6ZSgpIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICBjb25zdCB2aWV3UmVzb2x1dGlvbiA9IG1hcC5vbC5nZXRWaWV3KCkuZ2V0UmVzb2x1dGlvbigpO1xyXG4gICAgY29uc3QgZGltZW5zaW9uUGl4ZWxzID0gdGhpcy5zZXRNYXBSZXNvbHV0aW9uKFxyXG4gICAgICBtYXAsXHJcbiAgICAgIGRvY1NpemUsXHJcbiAgICAgIHJlc29sdXRpb24sXHJcbiAgICAgIHZpZXdSZXNvbHV0aW9uXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc3RhdHVzJCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgbGV0IHRpbWVvdXQ7XHJcbiAgICBtYXAub2wub25jZSgncmVuZGVyY29tcGxldGUnLCBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBtYXBDYW52YXMgPSBldmVudC50YXJnZXRcclxuICAgICAgICAuZ2V0Vmlld3BvcnQoKVxyXG4gICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnY2FudmFzJykgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcbiAgICAgIGNvbnN0IG1hcFJlc3VsdENhbnZhcyA9IGF3YWl0IHRoaXMuZHJhd01hcChkaW1lbnNpb25QaXhlbHMsIG1hcENhbnZhcyk7XHJcbiAgICAgIHRoaXMubWFwUHJpbnRFeHRlbnQgPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KCdFUFNHOjM4NTcnKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRPcmlnaW5hbE1hcFNpemUobWFwLCBtYXBTaXplLCB2aWV3UmVzb2x1dGlvbik7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmRyYXdNYXBDb250cm9scyhtYXAsIG1hcFJlc3VsdENhbnZhcywgbGVnZW5kUG9zdGlvbik7XHJcblxyXG4gICAgICBjb25zdCBtYXBTdGF0dXMkJCA9IG1hcC5zdGF0dXMkLnN1YnNjcmliZSgobWFwU3RhdHVzOiBTdWJqZWN0U3RhdHVzKSA9PiB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIGlmIChtYXBTdGF0dXMgIT09IFN1YmplY3RTdGF0dXMuRG9uZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXBTdGF0dXMkJC51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIGxldCBzdGF0dXMgPSBTdWJqZWN0U3RhdHVzLkRvbmU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmIChtYXBSZXN1bHRDYW52YXMud2lkdGggIT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDYW52YXMoZG9jLCBtYXBSZXN1bHRDYW52YXMsIG1hcmdpbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5FcnJvcjtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlQm9keScsXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlSGVhZGVyJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc3RhdHVzJC5uZXh0KHN0YXR1cyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gSWYgbm8gbG9hZGluZyBhcyBzdGFydGVkIGFmdGVyIDIwMG1zLCB0aGVuIHByb2JhYmx5IG5vIGxvYWRpbmdcclxuICAgICAgLy8gaXMgcmVxdWlyZWQuXHJcbiAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgbWFwU3RhdHVzJCQudW5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAgICAgbGV0IHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRG9uZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgaWYgKG1hcFJlc3VsdENhbnZhcy53aWR0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENhbnZhcyhkb2MsIG1hcFJlc3VsdENhbnZhcywgbWFyZ2lucyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICBzdGF0dXMgPSBTdWJqZWN0U3RhdHVzLkVycm9yO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VCb2R5JyxcclxuICAgICAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VIZWFkZXInXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlc2V0T3JpZ2luYWxNYXBTaXplKG1hcCwgbWFwU2l6ZSwgdmlld1Jlc29sdXRpb24pO1xyXG4gICAgICAgIHN0YXR1cyQubmV4dChzdGF0dXMpO1xyXG4gICAgICB9LCAyMDApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHN0YXR1cyQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1hcFJlc29sdXRpb24oXHJcbiAgICBtYXA6IElnb01hcCxcclxuICAgIGluaXRpYWxTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgcmVzb2x1dGlvbjogbnVtYmVyLFxyXG4gICAgdmlld1Jlc29sdXRpb246IG51bWJlclxyXG4gICk6IFtudW1iZXIsIG51bWJlcl0ge1xyXG4gICAgY29uc3QgbWFwU2l6ZSA9IG1hcC5vbC5nZXRTaXplKCk7XHJcbiAgICBjb25zdCB3aWR0aFBpeGVscyA9IE1hdGgucm91bmQoKGluaXRpYWxTaXplWzBdICogcmVzb2x1dGlvbikgLyAyNS40KTtcclxuICAgIGNvbnN0IGhlaWdodFBpeGVscyA9IE1hdGgucm91bmQoKGluaXRpYWxTaXplWzFdICogcmVzb2x1dGlvbikgLyAyNS40KTtcclxuXHJcbiAgICAvLyBTZXQgcHJpbnQgc2l6ZVxyXG4gICAgY29uc3QgcHJpbnRTaXplID0gW3dpZHRoUGl4ZWxzLCBoZWlnaHRQaXhlbHNdO1xyXG4gICAgbWFwLm9sLnNldFNpemUocHJpbnRTaXplKTtcclxuICAgIGNvbnN0IHNjYWxpbmcgPSBNYXRoLm1pbihcclxuICAgICAgd2lkdGhQaXhlbHMgLyBtYXBTaXplWzBdLFxyXG4gICAgICBoZWlnaHRQaXhlbHMgLyBtYXBTaXplWzFdXHJcbiAgICApO1xyXG4gICAgbWFwLm9sLmdldFZpZXcoKS5zZXRSZXNvbHV0aW9uKHZpZXdSZXNvbHV0aW9uIC8gc2NhbGluZyk7XHJcblxyXG4gICAgcmV0dXJuIFt3aWR0aFBpeGVscywgaGVpZ2h0UGl4ZWxzXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRPcmlnaW5hbE1hcFNpemUoXHJcbiAgICBtYXA6IElnb01hcCxcclxuICAgIGluaXRpYWxTaXplOiBbbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgdmlld1Jlc29sdXRpb246IG51bWJlclxyXG4gICkge1xyXG4gICAgbWFwLm9sLnNldFNpemUoaW5pdGlhbFNpemUpO1xyXG4gICAgbWFwLm9sLmdldFZpZXcoKS5zZXRSZXNvbHV0aW9uKHZpZXdSZXNvbHV0aW9uKTtcclxuICAgIG1hcC5vbC51cGRhdGVTaXplKCk7XHJcbiAgICBtYXAub2wucmVuZGVyU3luYygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd01hcChcclxuICAgIHNpemU6IEFycmF5PG51bWJlcj4sXHJcbiAgICBtYXBDYW52YXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTENhbnZhc0VsZW1lbnQ+XHJcbiAgKTogUHJvbWlzZTxIVE1MQ2FudmFzRWxlbWVudD4ge1xyXG4gICAgY29uc3QgbWFwUmVzdWx0Q2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBtYXBSZXN1bHRDYW52YXMud2lkdGggPSBzaXplWzBdO1xyXG4gICAgbWFwUmVzdWx0Q2FudmFzLmhlaWdodCA9IHNpemVbMV07XHJcblxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcENhbnZhcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgY2FudmFzID0gbWFwQ2FudmFzW2luZGV4XTtcclxuICAgICAgaWYgKGNhbnZhcy53aWR0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUNhbnZhcyhjYW52YXMsIG1hcFJlc3VsdENhbnZhcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBtYXBSZXN1bHRDYW52YXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNhbnZhcyhcclxuICAgIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXHJcbiAgICBtYXBSZXN1bHRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50XHJcbiAgKSB7XHJcbiAgICBjb25zdCBtYXBDb250ZXh0UmVzdWx0ID0gbWFwUmVzdWx0Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjb25zdCBvcGFjaXR5ID0gY2FudmFzLnBhcmVudEVsZW1lbnQuc3R5bGUub3BhY2l0eSB8fCBjYW52YXMuc3R5bGUub3BhY2l0eTtcclxuICAgIG1hcENvbnRleHRSZXN1bHQuZ2xvYmFsQWxwaGEgPSBvcGFjaXR5ID09PSAnJyA/IDEgOiBOdW1iZXIob3BhY2l0eSk7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBjYW52YXMuc3R5bGUudHJhbnNmb3JtO1xyXG4gICAgbGV0IG1hdHJpeDogbnVtYmVyW107XHJcbiAgICBpZiAodHJhbnNmb3JtKSB7XHJcbiAgICAgIC8vIEdldCB0aGUgdHJhbnNmb3JtIHBhcmFtZXRlcnMgZnJvbSB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gbWF0cml4XHJcbiAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybVxyXG4gICAgICAgIC5tYXRjaCgvXm1hdHJpeFxcKChbXlxcKF0qKVxcKSQvKVsxXVxyXG4gICAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgICAgLm1hcChOdW1iZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbWF0cml4ID0gW1xyXG4gICAgICAgIHBhcnNlRmxvYXQoY2FudmFzLnN0eWxlLndpZHRoKSAvIGNhbnZhcy53aWR0aCxcclxuICAgICAgICAwLFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgcGFyc2VGbG9hdChjYW52YXMuc3R5bGUuaGVpZ2h0KSAvIGNhbnZhcy5oZWlnaHQsXHJcbiAgICAgICAgMCxcclxuICAgICAgICAwXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLnNldFRyYW5zZm9ybS5hcHBseShcclxuICAgICAgbWFwQ29udGV4dFJlc3VsdCxcclxuICAgICAgbWF0cml4XHJcbiAgICApO1xyXG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gY2FudmFzLnBhcmVudEVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yO1xyXG4gICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xyXG4gICAgICBtYXBDb250ZXh0UmVzdWx0LmZpbGxTdHlsZSA9IGJhY2tncm91bmRDb2xvcjtcclxuICAgICAgbWFwQ29udGV4dFJlc3VsdC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgbWFwQ29udGV4dFJlc3VsdC5kcmF3SW1hZ2UoY2FudmFzLCAwLCAwKTtcclxuICAgIG1hcENvbnRleHRSZXN1bHQuZ2xvYmFsQWxwaGEgPSAxO1xyXG4gICAgLy8gcmVzZXQgY2FudmFzIHRyYW5zZm9ybSB0byBpbml0aWFsXHJcbiAgICBtYXBDb250ZXh0UmVzdWx0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdNYXBDb250cm9scyhcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCxcclxuICAgIHBvc2l0aW9uOiBQcmludExlZ2VuZFBvc2l0aW9uXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAvLyBHZXQgdGhlIHNjYWxlIGFuZCBhdHRyaWJ1dGlvblxyXG4gICAgLy8gd2UgdXNlIGNsb25lTm9kZSB0byBtb2RpZnkgdGhlIG5vZGVzIHRvIHByaW50IHdpdGhvdXQgbW9kaWZ5aW5nIGl0IG9uIHRoZSBwYWdlLCB1c2luZyBkZWVwOnRydWUgdG8gZ2V0IGNoaWxkcmVuXHJcbiAgICBjb25zdCBtYXBPdmVybGF5SFRNTCA9IG1hcC5vbFxyXG4gICAgICAuZ2V0T3ZlcmxheUNvbnRhaW5lclN0b3BFdmVudCgpXHJcbiAgICAgIC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAvLyBhZGQgTm9ydGggRGlyZWN0aW9uIHRvIG1hcE92ZXJseVxyXG4gICAgYXdhaXQgdGhpcy5hZGROb3J0aERpcmVjdGlvbihtYXBPdmVybGF5SFRNTCwgcG9zaXRpb24pO1xyXG4gICAgLy8gYWRkIG1hcCBBdHRyaWJ1dGlvbiBkZXNpZ25lIHRvIHByaW50XHJcbiAgICBhd2FpdCB0aGlzLmFkZEF0dHJpYnV0aW9uKG1hcE92ZXJsYXlIVE1MKTtcclxuXHJcbiAgICAvLyBzZXQgJ092ZXJsYXlDb250YWluZXInIHNpemUgdG8gcHJpbnQgc2l6ZVxyXG4gICAgbWFwT3ZlcmxheUhUTUwuc3R5bGUud2lkdGggPSBjYW52YXMud2lkdGggKyAncHgnO1xyXG4gICAgbWFwT3ZlcmxheUhUTUwuc3R5bGUuaGVpZ2h0ID0gY2FudmFzLmhlaWdodCArICdweCc7XHJcbiAgICAvLyB3ZSBhZGQgemluZGV4IC0xIHRvIG5vdCBzaG93IG1vZGlmaWNhdGlvbiB0byB0aGUgdXNlclxyXG4gICAgbWFwT3ZlcmxheUhUTUwuc3R5bGUuekluZGV4ID0gJy0xJztcclxuICAgIC8vIGFuZCBtYWtlIHN1cmUgaHRtbDJjYW52YXMgdG8gcmVuZGVyIHRoZSBpbWFnZSBjb3JyZWN0bHlcclxuICAgIGRvY3VtZW50XHJcbiAgICAgIC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvbC12aWV3cG9ydCcpWzBdXHJcbiAgICAgIC5hcHBlbmRDaGlsZChtYXBPdmVybGF5SFRNTCk7XHJcbiAgICAvLyBDaGFuZ2UgdGhlIHN0eWxlcyBvZiBoeXBlcmxpbmsgaW4gdGhlIHByaW50ZWQgdmVyc2lvblxyXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBPdmVybGF5IGludG8gYSBjYW52YXNcclxuICAgIC8vIHNjYWxlIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IGluIGdvb2dsZSBjaHJvbWVcclxuICAgIC8vIGJhY2tncm91bmQgYXMgbnVsbCBiZWNhdXNlIG90aGVyd2lzZSBpdCBpcyB3aGl0ZSBhbmQgY292ZXIgdGhlIG1hcFxyXG4gICAgLy8gYWxsb3d0YWludCBpcyB0byBhbGxvdyByZW5kZXJpbmcgaW1hZ2VzIGluIHRoZSBhdHRyaWJ1dGlvbnNcclxuICAgIC8vIHVzZUNPUlM6IHRydWUgcG91ciBwZXJtZXR0cmUgZGUgcmVuZGVyZXIgbGVzIGltYWdlcyAobmUgbWFyY2hlIHBhcyBlbiBsb2NhbClcclxuICAgIGNvbnN0IGNhbnZhc092ZXJsYXlIVE1MID0gYXdhaXQgaHRtbDJjYW52YXMobWFwT3ZlcmxheUhUTUwsIHtcclxuICAgICAgc2NhbGU6IDEsXHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogbnVsbCxcclxuICAgICAgYWxsb3dUYWludDogdHJ1ZSxcclxuICAgICAgdXNlQ09SUzogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGNhbnZhc092ZXJsYXlIVE1MLndpZHRoICE9PSAwICYmIGNhbnZhc092ZXJsYXlIVE1MLmhlaWdodCAhPT0gMCkge1xyXG4gICAgICBjb250ZXh0LmRyYXdJbWFnZShjYW52YXNPdmVybGF5SFRNTCwgMCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmVtb3ZlICdtYXBPdmVybGF5SFRNTCcgYWZ0ZXIgZ2VuZXJhdGluZyBjYW52YXNcclxuICAgIG1hcE92ZXJsYXlIVE1MLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZGROb3J0aERpcmVjdGlvbihcclxuICAgIG1hcE92ZXJsYXlIVE1MOiBIVE1MRWxlbWVudCxcclxuICAgIHBvc2l0aW9uOiBQcmludExlZ2VuZFBvc2l0aW9uXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBub3J0aERpcmVjdGlvbiA9IGRvY3VtZW50XHJcbiAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaWdvLXJvdGF0aW9uLWJ1dHRvbicpWzBdXHJcbiAgICAgIC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBIVE1MQnV0dG9uID0gbm9ydGhEaXJlY3Rpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoXHJcbiAgICAgICdidXR0b24nXHJcbiAgICApWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCFIVE1MQnV0dG9uKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gaW4gY2FzZSBsZWdlbmQgcG9zaXRpb24gaXMgdG9wcmlnaHRcclxuICAgIC8vIHdlIGNoYW5nZSByb3RhdGUgYnRuIHRvIHRvcGxlZnRcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcHJpZ2h0Jykge1xyXG4gICAgICBub3J0aERpcmVjdGlvbi5zdHlsZS53aWR0aCA9ICdpbmhlcml0JztcclxuICAgICAgbm9ydGhEaXJlY3Rpb24uc3R5bGUubGVmdCA9ICcxMHB4JztcclxuICAgIH1cclxuICAgIEhUTUxCdXR0b24ucGFyZW50RWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcclxuICAgIEhUTUxCdXR0b24uc3R5bGUuY29sb3IgPSAnIzAwMCc7XHJcbiAgICBtYXBPdmVybGF5SFRNTC5hcHBlbmRDaGlsZChub3J0aERpcmVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGFkZEF0dHJpYnV0aW9uKG1hcE92ZXJsYXlIVE1MOiBIVE1MRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgSFRNTGF0dHJpYnV0aW9uID1cclxuICAgICAgbWFwT3ZlcmxheUhUTUwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnb2wtYXR0cmlidXRpb24nKVswXTtcclxuICAgIGNvbnN0IEhUTUxCdXR0b24gPSBIVE1MYXR0cmlidXRpb24uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpWzBdO1xyXG4gICAgaWYgKCFIVE1MQnV0dG9uKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgSFRNTEJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtaHRtbDJjYW52YXMtaWdub3JlJywgJ3RydWUnKTtcclxuICAgIGNvbnN0IG9sQ29sbGFwc2VkOiBib29sZWFuID1cclxuICAgICAgSFRNTGF0dHJpYnV0aW9uLmNsYXNzTGlzdC5jb250YWlucygnb2wtY29sbGFwc2VkJyk7XHJcbiAgICBpZiAob2xDb2xsYXBzZWQpIHtcclxuICAgICAgSFRNTGF0dHJpYnV0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ29sLWNvbGxhcHNlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWQgYW4gaW1hZ2Ugb2YgdGhlIG1hcCB3aXRoIGFkZGl0aW9uIG9mIGluZm9ybWF0aW9uc1xyXG4gICAqIEBwYXJhbSAgbWFwIC0gTWFwIG9mIHRoZSBhcHBcclxuICAgKiBAcGFyYW0gIGZvcm1hdCAtIEltYWdlIGZvcm1hdC4gZGVmYXVsdCB2YWx1ZSB0byBcInBuZ1wiXHJcbiAgICogQHBhcmFtICBwcm9qZWN0aW9uIC0gSW5kaWNhdGUgaWYgcHJvamVjdGlvbiBuZWVkIHRvIGJlIGFkZC4gRGVmYXVsdCB0byBmYWxzZVxyXG4gICAqIEBwYXJhbSAgc2NhbGUgLSBJbmRpY2F0ZSBpZiBzY2FsZSBuZWVkIHRvIGJlIGFkZC4gRGVmYXVsdCB0byBmYWxzZVxyXG4gICAqIEBwYXJhbSAgbGVnZW5kIC0gSW5kaWNhdGUgaWYgdGhlIGxlZ2VuZCBvZiBsYXllcnMgbmVlZCB0byBiZSBkb3dubG9hZC4gRGVmYXVsdCB0byBmYWxzZVxyXG4gICAqIEBwYXJhbSAgdGl0bGUgLSBUaXRsZSB0byBhZGQgZm9yIHRoZSBtYXAgLSBEZWZhdWx0IHRvIGJsYW5rXHJcbiAgICogQHBhcmFtICBzdWJ0aXRsZSAtIFN1YnRpdGxlIHRvIGFkZCBmb3IgdGhlIG1hcCAtIERlZmF1bHQgdG8gYmxhbmtcclxuICAgKiBAcGFyYW0gIGNvbW1lbnQgLSBDb21tZW50IHRvIGFkZCBmb3IgdGhlIG1hcCAtIERlZmF1bHQgdG8gYmxhbmtcclxuICAgKiBAcGFyYW0gIGRvWmlwRmlsZSAtIEluZGljYXRlIGlmIHdlIGRvIGEgemlwIHdpdGggdGhlIGZpbGVcclxuICAgKiBAcmV0dXJuIEltYWdlIGZpbGUgb2YgdGhlIG1hcCB3aXRoIGV4dGVuc2lvbiBmb3JtYXQgZ2l2ZW4gYXMgcGFyYW1ldGVyXHJcbiAgICovXHJcbiAgZG93bmxvYWRNYXBJbWFnZShcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgcHJpbnRSZXNvbHV0aW9uOiBQcmludFJlc29sdXRpb24sXHJcbiAgICBmb3JtYXQgPSAncG5nJyxcclxuICAgIHByb2plY3Rpb24gPSBmYWxzZSxcclxuICAgIHNjYWxlID0gZmFsc2UsXHJcbiAgICB0aXRsZSA9ICcnLFxyXG4gICAgc3VidGl0bGUgPSAnJyxcclxuICAgIGNvbW1lbnQgPSAnJyxcclxuICAgIGRvWmlwRmlsZSA9IHRydWUsXHJcbiAgICBsZWdlbmRQb3NpdGlvbjogUHJpbnRMZWdlbmRQb3NpdGlvblxyXG4gICkge1xyXG4gICAgY29uc3Qgc3RhdHVzJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICB0aGlzLmFjdGl2aXR5SWQgPSB0aGlzLmFjdGl2aXR5U2VydmljZS5yZWdpc3RlcigpO1xyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgZm9ybWF0ID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBjb25zdCByZXNvbHV0aW9uID0gK3ByaW50UmVzb2x1dGlvbjtcclxuICAgIGNvbnN0IGluaXRpYWxNYXBTaXplID0gbWFwLm9sLmdldFNpemUoKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgY29uc3Qgdmlld1Jlc29sdXRpb24gPSBtYXAub2wuZ2V0VmlldygpLmdldFJlc29sdXRpb24oKTtcclxuXHJcbiAgICBtYXAub2wub25jZSgncmVuZGVyY29tcGxldGUnLCBhc3luYyAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBzaXplID0gbWFwLm9sLmdldFNpemUoKTtcclxuICAgICAgY29uc3QgbWFwQ2FudmFzID0gZXZlbnQudGFyZ2V0XHJcbiAgICAgICAgLmdldFZpZXdwb3J0KClcclxuICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gICAgICBjb25zdCBtYXBSZXN1bHRDYW52YXMgPSBhd2FpdCB0aGlzLmRyYXdNYXAoc2l6ZSwgbWFwQ2FudmFzKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRPcmlnaW5hbE1hcFNpemUobWFwLCBpbml0aWFsTWFwU2l6ZSwgdmlld1Jlc29sdXRpb24pO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5kcmF3TWFwQ29udHJvbHMobWFwLCBtYXBSZXN1bHRDYW52YXMsIGxlZ2VuZFBvc2l0aW9uKTtcclxuICAgICAgLy8gQ2hlY2sgdGhlIGxlZ2VuZFBvc2l0aW9uXHJcbiAgICAgIGlmIChsZWdlbmRQb3NpdGlvbiAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgWyd0b3BsZWZ0JywgJ3RvcHJpZ2h0JywgJ2JvdHRvbWxlZnQnLCAnYm90dG9tcmlnaHQnXS5pbmRleE9mKFxyXG4gICAgICAgICAgICBsZWdlbmRQb3NpdGlvblxyXG4gICAgICAgICAgKSA+IC0xXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLmFkZExlZ2VuZFRvSW1hZ2UoXHJcbiAgICAgICAgICAgIG1hcFJlc3VsdENhbnZhcyxcclxuICAgICAgICAgICAgbWFwLFxyXG4gICAgICAgICAgICByZXNvbHV0aW9uLFxyXG4gICAgICAgICAgICBsZWdlbmRQb3NpdGlvbixcclxuICAgICAgICAgICAgZm9ybWF0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICduZXdwYWdlJykge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5nZXRMYXllcnNMZWdlbmRJbWFnZShtYXAsIGZvcm1hdCwgZG9aaXBGaWxlLCByZXNvbHV0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gYWRkIG90aGVyIGluZm9ybWF0aW9uIHRvIGZpbmFsIGNhbnZhcyBiZWZvcmUgZXhwb3J0aW5nXHJcbiAgICAgIGNvbnN0IG5ld0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICBjb25zdCBuZXdDb250ZXh0ID0gbmV3Q2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgIC8vIFBvc3Rpb24gaW4gaGVpZ2h0IHRvIHNldCB0aGUgY2FudmFzIGluIG5ldyBjYW52YXNcclxuICAgICAgbGV0IHBvc2l0aW9uSENhbnZhcyA9IDA7XHJcbiAgICAgIC8vIEdldCBoZWlnaHQvd2lkdGggb2YgbWFwIGNhbnZhc1xyXG4gICAgICBjb25zdCB3aWR0aCA9IG1hcFJlc3VsdENhbnZhcy53aWR0aDtcclxuICAgICAgbGV0IGhlaWdodCA9IG1hcFJlc3VsdENhbnZhcy5oZWlnaHQ7XHJcbiAgICAgIC8vIFNldCBGb250IHRvIGNhbGN1bGF0ZSBjb21tZW50IHdpZHRoXHJcbiAgICAgIG5ld0NvbnRleHQuZm9udCA9ICcyMHB4IENhbGlicmknO1xyXG4gICAgICBjb25zdCBjb21tZW50V2lkdGggPSBuZXdDb250ZXh0Lm1lYXN1cmVUZXh0KGNvbW1lbnQpLndpZHRoO1xyXG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciB0aXRsZSBpZiBkZWZpbmVkXHJcbiAgICAgIGhlaWdodCA9IHRpdGxlICE9PSAnJyA/IGhlaWdodCArIDMwIDogaGVpZ2h0O1xyXG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciB0aXRsZSBpZiBkZWZpbmVkXHJcbiAgICAgIGhlaWdodCA9IHN1YnRpdGxlICE9PSAnJyA/IGhlaWdodCArIDMwIDogaGVpZ2h0O1xyXG4gICAgICAvLyBBZGQgaGVpZ2h0IGZvciBwcm9qZWN0aW9uIG9yIHNjYWxlIChzYW1lIGxpbmUpIGlmIGRlZmluZWRcclxuICAgICAgaGVpZ2h0ID0gcHJvamVjdGlvbiAhPT0gZmFsc2UgfHwgc2NhbGUgIT09IGZhbHNlID8gaGVpZ2h0ICsgMzAgOiBoZWlnaHQ7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uSFByb2pTY2FsZSA9IGhlaWdodCAtIDEwO1xyXG4gICAgICAvLyBEZWZpbmUgbnVtYmVyIG9mIGxpbmUgZGVwZW5kaW5nIG9mIHRoZSBjb21tZW50IGxlbmd0aFxyXG4gICAgICBjb25zdCBjb21tZW50TmJMaW5lID0gTWF0aC5jZWlsKGNvbW1lbnRXaWR0aCAvIHdpZHRoKTtcclxuICAgICAgLy8gQWRkIGhlaWdodCBmb3IgbXVsdGlsaW5lIGNvbW1lbnQgaWYgZGVmaW5lZFxyXG4gICAgICBoZWlnaHQgPSBjb21tZW50ICE9PSAnJyA/IGhlaWdodCArIGNvbW1lbnROYkxpbmUgKiAzMCA6IGhlaWdodDtcclxuICAgICAgbGV0IHBvc2l0aW9uSENvbW1lbnQgPSBoZWlnaHQgLSBjb21tZW50TmJMaW5lICogMjAgKyA1O1xyXG4gICAgICAvLyBTZXQgdGhlIG5ldyBjYW52YXMgd2l0aCB0aGUgbmV3IGNhbGN1bGF0ZWQgc2l6ZVxyXG4gICAgICBuZXdDYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgbmV3Q2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuXHJcbiAgICAgIGlmIChbJ2JtcCcsICdnaWYnLCAnanBlZycsICdwbmcnLCAndGlmZiddLmluZGV4T2YoZm9ybWF0KSA+IC0xKSB7XHJcbiAgICAgICAgLy8gUGF0Y2ggSnBlZyBkZWZhdWx0IGJsYWNrIGJhY2tncm91bmQgdG8gd2hpdGVcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBmb3JtYXQgPT09ICdqcGVnJyB8fFxyXG4gICAgICAgICAgdGl0bGUgIT09ICcnIHx8XHJcbiAgICAgICAgICBzdWJ0aXRsZSAhPT0gJycgfHxcclxuICAgICAgICAgIGNvbW1lbnQgIT09ICcnIHx8XHJcbiAgICAgICAgICBwcm9qZWN0aW9uICE9PSBmYWxzZSB8fFxyXG4gICAgICAgICAgc2NhbGUgIT09IGZhbHNlXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBuZXdDb250ZXh0LmZpbGxTdHlsZSA9ICcjZmZmZmZmJztcclxuICAgICAgICAgIG5ld0NvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICAgICAgICBuZXdDb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgYSB0aXRsZSBuZWVkIHRvIGJlIGFkZGVkIHRvIGNhbnZhc1xyXG4gICAgICBpZiAodGl0bGUgIT09ICcnKSB7XHJcbiAgICAgICAgLy8gU2V0IGZvbnQgZm9yIHRpdGxlXHJcbiAgICAgICAgLy8gQWRqdXN0IGFjY29yZGluZyB0byB0aXRsZSBsZW5ndGhcclxuICAgICAgICBuZXdDb250ZXh0LmZvbnQgPSAnMjZweCBDYWxpYnJpJztcclxuICAgICAgICBwb3NpdGlvbkhDYW52YXMgPSAzMDtcclxuICAgICAgICBuZXdDb250ZXh0LnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgIG5ld0NvbnRleHQuZmlsbFRleHQodGl0bGUsIHdpZHRoIC8gMiwgMjAsIHdpZHRoICogMC45KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHN1YnRpdGxlICE9PSAnJykge1xyXG4gICAgICAgIC8vIFNldCBmb250IGZvciBzdWJ0aXRsZVxyXG4gICAgICAgIC8vIEFkanVzdCBhY2NvcmRpbmcgdG8gdGl0bGUgbGVuZ3RoXHJcbiAgICAgICAgbmV3Q29udGV4dC5mb250ID0gJzI2cHggQ2FsaWJyaSc7XHJcbiAgICAgICAgcG9zaXRpb25IQ2FudmFzID0gNjA7XHJcbiAgICAgICAgbmV3Q29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KHN1YnRpdGxlLCB3aWR0aCAvIDIsIDUwLCB3aWR0aCAqIDAuOSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNldCBmb250IGZvciBuZXh0IHNlY3Rpb25cclxuICAgICAgbmV3Q29udGV4dC5mb250ID0gJzIwcHggQ2FsaWJyaSc7XHJcbiAgICAgIC8vIElmIHByb2plY3Rpb24gb3IvZW5kIHNjYWxlIG5lZWQgdG8gYmUgYWRkZWQgdG8gY2FudmFzXHJcbiAgICAgIGlmIChwcm9qZWN0aW9uICE9PSBmYWxzZSB8fCBzY2FsZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgcHJvamVjdGlvblNjYWxlVGV4dCA9ICcnO1xyXG4gICAgICAgIGlmIChwcm9qZWN0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgY29uc3QgcHJvalRleHQgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5wcmludEZvcm0ucHJvamVjdGlvbicpO1xyXG4gICAgICAgICAgcHJvamVjdGlvblNjYWxlVGV4dCA9IHByb2pUZXh0ICsgJzogJyArIG1hcC5wcm9qZWN0aW9uICsgJyAgICAgICAgICc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2NhbGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBjb25zdCBzY2FsZVRleHQgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5wcmludEZvcm0uc2NhbGUnKTtcclxuICAgICAgICAgIGNvbnN0IG1hcFNjYWxlID0gbWFwLnZpZXdDb250cm9sbGVyLmdldFNjYWxlKHJlc29sdXRpb24pO1xyXG4gICAgICAgICAgcHJvamVjdGlvblNjYWxlVGV4dCArPSBzY2FsZVRleHQgKyAnOiB+IDEgLyAnICsgZm9ybWF0U2NhbGUobWFwU2NhbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdDb250ZXh0LnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgIG5ld0NvbnRleHQuZmlsbFRleHQoXHJcbiAgICAgICAgICBwcm9qZWN0aW9uU2NhbGVUZXh0LFxyXG4gICAgICAgICAgd2lkdGggLyAyLFxyXG4gICAgICAgICAgcG9zaXRpb25IUHJvalNjYWxlLFxyXG4gICAgICAgICAgd2lkdGggKiAwLjlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiBhIGNvbW1lbnQgbmVlZCB0byBiZSBhZGRlZCB0byBjYW52YXNcclxuICAgICAgaWYgKGNvbW1lbnQgIT09ICcnKSB7XHJcbiAgICAgICAgbmV3Q29udGV4dC50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuICAgICAgICAvLyBJZiBvbmx5IG9uZSBsaW5lLCBubyBuZWVkIHRvIG11bHRpbGluZSB0aGUgY29tbWVudFxyXG4gICAgICAgIGlmIChjb21tZW50TmJMaW5lID09PSAxKSB7XHJcbiAgICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KGNvbW1lbnQsIHdpZHRoIC8gMiwgcG9zaXRpb25IQ29tbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFNlcGFyYXRlIHRoZSBzZXRlbnNlcyB0byBiZSBhcHByb3guIHRoZSBzYW1lIGxlbmd0aFxyXG4gICAgICAgICAgY29uc3QgbmJDb21tZW50Q2hhciA9IGNvbW1lbnQubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgQ29tbWVudExlbmd0aFRvQ3V0ID0gTWF0aC5mbG9vcihuYkNvbW1lbnRDaGFyIC8gY29tbWVudE5iTGluZSk7XHJcbiAgICAgICAgICBsZXQgY29tbWVudEN1cnJlbnRMaW5lID0gJyc7XHJcbiAgICAgICAgICBsZXQgcG9zaXRpb25GaXJzdEN1dENoYXIgPSAwO1xyXG4gICAgICAgICAgbGV0IHBvc2l0aW9uTGFzdEJsYW5rO1xyXG4gICAgICAgICAgLy8gTG9vcCBmb3IgdGhlIG51bWJlciBvZiBsaW5lIGNhbGN1bGF0ZWRcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWVudE5iTGluZTsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIEZvciBhbGwgbGluZSBleGNlcHQgbGFzdFxyXG4gICAgICAgICAgICBpZiAoY29tbWVudE5iTGluZSAtIDEgPiBpKSB7XHJcbiAgICAgICAgICAgICAgLy8gR2V0IGNvbW1lbnQgY3VycmVudCBsaW5lIHRvIGZpbmQgdGhlIHJpZ2h0IHBsYWNlIHR1IGN1dCBjb21tZW50XHJcbiAgICAgICAgICAgICAgY29tbWVudEN1cnJlbnRMaW5lID0gY29tbWVudC5zdWJzdHIoXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkZpcnN0Q3V0Q2hhcixcclxuICAgICAgICAgICAgICAgIENvbW1lbnRMZW5ndGhUb0N1dFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgLy8gQ3V0IHRoZSBzZXRlbmNlIGF0IGJsYW5rXHJcbiAgICAgICAgICAgICAgcG9zaXRpb25MYXN0QmxhbmsgPSBjb21tZW50Q3VycmVudExpbmUubGFzdEluZGV4T2YoJyAnKTtcclxuICAgICAgICAgICAgICBuZXdDb250ZXh0LmZpbGxUZXh0KFxyXG4gICAgICAgICAgICAgICAgY29tbWVudEN1cnJlbnRMaW5lLnN1YnN0cigwLCBwb3NpdGlvbkxhc3RCbGFuayksXHJcbiAgICAgICAgICAgICAgICB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkhDb21tZW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBwb3NpdGlvbkZpcnN0Q3V0Q2hhciArPSBwb3NpdGlvbkxhc3RCbGFuaztcclxuICAgICAgICAgICAgICAvLyBHbyB0byBuZXh0IGxpbmUgZm9yIGluc2VydGlvblxyXG4gICAgICAgICAgICAgIHBvc2l0aW9uSENvbW1lbnQgKz0gMjA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gRG9uJ3QgY3V0IGxhc3QgcGFydFxyXG4gICAgICAgICAgICAgIG5ld0NvbnRleHQuZmlsbFRleHQoXHJcbiAgICAgICAgICAgICAgICBjb21tZW50LnN1YnN0cihwb3NpdGlvbkZpcnN0Q3V0Q2hhciksXHJcbiAgICAgICAgICAgICAgICB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkhDb21tZW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbmV3Q29udGV4dC5kcmF3SW1hZ2UobWFwUmVzdWx0Q2FudmFzLCAwLCBwb3NpdGlvbkhDYW52YXMpO1xyXG5cclxuICAgICAgbGV0IHN0YXR1cyA9IFN1YmplY3RTdGF0dXMuRG9uZTtcclxuICAgICAgbGV0IGZpbGVOYW1lV2l0aEV4dCA9ICdtYXAuJyArIGZvcm1hdDtcclxuICAgICAgaWYgKGZvcm1hdC50b0xvd2VyQ2FzZSgpID09PSAndGlmZicpIHtcclxuICAgICAgICBmaWxlTmFtZVdpdGhFeHQgPVxyXG4gICAgICAgICAgJ21hcCcgKyBtYXAucHJvamVjdGlvbi5yZXBsYWNlKCc6JywgJ18nKSArICcuJyArIGZvcm1hdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyBTYXZlIHRoZSBjYW52YXMgYXMgZmlsZVxyXG4gICAgICAgIGlmICghZG9aaXBGaWxlKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVDYW52YXNJbWFnZUFzRmlsZShuZXdDYW52YXMsIGZpbGVOYW1lV2l0aEV4dCwgZm9ybWF0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdC50b0xvd2VyQ2FzZSgpID09PSAndGlmZicpIHtcclxuICAgICAgICAgIC8vIEFkZCB0aGUgY2FudmFzIHRvIHppcFxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbnZhRmlsZVRvWmlwKG5ld0NhbnZhcywgZmlsZU5hbWVXaXRoRXh0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQWRkIHRoZSBjYW52YXMgdG8gemlwXHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2FudmFGaWxlVG9aaXAobmV3Q2FudmFzLCBmaWxlTmFtZVdpdGhFeHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgc3RhdHVzID0gU3ViamVjdFN0YXR1cy5FcnJvcjtcclxuICAgICAgfVxyXG4gICAgICBzdGF0dXMkLm5leHQoc3RhdHVzKTtcclxuXHJcbiAgICAgIGlmIChmb3JtYXQudG9Mb3dlckNhc2UoKSA9PT0gJ3RpZmYnKSB7XHJcbiAgICAgICAgY29uc3QgdGZ3RmlsZU5hbWVXaXRoRXh0ID1cclxuICAgICAgICAgIGZpbGVOYW1lV2l0aEV4dC5zdWJzdHJpbmcoXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIGZpbGVOYW1lV2l0aEV4dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJy50aWZmJylcclxuICAgICAgICAgICkgKyAnLnRmdyc7XHJcbiAgICAgICAgY29uc3QgdGl3Q29udGVudCA9IHRoaXMuZ2V0V29ybGRGaWxlSW5mb3JtYXRpb24obWFwKTtcclxuICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Rpd0NvbnRlbnRdLCB7XHJcbiAgICAgICAgICB0eXBlOiAndGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04J1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICghZG9aaXBGaWxlKSB7XHJcbiAgICAgICAgICAvLyBzYXZlQXMgYXV0b21hdGljbHkgcmVwbGFjZSAnOicgZm9yICdfJ1xyXG4gICAgICAgICAgc2F2ZUFzKGJsb2IsIHRmd0ZpbGVOYW1lV2l0aEV4dCk7XHJcbiAgICAgICAgICB0aGlzLnNhdmVGaWxlUHJvY2Vzc2luZygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBBZGQgdGhlIGNhbnZhcyB0byB6aXBcclxuICAgICAgICAgIHRoaXMuYWRkRmlsZVRvWmlwKHRmd0ZpbGVOYW1lV2l0aEV4dCwgYmxvYik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldE1hcEltYWdlUmVzb2x1dGlvbihtYXAsIGluaXRpYWxNYXBTaXplLCByZXNvbHV0aW9uLCB2aWV3UmVzb2x1dGlvbik7XHJcblxyXG4gICAgcmV0dXJuIHN0YXR1cyQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldE1hcEltYWdlUmVzb2x1dGlvbihcclxuICAgIG1hcDogSWdvTWFwLFxyXG4gICAgaW5pdGlhbE1hcFNpemU6IFtudW1iZXIsIG51bWJlcl0sXHJcbiAgICByZXNvbHV0aW9uOiBudW1iZXIsXHJcbiAgICB2aWV3UmVzb2x1dGlvbjogbnVtYmVyXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBzY2FsZUZhY3RvciA9IHJlc29sdXRpb24gLyA5NjtcclxuICAgIGNvbnN0IG5ld01hcFNpemUgPSBbXHJcbiAgICAgIE1hdGgucm91bmQoaW5pdGlhbE1hcFNpemVbMF0gKiBzY2FsZUZhY3RvciksIC8vIHdpZHRoXHJcbiAgICAgIE1hdGgucm91bmQoaW5pdGlhbE1hcFNpemVbMV0gKiBzY2FsZUZhY3RvcikgLy8gaGVpZ2h0XHJcbiAgICBdO1xyXG4gICAgbWFwLm9sLnNldFNpemUobmV3TWFwU2l6ZSk7XHJcbiAgICBjb25zdCBzY2FsaW5nID0gTWF0aC5taW4oXHJcbiAgICAgIG5ld01hcFNpemVbMF0gLyBpbml0aWFsTWFwU2l6ZVswXSxcclxuICAgICAgbmV3TWFwU2l6ZVsxXSAvIGluaXRpYWxNYXBTaXplWzFdXHJcbiAgICApO1xyXG4gICAgY29uc3QgdmlldyA9IG1hcC5vbC5nZXRWaWV3KCk7XHJcbiAgICB2aWV3LnNldFJlc29sdXRpb24odmlld1Jlc29sdXRpb24gLyBzY2FsaW5nKTtcclxuICAgIG1hcC5vbC5yZW5kZXJTeW5jKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYW5kIEFkZCBMZWdlbmQgdG8gdGhlIG1hcCBjYW52YXNcclxuICAgKiBAcGFyYW0gIGNhbnZhcyBDYW52YXMgb2YgdGhlIG1hcFxyXG4gICAqIEBwYXJhbSAgbWFwIE1hcCBvZiB0aGUgYXBwXHJcbiAgICogQHBhcmFtICByZXNvbHV0aW9uIFJlc29sdXRpb24gb2YgbWFwXHJcbiAgICogQHBhcmFtICBsZWdlbmRQb3NpdGlvbiBMZWdlbmQgcG9zaXRpb25cclxuICAgKiBAcGFyYW0gIGZvcm1hdCBJbWFnZSBmb3JtYXRcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIGFkZExlZ2VuZFRvSW1hZ2UoXHJcbiAgICBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LFxyXG4gICAgbWFwOiBJZ29NYXAsXHJcbiAgICByZXNvbHV0aW9uOiBudW1iZXIsXHJcbiAgICBsZWdlbmRQb3NpdGlvbjogc3RyaW5nLFxyXG4gICAgZm9ybWF0OiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnN0IGZpbGVOYW1lV2l0aEV4dCA9ICdtYXAuJyArIGZvcm1hdDtcclxuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAvLyBHZXQgaHRtbCBjb2RlIGZvciB0aGUgbGVnZW5kXHJcbiAgICBjb25zdCBodG1sID0gYXdhaXQgdGhpcy5nZXRMYXllcnNMZWdlbmRIdG1sKFxyXG4gICAgICBtYXAsXHJcbiAgICAgIGNhbnZhcy53aWR0aCxcclxuICAgICAgcmVzb2x1dGlvblxyXG4gICAgKS50b1Byb21pc2UoKTtcclxuICAgIC8vIElmIG5vIGxlZ2VuZCwgc2F2ZSB0aGUgbWFwIGRpcmVjdGx5XHJcbiAgICBpZiAoaHRtbCA9PT0gJycpIHtcclxuICAgICAgYXdhaXQgdGhpcy5zYXZlQ2FudmFzSW1hZ2VBc0ZpbGUoY2FudmFzLCBmaWxlTmFtZVdpdGhFeHQsIGZvcm1hdCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIGRpdiB0byBjb250YWluIGh0bWwgY29kZSBmb3IgbGVnZW5kXHJcbiAgICBjb25zdCBkaXYgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICBkaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgZGl2LnN0eWxlLnRvcCA9ICcwJztcclxuICAgIGRpdi5zdHlsZS56SW5kZXggPSAnLTEnO1xyXG4gICAgLy8gQWRkIGh0bWwgY29kZSB0byBjb252ZXJ0IGluIHRoZSBuZXcgd2luZG93XHJcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IGh0bWw7XHJcbiAgICBhd2FpdCB0aGlzLnRpbWVvdXQoMSk7XHJcbiAgICBjb25zdCBjYW52YXNMZWdlbmQgPSBhd2FpdCBodG1sMmNhbnZhcyhkaXYsIHsgdXNlQ09SUzogdHJ1ZSB9KS5jYXRjaChcclxuICAgICAgKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY2FudmFzTGVnZW5kKSB7XHJcbiAgICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IGNhbnZhcy5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gY2FudmFzLndpZHRoO1xyXG4gICAgICBjb25zdCBsZWdlbmRIZWlnaHQgPSBjYW52YXNMZWdlbmQuaGVpZ2h0O1xyXG4gICAgICBjb25zdCBsZWdlbmRXaWR0aCA9IGNhbnZhc0xlZ2VuZC53aWR0aDtcclxuICAgICAgLy8gTW92ZSB0aGUgbGVnZW5kIHRvIHRoZSBjb3JyZWN0IHBvc2l0aW9uIG9uIHRoZSBwYWdlXHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IGNhbnZhc0hlaWdodCAqIDAuMDE7XHJcbiAgICAgIGxldCBsZWdlbmRYOiBudW1iZXI7XHJcbiAgICAgIGxldCBsZWdlbmRZOiBudW1iZXI7XHJcblxyXG4gICAgICBpZiAobGVnZW5kUG9zaXRpb24gPT09ICdib3R0b21yaWdodCcpIHtcclxuICAgICAgICBsZWdlbmRYID0gY2FudmFzV2lkdGggLSBsZWdlbmRXaWR0aCAtIG9mZnNldDtcclxuICAgICAgICBsZWdlbmRZID0gY2FudmFzSGVpZ2h0IC0gbGVnZW5kSGVpZ2h0IC0gb2Zmc2V0O1xyXG4gICAgICB9IGVsc2UgaWYgKGxlZ2VuZFBvc2l0aW9uID09PSAndG9wcmlnaHQnKSB7XHJcbiAgICAgICAgbGVnZW5kWCA9IGNhbnZhc1dpZHRoIC0gbGVnZW5kV2lkdGggLSBvZmZzZXQ7XHJcbiAgICAgICAgbGVnZW5kWSA9IG9mZnNldDtcclxuICAgICAgfSBlbHNlIGlmIChsZWdlbmRQb3NpdGlvbiA9PT0gJ2JvdHRvbWxlZnQnKSB7XHJcbiAgICAgICAgbGVnZW5kWCA9IG9mZnNldDtcclxuICAgICAgICBsZWdlbmRZID0gY2FudmFzSGVpZ2h0IC0gbGVnZW5kSGVpZ2h0IC0gb2Zmc2V0IC0gMTU7XHJcbiAgICAgIH0gZWxzZSBpZiAobGVnZW5kUG9zaXRpb24gPT09ICd0b3BsZWZ0Jykge1xyXG4gICAgICAgIGxlZ2VuZFggPSBvZmZzZXQ7XHJcbiAgICAgICAgbGVnZW5kWSA9IG9mZnNldDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29udGV4dC5kcmF3SW1hZ2UoXHJcbiAgICAgICAgY2FudmFzTGVnZW5kLFxyXG4gICAgICAgIGxlZ2VuZFgsXHJcbiAgICAgICAgbGVnZW5kWSxcclxuICAgICAgICBsZWdlbmRXaWR0aCxcclxuICAgICAgICBsZWdlbmRIZWlnaHRcclxuICAgICAgKTtcclxuICAgICAgY29udGV4dC5zdHJva2VSZWN0KGxlZ2VuZFgsIGxlZ2VuZFksIGxlZ2VuZFdpZHRoLCBsZWdlbmRIZWlnaHQpO1xyXG4gICAgICB0aGlzLnJlbW92ZUh0bWxFbGVtZW50KGRpdik7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJNYXAobWFwLCBzaXplLCBleHRlbnQpIHtcclxuICAgIG1hcC5vbC51cGRhdGVTaXplKCk7XHJcbiAgICBtYXAub2wucmVuZGVyU3luYygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSAgZG9jIC0gRG9jdW1lbnQgdG8gc2F2ZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBhc3luYyBzYXZlRG9jKGRvYzoganNQREYpIHtcclxuICAgIGF3YWl0IGRvYy5zYXZlKCdtYXBfZ2VvcmVmLnBkZicsIHsgcmV0dXJuUHJvbWlzZTogdHJ1ZSB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZSB0aGUgYmVzdCBJbWFnZSBzaXplIHRvIGZpdCBpbiBwZGZcclxuICAgKiBAcGFyYW0gZG9jIC0gUGRmIERvY3VtZW50XHJcbiAgICogQHBhcmFtIGNhbnZhcyAtIENhbnZhcyBvZiBpbWFnZVxyXG4gICAqIEBwYXJhbSBtYXJnaW5zIC0gUGFnZSBtYXJnaW5zXHJcbiAgICovXHJcbiAgZ2V0SW1hZ2VTaXplVG9GaXRQZGYoZG9jLCBjYW52YXMsIG1hcmdpbnMpIHtcclxuICAgIC8vIERlZmluZSB2YXJpYWJsZSB0byBjYWxjdWxhdGUgYmVzdCBzaXplIHRvIGZpdCBpbiBvbmUgcGFnZVxyXG4gICAgY29uc3QgcGFnZUhlaWdodCA9XHJcbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRIZWlnaHQoKSAtIChtYXJnaW5zWzBdICsgbWFyZ2luc1syXSArIDEwKTtcclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9XHJcbiAgICAgIGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS5nZXRXaWR0aCgpIC0gKG1hcmdpbnNbMV0gKyBtYXJnaW5zWzNdKTtcclxuICAgIGNvbnN0IGNhbkhlaWdodCA9IHRoaXMucGRmX3VuaXRzMnBvaW50cyhjYW52YXMuaGVpZ2h0LCAnbW0nKTtcclxuICAgIGNvbnN0IGNhbldpZHRoID0gdGhpcy5wZGZfdW5pdHMycG9pbnRzKGNhbnZhcy53aWR0aCwgJ21tJyk7XHJcblxyXG4gICAgY29uc3QgaGVpZ2h0UmF0aW8gPSBjYW5IZWlnaHQgLyBwYWdlSGVpZ2h0O1xyXG4gICAgY29uc3Qgd2lkdGhSYXRpbyA9IGNhbldpZHRoIC8gcGFnZVdpZHRoO1xyXG4gICAgY29uc3QgbWF4UmF0aW8gPSBoZWlnaHRSYXRpbyA+IHdpZHRoUmF0aW8gPyBoZWlnaHRSYXRpbyA6IHdpZHRoUmF0aW87XHJcbiAgICBjb25zdCBpbWdIZWlnaCA9IG1heFJhdGlvID4gMSA/IGNhbkhlaWdodCAvIG1heFJhdGlvIDogY2FuSGVpZ2h0O1xyXG4gICAgY29uc3QgaW1nV2lkdGggPSBtYXhSYXRpbyA+IDEgPyBjYW5XaWR0aCAvIG1heFJhdGlvIDogY2FuV2lkdGg7XHJcbiAgICByZXR1cm4gW2ltZ1dpZHRoLCBpbWdIZWlnaF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSB3b3JsZCBmaWxlIGluZm9ybWF0aW9uIGZvciB0aWZmXHJcbiAgICogQHBhcmFtICBtYXAgLSBNYXAgb2YgdGhlIGFwcFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0V29ybGRGaWxlSW5mb3JtYXRpb24obWFwKSB7XHJcbiAgICBjb25zdCBjdXJyZW50UmVzb2x1dGlvbiA9IG1hcC52aWV3Q29udHJvbGxlci5nZXRSZXNvbHV0aW9uKCk7XHJcbiAgICBjb25zdCBjdXJyZW50RXh0ZW50ID0gbWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpOyAvLyBSZXR1cm4gW21pbngsIG1pbnksIG1heHgsIG1heHldXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBjdXJyZW50UmVzb2x1dGlvbixcclxuICAgICAgMCxcclxuICAgICAgMCxcclxuICAgICAgLWN1cnJlbnRSZXNvbHV0aW9uLFxyXG4gICAgICBjdXJyZW50RXh0ZW50WzBdICsgY3VycmVudFJlc29sdXRpb24gLyAwLjUsXHJcbiAgICAgIGN1cnJlbnRFeHRlbnRbM10gLSBjdXJyZW50UmVzb2x1dGlvbiAvIDAuNVxyXG4gICAgXS5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgY2FudmFzIGltYWdlIGFzIGZpbGVcclxuICAgKiBAcGFyYW0gY2FudmFzIC0gQ2FudmFzIHRvIHNhdmVcclxuICAgKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGZpbGVcclxuICAgKiBAcGFyYW0gZm9ybWF0IC0gZmlsZSBmb3JtYXRcclxuICAgKi9cclxuICBwcml2YXRlIHNhdmVDYW52YXNJbWFnZUFzRmlsZShjYW52YXMsIG5hbWVXaXRoRXh0LCBmb3JtYXQpIHtcclxuICAgIGNvbnN0IGJsb2JGb3JtYXQgPSAnaW1hZ2UvJyArIGZvcm1hdDtcclxuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNhbnZhcy50b0RhdGFVUkwoKTsgLy8gSnVzdCB0byBtYWtlIHRoZSBjYXRjaCB0cmlnZ2VyIHdpaHRvdXQgdG9CbG9iIEVycm9yIHRocm93IG5vdCBjYXRjaGVkXHJcbiAgICAgIGNhbnZhcy50b0Jsb2IoKGJsb2IpID0+IHtcclxuICAgICAgICAvLyBkb3dubG9hZCBpbWFnZVxyXG4gICAgICAgIHNhdmVBcyhibG9iLCBuYW1lV2l0aEV4dCk7XHJcbiAgICAgICAgdGhhdC5zYXZlRmlsZVByb2Nlc3NpbmcoKTtcclxuICAgICAgfSwgYmxvYkZvcm1hdCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihcclxuICAgICAgICAnaWdvLmdlby5wcmludEZvcm0uY29yc0Vycm9yTWVzc2FnZUJvZHknLFxyXG4gICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlSGVhZGVyJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGZpbGUgdG8gYSB6aXBcclxuICAgKiBAcGFyYW0gY2FudmFzIC0gRmlsZSB0byBhZGQgdG8gdGhlIHppcFxyXG4gICAqIEBwYXJhbSAgbmFtZSAtTmFtZSBvZiB0aGUgZmlsZW92ZXJ2aWV3XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhbnZhRmlsZVRvWmlwKGNhbnZhcywgbmFtZSkge1xyXG4gICAgY29uc3QgYmxvYkZvcm1hdCA9ICdpbWFnZS8nICsgJ2pwZWcnO1xyXG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmhhc093blByb3BlcnR5KCd6aXBGaWxlJykgfHxcclxuICAgICAgdHlwZW9mIHRoaXMuemlwRmlsZSA9PT0gJ3VuZGVmaW5lZCdcclxuICAgICkge1xyXG4gICAgICB0aGlzLnppcEZpbGUgPSBuZXcgSlNaaXAoKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjYW52YXMudG9EYXRhVVJMKCk7IC8vIEp1c3QgdG8gbWFrZSB0aGUgY2F0Y2ggdHJpZ2dlciB3aWh0b3V0IHRvQmxvYiBFcnJvciB0aHJvdyBub3QgY2F0Y2hlZFxyXG4gICAgICBpZiAobmF2aWdhdG9yLm1zU2F2ZUJsb2IpIHtcclxuICAgICAgICB0aGlzLmFkZEZpbGVUb1ppcChuYW1lLCBjYW52YXMubXNUb0Jsb2IoKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FudmFzLnRvQmxvYigoYmxvYikgPT4ge1xyXG4gICAgICAgICAgdGhhdC5hZGRGaWxlVG9aaXAobmFtZSwgYmxvYik7XHJcbiAgICAgICAgfSwgYmxvYkZvcm1hdCk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICdpZ28uZ2VvLnByaW50Rm9ybS5jb3JzRXJyb3JNZXNzYWdlQm9keScsXHJcbiAgICAgICAgJ2lnby5nZW8ucHJpbnRGb3JtLmNvcnNFcnJvck1lc3NhZ2VIZWFkZXInXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgZmlsZSB0byB6aXAsIGlmIGFsbCBmaWxlIGFyZSB6aXBwZWQsIGRvd25sb2FkXHJcbiAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBmaWxlc1xyXG4gICAqIEBwYXJhbSBibG9iIC0gQ29udGFpbiBvZiBmaWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRGaWxlVG9aaXAobmFtZSwgYmxvYikge1xyXG4gICAgLy8gYWRkIGZpbGUgdG8gemlwXHJcbiAgICB0aGlzLnppcEZpbGUuZmlsZShuYW1lLCBibG9iKTtcclxuICAgIHRoaXMubmJGaWxlVG9Qcm9jZXNzLS07XHJcblxyXG4gICAgLy8gSWYgYWxsIGZpbGVzIGFyZSBwcm9jY2Vzc2VkXHJcbiAgICBpZiAodGhpcy5uYkZpbGVUb1Byb2Nlc3MgPT09IDApIHtcclxuICAgICAgLy8gRG93bmxvYWQgemlwIGZpbGVcclxuICAgICAgdGhpcy5nZXRaaXBGaWxlKCk7XHJcbiAgICAgIC8vIFN0b3AgbG9hZGluZ1xyXG4gICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS51bnJlZ2lzdGVyKHRoaXMuYWN0aXZpdHlJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhdmVGaWxlUHJvY2Vzc2luZygpIHtcclxuICAgIHRoaXMubmJGaWxlVG9Qcm9jZXNzLS07XHJcblxyXG4gICAgLy8gSWYgYWxsIGZpbGVzIGFyZSBwcm9jY2Vzc2VkXHJcbiAgICBpZiAodGhpcy5uYkZpbGVUb1Byb2Nlc3MgPT09IDApIHtcclxuICAgICAgLy8gU3RvcCBsb2FkaW5nXHJcbiAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcy5hY3Rpdml0eUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgemlwcGVkIGZpbGVcclxuICAgKiBAcmV0dXJuIFJldHVuIGEgemlwIGZpbGVcclxuICAgKi9cclxuICBwcml2YXRlIGdldFppcEZpbGUoKSB7XHJcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuICAgIHRoaXMuemlwRmlsZS5nZW5lcmF0ZUFzeW5jKHsgdHlwZTogJ2Jsb2InIH0pLnRoZW4oKGJsb2IpID0+IHtcclxuICAgICAgLy8gMSkgZ2VuZXJhdGUgdGhlIHppcCBmaWxlXHJcbiAgICAgIHNhdmVBcyhibG9iLCAnbWFwLnppcCcpO1xyXG4gICAgICBkZWxldGUgdGhhdC56aXBGaWxlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBkZl91bml0czJwb2ludHMobiwgdW5pdCk6IG51bWJlciB7XHJcbiAgICBsZXQgayA9IDE7XHJcblxyXG4gICAgLy8gdGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20ganNQREZcclxuICAgIC8vICBhcyBpdCBkb2VzIG5vdCBleHBvc2UgYSBwdWJsaWMgQVBJXHJcbiAgICAvLyAgZm9yIGNvbnZlcnRpbmcgdW5pdHMgdG8gcG9pbnRzLlxyXG4gICAgc3dpdGNoICh1bml0KSB7XHJcbiAgICAgIGNhc2UgJ3B0JzpcclxuICAgICAgICBrID0gMTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbW0nOlxyXG4gICAgICAgIGsgPSA3MiAvIDI1LjQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NtJzpcclxuICAgICAgICBrID0gNzIgLyAyLjU0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdpbic6XHJcbiAgICAgICAgayA9IDcyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdweCc6XHJcbiAgICAgICAgayA9IDk2IC8gNzI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3BjJzpcclxuICAgICAgICBrID0gMTI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2VtJzpcclxuICAgICAgICBrID0gMTI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2V4JzpcclxuICAgICAgICBrID0gNjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5pdDogJyArIHVuaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuICogaztcclxuICB9XHJcbn1cclxuIl19
|