@igo2/geo 17.0.0-next.6 → 17.0.0-next.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/images/north-direction.png +0 -0
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +9 -7
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +8 -7
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +6 -5
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +4 -4
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +6 -6
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +7 -7
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +24 -8
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +9 -5
- package/esm2022/lib/catalog/catalog-library/index.mjs +2 -7
- package/esm2022/lib/catalog/catalog.module.mjs +15 -8
- package/esm2022/lib/catalog/index.mjs +2 -7
- package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
- package/esm2022/lib/catalog/shared/catalog.service.mjs +3 -3
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +3 -3
- package/esm2022/lib/datasource/shared/datasource.service.mjs +3 -3
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +3 -3
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +3 -3
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +6 -6
- 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.interface.mjs +5 -2
- package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
- package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +8 -1
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +70 -39
- package/esm2022/lib/directions/directions.component.mjs +73 -19
- package/esm2022/lib/directions/directions.module.mjs +6 -12
- package/esm2022/lib/directions/directions.provider.mjs +16 -0
- package/esm2022/lib/directions/index.mjs +2 -1
- package/esm2022/lib/directions/shared/directions.service.mjs +28 -22
- package/esm2022/lib/directions/shared/directions.utils.mjs +2 -2
- package/esm2022/lib/directions/shared/store.mjs +2 -2
- package/esm2022/lib/download/download-button/download-button.component.mjs +6 -6
- package/esm2022/lib/download/download.module.mjs +4 -4
- package/esm2022/lib/download/shared/download.service.mjs +3 -3
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +6 -6
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +6 -6
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +7 -7
- package/esm2022/lib/draw/draw/draw.component.mjs +7 -7
- 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 +3 -3
- package/esm2022/lib/environment/environment.interface.mjs +1 -1
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +8 -7
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +3 -3
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +13 -7
- package/esm2022/lib/feature/feature-details/index.mjs +2 -7
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +6 -6
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +4 -4
- package/esm2022/lib/feature/feature.module.mjs +15 -8
- package/esm2022/lib/feature/index.mjs +2 -7
- package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
- package/esm2022/lib/feature/shared/feature.utils.mjs +2 -2
- package/esm2022/lib/feature/shared/store.mjs +2 -2
- package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +2 -2
- package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +2 -2
- package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +2 -2
- package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +2 -2
- package/esm2022/lib/feature/shared/strategies/loading.mjs +2 -2
- package/esm2022/lib/feature/shared/strategies/search.mjs +2 -2
- package/esm2022/lib/feature/shared/strategies/selection.mjs +2 -2
- package/esm2022/lib/filter/filter.module.mjs +8 -8
- package/esm2022/lib/filter/index.mjs +2 -36
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +7 -7
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +6 -6
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +8 -8
- 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 +20 -22
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +5 -5
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +7 -7
- 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 +7 -7
- 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.interface.mjs +1 -1
- package/esm2022/lib/filter/shared/ogc-filter.mjs +46 -3
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +3 -3
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +3 -3
- 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 +7 -7
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +7 -7
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +7 -7
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +7 -7
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +7 -7
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +7 -7
- 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 +5 -5
- 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 +7 -7
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +9 -5
- package/esm2022/lib/geometry/geometry-form-field/index.mjs +3 -8
- package/esm2022/lib/geometry/geometry.module.mjs +4 -4
- package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +6 -6
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +10 -8
- package/esm2022/lib/import-export/import-export.module.mjs +10 -5
- package/esm2022/lib/import-export/index.mjs +2 -9
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +7 -6
- package/esm2022/lib/import-export/shared/export.service.mjs +11 -5
- package/esm2022/lib/import-export/shared/export.utils.mjs +2 -2
- package/esm2022/lib/import-export/shared/import.service.mjs +3 -3
- package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
- package/esm2022/lib/layer/index.mjs +2 -19
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +6 -6
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +9 -7
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +3 -3
- 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 +7 -7
- package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +3 -3
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +9 -9
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +7 -7
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +3 -3
- package/esm2022/lib/layer/layer.module.mjs +16 -5
- package/esm2022/lib/layer/shared/layer.service.mjs +3 -3
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +6 -6
- 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 +6 -6
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +6 -6
- package/esm2022/lib/map/index.mjs +1 -32
- package/esm2022/lib/map/info-section/info-section.component.mjs +3 -3
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +3 -3
- package/esm2022/lib/map/map-center/map-center.component.mjs +3 -3
- package/esm2022/lib/map/map.module.mjs +36 -36
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +6 -6
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +6 -6
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +6 -6
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +5 -5
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +3 -3
- package/esm2022/lib/map/shared/map.service.mjs +3 -3
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +3 -3
- package/esm2022/lib/map/shared/projection.service.mjs +3 -3
- 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 +6 -6
- 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 +6 -6
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +6 -6
- package/esm2022/lib/measure/measurer/measurer.component.mjs +7 -7
- package/esm2022/lib/measure/measurer/measurer.module.mjs +4 -4
- package/esm2022/lib/metadata/index.mjs +2 -6
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +9 -9
- package/esm2022/lib/metadata/metadata.module.mjs +9 -5
- package/esm2022/lib/metadata/shared/metadata.service.mjs +3 -3
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +3 -3
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +3 -3
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +3 -3
- package/esm2022/lib/offline/shared/geo-network.service.mjs +3 -3
- 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 +5 -5
- package/esm2022/lib/print/print-form/print-form.component.mjs +20 -8
- package/esm2022/lib/print/print.module.mjs +4 -4
- package/esm2022/lib/print/shared/print.interface.mjs +1 -1
- package/esm2022/lib/print/shared/print.service.mjs +171 -124
- package/esm2022/lib/query/query.module.mjs +4 -4
- package/esm2022/lib/query/shared/index.mjs +2 -1
- package/esm2022/lib/query/shared/query-search-source.mjs +3 -3
- package/esm2022/lib/query/shared/query.directive.mjs +3 -3
- package/esm2022/lib/query/shared/query.service.mjs +3 -3
- package/esm2022/lib/search/index.mjs +2 -13
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +11 -8
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +4 -4
- package/esm2022/lib/search/search-results/index.mjs +2 -7
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +7 -7
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +9 -7
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +6 -5
- package/esm2022/lib/search/search-results/search-results.component.mjs +9 -7
- package/esm2022/lib/search/search-results/search-results.directive.mjs +7 -0
- package/esm2022/lib/search/search-results/search-results.module.mjs +4 -4
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +6 -6
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +4 -4
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +6 -6
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +4 -4
- package/esm2022/lib/search/search.module.mjs +19 -5
- package/esm2022/lib/search/shared/index.mjs +2 -1
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +5 -5
- package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
- package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
- package/esm2022/lib/search/shared/search.provider.mjs +20 -0
- package/esm2022/lib/search/shared/search.service.mjs +30 -11
- package/esm2022/lib/search/shared/sources/cadastre.mjs +3 -3
- package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +8 -1
- package/esm2022/lib/search/shared/sources/coordinates.mjs +6 -6
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +11 -1
- package/esm2022/lib/search/shared/sources/icherche-icons.mjs +2 -2
- package/esm2022/lib/search/shared/sources/icherche.mjs +11 -11
- package/esm2022/lib/search/shared/sources/icherche.providers.mjs +20 -1
- package/esm2022/lib/search/shared/sources/ilayer.mjs +6 -6
- package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +11 -1
- package/esm2022/lib/search/shared/sources/nominatim.mjs +3 -3
- package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +8 -1
- package/esm2022/lib/search/shared/sources/source.interfaces.mjs +13 -2
- package/esm2022/lib/search/shared/sources/source.mjs +1 -1
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +6 -6
- package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +14 -1
- package/esm2022/lib/search/shared/sources/workspace.mjs +3 -3
- package/esm2022/lib/search/shared/sources/workspace.providers.mjs +8 -1
- package/esm2022/lib/style/shared/feature/feature-style.mjs +3 -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 +7 -7
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +7 -7
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +6 -6
- 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 +7 -5
- package/esm2022/lib/toast/toast.module.mjs +4 -4
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +3 -3
- 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 +3 -3
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +4 -4
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +2 -2
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +6 -5
- package/esm2022/lib/workspace/shared/feature-workspace.mjs +2 -2
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +6 -5
- package/esm2022/lib/workspace/shared/wfs-workspace.mjs +2 -2
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +6 -5
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +6 -5
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -2
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +4 -4
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +4 -4
- package/esm2022/lib/workspace/widgets/widgets.mjs +2 -2
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +6 -6
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +4 -4
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +4 -4
- package/esm2022/lib/workspace/workspace.module.mjs +6 -6
- package/fesm2022/igo2-geo.mjs +30505 -30182
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +2 -2
- package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +1 -1
- package/lib/catalog/catalog-library/catalog-library.component.d.ts +3 -1
- package/lib/catalog/catalog-library/catalog-library.module.d.ts +3 -0
- package/lib/catalog/catalog-library/index.d.ts +1 -3
- package/lib/catalog/catalog.module.d.ts +6 -3
- package/lib/catalog/index.d.ts +1 -2
- package/lib/catalog/shared/catalog.interface.d.ts +1 -1
- package/lib/directions/directions-sources/directions-source.d.ts +7 -3
- package/lib/directions/directions-sources/directions-source.interface.d.ts +19 -6
- package/lib/directions/directions-sources/directions-source.provider.d.ts +2 -0
- package/lib/directions/directions-sources/osrm-directions-source.d.ts +19 -10
- package/lib/directions/directions.component.d.ts +15 -3
- package/lib/directions/directions.module.d.ts +5 -6
- package/lib/directions/directions.provider.d.ts +3 -0
- package/lib/directions/index.d.ts +1 -0
- package/lib/directions/shared/directions.service.d.ts +4 -2
- package/lib/directions/shared/directions.utils.d.ts +1 -1
- package/lib/directions/shared/store.d.ts +1 -1
- package/lib/draw/draw/draw-shorcuts.component.d.ts +1 -1
- package/lib/draw/draw/draw.component.d.ts +1 -1
- package/lib/environment/environment.interface.d.ts +2 -1
- package/lib/feature/feature-details/feature-details.component.d.ts +1 -1
- package/lib/feature/feature-details/feature-details.module.d.ts +3 -0
- package/lib/feature/feature-details/index.d.ts +1 -3
- package/lib/feature/feature-form/feature-form.component.d.ts +1 -2
- package/lib/feature/feature.module.d.ts +6 -3
- package/lib/feature/index.d.ts +1 -2
- package/lib/feature/shared/feature.interfaces.d.ts +1 -1
- package/lib/feature/shared/feature.utils.d.ts +1 -1
- package/lib/feature/shared/store.d.ts +1 -1
- package/lib/feature/shared/strategies/geo-properties.d.ts +1 -1
- package/lib/feature/shared/strategies/in-map-extent.d.ts +1 -1
- package/lib/feature/shared/strategies/in-map-resolution.d.ts +1 -1
- package/lib/feature/shared/strategies/loading-layer.d.ts +1 -1
- package/lib/feature/shared/strategies/loading.d.ts +1 -1
- package/lib/feature/shared/strategies/search.d.ts +1 -1
- package/lib/feature/shared/strategies/selection.d.ts +1 -1
- package/lib/filter/filter.module.d.ts +19 -0
- package/lib/filter/index.d.ts +1 -16
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +1 -1
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +3 -3
- package/lib/filter/shared/ogc-filter.d.ts +7 -0
- package/lib/filter/shared/ogc-filter.interface.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +1 -1
- package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +3 -0
- package/lib/geometry/geometry-form-field/index.d.ts +2 -4
- package/lib/geometry/shared/geometry.interfaces.d.ts +1 -1
- package/lib/import-export/import-export/import-export.component.d.ts +2 -2
- package/lib/import-export/import-export.module.d.ts +4 -0
- package/lib/import-export/index.d.ts +1 -4
- package/lib/import-export/shared/drop-geo-file.directive.d.ts +2 -1
- package/lib/import-export/shared/export.utils.d.ts +1 -1
- package/lib/import-export/shared/import.utils.d.ts +1 -1
- package/lib/layer/index.d.ts +1 -8
- package/lib/layer/layer-list/layer-list.component.d.ts +0 -2
- package/lib/layer/layer.module.d.ts +10 -0
- package/lib/map/index.d.ts +0 -14
- package/lib/map/map.module.d.ts +32 -15
- package/lib/measure/measurer/measurer.component.d.ts +1 -1
- package/lib/metadata/index.d.ts +1 -2
- package/lib/metadata/metadata.module.d.ts +2 -0
- package/lib/print/print-form/print-form.component.d.ts +4 -1
- package/lib/print/shared/print.interface.d.ts +1 -0
- package/lib/print/shared/print.service.d.ts +27 -17
- package/lib/query/shared/index.d.ts +1 -0
- package/lib/search/index.d.ts +1 -5
- package/lib/search/search-bar/search-bar.component.d.ts +2 -1
- package/lib/search/search-results/index.d.ts +1 -3
- 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-results/search-results.directive.d.ts +3 -0
- package/lib/search/search.module.d.ts +8 -0
- package/lib/search/shared/index.d.ts +1 -0
- package/lib/search/shared/search-source.service.d.ts +1 -1
- package/lib/search/shared/search.interfaces.d.ts +1 -1
- package/lib/search/shared/search.provider.d.ts +8 -0
- package/lib/search/shared/search.service.d.ts +7 -2
- package/lib/search/shared/sources/cadastre.providers.d.ts +2 -0
- package/lib/search/shared/sources/coordinates.providers.d.ts +2 -0
- package/lib/search/shared/sources/icherche-icons.d.ts +1 -1
- package/lib/search/shared/sources/icherche.providers.d.ts +6 -12
- package/lib/search/shared/sources/ilayer.providers.d.ts +2 -0
- package/lib/search/shared/sources/nominatim.providers.d.ts +2 -0
- package/lib/search/shared/sources/source.d.ts +1 -1
- package/lib/search/shared/sources/source.interfaces.d.ts +16 -0
- package/lib/search/shared/sources/storedqueries.providers.d.ts +3 -0
- package/lib/search/shared/sources/workspace.providers.d.ts +2 -0
- package/lib/toast/toast.component.d.ts +1 -1
- package/lib/wkt/shared/wkt.service.d.ts +1 -1
- package/lib/workspace/shared/edition-workspace.d.ts +1 -1
- package/lib/workspace/shared/feature-workspace.d.ts +1 -1
- package/lib/workspace/shared/wfs-workspace.d.ts +1 -1
- package/lib/workspace/shared/workspace.utils.d.ts +2 -1
- package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +2 -1
- package/lib/workspace/widgets/widgets.d.ts +1 -1
- package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
- package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
- package/lib/workspace/workspace.module.d.ts +1 -1
- package/locale/en.geo.json +8 -2
- package/locale/fr.geo.json +8 -2
- package/package.json +6 -6
|
@@ -14,8 +14,9 @@ import { MatInputModule } from '@angular/material/input';
|
|
|
14
14
|
import { MatSelectModule } from '@angular/material/select';
|
|
15
15
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
16
16
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
17
|
-
import { EntityTableColumnRenderer, EntityTableComponent } from '@igo2/common';
|
|
17
|
+
import { EntityTableColumnRenderer, EntityTableComponent } from '@igo2/common/entity';
|
|
18
18
|
import { LanguageService } from '@igo2/core/language';
|
|
19
|
+
import { IgoLanguageModule } from '@igo2/core/language';
|
|
19
20
|
import OlFeature from 'ol/Feature';
|
|
20
21
|
import OlGeoJSON from 'ol/format/GeoJSON';
|
|
21
22
|
import OlCircle from 'ol/geom/Circle';
|
|
@@ -26,7 +27,6 @@ import { transform } from 'ol/proj';
|
|
|
26
27
|
import OlVectorSource from 'ol/source/Vector';
|
|
27
28
|
import { getDistance, getLength } from 'ol/sphere';
|
|
28
29
|
import * as OlStyle from 'ol/style';
|
|
29
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
30
30
|
import { BehaviorSubject, Subscription } from 'rxjs';
|
|
31
31
|
import { first, skip } from 'rxjs/operators';
|
|
32
32
|
import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
|
|
@@ -1055,8 +1055,8 @@ export class DrawComponent {
|
|
|
1055
1055
|
const length = getLength(olGeometry);
|
|
1056
1056
|
return Number(length / (2 * Math.PI));
|
|
1057
1057
|
}
|
|
1058
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
1059
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: DrawComponent, isStandalone: true, selector: "igo-draw", inputs: { map: "map", stores: "stores", drawControls: "drawControls", activeDrawingLayer: "activeDrawingLayer" }, outputs: { activeLayerChange: "activeLayerChange", drawControlsEvent: "drawControlsEvent", layersIDEvent: "layersIDEvent", fillColor: "fillColor", strokeColor: "strokeColor", strokeWidth: "strokeWidth", fontSize: "fontSize", fontStyle: "fontStyle" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["selectedLayer"], descendants: true }], ngImport: i0, template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\"\n [value]=\"geometryType.Point\"\n >\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{ 'igo.geo.draw.' + geometryType.Point | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{ 'igo.geo.draw.' + geometryType.LineString | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{ 'igo.geo.draw.' + geometryType.Polygon | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{ 'igo.geo.draw.' + geometryType.Circle | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\"\n >\n {{ 'igo.geo.draw.drawControl' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\"\n >\n {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n *ngIf=\"!isPoint()\"\n [checked]=\"freehandMode\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleFreehandMode($event)\"\n >\n {{ 'igo.geo.draw.freehandMode' | translate }}\n </mat-slide-toggle>\n\n <div class=\"radius-unit\" *ngIf=\"isCircle()\">\n <mat-form-field class=\"radius\">\n <input\n matInput\n type=\"number\"\n min=\"0\"\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\n [formControl]=\"radiusFormControl\"\n [readonly]=\"this.freehandMode\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\n >\n <mat-option\n *ngFor=\"let measureUnit of measureUnits\"\n [value]=\"measureUnit\"\n >\n {{ 'igo.geo.measure.' + measureUnit | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"layer-select-container\">\n <mat-form-field class=\"layer-select\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.draw.layer.title' | translate }}</mat-label>\n <mat-select\n #selectedLayer\n (selectionChange)=\"onLayerChange(selectedLayer.value)\"\n [value]=\"updateActiveLayer()\"\n >\n <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n {{ layer.title }}\n </mat-option>\n <mat-option id=\"createNewLayer\">\n {{ 'igo.geo.draw.layer.createNewLayer' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button\n *ngIf=\"activeDrawingLayer\"\n mat-icon-button\n [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n activeDrawingLayer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\"\n >\n <mat-icon>\n {{ activeDrawingLayer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n </div>\n <mat-divider></mat-divider>\n <div>\n <button\n *ngIf=\"activeStore.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"activeStore\"\n [template]=\"tableTemplate\"\n >\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\" />\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{\n 'igo.geo.draw.noIcon' | translate\n }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\"\n >\n <div class=\"box\">\n <img src=\"{{ icon_html }}\" />\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"actions-container\">\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\"\n >\n <mat-icon\n class=\"shortcuts-icon\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n >keyboard\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.style.styleModalTooltipSelected' | translate\"\n >\n {{ 'igo.geo.style.styleModal' | translate }}\n <mat-icon\n aria-hidden=\"false\"\n iconPositionEnd\n class=\"style-icon\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n >palette\n </mat-icon>\n </button>\n </div>\n</div>\n", styles: [":host .geometry-type-toggle{padding:10px;text-align:center}:host .geometry-type-toggle mat-button-toggle-group{width:100%}:host .geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}:host .draw-options mat-slide-toggle{width:100%;padding:10px}:host .draw-options mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .draw-options mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .icon-options{margin:5px 5px 0}:host .deleteBtn{margin-left:16px}:host .edition-drawing{padding:10px 0}:host img{width:100%;height:100%}:host .deleteBtn{margin-left:12px}:host .storeTable{height:auto!important}:host .layer-select{flex:1;margin-right:8px}:host .input-button-container{padding:10px}:host .input-button-container mat-form-field{width:25%}:host .input-button-container button{left:8px;bottom:10px}:host .radius{flex:2}:host .unit-field{flex:1;margin-left:8px}:host .radius-unit{display:flex;width:100%;padding:4px 8px}:host ::ng-deep igo-entity-table td:last-child{text-align:right!important}:host ::ng-deep igo-entity-table td:last-child button{margin:0%!important}:host .layer-select-container{margin:16px 8px}:host .actions-container,:host .layer-select-container{display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i10.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i16.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }], animations: [
|
|
1058
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: DrawComponent, deps: [{ token: i1.LanguageService }, { token: i2.UntypedFormBuilder }, { token: i3.DrawStyleService }, { token: i4.MatDialog }, { token: i5.DrawIconService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1059
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: DrawComponent, isStandalone: true, selector: "igo-draw", inputs: { map: "map", stores: "stores", drawControls: "drawControls", activeDrawingLayer: "activeDrawingLayer" }, outputs: { activeLayerChange: "activeLayerChange", drawControlsEvent: "drawControlsEvent", layersIDEvent: "layersIDEvent", fillColor: "fillColor", strokeColor: "strokeColor", strokeWidth: "strokeWidth", fontSize: "fontSize", fontStyle: "fontStyle" }, viewQueries: [{ propertyName: "select", first: true, predicate: ["selectedLayer"], descendants: true }], ngImport: i0, template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\"\n [value]=\"geometryType.Point\"\n >\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{ 'igo.geo.draw.' + geometryType.Point | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{ 'igo.geo.draw.' + geometryType.LineString | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{ 'igo.geo.draw.' + geometryType.Polygon | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{ 'igo.geo.draw.' + geometryType.Circle | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\"\n >\n {{ 'igo.geo.draw.drawControl' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\"\n >\n {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n *ngIf=\"!isPoint()\"\n [checked]=\"freehandMode\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleFreehandMode($event)\"\n >\n {{ 'igo.geo.draw.freehandMode' | translate }}\n </mat-slide-toggle>\n\n <div class=\"radius-unit\" *ngIf=\"isCircle()\">\n <mat-form-field class=\"radius\">\n <input\n matInput\n type=\"number\"\n min=\"0\"\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\n [formControl]=\"radiusFormControl\"\n [readonly]=\"this.freehandMode\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\n >\n <mat-option\n *ngFor=\"let measureUnit of measureUnits\"\n [value]=\"measureUnit\"\n >\n {{ 'igo.geo.measure.' + measureUnit | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"layer-select-container\">\n <mat-form-field class=\"layer-select\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.draw.layer.title' | translate }}</mat-label>\n <mat-select\n #selectedLayer\n (selectionChange)=\"onLayerChange(selectedLayer.value)\"\n [value]=\"updateActiveLayer()\"\n >\n <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n {{ layer.title }}\n </mat-option>\n <mat-option id=\"createNewLayer\">\n {{ 'igo.geo.draw.layer.createNewLayer' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button\n *ngIf=\"activeDrawingLayer\"\n mat-icon-button\n [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n activeDrawingLayer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\"\n >\n <mat-icon>\n {{ activeDrawingLayer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n </div>\n <mat-divider></mat-divider>\n <div>\n <button\n *ngIf=\"activeStore.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"activeStore\"\n [template]=\"tableTemplate\"\n >\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\" />\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{\n 'igo.geo.draw.noIcon' | translate\n }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\"\n >\n <div class=\"box\">\n <img src=\"{{ icon_html }}\" />\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"actions-container\">\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\"\n >\n <mat-icon\n class=\"shortcuts-icon\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n >keyboard\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.style.styleModalTooltipSelected' | translate\"\n >\n {{ 'igo.geo.style.styleModal' | translate }}\n <mat-icon\n aria-hidden=\"false\"\n iconPositionEnd\n class=\"style-icon\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n >palette\n </mat-icon>\n </button>\n </div>\n</div>\n", styles: [":host .geometry-type-toggle{padding:10px;text-align:center}:host .geometry-type-toggle mat-button-toggle-group{width:100%}:host .geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}:host .draw-options mat-slide-toggle{width:100%;padding:10px}:host .draw-options mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .draw-options mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .icon-options{margin:5px 5px 0}:host .deleteBtn{margin-left:16px}:host .edition-drawing{padding:10px 0}:host img{width:100%;height:100%}:host .deleteBtn{margin-left:12px}:host .storeTable{height:auto!important}:host .layer-select{flex:1;margin-right:8px}:host .input-button-container{padding:10px}:host .input-button-container mat-form-field{width:25%}:host .input-button-container button{left:8px;bottom:10px}:host .radius{flex:2}:host .unit-field{flex:1;margin-left:8px}:host .radius-unit{display:flex;width:100%;padding:4px 8px}:host ::ng-deep igo-entity-table td:last-child{text-align:right!important}:host ::ng-deep igo-entity-table td:last-child button{margin:0%!important}:host .layer-select-container{margin:16px 8px}:host .actions-container,:host .layer-select-container{display:flex;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i10.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i12.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i16.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }], animations: [
|
|
1060
1060
|
trigger('openClose', [
|
|
1061
1061
|
state('open', style({
|
|
1062
1062
|
opacity: 1
|
|
@@ -1069,7 +1069,7 @@ export class DrawComponent {
|
|
|
1069
1069
|
])
|
|
1070
1070
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1071
1071
|
}
|
|
1072
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
1072
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: DrawComponent, decorators: [{
|
|
1073
1073
|
type: Component,
|
|
1074
1074
|
args: [{ selector: 'igo-draw', animations: [
|
|
1075
1075
|
trigger('openClose', [
|
|
@@ -1100,7 +1100,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
1100
1100
|
EntityTableComponent,
|
|
1101
1101
|
MatBadgeModule,
|
|
1102
1102
|
AsyncPipe,
|
|
1103
|
-
|
|
1103
|
+
IgoLanguageModule
|
|
1104
1104
|
], template: "<div>\n <div class=\"geometry-type-toggle mat-typography\">\n <mat-button-toggle-group\n (change)=\"onGeometryTypeChange($event.value)\"\n [value]=\"geometryType.Point\"\n >\n <mat-button-toggle [value]=\"geometryType.Point\">\n {{ 'igo.geo.draw.' + geometryType.Point | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.LineString\">\n {{ 'igo.geo.draw.' + geometryType.LineString | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Polygon\">\n {{ 'igo.geo.draw.' + geometryType.Polygon | translate }}\n </mat-button-toggle>\n\n <mat-button-toggle [value]=\"geometryType.Circle\">\n {{ 'igo.geo.draw.' + geometryType.Circle | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"draw-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\"\n >\n {{ 'igo.geo.draw.drawControl' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n [checked]=\"labelsAreShown\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleLabels()\"\n >\n {{ 'igo.geo.draw.toggleMapTooltips' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n *ngIf=\"!isPoint()\"\n [checked]=\"freehandMode\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleFreehandMode($event)\"\n >\n {{ 'igo.geo.draw.freehandMode' | translate }}\n </mat-slide-toggle>\n\n <div class=\"radius-unit\" *ngIf=\"isCircle()\">\n <mat-form-field class=\"radius\">\n <input\n matInput\n type=\"number\"\n min=\"0\"\n placeholder=\"{{ 'igo.geo.spatialFilter.radius' | translate }}\"\n [formControl]=\"radiusFormControl\"\n [readonly]=\"this.freehandMode\"\n />\n </mat-form-field>\n\n <mat-form-field class=\"unit-field\">\n <mat-select\n [value]=\"measureUnit\"\n (selectionChange)=\"onMeasureUnitChange($event.value)\"\n >\n <mat-option\n *ngFor=\"let measureUnit of measureUnits\"\n [value]=\"measureUnit\"\n >\n {{ 'igo.geo.measure.' + measureUnit | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <mat-divider></mat-divider>\n\n <div class=\"layer-select-container\">\n <mat-form-field class=\"layer-select\" subscriptSizing=\"dynamic\">\n <mat-label>{{ 'igo.geo.draw.layer.title' | translate }}</mat-label>\n <mat-select\n #selectedLayer\n (selectionChange)=\"onLayerChange(selectedLayer.value)\"\n [value]=\"updateActiveLayer()\"\n >\n <mat-option *ngFor=\"let layer of allLayers\" [value]=\"layer\">\n {{ layer.title }}\n </mat-option>\n <mat-option id=\"createNewLayer\">\n {{ 'igo.geo.draw.layer.createNewLayer' | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n <button\n *ngIf=\"activeDrawingLayer\"\n mat-icon-button\n [color]=\"activeDrawingLayer.visible ? 'primary' : 'default'\"\n collapsibleButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"\n activeDrawingLayer.visible\n ? ('igo.geo.layer.hideLayer' | translate)\n : ('igo.geo.layer.showLayer' | translate)\n \"\n (click)=\"activeDrawingLayer.visible = !activeDrawingLayer.visible\"\n >\n <mat-icon>\n {{ activeDrawingLayer.visible ? 'visibility' : 'visibility_off' }}\n </mat-icon>\n </button>\n </div>\n <mat-divider></mat-divider>\n <div>\n <button\n *ngIf=\"activeStore.count$.getValue() > 0\"\n class=\"deleteBtn\"\n mat-icon-button\n color=\"warn\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.delete' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n (click)=\"deleteDrawings()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n\n <div>\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"activeStore\"\n [template]=\"tableTemplate\"\n >\n </igo-entity-table>\n </div>\n </div>\n\n <div class=\"icon-options\">\n <mat-form-field *ngIf=\"icons.length >= 1\">\n <mat-label>{{ 'igo.geo.draw.icon' | translate }}</mat-label>\n <mat-select>\n <mat-select-trigger>\n <div *ngIf=\"icon\" class=\"box\">\n <img src=\"{{ icon }}\" />\n </div>\n </mat-select-trigger>\n <mat-option value=\"\" (click)=\"onIconChange()\">{{\n 'igo.geo.draw.noIcon' | translate\n }}</mat-option>\n <mat-option\n *ngFor=\"let icon_html of icons\"\n [value]=\"icon_html\"\n (click)=\"onIconChange(icon_html)\"\n >\n <div class=\"box\">\n <img src=\"{{ icon_html }}\" />\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div class=\"actions-container\">\n <button\n mat-icon-button\n color=\"accent\"\n disableRipple=\"true\"\n (click)=\"openShorcutsDialog()\"\n >\n <mat-icon\n class=\"shortcuts-icon\"\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.draw.shortcuts' | translate\"\n >keyboard\n </mat-icon>\n </button>\n\n <button\n *ngIf=\"selectedFeatures$.value.length\"\n mat-raised-button\n color=\"primary\"\n (click)=\"openStyleModalDialog()\"\n [matTooltip]=\"'igo.geo.style.styleModalTooltipSelected' | translate\"\n >\n {{ 'igo.geo.style.styleModal' | translate }}\n <mat-icon\n aria-hidden=\"false\"\n iconPositionEnd\n class=\"style-icon\"\n [matBadge]=\"selectedFeatures$.value.length\"\n matBadgeColor=\"warn\"\n matBadgeSize=\"medium\"\n >palette\n </mat-icon>\n </button>\n </div>\n</div>\n", styles: [":host .geometry-type-toggle{padding:10px;text-align:center}:host .geometry-type-toggle mat-button-toggle-group{width:100%}:host .geometry-type-toggle mat-button-toggle-group mat-button-toggle{width:25%}:host .draw-options mat-slide-toggle{width:100%;padding:10px}:host .draw-options mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .draw-options mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .icon-options{margin:5px 5px 0}:host .deleteBtn{margin-left:16px}:host .edition-drawing{padding:10px 0}:host img{width:100%;height:100%}:host .deleteBtn{margin-left:12px}:host .storeTable{height:auto!important}:host .layer-select{flex:1;margin-right:8px}:host .input-button-container{padding:10px}:host .input-button-container mat-form-field{width:25%}:host .input-button-container button{left:8px;bottom:10px}:host .radius{flex:2}:host .unit-field{flex:1;margin-left:8px}:host .radius-unit{display:flex;width:100%;padding:4px 8px}:host ::ng-deep igo-entity-table td:last-child{text-align:right!important}:host ::ng-deep igo-entity-table td:last-child button{margin:0%!important}:host .layer-select-container{margin:16px 8px}:host .actions-container,:host .layer-select-container{display:flex;align-items:center}\n"] }]
|
|
1105
1105
|
}], ctorParameters: () => [{ type: i1.LanguageService }, { type: i2.UntypedFormBuilder }, { type: i3.DrawStyleService }, { type: i4.MatDialog }, { type: i5.DrawIconService }], propDecorators: { map: [{
|
|
1106
1106
|
type: Input
|
|
@@ -1130,4 +1130,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
1130
1130
|
type: ViewChild,
|
|
1131
1131
|
args: ['selectedLayer']
|
|
1132
1132
|
}] } });
|
|
1133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBRW5CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FB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ckIsS0FBSztnQkFTSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQTZDcUIsTUFBTTtzQkFBakMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgc3RhdGUsXG4gIHN0eWxlLFxuICB0cmFuc2l0aW9uLFxuICB0cmlnZ2VyXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgVW50eXBlZEZvcm1CdWlsZGVyLFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFVudHlwZWRGb3JtR3JvdXBcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QmFkZ2VNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9iYWRnZSc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uLXRvZ2dsZSc7XG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFNsaWRlVG9nZ2xlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGUtdG9nZ2xlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHtcbiAgRW50aXR5UmVjb3JkLFxuICBFbnRpdHlUYWJsZUJ1dHRvbixcbiAgRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlcixcbiAgRW50aXR5VGFibGVDb21wb25lbnQsXG4gIEVudGl0eVRhYmxlVGVtcGxhdGVcbn0gZnJvbSAnQGlnbzIvY29tbW9uJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuXG5pbXBvcnQgT2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IE9sT3ZlcmxheSBmcm9tICdvbC9PdmVybGF5JztcbmltcG9ydCBPbEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0IE9sQ2lyY2xlIGZyb20gJ29sL2dlb20vQ2lyY2xlJztcbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBPbEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgT2xQb2ludCBmcm9tICdvbC9nZW9tL1BvaW50JztcbmltcG9ydCBQb2x5Z29uLCB7IGZyb21DaXJjbGUgfSBmcm9tICdvbC9nZW9tL1BvbHlnb24nO1xuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IHsgdHJhbnNmb3JtIH0gZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgeyBWZWN0b3JTb3VyY2VFdmVudCBhcyBPbFZlY3RvclNvdXJjZUV2ZW50IH0gZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgT2xWZWN0b3JTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3Rvcic7XG5pbXBvcnQgeyBnZXREaXN0YW5jZSwgZ2V0TGVuZ3RoIH0gZnJvbSAnb2wvc3BoZXJlJztcbmltcG9ydCAqIGFzIE9sU3R5bGUgZnJvbSAnb2wvc3R5bGUnO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9mZWF0dXJlLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHtcbiAgRkVBVFVSRSxcbiAgRmVhdHVyZU1vdGlvbixcbiAgRmVhdHVyZVN0b3JlLFxuICBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3ksXG4gIEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5LFxuICBmZWF0dXJlVG9PbCxcbiAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5LFxuICB0cnlBZGRTZWxlY3Rpb25TdHJhdGVneVxufSBmcm9tICcuLi8uLi9mZWF0dXJlJztcbmltcG9ydCB7IHRyeUJpbmRTdG9yZUxheWVyIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS1zdG9yZS51dGlscyc7XG5pbXBvcnQgeyBEcmF3Q29udHJvbCB9IGZyb20gJy4uLy4uL2dlb21ldHJ5L3NoYXJlZC9jb250cm9scy9kcmF3JztcbmltcG9ydCB7IFZlY3RvckxheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy92ZWN0b3ItbGF5ZXInO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9tYXAnO1xuaW1wb3J0IHtcbiAgTWVhc3VyZUFyZWFVbml0LFxuICBNZWFzdXJlQXJlYVVuaXRBYmJyZXZpYXRpb24sXG4gIE1lYXN1cmVMZW5ndGhVbml0LFxuICBNZWFzdXJlTGVuZ3RoVW5pdEFiYnJldmlhdGlvblxufSBmcm9tICcuLi8uLi9tZWFzdXJlL3NoYXJlZC9tZWFzdXJlLmVudW0nO1xuaW1wb3J0IHsgZ2V0VG9vbHRpcHNPZk9sR2VvbWV0cnkgfSBmcm9tICcuLi8uLi9tZWFzdXJlL3NoYXJlZC9tZWFzdXJlLnV0aWxzJztcbmltcG9ydCB7XG4gIG1lYXN1cmVPbEdlb21ldHJ5QXJlYSxcbiAgbWVhc3VyZU9sR2VvbWV0cnlMZW5ndGgsXG4gIG1ldGVyc1RvVW5pdCxcbiAgc3F1YXJlTWV0ZXJzVG9Vbml0XG59IGZyb20gJy4uLy4uL21lYXN1cmUvc2hhcmVkL21lYXN1cmUudXRpbHMnO1xuaW1wb3J0IHsgRm9udFR5cGUgfSBmcm9tICcuLi8uLi9zdHlsZS9zaGFyZWQvZm9udC5lbnVtJztcbmltcG9ydCB7IFN0eWxlTW9kYWxEcmF3aW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtbW9kYWwvZHJhd2luZy9zdHlsZS1tb2RhbC1kcmF3aW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdHlsZU1vZGFsRGF0YSB9IGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlLW1vZGFsL3NoYXJlZC9zdHlsZS1tb2RhbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRHJhd1N0eWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3N0eWxlL3N0eWxlLXNlcnZpY2UvZHJhdy1zdHlsZS5zZXJ2aWNlJztcbmltcG9ydCB7IERyYXdJY29uU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LWljb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb29yZGluYXRlc1VuaXQsIEdlb21ldHJ5VHlwZSwgTGFiZWxUeXBlIH0gZnJvbSAnLi4vc2hhcmVkL2RyYXcuZW51bSc7XG5pbXBvcnQgeyBEcmF3LCBGZWF0dXJlV2l0aERyYXcgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRER0b0RNUywgY3JlYXRlSW50ZXJhY3Rpb25TdHlsZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LnV0aWxzJztcbmltcG9ydCB7IERyYXdMYXllclBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi9kcmF3LWxheWVyLXBvcHVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEcmF3UG9wdXBDb21wb25lbnQgfSBmcm9tICcuL2RyYXctcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IERyYXdTaG9yY3V0c0NvbXBvbmVudCB9IGZyb20gJy4vZHJhdy1zaG9yY3V0cy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tZHJhdycsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdvcGVuQ2xvc2UnLCBbXG4gICAgICBzdGF0ZShcbiAgICAgICAgJ29wZW4nLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogMVxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHN0YXRlKFxuICAgICAgICAnY2xvc2VkJyxcbiAgICAgICAgc3R5bGUoe1xuICAgICAgICAgIG9wYWNpdHk6IDBcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgICB0cmFuc2l0aW9uKCdvcGVuID0+IGNsb3NlZCcsIFthbmltYXRlKCc2MDBtcyBlYXNlJyldKSxcbiAgICAgIHRyYW5zaXRpb24oJ2Nsb3NlZCA9PiBvcGVuJywgW2FuaW1hdGUoJzgwMG1zIGVhc2UnKV0pXG4gICAgXSlcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RyYXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcmF3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTWF0QnV0dG9uVG9nZ2xlTW9kdWxlLFxuICAgIE1hdFNsaWRlVG9nZ2xlTW9kdWxlLFxuICAgIE5nSWYsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE5nRm9yLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBNYXREaXZpZGVyTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgRW50aXR5VGFibGVDb21wb25lbnQsXG4gICAgTWF0QmFkZ2VNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERyYXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBUYWJsZSB0ZW1wbGF0ZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyB0YWJsZVRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlO1xuXG4gIHB1YmxpYyBnZW9tZXRyeVR5cGUgPSBHZW9tZXRyeVR5cGU7IC8vIFJlZmVyZW5jZSB0byB0aGUgR2VvbWV0cnlUeXBlIGVudW1cbiAgQElucHV0KCkgbWFwOiBJZ29NYXA7IC8vIE1hcCB0byBkcmF3IG9uXG5cbiAgQElucHV0KClcbiAgZ2V0IHN0b3JlcygpOiBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PltdIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmVzO1xuICB9XG4gIHNldCBzdG9yZXModmFsdWU6IEZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+W10pIHtcbiAgICB0aGlzLl9zdG9yZXMgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9zdG9yZXM6IEZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+W10gPSBbXTtcblxuICBASW5wdXQoKVxuICBnZXQgZHJhd0NvbnRyb2xzKCk6IFtzdHJpbmcsIERyYXdDb250cm9sXVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZHJhd0NvbnRyb2xzO1xuICB9XG4gIHNldCBkcmF3Q29udHJvbHModmFsdWU6IFtzdHJpbmcsIERyYXdDb250cm9sXVtdKSB7XG4gICAgdGhpcy5fZHJhd0NvbnRyb2xzID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfZHJhd0NvbnRyb2xzID0gW107XG5cbiAgQElucHV0KClcbiAgZ2V0IGFjdGl2ZURyYXdpbmdMYXllcigpOiBWZWN0b3JMYXllciB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZURyYXdpbmdMYXllcjtcbiAgfVxuICBzZXQgYWN0aXZlRHJhd2luZ0xheWVyKHZhbHVlOiBWZWN0b3JMYXllcikge1xuICAgIHRoaXMuX2FjdGl2ZURyYXdpbmdMYXllciA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2FjdGl2ZURyYXdpbmdMYXllcjogVmVjdG9yTGF5ZXI7XG5cbiAgQE91dHB1dCgpIGFjdGl2ZUxheWVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxWZWN0b3JMYXllcj4oKTtcbiAgQE91dHB1dCgpIGRyYXdDb250cm9sc0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxbc3RyaW5nLCBEcmF3Q29udHJvbF1bXT4oKTtcbiAgQE91dHB1dCgpIGxheWVyc0lERXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAT3V0cHV0KCkgZmlsbENvbG9yOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBzdHJva2VDb2xvcjogc3RyaW5nO1xuICBAT3V0cHV0KCkgc3Ryb2tlV2lkdGg6IG51bWJlcjtcblxuICBAT3V0cHV0KCkgZm9udFNpemU6IHN0cmluZztcbiAgQE91dHB1dCgpIGZvbnRTdHlsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBhY3RpdmVTdG9yZTogRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz47XG4gIHByaXZhdGUgbGF5ZXJDb3VudGVySUQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBkcmF3JDogQmVoYXZpb3JTdWJqZWN0PERyYXc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7IC8vIE9ic2VydmFibGUgb2YgZHJhd1xuICBwcml2YXRlIGFjdGl2ZURyYXdpbmdMYXllclNvdXJjZSA9IG5ldyBPbFZlY3RvclNvdXJjZSgpO1xuICBwcml2YXRlIGFjdGl2ZURyYXdDb250cm9sOiBEcmF3Q29udHJvbDtcbiAgcHJpdmF0ZSBkcmF3RW5kJCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkcmF3U2VsZWN0JCQ6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHNlbGVjdGVkRmVhdHVyZXMkOiBCZWhhdmlvclN1YmplY3Q8RmVhdHVyZVdpdGhEcmF3W10+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgcHVibGljIGZpbGxGb3JtOiBzdHJpbmc7XG4gIHB1YmxpYyBzdHJva2VGb3JtOiBzdHJpbmc7XG4gIHB1YmxpYyBkcmF3Q29udHJvbElzRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgZHJhd0NvbnRyb2xJc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbGFiZWxzQXJlU2hvd246IGJvb2xlYW47XG4gIHB1YmxpYyBmcmVlaGFuZE1vZGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zJCQ6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgcHVibGljIHBvc2l0aW9uOiBzdHJpbmcgPSAnYm90dG9tJztcbiAgcHVibGljIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIHB1YmxpYyBpY29uczogQXJyYXk8c3RyaW5nPjtcbiAgcHVibGljIGljb246IHN0cmluZztcblxuICBwdWJsaWMgcmFkaXVzRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKDEwMDApO1xuICBwdWJsaWMgbWVhc3VyZVVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0ID0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzO1xuICBwdWJsaWMgcmFkaXVzRm9ybUNvbnRyb2xDaGFuZ2UkJDogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwdWJsaWMgcHJlZGVmaW5lZFJhZGl1cyQ6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICB1bmRlZmluZWRcbiAgKTtcbiAgcHVibGljIHJhZGl1c0RyYXdFbmQkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgdW5kZWZpbmVkXG4gICk7XG5cbiAgLyoqXG4gICAqIEF2YWlsYWJsZSBtZWFzdXJlIHVuaXRzIGZvciB0aGUgbWVhc3VyZSB0eXBlIGdpdmVuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IG1lYXN1cmVVbml0cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnMsIE1lYXN1cmVMZW5ndGhVbml0LktpbG9tZXRlcnNdO1xuICB9XG4gIHByaXZhdGUgbnVtYmVyT2ZEcmF3aW5nczogbnVtYmVyO1xuICBwdWJsaWMgaXNDcmVhdGluZ05ld0xheWVyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY3Vyckdlb21ldHJ5VHlwZSA9IHRoaXMuZ2VvbWV0cnlUeXBlLlBvaW50IGFzIGFueTtcblxuICBAVmlld0NoaWxkKCdzZWxlY3RlZExheWVyJykgc2VsZWN0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZHJhd1N0eWxlU2VydmljZTogRHJhd1N0eWxlU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgZHJhd0ljb25TZXJ2aWNlOiBEcmF3SWNvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy50YWJsZVRlbXBsYXRlID0ge1xuICAgICAgc2VsZWN0aW9uOiB0cnVlLFxuICAgICAgc2VsZWN0TWFueTogdHJ1ZSxcbiAgICAgIHNlbGVjdGlvbkNoZWNrYm94OiB0cnVlLFxuICAgICAgc29ydDogdHJ1ZSxcbiAgICAgIGZpeGVkSGVhZGVyOiB0cnVlLFxuICAgICAgdGFibGVIZWlnaHQ6ICdhdXRvJyxcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdEcmF3aW5nJyxcbiAgICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZHJhdy5sYWJlbHMnKSxcbiAgICAgICAgICB2YWx1ZUFjY2Vzc29yOiAoZmVhdHVyZTogRmVhdHVyZVdpdGhEcmF3KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZmVhdHVyZS5wcm9wZXJ0aWVzLmRyYXc7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0VkaXRpb24nLFxuICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZUFjY2Vzc29yOiAoZmVhdHVyZTogRmVhdHVyZVdpdGhEcmF3KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZWRpdE1vZGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGljb246ICdlZGl0JyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVkaXRMYWJlbERyYXdpbmcoZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdHlsZTogJ21hdC1pY29uLWJ1dHRvbidcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSBhcyBFbnRpdHlUYWJsZUJ1dHRvbltdO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVuZGVyZXI6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuQnV0dG9uR3JvdXBcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gICAgdGhpcy5idWlsZEZvcm0oKTtcbiAgICB0aGlzLmZpbGxDb2xvciA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRGaWxsQ29sb3IoKTtcbiAgICB0aGlzLnN0cm9rZUNvbG9yID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldFN0cm9rZUNvbG9yKCk7XG4gICAgdGhpcy5zdHJva2VXaWR0aCA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRTdHJva2VXaWR0aCgpO1xuICAgIHRoaXMubGFiZWxzQXJlU2hvd24gPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0TGFiZWxzQXJlU2hvd24oKTtcbiAgICB0aGlzLmljb25zID0gdGhpcy5kcmF3SWNvblNlcnZpY2UuZ2V0SWNvbnMoKTtcbiAgICB0aGlzLmljb24gPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0SWNvbigpO1xuXG4gICAgdGhpcy5mb250U2l6ZSA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRGb250U2l6ZSgpO1xuICAgIHRoaXMuZm9udFN0eWxlID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEZvbnRTdHlsZSgpO1xuICB9XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RvcmUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGVudGl0aWVzIGFuZCBjcmVhdGUgdGhlIERyYXcgY29udHJvbFxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuc3RvcmVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZSA9IG5ldyBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PihbXSwge1xuICAgICAgICBtYXA6IHRoaXMubWFwXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW5pdFN0b3JlKCk7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdGhpcy5jcmVhdGVEcmF3Q29udHJvbChcbiAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IsXG4gICAgICAgIHRoaXMuc3Ryb2tlV2lkdGhcbiAgICAgICk7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnNldEdlb21ldHJ5VHlwZSh0aGlzLmdlb21ldHJ5VHlwZS5Qb2ludCBhcyBhbnkpO1xuICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICAgICAgdGhpcy5zdG9yZXMucHVzaCh0aGlzLmFjdGl2ZVN0b3JlKTtcbiAgICAgIHRoaXMuZHJhd0NvbnRyb2xzLnB1c2goW1xuICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZCxcbiAgICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbFxuICAgICAgXSk7XG4gICAgICB0aGlzLmRyYXdDb250cm9sc0V2ZW50LmVtaXQodGhpcy5kcmF3Q29udHJvbHMpO1xuICAgICAgdGhpcy5sYXllcnNJREV2ZW50LmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWQpO1xuICAgICAgdGhpcy5vbkxheWVyQ2hhbmdlKHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZSA9IHRoaXMuc3RvcmVzLmZpbmQoXG4gICAgICAgIChzdG9yZSkgPT4gc3RvcmUubGF5ZXIuaWQgPT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkXG4gICAgICApO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbCA9IHRoaXMuZHJhd0NvbnRyb2xzLmZpbmQoXG4gICAgICAgIChkYykgPT4gZGNbMF0gPT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkXG4gICAgICApWzFdO1xuICAgICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgICAgIHRoaXMuYWxsTGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgIGlmIChsYXllci5pZCAhPT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWQpIHtcbiAgICAgICAgICBsYXllci5vcGFjaXR5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RvcmUgPSB0aGlzLnN0b3Jlcy5maW5kKChzKSA9PiBzLmxheWVyLmlkID09PSBsYXllci5pZCk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zJCQucHVzaChcbiAgICAgICAgICBzdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgICAgIC5tYW55QnkkKChyZWNvcmQ6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcbiAgICAgICAgICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQpID0+IHtcbiAgICAgICAgICAgICAgICByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICAgICAgc3RvcmUuc3RhdGVWaWV3XG4gICAgICAgICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBza2lwKDEpIC8vIFNraXAgaW5pdGlhbCBlbWlzc2lvblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz5bXSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLm5leHQoXG4gICAgICAgICAgICAgICAgcmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmVudGl0eSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zJCQucHVzaChcbiAgICAgICAgICBzdG9yZS5jb3VudCQuc3Vic2NyaWJlKChjbnQpID0+IHtcbiAgICAgICAgICAgIGNudCA+PSAxXG4gICAgICAgICAgICAgID8gKHRoaXMuYWN0aXZlU3RvcmUubGF5ZXIub3B0aW9ucy5zaG93SW5MYXllckxpc3QgPSB0cnVlKVxuICAgICAgICAgICAgICA6ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gZmFsc2UpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMub25MYXllckNoYW5nZSh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gICAgfVxuXG4gICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbENoYW5nZSQkID1cbiAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuaXNwcmVkZWZpbmVkUmFkaXVzJC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VSYWRpdXModmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGRyYXdpbmcgbGF5ZXIgYW5kIHRoZSBpbnRlcmFjdGlvbnNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmFsbExheWVycy5mb3JFYWNoKChsYXllcikgPT4gKGxheWVyLm9wYWNpdHkgPSAxKSk7XG4gICAgdGhpcy5hY3RpdmVTdG9yZS5zdGF0ZS51cGRhdGVBbGwoeyBzZWxlY3RlZDogZmFsc2UgfSk7XG4gICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5tYXAoKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5yYWRpdXNGb3JtQ29udHJvbENoYW5nZSQkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgRHJhdyBDb250cm9sXG4gICAqIEBwYXJhbSBmaWxsQ29sb3IgdGhlIGZpbGwgY29sb3JcbiAgICogQHBhcmFtIHN0cm9rZUNvbG9yIHRoZSBzdHJva2UgY29sb3JcbiAgICogQHBhcmFtIHN0cm9rZVdpZHRoIHRoZSBzdHJva2Ugd2lkdGhcbiAgICogQHJldHVybnMgYSBEcmF3IENvbnRyb2xcbiAgICovXG4gIGNyZWF0ZURyYXdDb250cm9sKFxuICAgIGZpbGxDb2xvcj86IHN0cmluZyxcbiAgICBzdHJva2VDb2xvcj86IHN0cmluZyxcbiAgICBzdHJva2VXaWR0aD86IG51bWJlclxuICApIHtcbiAgICBjb25zdCBhY3RpdmVEcmF3Q29udHJvbCA9IG5ldyBEcmF3Q29udHJvbCh7XG4gICAgICBnZW9tZXRyeVR5cGU6IHVuZGVmaW5lZCxcbiAgICAgIGRyYXdpbmdMYXllclNvdXJjZTogdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UsXG4gICAgICBkcmF3aW5nTGF5ZXJTdHlsZTogbmV3IE9sU3R5bGUuU3R5bGUoe30pLFxuICAgICAgaW50ZXJhY3Rpb25TdHlsZTogY3JlYXRlSW50ZXJhY3Rpb25TdHlsZShcbiAgICAgICAgZmlsbENvbG9yLFxuICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgc3Ryb2tlV2lkdGhcbiAgICAgIClcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aXZlRHJhd0NvbnRyb2w7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgaW5pdGlhbGl6YXRpb24sIGluY2x1ZGluZyBkcmF3aW5nIGxheWVyIGNyZWF0aW9uXG4gICAqL1xuXG4gIHByaXZhdGUgaW5pdFN0b3JlKG5ld1RpdGxlPzogc3RyaW5nLCBpc05ld0xheWVyPzogYm9vbGVhbikge1xuICAgIHRoaXMuY3JlYXRlTGF5ZXIobmV3VGl0bGUsIGlzTmV3TGF5ZXIpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLnN0YXRlVmlld1xuICAgICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PikgPT4ge1xuICAgICAgICAgIHJldHVybiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHNraXAoMSkgLy8gU2tpcCBpbml0aWFsIGVtaXNzaW9uXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVjb3JkczogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz5bXSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQubmV4dChyZWNvcmRzLm1hcCgocmVjb3JkKSA9PiByZWNvcmQuZW50aXR5KSk7XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLmNvdW50JC5zdWJzY3JpYmUoKGNudCkgPT4ge1xuICAgICAgICBjbnQgPj0gMVxuICAgICAgICAgID8gKHRoaXMuYWN0aXZlU3RvcmUubGF5ZXIub3B0aW9ucy5zaG93SW5MYXllckxpc3QgPSB0cnVlKVxuICAgICAgICAgIDogKHRoaXMuYWN0aXZlU3RvcmUubGF5ZXIub3B0aW9ucy5zaG93SW5MYXllckxpc3QgPSBmYWxzZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiB0aGUgc3R5bGUgbW9kYWwgZGlhbG9nIGJveFxuICAgKi9cbiAgb3BlblN0eWxlTW9kYWxEaWFsb2coKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBvcGVuIHRoZSBkaWFsb2cgYm94IHVzZWQgdG8gc3R5bGUgZmVhdHVyZXNcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU3R5bGVNb2RhbERyYXdpbmdDb21wb25lbnQsIHtcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGZlYXR1cmVzOiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLmdldFZhbHVlKCksXG4gICAgICAgICAgaWNvbnM6IHRoaXMuaWNvbnMsXG4gICAgICAgICAgaWNvbjogdGhpcy5pY29uXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICAvLyB3aGVuIGRpYWxvZyBib3ggaXMgY2xvc2VkLCBnZXQgbGFiZWwgYW5kIHNldCBpdCB0byBnZW9tZXRyeVxuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBTdHlsZU1vZGFsRGF0YSkgPT4ge1xuICAgICAgICAvLyBjaGVja3MgaWYgdGhlIHVzZXIgY2xpY2tlZCBva1xuICAgICAgICBpZiAoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm1GbGFnKSB7XG4gICAgICAgICAgdGhpcy5vbkZvbnRDaGFuZ2UodGhpcy5sYWJlbHNBcmVTaG93biwgZGF0YS5mb250U2l6ZSwgZGF0YS5mb250U3R5bGUpO1xuICAgICAgICAgIHRoaXMub25Db2xvckNoYW5nZShcbiAgICAgICAgICAgIHRoaXMubGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgICB0aGlzLmljb24gPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhLmZpbGxDb2xvcixcbiAgICAgICAgICAgIGRhdGEuc3Ryb2tlQ29sb3JcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMub25PZmZzZXRMYWJlbENoYW5nZShcbiAgICAgICAgICAgIHRoaXMubGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgICBkYXRhLm9mZnNldFgsXG4gICAgICAgICAgICBkYXRhLm9mZnNldFlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBkaWFsb2cgYm94IHRvIGVudGVyIGxhYmVsIGFuZCBkbyBzb21ldGhpbmdcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgZ2VvbWV0cnkgYXQgZHJhdyBlbmQgb3Igc2VsZWN0ZWQgZ2VvbWV0cnlcbiAgICogQHBhcmFtIGRyYXdFbmQgZXZlbnQgZmlyZWQgYXQgZHJhd0VuZD9cbiAgICovXG4gIHByaXZhdGUgb3BlbkRyYXdEaWFsb2cob2xHZW9tZXRyeSwgaXNEcmF3RW5kOiBib29sZWFuKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBvcGVuIHRoZSBkaWFsb2cgYm94IHVzZWQgdG8gZW50ZXIgbGFiZWxcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRHJhd1BvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIGRhdGE6IHsgb2xHZW9tZXRyeTogb2xHZW9tZXRyeSwgbWFwOiB0aGlzLm1hcCB9XG4gICAgICB9KTtcblxuICAgICAgLy8gd2hlbiBkaWFsb2cgYm94IGlzIGNsb3NlZCwgZ2V0IGxhYmVsIGFuZCBzZXQgaXQgdG8gZ2VvbWV0cnlcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIC8vIGNoZWNrcyBpZiB0aGUgdXNlciBjbGlja2VkIG9rXG4gICAgICAgIGlmIChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUZsYWcpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIHJlc3VsdC5sYWJlbCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVMYWJlbFR5cGUoXG4gICAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmxhYmVsRmxhZ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy51cGRhdGVNZWFzdXJlVW5pdChvbEdlb21ldHJ5LCByZXN1bHQubWVhc3VyZVVuaXQpO1xuXG4gICAgICAgICAgaWYgKCEob2xHZW9tZXRyeSBpbnN0YW5jZW9mIE9sRmVhdHVyZSkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEdlb21ldHJ5LCAnMTUnLCBGb250VHlwZS5BcmlhbCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihcbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgICAgJ3JnYmEoMjU1LDI1NSwyNTUsMC40KScsXG4gICAgICAgICAgICAgICdyZ2JhKDE0Myw3LDcsMSknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQoXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbFBvaW50ID8gLTE1IDogMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpc0RyYXdFbmRcbiAgICAgICAgICAgID8gdGhpcy5vbkRyYXdFbmQob2xHZW9tZXRyeSlcbiAgICAgICAgICAgIDogdGhpcy5vblNlbGVjdERyYXcob2xHZW9tZXRyeSwgcmVzdWx0LmxhYmVsLCBbXG4gICAgICAgICAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmxhYmVsRmxhZyxcbiAgICAgICAgICAgICAgICByZXN1bHQubWVhc3VyZVVuaXRcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVIZWlnaHRUYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRlbGV0ZXMgdGhlIGZlYXR1cmVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2VcbiAgICAgICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgICAgICAuZm9yRWFjaCgoZHJhd2luZ0xheWVyRmVhdHVyZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBnZW9tZXRyeSA9IGRyYXdpbmdMYXllckZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XG4gICAgICAgICAgICAgIGlmIChvbEdlb21ldHJ5ID09PSBnZW9tZXRyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlLnJlbW92ZUZlYXR1cmUoXG4gICAgICAgICAgICAgICAgICBkcmF3aW5nTGF5ZXJGZWF0dXJlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDI1MCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGRyYXcgc291cmNlIGFuZCB0cmFjayB0aGUgZ2VvbWV0cnkgYmVpbmcgZHJhd1xuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSBPbCBsaW5lc3RyaW5nIG9yIHBvbHlnb25cbiAgICovXG4gIHByaXZhdGUgb25EcmF3RW5kKG9sR2VvbWV0cnk6IE9sR2VvbWV0cnksIHJhZGl1cz86IG51bWJlcikge1xuICAgIHRoaXMuYWRkRmVhdHVyZVRvU3RvcmUob2xHZW9tZXRyeSwgcmFkaXVzKTtcbiAgICB0aGlzLmNsZWFyTGFiZWxzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUubGF5ZXIub2wuZ2V0U291cmNlKCkucmVmcmVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1vZGlmeURyYXcob2xHZW9tZXRyeSkge1xuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5hY3RpdmVTdG9yZS5hbGwoKTtcblxuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5SWQgPSBlbnRpdHkucHJvcGVydGllcy5pZDtcbiAgICAgIGNvbnN0IG9sR2VvbWV0cnlJZCA9IG9sR2VvbWV0cnkub2xfdWlkO1xuXG4gICAgICBpZiAoZW50aXR5SWQgPT09IG9sR2VvbWV0cnlJZCkge1xuICAgICAgICBpZiAoZW50aXR5LnByb3BlcnRpZXMubGFiZWxUeXBlID09PSBMYWJlbFR5cGUuQ29vcmRpbmF0ZXMpIHtcbiAgICAgICAgICBsZXQgbG9uZ0xhdCA9IEREdG9ETVMoXG4gICAgICAgICAgICBbZW50aXR5LnByb3BlcnRpZXMubG9uZ2l0dWRlLCBlbnRpdHkucHJvcGVydGllcy5sYXRpdHVkZV0sXG4gICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdCBhcyBDb29yZGluYXRlc1VuaXRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkoXG4gICAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgICAgJygnICsgbG9uZ0xhdFsxXSArICcsICcgKyBsb25nTGF0WzBdICsgJyknXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkucHJvcGVydGllcy5sYWJlbFR5cGUgPT09IExhYmVsVHlwZS5MZW5ndGgpIHtcbiAgICAgICAgICBpZiAob2xHZW9tZXRyeSBpbnN0YW5jZW9mIE9sQ2lyY2xlKSB7XG4gICAgICAgICAgICBsZXQgY2lyY3VsYXJQb2x5Z29uID0gZnJvbUNpcmNsZShvbEdlb21ldHJ5LCAxMDAwMCk7XG4gICAgICAgICAgICBjb25zdCByYWRpdXMgPSBtZXRlcnNUb1VuaXQoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0UmFkaXVzKGNpcmN1bGFyUG9seWdvbiksXG4gICAgICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLm1lYXN1cmVVbml0IGFzIE1lYXN1cmVMZW5ndGhVbml0XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgdW5pdCA9XG4gICAgICAgICAgICAgIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uW2VudGl0eS5wcm9wZXJ0aWVzLm1lYXN1cmVVbml0XTtcbiAgICAgICAgICAgIGNvbnN0IHJhZGl1c0xhYmVsID1cbiAgICAgICAgICAgICAgJ1I6ICcgKyByYWRpdXMudG9GaXhlZCgyKS50b1N0cmluZygpICsgJyAnICsgdW5pdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgcmFkaXVzTGFiZWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgb2xHZW9tZXRyeUxlbmd0aCA9IG1lYXN1cmVPbEdlb21ldHJ5TGVuZ3RoKFxuICAgICAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBtZWFzdXJlVW5pdDogYW55O1xuICAgICAgICAgICAgY29uc3QgdGVtcDogTWVhc3VyZUxlbmd0aFVuaXQgPSBlbnRpdHkucHJvcGVydGllc1xuICAgICAgICAgICAgICAubWVhc3VyZVVuaXQgYXMgTWVhc3VyZUxlbmd0aFVuaXQ7XG4gICAgICAgICAgICBtZWFzdXJlVW5pdCA9XG4gICAgICAgICAgICAgIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uW2VudGl0eS5wcm9wZXJ0aWVzLm1lYXN1cmVVbml0XTtcbiAgICAgICAgICAgIG9sR2VvbWV0cnlMZW5ndGggPSBtZXRlcnNUb1VuaXQob2xHZW9tZXRyeUxlbmd0aCwgdGVtcCk7XG4gICAgICAgICAgICBsZXQgbGVuZ3RoTGFiZWwgPVxuICAgICAgICAgICAgICBvbEdlb21ldHJ5IGluc3RhbmNlb2YgUG9seWdvblxuICAgICAgICAgICAgICAgID8gJ1A6ICcgK1xuICAgICAgICAgICAgICAgICAgb2xHZW9tZXRyeUxlbmd0aC50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICAgIG1lYXN1cmVVbml0XG4gICAgICAgICAgICAgICAgOiBvbEdlb21ldHJ5TGVuZ3RoLnRvRml4ZWQoMikudG9TdHJpbmcoKSArICcgJyArIG1lYXN1cmVVbml0O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsZW5ndGhMYWJlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVudGl0eS5wcm9wZXJ0aWVzLmxhYmVsVHlwZSA9PT0gTGFiZWxUeXBlLkFyZWEpIHtcbiAgICAgICAgICBpZiAob2xHZW9tZXRyeSBpbnN0YW5jZW9mIE9sQ2lyY2xlKSB7XG4gICAgICAgICAgICBsZXQgY2lyY3VsYXJQb2x5Z29uID0gZnJvbUNpcmNsZShvbEdlb21ldHJ5LCAxMDAwMCk7XG4gICAgICAgICAgICBsZXQgY2lyY2xlQXJlYSA9IG1lYXN1cmVPbEdlb21ldHJ5QXJlYShcbiAgICAgICAgICAgICAgY2lyY3VsYXJQb2x5Z29uLFxuICAgICAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlQXJlYVVuaXRBYmJyZXZpYXRpb25bZW50aXR5LnByb3BlcnRpZXMubWVhc3VyZVVuaXRdO1xuICAgICAgICAgICAgY29uc3QgdGVtcDogTWVhc3VyZUFyZWFVbml0ID0gZW50aXR5LnByb3BlcnRpZXNcbiAgICAgICAgICAgICAgLm1lYXN1cmVVbml0IGFzIE1lYXN1cmVBcmVhVW5pdDtcbiAgICAgICAgICAgIGNpcmNsZUFyZWEgPSBzcXVhcmVNZXRlcnNUb1VuaXQoY2lyY2xlQXJlYSwgdGVtcCk7XG4gICAgICAgICAgICBjb25zdCBhcmVhTGFiZWwgPSBjaXJjbGVBcmVhLnRvRml4ZWQoMikudG9TdHJpbmcoKSArICcgJyArIHVuaXQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGFyZWFMYWJlbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBvbEdlb21ldHJ5QXJlYSA9IG1lYXN1cmVPbEdlb21ldHJ5QXJlYShcbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgbWVhc3VyZVVuaXQ6IGFueTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXA6IE1lYXN1cmVBcmVhVW5pdCA9IGVudGl0eS5wcm9wZXJ0aWVzXG4gICAgICAgICAgICAgIC5tZWFzdXJlVW5pdCBhcyBNZWFzdXJlQXJlYVVuaXQ7XG4gICAgICAgICAgICBtZWFzdXJlVW5pdCA9XG4gICAgICAgICAgICAgIE1lYXN1cmVBcmVhVW5pdEFiYnJldmlhdGlvbltlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdF07XG4gICAgICAgICAgICBvbEdlb21ldHJ5QXJlYSA9IHNxdWFyZU1ldGVyc1RvVW5pdChvbEdlb21ldHJ5QXJlYSwgdGVtcCk7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGhMYWJlbCA9XG4gICAgICAgICAgICAgIG9sR2VvbWV0cnlBcmVhLnRvRml4ZWQoMikudG9TdHJpbmcoKSArICcgJyArIG1lYXN1cmVVbml0O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsZW5ndGhMYWJlbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgZW50aXR5LnByb3BlcnRpZXMuZHJhdyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsVHlwZShvbEdlb21ldHJ5LCBlbnRpdHkucHJvcGVydGllcy5sYWJlbFR5cGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1lYXN1cmVVbml0KG9sR2VvbWV0cnksIGVudGl0eS5wcm9wZXJ0aWVzLm1lYXN1cmVVbml0KTtcbiAgICAgICAgdGhpcy51cGRhdGVGb250U2l6ZUFuZFN0eWxlKFxuICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMuZm9udFN0eWxlLnNwbGl0KCcgJylbMF0ucmVwbGFjZSgncHgnLCAnJyksXG4gICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMuZm9udFN0eWxlLnN1YnN0cmluZyhcbiAgICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5pbmRleE9mKCcgJykgKyAxXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihcbiAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5maWxsLFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5zdHJva2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQoXG4gICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRYLFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXBsYWNlRmVhdHVyZUluU3RvcmUoZW50aXR5LCBvbEdlb21ldHJ5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25TZWxlY3REcmF3KFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIGxhYmVsOiBzdHJpbmcsXG4gICAgbGFiZWxUeXBlQW5kVW5pdD9cbiAgKSB7XG4gICAgY29uc3QgZW50aXRpZXMgPSB0aGlzLmFjdGl2ZVN0b3JlLmFsbCgpO1xuXG4gICAgY29uc3Qgb2xHZW9tZXRyeSA9IG9sRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcbiAgICBvbEdlb21ldHJ5Lm9sX3VpZCA9IG9sRmVhdHVyZS5nZXQoJ2lkJyk7XG5cbiAgICBjb25zdCBvbEdlb21ldHJ5Q29vcmRpbmF0ZXMgPSBKU09OLnN0cmluZ2lmeShcbiAgICAgIG9sR2VvbWV0cnkuZ2V0Q29vcmRpbmF0ZXMoKVswXVxuICAgICk7XG5cbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eUNvb3JkaW5hdGVzID0gSlNPTi5zdHJpbmdpZnkoZW50aXR5Lmdlb21ldHJ5LmNvb3JkaW5hdGVzWzBdKTtcbiAgICAgIGlmIChvbEdlb21ldHJ5Q29vcmRpbmF0ZXMgPT09IGVudGl0eUNvb3JkaW5hdGVzKSB7XG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gb2xGZWF0dXJlXG4gICAgICAgICAgLmdldCgnZm9udFN0eWxlJylcbiAgICAgICAgICAuc3BsaXQoJyAnKVswXVxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKTtcbiAgICAgICAgY29uc3QgZm9udFN0eWxlID0gb2xGZWF0dXJlXG4gICAgICAgICAgLmdldCgnZm9udFN0eWxlJylcbiAgICAgICAgICAuc3Vic3RyaW5nKG9sRmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLmluZGV4T2YoJyAnKSArIDEpO1xuXG4gICAgICAgIGNvbnN0IGZpbGxDb2xvciA9IG9sRmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLmZpbGw7XG4gICAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gb2xGZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlO1xuXG4gICAgICAgIGNvbnN0IG9mZnNldFggPSBvbEZlYXR1cmUuZ2V0KCdvZmZzZXRYJyk7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSBvbEZlYXR1cmUuZ2V0KCdvZmZzZXRZJyk7XG5cbiAgICAgICAgY29uc3QgcmFkOiBudW1iZXIgPSBlbnRpdHkucHJvcGVydGllcy5yYWRcbiAgICAgICAgICA/IGVudGl0eS5wcm9wZXJ0aWVzLnJhZFxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGxhYmVsKTtcbiAgICAgICAgdGhpcy51cGRhdGVGb250U2l6ZUFuZFN0eWxlKG9sR2VvbWV0cnksIGZvbnRTaXplLCBmb250U3R5bGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihvbEdlb21ldHJ5LCBmaWxsQ29sb3IsIHN0cm9rZUNvbG9yKTtcbiAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQob2xHZW9tZXRyeSwgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgIHRoaXMudXBkYXRlTGFiZWxUeXBlKG9sR2VvbWV0cnksIGxhYmVsVHlwZUFuZFVuaXRbMF0pO1xuICAgICAgICB0aGlzLnVwZGF0ZU1lYXN1cmVVbml0KG9sR2VvbWV0cnksIGxhYmVsVHlwZUFuZFVuaXRbMV0pO1xuICAgICAgICB0aGlzLnJlcGxhY2VGZWF0dXJlSW5TdG9yZShlbnRpdHksIG9sR2VvbWV0cnksIHJhZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZmVhdHVyZSB3aXRoIGRyYXcgbGFiZWwgdG8gdGhlIHN0b3JlLiBUaGUgbG9hZGluZyBzdHJhZ2VneSBvZiB0aGUgc3RvcmVcbiAgICogd2lsbCB0cmlnZ2VyIGFuZCBhZGQgdGhlIGZlYXR1cmUgdG8gdGhlIG1hcC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGFkZEZlYXR1cmVUb1N0b3JlKFxuICAgIG9sR2VvbWV0cnksXG4gICAgcmFkaXVzPzogbnVtYmVyLFxuICAgIGZlYXR1cmU/OiBGZWF0dXJlV2l0aERyYXdcbiAgKSB7XG4gICAgbGV0IHJhZDogbnVtYmVyO1xuICAgIGxldCBjZW50ZXI0MzI2OiBBcnJheTxudW1iZXI+O1xuICAgIGxldCBwb2ludDQzMjY6IEFycmF5PG51bWJlcj47XG4gICAgbGV0IGxvbjQzMjY6IG51bWJlcjtcbiAgICBsZXQgbGF0NDMyNjogbnVtYmVyO1xuXG4gICAgY29uc3QgZmVhdHVyZUlkID0gZmVhdHVyZSA/IGZlYXR1cmUucHJvcGVydGllcy5pZCA6IG9sR2VvbWV0cnkub2xfdWlkO1xuICAgIGNvbnN0IHByb2plY3Rpb24gPSB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpO1xuXG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgT2xHZW9KU09OKCkud3JpdGVHZW9tZXRyeU9iamVjdChvbEdlb21ldHJ5LCB7XG4gICAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvbixcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiBwcm9qZWN0aW9uXG4gICAgfSkgYXMgYW55O1xuXG4gICAgaWYgKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbENpcmNsZSB8fCByYWRpdXMpIHtcbiAgICAgIGlmIChyYWRpdXMpIHtcbiAgICAgICAgcmFkID0gcmFkaXVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2VvbWV0cnkudHlwZSA9ICdQb2ludCc7XG4gICAgICAgIGdlb21ldHJ5LmNvb3JkaW5hdGVzID0gb2xHZW9tZXRyeS5nZXRDZW50ZXIoKTtcbiAgICAgICAgY29uc3QgZXh0ZW50NDMyNiA9IHRyYW5zZm9ybShcbiAgICAgICAgICBbXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzJdLFxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVszXVxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgICApO1xuICAgICAgICBjZW50ZXI0MzI2ID0gdHJhbnNmb3JtKFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIG9sR2VvbWV0cnkuZ2V0RmxhdENvb3JkaW5hdGVzKClbMF0sXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzFdXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcm9qZWN0aW9uLFxuICAgICAgICAgICdFUFNHOjQzMjYnXG4gICAgICAgICk7XG4gICAgICAgIGxvbjQzMjYgPSBjZW50ZXI0MzI2WzBdO1xuICAgICAgICBsYXQ0MzI2ID0gY2VudGVyNDMyNlsxXTtcbiAgICAgICAgcmFkID0gZ2V0RGlzdGFuY2UoY2VudGVyNDMyNiwgZXh0ZW50NDMyNik7XG4gICAgICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUoTWF0aC5yb3VuZChyYWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wucmFkaXVzRHJhd0VuZCQuZ2V0VmFsdWUoKSkge1xuICAgICAgcmFkID0gdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5yYWRpdXNEcmF3RW5kJC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIGlmIChvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xQb2ludCkge1xuICAgICAgcG9pbnQ0MzI2ID0gdHJhbnNmb3JtKFxuICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpLFxuICAgICAgICBwcm9qZWN0aW9uLFxuICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgKTtcbiAgICAgIGxvbjQzMjYgPSBwb2ludDQzMjZbMF07XG4gICAgICBsYXQ0MzI2ID0gcG9pbnQ0MzI2WzFdO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlU3RvcmUudXBkYXRlKHtcbiAgICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgICBnZW9tZXRyeSxcbiAgICAgIHByb2plY3Rpb246IHByb2plY3Rpb24uZ2V0Q29kZSgpLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZDogZmVhdHVyZUlkLFxuICAgICAgICBkcmF3OiBvbEdlb21ldHJ5LmdldCgnX2xhYmVsJyksXG4gICAgICAgIGxvbmdpdHVkZTogbG9uNDMyNiA/IGxvbjQzMjYgOiBudWxsLFxuICAgICAgICBsYXRpdHVkZTogbGF0NDMyNiA/IGxhdDQzMjYgOiBudWxsLFxuICAgICAgICByYWQ6IHJhZCA/IHJhZCA6IG51bGwsXG4gICAgICAgIGZvbnRTdHlsZTogb2xHZW9tZXRyeS5nZXQoJ2ZvbnRTdHlsZV8nKSxcbiAgICAgICAgZHJhd2luZ1N0eWxlOiB7XG4gICAgICAgICAgZmlsbDogb2xHZW9tZXRyeS5nZXQoJ2ZpbGxDb2xvcl8nKSxcbiAgICAgICAgICBzdHJva2U6IG9sR2VvbWV0cnkuZ2V0KCdzdHJva2VDb2xvcl8nKVxuICAgICAgICB9LFxuICAgICAgICBvZmZzZXRYOiBvbEdlb21ldHJ5LmdldCgnb2Zmc2V0WF8nKSxcbiAgICAgICAgb2Zmc2V0WTogb2xHZW9tZXRyeS5nZXQoJ29mZnNldFlfJyksXG4gICAgICAgIGxhYmVsVHlwZTogb2xHZW9tZXRyeS5nZXQoJ2xhYmVsVHlwZV8nKSxcbiAgICAgICAgbWVhc3VyZVVuaXQ6IG9sR2VvbWV0cnkuZ2V0KCdtZWFzdXJlVW5pdF8nKVxuICAgICAgfSxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgaWQ6IGZlYXR1cmVJZFxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUuc2V0TGF5ZXJFeHRlbnQoKTtcbiAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnByZWRlZmluZWRSYWRpdXMkLm5leHQodW5kZWZpbmVkKTtcbiAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnJhZGl1c0RyYXdFbmQkLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGb3JtKCkge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgZmlsbDogWycnXSxcbiAgICAgIHN0cm9rZTogWycnXVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldHVwTGF5ZXIoaXNOZXdMYXllcj86IGJvb2xlYW4pIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oRHJhd0xheWVyUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGxhYmVsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtRmxhZykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3RvcmUuc3RhdGUudXBkYXRlQWxsKHsgc2VsZWN0ZWQ6IGZhbHNlIH0pO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3RvcmUgPSBuZXcgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz4oW10sIHtcbiAgICAgICAgICAgIG1hcDogdGhpcy5tYXBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZSA9IG5ldyBPbFZlY3RvclNvdXJjZSgpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLm9wYWNpdHkgPSAwO1xuICAgICAgICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgICAgICAgdGhpcy5pbml0U3RvcmUobGFiZWwsIGlzTmV3TGF5ZXIpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wgPSB0aGlzLmNyZWF0ZURyYXdDb250cm9sKFxuICAgICAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgICAgICB0aGlzLnN0cm9rZUNvbG9yLFxuICAgICAgICAgICAgdGhpcy5zdHJva2VXaWR0aFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUodGhpcy5jdXJyR2VvbWV0cnlUeXBlKTtcbiAgICAgICAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XG4gICAgICAgICAgdGhpcy5zdG9yZXMucHVzaCh0aGlzLmFjdGl2ZVN0b3JlKTtcbiAgICAgICAgICB0aGlzLmRyYXdDb250cm9scy5wdXNoKFtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkLFxuICAgICAgICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbFxuICAgICAgICAgIF0pO1xuICAgICAgICAgIHRoaXMuZHJhd0NvbnRyb2xzRXZlbnQuZW1pdCh0aGlzLmRyYXdDb250cm9scyk7XG4gICAgICAgICAgdGhpcy5sYXllcnNJREV2ZW50LmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWQpO1xuICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ05ld0xheWVyID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCF0aGlzLmxhYmVsc0FyZVNob3duKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG9nZ2xlTGFiZWxzKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWN0aXZlTGF5ZXJDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3QudmFsdWUgPSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllcjtcbiAgICAgICAgICB0aGlzLnNlbGVjdC5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDI1MCk7XG4gIH1cblxuICAvLyBIVE1MIHVzZXIgaW50ZXJhY3Rpb25zXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGRvdWJsZS1jbGlja3MgdGhlIHNlbGVjdGVkIGRyYXdpbmdcbiAgICovXG4gIGVkaXRMYWJlbERyYXdpbmcoZmVhdHVyZSkge1xuICAgIGNvbnN0IG9sR2VvbWV0cnlGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICBmZWF0dXJlLFxuICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICApO1xuICAgIHRoaXMub3BlbkRyYXdEaWFsb2cob2xHZW9tZXRyeUZlYXR1cmUsIGZhbHNlKTtcbiAgfVxuXG4gIG9wZW5TaG9yY3V0c0RpYWxvZygpIHtcbiAgICB0aGlzLmRpYWxvZy5vcGVuKERyYXdTaG9yY3V0c0NvbXBvbmVudCk7XG4gIH1cblxuICBkZWxldGVEcmF3aW5ncygpIHtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmRlbGV0ZU1hbnkodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5mb3JFYWNoKChzZWxlY3RlZEZlYXR1cmUpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlXG4gICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgIC5mb3JFYWNoKChkcmF3aW5nTGF5ZXJGZWF0dXJlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBkcmF3aW5nTGF5ZXJGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xuICAgICAgICAgIGlmIChzZWxlY3RlZEZlYXR1cmUucHJvcGVydGllcy5pZCA9PT0gZ2VvbWV0cnkub2xfdWlkKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZS5yZW1vdmVGZWF0dXJlKGRyYXdpbmdMYXllckZlYXR1cmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVIZWlnaHRUYWJsZSgpO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUuc2V0TGF5ZXJFeHRlbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciB0b2dnbGVzIHRoZSBsYWJlbHMgdG9nZ2xlXG4gICAqL1xuICBvblRvZ2dsZUxhYmVscygpIHtcbiAgICB0aGlzLmRyYXdTdHlsZVNlcnZpY2UudG9nZ2xlTGFiZWxzQXJlU2hvd24oKTtcbiAgICB0aGlzLmxhYmVsc0FyZVNob3duID0gIXRoaXMubGFiZWxzQXJlU2hvd247XG4gICAgdGhpcy5pY29uXG4gICAgICA/IHRoaXMuZWxlbWVudFN0eWxlKHRoaXMubGFiZWxzQXJlU2hvd24sIHRydWUpXG4gICAgICA6IHRoaXMuZWxlbWVudFN0eWxlKHRoaXMubGFiZWxzQXJlU2hvd24sIGZhbHNlKTtcbiAgICB0aGlzLmNyZWF0ZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgdG9nZ2xlcyB0aGUgRHJhdyBjb250cm9sIGlzIHRvZ2dsZWRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvblRvZ2dsZURyYXdDb250cm9sKHRvZ2dsZUlzQ2hlY2tlZDogYm9vbGVhbikge1xuICAgIHRvZ2dsZUlzQ2hlY2tlZCA/IHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKSA6IHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gIH1cblxuICBvblRvZ2dsZUZyZWVoYW5kTW9kZShldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuaXNDaXJjbGUoKSAmJiAhZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5pc3ByZWRlZmluZWRSYWRpdXMkLm5leHQodHJ1ZSk7XG4gICAgICB0aGlzLmNoYW5nZVJhZGl1cyh0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRPbEludGVyYWN0aW9uU3R5bGUoXG4gICAgICAgIGNyZWF0ZUludGVyYWN0aW9uU3R5bGUoXG4gICAgICAgICAgdGhpcy5maWxsQ29sb3IsXG4gICAgICAgICAgdGhpcy5zdHJva2VDb2xvcixcbiAgICAgICAgICB0aGlzLnN0cm9rZVdpZHRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmlzcHJlZGVmaW5lZFJhZGl1cyQubmV4dChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuZnJlZWhhbmRNb2RlID0gZXZlbnQuY2hlY2tlZDtcbiAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmZyZWVoYW5kJC5uZXh0KGV2ZW50LmNoZWNrZWQpO1xuICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIC8vIFVzZXIgY2hhbmdlcyBwcm9wZXJ0aWVzIG9mIGEgZHJhd2luZyBlbGVtZW50XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIGN1cnJlbnQgbGF5ZXIgd2l0aCB0aGUgY3VycmVudCBzdG9yZSBhbmQgdGhlIGN1cnJlbnQgbGF5ZXJTb3VyY2VcbiAgICovXG5cbiAgcHVibGljIG9uTGF5ZXJDaGFuZ2UoY3VyckxheWVyPzogVmVjdG9yTGF5ZXIpIHtcbiAgICBpZiAoY3VyckxheWVyKSB7XG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7IHNlbGVjdGVkOiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuaXNDcmVhdGluZ05ld0xheWVyID0gZmFsc2U7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5vcGFjaXR5ID0gMDtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyID0gY3VyckxheWVyO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIub3BhY2l0eSA9IDE7XG4gICAgICB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICAgICAgaWYgKCF0aGlzLmxhYmVsc0FyZVNob3duKSB7XG4gICAgICAgIHRoaXMub25Ub2dnbGVMYWJlbHMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUgPSB0aGlzLnN0b3Jlcy5maW5kKFxuICAgICAgICAoc3RvcmUpID0+IHN0b3JlLmxheWVyLmlkID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wgPSB0aGlzLmRyYXdDb250cm9scy5maW5kKFxuICAgICAgICAoZGMpID0+IGRjWzBdID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZFxuICAgICAgKVsxXTtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlID1cbiAgICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5vbERyYXdpbmdMYXllclNvdXJjZTtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0R2VvbWV0cnlUeXBlKHRoaXMuY3Vyckdlb21ldHJ5VHlwZSk7XG4gICAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0dXBMYXllcih0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVMYXllckNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVMYXllcihuZXdUaXRsZT8sIGlzTmV3TGF5ZXI/KSB7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmFsbExheWVycykge1xuICAgICAgbGV0IG51bWJlcklkID0gTnVtYmVyKGxheWVyLmlkLnJlcGxhY2UoJ2lnby1kcmF3LWxheWVyJywgJycpKTtcbiAgICAgIHRoaXMubGF5ZXJDb3VudGVySUQgPSBNYXRoLm1heChudW1iZXJJZCwgdGhpcy5sYXllckNvdW50ZXJJRCk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgIGlzSWdvSW50ZXJuYWxMYXllcjogdHJ1ZSxcbiAgICAgIGlkOiAnaWdvLWRyYXctbGF5ZXInICsgKyt0aGlzLmxheWVyQ291bnRlcklELFxuICAgICAgdGl0bGU6IGlzTmV3TGF5ZXJcbiAgICAgICAgPyBuZXdUaXRsZVxuICAgICAgICA6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcuZHJhd2luZycpLFxuICAgICAgekluZGV4OiAyMDAsXG4gICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgICAgc3R5bGU6IChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlSW5kaXZpZHVhbEVsZW1lbnRTdHlsZShcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgdGhpcy5sYWJlbHNBcmVTaG93bixcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZm9udFN0eWxlJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLmZpbGwsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLnN0cm9rZSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WCcpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRZJyksXG4gICAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvbixcbiAgICAgICAgICB0aGlzLmljb25cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBzaG93SW5MYXllckxpc3Q6IHRydWUsXG4gICAgICBleHBvcnRhYmxlOiB0cnVlLFxuICAgICAgYnJvd3NhYmxlOiBmYWxzZSxcbiAgICAgIHdvcmtzcGFjZToge1xuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdHJ5QmluZFN0b3JlTGF5ZXIodGhpcy5hY3RpdmVTdG9yZSwgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuXG4gICAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5KFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZSxcbiAgICAgIG5ldyBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3koe1xuICAgICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdHJ5QWRkU2VsZWN0aW9uU3RyYXRlZ3koXG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLFxuICAgICAgbmV3IEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5KHtcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmUsXG4gICAgICAgIG1hbnk6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUuc291cmNlLm9sLm9uKFxuICAgICAgJ3JlbW92ZWZlYXR1cmUnLFxuICAgICAgKGV2ZW50OiBPbFZlY3RvclNvdXJjZUV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBldmVudC5mZWF0dXJlLmdldEdlb21ldHJ5KCk7XG4gICAgICAgIHRoaXMuY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBjb2xvciBpbiBhIGNvbG9yIHBpY2tlclxuICAgKiBAcGFyYW0gbGFiZWxzQXJlU2hvd24gd2hldGVyIHRoZSBsYWJlbHMgYXJlIHNob3duIG9yIG5vdFxuICAgKiBAcGFyYW0gaXNBbkljb24gd2hldGVyIHRoZSBmZWF0dXJlIGlzIGFuIGljb24gb3Igbm90XG4gICAqIEBwYXJhbSBmaWxsQ29sb3Igd2hpY2ggaXMgdGhlIGZpbGxpbmcgY29sb3JcbiAgICogQHBhcmFtIHN0cm9rZUNvbG9yIHdoaWNoIGlzIHRoZSBzdHJva2UgY29sb3JcbiAgICovXG4gIG9uQ29sb3JDaGFuZ2UoXG4gICAgbGFiZWxzQXJlU2hvd246IGJvb2xlYW4sXG4gICAgaXNBbkljb246IGJvb2xlYW4sXG4gICAgZmlsbENvbG9yOiBzdHJpbmcsXG4gICAgc3Ryb2tlQ29sb3I6IHN0cmluZ1xuICApIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwICYmICFpc0FuSWNvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XG4gICAgICAgIGxldCBvbEZlYXR1cmUgPSBmZWF0dXJlVG9PbChcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsbEFuZFN0cm9rZUNvbG9yKG9sRmVhdHVyZSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XG5cbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5hY3RpdmVTdG9yZVxuICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLmZpbGwgPSBvbEZlYXR1cmUuZ2V0KCdmaWxsQ29sb3JfJyk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5zdHJva2UgPSBvbEZlYXR1cmUuZ2V0KCdzdHJva2VDb2xvcl8nKTtcbiAgICAgICAgdGhpcy5hY3RpdmVTdG9yZS51cGRhdGUoZW50aXR5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duLCBpc0FuSWNvbik7XG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGZvbnQgc2l6ZSBvci9hbmQgc3R5bGVcbiAgICogQHBhcmFtIGxhYmVsc0FyZVNob3duIHdoZXRlciB0aGUgbGFiZWxzIGFyZSBzaG93biBvciBub3RcbiAgICogQHBhcmFtIHNpemUgdGhlIHNpemUgb2YgdGhlIGZvbnRcbiAgICogQHBhcmFtIHN0eWxlIHRoZSBzdHlsZSBvZiB0aGUgZm9udFxuICAgKi9cblxuICBvbkZvbnRDaGFuZ2UobGFiZWxzQXJlU2hvd246IGJvb2xlYW4sIHNpemU6IHN0cmluZywgc3R5bGU6IEZvbnRUeXBlKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5mb3JFYWNoKChmZWF0dXJlKSA9PiB7XG4gICAgICAgIGxldCBvbEZlYXR1cmUgPSBmZWF0dXJlVG9PbChcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEZlYXR1cmUsIHNpemUsIHN0eWxlKTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5hY3RpdmVTdG9yZVxuICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMuZm9udFN0eWxlID0gb2xGZWF0dXJlLmdldCgnZm9udFN0eWxlXycpO1xuICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnVwZGF0ZShlbnRpdHkpO1xuICAgICAgICBvbEZlYXR1cmUgPSB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sXG4gICAgICAgICAgLmdldFNvdXJjZSgpXG4gICAgICAgICAgLmdldEZlYXR1cmVzKClcbiAgICAgICAgICAuZmluZCgoZikgPT4gZi5nZXRJZCgpID09PSBlbnRpdHkubWV0YS5pZCk7XG4gICAgICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKHsgZm9udFN0eWxlOiBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUgfSk7XG4gICAgICAgIG9sRmVhdHVyZS5jaGFuZ2VkKCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5mb250U2l6ZSA9IHNpemU7XG4gICAgICB0aGlzLmZvbnRTdHlsZSA9IHN0eWxlO1xuXG4gICAgICB0aGlzLmRyYXdTdHlsZVNlcnZpY2Uuc2V0Rm9udFNpemUoc2l6ZSk7XG4gICAgICB0aGlzLmRyYXdTdHlsZVNlcnZpY2Uuc2V0Rm9udFN0eWxlKHN0eWxlKTtcblxuICAgICAgdGhpcy5lbGVtZW50U3R5bGUobGFiZWxzQXJlU2hvd24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiB0aGUgaG9yaXpvbnRhbC92ZXJ0aWNhbCBvZmZzZXRcbiAgICogQHBhcmFtIGxhYmVsc0FyZVNob3duIHdoZXRlciB0aGUgbGFiZWxzIGFyZSBzaG93biBvciBub3RcbiAgICogQHBhcmFtIG9mZnNldFggaG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIGxhYmVsXG4gICAqIEBwYXJhbSBvZmZzZXRZIHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgbGFiZWxcbiAgICovXG5cbiAgb25PZmZzZXRMYWJlbENoYW5nZShcbiAgICBsYWJlbHNBcmVTaG93bjogYm9vbGVhbixcbiAgICBvZmZzZXRYOiBudW1iZXIsXG4gICAgb2Zmc2V0WTogbnVtYmVyXG4gICkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZU9mZnNldChvbEZlYXR1cmUsIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmFjdGl2ZVN0b3JlXG4gICAgICAgICAgLmFsbCgpXG4gICAgICAgICAgLmZpbmQoKGUpID0+IGUubWV0YS5pZCA9PT0gb2xGZWF0dXJlLmdldElkKCkpO1xuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRYID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WF8nKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WSA9IG9sRmVhdHVyZS5nZXQoJ29mZnNldFlfJyk7XG4gICAgICAgIHRoaXMuYWN0aXZlU3RvcmUudXBkYXRlKGVudGl0eSk7XG4gICAgICAgIG9sRmVhdHVyZSA9IHRoaXMuYWN0aXZlU3RvcmUubGF5ZXIub2xcbiAgICAgICAgICAuZ2V0U291cmNlKClcbiAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAgIC5maW5kKChmKSA9PiBmLmdldElkKCkgPT09IGVudGl0eS5tZXRhLmlkKTtcbiAgICAgICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoe1xuICAgICAgICAgIG9mZnNldFg6IGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFgsXG4gICAgICAgICAgb2Zmc2V0WTogZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WVxuICAgICAgICB9KTtcbiAgICAgICAgb2xGZWF0dXJlLmNoYW5nZWQoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbGVtZW50U3R5bGUobGFiZWxzQXJlU2hvd24pO1xuICAgIH1cbiAgfVxuXG4gIG9uSWNvbkNoYW5nZShldmVudD8pIHtcbiAgICB0aGlzLmljb24gPSBldmVudDtcbiAgICB0aGlzLmRyYXdTdHlsZVNlcnZpY2Uuc2V0SWNvbih0aGlzLmljb24pO1xuICAgIHRoaXMuZWxlbWVudFN0eWxlKHRydWUsIHRoaXMuaWNvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyBnZW9tZXRyeSB0eXBlXG4gICAqIEBwYXJhbSBnZW9tZXRyeVR5cGUgdGhlIGdlb21ldHJ5IHR5cGUgc2VsZWN0ZWQgYnkgdGhlIHVzZXJcbiAgICovXG4gIG9uR2VvbWV0cnlUeXBlQ2hhbmdlKGdlb21ldHJ5VHlwZTogVHlwZSkge1xuICAgIHRoaXMuY3Vyckdlb21ldHJ5VHlwZSA9IGdlb21ldHJ5VHlwZTtcbiAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnNldEdlb21ldHJ5VHlwZShnZW9tZXRyeVR5cGUpO1xuICAgIHRoaXMuZnJlZWhhbmRNb2RlXG4gICAgICA/IHRoaXMub25Ub2dnbGVGcmVlaGFuZE1vZGUoeyBjaGVja2VkOiB0cnVlIH0pXG4gICAgICA6IHRoaXMub25Ub2dnbGVGcmVlaGFuZE1vZGUoeyBjaGVja2VkOiBmYWxzZSB9KTtcbiAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvLyBVcGRhdGVzIHRoZSBwcm9wZXJ0aWVzIG9mIG9sRmVhdHVyZSBpbnB1dHRlZFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxhYmVsIG9mIGEgZ2VvbWV0cnkgd2hlbiBhIGxhYmVsIGlzIGVudGVyZWQgaW4gYSBkaWFsb2cgYm94XG4gICAqIEBwYXJhbSBPbEZlYXR1cmUgdGhlIGZlYXR1cmVcbiAgICogQHBhcmFtIGxhYmVsIHRoZSBsYWJlbFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShPbEZlYXR1cmUsIGxhYmVsOiBzdHJpbmcpIHtcbiAgICBPbEZlYXR1cmUuc2V0UHJvcGVydGllcyhcbiAgICAgIHtcbiAgICAgICAgX2xhYmVsOiBsYWJlbFxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb250U2l6ZUFuZFN0eWxlKFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIGZvbnRTaXplOiBzdHJpbmcsXG4gICAgZm9udFN0eWxlOiBzdHJpbmdcbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIGZvbnRTdHlsZV86IGAke2ZvbnRTaXplfXB4ICR7Zm9udFN0eWxlfWBcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsbEFuZFN0cm9rZUNvbG9yKFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIGZpbGxDb2xvcjogc3RyaW5nLFxuICAgIHN0cm9rZUNvbG9yOiBzdHJpbmdcbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIGZpbGxDb2xvcl86IGZpbGxDb2xvcixcbiAgICAgICAgc3Ryb2tlQ29sb3JfOiBzdHJva2VDb2xvclxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVPZmZzZXQoXG4gICAgb2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sXG4gICAgb2Zmc2V0WDogbnVtYmVyLFxuICAgIG9mZnNldFk6IG51bWJlclxuICApIHtcbiAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyhcbiAgICAgIHtcbiAgICAgICAgb2Zmc2V0WF86IG9mZnNldFgsXG4gICAgICAgIG9mZnNldFlfOiBvZmZzZXRZXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxhYmVsVHlwZShcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICB0eXBlT2ZMYWJlbDogTGFiZWxUeXBlIHwgW0xhYmVsVHlwZSwgTGFiZWxUeXBlXVxuICApIHtcbiAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyhcbiAgICAgIHtcbiAgICAgICAgbGFiZWxUeXBlXzogdHlwZU9mTGFiZWxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVhc3VyZVVuaXQoXG4gICAgb2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sXG4gICAgbWVhc3VyZVVuaXQ6IE1lYXN1cmVMZW5ndGhVbml0IHwgTWVhc3VyZUFyZWFVbml0IHwgQ29vcmRpbmF0ZXNVbml0IHwgW11cbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIG1lYXN1cmVVbml0XzogbWVhc3VyZVVuaXRcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIC8vIFVwZGF0ZXMgdmFsdWVzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IG9uIHRoZSBIVE1MIHZpZXdcblxuICBnZXRGZWF0dXJlRm9udFNpemUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWVbMF0ucHJvcGVydGllcy5mb250U3R5bGVcbiAgICAgICAgICAuc3BsaXQoJyAnKVswXVxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxuICAgICAgOiAnMTUnO1xuICB9XG5cbiAgZ2V0RmVhdHVyZUZvbnRTdHlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWVbMF0ucHJvcGVydGllcy5mb250U3R5bGUuc3Vic3RyaW5nKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWVbMF0ucHJvcGVydGllcy5mb250U3R5bGUuaW5kZXhPZignICcpICsgMVxuICAgICAgICApXG4gICAgICA6IEZvbnRUeXBlLkFyaWFsO1xuICB9XG5cbiAgZ2V0RmVhdHVyZUZpbGxDb2xvcigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWVbMF0ucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuZmlsbFxuICAgICAgOiAncmdiYSgyNTUsMjU1LDI1NSwwLjQpJztcbiAgfVxuXG4gIGdldEZlYXR1cmVTdHJva2VDb2xvcigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwXG4gICAgICA/IHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWVbMF0ucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuc3Ryb2tlXG4gICAgICA6ICdyZ2JhKDE0Myw3LDcsMSknO1xuICB9XG5cbiAgZ2V0RmVhdHVyZU9mZnNldFgoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMub2Zmc2V0WFxuICAgICAgOiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0T2Zmc2V0WCgpO1xuICB9XG5cbiAgZ2V0RmVhdHVyZU9mZnNldFkoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMub2Zmc2V0WVxuICAgICAgOiAnMCc7XG4gIH1cblxuICBnZXQgYWxsRm9udFN0eWxlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRm9udFR5cGUpO1xuICB9XG5cbiAgZ2V0IGFsbExheWVycygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+XG4gICAgICBTdHJpbmcobGF5ZXIuaWQpLmluY2x1ZGVzKCdpZ28tZHJhdy1sYXllcicpXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUhlaWdodFRhYmxlKCkge1xuICAgIC8vIENoZWNrIHRoZSBhbW91bnQgb2Ygcm93cyBhcyBhIHBvc3NpYmxlIGFsdGVybmF0aXZlXG4gICAgdGhpcy5udW1iZXJPZkRyYXdpbmdzID0gdGhpcy5hY3RpdmVTdG9yZS5jb3VudCQuZ2V0VmFsdWUoKTtcbiAgICB0aGlzLm51bWJlck9mRHJhd2luZ3MgPiAxMFxuICAgICAgPyAodGhpcy50YWJsZVRlbXBsYXRlLnRhYmxlSGVpZ2h0ID0gJzM1dmgnKVxuICAgICAgOiAodGhpcy50YWJsZVRlbXBsYXRlLnRhYmxlSGVpZ2h0ID0gJ2F1dG8nKTtcbiAgfVxuXG4gIHVwZGF0ZUFjdGl2ZUxheWVyKCkge1xuICAgIGxldCBjdXJyTGF5ZXIgPSB0aGlzLmFsbExheWVycy5maW5kKFxuICAgICAgKGxheWVyKSA9PiBsYXllci50aXRsZSA9PT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIudGl0bGVcbiAgICApO1xuICAgIHJldHVybiBjdXJyTGF5ZXIgPyBjdXJyTGF5ZXIgOiB0aGlzLmFsbExheWVyc1swXTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzXG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIHRoZSBjb3JyZWN0IGNvbnRyb2xcbiAgICovXG4gIHByaXZhdGUgdG9nZ2xlRHJhd0NvbnRyb2woKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgICB0aGlzLmFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgdG9vbHRpcHMgb2YgYW4gT0wgZ2VvbWV0cnlcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT0wgZ2VvbWV0cnkgd2l0aCB0b29sdGlwc1xuICAgKi9cbiAgcHJpdmF0ZSBjbGVhckxhYmVsc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KSB7XG4gICAgZ2V0VG9vbHRpcHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSkuZm9yRWFjaChcbiAgICAgIChvbFRvb2x0aXA6IE9sT3ZlcmxheSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBpZiAob2xUb29sdGlwICYmIG9sVG9vbHRpcC5nZXRNYXAoKSkge1xuICAgICAgICAgIHRoaXMubWFwLm9sLnJlbW92ZU92ZXJsYXkob2xUb29sdGlwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIGZlYXR1cmUgaW4gdGhlIHN0b3JlXG4gICAqIEBwYXJhbSBlbnRpdHkgdGhlIGVudGl0eSB0byByZXBsYWNlXG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IHRoZSBuZXcgZ2VvbWV0cnkgdG8gaW5zZXJ0IGluIHRoZSBzdG9yZVxuICAgKi9cbiAgcHJpdmF0ZSByZXBsYWNlRmVhdHVyZUluU3RvcmUoXG4gICAgZW50aXR5LFxuICAgIG9sR2VvbWV0cnk6IE9sR2VvbWV0cnksXG4gICAgcmFkaXVzPzogbnVtYmVyXG4gICkge1xuICAgIHRoaXMuYWN0aXZlU3RvcmUuZGVsZXRlKGVudGl0eSk7XG4gICAgdGhpcy5vbkRyYXdFbmQob2xHZW9tZXRyeSwgcmFkaXVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIHRoZSBhY3RpdmUgZHJhdyBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIGRlYWN0aXZhdGVEcmF3Q29udHJvbCgpIHtcbiAgICBpZiAoIXRoaXMuYWN0aXZlRHJhd0NvbnRyb2wpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kcmF3RW5kJCQpIHtcbiAgICAgIHRoaXMuZHJhd0VuZCQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRPbE1hcCh1bmRlZmluZWQpO1xuICAgIHRoaXMuZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdGl2YXRlIGEgZ2l2ZW4gY29udHJvbFxuICAgKi9cbiAgcHJpdmF0ZSBhY3RpdmF0ZURyYXdDb250cm9sKCkge1xuICAgIHRoaXMuZHJhd0NvbnRyb2xJc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5kcmF3Q29udHJvbElzQWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLmRyYXdFbmQkJCA9IHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuZW5kJC5zdWJzY3JpYmUoXG4gICAgICAob2xHZW9tZXRyeTogT2xHZW9tZXRyeSkgPT4ge1xuICAgICAgICB0aGlzLm9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnksIHRydWUpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLm1vZGlmeSQuc3Vic2NyaWJlKChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5KSA9PiB7XG4gICAgICB0aGlzLm9uTW9kaWZ5RHJhdyhvbEdlb21ldHJ5KTtcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5kcmF3U2VsZWN0JCQpIHtcbiAgICAgIHRoaXMuZHJhd1NlbGVjdCQkID0gdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZWxlY3QkLnN1YnNjcmliZShcbiAgICAgICAgKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICAgICAgdGhpcy5vcGVuRHJhd0RpYWxvZyhvbEZlYXR1cmUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRPbE1hcCh0aGlzLm1hcC5vbCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogZ2V0IHRoZSBnZW9tZXRyeSBvZiBkZXNpZ25cbiAgICpcbiAgICovXG5cbiAgaXNQb2ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5nZXRHZW9tZXRyeVR5cGUoKSA9PT0gdGhpcy5nZW9tZXRyeVR5cGUuUG9pbnQ7XG4gIH1cblxuICBpc0xpbmVTdHJpbmcoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuZ2V0R2VvbWV0cnlUeXBlKCkgPT09IHRoaXMuZ2VvbWV0cnlUeXBlLkxpbmVTdHJpbmdcbiAgICApO1xuICB9XG5cbiAgaXNQb2x5Z29uKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmdldEdlb21ldHJ5VHlwZSgpID09PSB0aGlzLmdlb21ldHJ5VHlwZS5Qb2x5Z29uXG4gICAgKTtcbiAgfVxuXG4gIGlzQ2lyY2xlKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmdldEdlb21ldHJ5VHlwZSgpID09PSB0aGlzLmdlb21ldHJ5VHlwZS5DaXJjbGVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb25jdGlvbiB0byBwcmVkZWZpbmUgdGhlIHJhZGl1cyBvZiB0aGUgdXNlclxuICAgKlxuICAgKi9cblxuICBjaGFuZ2VSYWRpdXMocmFkaXVzOiBudW1iZXIpIHtcbiAgICBsZXQgcmFkaXVzTWV0ZXJzOiBudW1iZXI7XG5cbiAgICBpZiAocmFkaXVzKSB7XG4gICAgICB0aGlzLm1lYXN1cmVVbml0ID09PSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnNcbiAgICAgICAgPyAocmFkaXVzTWV0ZXJzID0gcmFkaXVzKVxuICAgICAgICA6IChyYWRpdXNNZXRlcnMgPSByYWRpdXMgKiAxMDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFkaXVzTWV0ZXJzID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHBvaW50U3R5bGUgPSAoZmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LCByZXNvbHV0aW9uOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGdlb20gPSBmZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgT2xQb2ludDtcbiAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gb2xwcm9qLnRyYW5zZm9ybShcbiAgICAgICAgZ2VvbS5nZXRDb29yZGluYXRlcygpLFxuICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uLFxuICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgKTtcblxuICAgICAgY29uc3QgcmFkaXVzID1cbiAgICAgICAgcmFkaXVzTWV0ZXJzIC8gTWF0aC5jb3MoKE1hdGguUEkgLyAxODApICogY29vcmRpbmF0ZXNbMV0pIC8gcmVzb2x1dGlvbjtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wucHJlZGVmaW5lZFJhZGl1cyQubmV4dChyYWRpdXNNZXRlcnMpO1xuICAgICAgcmV0dXJuIG5ldyBPbFN0eWxlLlN0eWxlKHtcbiAgICAgICAgaW1hZ2U6IG5ldyBPbFN0eWxlLkNpcmNsZSh7XG4gICAgICAgICAgcmFkaXVzOiByYWRpdXMsXG4gICAgICAgICAgc3Ryb2tlOiBuZXcgT2xTdHlsZS5TdHJva2Uoe1xuICAgICAgICAgICAgd2lkdGg6IDEsXG4gICAgICAgICAgICBjb2xvcjogJ3JnYmEoMTQzLDcsNywxKSdcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBmaWxsOiBuZXcgT2xTdHlsZS5GaWxsKHtcbiAgICAgICAgICAgIGNvbG9yOiAncmdiYSgyNTUsMjU1LDI1NSwwLjQpJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRPbEludGVyYWN0aW9uU3R5bGUocG9pbnRTdHlsZSk7XG4gICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgb25NZWFzdXJlVW5pdENoYW5nZShzZWxlY3RlZE1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCkge1xuICAgIGlmIChzZWxlY3RlZE1lYXN1cmVVbml0ID09PSB0aGlzLm1lYXN1cmVVbml0KSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVhc3VyZVVuaXQgPSBzZWxlY3RlZE1lYXN1cmVVbml0O1xuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzXG4gICAgICAgID8gdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlICogMTAwMClcbiAgICAgICAgOiB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMucmFkaXVzRm9ybUNvbnRyb2wudmFsdWUgLyAxMDAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjcmVhdGVzIHRoZSBzdHlsZSBvZiB0aGUgZmVhdHVyZSBzdG9yZWRcbiAgICovXG4gIHByaXZhdGUgZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duOiBib29sZWFuLCBpc0FuSWNvbj8pIHtcbiAgICBpZiAoaXNBbkljb24pIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUubGF5ZXIub2wuc2V0U3R5bGUoKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd1N0eWxlU2VydmljZS5jcmVhdGVJbmRpdmlkdWFsRWxlbWVudFN0eWxlKFxuICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgcmVzb2x1dGlvbixcbiAgICAgICAgICBsYWJlbHNBcmVTaG93bixcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZm9udFN0eWxlJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLmZpbGwsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLnN0cm9rZSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WCcpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRZJyksXG4gICAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvbixcbiAgICAgICAgICB0aGlzLmljb25cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sLnNldFN0eWxlKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlSW5kaXZpZHVhbEVsZW1lbnRTdHlsZShcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgbGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFgnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WScpLFxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb25cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmFkaXVzKG9sR2VvbWV0cnkpOiBudW1iZXIge1xuICAgIGNvbnN0IGxlbmd0aCA9IGdldExlbmd0aChvbEdlb21ldHJ5KTtcbiAgICByZXR1cm4gTnVtYmVyKGxlbmd0aCAvICgyICogTWF0aC5QSSkpO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8ZGl2IGNsYXNzPVwiZ2VvbWV0cnktdHlwZS10b2dnbGUgbWF0LXR5cG9ncmFwaHlcIj5cbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcbiAgICAgIChjaGFuZ2UpPVwib25HZW9tZXRyeVR5cGVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXG4gICAgICBbdmFsdWVdPVwiZ2VvbWV0cnlUeXBlLlBvaW50XCJcbiAgICA+XG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2ludFwiPlxuICAgICAgICB7eyAnaWdvLmdlby5kcmF3LicgKyBnZW9tZXRyeVR5cGUuUG9pbnQgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiZ2VvbWV0cnlUeXBlLkxpbmVTdHJpbmdcIj5cbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLkxpbmVTdHJpbmcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiZ2VvbWV0cnlUeXBlLlBvbHlnb25cIj5cbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLlBvbHlnb24gfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG5cbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiZ2VvbWV0cnlUeXBlLkNpcmNsZVwiPlxuICAgICAgICB7eyAnaWdvLmdlby5kcmF3LicgKyBnZW9tZXRyeVR5cGUuQ2lyY2xlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJkcmF3LW9wdGlvbnMgbWF0LXR5cG9ncmFwaHlcIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgW2Rpc2FibGVkXT1cImRyYXdDb250cm9sSXNEaXNhYmxlZFwiXG4gICAgICBbY2hlY2tlZF09XCJkcmF3Q29udHJvbElzQWN0aXZlXCJcbiAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcbiAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVEcmF3Q29udHJvbCgkZXZlbnQuY2hlY2tlZClcIlxuICAgID5cbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcuZHJhd0NvbnRyb2wnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgIFtjaGVja2VkXT1cImxhYmVsc0FyZVNob3duXCJcbiAgICAgIFtsYWJlbFBvc2l0aW9uXT1cIidiZWZvcmUnXCJcbiAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGVMYWJlbHMoKVwiXG4gICAgPlxuICAgICAge3sgJ2lnby5nZW8uZHJhdy50b2dnbGVNYXBUb29sdGlwcycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgKm5nSWY9XCIhaXNQb2ludCgpXCJcbiAgICAgIFtjaGVja2VkXT1cImZyZWVoYW5kTW9kZVwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlRnJlZWhhbmRNb2RlKCRldmVudClcIlxuICAgID5cbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcuZnJlZWhhbmRNb2RlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgIDxkaXYgY2xhc3M9XCJyYWRpdXMtdW5pdFwiICpuZ0lmPVwiaXNDaXJjbGUoKVwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicmFkaXVzXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnaWdvLmdlby5zcGF0aWFsRmlsdGVyLnJhZGl1cycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyYWRpdXNGb3JtQ29udHJvbFwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInRoaXMuZnJlZWhhbmRNb2RlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInVuaXQtZmllbGRcIj5cbiAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25NZWFzdXJlVW5pdENoYW5nZSgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgbWVhc3VyZVVuaXQgb2YgbWVhc3VyZVVuaXRzXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJtZWFzdXJlVW5pdFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ2lnby5nZW8ubWVhc3VyZS4nICsgbWVhc3VyZVVuaXQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuXG4gIDxkaXYgY2xhc3M9XCJsYXllci1zZWxlY3QtY29udGFpbmVyXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibGF5ZXItc2VsZWN0XCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgICAgPG1hdC1sYWJlbD57eyAnaWdvLmdlby5kcmF3LmxheWVyLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgI3NlbGVjdGVkTGF5ZXJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkxheWVyQ2hhbmdlKHNlbGVjdGVkTGF5ZXIudmFsdWUpXCJcbiAgICAgICAgW3ZhbHVlXT1cInVwZGF0ZUFjdGl2ZUxheWVyKClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbGF5ZXIgb2YgYWxsTGF5ZXJzXCIgW3ZhbHVlXT1cImxheWVyXCI+XG4gICAgICAgICAge3sgbGF5ZXIudGl0bGUgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiBpZD1cImNyZWF0ZU5ld0xheWVyXCI+XG4gICAgICAgICAge3sgJ2lnby5nZW8uZHJhdy5sYXllci5jcmVhdGVOZXdMYXllcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJhY3RpdmVEcmF3aW5nTGF5ZXJcIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbY29sb3JdPVwiYWN0aXZlRHJhd2luZ0xheWVyLnZpc2libGUgPyAncHJpbWFyeScgOiAnZGVmYXVsdCdcIlxuICAgICAgY29sbGFwc2libGVCdXR0b25cbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICBhY3RpdmVEcmF3aW5nTGF5ZXIudmlzaWJsZVxuICAgICAgICAgID8gKCdpZ28uZ2VvLmxheWVyLmhpZGVMYXllcicgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIuc2hvd0xheWVyJyB8IHRyYW5zbGF0ZSlcbiAgICAgIFwiXG4gICAgICAoY2xpY2spPVwiYWN0aXZlRHJhd2luZ0xheWVyLnZpc2libGUgPSAhYWN0aXZlRHJhd2luZ0xheWVyLnZpc2libGVcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAge3sgYWN0aXZlRHJhd2luZ0xheWVyLnZpc2libGUgPyAndmlzaWJpbGl0eScgOiAndmlzaWJpbGl0eV9vZmYnIH19XG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gIDxkaXY+XG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJhY3RpdmVTdG9yZS5jb3VudCQuZ2V0VmFsdWUoKSA+IDBcIlxuICAgICAgY2xhc3M9XCJkZWxldGVCdG5cIlxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZHJhdy5kZWxldGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtkaXNhYmxlZF09XCIoc2VsZWN0ZWRGZWF0dXJlcyQgfCBhc3luYykubGVuZ3RoID09PSAwXCJcbiAgICAgIChjbGljayk9XCJkZWxldGVEcmF3aW5ncygpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXY+XG4gICAgICA8aWdvLWVudGl0eS10YWJsZVxuICAgICAgICAjdGFibGVcbiAgICAgICAgY2xhc3M9XCJ0YWJsZS1jb21wYWN0XCJcbiAgICAgICAgW3N0b3JlXT1cImFjdGl2ZVN0b3JlXCJcbiAgICAgICAgW3RlbXBsYXRlXT1cInRhYmxlVGVtcGxhdGVcIlxuICAgICAgPlxuICAgICAgPC9pZ28tZW50aXR5LXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiaWNvbi1vcHRpb25zXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiaWNvbnMubGVuZ3RoID49IDFcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgJ2lnby5nZW8uZHJhdy5pY29uJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3Q+XG4gICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImljb25cIiBjbGFzcz1cImJveFwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyBpY29uIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiXCIgKGNsaWNrKT1cIm9uSWNvbkNoYW5nZSgpXCI+e3tcbiAgICAgICAgICAnaWdvLmdlby5kcmF3Lm5vSWNvbicgfCB0cmFuc2xhdGVcbiAgICAgICAgfX08L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGljb25faHRtbCBvZiBpY29uc1wiXG4gICAgICAgICAgW3ZhbHVlXT1cImljb25faHRtbFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uSWNvbkNoYW5nZShpY29uX2h0bWwpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3hcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwie3sgaWNvbl9odG1sIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJhY2NlbnRcIlxuICAgICAgZGlzYWJsZVJpcHBsZT1cInRydWVcIlxuICAgICAgKGNsaWNrKT1cIm9wZW5TaG9yY3V0c0RpYWxvZygpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgY2xhc3M9XCJzaG9ydGN1dHMtaWNvblwiXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5kcmF3LnNob3J0Y3V0cycgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+a2V5Ym9hcmRcbiAgICAgIDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICAqbmdJZj1cInNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aFwiXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIChjbGljayk9XCJvcGVuU3R5bGVNb2RhbERpYWxvZygpXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLnN0eWxlLnN0eWxlTW9kYWxUb29sdGlwU2VsZWN0ZWQnIHwgdHJhbnNsYXRlXCJcbiAgICA+XG4gICAgICB7eyAnaWdvLmdlby5zdHlsZS5zdHlsZU1vZGFsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxuICAgICAgICBpY29uUG9zaXRpb25FbmRcbiAgICAgICAgY2xhc3M9XCJzdHlsZS1pY29uXCJcbiAgICAgICAgW21hdEJhZGdlXT1cInNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aFwiXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcbiAgICAgICAgPnBhbGV0dGVcbiAgICAgIDwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
1133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsV0FBVyxFQUNYLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBRW5CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FB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QWtCO3NCQURyQixLQUFLO2dCQVNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBNkNxQixNQUFNO3NCQUFqQyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhbmltYXRlLFxuICBzdGF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXJcbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1zTW9kdWxlLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgVW50eXBlZEZvcm1Hcm91cFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRCYWRnZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Ub2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24tdG9nZ2xlJztcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0U2xpZGVUb2dnbGVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQge1xuICBFbnRpdHlSZWNvcmQsXG4gIEVudGl0eVRhYmxlQnV0dG9uLFxuICBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLFxuICBFbnRpdHlUYWJsZUNvbXBvbmVudCxcbiAgRW50aXR5VGFibGVUZW1wbGF0ZVxufSBmcm9tICdAaWdvMi9jb21tb24vZW50aXR5JztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcblxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCBPbE92ZXJsYXkgZnJvbSAnb2wvT3ZlcmxheSc7XG5pbXBvcnQgT2xHZW9KU09OIGZyb20gJ29sL2Zvcm1hdC9HZW9KU09OJztcbmltcG9ydCBPbENpcmNsZSBmcm9tICdvbC9nZW9tL0NpcmNsZSc7XG5pbXBvcnQgdHlwZSB7IFR5cGUgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IE9sUG9pbnQgZnJvbSAnb2wvZ2VvbS9Qb2ludCc7XG5pbXBvcnQgUG9seWdvbiwgeyBmcm9tQ2lyY2xlIH0gZnJvbSAnb2wvZ2VvbS9Qb2x5Z29uJztcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcbmltcG9ydCB7IHRyYW5zZm9ybSB9IGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IHsgVmVjdG9yU291cmNlRXZlbnQgYXMgT2xWZWN0b3JTb3VyY2VFdmVudCB9IGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IE9sVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IHsgZ2V0RGlzdGFuY2UsIGdldExlbmd0aCB9IGZyb20gJ29sL3NwaGVyZSc7XG5pbXBvcnQgKiBhcyBPbFN0eWxlIGZyb20gJ29sL3N0eWxlJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpcnN0LCBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2ZlYXR1cmUtZGF0YXNvdXJjZSc7XG5pbXBvcnQge1xuICBGRUFUVVJFLFxuICBGZWF0dXJlTW90aW9uLFxuICBGZWF0dXJlU3RvcmUsXG4gIEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSxcbiAgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3ksXG4gIGZlYXR1cmVUb09sLFxuICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3ksXG4gIHRyeUFkZFNlbGVjdGlvblN0cmF0ZWd5XG59IGZyb20gJy4uLy4uL2ZlYXR1cmUnO1xuaW1wb3J0IHsgdHJ5QmluZFN0b3JlTGF5ZXIgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLXN0b3JlLnV0aWxzJztcbmltcG9ydCB7IERyYXdDb250cm9sIH0gZnJvbSAnLi4vLi4vZ2VvbWV0cnkvc2hhcmVkL2NvbnRyb2xzL2RyYXcnO1xuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3Rvci1sYXllcic7XG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XG5pbXBvcnQge1xuICBNZWFzdXJlQXJlYVVuaXQsXG4gIE1lYXN1cmVBcmVhVW5pdEFiYnJldmlhdGlvbixcbiAgTWVhc3VyZUxlbmd0aFVuaXQsXG4gIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uXG59IGZyb20gJy4uLy4uL21lYXN1cmUvc2hhcmVkL21lYXN1cmUuZW51bSc7XG5pbXBvcnQgeyBnZXRUb29sdGlwc09mT2xHZW9tZXRyeSB9IGZyb20gJy4uLy4uL21lYXN1cmUvc2hhcmVkL21lYXN1cmUudXRpbHMnO1xuaW1wb3J0IHtcbiAgbWVhc3VyZU9sR2VvbWV0cnlBcmVhLFxuICBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aCxcbiAgbWV0ZXJzVG9Vbml0LFxuICBzcXVhcmVNZXRlcnNUb1VuaXRcbn0gZnJvbSAnLi4vLi4vbWVhc3VyZS9zaGFyZWQvbWVhc3VyZS51dGlscyc7XG5pbXBvcnQgeyBGb250VHlwZSB9IGZyb20gJy4uLy4uL3N0eWxlL3NoYXJlZC9mb250LmVudW0nO1xuaW1wb3J0IHsgU3R5bGVNb2RhbERyYXdpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zdHlsZS9zdHlsZS1tb2RhbC9kcmF3aW5nL3N0eWxlLW1vZGFsLWRyYXdpbmcuY29tcG9uZW50JztcbmltcG9ydCB7IFN0eWxlTW9kYWxEYXRhIH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtbW9kYWwvc2hhcmVkL3N0eWxlLW1vZGFsLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEcmF3U3R5bGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3R5bGUvc3R5bGUtc2VydmljZS9kcmF3LXN0eWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRHJhd0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2RyYXctaWNvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvb3JkaW5hdGVzVW5pdCwgR2VvbWV0cnlUeXBlLCBMYWJlbFR5cGUgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy5lbnVtJztcbmltcG9ydCB7IERyYXcsIEZlYXR1cmVXaXRoRHJhdyB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LmludGVyZmFjZSc7XG5pbXBvcnQgeyBERHRvRE1TLCBjcmVhdGVJbnRlcmFjdGlvblN0eWxlIH0gZnJvbSAnLi4vc2hhcmVkL2RyYXcudXRpbHMnO1xuaW1wb3J0IHsgRHJhd0xheWVyUG9wdXBDb21wb25lbnQgfSBmcm9tICcuL2RyYXctbGF5ZXItcG9wdXAuY29tcG9uZW50JztcbmltcG9ydCB7IERyYXdQb3B1cENvbXBvbmVudCB9IGZyb20gJy4vZHJhdy1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJhd1Nob3JjdXRzQ29tcG9uZW50IH0gZnJvbSAnLi9kcmF3LXNob3JjdXRzLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1kcmF3JyxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ29wZW5DbG9zZScsIFtcbiAgICAgIHN0YXRlKFxuICAgICAgICAnb3BlbicsXG4gICAgICAgIHN0eWxlKHtcbiAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgIH0pXG4gICAgICApLFxuICAgICAgc3RhdGUoXG4gICAgICAgICdjbG9zZWQnLFxuICAgICAgICBzdHlsZSh7XG4gICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICB9KVxuICAgICAgKSxcbiAgICAgIHRyYW5zaXRpb24oJ29wZW4gPT4gY2xvc2VkJywgW2FuaW1hdGUoJzYwMG1zIGVhc2UnKV0pLFxuICAgICAgdHJhbnNpdGlvbignY2xvc2VkID0+IG9wZW4nLCBbYW5pbWF0ZSgnODAwbXMgZWFzZScpXSlcbiAgICBdKVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJhdy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RyYXcuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXRCdXR0b25Ub2dnbGVNb2R1bGUsXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXG4gICAgTmdJZixcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxuICAgIE1hdERpdmlkZXJNb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTWF0SWNvbk1vZHVsZSxcbiAgICBFbnRpdHlUYWJsZUNvbXBvbmVudCxcbiAgICBNYXRCYWRnZU1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgSWdvTGFuZ3VhZ2VNb2R1bGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEcmF3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGFibGUgdGVtcGxhdGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgdGFibGVUZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcblxuICBwdWJsaWMgZ2VvbWV0cnlUeXBlID0gR2VvbWV0cnlUeXBlOyAvLyBSZWZlcmVuY2UgdG8gdGhlIEdlb21ldHJ5VHlwZSBlbnVtXG4gIEBJbnB1dCgpIG1hcDogSWdvTWFwOyAvLyBNYXAgdG8gZHJhdyBvblxuXG4gIEBJbnB1dCgpXG4gIGdldCBzdG9yZXMoKTogRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlcztcbiAgfVxuICBzZXQgc3RvcmVzKHZhbHVlOiBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PltdKSB7XG4gICAgdGhpcy5fc3RvcmVzID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfc3RvcmVzOiBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEcmF3PltdID0gW107XG5cbiAgQElucHV0KClcbiAgZ2V0IGRyYXdDb250cm9scygpOiBbc3RyaW5nLCBEcmF3Q29udHJvbF1bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RyYXdDb250cm9scztcbiAgfVxuICBzZXQgZHJhd0NvbnRyb2xzKHZhbHVlOiBbc3RyaW5nLCBEcmF3Q29udHJvbF1bXSkge1xuICAgIHRoaXMuX2RyYXdDb250cm9scyA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2RyYXdDb250cm9scyA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBhY3RpdmVEcmF3aW5nTGF5ZXIoKTogVmVjdG9yTGF5ZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVEcmF3aW5nTGF5ZXI7XG4gIH1cbiAgc2V0IGFjdGl2ZURyYXdpbmdMYXllcih2YWx1ZTogVmVjdG9yTGF5ZXIpIHtcbiAgICB0aGlzLl9hY3RpdmVEcmF3aW5nTGF5ZXIgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9hY3RpdmVEcmF3aW5nTGF5ZXI6IFZlY3RvckxheWVyO1xuXG4gIEBPdXRwdXQoKSBhY3RpdmVMYXllckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VmVjdG9yTGF5ZXI+KCk7XG4gIEBPdXRwdXQoKSBkcmF3Q29udHJvbHNFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8W3N0cmluZywgRHJhd0NvbnRyb2xdW10+KCk7XG4gIEBPdXRwdXQoKSBsYXllcnNJREV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQE91dHB1dCgpIGZpbGxDb2xvcjogc3RyaW5nO1xuICBAT3V0cHV0KCkgc3Ryb2tlQ29sb3I6IHN0cmluZztcbiAgQE91dHB1dCgpIHN0cm9rZVdpZHRoOiBudW1iZXI7XG5cbiAgQE91dHB1dCgpIGZvbnRTaXplOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBmb250U3R5bGU6IHN0cmluZztcblxuICBwdWJsaWMgYWN0aXZlU3RvcmU6IEZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+O1xuICBwcml2YXRlIGxheWVyQ291bnRlcklEOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgZHJhdyQ6IEJlaGF2aW9yU3ViamVjdDxEcmF3PiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pOyAvLyBPYnNlcnZhYmxlIG9mIGRyYXdcbiAgcHJpdmF0ZSBhY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UgPSBuZXcgT2xWZWN0b3JTb3VyY2UoKTtcbiAgcHJpdmF0ZSBhY3RpdmVEcmF3Q29udHJvbDogRHJhd0NvbnRyb2w7XG4gIHByaXZhdGUgZHJhd0VuZCQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZHJhd1NlbGVjdCQkOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBzZWxlY3RlZEZlYXR1cmVzJDogQmVoYXZpb3JTdWJqZWN0PEZlYXR1cmVXaXRoRHJhd1tdPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHB1YmxpYyBmaWxsRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgc3Ryb2tlRm9ybTogc3RyaW5nO1xuICBwdWJsaWMgZHJhd0NvbnRyb2xJc0Rpc2FibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGRyYXdDb250cm9sSXNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxhYmVsc0FyZVNob3duOiBib29sZWFuO1xuICBwdWJsaWMgZnJlZWhhbmRNb2RlID0gZmFsc2U7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyQkOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHB1YmxpYyBwb3NpdGlvbjogc3RyaW5nID0gJ2JvdHRvbSc7XG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwdWJsaWMgaWNvbnM6IEFycmF5PHN0cmluZz47XG4gIHB1YmxpYyBpY29uOiBzdHJpbmc7XG5cbiAgcHVibGljIHJhZGl1c0Zvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgxMDAwKTtcbiAgcHVibGljIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCA9IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVycztcbiAgcHVibGljIHJhZGl1c0Zvcm1Db250cm9sQ2hhbmdlJCQ6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHVibGljIHByZWRlZmluZWRSYWRpdXMkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgdW5kZWZpbmVkXG4gICk7XG4gIHB1YmxpYyByYWRpdXNEcmF3RW5kJDogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIHVuZGVmaW5lZFxuICApO1xuXG4gIC8qKlxuICAgKiBBdmFpbGFibGUgbWVhc3VyZSB1bml0cyBmb3IgdGhlIG1lYXN1cmUgdHlwZSBnaXZlblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBtZWFzdXJlVW5pdHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzLCBNZWFzdXJlTGVuZ3RoVW5pdC5LaWxvbWV0ZXJzXTtcbiAgfVxuICBwcml2YXRlIG51bWJlck9mRHJhd2luZ3M6IG51bWJlcjtcbiAgcHVibGljIGlzQ3JlYXRpbmdOZXdMYXllcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJHZW9tZXRyeVR5cGUgPSB0aGlzLmdlb21ldHJ5VHlwZS5Qb2ludCBhcyBhbnk7XG5cbiAgQFZpZXdDaGlsZCgnc2VsZWN0ZWRMYXllcicpIHNlbGVjdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGRyYXdTdHlsZVNlcnZpY2U6IERyYXdTdHlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIGRyYXdJY29uU2VydmljZTogRHJhd0ljb25TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudGFibGVUZW1wbGF0ZSA9IHtcbiAgICAgIHNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIHNlbGVjdE1hbnk6IHRydWUsXG4gICAgICBzZWxlY3Rpb25DaGVja2JveDogdHJ1ZSxcbiAgICAgIHNvcnQ6IHRydWUsXG4gICAgICBmaXhlZEhlYWRlcjogdHJ1ZSxcbiAgICAgIHRhYmxlSGVpZ2h0OiAnYXV0bycsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnRHJhd2luZycsXG4gICAgICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcubGFiZWxzJyksXG4gICAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGZlYXR1cmU6IEZlYXR1cmVXaXRoRHJhdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmUucHJvcGVydGllcy5kcmF3O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdFZGl0aW9uJyxcbiAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgdmFsdWVBY2Nlc3NvcjogKGZlYXR1cmU6IEZlYXR1cmVXaXRoRHJhdykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVkaXRNb2RlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpY29uOiAnZWRpdCcsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0TGFiZWxEcmF3aW5nKGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3R5bGU6ICdtYXQtaWNvbi1idXR0b24nXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0gYXMgRW50aXR5VGFibGVCdXR0b25bXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbmRlcmVyOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkJ1dHRvbkdyb3VwXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIHRoaXMuYnVpbGRGb3JtKCk7XG4gICAgdGhpcy5maWxsQ29sb3IgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0RmlsbENvbG9yKCk7XG4gICAgdGhpcy5zdHJva2VDb2xvciA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRTdHJva2VDb2xvcigpO1xuICAgIHRoaXMuc3Ryb2tlV2lkdGggPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0U3Ryb2tlV2lkdGgoKTtcbiAgICB0aGlzLmxhYmVsc0FyZVNob3duID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldExhYmVsc0FyZVNob3duKCk7XG4gICAgdGhpcy5pY29ucyA9IHRoaXMuZHJhd0ljb25TZXJ2aWNlLmdldEljb25zKCk7XG4gICAgdGhpcy5pY29uID0gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldEljb24oKTtcblxuICAgIHRoaXMuZm9udFNpemUgPSB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuZ2V0Rm9udFNpemUoKTtcbiAgICB0aGlzLmZvbnRTdHlsZSA9IHRoaXMuZHJhd1N0eWxlU2VydmljZS5nZXRGb250U3R5bGUoKTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgdGhlIHN0b3JlIHRoYXQgd2lsbCBjb250YWluIHRoZSBlbnRpdGllcyBhbmQgY3JlYXRlIHRoZSBEcmF3IGNvbnRyb2xcbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLnN0b3Jlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUgPSBuZXcgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoRHJhdz4oW10sIHtcbiAgICAgICAgbWFwOiB0aGlzLm1hcFxuICAgICAgfSk7XG4gICAgICB0aGlzLmluaXRTdG9yZSgpO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbCA9IHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woXG4gICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICB0aGlzLnN0cm9rZUNvbG9yLFxuICAgICAgICB0aGlzLnN0cm9rZVdpZHRoXG4gICAgICApO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUodGhpcy5nZW9tZXRyeVR5cGUuUG9pbnQgYXMgYW55KTtcbiAgICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgICAgIHRoaXMuc3RvcmVzLnB1c2godGhpcy5hY3RpdmVTdG9yZSk7XG4gICAgICB0aGlzLmRyYXdDb250cm9scy5wdXNoKFtcbiAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWQsXG4gICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2xcbiAgICAgIF0pO1xuICAgICAgdGhpcy5kcmF3Q29udHJvbHNFdmVudC5lbWl0KHRoaXMuZHJhd0NvbnRyb2xzKTtcbiAgICAgIHRoaXMubGF5ZXJzSURFdmVudC5lbWl0KHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKTtcbiAgICAgIHRoaXMub25MYXllckNoYW5nZSh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUgPSB0aGlzLnN0b3Jlcy5maW5kKFxuICAgICAgICAoc3RvcmUpID0+IHN0b3JlLmxheWVyLmlkID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZFxuICAgICAgKTtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wgPSB0aGlzLmRyYXdDb250cm9scy5maW5kKFxuICAgICAgICAoZGMpID0+IGRjWzBdID09PSB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZFxuICAgICAgKVsxXTtcbiAgICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgICB0aGlzLmFsbExheWVycy5mb3JFYWNoKChsYXllcikgPT4ge1xuICAgICAgICBpZiAobGF5ZXIuaWQgIT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKSB7XG4gICAgICAgICAgbGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0b3JlID0gdGhpcy5zdG9yZXMuZmluZCgocykgPT4gcy5sYXllci5pZCA9PT0gbGF5ZXIuaWQpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICAgICAgc3RvcmUuc3RhdGVWaWV3XG4gICAgICAgICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZWNvcmRzOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZVdpdGhEcmF3PltdKSA9PiB7XG4gICAgICAgICAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVjb3JkLnN0YXRlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgICAgIHN0b3JlLnN0YXRlVmlld1xuICAgICAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgc2tpcCgxKSAvLyBTa2lwIGluaXRpYWwgZW1pc3Npb25cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC5uZXh0KFxuICAgICAgICAgICAgICAgIHJlY29yZHMubWFwKChyZWNvcmQpID0+IHJlY29yZC5lbnRpdHkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQkLnB1c2goXG4gICAgICAgICAgc3RvcmUuY291bnQkLnN1YnNjcmliZSgoY250KSA9PiB7XG4gICAgICAgICAgICBjbnQgPj0gMVxuICAgICAgICAgICAgICA/ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gdHJ1ZSlcbiAgICAgICAgICAgICAgOiAodGhpcy5hY3RpdmVTdG9yZS5sYXllci5vcHRpb25zLnNob3dJbkxheWVyTGlzdCA9IGZhbHNlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm9uTGF5ZXJDaGFuZ2UodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgIH1cblxuICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2xDaGFuZ2UkJCA9XG4gICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURyYXdDb250cm9sLmlzcHJlZGVmaW5lZFJhZGl1cyQuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgIHRoaXMuY2hhbmdlUmFkaXVzKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHRoZSBkcmF3aW5nIGxheWVyIGFuZCB0aGUgaW50ZXJhY3Rpb25zXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5hbGxMYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IChsYXllci5vcGFjaXR5ID0gMSkpO1xuICAgIHRoaXMuYWN0aXZlU3RvcmUuc3RhdGUudXBkYXRlQWxsKHsgc2VsZWN0ZWQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJCQubWFwKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMucmFkaXVzRm9ybUNvbnRyb2xDaGFuZ2UkJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERyYXcgQ29udHJvbFxuICAgKiBAcGFyYW0gZmlsbENvbG9yIHRoZSBmaWxsIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VDb2xvciB0aGUgc3Ryb2tlIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VXaWR0aCB0aGUgc3Ryb2tlIHdpZHRoXG4gICAqIEByZXR1cm5zIGEgRHJhdyBDb250cm9sXG4gICAqL1xuICBjcmVhdGVEcmF3Q29udHJvbChcbiAgICBmaWxsQ29sb3I/OiBzdHJpbmcsXG4gICAgc3Ryb2tlQ29sb3I/OiBzdHJpbmcsXG4gICAgc3Ryb2tlV2lkdGg/OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3QgYWN0aXZlRHJhd0NvbnRyb2wgPSBuZXcgRHJhd0NvbnRyb2woe1xuICAgICAgZ2VvbWV0cnlUeXBlOiB1bmRlZmluZWQsXG4gICAgICBkcmF3aW5nTGF5ZXJTb3VyY2U6IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlLFxuICAgICAgZHJhd2luZ0xheWVyU3R5bGU6IG5ldyBPbFN0eWxlLlN0eWxlKHt9KSxcbiAgICAgIGludGVyYWN0aW9uU3R5bGU6IGNyZWF0ZUludGVyYWN0aW9uU3R5bGUoXG4gICAgICAgIGZpbGxDb2xvcixcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoXG4gICAgICApXG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGl2ZURyYXdDb250cm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIGluaXRpYWxpemF0aW9uLCBpbmNsdWRpbmcgZHJhd2luZyBsYXllciBjcmVhdGlvblxuICAgKi9cblxuICBwcml2YXRlIGluaXRTdG9yZShuZXdUaXRsZT86IHN0cmluZywgaXNOZXdMYXllcj86IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNyZWF0ZUxheWVyKG5ld1RpdGxlLCBpc05ld0xheWVyKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPEZlYXR1cmVXaXRoRHJhdz4pID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBza2lwKDEpIC8vIFNraXAgaW5pdGlhbCBlbWlzc2lvblxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlV2l0aERyYXc+W10pID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLm5leHQocmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmVudGl0eSkpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkJC5wdXNoKFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5jb3VudCQuc3Vic2NyaWJlKChjbnQpID0+IHtcbiAgICAgICAgY250ID49IDFcbiAgICAgICAgICA/ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gdHJ1ZSlcbiAgICAgICAgICA6ICh0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9wdGlvbnMuc2hvd0luTGF5ZXJMaXN0ID0gZmFsc2UpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIHN0eWxlIG1vZGFsIGRpYWxvZyBib3hcbiAgICovXG4gIG9wZW5TdHlsZU1vZGFsRGlhbG9nKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIHN0eWxlIGZlYXR1cmVzXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFN0eWxlTW9kYWxEcmF3aW5nQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBmZWF0dXJlczogdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC5nZXRWYWx1ZSgpLFxuICAgICAgICAgIGljb25zOiB0aGlzLmljb25zLFxuICAgICAgICAgIGljb246IHRoaXMuaWNvblxuICAgICAgICB9LFxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgLy8gd2hlbiBkaWFsb2cgYm94IGlzIGNsb3NlZCwgZ2V0IGxhYmVsIGFuZCBzZXQgaXQgdG8gZ2VvbWV0cnlcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoZGF0YTogU3R5bGVNb2RhbERhdGEpID0+IHtcbiAgICAgICAgLy8gY2hlY2tzIGlmIHRoZSB1c2VyIGNsaWNrZWQgb2tcbiAgICAgICAgaWYgKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb25maXJtRmxhZykge1xuICAgICAgICAgIHRoaXMub25Gb250Q2hhbmdlKHRoaXMubGFiZWxzQXJlU2hvd24sIGRhdGEuZm9udFNpemUsIGRhdGEuZm9udFN0eWxlKTtcbiAgICAgICAgICB0aGlzLm9uQ29sb3JDaGFuZ2UoXG4gICAgICAgICAgICB0aGlzLmxhYmVsc0FyZVNob3duLFxuICAgICAgICAgICAgdGhpcy5pY29uID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YS5maWxsQ29sb3IsXG4gICAgICAgICAgICBkYXRhLnN0cm9rZUNvbG9yXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLm9uT2Zmc2V0TGFiZWxDaGFuZ2UoXG4gICAgICAgICAgICB0aGlzLmxhYmVsc0FyZVNob3duLFxuICAgICAgICAgICAgZGF0YS5vZmZzZXRYLFxuICAgICAgICAgICAgZGF0YS5vZmZzZXRZXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMjUwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgZGlhbG9nIGJveCB0byBlbnRlciBsYWJlbCBhbmQgZG8gc29tZXRoaW5nXG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IGdlb21ldHJ5IGF0IGRyYXcgZW5kIG9yIHNlbGVjdGVkIGdlb21ldHJ5XG4gICAqIEBwYXJhbSBkcmF3RW5kIGV2ZW50IGZpcmVkIGF0IGRyYXdFbmQ/XG4gICAqL1xuICBwcml2YXRlIG9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnksIGlzRHJhd0VuZDogYm9vbGVhbikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gb3BlbiB0aGUgZGlhbG9nIGJveCB1c2VkIHRvIGVudGVyIGxhYmVsXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERyYXdQb3B1cENvbXBvbmVudCwge1xuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBkYXRhOiB7IG9sR2VvbWV0cnk6IG9sR2VvbWV0cnksIG1hcDogdGhpcy5tYXAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHdoZW4gZGlhbG9nIGJveCBpcyBjbG9zZWQsIGdldCBsYWJlbCBhbmQgc2V0IGl0IHRvIGdlb21ldHJ5XG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBjaGVja3MgaWYgdGhlIHVzZXIgY2xpY2tlZCBva1xuICAgICAgICBpZiAoZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbmZpcm1GbGFnKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCByZXN1bHQubGFiZWwpO1xuICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxUeXBlKFxuICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5sYWJlbEZsYWdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudXBkYXRlTWVhc3VyZVVuaXQob2xHZW9tZXRyeSwgcmVzdWx0Lm1lYXN1cmVVbml0KTtcblxuICAgICAgICAgIGlmICghKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbEZlYXR1cmUpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplQW5kU3R5bGUob2xHZW9tZXRyeSwgJzE1JywgRm9udFR5cGUuQXJpYWwpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgICAgICdyZ2JhKDI1NSwyNTUsMjU1LDAuNCknLFxuICAgICAgICAgICAgICAncmdiYSgxNDMsNyw3LDEpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KFxuICAgICAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICBvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xQb2ludCA/IC0xNSA6IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaXNEcmF3RW5kXG4gICAgICAgICAgICA/IHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnkpXG4gICAgICAgICAgICA6IHRoaXMub25TZWxlY3REcmF3KG9sR2VvbWV0cnksIHJlc3VsdC5sYWJlbCwgW1xuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5sYWJlbEZsYWcsXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm1lYXN1cmVVbml0XG4gICAgICAgICAgICAgIF0pO1xuICAgICAgICAgIHRoaXMudXBkYXRlSGVpZ2h0VGFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkZWxldGVzIHRoZSBmZWF0dXJlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyU291cmNlXG4gICAgICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAgICAgLmZvckVhY2goKGRyYXdpbmdMYXllckZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBkcmF3aW5nTGF5ZXJGZWF0dXJlLmdldEdlb21ldHJ5KCkgYXMgYW55O1xuICAgICAgICAgICAgICBpZiAob2xHZW9tZXRyeSA9PT0gZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZS5yZW1vdmVGZWF0dXJlKFxuICAgICAgICAgICAgICAgICAgZHJhd2luZ0xheWVyRmVhdHVyZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBkcmF3IHNvdXJjZSBhbmQgdHJhY2sgdGhlIGdlb21ldHJ5IGJlaW5nIGRyYXdcbiAgICogQHBhcmFtIG9sR2VvbWV0cnkgT2wgbGluZXN0cmluZyBvciBwb2x5Z29uXG4gICAqL1xuICBwcml2YXRlIG9uRHJhd0VuZChvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LCByYWRpdXM/OiBudW1iZXIpIHtcbiAgICB0aGlzLmFkZEZlYXR1cmVUb1N0b3JlKG9sR2VvbWV0cnksIHJhZGl1cyk7XG4gICAgdGhpcy5jbGVhckxhYmVsc09mT2xHZW9tZXRyeShvbEdlb21ldHJ5KTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sLmdldFNvdXJjZSgpLnJlZnJlc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Nb2RpZnlEcmF3KG9sR2VvbWV0cnkpIHtcbiAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuYWN0aXZlU3RvcmUuYWxsKCk7XG5cbiAgICBlbnRpdGllcy5mb3JFYWNoKChlbnRpdHkpID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eUlkID0gZW50aXR5LnByb3BlcnRpZXMuaWQ7XG4gICAgICBjb25zdCBvbEdlb21ldHJ5SWQgPSBvbEdlb21ldHJ5Lm9sX3VpZDtcblxuICAgICAgaWYgKGVudGl0eUlkID09PSBvbEdlb21ldHJ5SWQpIHtcbiAgICAgICAgaWYgKGVudGl0eS5wcm9wZXJ0aWVzLmxhYmVsVHlwZSA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKSB7XG4gICAgICAgICAgbGV0IGxvbmdMYXQgPSBERHRvRE1TKFxuICAgICAgICAgICAgW2VudGl0eS5wcm9wZXJ0aWVzLmxvbmdpdHVkZSwgZW50aXR5LnByb3BlcnRpZXMubGF0aXR1ZGVdLFxuICAgICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMubWVhc3VyZVVuaXQgYXMgQ29vcmRpbmF0ZXNVbml0XG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KFxuICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgICcoJyArIGxvbmdMYXRbMV0gKyAnLCAnICsgbG9uZ0xhdFswXSArICcpJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50aXR5LnByb3BlcnRpZXMubGFiZWxUeXBlID09PSBMYWJlbFR5cGUuTGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbENpcmNsZSkge1xuICAgICAgICAgICAgbGV0IGNpcmN1bGFyUG9seWdvbiA9IGZyb21DaXJjbGUob2xHZW9tZXRyeSwgMTAwMDApO1xuICAgICAgICAgICAgY29uc3QgcmFkaXVzID0gbWV0ZXJzVG9Vbml0KFxuICAgICAgICAgICAgICB0aGlzLmdldFJhZGl1cyhjaXJjdWxhclBvbHlnb24pLFxuICAgICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdCBhcyBNZWFzdXJlTGVuZ3RoVW5pdFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlTGVuZ3RoVW5pdEFiYnJldmlhdGlvbltlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdF07XG4gICAgICAgICAgICBjb25zdCByYWRpdXNMYWJlbCA9XG4gICAgICAgICAgICAgICdSOiAnICsgcmFkaXVzLnRvRml4ZWQoMikudG9TdHJpbmcoKSArICcgJyArIHVuaXQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIHJhZGl1c0xhYmVsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG9sR2VvbWV0cnlMZW5ndGggPSBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aChcbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgbWVhc3VyZVVuaXQ6IGFueTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXA6IE1lYXN1cmVMZW5ndGhVbml0ID0gZW50aXR5LnByb3BlcnRpZXNcbiAgICAgICAgICAgICAgLm1lYXN1cmVVbml0IGFzIE1lYXN1cmVMZW5ndGhVbml0O1xuICAgICAgICAgICAgbWVhc3VyZVVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlTGVuZ3RoVW5pdEFiYnJldmlhdGlvbltlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdF07XG4gICAgICAgICAgICBvbEdlb21ldHJ5TGVuZ3RoID0gbWV0ZXJzVG9Vbml0KG9sR2VvbWV0cnlMZW5ndGgsIHRlbXApO1xuICAgICAgICAgICAgbGV0IGxlbmd0aExhYmVsID1cbiAgICAgICAgICAgICAgb2xHZW9tZXRyeSBpbnN0YW5jZW9mIFBvbHlnb25cbiAgICAgICAgICAgICAgICA/ICdQOiAnICtcbiAgICAgICAgICAgICAgICAgIG9sR2VvbWV0cnlMZW5ndGgudG9GaXhlZCgyKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgICBtZWFzdXJlVW5pdFxuICAgICAgICAgICAgICAgIDogb2xHZW9tZXRyeUxlbmd0aC50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgKyAnICcgKyBtZWFzdXJlVW5pdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgbGVuZ3RoTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkucHJvcGVydGllcy5sYWJlbFR5cGUgPT09IExhYmVsVHlwZS5BcmVhKSB7XG4gICAgICAgICAgaWYgKG9sR2VvbWV0cnkgaW5zdGFuY2VvZiBPbENpcmNsZSkge1xuICAgICAgICAgICAgbGV0IGNpcmN1bGFyUG9seWdvbiA9IGZyb21DaXJjbGUob2xHZW9tZXRyeSwgMTAwMDApO1xuICAgICAgICAgICAgbGV0IGNpcmNsZUFyZWEgPSBtZWFzdXJlT2xHZW9tZXRyeUFyZWEoXG4gICAgICAgICAgICAgIGNpcmN1bGFyUG9seWdvbixcbiAgICAgICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCB1bml0ID1cbiAgICAgICAgICAgICAgTWVhc3VyZUFyZWFVbml0QWJicmV2aWF0aW9uW2VudGl0eS5wcm9wZXJ0aWVzLm1lYXN1cmVVbml0XTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXA6IE1lYXN1cmVBcmVhVW5pdCA9IGVudGl0eS5wcm9wZXJ0aWVzXG4gICAgICAgICAgICAgIC5tZWFzdXJlVW5pdCBhcyBNZWFzdXJlQXJlYVVuaXQ7XG4gICAgICAgICAgICBjaXJjbGVBcmVhID0gc3F1YXJlTWV0ZXJzVG9Vbml0KGNpcmNsZUFyZWEsIHRlbXApO1xuICAgICAgICAgICAgY29uc3QgYXJlYUxhYmVsID0gY2lyY2xlQXJlYS50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgKyAnICcgKyB1bml0O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBhcmVhTGFiZWwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgb2xHZW9tZXRyeUFyZWEgPSBtZWFzdXJlT2xHZW9tZXRyeUFyZWEoXG4gICAgICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGV0IG1lYXN1cmVVbml0OiBhbnk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wOiBNZWFzdXJlQXJlYVVuaXQgPSBlbnRpdHkucHJvcGVydGllc1xuICAgICAgICAgICAgICAubWVhc3VyZVVuaXQgYXMgTWVhc3VyZUFyZWFVbml0O1xuICAgICAgICAgICAgbWVhc3VyZVVuaXQgPVxuICAgICAgICAgICAgICBNZWFzdXJlQXJlYVVuaXRBYmJyZXZpYXRpb25bZW50aXR5LnByb3BlcnRpZXMubWVhc3VyZVVuaXRdO1xuICAgICAgICAgICAgb2xHZW9tZXRyeUFyZWEgPSBzcXVhcmVNZXRlcnNUb1VuaXQob2xHZW9tZXRyeUFyZWEsIHRlbXApO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoTGFiZWwgPVxuICAgICAgICAgICAgICBvbEdlb21ldHJ5QXJlYS50b0ZpeGVkKDIpLnRvU3RyaW5nKCkgKyAnICcgKyBtZWFzdXJlVW5pdDtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSwgbGVuZ3RoTGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnksIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbFR5cGUob2xHZW9tZXRyeSwgZW50aXR5LnByb3BlcnRpZXMubGFiZWxUeXBlKTtcbiAgICAgICAgdGhpcy51cGRhdGVNZWFzdXJlVW5pdChvbEdlb21ldHJ5LCBlbnRpdHkucHJvcGVydGllcy5tZWFzdXJlVW5pdCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShcbiAgICAgICAgICBvbEdlb21ldHJ5LFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zcGxpdCgnICcpWzBdLnJlcGxhY2UoJ3B4JywgJycpLFxuICAgICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5mb250U3R5bGUuaW5kZXhPZignICcpICsgMVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3IoXG4gICAgICAgICAgb2xHZW9tZXRyeSxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuZmlsbCxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuc3Ryb2tlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KFxuICAgICAgICAgIG9sR2VvbWV0cnksXG4gICAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WCxcbiAgICAgICAgICBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRZXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVwbGFjZUZlYXR1cmVJblN0b3JlKGVudGl0eSwgb2xHZW9tZXRyeSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2VsZWN0RHJhdyhcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIGxhYmVsVHlwZUFuZFVuaXQ/XG4gICkge1xuICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5hY3RpdmVTdG9yZS5hbGwoKTtcblxuICAgIGNvbnN0IG9sR2VvbWV0cnkgPSBvbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XG4gICAgb2xHZW9tZXRyeS5vbF91aWQgPSBvbEZlYXR1cmUuZ2V0KCdpZCcpO1xuXG4gICAgY29uc3Qgb2xHZW9tZXRyeUNvb3JkaW5hdGVzID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICBvbEdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClbMF1cbiAgICApO1xuXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHlDb29yZGluYXRlcyA9IEpTT04uc3RyaW5naWZ5KGVudGl0eS5nZW9tZXRyeS5jb29yZGluYXRlc1swXSk7XG4gICAgICBpZiAob2xHZW9tZXRyeUNvb3JkaW5hdGVzID09PSBlbnRpdHlDb29yZGluYXRlcykge1xuICAgICAgICBjb25zdCBmb250U2l6ZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnNwbGl0KCcgJylbMF1cbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJyk7XG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IG9sRmVhdHVyZVxuICAgICAgICAgIC5nZXQoJ2ZvbnRTdHlsZScpXG4gICAgICAgICAgLnN1YnN0cmluZyhvbEZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKS5pbmRleE9mKCcgJykgKyAxKTtcblxuICAgICAgICBjb25zdCBmaWxsQ29sb3IgPSBvbEZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsO1xuICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IG9sRmVhdHVyZS5nZXQoJ2RyYXdpbmdTdHlsZScpLnN0cm9rZTtcblxuICAgICAgICBjb25zdCBvZmZzZXRYID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WCcpO1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gb2xGZWF0dXJlLmdldCgnb2Zmc2V0WScpO1xuXG4gICAgICAgIGNvbnN0IHJhZDogbnVtYmVyID0gZW50aXR5LnByb3BlcnRpZXMucmFkXG4gICAgICAgICAgPyBlbnRpdHkucHJvcGVydGllcy5yYWRcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbE9mT2xHZW9tZXRyeShvbEdlb21ldHJ5LCBsYWJlbCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9udFNpemVBbmRTdHlsZShvbEdlb21ldHJ5LCBmb250U2l6ZSwgZm9udFN0eWxlKTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWxsQW5kU3Ryb2tlQ29sb3Iob2xHZW9tZXRyeSwgZmlsbENvbG9yLCBzdHJva2VDb2xvcik7XG4gICAgICAgIHRoaXMudXBkYXRlT2Zmc2V0KG9sR2VvbWV0cnksIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsVHlwZShvbEdlb21ldHJ5LCBsYWJlbFR5cGVBbmRVbml0WzBdKTtcbiAgICAgICAgdGhpcy51cGRhdGVNZWFzdXJlVW5pdChvbEdlb21ldHJ5LCBsYWJlbFR5cGVBbmRVbml0WzFdKTtcbiAgICAgICAgdGhpcy5yZXBsYWNlRmVhdHVyZUluU3RvcmUoZW50aXR5LCBvbEdlb21ldHJ5LCByYWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGZlYXR1cmUgd2l0aCBkcmF3IGxhYmVsIHRvIHRoZSBzdG9yZS4gVGhlIGxvYWRpbmcgc3RyYWdlZ3kgb2YgdGhlIHN0b3JlXG4gICAqIHdpbGwgdHJpZ2dlciBhbmQgYWRkIHRoZSBmZWF0dXJlIHRvIHRoZSBtYXAuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBhZGRGZWF0dXJlVG9TdG9yZShcbiAgICBvbEdlb21ldHJ5LFxuICAgIHJhZGl1cz86IG51bWJlcixcbiAgICBmZWF0dXJlPzogRmVhdHVyZVdpdGhEcmF3XG4gICkge1xuICAgIGxldCByYWQ6IG51bWJlcjtcbiAgICBsZXQgY2VudGVyNDMyNjogQXJyYXk8bnVtYmVyPjtcbiAgICBsZXQgcG9pbnQ0MzI2OiBBcnJheTxudW1iZXI+O1xuICAgIGxldCBsb240MzI2OiBudW1iZXI7XG4gICAgbGV0IGxhdDQzMjY6IG51bWJlcjtcblxuICAgIGNvbnN0IGZlYXR1cmVJZCA9IGZlYXR1cmUgPyBmZWF0dXJlLnByb3BlcnRpZXMuaWQgOiBvbEdlb21ldHJ5Lm9sX3VpZDtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcblxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3Qob2xHZW9tZXRyeSwge1xuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHByb2plY3Rpb24sXG4gICAgICBkYXRhUHJvamVjdGlvbjogcHJvamVjdGlvblxuICAgIH0pIGFzIGFueTtcblxuICAgIGlmIChvbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xDaXJjbGUgfHwgcmFkaXVzKSB7XG4gICAgICBpZiAocmFkaXVzKSB7XG4gICAgICAgIHJhZCA9IHJhZGl1cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdlb21ldHJ5LnR5cGUgPSAnUG9pbnQnO1xuICAgICAgICBnZW9tZXRyeS5jb29yZGluYXRlcyA9IG9sR2VvbWV0cnkuZ2V0Q2VudGVyKCk7XG4gICAgICAgIGNvbnN0IGV4dGVudDQzMjYgPSB0cmFuc2Zvcm0oXG4gICAgICAgICAgW1xuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsyXSxcbiAgICAgICAgICAgIG9sR2VvbWV0cnkuZ2V0RmxhdENvb3JkaW5hdGVzKClbM11cbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb2plY3Rpb24sXG4gICAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICAgKTtcbiAgICAgICAgY2VudGVyNDMyNiA9IHRyYW5zZm9ybShcbiAgICAgICAgICBbXG4gICAgICAgICAgICBvbEdlb21ldHJ5LmdldEZsYXRDb29yZGluYXRlcygpWzBdLFxuICAgICAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKVsxXVxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgICAnRVBTRzo0MzI2J1xuICAgICAgICApO1xuICAgICAgICBsb240MzI2ID0gY2VudGVyNDMyNlswXTtcbiAgICAgICAgbGF0NDMyNiA9IGNlbnRlcjQzMjZbMV07XG4gICAgICAgIHJhZCA9IGdldERpc3RhbmNlKGNlbnRlcjQzMjYsIGV4dGVudDQzMjYpO1xuICAgICAgICB0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnNldFZhbHVlKE1hdGgucm91bmQocmFkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmFjdGl2ZURyYXdDb250cm9sLnJhZGl1c0RyYXdFbmQkLmdldFZhbHVlKCkpIHtcbiAgICAgIHJhZCA9IHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wucmFkaXVzRHJhd0VuZCQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBpZiAob2xHZW9tZXRyeSBpbnN0YW5jZW9mIE9sUG9pbnQpIHtcbiAgICAgIHBvaW50NDMyNiA9IHRyYW5zZm9ybShcbiAgICAgICAgb2xHZW9tZXRyeS5nZXRGbGF0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICAgcHJvamVjdGlvbixcbiAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICk7XG4gICAgICBsb240MzI2ID0gcG9pbnQ0MzI2WzBdO1xuICAgICAgbGF0NDMyNiA9IHBvaW50NDMyNlsxXTtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnVwZGF0ZSh7XG4gICAgICB0eXBlOiBGRUFUVVJFLFxuICAgICAgZ2VvbWV0cnksXG4gICAgICBwcm9qZWN0aW9uOiBwcm9qZWN0aW9uLmdldENvZGUoKSxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgaWQ6IGZlYXR1cmVJZCxcbiAgICAgICAgZHJhdzogb2xHZW9tZXRyeS5nZXQoJ19sYWJlbCcpLFxuICAgICAgICBsb25naXR1ZGU6IGxvbjQzMjYgPyBsb240MzI2IDogbnVsbCxcbiAgICAgICAgbGF0aXR1ZGU6IGxhdDQzMjYgPyBsYXQ0MzI2IDogbnVsbCxcbiAgICAgICAgcmFkOiByYWQgPyByYWQgOiBudWxsLFxuICAgICAgICBmb250U3R5bGU6IG9sR2VvbWV0cnkuZ2V0KCdmb250U3R5bGVfJyksXG4gICAgICAgIGRyYXdpbmdTdHlsZToge1xuICAgICAgICAgIGZpbGw6IG9sR2VvbWV0cnkuZ2V0KCdmaWxsQ29sb3JfJyksXG4gICAgICAgICAgc3Ryb2tlOiBvbEdlb21ldHJ5LmdldCgnc3Ryb2tlQ29sb3JfJylcbiAgICAgICAgfSxcbiAgICAgICAgb2Zmc2V0WDogb2xHZW9tZXRyeS5nZXQoJ29mZnNldFhfJyksXG4gICAgICAgIG9mZnNldFk6IG9sR2VvbWV0cnkuZ2V0KCdvZmZzZXRZXycpLFxuICAgICAgICBsYWJlbFR5cGU6IG9sR2VvbWV0cnkuZ2V0KCdsYWJlbFR5cGVfJyksXG4gICAgICAgIG1lYXN1cmVVbml0OiBvbEdlb21ldHJ5LmdldCgnbWVhc3VyZVVuaXRfJylcbiAgICAgIH0sXG4gICAgICBtZXRhOiB7XG4gICAgICAgIGlkOiBmZWF0dXJlSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnNldExheWVyRXh0ZW50KCk7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5wcmVkZWZpbmVkUmFkaXVzJC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5yYWRpdXNEcmF3RW5kJC5uZXh0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybSgpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGZpbGw6IFsnJ10sXG4gICAgICBzdHJva2U6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXR1cExheWVyKGlzTmV3TGF5ZXI/OiBib29sZWFuKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKERyYXdMYXllclBvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChsYWJlbDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuY29uZmlybUZsYWcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7IHNlbGVjdGVkOiBmYWxzZSB9KTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlID0gbmV3IEZlYXR1cmVTdG9yZTxGZWF0dXJlV2l0aERyYXc+KFtdLCB7XG4gICAgICAgICAgICBtYXA6IHRoaXMubWFwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UgPSBuZXcgT2xWZWN0b3JTb3VyY2UoKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5vcGFjaXR5ID0gMDtcbiAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICAgICAgICAgIHRoaXMuaW5pdFN0b3JlKGxhYmVsLCBpc05ld0xheWVyKTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdGhpcy5jcmVhdGVEcmF3Q29udHJvbChcbiAgICAgICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICAgICAgdGhpcy5zdHJva2VDb2xvcixcbiAgICAgICAgICAgIHRoaXMuc3Ryb2tlV2lkdGhcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0R2VvbWV0cnlUeXBlKHRoaXMuY3Vyckdlb21ldHJ5VHlwZSk7XG4gICAgICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICAgICAgICAgIHRoaXMuc3RvcmVzLnB1c2godGhpcy5hY3RpdmVTdG9yZSk7XG4gICAgICAgICAgdGhpcy5kcmF3Q29udHJvbHMucHVzaChbXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllci5pZCxcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2xcbiAgICAgICAgICBdKTtcbiAgICAgICAgICB0aGlzLmRyYXdDb250cm9sc0V2ZW50LmVtaXQodGhpcy5kcmF3Q29udHJvbHMpO1xuICAgICAgICAgIHRoaXMubGF5ZXJzSURFdmVudC5lbWl0KHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLmlkKTtcbiAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdOZXdMYXllciA9IGZhbHNlO1xuICAgICAgICAgIGlmICghdGhpcy5sYWJlbHNBcmVTaG93bikge1xuICAgICAgICAgICAgdGhpcy5vblRvZ2dsZUxhYmVscygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFjdGl2ZUxheWVyQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZWN0LnZhbHVlID0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXI7XG4gICAgICAgICAgdGhpcy5zZWxlY3Quc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAyNTApO1xuICB9XG5cbiAgLy8gSFRNTCB1c2VyIGludGVyYWN0aW9uc1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIHRoZSBzZWxlY3RlZCBkcmF3aW5nXG4gICAqL1xuICBlZGl0TGFiZWxEcmF3aW5nKGZlYXR1cmUpIHtcbiAgICBjb25zdCBvbEdlb21ldHJ5RmVhdHVyZSA9IGZlYXR1cmVUb09sKFxuICAgICAgZmVhdHVyZSxcbiAgICAgIHRoaXMubWFwLm9sLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpXG4gICAgKTtcbiAgICB0aGlzLm9wZW5EcmF3RGlhbG9nKG9sR2VvbWV0cnlGZWF0dXJlLCBmYWxzZSk7XG4gIH1cblxuICBvcGVuU2hvcmN1dHNEaWFsb2coKSB7XG4gICAgdGhpcy5kaWFsb2cub3BlbihEcmF3U2hvcmN1dHNDb21wb25lbnQpO1xuICB9XG5cbiAgZGVsZXRlRHJhd2luZ3MoKSB7XG4gICAgdGhpcy5hY3RpdmVTdG9yZS5kZWxldGVNYW55KHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoc2VsZWN0ZWRGZWF0dXJlKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZVxuICAgICAgICAuZ2V0RmVhdHVyZXMoKVxuICAgICAgICAuZm9yRWFjaCgoZHJhd2luZ0xheWVyRmVhdHVyZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZHJhd2luZ0xheWVyRmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlLnByb3BlcnRpZXMuaWQgPT09IGdlb21ldHJ5Lm9sX3VpZCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXJTb3VyY2UucmVtb3ZlRmVhdHVyZShkcmF3aW5nTGF5ZXJGZWF0dXJlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlSGVpZ2h0VGFibGUoKTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnNldExheWVyRXh0ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgdG9nZ2xlcyB0aGUgbGFiZWxzIHRvZ2dsZVxuICAgKi9cbiAgb25Ub2dnbGVMYWJlbHMoKSB7XG4gICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnRvZ2dsZUxhYmVsc0FyZVNob3duKCk7XG4gICAgdGhpcy5sYWJlbHNBcmVTaG93biA9ICF0aGlzLmxhYmVsc0FyZVNob3duO1xuICAgIHRoaXMuaWNvblxuICAgICAgPyB0aGlzLmVsZW1lbnRTdHlsZSh0aGlzLmxhYmVsc0FyZVNob3duLCB0cnVlKVxuICAgICAgOiB0aGlzLmVsZW1lbnRTdHlsZSh0aGlzLmxhYmVsc0FyZVNob3duLCBmYWxzZSk7XG4gICAgdGhpcy5jcmVhdGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHRvZ2dsZXMgdGhlIERyYXcgY29udHJvbCBpcyB0b2dnbGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Ub2dnbGVEcmF3Q29udHJvbCh0b2dnbGVJc0NoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICB0b2dnbGVJc0NoZWNrZWQgPyB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCkgOiB0aGlzLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgb25Ub2dnbGVGcmVlaGFuZE1vZGUoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmlzQ2lyY2xlKCkgJiYgIWV2ZW50LmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuaXNwcmVkZWZpbmVkUmFkaXVzJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5jaGFuZ2VSYWRpdXModGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xJbnRlcmFjdGlvblN0eWxlKFxuICAgICAgICBjcmVhdGVJbnRlcmFjdGlvblN0eWxlKFxuICAgICAgICAgIHRoaXMuZmlsbENvbG9yLFxuICAgICAgICAgIHRoaXMuc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgdGhpcy5zdHJva2VXaWR0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5pc3ByZWRlZmluZWRSYWRpdXMkLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmZyZWVoYW5kTW9kZSA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5mcmVlaGFuZCQubmV4dChldmVudC5jaGVja2VkKTtcbiAgICB0aGlzLnRvZ2dsZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvLyBVc2VyIGNoYW5nZXMgcHJvcGVydGllcyBvZiBhIGRyYXdpbmcgZWxlbWVudFxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBjdXJyZW50IGxheWVyIHdpdGggdGhlIGN1cnJlbnQgc3RvcmUgYW5kIHRoZSBjdXJyZW50IGxheWVyU291cmNlXG4gICAqL1xuXG4gIHB1YmxpYyBvbkxheWVyQ2hhbmdlKGN1cnJMYXllcj86IFZlY3RvckxheWVyKSB7XG4gICAgaWYgKGN1cnJMYXllcikge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5zdGF0ZS51cGRhdGVBbGwoeyBzZWxlY3RlZDogZmFsc2UgfSk7XG4gICAgICB0aGlzLmlzQ3JlYXRpbmdOZXdMYXllciA9IGZhbHNlO1xuICAgICAgdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIub3BhY2l0eSA9IDA7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllciA9IGN1cnJMYXllcjtcbiAgICAgIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLm9wYWNpdHkgPSAxO1xuICAgICAgdGhpcy5kZWFjdGl2YXRlRHJhd0NvbnRyb2woKTtcbiAgICAgIGlmICghdGhpcy5sYWJlbHNBcmVTaG93bikge1xuICAgICAgICB0aGlzLm9uVG9nZ2xlTGFiZWxzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlID0gdGhpcy5zdG9yZXMuZmluZChcbiAgICAgICAgKHN0b3JlKSA9PiBzdG9yZS5sYXllci5pZCA9PT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWRcbiAgICAgICk7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sID0gdGhpcy5kcmF3Q29udHJvbHMuZmluZChcbiAgICAgICAgKGRjKSA9PiBkY1swXSA9PT0gdGhpcy5hY3RpdmVEcmF3aW5nTGF5ZXIuaWRcbiAgICAgIClbMV07XG4gICAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllclNvdXJjZSA9XG4gICAgICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wub2xEcmF3aW5nTGF5ZXJTb3VyY2U7XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnNldEdlb21ldHJ5VHlwZSh0aGlzLmN1cnJHZW9tZXRyeVR5cGUpO1xuICAgICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldHVwTGF5ZXIodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlTGF5ZXJDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURyYXdpbmdMYXllcik7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlTGF5ZXIobmV3VGl0bGU/LCBpc05ld0xheWVyPykge1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5hbGxMYXllcnMpIHtcbiAgICAgIGxldCBudW1iZXJJZCA9IE51bWJlcihsYXllci5pZC5yZXBsYWNlKCdpZ28tZHJhdy1sYXllcicsICcnKSk7XG4gICAgICB0aGlzLmxheWVyQ291bnRlcklEID0gTWF0aC5tYXgobnVtYmVySWQsIHRoaXMubGF5ZXJDb3VudGVySUQpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZURyYXdpbmdMYXllciA9IG5ldyBWZWN0b3JMYXllcih7XG4gICAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgICBpZDogJ2lnby1kcmF3LWxheWVyJyArICsrdGhpcy5sYXllckNvdW50ZXJJRCxcbiAgICAgIHRpdGxlOiBpc05ld0xheWVyXG4gICAgICAgID8gbmV3VGl0bGVcbiAgICAgICAgOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3LmRyYXdpbmcnKSxcbiAgICAgIHpJbmRleDogMjAwLFxuICAgICAgc291cmNlOiBuZXcgRmVhdHVyZURhdGFTb3VyY2UoKSxcbiAgICAgIHN0eWxlOiAoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmNyZWF0ZUluZGl2aWR1YWxFbGVtZW50U3R5bGUoXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgIHRoaXMubGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFgnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WScpLFxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgICAgdGhpcy5pY29uXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgc2hvd0luTGF5ZXJMaXN0OiB0cnVlLFxuICAgICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICAgIGJyb3dzYWJsZTogZmFsc2UsXG4gICAgICB3b3Jrc3BhY2U6IHtcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeUJpbmRTdG9yZUxheWVyKHRoaXMuYWN0aXZlU3RvcmUsIHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyKTtcblxuICAgIHRyeUFkZExvYWRpbmdTdHJhdGVneShcbiAgICAgIHRoaXMuYWN0aXZlU3RvcmUsXG4gICAgICBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcbiAgICAgICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmVcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRyeUFkZFNlbGVjdGlvblN0cmF0ZWd5KFxuICAgICAgdGhpcy5hY3RpdmVTdG9yZSxcbiAgICAgIG5ldyBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneSh7XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbi5Ob25lLFxuICAgICAgICBtYW55OiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5hY3RpdmVTdG9yZS5sYXllci52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLnNvdXJjZS5vbC5vbihcbiAgICAgICdyZW1vdmVmZWF0dXJlJyxcbiAgICAgIChldmVudDogT2xWZWN0b3JTb3VyY2VFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBvbEdlb21ldHJ5ID0gZXZlbnQuZmVhdHVyZS5nZXRHZW9tZXRyeSgpO1xuICAgICAgICB0aGlzLmNsZWFyTGFiZWxzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgY29sb3IgaW4gYSBjb2xvciBwaWNrZXJcbiAgICogQHBhcmFtIGxhYmVsc0FyZVNob3duIHdoZXRlciB0aGUgbGFiZWxzIGFyZSBzaG93biBvciBub3RcbiAgICogQHBhcmFtIGlzQW5JY29uIHdoZXRlciB0aGUgZmVhdHVyZSBpcyBhbiBpY29uIG9yIG5vdFxuICAgKiBAcGFyYW0gZmlsbENvbG9yIHdoaWNoIGlzIHRoZSBmaWxsaW5nIGNvbG9yXG4gICAqIEBwYXJhbSBzdHJva2VDb2xvciB3aGljaCBpcyB0aGUgc3Ryb2tlIGNvbG9yXG4gICAqL1xuICBvbkNvbG9yQ2hhbmdlKFxuICAgIGxhYmVsc0FyZVNob3duOiBib29sZWFuLFxuICAgIGlzQW5JY29uOiBib29sZWFuLFxuICAgIGZpbGxDb2xvcjogc3RyaW5nLFxuICAgIHN0cm9rZUNvbG9yOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMCAmJiAhaXNBbkljb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihvbEZlYXR1cmUsIGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IpO1xuXG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuYWN0aXZlU3RvcmVcbiAgICAgICAgICAuYWxsKClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5tZXRhLmlkID09PSBvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmRyYXdpbmdTdHlsZS5maWxsID0gb2xGZWF0dXJlLmdldCgnZmlsbENvbG9yXycpO1xuICAgICAgICBlbnRpdHkucHJvcGVydGllcy5kcmF3aW5nU3R5bGUuc3Ryb2tlID0gb2xGZWF0dXJlLmdldCgnc3Ryb2tlQ29sb3JfJyk7XG4gICAgICAgIHRoaXMuYWN0aXZlU3RvcmUudXBkYXRlKGVudGl0eSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmVsZW1lbnRTdHlsZShsYWJlbHNBcmVTaG93biwgaXNBbkljb24pO1xuICAgIHRoaXMuY3JlYXRlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBmb250IHNpemUgb3IvYW5kIHN0eWxlXG4gICAqIEBwYXJhbSBsYWJlbHNBcmVTaG93biB3aGV0ZXIgdGhlIGxhYmVscyBhcmUgc2hvd24gb3Igbm90XG4gICAqIEBwYXJhbSBzaXplIHRoZSBzaXplIG9mIHRoZSBmb250XG4gICAqIEBwYXJhbSBzdHlsZSB0aGUgc3R5bGUgb2YgdGhlIGZvbnRcbiAgICovXG5cbiAgb25Gb250Q2hhbmdlKGxhYmVsc0FyZVNob3duOiBib29sZWFuLCBzaXplOiBzdHJpbmcsIHN0eWxlOiBGb250VHlwZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUuZm9yRWFjaCgoZmVhdHVyZSkgPT4ge1xuICAgICAgICBsZXQgb2xGZWF0dXJlID0gZmVhdHVyZVRvT2woXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICB0aGlzLm1hcC5vbC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvbnRTaXplQW5kU3R5bGUob2xGZWF0dXJlLCBzaXplLCBzdHlsZSk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuYWN0aXZlU3RvcmVcbiAgICAgICAgICAuYWxsKClcbiAgICAgICAgICAuZmluZCgoZSkgPT4gZS5tZXRhLmlkID09PSBvbEZlYXR1cmUuZ2V0SWQoKSk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLmZvbnRTdHlsZSA9IG9sRmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZV8nKTtcbiAgICAgICAgdGhpcy5hY3RpdmVTdG9yZS51cGRhdGUoZW50aXR5KTtcbiAgICAgICAgb2xGZWF0dXJlID0gdGhpcy5hY3RpdmVTdG9yZS5sYXllci5vbFxuICAgICAgICAgIC5nZXRTb3VyY2UoKVxuICAgICAgICAgIC5nZXRGZWF0dXJlcygpXG4gICAgICAgICAgLmZpbmQoKGYpID0+IGYuZ2V0SWQoKSA9PT0gZW50aXR5Lm1ldGEuaWQpO1xuICAgICAgICBvbEZlYXR1cmUuc2V0UHJvcGVydGllcyh7IGZvbnRTdHlsZTogZW50aXR5LnByb3BlcnRpZXMuZm9udFN0eWxlIH0pO1xuICAgICAgICBvbEZlYXR1cmUuY2hhbmdlZCgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZm9udFNpemUgPSBzaXplO1xuICAgICAgdGhpcy5mb250U3R5bGUgPSBzdHlsZTtcblxuICAgICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEZvbnRTaXplKHNpemUpO1xuICAgICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEZvbnRTdHlsZShzdHlsZSk7XG5cbiAgICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgY2hhbmdlcyB0aGUgdmFsdWUgb2YgdGhlIGhvcml6b250YWwvdmVydGljYWwgb2Zmc2V0XG4gICAqIEBwYXJhbSBsYWJlbHNBcmVTaG93biB3aGV0ZXIgdGhlIGxhYmVscyBhcmUgc2hvd24gb3Igbm90XG4gICAqIEBwYXJhbSBvZmZzZXRYIGhvcml6b250YWwgb2Zmc2V0IG9mIHRoZSBsYWJlbFxuICAgKiBAcGFyYW0gb2Zmc2V0WSB2ZXJ0aWNhbCBvZmZzZXQgb2YgdGhlIGxhYmVsXG4gICAqL1xuXG4gIG9uT2Zmc2V0TGFiZWxDaGFuZ2UoXG4gICAgbGFiZWxzQXJlU2hvd246IGJvb2xlYW4sXG4gICAgb2Zmc2V0WDogbnVtYmVyLFxuICAgIG9mZnNldFk6IG51bWJlclxuICApIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmZvckVhY2goKGZlYXR1cmUpID0+IHtcbiAgICAgICAgbGV0IG9sRmVhdHVyZSA9IGZlYXR1cmVUb09sKFxuICAgICAgICAgIGZlYXR1cmUsXG4gICAgICAgICAgdGhpcy5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKS5nZXRDb2RlKClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy51cGRhdGVPZmZzZXQob2xGZWF0dXJlLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gdGhpcy5hY3RpdmVTdG9yZVxuICAgICAgICAgIC5hbGwoKVxuICAgICAgICAgIC5maW5kKChlKSA9PiBlLm1ldGEuaWQgPT09IG9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgICAgZW50aXR5LnByb3BlcnRpZXMub2Zmc2V0WCA9IG9sRmVhdHVyZS5nZXQoJ29mZnNldFhfJyk7XG4gICAgICAgIGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFkgPSBvbEZlYXR1cmUuZ2V0KCdvZmZzZXRZXycpO1xuICAgICAgICB0aGlzLmFjdGl2ZVN0b3JlLnVwZGF0ZShlbnRpdHkpO1xuICAgICAgICBvbEZlYXR1cmUgPSB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sXG4gICAgICAgICAgLmdldFNvdXJjZSgpXG4gICAgICAgICAgLmdldEZlYXR1cmVzKClcbiAgICAgICAgICAuZmluZCgoZikgPT4gZi5nZXRJZCgpID09PSBlbnRpdHkubWV0YS5pZCk7XG4gICAgICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKHtcbiAgICAgICAgICBvZmZzZXRYOiBlbnRpdHkucHJvcGVydGllcy5vZmZzZXRYLFxuICAgICAgICAgIG9mZnNldFk6IGVudGl0eS5wcm9wZXJ0aWVzLm9mZnNldFlcbiAgICAgICAgfSk7XG4gICAgICAgIG9sRmVhdHVyZS5jaGFuZ2VkKCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZWxlbWVudFN0eWxlKGxhYmVsc0FyZVNob3duKTtcbiAgICB9XG4gIH1cblxuICBvbkljb25DaGFuZ2UoZXZlbnQ/KSB7XG4gICAgdGhpcy5pY29uID0gZXZlbnQ7XG4gICAgdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLnNldEljb24odGhpcy5pY29uKTtcbiAgICB0aGlzLmVsZW1lbnRTdHlsZSh0cnVlLCB0aGlzLmljb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYSBuZXcgZ2VvbWV0cnkgdHlwZVxuICAgKiBAcGFyYW0gZ2VvbWV0cnlUeXBlIHRoZSBnZW9tZXRyeSB0eXBlIHNlbGVjdGVkIGJ5IHRoZSB1c2VyXG4gICAqL1xuICBvbkdlb21ldHJ5VHlwZUNoYW5nZShnZW9tZXRyeVR5cGU6IFR5cGUpIHtcbiAgICB0aGlzLmN1cnJHZW9tZXRyeVR5cGUgPSBnZW9tZXRyeVR5cGU7XG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5zZXRHZW9tZXRyeVR5cGUoZ2VvbWV0cnlUeXBlKTtcbiAgICB0aGlzLmZyZWVoYW5kTW9kZVxuICAgICAgPyB0aGlzLm9uVG9nZ2xlRnJlZWhhbmRNb2RlKHsgY2hlY2tlZDogdHJ1ZSB9KVxuICAgICAgOiB0aGlzLm9uVG9nZ2xlRnJlZWhhbmRNb2RlKHsgY2hlY2tlZDogZmFsc2UgfSk7XG4gICAgdGhpcy50b2dnbGVEcmF3Q29udHJvbCgpO1xuICB9XG5cbiAgLy8gVXBkYXRlcyB0aGUgcHJvcGVydGllcyBvZiBvbEZlYXR1cmUgaW5wdXR0ZWRcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBsYWJlbCBvZiBhIGdlb21ldHJ5IHdoZW4gYSBsYWJlbCBpcyBlbnRlcmVkIGluIGEgZGlhbG9nIGJveFxuICAgKiBAcGFyYW0gT2xGZWF0dXJlIHRoZSBmZWF0dXJlXG4gICAqIEBwYXJhbSBsYWJlbCB0aGUgbGFiZWxcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlTGFiZWxPZk9sR2VvbWV0cnkoT2xGZWF0dXJlLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgT2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIF9sYWJlbDogbGFiZWxcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9udFNpemVBbmRTdHlsZShcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBmb250U2l6ZTogc3RyaW5nLFxuICAgIGZvbnRTdHlsZTogc3RyaW5nXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBmb250U3R5bGVfOiBgJHtmb250U2l6ZX1weCAke2ZvbnRTdHlsZX1gXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbGxBbmRTdHJva2VDb2xvcihcbiAgICBvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PixcbiAgICBmaWxsQ29sb3I6IHN0cmluZyxcbiAgICBzdHJva2VDb2xvcjogc3RyaW5nXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBmaWxsQ29sb3JfOiBmaWxsQ29sb3IsXG4gICAgICAgIHN0cm9rZUNvbG9yXzogc3Ryb2tlQ29sb3JcbiAgICAgIH0sXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlT2Zmc2V0KFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIG9mZnNldFg6IG51bWJlcixcbiAgICBvZmZzZXRZOiBudW1iZXJcbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIG9mZnNldFhfOiBvZmZzZXRYLFxuICAgICAgICBvZmZzZXRZXzogb2Zmc2V0WVxuICAgICAgfSxcbiAgICAgIHRydWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMYWJlbFR5cGUoXG4gICAgb2xGZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sXG4gICAgdHlwZU9mTGFiZWw6IExhYmVsVHlwZSB8IFtMYWJlbFR5cGUsIExhYmVsVHlwZV1cbiAgKSB7XG4gICAgb2xGZWF0dXJlLnNldFByb3BlcnRpZXMoXG4gICAgICB7XG4gICAgICAgIGxhYmVsVHlwZV86IHR5cGVPZkxhYmVsXG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lYXN1cmVVbml0KFxuICAgIG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+LFxuICAgIG1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCB8IE1lYXN1cmVBcmVhVW5pdCB8IENvb3JkaW5hdGVzVW5pdCB8IFtdXG4gICkge1xuICAgIG9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKFxuICAgICAge1xuICAgICAgICBtZWFzdXJlVW5pdF86IG1lYXN1cmVVbml0XG4gICAgICB9LFxuICAgICAgdHJ1ZVxuICAgICk7XG4gIH1cblxuICAvLyBVcGRhdGVzIHZhbHVlcyBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBvbiB0aGUgSFRNTCB2aWV3XG5cbiAgZ2V0RmVhdHVyZUZvbnRTaXplKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZm9udFN0eWxlXG4gICAgICAgICAgLnNwbGl0KCcgJylbMF1cbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcbiAgICAgIDogJzE1JztcbiAgfVxuXG4gIGdldEZlYXR1cmVGb250U3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZm9udFN0eWxlLnN1YnN0cmluZyhcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZm9udFN0eWxlLmluZGV4T2YoJyAnKSArIDFcbiAgICAgICAgKVxuICAgICAgOiBGb250VHlwZS5BcmlhbDtcbiAgfVxuXG4gIGdldEZlYXR1cmVGaWxsQ29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLmZpbGxcbiAgICAgIDogJ3JnYmEoMjU1LDI1NSwyNTUsMC40KSc7XG4gIH1cblxuICBnZXRGZWF0dXJlU3Ryb2tlQ29sb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGZWF0dXJlcyQudmFsdWUubGVuZ3RoID4gMFxuICAgICAgPyB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlWzBdLnByb3BlcnRpZXMuZHJhd2luZ1N0eWxlLnN0cm9rZVxuICAgICAgOiAncmdiYSgxNDMsNyw3LDEpJztcbiAgfVxuXG4gIGdldEZlYXR1cmVPZmZzZXRYKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLm9mZnNldFhcbiAgICAgIDogdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmdldE9mZnNldFgoKTtcbiAgfVxuXG4gIGdldEZlYXR1cmVPZmZzZXRZKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmVhdHVyZXMkLnZhbHVlLmxlbmd0aCA+IDBcbiAgICAgID8gdGhpcy5zZWxlY3RlZEZlYXR1cmVzJC52YWx1ZVswXS5wcm9wZXJ0aWVzLm9mZnNldFlcbiAgICAgIDogJzAnO1xuICB9XG5cbiAgZ2V0IGFsbEZvbnRTdHlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKEZvbnRUeXBlKTtcbiAgfVxuXG4gIGdldCBhbGxMYXllcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmxheWVycy5maWx0ZXIoKGxheWVyKSA9PlxuICAgICAgU3RyaW5nKGxheWVyLmlkKS5pbmNsdWRlcygnaWdvLWRyYXctbGF5ZXInKVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVIZWlnaHRUYWJsZSgpIHtcbiAgICAvLyBDaGVjayB0aGUgYW1vdW50IG9mIHJvd3MgYXMgYSBwb3NzaWJsZSBhbHRlcm5hdGl2ZVxuICAgIHRoaXMubnVtYmVyT2ZEcmF3aW5ncyA9IHRoaXMuYWN0aXZlU3RvcmUuY291bnQkLmdldFZhbHVlKCk7XG4gICAgdGhpcy5udW1iZXJPZkRyYXdpbmdzID4gMTBcbiAgICAgID8gKHRoaXMudGFibGVUZW1wbGF0ZS50YWJsZUhlaWdodCA9ICczNXZoJylcbiAgICAgIDogKHRoaXMudGFibGVUZW1wbGF0ZS50YWJsZUhlaWdodCA9ICdhdXRvJyk7XG4gIH1cblxuICB1cGRhdGVBY3RpdmVMYXllcigpIHtcbiAgICBsZXQgY3VyckxheWVyID0gdGhpcy5hbGxMYXllcnMuZmluZChcbiAgICAgIChsYXllcikgPT4gbGF5ZXIudGl0bGUgPT09IHRoaXMuYWN0aXZlRHJhd2luZ0xheWVyLnRpdGxlXG4gICAgKTtcbiAgICByZXR1cm4gY3VyckxheWVyID8gY3VyckxheWVyIDogdGhpcy5hbGxMYXllcnNbMF07XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kc1xuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSB0aGUgY29ycmVjdCBjb250cm9sXG4gICAqL1xuICBwcml2YXRlIHRvZ2dsZURyYXdDb250cm9sKCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gICAgdGhpcy5hY3RpdmF0ZURyYXdDb250cm9sKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHRvb2x0aXBzIG9mIGFuIE9MIGdlb21ldHJ5XG4gICAqIEBwYXJhbSBvbEdlb21ldHJ5IE9MIGdlb21ldHJ5IHdpdGggdG9vbHRpcHNcbiAgICovXG4gIHByaXZhdGUgY2xlYXJMYWJlbHNPZk9sR2VvbWV0cnkob2xHZW9tZXRyeSkge1xuICAgIGdldFRvb2x0aXBzT2ZPbEdlb21ldHJ5KG9sR2VvbWV0cnkpLmZvckVhY2goXG4gICAgICAob2xUb29sdGlwOiBPbE92ZXJsYXkgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKG9sVG9vbHRpcCAmJiBvbFRvb2x0aXAuZ2V0TWFwKCkpIHtcbiAgICAgICAgICB0aGlzLm1hcC5vbC5yZW1vdmVPdmVybGF5KG9sVG9vbHRpcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBmZWF0dXJlIGluIHRoZSBzdG9yZVxuICAgKiBAcGFyYW0gZW50aXR5IHRoZSBlbnRpdHkgdG8gcmVwbGFjZVxuICAgKiBAcGFyYW0gb2xHZW9tZXRyeSB0aGUgbmV3IGdlb21ldHJ5IHRvIGluc2VydCBpbiB0aGUgc3RvcmVcbiAgICovXG4gIHByaXZhdGUgcmVwbGFjZUZlYXR1cmVJblN0b3JlKFxuICAgIGVudGl0eSxcbiAgICBvbEdlb21ldHJ5OiBPbEdlb21ldHJ5LFxuICAgIHJhZGl1cz86IG51bWJlclxuICApIHtcbiAgICB0aGlzLmFjdGl2ZVN0b3JlLmRlbGV0ZShlbnRpdHkpO1xuICAgIHRoaXMub25EcmF3RW5kKG9sR2VvbWV0cnksIHJhZGl1cyk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZSB0aGUgYWN0aXZlIGRyYXcgY29udHJvbFxuICAgKi9cbiAgcHJpdmF0ZSBkZWFjdGl2YXRlRHJhd0NvbnRyb2woKSB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZURyYXdDb250cm9sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHJhd0VuZCQkKSB7XG4gICAgICB0aGlzLmRyYXdFbmQkJC51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xNYXAodW5kZWZpbmVkKTtcbiAgICB0aGlzLmRyYXdDb250cm9sSXNBY3RpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSBhIGdpdmVuIGNvbnRyb2xcbiAgICovXG4gIHByaXZhdGUgYWN0aXZhdGVEcmF3Q29udHJvbCgpIHtcbiAgICB0aGlzLmRyYXdDb250cm9sSXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZHJhd0NvbnRyb2xJc0FjdGl2ZSA9IHRydWU7XG4gICAgdGhpcy5kcmF3RW5kJCQgPSB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmVuZCQuc3Vic2NyaWJlKFxuICAgICAgKG9sR2VvbWV0cnk6IE9sR2VvbWV0cnkpID0+IHtcbiAgICAgICAgdGhpcy5vcGVuRHJhd0RpYWxvZyhvbEdlb21ldHJ5LCB0cnVlKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5tb2RpZnkkLnN1YnNjcmliZSgob2xHZW9tZXRyeTogT2xHZW9tZXRyeSkgPT4ge1xuICAgICAgdGhpcy5vbk1vZGlmeURyYXcob2xHZW9tZXRyeSk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuZHJhd1NlbGVjdCQkKSB7XG4gICAgICB0aGlzLmRyYXdTZWxlY3QkJCA9IHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2VsZWN0JC5zdWJzY3JpYmUoXG4gICAgICAgIChvbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PikgPT4ge1xuICAgICAgICAgIHRoaXMub3BlbkRyYXdEaWFsb2cob2xGZWF0dXJlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xNYXAodGhpcy5tYXAub2wsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdldCB0aGUgZ2VvbWV0cnkgb2YgZGVzaWduXG4gICAqXG4gICAqL1xuXG4gIGlzUG9pbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuZ2V0R2VvbWV0cnlUeXBlKCkgPT09IHRoaXMuZ2VvbWV0cnlUeXBlLlBvaW50O1xuICB9XG5cbiAgaXNMaW5lU3RyaW5nKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLmdldEdlb21ldHJ5VHlwZSgpID09PSB0aGlzLmdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nXG4gICAgKTtcbiAgfVxuXG4gIGlzUG9seWdvbigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5nZXRHZW9tZXRyeVR5cGUoKSA9PT0gdGhpcy5nZW9tZXRyeVR5cGUuUG9seWdvblxuICAgICk7XG4gIH1cblxuICBpc0NpcmNsZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hY3RpdmVEcmF3Q29udHJvbC5nZXRHZW9tZXRyeVR5cGUoKSA9PT0gdGhpcy5nZW9tZXRyeVR5cGUuQ2lyY2xlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9uY3Rpb24gdG8gcHJlZGVmaW5lIHRoZSByYWRpdXMgb2YgdGhlIHVzZXJcbiAgICpcbiAgICovXG5cbiAgY2hhbmdlUmFkaXVzKHJhZGl1czogbnVtYmVyKSB7XG4gICAgbGV0IHJhZGl1c01ldGVyczogbnVtYmVyO1xuXG4gICAgaWYgKHJhZGl1cykge1xuICAgICAgdGhpcy5tZWFzdXJlVW5pdCA9PT0gTWVhc3VyZUxlbmd0aFVuaXQuTWV0ZXJzXG4gICAgICAgID8gKHJhZGl1c01ldGVycyA9IHJhZGl1cylcbiAgICAgICAgOiAocmFkaXVzTWV0ZXJzID0gcmFkaXVzICogMTAwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhZGl1c01ldGVycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludFN0eWxlID0gKGZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PiwgcmVzb2x1dGlvbjogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBnZW9tID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpIGFzIE9sUG9pbnQ7XG4gICAgICBjb25zdCBjb29yZGluYXRlcyA9IG9scHJvai50cmFuc2Zvcm0oXG4gICAgICAgIGdlb20uZ2V0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICAgdGhpcy5tYXAucHJvamVjdGlvbixcbiAgICAgICAgJ0VQU0c6NDMyNidcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJhZGl1cyA9XG4gICAgICAgIHJhZGl1c01ldGVycyAvIE1hdGguY29zKChNYXRoLlBJIC8gMTgwKSAqIGNvb3JkaW5hdGVzWzFdKSAvIHJlc29sdXRpb247XG4gICAgICB0aGlzLmFjdGl2ZURyYXdDb250cm9sLnByZWRlZmluZWRSYWRpdXMkLm5leHQocmFkaXVzTWV0ZXJzKTtcbiAgICAgIHJldHVybiBuZXcgT2xTdHlsZS5TdHlsZSh7XG4gICAgICAgIGltYWdlOiBuZXcgT2xTdHlsZS5DaXJjbGUoe1xuICAgICAgICAgIHJhZGl1czogcmFkaXVzLFxuICAgICAgICAgIHN0cm9rZTogbmV3IE9sU3R5bGUuU3Ryb2tlKHtcbiAgICAgICAgICAgIHdpZHRoOiAxLFxuICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDE0Myw3LDcsMSknXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZmlsbDogbmV3IE9sU3R5bGUuRmlsbCh7XG4gICAgICAgICAgICBjb2xvcjogJ3JnYmEoMjU1LDI1NSwyNTUsMC40KSdcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMuYWN0aXZlRHJhd0NvbnRyb2wuc2V0T2xJbnRlcmFjdGlvblN0eWxlKHBvaW50U3R5bGUpO1xuICAgIHRoaXMudG9nZ2xlRHJhd0NvbnRyb2woKTtcbiAgfVxuXG4gIG9uTWVhc3VyZVVuaXRDaGFuZ2Uoc2VsZWN0ZWRNZWFzdXJlVW5pdDogTWVhc3VyZUxlbmd0aFVuaXQpIHtcbiAgICBpZiAoc2VsZWN0ZWRNZWFzdXJlVW5pdCA9PT0gdGhpcy5tZWFzdXJlVW5pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1lYXN1cmVVbml0ID0gc2VsZWN0ZWRNZWFzdXJlVW5pdDtcbiAgICAgIHRoaXMubWVhc3VyZVVuaXQgPT09IE1lYXN1cmVMZW5ndGhVbml0Lk1ldGVyc1xuICAgICAgICA/IHRoaXMucmFkaXVzRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5yYWRpdXNGb3JtQ29udHJvbC52YWx1ZSAqIDEwMDApXG4gICAgICAgIDogdGhpcy5yYWRpdXNGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnJhZGl1c0Zvcm1Db250cm9sLnZhbHVlIC8gMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlcyB0aGUgc3R5bGUgb2YgdGhlIGZlYXR1cmUgc3RvcmVkXG4gICAqL1xuICBwcml2YXRlIGVsZW1lbnRTdHlsZShsYWJlbHNBcmVTaG93bjogYm9vbGVhbiwgaXNBbkljb24/KSB7XG4gICAgaWYgKGlzQW5JY29uKSB7XG4gICAgICB0aGlzLmFjdGl2ZVN0b3JlLmxheWVyLm9sLnNldFN0eWxlKChmZWF0dXJlLCByZXNvbHV0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyYXdTdHlsZVNlcnZpY2UuY3JlYXRlSW5kaXZpZHVhbEVsZW1lbnRTdHlsZShcbiAgICAgICAgICBmZWF0dXJlLFxuICAgICAgICAgIHJlc29sdXRpb24sXG4gICAgICAgICAgbGFiZWxzQXJlU2hvd24sXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ2ZvbnRTdHlsZScpLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5maWxsLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdkcmF3aW5nU3R5bGUnKS5zdHJva2UsXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFgnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnb2Zmc2V0WScpLFxuICAgICAgICAgIHRoaXMubWFwLnByb2plY3Rpb24sXG4gICAgICAgICAgdGhpcy5pY29uXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmVTdG9yZS5sYXllci5vbC5zZXRTdHlsZSgoZmVhdHVyZSwgcmVzb2x1dGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3U3R5bGVTZXJ2aWNlLmNyZWF0ZUluZGl2aWR1YWxFbGVtZW50U3R5bGUoXG4gICAgICAgICAgZmVhdHVyZSxcbiAgICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICAgIGxhYmVsc0FyZVNob3duLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdmb250U3R5bGUnKSxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuZmlsbCxcbiAgICAgICAgICBmZWF0dXJlLmdldCgnZHJhd2luZ1N0eWxlJykuc3Ryb2tlLFxuICAgICAgICAgIGZlYXR1cmUuZ2V0KCdvZmZzZXRYJyksXG4gICAgICAgICAgZmVhdHVyZS5nZXQoJ29mZnNldFknKSxcbiAgICAgICAgICB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFJhZGl1cyhvbEdlb21ldHJ5KTogbnVtYmVyIHtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRMZW5ndGgob2xHZW9tZXRyeSk7XG4gICAgcmV0dXJuIE51bWJlcihsZW5ndGggLyAoMiAqIE1hdGguUEkpKTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGRpdiBjbGFzcz1cImdlb21ldHJ5LXR5cGUtdG9nZ2xlIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgICAoY2hhbmdlKT1cIm9uR2VvbWV0cnlUeXBlQ2hhbmdlKCRldmVudC52YWx1ZSlcIlxuICAgICAgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2ludFwiXG4gICAgPlxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCJnZW9tZXRyeVR5cGUuUG9pbnRcIj5cbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLlBvaW50IHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nXCI+XG4gICAgICAgIHt7ICdpZ28uZ2VvLmRyYXcuJyArIGdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5Qb2x5Z29uXCI+XG4gICAgICAgIHt7ICdpZ28uZ2VvLmRyYXcuJyArIGdlb21ldHJ5VHlwZS5Qb2x5Z29uIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxuXG4gICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImdlb21ldHJ5VHlwZS5DaXJjbGVcIj5cbiAgICAgICAge3sgJ2lnby5nZW8uZHJhdy4nICsgZ2VvbWV0cnlUeXBlLkNpcmNsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiZHJhdy1vcHRpb25zIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgIFtkaXNhYmxlZF09XCJkcmF3Q29udHJvbElzRGlzYWJsZWRcIlxuICAgICAgW2NoZWNrZWRdPVwiZHJhd0NvbnRyb2xJc0FjdGl2ZVwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlRHJhd0NvbnRyb2woJGV2ZW50LmNoZWNrZWQpXCJcbiAgICA+XG4gICAgICB7eyAnaWdvLmdlby5kcmF3LmRyYXdDb250cm9sJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cblxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICBbY2hlY2tlZF09XCJsYWJlbHNBcmVTaG93blwiXG4gICAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXG4gICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlTGFiZWxzKClcIlxuICAgID5cbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcudG9nZ2xlTWFwVG9vbHRpcHMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuXG4gICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICpuZ0lmPVwiIWlzUG9pbnQoKVwiXG4gICAgICBbY2hlY2tlZF09XCJmcmVlaGFuZE1vZGVcIlxuICAgICAgW2xhYmVsUG9zaXRpb25dPVwiJ2JlZm9yZSdcIlxuICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZUZyZWVoYW5kTW9kZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICB7eyAnaWdvLmdlby5kcmF3LmZyZWVoYW5kTW9kZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICA8ZGl2IGNsYXNzPVwicmFkaXVzLXVuaXRcIiAqbmdJZj1cImlzQ2lyY2xlKClcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJhZGl1c1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2lnby5nZW8uc3BhdGlhbEZpbHRlci5yYWRpdXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicmFkaXVzRm9ybUNvbnRyb2xcIlxuICAgICAgICAgIFtyZWFkb25seV09XCJ0aGlzLmZyZWVoYW5kTW9kZVwiXG4gICAgICAgIC8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1bml0LWZpZWxkXCI+XG4gICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgW3ZhbHVlXT1cIm1lYXN1cmVVbml0XCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTWVhc3VyZVVuaXRDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1lYXN1cmVVbml0IG9mIG1lYXN1cmVVbml0c1wiXG4gICAgICAgICAgICBbdmFsdWVdPVwibWVhc3VyZVVuaXRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdpZ28uZ2VvLm1lYXN1cmUuJyArIG1lYXN1cmVVbml0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cblxuICA8ZGl2IGNsYXNzPVwibGF5ZXItc2VsZWN0LWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImxheWVyLXNlbGVjdFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgJ2lnby5nZW8uZHJhdy5sYXllci50aXRsZScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICNzZWxlY3RlZExheWVyXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25MYXllckNoYW5nZShzZWxlY3RlZExheWVyLnZhbHVlKVwiXG4gICAgICAgIFt2YWx1ZV09XCJ1cGRhdGVBY3RpdmVMYXllcigpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGxheWVyIG9mIGFsbExheWVyc1wiIFt2YWx1ZV09XCJsYXllclwiPlxuICAgICAgICAgIHt7IGxheWVyLnRpdGxlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPG1hdC1vcHRpb24gaWQ9XCJjcmVhdGVOZXdMYXllclwiPlxuICAgICAgICAgIHt7ICdpZ28uZ2VvLmRyYXcubGF5ZXIuY3JlYXRlTmV3TGF5ZXInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiYWN0aXZlRHJhd2luZ0xheWVyXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgW2NvbG9yXT1cImFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID8gJ3ByaW1hcnknIDogJ2RlZmF1bHQnXCJcbiAgICAgIGNvbGxhcHNpYmxlQnV0dG9uXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICBbbWF0VG9vbHRpcF09XCJcbiAgICAgICAgYWN0aXZlRHJhd2luZ0xheWVyLnZpc2libGVcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5oaWRlTGF5ZXInIHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnNob3dMYXllcicgfCB0cmFuc2xhdGUpXG4gICAgICBcIlxuICAgICAgKGNsaWNrKT1cImFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID0gIWFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+XG4gICAgICAgIHt7IGFjdGl2ZURyYXdpbmdMYXllci52aXNpYmxlID8gJ3Zpc2liaWxpdHknIDogJ3Zpc2liaWxpdHlfb2ZmJyB9fVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8ZGl2PlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiYWN0aXZlU3RvcmUuY291bnQkLmdldFZhbHVlKCkgPiAwXCJcbiAgICAgIGNsYXNzPVwiZGVsZXRlQnRuXCJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmRyYXcuZGVsZXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiKHNlbGVjdGVkRmVhdHVyZXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMFwiXG4gICAgICAoY2xpY2spPVwiZGVsZXRlRHJhd2luZ3MoKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2PlxuICAgICAgPGlnby1lbnRpdHktdGFibGVcbiAgICAgICAgI3RhYmxlXG4gICAgICAgIGNsYXNzPVwidGFibGUtY29tcGFjdFwiXG4gICAgICAgIFtzdG9yZV09XCJhY3RpdmVTdG9yZVwiXG4gICAgICAgIFt0ZW1wbGF0ZV09XCJ0YWJsZVRlbXBsYXRlXCJcbiAgICAgID5cbiAgICAgIDwvaWdvLWVudGl0eS10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImljb24tb3B0aW9uc1wiPlxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImljb25zLmxlbmd0aCA+PSAxXCI+XG4gICAgICA8bWF0LWxhYmVsPnt7ICdpZ28uZ2VvLmRyYXcuaWNvbicgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0PlxuICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpY29uXCIgY2xhc3M9XCJib3hcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwie3sgaWNvbiB9fVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIlwiIChjbGljayk9XCJvbkljb25DaGFuZ2UoKVwiPnt7XG4gICAgICAgICAgJ2lnby5nZW8uZHJhdy5ub0ljb24nIHwgdHJhbnNsYXRlXG4gICAgICAgIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpY29uX2h0bWwgb2YgaWNvbnNcIlxuICAgICAgICAgIFt2YWx1ZV09XCJpY29uX2h0bWxcIlxuICAgICAgICAgIChjbGljayk9XCJvbkljb25DaGFuZ2UoaWNvbl9odG1sKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94XCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cInt7IGljb25faHRtbCB9fVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCJcbiAgICAgIChjbGljayk9XCJvcGVuU2hvcmN1dHNEaWFsb2coKVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uXG4gICAgICAgIGNsYXNzPVwic2hvcnRjdXRzLWljb25cIlxuICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZHJhdy5zaG9ydGN1dHMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPmtleWJvYXJkXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvblxuICAgICAgKm5nSWY9XCJzZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGhcIlxuICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAoY2xpY2spPVwib3BlblN0eWxlTW9kYWxEaWFsb2coKVwiXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5zdHlsZS5zdHlsZU1vZGFsVG9vbHRpcFNlbGVjdGVkJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAge3sgJ2lnby5nZW8uc3R5bGUuc3R5bGVNb2RhbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDxtYXQtaWNvblxuICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcbiAgICAgICAgaWNvblBvc2l0aW9uRW5kXG4gICAgICAgIGNsYXNzPVwic3R5bGUtaWNvblwiXG4gICAgICAgIFttYXRCYWRnZV09XCJzZWxlY3RlZEZlYXR1cmVzJC52YWx1ZS5sZW5ndGhcIlxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgID5wYWxldHRlXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|