@igo2/geo 18.0.0 → 18.0.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/igo2-geo.mjs +684 -709
- package/fesm2022/igo2-geo.mjs.map +1 -1
- package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
- package/lib/offline/layerDB/layerDB.service.d.ts +1 -1
- package/lib/style/style-list/style-list.provider.d.ts +1 -8
- package/lib/style/style-list/style-list.service.d.ts +1 -1
- package/package.json +15 -17
- package/src/lib/layer/layer-list/layer-list.theme.scss +2 -1
- package/src/lib/map/menu-button/menu-button.theming.scss +3 -3
- package/src/style/style.scss +1 -1
- package/esm2022/igo2-geo.mjs +0 -5
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +0 -234
- package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +0 -272
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +0 -246
- package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +0 -19
- package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +0 -136
- package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +0 -60
- package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +0 -232
- package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +0 -24
- package/esm2022/lib/catalog/catalog-library/index.mjs +0 -4
- package/esm2022/lib/catalog/catalog.module.mjs +0 -26
- package/esm2022/lib/catalog/index.mjs +0 -6
- package/esm2022/lib/catalog/shared/catalog.abstract.mjs +0 -32
- package/esm2022/lib/catalog/shared/catalog.enum.mjs +0 -16
- package/esm2022/lib/catalog/shared/catalog.interface.mjs +0 -2
- package/esm2022/lib/catalog/shared/catalog.service.mjs +0 -706
- package/esm2022/lib/catalog/shared/catalogs.mjs +0 -75
- package/esm2022/lib/catalog/shared/index.mjs +0 -5
- package/esm2022/lib/datasource/index.mjs +0 -3
- package/esm2022/lib/datasource/shared/capabilities.interface.mjs +0 -17
- package/esm2022/lib/datasource/shared/capabilities.service.mjs +0 -441
- package/esm2022/lib/datasource/shared/datasource.service.mjs +0 -258
- package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +0 -222
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +0 -118
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +0 -24
- package/esm2022/lib/datasource/shared/datasources/data.service.mjs +0 -3
- package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/datasource.mjs +0 -41
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +0 -52
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +0 -70
- package/esm2022/lib/datasource/shared/datasources/index.mjs +0 -36
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +0 -33
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +0 -14
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +0 -60
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +0 -17
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +0 -56
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +0 -137
- package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +0 -170
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +0 -227
- package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +0 -224
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +0 -18
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +0 -11
- package/esm2022/lib/datasource/shared/index.mjs +0 -6
- package/esm2022/lib/datasource/shared/options/index.mjs +0 -5
- package/esm2022/lib/datasource/shared/options/options-api.interface.mjs +0 -2
- package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +0 -15
- package/esm2022/lib/datasource/shared/options/options-api.service.mjs +0 -85
- package/esm2022/lib/datasource/shared/options/options.service.mjs +0 -3
- package/esm2022/lib/datasource/utils/index.mjs +0 -2
- package/esm2022/lib/datasource/utils/tilegrid.mjs +0 -20
- package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +0 -246
- package/esm2022/lib/directions/directions-buttons/index.mjs +0 -2
- package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +0 -312
- package/esm2022/lib/directions/directions-inputs/index.mjs +0 -2
- package/esm2022/lib/directions/directions-results/directions-results.component.mjs +0 -192
- package/esm2022/lib/directions/directions-results/index.mjs +0 -2
- package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +0 -5
- package/esm2022/lib/directions/directions-sources/directions-source.mjs +0 -3
- package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +0 -23
- package/esm2022/lib/directions/directions-sources/index.mjs +0 -5
- package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +0 -159
- package/esm2022/lib/directions/directions.component.mjs +0 -437
- package/esm2022/lib/directions/directions.module.mjs +0 -46
- package/esm2022/lib/directions/directions.provider.mjs +0 -16
- package/esm2022/lib/directions/index.mjs +0 -8
- package/esm2022/lib/directions/shared/directions-source.service.mjs +0 -18
- package/esm2022/lib/directions/shared/directions.enum.mjs +0 -72
- package/esm2022/lib/directions/shared/directions.interface.mjs +0 -2
- package/esm2022/lib/directions/shared/directions.service.mjs +0 -239
- package/esm2022/lib/directions/shared/directions.utils.mjs +0 -522
- package/esm2022/lib/directions/shared/index.mjs +0 -6
- package/esm2022/lib/directions/shared/store.mjs +0 -21
- package/esm2022/lib/download/download-button/download-button.component.mjs +0 -48
- package/esm2022/lib/download/download-button/index.mjs +0 -2
- package/esm2022/lib/download/download.module.mjs +0 -24
- package/esm2022/lib/download/index.mjs +0 -3
- package/esm2022/lib/download/shared/download.interface.mjs +0 -2
- package/esm2022/lib/download/shared/download.service.mjs +0 -67
- package/esm2022/lib/download/shared/index.mjs +0 -3
- package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +0 -42
- package/esm2022/lib/draw/draw/draw-popup.component.mjs +0 -421
- package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +0 -28
- package/esm2022/lib/draw/draw/draw.component.mjs +0 -1136
- package/esm2022/lib/draw/draw/draw.module.mjs +0 -19
- package/esm2022/lib/draw/drawingTool.module.mjs +0 -18
- package/esm2022/lib/draw/index.mjs +0 -3
- package/esm2022/lib/draw/shared/draw-icon.service.mjs +0 -30
- package/esm2022/lib/draw/shared/draw.enum.mjs +0 -21
- package/esm2022/lib/draw/shared/draw.interface.mjs +0 -2
- package/esm2022/lib/draw/shared/draw.utils.mjs +0 -125
- package/esm2022/lib/draw/shared/index.mjs +0 -5
- package/esm2022/lib/environment/environment.interface.mjs +0 -2
- package/esm2022/lib/environment/index.mjs +0 -2
- package/esm2022/lib/feature/feature-details/feature-details.component.mjs +0 -306
- package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +0 -56
- package/esm2022/lib/feature/feature-details/feature-details.module.mjs +0 -26
- package/esm2022/lib/feature/feature-details/index.mjs +0 -4
- package/esm2022/lib/feature/feature-form/feature-form.component.mjs +0 -101
- package/esm2022/lib/feature/feature-form/feature-form.module.mjs +0 -19
- package/esm2022/lib/feature/feature.module.mjs +0 -26
- package/esm2022/lib/feature/index.mjs +0 -5
- package/esm2022/lib/feature/shared/feature-store.utils.mjs +0 -28
- package/esm2022/lib/feature/shared/feature.enums.mjs +0 -9
- package/esm2022/lib/feature/shared/feature.interfaces.mjs +0 -2
- package/esm2022/lib/feature/shared/feature.utils.mjs +0 -332
- package/esm2022/lib/feature/shared/index.mjs +0 -8
- package/esm2022/lib/feature/shared/store.mjs +0 -143
- package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +0 -216
- package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +0 -119
- package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +0 -99
- package/esm2022/lib/feature/shared/strategies/index.mjs +0 -8
- package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +0 -103
- package/esm2022/lib/feature/shared/strategies/loading.mjs +0 -136
- package/esm2022/lib/feature/shared/strategies/search.mjs +0 -158
- package/esm2022/lib/feature/shared/strategies/selection.mjs +0 -385
- package/esm2022/lib/feature/shared/strategies.utils.mjs +0 -37
- package/esm2022/lib/filter/filter.module.mjs +0 -131
- package/esm2022/lib/filter/index.mjs +0 -17
- package/esm2022/lib/filter/ogc-filter-button/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +0 -141
- package/esm2022/lib/filter/ogc-filter-form/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +0 -325
- package/esm2022/lib/filter/ogc-filter-selection/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +0 -787
- package/esm2022/lib/filter/ogc-filter-time/index.mjs +0 -3
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +0 -201
- package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +0 -665
- package/esm2022/lib/filter/ogc-filterable-form/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +0 -66
- package/esm2022/lib/filter/ogc-filterable-item/index.mjs +0 -2
- package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +0 -244
- package/esm2022/lib/filter/ogc-filterable-list/index.mjs +0 -3
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +0 -39
- package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +0 -32
- package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +0 -63
- package/esm2022/lib/filter/shared/index.mjs +0 -12
- package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +0 -72
- package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +0 -30
- package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +0 -2
- package/esm2022/lib/filter/shared/ogc-filter.mjs +0 -756
- package/esm2022/lib/filter/shared/ogc-filter.service.mjs +0 -47
- package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +0 -23
- package/esm2022/lib/filter/shared/spatial-filter.interface.mjs +0 -2
- package/esm2022/lib/filter/shared/spatial-filter.service.mjs +0 -282
- package/esm2022/lib/filter/shared/time-filter.enum.mjs +0 -13
- package/esm2022/lib/filter/shared/time-filter.interface.mjs +0 -2
- package/esm2022/lib/filter/shared/time-filter.service.mjs +0 -107
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/index.mjs +0 -2
- package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +0 -875
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/index.mjs +0 -2
- package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +0 -191
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/index.mjs +0 -2
- package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +0 -120
- package/esm2022/lib/filter/time-filter-button/index.mjs +0 -2
- package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +0 -70
- package/esm2022/lib/filter/time-filter-form/index.mjs +0 -2
- package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +0 -537
- package/esm2022/lib/filter/time-filter-item/index.mjs +0 -2
- package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +0 -90
- package/esm2022/lib/filter/time-filter-list/index.mjs +0 -3
- package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +0 -39
- package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +0 -24
- package/esm2022/lib/geo.module.mjs +0 -63
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +0 -559
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +0 -170
- package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +0 -24
- package/esm2022/lib/geometry/geometry-form-field/index.mjs +0 -4
- package/esm2022/lib/geometry/geometry.module.mjs +0 -18
- package/esm2022/lib/geometry/index.mjs +0 -3
- package/esm2022/lib/geometry/shared/controls/draw.mjs +0 -340
- package/esm2022/lib/geometry/shared/controls/index.mjs +0 -4
- package/esm2022/lib/geometry/shared/controls/modify.mjs +0 -538
- package/esm2022/lib/geometry/shared/controls/slice.mjs +0 -190
- package/esm2022/lib/geometry/shared/geometry.errors.mjs +0 -24
- package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +0 -2
- package/esm2022/lib/geometry/shared/geometry.utils.mjs +0 -113
- package/esm2022/lib/geometry/shared/index.mjs +0 -5
- package/esm2022/lib/import-export/export-button/export-button.component.mjs +0 -49
- package/esm2022/lib/import-export/export-button/index.mjs +0 -2
- package/esm2022/lib/import-export/import-export/import-export.component.mjs +0 -876
- package/esm2022/lib/import-export/import-export/index.mjs +0 -2
- package/esm2022/lib/import-export/import-export.module.mjs +0 -31
- package/esm2022/lib/import-export/index.mjs +0 -5
- package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +0 -114
- package/esm2022/lib/import-export/shared/export.errors.mjs +0 -15
- package/esm2022/lib/import-export/shared/export.interface.mjs +0 -2
- package/esm2022/lib/import-export/shared/export.service.mjs +0 -378
- package/esm2022/lib/import-export/shared/export.type.mjs +0 -13
- package/esm2022/lib/import-export/shared/export.utils.mjs +0 -51
- package/esm2022/lib/import-export/shared/import.errors.mjs +0 -39
- package/esm2022/lib/import-export/shared/import.interface.mjs +0 -2
- package/esm2022/lib/import-export/shared/import.service.mjs +0 -221
- package/esm2022/lib/import-export/shared/import.utils.mjs +0 -203
- package/esm2022/lib/import-export/shared/index.mjs +0 -11
- package/esm2022/lib/layer/index.mjs +0 -16
- package/esm2022/lib/layer/layer-group/index.mjs +0 -2
- package/esm2022/lib/layer/layer-group/layer-group.component.mjs +0 -103
- package/esm2022/lib/layer/layer-item/index.mjs +0 -2
- package/esm2022/lib/layer/layer-item/layer-item.component.mjs +0 -196
- package/esm2022/lib/layer/layer-legend/index.mjs +0 -2
- package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +0 -287
- package/esm2022/lib/layer/layer-legend-item/index.mjs +0 -2
- package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +0 -85
- package/esm2022/lib/layer/layer-legend-list/index.mjs +0 -3
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +0 -54
- package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +0 -104
- package/esm2022/lib/layer/layer-list/index.mjs +0 -2
- package/esm2022/lib/layer/layer-list/layer-list.component.mjs +0 -232
- package/esm2022/lib/layer/layer-list-tool/index.mjs +0 -4
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +0 -92
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +0 -7
- package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +0 -61
- package/esm2022/lib/layer/layer-search/index.mjs +0 -2
- package/esm2022/lib/layer/layer-search/layer-search.component.mjs +0 -65
- package/esm2022/lib/layer/layer-unavailable/index.mjs +0 -3
- package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +0 -25
- package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +0 -35
- package/esm2022/lib/layer/layer-viewer/index.mjs +0 -3
- package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +0 -226
- package/esm2022/lib/layer/layer-viewer/layer-viewer.interface.mjs +0 -2
- package/esm2022/lib/layer/layer-viewer-bottom-actions/index.mjs +0 -2
- package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +0 -207
- package/esm2022/lib/layer/layer-visibility-button/index.mjs +0 -2
- package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +0 -83
- package/esm2022/lib/layer/layer.module.mjs +0 -107
- package/esm2022/lib/layer/shared/clusterParam.mjs +0 -2
- package/esm2022/lib/layer/shared/index.mjs +0 -6
- package/esm2022/lib/layer/shared/layer-controller.mjs +0 -316
- package/esm2022/lib/layer/shared/layer-selection.mjs +0 -38
- package/esm2022/lib/layer/shared/layer.enums.mjs +0 -2
- package/esm2022/lib/layer/shared/layer.service.mjs +0 -315
- package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/any-layer.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/image-layer.mjs +0 -75
- package/esm2022/lib/layer/shared/layers/index.mjs +0 -18
- package/esm2022/lib/layer/shared/layers/layer-base.mjs +0 -199
- package/esm2022/lib/layer/shared/layers/layer-group.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/layer-group.mjs +0 -120
- package/esm2022/lib/layer/shared/layers/layer.interface.mjs +0 -7
- package/esm2022/lib/layer/shared/layers/layer.mjs +0 -178
- package/esm2022/lib/layer/shared/layers/legend.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/linked/index.mjs +0 -4
- package/esm2022/lib/layer/shared/layers/linked/linked-layer.interface.mjs +0 -12
- package/esm2022/lib/layer/shared/layers/linked/linked-layer.mjs +0 -242
- package/esm2022/lib/layer/shared/layers/linked/linked-layer.utils.mjs +0 -70
- package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/tile-layer.mjs +0 -55
- package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/vector-layer.mjs +0 -576
- package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +0 -2
- package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +0 -112
- package/esm2022/lib/layer/track-feature-button/index.mjs +0 -2
- package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +0 -54
- package/esm2022/lib/layer/utils/image-watcher.mjs +0 -62
- package/esm2022/lib/layer/utils/index.mjs +0 -6
- package/esm2022/lib/layer/utils/layer.utils.mjs +0 -57
- package/esm2022/lib/layer/utils/outputLegend.mjs +0 -32
- package/esm2022/lib/layer/utils/tile-watcher.mjs +0 -52
- package/esm2022/lib/layer/utils/vector-watcher.mjs +0 -50
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +0 -20
- package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +0 -87
- package/esm2022/lib/map/baselayers-switcher/index.mjs +0 -3
- package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +0 -122
- package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +0 -78
- package/esm2022/lib/map/geolocate-button/index.mjs +0 -2
- package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +0 -73
- package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +0 -2
- package/esm2022/lib/map/home-extent-button/index.mjs +0 -3
- package/esm2022/lib/map/index.mjs +0 -14
- package/esm2022/lib/map/info-section/index.mjs +0 -2
- package/esm2022/lib/map/info-section/info-section.component.mjs +0 -15
- package/esm2022/lib/map/map-browser/index.mjs +0 -2
- package/esm2022/lib/map/map-browser/map-browser.component.mjs +0 -67
- package/esm2022/lib/map/map-center/index.mjs +0 -2
- package/esm2022/lib/map/map-center/map-center.component.mjs +0 -56
- package/esm2022/lib/map/map.module.mjs +0 -89
- package/esm2022/lib/map/menu-button/index.mjs +0 -2
- package/esm2022/lib/map/menu-button/menu-button.component.mjs +0 -57
- package/esm2022/lib/map/offline-button/index.mjs +0 -2
- package/esm2022/lib/map/offline-button/offline-button.component.mjs +0 -53
- package/esm2022/lib/map/rotation-button/index.mjs +0 -2
- package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +0 -58
- package/esm2022/lib/map/shared/controllers/controller.mjs +0 -44
- package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +0 -8
- package/esm2022/lib/map/shared/controllers/geolocation.mjs +0 -431
- package/esm2022/lib/map/shared/controllers/index.mjs +0 -5
- package/esm2022/lib/map/shared/controllers/view.mjs +0 -361
- package/esm2022/lib/map/shared/hover-feature.directive.mjs +0 -481
- package/esm2022/lib/map/shared/index.mjs +0 -15
- package/esm2022/lib/map/shared/linkedLayers.utils.mjs +0 -238
- package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +0 -122
- package/esm2022/lib/map/shared/map.abstract.mjs +0 -24
- package/esm2022/lib/map/shared/map.enums.mjs +0 -6
- package/esm2022/lib/map/shared/map.interface.mjs +0 -2
- package/esm2022/lib/map/shared/map.mjs +0 -201
- package/esm2022/lib/map/shared/map.service.mjs +0 -29
- package/esm2022/lib/map/shared/map.utils.mjs +0 -455
- package/esm2022/lib/map/shared/mapOffline.directive.mjs +0 -114
- package/esm2022/lib/map/shared/projection.interfaces.mjs +0 -2
- package/esm2022/lib/map/shared/projection.service.mjs +0 -67
- package/esm2022/lib/map/shared/projection.utils.mjs +0 -122
- package/esm2022/lib/map/swipe-control/index.mjs +0 -2
- package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +0 -211
- package/esm2022/lib/map/utils/index.mjs +0 -2
- package/esm2022/lib/map/utils/layer-watcher.mjs +0 -112
- package/esm2022/lib/map/wake-lock-button/index.mjs +0 -2
- package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +0 -103
- package/esm2022/lib/map/zoom-button/index.mjs +0 -2
- package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +0 -35
- package/esm2022/lib/measure/index.mjs +0 -3
- package/esm2022/lib/measure/measure.module.mjs +0 -20
- package/esm2022/lib/measure/measurer/index.mjs +0 -6
- package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +0 -40
- package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +0 -38
- package/esm2022/lib/measure/measurer/measurer-item.component.mjs +0 -143
- package/esm2022/lib/measure/measurer/measurer.component.mjs +0 -948
- package/esm2022/lib/measure/measurer/measurer.module.mjs +0 -20
- package/esm2022/lib/measure/shared/index.mjs +0 -4
- package/esm2022/lib/measure/shared/measure.enum.mjs +0 -37
- package/esm2022/lib/measure/shared/measure.interfaces.mjs +0 -2
- package/esm2022/lib/measure/shared/measure.utils.mjs +0 -497
- package/esm2022/lib/metadata/index.mjs +0 -4
- package/esm2022/lib/metadata/metadata-button/index.mjs +0 -2
- package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +0 -96
- package/esm2022/lib/metadata/metadata.module.mjs +0 -29
- package/esm2022/lib/metadata/shared/index.mjs +0 -3
- package/esm2022/lib/metadata/shared/metadata.interface.mjs +0 -2
- package/esm2022/lib/metadata/shared/metadata.service.mjs +0 -18
- package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +0 -130
- package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +0 -6
- package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +0 -2
- package/esm2022/lib/offline/geoDB/geoDB.service.mjs +0 -172
- package/esm2022/lib/offline/geoDB/index.mjs +0 -5
- package/esm2022/lib/offline/index.mjs +0 -6
- package/esm2022/lib/offline/layerDB/index.mjs +0 -3
- package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +0 -2
- package/esm2022/lib/offline/layerDB/layerDB.service.mjs +0 -83
- package/esm2022/lib/offline/offline.interface.mjs +0 -2
- package/esm2022/lib/offline/offline.provider.mjs +0 -50
- package/esm2022/lib/offline/shared/geo-network.service.mjs +0 -79
- package/esm2022/lib/offline/shared/index.mjs +0 -2
- package/esm2022/lib/overlay/index.mjs +0 -2
- package/esm2022/lib/overlay/shared/index.mjs +0 -4
- package/esm2022/lib/overlay/shared/overlay.enum.mjs +0 -8
- package/esm2022/lib/overlay/shared/overlay.mjs +0 -139
- package/esm2022/lib/overlay/shared/overlay.utils.mjs +0 -17
- package/esm2022/lib/print/index.mjs +0 -4
- package/esm2022/lib/print/print/print.component.mjs +0 -116
- package/esm2022/lib/print/print-form/index.mjs +0 -2
- package/esm2022/lib/print/print-form/print-form.component.mjs +0 -320
- package/esm2022/lib/print/print.module.mjs +0 -20
- package/esm2022/lib/print/shared/geopdf.mjs +0 -68
- package/esm2022/lib/print/shared/index.mjs +0 -5
- package/esm2022/lib/print/shared/print.interface.mjs +0 -2
- package/esm2022/lib/print/shared/print.service.mjs +0 -1136
- package/esm2022/lib/print/shared/print.type.mjs +0 -30
- package/esm2022/lib/query/index.mjs +0 -2
- package/esm2022/lib/query/query.module.mjs +0 -27
- package/esm2022/lib/query/shared/index.mjs +0 -8
- package/esm2022/lib/query/shared/query-search-source.mjs +0 -35
- package/esm2022/lib/query/shared/query-search-source.providers.mjs +0 -22
- package/esm2022/lib/query/shared/query.directive.mjs +0 -290
- package/esm2022/lib/query/shared/query.enums.mjs +0 -32
- package/esm2022/lib/query/shared/query.interfaces.mjs +0 -2
- package/esm2022/lib/query/shared/query.service.mjs +0 -753
- package/esm2022/lib/query/shared/query.utils.mjs +0 -45
- package/esm2022/lib/search/index.mjs +0 -10
- package/esm2022/lib/search/search-bar/search-bar.component.mjs +0 -483
- package/esm2022/lib/search/search-bar/search-bar.module.mjs +0 -19
- package/esm2022/lib/search/search-results/index.mjs +0 -5
- package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +0 -101
- package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +0 -433
- package/esm2022/lib/search/search-results/search-results-item.component.mjs +0 -119
- package/esm2022/lib/search/search-results/search-results.component.mjs +0 -297
- package/esm2022/lib/search/search-results/search-results.directive.mjs +0 -7
- package/esm2022/lib/search/search-results/search-results.module.mjs +0 -20
- package/esm2022/lib/search/search-selector/search-selector.component.mjs +0 -118
- package/esm2022/lib/search/search-selector/search-selector.module.mjs +0 -19
- package/esm2022/lib/search/search-settings/search-settings.component.mjs +0 -264
- package/esm2022/lib/search/search-settings/search-settings.module.mjs +0 -19
- package/esm2022/lib/search/search.module.mjs +0 -77
- package/esm2022/lib/search/shared/index.mjs +0 -10
- package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +0 -328
- package/esm2022/lib/search/shared/search-source-service.providers.mjs +0 -20
- package/esm2022/lib/search/shared/search-source.service.mjs +0 -56
- package/esm2022/lib/search/shared/search.enums.mjs +0 -4
- package/esm2022/lib/search/shared/search.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/search.provider.mjs +0 -20
- package/esm2022/lib/search/shared/search.service.mjs +0 -149
- package/esm2022/lib/search/shared/search.utils.mjs +0 -92
- package/esm2022/lib/search/shared/sources/cadastre.mjs +0 -142
- package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +0 -32
- package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/coordinates.mjs +0 -168
- package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +0 -52
- package/esm2022/lib/search/shared/sources/icherche-icons.mjs +0 -32
- package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/icherche.mjs +0 -816
- package/esm2022/lib/search/shared/sources/icherche.providers.mjs +0 -87
- package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/ilayer.mjs +0 -339
- package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +0 -58
- package/esm2022/lib/search/shared/sources/index.mjs +0 -23
- package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/nominatim.mjs +0 -263
- package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +0 -31
- package/esm2022/lib/search/shared/sources/source.interfaces.mjs +0 -13
- package/esm2022/lib/search/shared/sources/source.mjs +0 -221
- package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/storedqueries.mjs +0 -454
- package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +0 -56
- package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +0 -2
- package/esm2022/lib/search/shared/sources/workspace.mjs +0 -192
- package/esm2022/lib/search/shared/sources/workspace.providers.mjs +0 -31
- package/esm2022/lib/style/index.mjs +0 -5
- package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +0 -360
- package/esm2022/lib/style/shared/datasource/index.mjs +0 -2
- package/esm2022/lib/style/shared/feature/feature-style.mjs +0 -162
- package/esm2022/lib/style/shared/feature/index.mjs +0 -2
- package/esm2022/lib/style/shared/font.enum.mjs +0 -17
- package/esm2022/lib/style/shared/index.mjs +0 -5
- package/esm2022/lib/style/shared/overlay/index.mjs +0 -3
- package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +0 -39
- package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +0 -88
- package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +0 -78
- package/esm2022/lib/style/shared/vector/conversion.utils.mjs +0 -27
- package/esm2022/lib/style/shared/vector/index.mjs +0 -4
- package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +0 -2
- package/esm2022/lib/style/style-list/index.mjs +0 -5
- package/esm2022/lib/style/style-list/style-list.interface.mjs +0 -2
- package/esm2022/lib/style/style-list/style-list.module.mjs +0 -23
- package/esm2022/lib/style/style-list/style-list.provider.mjs +0 -21
- package/esm2022/lib/style/style-list/style-list.service.mjs +0 -52
- package/esm2022/lib/style/style-modal/drawing/index.mjs +0 -2
- package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +0 -193
- package/esm2022/lib/style/style-modal/index.mjs +0 -5
- package/esm2022/lib/style/style-modal/layer/index.mjs +0 -2
- package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +0 -142
- package/esm2022/lib/style/style-modal/layer-button/index.mjs +0 -2
- package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +0 -44
- package/esm2022/lib/style/style-modal/shared/index.mjs +0 -2
- package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +0 -2
- package/esm2022/lib/style/style-service/draw-style.service.mjs +0 -255
- package/esm2022/lib/style/style-service/index.mjs +0 -3
- package/esm2022/lib/style/style-service/style.service.mjs +0 -393
- package/esm2022/lib/style/style.module.mjs +0 -46
- package/esm2022/lib/toast/index.mjs +0 -2
- package/esm2022/lib/toast/toast.component.mjs +0 -99
- package/esm2022/lib/toast/toast.module.mjs +0 -24
- package/esm2022/lib/utils/googleLinks.mjs +0 -13
- package/esm2022/lib/utils/id-generator.mjs +0 -112
- package/esm2022/lib/utils/index.mjs +0 -5
- package/esm2022/lib/utils/osmLinks.mjs +0 -9
- package/esm2022/lib/utils/propertyTypeDetector/index.mjs +0 -3
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +0 -2
- package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +0 -64
- package/esm2022/lib/wkt/index.mjs +0 -2
- package/esm2022/lib/wkt/shared/index.mjs +0 -2
- package/esm2022/lib/wkt/shared/wkt.service.mjs +0 -235
- package/esm2022/lib/wkt/wkt.module.mjs +0 -25
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +0 -36
- package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +0 -19
- package/esm2022/lib/workspace/confirmation-popup/index.mjs +0 -3
- package/esm2022/lib/workspace/index.mjs +0 -8
- package/esm2022/lib/workspace/shared/edition-workspace.mjs +0 -301
- package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +0 -720
- package/esm2022/lib/workspace/shared/feature-workspace.mjs +0 -41
- package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +0 -113
- package/esm2022/lib/workspace/shared/index.mjs +0 -8
- package/esm2022/lib/workspace/shared/wfs-workspace.mjs +0 -41
- package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +0 -121
- package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +0 -248
- package/esm2022/lib/workspace/shared/workspace.utils.mjs +0 -188
- package/esm2022/lib/workspace/widgets/index.mjs +0 -4
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +0 -48
- package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +0 -19
- package/esm2022/lib/workspace/widgets/widgets.mjs +0 -15
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +0 -172
- package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -19
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +0 -137
- package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +0 -19
- package/esm2022/lib/workspace/workspace.module.mjs +0 -32
- package/esm2022/public_api.mjs +0 -56
|
@@ -1,522 +0,0 @@
|
|
|
1
|
-
import { NumberUtils, uuid } from '@igo2/utils';
|
|
2
|
-
import olFeature from 'ol/Feature';
|
|
3
|
-
import OlGeoJSON from 'ol/format/GeoJSON';
|
|
4
|
-
import * as olGeom from 'ol/geom';
|
|
5
|
-
import * as olProj from 'ol/proj';
|
|
6
|
-
import * as olStyle from 'ol/style';
|
|
7
|
-
import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
|
|
8
|
-
import { tryBindStoreLayer } from '../../feature/shared/feature-store.utils';
|
|
9
|
-
import { FEATURE, FeatureMotion } from '../../feature/shared/feature.enums';
|
|
10
|
-
import { tryAddLoadingStrategy } from '../../feature/shared/strategies.utils';
|
|
11
|
-
import { FeatureStoreLoadingStrategy } from '../../feature/shared/strategies/loading';
|
|
12
|
-
import { VectorLayer } from '../../layer/shared/layers/vector-layer';
|
|
13
|
-
import { createOverlayMarkerStyle } from '../../style/shared/overlay/overlay-marker-style.utils';
|
|
14
|
-
import { DirectionRelativePositionType, DirectionsType, ManeuverModifier, ManeuverType } from './directions.enum';
|
|
15
|
-
/**
|
|
16
|
-
* Updates the sorting of the stops in the provided StopsStore based on the specified field and direction.
|
|
17
|
-
*
|
|
18
|
-
* @param {StopsStore} stopsStore - The StopsStore to update the sorting for.
|
|
19
|
-
* @param {'asc' | 'desc'} [direction='asc'] - The direction of sorting ('asc' for ascending, 'desc' for descending).
|
|
20
|
-
* @param {string} [field='position'] - The field to sort the stops by.
|
|
21
|
-
*/
|
|
22
|
-
export function updateStoreSorting(stopsStore, direction = 'asc', field = 'position') {
|
|
23
|
-
stopsStore.view.sort({
|
|
24
|
-
direction,
|
|
25
|
-
valueAccessor: (entity) => entity[field]
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Computes the relative position of a stop in a list of stops.
|
|
30
|
-
*
|
|
31
|
-
* @param {number} stopIndex - The index of the stop.
|
|
32
|
-
* @param {number} stopListLength - The total number of stops.
|
|
33
|
-
* @return {DirectionRelativePositionType} The relative position of the stop.
|
|
34
|
-
*/
|
|
35
|
-
export function computeRelativePosition(stopIndex, stopListLength) {
|
|
36
|
-
let relativePosition = DirectionRelativePositionType.Intermediate;
|
|
37
|
-
if (stopIndex === 0) {
|
|
38
|
-
relativePosition = DirectionRelativePositionType.Start;
|
|
39
|
-
}
|
|
40
|
-
else if (stopIndex === stopListLength) {
|
|
41
|
-
relativePosition = DirectionRelativePositionType.End;
|
|
42
|
-
}
|
|
43
|
-
return relativePosition;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Computes the position and relative position of stops in the given stopsStore.
|
|
47
|
-
*
|
|
48
|
-
* @param {StopsStore} stopsStore - The store containing the stops.
|
|
49
|
-
*/
|
|
50
|
-
export function computeStopsPosition(deletedStopIndex, stopsStore) {
|
|
51
|
-
for (const stop of stopsStore.all()) {
|
|
52
|
-
stop.position =
|
|
53
|
-
stop.position > deletedStopIndex ? (stop.position -= 1) : stop.position;
|
|
54
|
-
stop.relativePosition = computeRelativePosition(stop.position, stopsStore.all().length - 1);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Adds a stop to the given stopsStore. The stop is always added as the last stop.
|
|
59
|
-
*
|
|
60
|
-
* @param {StopsStore} stopsStore - The store containing the stops.
|
|
61
|
-
* @return {Stop} The newly added stop.
|
|
62
|
-
*/
|
|
63
|
-
export function addStopToStore(stopsStore) {
|
|
64
|
-
const id = uuid();
|
|
65
|
-
const stops = stopsStore.all();
|
|
66
|
-
const insertIndex = stops.length;
|
|
67
|
-
for (const stop of stopsStore.all()) {
|
|
68
|
-
stop.relativePosition = computeRelativePosition(stop.position, stops.length);
|
|
69
|
-
}
|
|
70
|
-
stopsStore.insert({
|
|
71
|
-
id,
|
|
72
|
-
position: insertIndex,
|
|
73
|
-
relativePosition: computeRelativePosition(insertIndex, stops.length)
|
|
74
|
-
});
|
|
75
|
-
updateStoreSorting(stopsStore);
|
|
76
|
-
return stopsStore.get(id);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Removes a stop from the given stopsStore and updates the positions of the remaining stops.
|
|
80
|
-
*
|
|
81
|
-
* @param {StopsStore} stopsStore - The store containing the stops.
|
|
82
|
-
* @param {Stop} stop - The stop to be removed.
|
|
83
|
-
*/
|
|
84
|
-
export function removeStopFromStore(stopsStore, stop) {
|
|
85
|
-
stopsStore.delete(stop);
|
|
86
|
-
computeStopsPosition(stop.position, stopsStore);
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Create a style for the directions steps, stops and route
|
|
90
|
-
* @param feature OlFeature
|
|
91
|
-
* @returns OL style function
|
|
92
|
-
*/
|
|
93
|
-
export function directionsStyle(feature) {
|
|
94
|
-
const stepStyle = [
|
|
95
|
-
new olStyle.Style({
|
|
96
|
-
geometry: feature.getGeometry(),
|
|
97
|
-
image: new olStyle.Circle({
|
|
98
|
-
radius: 7,
|
|
99
|
-
stroke: new olStyle.Stroke({ color: '#FF0000', width: 3 })
|
|
100
|
-
})
|
|
101
|
-
})
|
|
102
|
-
];
|
|
103
|
-
const stopStyle = createOverlayMarkerStyle({
|
|
104
|
-
text: feature.get('stopText'),
|
|
105
|
-
opacity: feature.get('stopOpacity'),
|
|
106
|
-
markerColor: feature.get('stopColor'),
|
|
107
|
-
markerOutlineColor: [255, 255, 255]
|
|
108
|
-
});
|
|
109
|
-
const routeStyle = [
|
|
110
|
-
new olStyle.Style({
|
|
111
|
-
stroke: new olStyle.Stroke({
|
|
112
|
-
color: `rgba(106, 121, 130, ${feature.get('active') ? 0.75 : 0})`,
|
|
113
|
-
width: 10
|
|
114
|
-
})
|
|
115
|
-
}),
|
|
116
|
-
new olStyle.Style({
|
|
117
|
-
stroke: new olStyle.Stroke({
|
|
118
|
-
color: `rgba(79, 169, 221, ${feature.get('active') ? 0.75 : 0})`,
|
|
119
|
-
width: 6
|
|
120
|
-
})
|
|
121
|
-
})
|
|
122
|
-
];
|
|
123
|
-
if (feature.get('type') === DirectionsType.Stop) {
|
|
124
|
-
return stopStyle;
|
|
125
|
-
}
|
|
126
|
-
if (feature.get('type') === DirectionsType.Vertex) {
|
|
127
|
-
return stepStyle;
|
|
128
|
-
}
|
|
129
|
-
if (feature.get('type') === DirectionsType.Route) {
|
|
130
|
-
return routeStyle;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Initializes the stops feature store with the provided language service.
|
|
135
|
-
*
|
|
136
|
-
* @param {StopsFeatureStore} stopsFeatureStore - The stops feature store to initialize.
|
|
137
|
-
* @param {LanguageService} languageService - The language service used for translations.
|
|
138
|
-
*/
|
|
139
|
-
export function initStopsFeatureStore(stopsFeatureStore, languageService) {
|
|
140
|
-
const loadingStrategy = new FeatureStoreLoadingStrategy({
|
|
141
|
-
motion: FeatureMotion.None
|
|
142
|
-
});
|
|
143
|
-
const stopsLayer = new VectorLayer({
|
|
144
|
-
isIgoInternalLayer: true,
|
|
145
|
-
id: 'igo-direction-stops-layer',
|
|
146
|
-
title: languageService.translate.instant('igo.geo.directions.layer.stops'),
|
|
147
|
-
zIndex: 911,
|
|
148
|
-
source: new FeatureDataSource(),
|
|
149
|
-
showInLayerList: true,
|
|
150
|
-
visible: true,
|
|
151
|
-
workspace: {
|
|
152
|
-
enabled: false
|
|
153
|
-
},
|
|
154
|
-
linkedLayers: {
|
|
155
|
-
linkId: 'igo-direction-stops-layer',
|
|
156
|
-
links: [
|
|
157
|
-
{
|
|
158
|
-
syncedDelete: true,
|
|
159
|
-
linkedIds: ['igo-direction-route-layer'],
|
|
160
|
-
properties: []
|
|
161
|
-
}
|
|
162
|
-
]
|
|
163
|
-
},
|
|
164
|
-
exportable: true,
|
|
165
|
-
browsable: false,
|
|
166
|
-
style: directionsStyle
|
|
167
|
-
});
|
|
168
|
-
tryBindStoreLayer(stopsFeatureStore, stopsLayer);
|
|
169
|
-
tryAddLoadingStrategy(stopsFeatureStore, loadingStrategy);
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Initializes the routes feature store with the provided language service.
|
|
173
|
-
*
|
|
174
|
-
* @param {StopsFeatureStore} routesFeatureStore - The routes feature store to initialize.
|
|
175
|
-
* @param {LanguageService} languageService - The language service used for translations.
|
|
176
|
-
*/
|
|
177
|
-
export function initRoutesFeatureStore(routesFeatureStore, languageService) {
|
|
178
|
-
const loadingStrategy = new FeatureStoreLoadingStrategy({
|
|
179
|
-
motion: FeatureMotion.None
|
|
180
|
-
});
|
|
181
|
-
const routeLayer = new VectorLayer({
|
|
182
|
-
isIgoInternalLayer: true,
|
|
183
|
-
id: 'igo-direction-route-layer',
|
|
184
|
-
title: languageService.translate.instant('igo.geo.directions.layer.route'),
|
|
185
|
-
zIndex: 910,
|
|
186
|
-
source: new FeatureDataSource(),
|
|
187
|
-
showInLayerList: true,
|
|
188
|
-
visible: true,
|
|
189
|
-
workspace: {
|
|
190
|
-
enabled: false
|
|
191
|
-
},
|
|
192
|
-
linkedLayers: {
|
|
193
|
-
linkId: 'igo-direction-route-layer'
|
|
194
|
-
},
|
|
195
|
-
exportable: true,
|
|
196
|
-
browsable: false,
|
|
197
|
-
style: directionsStyle
|
|
198
|
-
});
|
|
199
|
-
tryBindStoreLayer(routesFeatureStore, routeLayer);
|
|
200
|
-
tryAddLoadingStrategy(routesFeatureStore, loadingStrategy);
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Initializes the routes feature store.
|
|
204
|
-
*
|
|
205
|
-
* @param {StopsFeatureStore} stepsFeatureStore - The steps feature store to initialize.
|
|
206
|
-
*/
|
|
207
|
-
export function initStepsFeatureStore(stepsFeatureStore) {
|
|
208
|
-
const loadingStrategy = new FeatureStoreLoadingStrategy({
|
|
209
|
-
motion: FeatureMotion.None
|
|
210
|
-
});
|
|
211
|
-
const stepLayer = new VectorLayer({
|
|
212
|
-
isIgoInternalLayer: true,
|
|
213
|
-
id: 'igo-direction-step-layer',
|
|
214
|
-
title: '',
|
|
215
|
-
zIndex: 910,
|
|
216
|
-
source: new FeatureDataSource(),
|
|
217
|
-
showInLayerList: false,
|
|
218
|
-
visible: true,
|
|
219
|
-
workspace: {
|
|
220
|
-
enabled: false
|
|
221
|
-
},
|
|
222
|
-
linkedLayers: {
|
|
223
|
-
linkId: 'igo-direction-route-layer'
|
|
224
|
-
},
|
|
225
|
-
exportable: false,
|
|
226
|
-
browsable: false,
|
|
227
|
-
style: directionsStyle
|
|
228
|
-
});
|
|
229
|
-
tryBindStoreLayer(stepsFeatureStore, stepLayer);
|
|
230
|
-
tryAddLoadingStrategy(stepsFeatureStore, loadingStrategy);
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Adds a stop to the stopsFeatureStore.
|
|
234
|
-
*
|
|
235
|
-
* @param {Stop} stop - The stop to be added.
|
|
236
|
-
* @param {StopsFeatureStore} stopsFeatureStore - The stopsFeatureStore to add the stop to.
|
|
237
|
-
* @param {string} projection - The projection of the stop coordinates.
|
|
238
|
-
* @param {LanguageService} languageService - The language service for translating stop text.
|
|
239
|
-
*/
|
|
240
|
-
export function addStopToStopsFeatureStore(stop, stopsFeatureStore, projection, languageService) {
|
|
241
|
-
let stopColor;
|
|
242
|
-
let stopText;
|
|
243
|
-
switch (stop.relativePosition) {
|
|
244
|
-
case DirectionRelativePositionType.Start:
|
|
245
|
-
stopColor = '#008000';
|
|
246
|
-
stopText = languageService.translate.instant('igo.geo.directions.input.start');
|
|
247
|
-
break;
|
|
248
|
-
case DirectionRelativePositionType.End:
|
|
249
|
-
stopColor = '#f64139';
|
|
250
|
-
stopText = languageService.translate.instant('igo.geo.directions.input.end');
|
|
251
|
-
break;
|
|
252
|
-
default:
|
|
253
|
-
stopColor = '#ffd700';
|
|
254
|
-
stopText =
|
|
255
|
-
languageService.translate.instant('igo.geo.directions.input.intermediate') +
|
|
256
|
-
' #' +
|
|
257
|
-
stop.position;
|
|
258
|
-
break;
|
|
259
|
-
}
|
|
260
|
-
const point = new olGeom.Point(olProj.transform(stop.coordinates, projection, stopsFeatureStore.map.projectionCode));
|
|
261
|
-
const geojsonGeom = new OlGeoJSON().writeGeometryObject(point, {
|
|
262
|
-
featureProjection: stopsFeatureStore.map.projectionCode,
|
|
263
|
-
dataProjection: stopsFeatureStore.map.projectionCode
|
|
264
|
-
});
|
|
265
|
-
const previousStop = stopsFeatureStore.get(stop.id);
|
|
266
|
-
const previousStopRevision = previousStop
|
|
267
|
-
? previousStop.meta.revision
|
|
268
|
-
: 0;
|
|
269
|
-
const stopFeatureStore = {
|
|
270
|
-
type: FEATURE,
|
|
271
|
-
geometry: geojsonGeom,
|
|
272
|
-
projection: stopsFeatureStore.map.projectionCode,
|
|
273
|
-
properties: {
|
|
274
|
-
id: stop.id,
|
|
275
|
-
type: DirectionsType.Stop,
|
|
276
|
-
stopText,
|
|
277
|
-
stopColor,
|
|
278
|
-
stopOpacity: 1,
|
|
279
|
-
stop
|
|
280
|
-
},
|
|
281
|
-
meta: {
|
|
282
|
-
id: stop.id,
|
|
283
|
-
revision: previousStopRevision + 1
|
|
284
|
-
},
|
|
285
|
-
ol: new olFeature({ point })
|
|
286
|
-
};
|
|
287
|
-
stopsFeatureStore.update(stopFeatureStore);
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Adds a route to the routes feature store.
|
|
291
|
-
*
|
|
292
|
-
* @param {RoutesFeatureStore} routesFeatureStore - The routes feature store to add the route to.
|
|
293
|
-
* @param {Directions} directions - The directions object containing the geometry and other information.
|
|
294
|
-
* @param {string} projection - The projection of the geometry coordinates.
|
|
295
|
-
* @param {boolean} [active=false] - Indicates whether the direction is active or not. Default is false.
|
|
296
|
-
*/
|
|
297
|
-
export function addRouteToRoutesFeatureStore(routesFeatureStore, directions, projection, active = false) {
|
|
298
|
-
const coordinate = directions.geometry.coordinates;
|
|
299
|
-
const linestring4326 = new olGeom.LineString(coordinate);
|
|
300
|
-
const linestringStore = linestring4326.transform(projection, routesFeatureStore.map.projectionCode);
|
|
301
|
-
const geojsonGeom = new OlGeoJSON().writeGeometryObject(linestringStore, {
|
|
302
|
-
featureProjection: routesFeatureStore.map.projectionCode,
|
|
303
|
-
dataProjection: routesFeatureStore.map.projectionCode
|
|
304
|
-
});
|
|
305
|
-
const previousRoute = routesFeatureStore.get(directions.id);
|
|
306
|
-
const previousRouteRevision = previousRoute
|
|
307
|
-
? previousRoute.meta.revision
|
|
308
|
-
: 0;
|
|
309
|
-
const routeFeatureStore = {
|
|
310
|
-
type: FEATURE,
|
|
311
|
-
geometry: geojsonGeom,
|
|
312
|
-
projection: routesFeatureStore.map.projectionCode,
|
|
313
|
-
properties: {
|
|
314
|
-
id: directions.id,
|
|
315
|
-
type: DirectionsType.Route,
|
|
316
|
-
active,
|
|
317
|
-
directions
|
|
318
|
-
},
|
|
319
|
-
meta: {
|
|
320
|
-
id: directions.id,
|
|
321
|
-
revision: previousRouteRevision + 1
|
|
322
|
-
},
|
|
323
|
-
ol: new olFeature({ linestringStore })
|
|
324
|
-
};
|
|
325
|
-
routesFeatureStore.update(routeFeatureStore);
|
|
326
|
-
}
|
|
327
|
-
/**
|
|
328
|
-
* Formats the given distance in meters to a human-readable string.
|
|
329
|
-
*
|
|
330
|
-
* @param {number} meters - The distance in meters to be formatted.
|
|
331
|
-
* @return {string | undefined} The formatted distance string.
|
|
332
|
-
*/
|
|
333
|
-
export function formatDistance(meters) {
|
|
334
|
-
if (meters === 0) {
|
|
335
|
-
return undefined;
|
|
336
|
-
}
|
|
337
|
-
if (meters < 1000) {
|
|
338
|
-
return `${Math.round(meters)} m`;
|
|
339
|
-
}
|
|
340
|
-
const kilometers = meters / 1000;
|
|
341
|
-
const roundToDecimal = kilometers >= 10 ? 1 : 0;
|
|
342
|
-
return `${NumberUtils.roundToNDecimal(kilometers, roundToDecimal)} km`.replace('.', ',');
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Formats the given duration in seconds to a human-readable string.
|
|
346
|
-
*
|
|
347
|
-
* @param {number} seconds - The duration in seconds to be formatted.
|
|
348
|
-
* @return {string} The formatted duration string.
|
|
349
|
-
*/
|
|
350
|
-
export function formatDuration(seconds) {
|
|
351
|
-
const hours = Math.floor(seconds / 3600);
|
|
352
|
-
const minutes = Math.floor((seconds % 3600) / 60);
|
|
353
|
-
if (hours) {
|
|
354
|
-
return `${hours} h ${minutes} min`;
|
|
355
|
-
}
|
|
356
|
-
if (minutes) {
|
|
357
|
-
return `${minutes} min`;
|
|
358
|
-
}
|
|
359
|
-
return '< 1 min';
|
|
360
|
-
}
|
|
361
|
-
export function formatStep(step, languageService, lastStep = false) {
|
|
362
|
-
const maneuverType = step.maneuver.type;
|
|
363
|
-
const maneuverModifier = step.maneuver.modifier;
|
|
364
|
-
const name = step.name;
|
|
365
|
-
const maneuverBearingAfter = step.maneuver.bearing_after;
|
|
366
|
-
const translate = languageService.translate;
|
|
367
|
-
const translatedManeuverBearingAfter = translateManeuverBearing(maneuverBearingAfter, languageService);
|
|
368
|
-
const translatedManeuverModifier = translateManeuverModifier(maneuverModifier, languageService);
|
|
369
|
-
let iconName = 'straight'; // arrow point up by default
|
|
370
|
-
let instruction = '';
|
|
371
|
-
if (maneuverType === ManeuverType.Turn) {
|
|
372
|
-
if (maneuverModifier === ManeuverModifier.Uturn ||
|
|
373
|
-
maneuverModifier === ManeuverModifier.Straight) {
|
|
374
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.turn.${maneuverModifier}`, {
|
|
375
|
-
maneuverModifier: translatedManeuverModifier,
|
|
376
|
-
name
|
|
377
|
-
});
|
|
378
|
-
if (maneuverModifier === ManeuverModifier.Uturn) {
|
|
379
|
-
iconName = 'u_turn_left';
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
instruction = translate.instant('igo.geo.directions.results.maneuverType.turn.else', {
|
|
384
|
-
maneuverModifier: translatedManeuverModifier,
|
|
385
|
-
name
|
|
386
|
-
});
|
|
387
|
-
if (maneuverModifier === ManeuverModifier.SlightRight) {
|
|
388
|
-
iconName = 'turn_slight_right';
|
|
389
|
-
}
|
|
390
|
-
else if (maneuverModifier === ManeuverModifier.Right ||
|
|
391
|
-
maneuverModifier === ManeuverModifier.SharpRight) {
|
|
392
|
-
iconName = 'turn_right';
|
|
393
|
-
}
|
|
394
|
-
else if (maneuverModifier === ManeuverModifier.Left ||
|
|
395
|
-
maneuverModifier === ManeuverModifier.SharpLeft) {
|
|
396
|
-
iconName = 'turn_left';
|
|
397
|
-
}
|
|
398
|
-
else if (maneuverModifier === ManeuverModifier.SlightLeft) {
|
|
399
|
-
iconName = 'turn_slight_left';
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
else if (maneuverType === ManeuverType.NewName) {
|
|
404
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.new name`, {
|
|
405
|
-
name,
|
|
406
|
-
maneuverBearing: translatedManeuverBearingAfter
|
|
407
|
-
});
|
|
408
|
-
}
|
|
409
|
-
else if (maneuverType === ManeuverType.Depart) {
|
|
410
|
-
iconName = 'directions';
|
|
411
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.depart`, {
|
|
412
|
-
name,
|
|
413
|
-
maneuverBearing: translatedManeuverBearingAfter
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
else if (maneuverType === ManeuverType.Arrive) {
|
|
417
|
-
iconName = 'sports_score';
|
|
418
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.arrive.${lastStep ? 'lastStep' : 'intermediate'}`, {
|
|
419
|
-
name
|
|
420
|
-
});
|
|
421
|
-
}
|
|
422
|
-
else if (maneuverType === ManeuverType.Merge) {
|
|
423
|
-
instruction = translate.instant('igo.geo.directions.results.maneuverType.merge', {
|
|
424
|
-
name
|
|
425
|
-
});
|
|
426
|
-
iconName = 'merge';
|
|
427
|
-
}
|
|
428
|
-
else if (maneuverType === ManeuverType.OnRamp ||
|
|
429
|
-
maneuverType === ManeuverType.OffRamp) {
|
|
430
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.${maneuverType}`, {
|
|
431
|
-
maneuverModifier: translatedManeuverModifier
|
|
432
|
-
});
|
|
433
|
-
}
|
|
434
|
-
else if (maneuverType === ManeuverType.Fork) {
|
|
435
|
-
const directionKey = maneuverModifier.search('left') >= 0 ? 'left' : 'right';
|
|
436
|
-
iconName =
|
|
437
|
-
directionKey === 'left' ? 'turn_slight_left' : 'turn_slight_right';
|
|
438
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.fork.${directionKey}`, {
|
|
439
|
-
name
|
|
440
|
-
});
|
|
441
|
-
}
|
|
442
|
-
else if (maneuverType === ManeuverType.EndOfRoad ||
|
|
443
|
-
maneuverType === ManeuverType.UseLane ||
|
|
444
|
-
maneuverType === ManeuverType.Continue) {
|
|
445
|
-
if (maneuverType === ManeuverType.Continue) {
|
|
446
|
-
if (maneuverModifier === ManeuverModifier.Uturn) {
|
|
447
|
-
iconName = 'u_turn_left';
|
|
448
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.turn.${maneuverModifier}`, {
|
|
449
|
-
maneuverModifier: translatedManeuverModifier,
|
|
450
|
-
name
|
|
451
|
-
});
|
|
452
|
-
}
|
|
453
|
-
else {
|
|
454
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.${maneuverType}`, {
|
|
455
|
-
maneuverModifier: translatedManeuverModifier,
|
|
456
|
-
name
|
|
457
|
-
});
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
else {
|
|
461
|
-
if (maneuverModifier === ManeuverModifier.SharpRight ||
|
|
462
|
-
maneuverModifier === ManeuverModifier.Right) {
|
|
463
|
-
iconName = 'turn_right';
|
|
464
|
-
}
|
|
465
|
-
else if (maneuverModifier === ManeuverModifier.SharpLeft ||
|
|
466
|
-
maneuverModifier === ManeuverModifier.Left) {
|
|
467
|
-
iconName = 'turn_left';
|
|
468
|
-
}
|
|
469
|
-
else if (maneuverModifier === ManeuverModifier.SlightRight) {
|
|
470
|
-
iconName = 'turn_slight_right';
|
|
471
|
-
}
|
|
472
|
-
else if (maneuverModifier === ManeuverModifier.SlightLeft) {
|
|
473
|
-
iconName = 'turn_slight_left';
|
|
474
|
-
}
|
|
475
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.${maneuverType}`, {
|
|
476
|
-
maneuverModifier: translatedManeuverModifier,
|
|
477
|
-
name
|
|
478
|
-
});
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
else if (maneuverType === ManeuverType.Roundabout ||
|
|
482
|
-
maneuverType === ManeuverType.Rotary ||
|
|
483
|
-
maneuverType === ManeuverType.RoundaboutTurn ||
|
|
484
|
-
maneuverType === ManeuverType.ExitRoundabout) {
|
|
485
|
-
const roundaboutKey = maneuverType.replace('roundabout ', '');
|
|
486
|
-
instruction = translate.instant(`igo.geo.directions.results.maneuverType.${roundaboutKey}`, {
|
|
487
|
-
name
|
|
488
|
-
});
|
|
489
|
-
iconName = 'donut_large';
|
|
490
|
-
}
|
|
491
|
-
else if (maneuverType === ManeuverType.Notification) {
|
|
492
|
-
instruction = translate.instant('igo.geo.directions.results.maneuverType.notification');
|
|
493
|
-
}
|
|
494
|
-
return { instruction, iconName };
|
|
495
|
-
}
|
|
496
|
-
/**
|
|
497
|
-
* Translates a maneuver modifier into a human-readable string using the provided language service.
|
|
498
|
-
*
|
|
499
|
-
* @param {ManeuverModifier} maneuverModifier - The maneuver modifier to be translated.
|
|
500
|
-
* @param {LanguageService} languageService - The language service used for translation.
|
|
501
|
-
* @return {string | undefined} The translated maneuver modifier string, or undefined if the modifier is falsy.
|
|
502
|
-
*/
|
|
503
|
-
export function translateManeuverModifier(maneuverModifier, languageService) {
|
|
504
|
-
const translate = languageService.translate;
|
|
505
|
-
return maneuverModifier
|
|
506
|
-
? translate.instant(`igo.geo.directions.results.maneuverModifier.${maneuverModifier}`)
|
|
507
|
-
: undefined;
|
|
508
|
-
}
|
|
509
|
-
/**
|
|
510
|
-
* Translates the given bearing value into a human-readable direction using the provided language service.
|
|
511
|
-
*
|
|
512
|
-
* @param {number} bearing - The bearing value to be translated.
|
|
513
|
-
* @param {LanguageService} languageService - The language service used for translation.
|
|
514
|
-
* @return {string} The translated direction corresponding to the given bearing value.
|
|
515
|
-
*/
|
|
516
|
-
export function translateManeuverBearing(bearing, languageService) {
|
|
517
|
-
const translate = languageService.translate;
|
|
518
|
-
const directions = ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'];
|
|
519
|
-
const directionIndex = Math.round(bearing / 45) % 8;
|
|
520
|
-
return translate.instant(`igo.geo.directions.results.direction.${directions[directionIndex]}`);
|
|
521
|
-
}
|
|
522
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9ucy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RpcmVjdGlvbnMvc2hhcmVkL2RpcmVjdGlvbnMudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sU0FBUyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBSXBDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2pHLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixZQUFZLEVBQ2IsTUFBTSxtQkFBbUIsQ0FBQztBQWUzQjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFVBQXNCLEVBQ3RCLFlBQTRCLEtBQUssRUFDakMsS0FBSyxHQUFHLFVBQVU7SUFFbEIsVUFBVSxDQUFDLElB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Q0FDdEMsT0FBZSxFQUNmLGVBQWdDO0lBRWhDLE1BQU0sU0FBUyxHQUFxQixlQUFlLENBQUMsU0FBUyxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTFFLE1BQU0sY0FBYyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU1RCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQ3RCLHdDQUF3QyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FDckUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IE51bWJlclV0aWxzLCB1dWlkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuaW1wb3J0IE9sR2VvSlNPTiBmcm9tICdvbC9mb3JtYXQvR2VvSlNPTic7XG5pbXBvcnQgKiBhcyBvbEdlb20gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0ICogYXMgb2xQcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0ICogYXMgb2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9mZWF0dXJlLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgdHJ5QmluZFN0b3JlTGF5ZXIgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLXN0b3JlLnV0aWxzJztcbmltcG9ydCB7IEZFQVRVUkUsIEZlYXR1cmVNb3Rpb24gfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcbmltcG9ydCB7IEZlYXR1cmVHZW9tZXRyeSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB0cnlBZGRMb2FkaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9zdHJhdGVnaWVzLnV0aWxzJztcbmltcG9ydCB7IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL3N0cmF0ZWdpZXMvbG9hZGluZyc7XG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9yLWxheWVyJztcbmltcG9ydCB7IGNyZWF0ZU92ZXJsYXlNYXJrZXJTdHlsZSB9IGZyb20gJy4uLy4uL3N0eWxlL3NoYXJlZC9vdmVybGF5L292ZXJsYXktbWFya2VyLXN0eWxlLnV0aWxzJztcbmltcG9ydCB7XG4gIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLFxuICBEaXJlY3Rpb25zVHlwZSxcbiAgTWFuZXV2ZXJNb2RpZmllcixcbiAgTWFuZXV2ZXJUeXBlXG59IGZyb20gJy4vZGlyZWN0aW9ucy5lbnVtJztcbmltcG9ydCB7XG4gIERpcmVjdGlvbnMsXG4gIEZlYXR1cmVXaXRoRGlyZWN0aW9ucyxcbiAgRmVhdHVyZVdpdGhTdG9wLFxuICBJZ29TdGVwLFxuICBTdG9wXG59IGZyb20gJy4vZGlyZWN0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgUm91dGVzRmVhdHVyZVN0b3JlLFxuICBTdGVwc0ZlYXR1cmVTdG9yZSxcbiAgU3RvcHNGZWF0dXJlU3RvcmUsXG4gIFN0b3BzU3RvcmVcbn0gZnJvbSAnLi9zdG9yZSc7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc29ydGluZyBvZiB0aGUgc3RvcHMgaW4gdGhlIHByb3ZpZGVkIFN0b3BzU3RvcmUgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBmaWVsZCBhbmQgZGlyZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNTdG9yZX0gc3RvcHNTdG9yZSAtIFRoZSBTdG9wc1N0b3JlIHRvIHVwZGF0ZSB0aGUgc29ydGluZyBmb3IuXG4gKiBAcGFyYW0geydhc2MnIHwgJ2Rlc2MnfSBbZGlyZWN0aW9uPSdhc2MnXSAtIFRoZSBkaXJlY3Rpb24gb2Ygc29ydGluZyAoJ2FzYycgZm9yIGFzY2VuZGluZywgJ2Rlc2MnIGZvciBkZXNjZW5kaW5nKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmllbGQ9J3Bvc2l0aW9uJ10gLSBUaGUgZmllbGQgdG8gc29ydCB0aGUgc3RvcHMgYnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdG9yZVNvcnRpbmcoXG4gIHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUsXG4gIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJyxcbiAgZmllbGQgPSAncG9zaXRpb24nXG4pOiB2b2lkIHtcbiAgc3RvcHNTdG9yZS52aWV3LnNvcnQoe1xuICAgIGRpcmVjdGlvbixcbiAgICB2YWx1ZUFjY2Vzc29yOiAoZW50aXR5OiBTdG9wKSA9PiBlbnRpdHlbZmllbGRdXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiBhIHN0b3AgaW4gYSBsaXN0IG9mIHN0b3BzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdG9wSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHN0b3AuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RvcExpc3RMZW5ndGggLSBUaGUgdG90YWwgbnVtYmVyIG9mIHN0b3BzLlxuICogQHJldHVybiB7RGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGV9IFRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgc3RvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKFxuICBzdG9wSW5kZXg6IG51bWJlcixcbiAgc3RvcExpc3RMZW5ndGg6IG51bWJlclxuKTogRGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGUge1xuICBsZXQgcmVsYXRpdmVQb3NpdGlvbjogRGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGUgPVxuICAgIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLkludGVybWVkaWF0ZTtcbiAgaWYgKHN0b3BJbmRleCA9PT0gMCkge1xuICAgIHJlbGF0aXZlUG9zaXRpb24gPSBEaXJlY3Rpb25SZWxhdGl2ZVBvc2l0aW9uVHlwZS5TdGFydDtcbiAgfSBlbHNlIGlmIChzdG9wSW5kZXggPT09IHN0b3BMaXN0TGVuZ3RoKSB7XG4gICAgcmVsYXRpdmVQb3NpdGlvbiA9IERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLkVuZDtcbiAgfVxuICByZXR1cm4gcmVsYXRpdmVQb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcG9zaXRpb24gYW5kIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHN0b3BzIGluIHRoZSBnaXZlbiBzdG9wc1N0b3JlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNTdG9yZX0gc3RvcHNTdG9yZSAtIFRoZSBzdG9yZSBjb250YWluaW5nIHRoZSBzdG9wcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdG9wc1Bvc2l0aW9uKFxuICBkZWxldGVkU3RvcEluZGV4OiBudW1iZXIsXG4gIHN0b3BzU3RvcmU6IFN0b3BzU3RvcmVcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHN0b3Agb2Ygc3RvcHNTdG9yZS5hbGwoKSkge1xuICAgIHN0b3AucG9zaXRpb24gPVxuICAgICAgc3RvcC5wb3NpdGlvbiA+IGRlbGV0ZWRTdG9wSW5kZXggPyAoc3RvcC5wb3NpdGlvbiAtPSAxKSA6IHN0b3AucG9zaXRpb247XG4gICAgc3RvcC5yZWxhdGl2ZVBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oXG4gICAgICBzdG9wLnBvc2l0aW9uLFxuICAgICAgc3RvcHNTdG9yZS5hbGwoKS5sZW5ndGggLSAxXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgYSBzdG9wIHRvIHRoZSBnaXZlbiBzdG9wc1N0b3JlLiBUaGUgc3RvcCBpcyBhbHdheXMgYWRkZWQgYXMgdGhlIGxhc3Qgc3RvcC5cbiAqXG4gKiBAcGFyYW0ge1N0b3BzU3RvcmV9IHN0b3BzU3RvcmUgLSBUaGUgc3RvcmUgY29udGFpbmluZyB0aGUgc3RvcHMuXG4gKiBAcmV0dXJuIHtTdG9wfSBUaGUgbmV3bHkgYWRkZWQgc3RvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFN0b3BUb1N0b3JlKHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUpOiBTdG9wIHtcbiAgY29uc3QgaWQ6IHN0cmluZyA9IHV1aWQoKTtcbiAgY29uc3Qgc3RvcHM6IFN0b3BbXSA9IHN0b3BzU3RvcmUuYWxsKCk7XG4gIGNvbnN0IGluc2VydEluZGV4ID0gc3RvcHMubGVuZ3RoO1xuXG4gIGZvciAoY29uc3Qgc3RvcCBvZiBzdG9wc1N0b3JlLmFsbCgpKSB7XG4gICAgc3RvcC5yZWxhdGl2ZVBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oXG4gICAgICBzdG9wLnBvc2l0aW9uLFxuICAgICAgc3RvcHMubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIHN0b3BzU3RvcmUuaW5zZXJ0KHtcbiAgICBpZCxcbiAgICBwb3NpdGlvbjogaW5zZXJ0SW5kZXgsXG4gICAgcmVsYXRpdmVQb3NpdGlvbjogY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oaW5zZXJ0SW5kZXgsIHN0b3BzLmxlbmd0aClcbiAgfSk7XG5cbiAgdXBkYXRlU3RvcmVTb3J0aW5nKHN0b3BzU3RvcmUpO1xuICByZXR1cm4gc3RvcHNTdG9yZS5nZXQoaWQpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYSBzdG9wIGZyb20gdGhlIGdpdmVuIHN0b3BzU3RvcmUgYW5kIHVwZGF0ZXMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgcmVtYWluaW5nIHN0b3BzLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNTdG9yZX0gc3RvcHNTdG9yZSAtIFRoZSBzdG9yZSBjb250YWluaW5nIHRoZSBzdG9wcy5cbiAqIEBwYXJhbSB7U3RvcH0gc3RvcCAtIFRoZSBzdG9wIHRvIGJlIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTdG9wRnJvbVN0b3JlKHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUsIHN0b3A6IFN0b3ApOiB2b2lkIHtcbiAgc3RvcHNTdG9yZS5kZWxldGUoc3RvcCk7XG4gIGNvbXB1dGVTdG9wc1Bvc2l0aW9uKHN0b3AucG9zaXRpb24sIHN0b3BzU3RvcmUpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0eWxlIGZvciB0aGUgZGlyZWN0aW9ucyBzdGVwcywgc3RvcHMgYW5kIHJvdXRlXG4gKiBAcGFyYW0gZmVhdHVyZSBPbEZlYXR1cmVcbiAqIEByZXR1cm5zIE9MIHN0eWxlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3Rpb25zU3R5bGUoXG4gIGZlYXR1cmU6IG9sRmVhdHVyZTxPbEdlb21ldHJ5PlxuKTogb2xTdHlsZS5TdHlsZSB8IG9sU3R5bGUuU3R5bGVbXSB7XG4gIGNvbnN0IHN0ZXBTdHlsZSA9IFtcbiAgICBuZXcgb2xTdHlsZS5TdHlsZSh7XG4gICAgICBnZW9tZXRyeTogZmVhdHVyZS5nZXRHZW9tZXRyeSgpLFxuICAgICAgaW1hZ2U6IG5ldyBvbFN0eWxlLkNpcmNsZSh7XG4gICAgICAgIHJhZGl1czogNyxcbiAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2UoeyBjb2xvcjogJyNGRjAwMDAnLCB3aWR0aDogMyB9KVxuICAgICAgfSlcbiAgICB9KVxuICBdO1xuXG4gIGNvbnN0IHN0b3BTdHlsZTogb2xTdHlsZS5TdHlsZSA9IGNyZWF0ZU92ZXJsYXlNYXJrZXJTdHlsZSh7XG4gICAgdGV4dDogZmVhdHVyZS5nZXQoJ3N0b3BUZXh0JyksXG4gICAgb3BhY2l0eTogZmVhdHVyZS5nZXQoJ3N0b3BPcGFjaXR5JyksXG4gICAgbWFya2VyQ29sb3I6IGZlYXR1cmUuZ2V0KCdzdG9wQ29sb3InKSxcbiAgICBtYXJrZXJPdXRsaW5lQ29sb3I6IFsyNTUsIDI1NSwgMjU1XVxuICB9KTtcblxuICBjb25zdCByb3V0ZVN0eWxlOiBvbFN0eWxlLlN0eWxlW10gPSBbXG4gICAgbmV3IG9sU3R5bGUuU3R5bGUoe1xuICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xuICAgICAgICBjb2xvcjogYHJnYmEoMTA2LCAxMjEsIDEzMCwgJHtmZWF0dXJlLmdldCgnYWN0aXZlJykgPyAwLjc1IDogMH0pYCxcbiAgICAgICAgd2lkdGg6IDEwXG4gICAgICB9KVxuICAgIH0pLFxuICAgIG5ldyBvbFN0eWxlLlN0eWxlKHtcbiAgICAgIHN0cm9rZTogbmV3IG9sU3R5bGUuU3Ryb2tlKHtcbiAgICAgICAgY29sb3I6IGByZ2JhKDc5LCAxNjksIDIyMSwgJHtmZWF0dXJlLmdldCgnYWN0aXZlJykgPyAwLjc1IDogMH0pYCxcbiAgICAgICAgd2lkdGg6IDZcbiAgICAgIH0pXG4gICAgfSlcbiAgXTtcblxuICBpZiAoZmVhdHVyZS5nZXQoJ3R5cGUnKSA9PT0gRGlyZWN0aW9uc1R5cGUuU3RvcCkge1xuICAgIHJldHVybiBzdG9wU3R5bGU7XG4gIH1cbiAgaWYgKGZlYXR1cmUuZ2V0KCd0eXBlJykgPT09IERpcmVjdGlvbnNUeXBlLlZlcnRleCkge1xuICAgIHJldHVybiBzdGVwU3R5bGU7XG4gIH1cbiAgaWYgKGZlYXR1cmUuZ2V0KCd0eXBlJykgPT09IERpcmVjdGlvbnNUeXBlLlJvdXRlKSB7XG4gICAgcmV0dXJuIHJvdXRlU3R5bGU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgc3RvcHMgZmVhdHVyZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNGZWF0dXJlU3RvcmV9IHN0b3BzRmVhdHVyZVN0b3JlIC0gVGhlIHN0b3BzIGZlYXR1cmUgc3RvcmUgdG8gaW5pdGlhbGl6ZS5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZXJ2aWNlfSBsYW5ndWFnZVNlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSB1c2VkIGZvciB0cmFuc2xhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0U3RvcHNGZWF0dXJlU3RvcmUoXG4gIHN0b3BzRmVhdHVyZVN0b3JlOiBTdG9wc0ZlYXR1cmVTdG9yZSxcbiAgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2Vcbik6IHZvaWQge1xuICBjb25zdCBsb2FkaW5nU3RyYXRlZ3k6IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSA9XG4gICAgbmV3IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSh7XG4gICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxuICAgIH0pO1xuXG4gIGNvbnN0IHN0b3BzTGF5ZXI6IFZlY3RvckxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgaWQ6ICdpZ28tZGlyZWN0aW9uLXN0b3BzLWxheWVyJyxcbiAgICB0aXRsZTogbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMubGF5ZXIuc3RvcHMnKSxcbiAgICB6SW5kZXg6IDkxMSxcbiAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgIHNob3dJbkxheWVyTGlzdDogdHJ1ZSxcbiAgICB2aXNpYmxlOiB0cnVlLFxuICAgIHdvcmtzcGFjZToge1xuICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9LFxuICAgIGxpbmtlZExheWVyczoge1xuICAgICAgbGlua0lkOiAnaWdvLWRpcmVjdGlvbi1zdG9wcy1sYXllcicsXG4gICAgICBsaW5rczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3luY2VkRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGxpbmtlZElkczogWydpZ28tZGlyZWN0aW9uLXJvdXRlLWxheWVyJ10sXG4gICAgICAgICAgcHJvcGVydGllczogW11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHN0b3BzRmVhdHVyZVN0b3JlLCBzdG9wc0xheWVyKTtcbiAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5KHN0b3BzRmVhdHVyZVN0b3JlLCBsb2FkaW5nU3RyYXRlZ3kpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSByb3V0ZXMgZmVhdHVyZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNGZWF0dXJlU3RvcmV9IHJvdXRlc0ZlYXR1cmVTdG9yZSAtIFRoZSByb3V0ZXMgZmVhdHVyZSBzdG9yZSB0byBpbml0aWFsaXplLlxuICogQHBhcmFtIHtMYW5ndWFnZVNlcnZpY2V9IGxhbmd1YWdlU2VydmljZSAtIFRoZSBsYW5ndWFnZSBzZXJ2aWNlIHVzZWQgZm9yIHRyYW5zbGF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRSb3V0ZXNGZWF0dXJlU3RvcmUoXG4gIHJvdXRlc0ZlYXR1cmVTdG9yZTogUm91dGVzRmVhdHVyZVN0b3JlLFxuICBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxuKTogdm9pZCB7XG4gIGNvbnN0IGxvYWRpbmdTdHJhdGVneTogRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5ID1cbiAgICBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcbiAgICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbi5Ob25lXG4gICAgfSk7XG5cbiAgY29uc3Qgcm91dGVMYXllcjogVmVjdG9yTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgIGlzSWdvSW50ZXJuYWxMYXllcjogdHJ1ZSxcbiAgICBpZDogJ2lnby1kaXJlY3Rpb24tcm91dGUtbGF5ZXInLFxuICAgIHRpdGxlOiBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5sYXllci5yb3V0ZScpLFxuICAgIHpJbmRleDogOTEwLFxuICAgIHNvdXJjZTogbmV3IEZlYXR1cmVEYXRhU291cmNlKCksXG4gICAgc2hvd0luTGF5ZXJMaXN0OiB0cnVlLFxuICAgIHZpc2libGU6IHRydWUsXG4gICAgd29ya3NwYWNlOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZVxuICAgIH0sXG4gICAgbGlua2VkTGF5ZXJzOiB7XG4gICAgICBsaW5rSWQ6ICdpZ28tZGlyZWN0aW9uLXJvdXRlLWxheWVyJ1xuICAgIH0sXG4gICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHJvdXRlc0ZlYXR1cmVTdG9yZSwgcm91dGVMYXllcik7XG4gIHRyeUFkZExvYWRpbmdTdHJhdGVneShyb3V0ZXNGZWF0dXJlU3RvcmUsIGxvYWRpbmdTdHJhdGVneSk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIHJvdXRlcyBmZWF0dXJlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNGZWF0dXJlU3RvcmV9IHN0ZXBzRmVhdHVyZVN0b3JlIC0gVGhlIHN0ZXBzIGZlYXR1cmUgc3RvcmUgdG8gaW5pdGlhbGl6ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRTdGVwc0ZlYXR1cmVTdG9yZShzdGVwc0ZlYXR1cmVTdG9yZTogU3RlcHNGZWF0dXJlU3RvcmUpIHtcbiAgY29uc3QgbG9hZGluZ1N0cmF0ZWd5OiBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3kgPVxuICAgIG5ldyBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3koe1xuICAgICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmVcbiAgICB9KTtcblxuICBjb25zdCBzdGVwTGF5ZXI6IFZlY3RvckxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgaWQ6ICdpZ28tZGlyZWN0aW9uLXN0ZXAtbGF5ZXInLFxuICAgIHRpdGxlOiAnJyxcbiAgICB6SW5kZXg6IDkxMCxcbiAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgIHNob3dJbkxheWVyTGlzdDogZmFsc2UsXG4gICAgdmlzaWJsZTogdHJ1ZSxcbiAgICB3b3Jrc3BhY2U6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgfSxcbiAgICBsaW5rZWRMYXllcnM6IHtcbiAgICAgIGxpbmtJZDogJ2lnby1kaXJlY3Rpb24tcm91dGUtbGF5ZXInXG4gICAgfSxcbiAgICBleHBvcnRhYmxlOiBmYWxzZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHN0ZXBzRmVhdHVyZVN0b3JlLCBzdGVwTGF5ZXIpO1xuICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3koc3RlcHNGZWF0dXJlU3RvcmUsIGxvYWRpbmdTdHJhdGVneSk7XG59XG5cbi8qKlxuICogQWRkcyBhIHN0b3AgdG8gdGhlIHN0b3BzRmVhdHVyZVN0b3JlLlxuICpcbiAqIEBwYXJhbSB7U3RvcH0gc3RvcCAtIFRoZSBzdG9wIHRvIGJlIGFkZGVkLlxuICogQHBhcmFtIHtTdG9wc0ZlYXR1cmVTdG9yZX0gc3RvcHNGZWF0dXJlU3RvcmUgLSBUaGUgc3RvcHNGZWF0dXJlU3RvcmUgdG8gYWRkIHRoZSBzdG9wIHRvLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3Rpb24gLSBUaGUgcHJvamVjdGlvbiBvZiB0aGUgc3RvcCBjb29yZGluYXRlcy5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZXJ2aWNlfSBsYW5ndWFnZVNlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSBmb3IgdHJhbnNsYXRpbmcgc3RvcCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU3RvcFRvU3RvcHNGZWF0dXJlU3RvcmUoXG4gIHN0b3A6IFN0b3AsXG4gIHN0b3BzRmVhdHVyZVN0b3JlOiBTdG9wc0ZlYXR1cmVTdG9yZSxcbiAgcHJvamVjdGlvbjogc3RyaW5nLFxuICBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxuKTogdm9pZCB7XG4gIGxldCBzdG9wQ29sb3I6IHN0cmluZztcbiAgbGV0IHN0b3BUZXh0OiBzdHJpbmc7XG5cbiAgc3dpdGNoIChzdG9wLnJlbGF0aXZlUG9zaXRpb24pIHtcbiAgICBjYXNlIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLlN0YXJ0OlxuICAgICAgc3RvcENvbG9yID0gJyMwMDgwMDAnO1xuICAgICAgc3RvcFRleHQgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnMuaW5wdXQuc3RhcnQnXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaXJlY3Rpb25SZWxhdGl2ZVBvc2l0aW9uVHlwZS5FbmQ6XG4gICAgICBzdG9wQ29sb3IgPSAnI2Y2NDEzOSc7XG4gICAgICBzdG9wVGV4dCA9IGxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5pbnB1dC5lbmQnXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0b3BDb2xvciA9ICcjZmZkNzAwJztcbiAgICAgIHN0b3BUZXh0ID1cbiAgICAgICAgbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnMuaW5wdXQuaW50ZXJtZWRpYXRlJ1xuICAgICAgICApICtcbiAgICAgICAgJyAjJyArXG4gICAgICAgIHN0b3AucG9zaXRpb247XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IHBvaW50OiBvbEdlb20uUG9pbnQgPSBuZXcgb2xHZW9tLlBvaW50KFxuICAgIG9sUHJvai50cmFuc2Zvcm0oXG4gICAgICBzdG9wLmNvb3JkaW5hdGVzLFxuICAgICAgcHJvamVjdGlvbixcbiAgICAgIHN0b3BzRmVhdHVyZVN0b3JlLm1hcC5wcm9qZWN0aW9uQ29kZVxuICAgIClcbiAgKTtcblxuICBjb25zdCBnZW9qc29uR2VvbTogRmVhdHVyZUdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3QoXG4gICAgcG9pbnQsXG4gICAge1xuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHN0b3BzRmVhdHVyZVN0b3JlLm1hcC5wcm9qZWN0aW9uQ29kZSxcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiBzdG9wc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGVcbiAgICB9XG4gICkgYXMgRmVhdHVyZUdlb21ldHJ5O1xuXG4gIGNvbnN0IHByZXZpb3VzU3RvcDogRmVhdHVyZVdpdGhTdG9wID0gc3RvcHNGZWF0dXJlU3RvcmUuZ2V0KHN0b3AuaWQpO1xuICBjb25zdCBwcmV2aW91c1N0b3BSZXZpc2lvbjogbnVtYmVyID0gcHJldmlvdXNTdG9wXG4gICAgPyBwcmV2aW91c1N0b3AubWV0YS5yZXZpc2lvblxuICAgIDogMDtcblxuICBjb25zdCBzdG9wRmVhdHVyZVN0b3JlOiBGZWF0dXJlV2l0aFN0b3AgPSB7XG4gICAgdHlwZTogRkVBVFVSRSxcbiAgICBnZW9tZXRyeTogZ2VvanNvbkdlb20sXG4gICAgcHJvamVjdGlvbjogc3RvcHNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb25Db2RlLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGlkOiBzdG9wLmlkLFxuICAgICAgdHlwZTogRGlyZWN0aW9uc1R5cGUuU3RvcCxcbiAgICAgIHN0b3BUZXh0LFxuICAgICAgc3RvcENvbG9yLFxuICAgICAgc3RvcE9wYWNpdHk6IDEsXG4gICAgICBzdG9wXG4gICAgfSxcbiAgICBtZXRhOiB7XG4gICAgICBpZDogc3RvcC5pZCxcbiAgICAgIHJldmlzaW9uOiBwcmV2aW91c1N0b3BSZXZpc2lvbiArIDFcbiAgICB9LFxuICAgIG9sOiBuZXcgb2xGZWF0dXJlKHsgcG9pbnQgfSlcbiAgfTtcbiAgc3RvcHNGZWF0dXJlU3RvcmUudXBkYXRlKHN0b3BGZWF0dXJlU3RvcmUpO1xufVxuXG4vKipcbiAqIEFkZHMgYSByb3V0ZSB0byB0aGUgcm91dGVzIGZlYXR1cmUgc3RvcmUuXG4gKlxuICogQHBhcmFtIHtSb3V0ZXNGZWF0dXJlU3RvcmV9IHJvdXRlc0ZlYXR1cmVTdG9yZSAtIFRoZSByb3V0ZXMgZmVhdHVyZSBzdG9yZSB0byBhZGQgdGhlIHJvdXRlIHRvLlxuICogQHBhcmFtIHtEaXJlY3Rpb25zfSBkaXJlY3Rpb25zIC0gVGhlIGRpcmVjdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGdlb21ldHJ5IGFuZCBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0aW9uIC0gVGhlIHByb2plY3Rpb24gb2YgdGhlIGdlb21ldHJ5IGNvb3JkaW5hdGVzLlxuICogQHBhcmFtIHtib29sZWFufSBbYWN0aXZlPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkaXJlY3Rpb24gaXMgYWN0aXZlIG9yIG5vdC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJvdXRlVG9Sb3V0ZXNGZWF0dXJlU3RvcmUoXG4gIHJvdXRlc0ZlYXR1cmVTdG9yZTogUm91dGVzRmVhdHVyZVN0b3JlLFxuICBkaXJlY3Rpb25zOiBEaXJlY3Rpb25zLFxuICBwcm9qZWN0aW9uOiBzdHJpbmcsXG4gIGFjdGl2ZSA9IGZhbHNlXG4pOiB2b2lkIHtcbiAgY29uc3QgY29vcmRpbmF0ZTogQ29vcmRpbmF0ZSA9IGRpcmVjdGlvbnMuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gIGNvbnN0IGxpbmVzdHJpbmc0MzI2OiBvbEdlb20uTGluZVN0cmluZyA9IG5ldyBvbEdlb20uTGluZVN0cmluZyhjb29yZGluYXRlKTtcbiAgY29uc3QgbGluZXN0cmluZ1N0b3JlOiBvbEdlb20uTGluZVN0cmluZyA9IGxpbmVzdHJpbmc0MzI2LnRyYW5zZm9ybShcbiAgICBwcm9qZWN0aW9uLFxuICAgIHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGVcbiAgKTtcblxuICBjb25zdCBnZW9qc29uR2VvbTogRmVhdHVyZUdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3QoXG4gICAgbGluZXN0cmluZ1N0b3JlLFxuICAgIHtcbiAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiByb3V0ZXNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb25Db2RlLFxuICAgICAgZGF0YVByb2plY3Rpb246IHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGVcbiAgICB9XG4gICkgYXMgRmVhdHVyZUdlb21ldHJ5O1xuXG4gIGNvbnN0IHByZXZpb3VzUm91dGU6IEZlYXR1cmVXaXRoRGlyZWN0aW9ucyA9IHJvdXRlc0ZlYXR1cmVTdG9yZS5nZXQoXG4gICAgZGlyZWN0aW9ucy5pZFxuICApO1xuICBjb25zdCBwcmV2aW91c1JvdXRlUmV2aXNpb246IG51bWJlciA9IHByZXZpb3VzUm91dGVcbiAgICA/IHByZXZpb3VzUm91dGUubWV0YS5yZXZpc2lvblxuICAgIDogMDtcblxuICBjb25zdCByb3V0ZUZlYXR1cmVTdG9yZTogRmVhdHVyZVdpdGhEaXJlY3Rpb25zID0ge1xuICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgZ2VvbWV0cnk6IGdlb2pzb25HZW9tLFxuICAgIHByb2plY3Rpb246IHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGUsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgaWQ6IGRpcmVjdGlvbnMuaWQsXG4gICAgICB0eXBlOiBEaXJlY3Rpb25zVHlwZS5Sb3V0ZSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGRpcmVjdGlvbnNcbiAgICB9LFxuICAgIG1ldGE6IHtcbiAgICAgIGlkOiBkaXJlY3Rpb25zLmlkLFxuICAgICAgcmV2aXNpb246IHByZXZpb3VzUm91dGVSZXZpc2lvbiArIDFcbiAgICB9LFxuICAgIG9sOiBuZXcgb2xGZWF0dXJlKHsgbGluZXN0cmluZ1N0b3JlIH0pXG4gIH07XG4gIHJvdXRlc0ZlYXR1cmVTdG9yZS51cGRhdGUocm91dGVGZWF0dXJlU3RvcmUpO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGdpdmVuIGRpc3RhbmNlIGluIG1ldGVycyB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWV0ZXJzIC0gVGhlIGRpc3RhbmNlIGluIG1ldGVycyB0byBiZSBmb3JtYXR0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBmb3JtYXR0ZWQgZGlzdGFuY2Ugc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UobWV0ZXJzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWV0ZXJzID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChtZXRlcnMgPCAxMDAwKSB7XG4gICAgcmV0dXJuIGAke01hdGgucm91bmQobWV0ZXJzKX0gbWA7XG4gIH1cblxuICBjb25zdCBraWxvbWV0ZXJzOiBudW1iZXIgPSBtZXRlcnMgLyAxMDAwO1xuICBjb25zdCByb3VuZFRvRGVjaW1hbDogMCB8IDEgPSBraWxvbWV0ZXJzID49IDEwID8gMSA6IDA7XG5cbiAgcmV0dXJuIGAke051bWJlclV0aWxzLnJvdW5kVG9ORGVjaW1hbChraWxvbWV0ZXJzLCByb3VuZFRvRGVjaW1hbCl9IGttYC5yZXBsYWNlKFxuICAgICcuJyxcbiAgICAnLCdcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBnaXZlbiBkdXJhdGlvbiBpbiBzZWNvbmRzIHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWNvbmRzIC0gVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgdG8gYmUgZm9ybWF0dGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGR1cmF0aW9uIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uKHNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGhvdXJzOiBudW1iZXIgPSBNYXRoLmZsb29yKHNlY29uZHMgLyAzNjAwKTtcbiAgY29uc3QgbWludXRlczogbnVtYmVyID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDM2MDApIC8gNjApO1xuXG4gIGlmIChob3Vycykge1xuICAgIHJldHVybiBgJHtob3Vyc30gaCAke21pbnV0ZXN9IG1pbmA7XG4gIH1cblxuICBpZiAobWludXRlcykge1xuICAgIHJldHVybiBgJHttaW51dGVzfSBtaW5gO1xuICB9XG5cbiAgcmV0dXJuICc8IDEgbWluJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0ZXAoXG4gIHN0ZXA6IElnb1N0ZXAsXG4gIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICBsYXN0U3RlcCA9IGZhbHNlXG4pIHtcbiAgY29uc3QgbWFuZXV2ZXJUeXBlOiBNYW5ldXZlclR5cGUgPSBzdGVwLm1hbmV1dmVyLnR5cGU7XG4gIGNvbnN0IG1hbmV1dmVyTW9kaWZpZXI6IE1hbmV1dmVyTW9kaWZpZXIgPSBzdGVwLm1hbmV1dmVyLm1vZGlmaWVyO1xuICBjb25zdCBuYW1lOiBzdHJpbmcgPSBzdGVwLm5hbWU7XG4gIGNvbnN0IG1hbmV1dmVyQmVhcmluZ0FmdGVyOiBudW1iZXIgPSBzdGVwLm1hbmV1dmVyLmJlYXJpbmdfYWZ0ZXI7XG5cbiAgY29uc3QgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgY29uc3QgdHJhbnNsYXRlZE1hbmV1dmVyQmVhcmluZ0FmdGVyOiBzdHJpbmcgPSB0cmFuc2xhdGVNYW5ldXZlckJlYXJpbmcoXG4gICAgbWFuZXV2ZXJCZWFyaW5nQWZ0ZXIsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlXG4gICk7XG4gIGNvbnN0IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyOiBzdHJpbmcgPSB0cmFuc2xhdGVNYW5ldXZlck1vZGlmaWVyKFxuICAgIG1hbmV1dmVyTW9kaWZpZXIsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlXG4gICk7XG5cbiAgbGV0IGljb25OYW1lID0gJ3N0cmFpZ2h0JzsgLy8gYXJyb3cgcG9pbnQgdXAgYnkgZGVmYXVsdFxuICBsZXQgaW5zdHJ1Y3Rpb24gPSAnJztcblxuICBpZiAobWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuVHVybikge1xuICAgIGlmIChcbiAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuVXR1cm4gfHxcbiAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU3RyYWlnaHRcbiAgICApIHtcbiAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUudHVybi4ke21hbmV1dmVyTW9kaWZpZXJ9YCxcbiAgICAgICAge1xuICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGlmIChtYW5ldXZlck1vZGlmaWVyID09PSBNYW5ldXZlck1vZGlmaWVyLlV0dXJuKSB7XG4gICAgICAgIGljb25OYW1lID0gJ3VfdHVybl9sZWZ0JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS50dXJuLmVsc2UnLFxuICAgICAgICB7XG4gICAgICAgICAgbWFuZXV2ZXJNb2RpZmllcjogdHJhbnNsYXRlZE1hbmV1dmVyTW9kaWZpZXIsXG4gICAgICAgICAgbmFtZVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TbGlnaHRSaWdodCkge1xuICAgICAgICBpY29uTmFtZSA9ICd0dXJuX3NsaWdodF9yaWdodCc7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBtYW5ldXZlck1vZGlmaWVyID09PSBNYW5ldXZlck1vZGlmaWVyLlJpZ2h0IHx8XG4gICAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU2hhcnBSaWdodFxuICAgICAgKSB7XG4gICAgICAgIGljb25OYW1lID0gJ3R1cm5fcmlnaHQnO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5MZWZ0IHx8XG4gICAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU2hhcnBMZWZ0XG4gICAgICApIHtcbiAgICAgICAgaWNvbk5hbWUgPSAndHVybl9sZWZ0JztcbiAgICAgIH0gZWxzZSBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TbGlnaHRMZWZ0KSB7XG4gICAgICAgIGljb25OYW1lID0gJ3R1cm5fc2xpZ2h0X2xlZnQnO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5OZXdOYW1lKSB7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUubmV3IG5hbWVgLFxuICAgICAge1xuICAgICAgICBuYW1lLFxuICAgICAgICBtYW5ldXZlckJlYXJpbmc6IHRyYW5zbGF0ZWRNYW5ldXZlckJlYXJpbmdBZnRlclxuICAgICAgfVxuICAgICk7XG4gIH0gZWxzZSBpZiAobWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuRGVwYXJ0KSB7XG4gICAgaWNvbk5hbWUgPSAnZGlyZWN0aW9ucyc7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuZGVwYXJ0YCxcbiAgICAgIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWFuZXV2ZXJCZWFyaW5nOiB0cmFuc2xhdGVkTWFuZXV2ZXJCZWFyaW5nQWZ0ZXJcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2UgaWYgKG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLkFycml2ZSkge1xuICAgIGljb25OYW1lID0gJ3Nwb3J0c19zY29yZSc7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuYXJyaXZlLiR7bGFzdFN0ZXAgPyAnbGFzdFN0ZXAnIDogJ2ludGVybWVkaWF0ZSd9YCxcbiAgICAgIHtcbiAgICAgICAgbmFtZVxuICAgICAgfVxuICAgICk7XG4gIH0gZWxzZSBpZiAobWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuTWVyZ2UpIHtcbiAgICBpbnN0cnVjdGlvbiA9IHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS5tZXJnZScsXG4gICAgICB7XG4gICAgICAgIG5hbWVcbiAgICAgIH1cbiAgICApO1xuICAgIGljb25OYW1lID0gJ21lcmdlJztcbiAgfSBlbHNlIGlmIChcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5PblJhbXAgfHxcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5PZmZSYW1wXG4gICkge1xuICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICBgaWdvLmdlby5kaXJlY3Rpb25zLnJlc3VsdHMubWFuZXV2ZXJUeXBlLiR7bWFuZXV2ZXJUeXBlfWAsXG4gICAgICB7XG4gICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyXG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIGlmIChtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5Gb3JrKSB7XG4gICAgY29uc3QgZGlyZWN0aW9uS2V5OiBzdHJpbmcgPVxuICAgICAgbWFuZXV2ZXJNb2RpZmllci5zZWFyY2goJ2xlZnQnKSA+PSAwID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICBpY29uTmFtZSA9XG4gICAgICBkaXJlY3Rpb25LZXkgPT09ICdsZWZ0JyA/ICd0dXJuX3NsaWdodF9sZWZ0JyA6ICd0dXJuX3NsaWdodF9yaWdodCc7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuZm9yay4ke2RpcmVjdGlvbktleX1gLFxuICAgICAge1xuICAgICAgICBuYW1lXG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIGlmIChcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5FbmRPZlJvYWQgfHxcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5Vc2VMYW5lIHx8XG4gICAgbWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuQ29udGludWVcbiAgKSB7XG4gICAgaWYgKG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLkNvbnRpbnVlKSB7XG4gICAgICBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5VdHVybikge1xuICAgICAgICBpY29uTmFtZSA9ICd1X3R1cm5fbGVmdCc7XG4gICAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgYGlnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS50dXJuLiR7bWFuZXV2ZXJNb2RpZmllcn1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgYGlnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS4ke21hbmV1dmVyVHlwZX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBtYW5ldXZlck1vZGlmaWVyID09PSBNYW5ldXZlck1vZGlmaWVyLlNoYXJwUmlnaHQgfHxcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5SaWdodFxuICAgICAgKSB7XG4gICAgICAgIGljb25OYW1lID0gJ3R1cm5fcmlnaHQnO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TaGFycExlZnQgfHxcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5MZWZ0XG4gICAgICApIHtcbiAgICAgICAgaWNvbk5hbWUgPSAndHVybl9sZWZ0JztcbiAgICAgIH0gZWxzZSBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TbGlnaHRSaWdodCkge1xuICAgICAgICBpY29uTmFtZSA9ICd0dXJuX3NsaWdodF9yaWdodCc7XG4gICAgICB9IGVsc2UgaWYgKG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU2xpZ2h0TGVmdCkge1xuICAgICAgICBpY29uTmFtZSA9ICd0dXJuX3NsaWdodF9sZWZ0JztcbiAgICAgIH1cbiAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuJHttYW5ldXZlclR5cGV9YCxcbiAgICAgICAge1xuICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgbWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuUm91bmRhYm91dCB8fFxuICAgIG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLlJvdGFyeSB8fFxuICAgIG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLlJvdW5kYWJvdXRUdXJuIHx8XG4gICAgbWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuRXhpdFJvdW5kYWJvdXRcbiAgKSB7XG4gICAgY29uc3Qgcm91bmRhYm91dEtleSA9IG1hbmV1dmVyVHlwZS5yZXBsYWNlKCdyb3VuZGFib3V0ICcsICcnKTtcbiAgICBpbnN0cnVjdGlvbiA9IHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgYGlnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS4ke3JvdW5kYWJvdXRLZXl9YCxcbiAgICAgIHtcbiAgICAgICAgbmFtZVxuICAgICAgfVxuICAgICk7XG4gICAgaWNvbk5hbWUgPSAnZG9udXRfbGFyZ2UnO1xuICB9IGVsc2UgaWYgKG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLk5vdGlmaWNhdGlvbikge1xuICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAnaWdvLmdlby5kaXJlY3Rpb25zLnJlc3VsdHMubWFuZXV2ZXJUeXBlLm5vdGlmaWNhdGlvbidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHsgaW5zdHJ1Y3Rpb24sIGljb25OYW1lIH07XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyBhIG1hbmV1dmVyIG1vZGlmaWVyIGludG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgdXNpbmcgdGhlIHByb3ZpZGVkIGxhbmd1YWdlIHNlcnZpY2UuXG4gKlxuICogQHBhcmFtIHtNYW5ldXZlck1vZGlmaWVyfSBtYW5ldXZlck1vZGlmaWVyIC0gVGhlIG1hbmV1dmVyIG1vZGlmaWVyIHRvIGJlIHRyYW5zbGF0ZWQuXG4gKiBAcGFyYW0ge0xhbmd1YWdlU2VydmljZX0gbGFuZ3VhZ2VTZXJ2aWNlIC0gVGhlIGxhbmd1YWdlIHNlcnZpY2UgdXNlZCBmb3IgdHJhbnNsYXRpb24uXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSB0cmFuc2xhdGVkIG1hbmV1dmVyIG1vZGlmaWVyIHN0cmluZywgb3IgdW5kZWZpbmVkIGlmIHRoZSBtb2RpZmllciBpcyBmYWxzeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZU1hbmV1dmVyTW9kaWZpZXIoXG4gIG1hbmV1dmVyTW9kaWZpZXI6IE1hbmV1dmVyTW9kaWZpZXIsXG4gIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlXG4pOiBzdHJpbmcge1xuICBjb25zdCB0cmFuc2xhdGUgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xuICByZXR1cm4gbWFuZXV2ZXJNb2RpZmllclxuICAgID8gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlck1vZGlmaWVyLiR7bWFuZXV2ZXJNb2RpZmllcn1gXG4gICAgICApXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgZ2l2ZW4gYmVhcmluZyB2YWx1ZSBpbnRvIGEgaHVtYW4tcmVhZGFibGUgZGlyZWN0aW9uIHVzaW5nIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWFyaW5nIC0gVGhlIGJlYXJpbmcgdmFsdWUgdG8gYmUgdHJhbnNsYXRlZC5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZXJ2aWNlfSBsYW5ndWFnZVNlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSB1c2VkIGZvciB0cmFuc2xhdGlvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRyYW5zbGF0ZWQgZGlyZWN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGJlYXJpbmcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVNYW5ldXZlckJlYXJpbmcoXG4gIGJlYXJpbmc6IG51bWJlcixcbiAgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2Vcbik6IHN0cmluZyB7XG4gIGNvbnN0IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSA9IGxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XG4gIGNvbnN0IGRpcmVjdGlvbnM6IHN0cmluZ1tdID0gWyduJywgJ25lJywgJ2UnLCAnc2UnLCAncycsICdzdycsICd3JywgJ253J107XG5cbiAgY29uc3QgZGlyZWN0aW9uSW5kZXg6IG51bWJlciA9IE1hdGgucm91bmQoYmVhcmluZyAvIDQ1KSAlIDg7XG5cbiAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5kaXJlY3Rpb24uJHtkaXJlY3Rpb25zW2RpcmVjdGlvbkluZGV4XX1gXG4gICk7XG59XG4iXX0=
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export * from './directions.service';
|
|
2
|
-
export * from './directions.enum';
|
|
3
|
-
export * from './directions.interface';
|
|
4
|
-
export * from './directions.utils';
|
|
5
|
-
export * from './store';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kaXJlY3Rpb25zL3NoYXJlZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb25zLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb25zLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGlvbnMudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9yZSc7XG4iXX0=
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { EntityStore } from '@igo2/common/entity';
|
|
2
|
-
import { BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { FeatureStore } from '../../feature/shared/store';
|
|
4
|
-
/**
|
|
5
|
-
* The class is a specialized version of an EntityStore that stores
|
|
6
|
-
* stops.
|
|
7
|
-
*/
|
|
8
|
-
export class StopsStore extends EntityStore {
|
|
9
|
-
storeInitialized$ = new BehaviorSubject(false);
|
|
10
|
-
clearStops() {
|
|
11
|
-
this.storeInitialized$.next(false);
|
|
12
|
-
this.clear();
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
export class StopsFeatureStore extends FeatureStore {
|
|
16
|
-
}
|
|
17
|
-
export class RoutesFeatureStore extends FeatureStore {
|
|
18
|
-
}
|
|
19
|
-
export class StepsFeatureStore extends FeatureStore {
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kaXJlY3Rpb25zL3NoYXJlZC9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFRMUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFVBQVcsU0FBUSxXQUFpQjtJQUN4QyxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUV4RCxVQUFVO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBNkI7Q0FBRztBQUN2RSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsWUFBbUM7Q0FBRztBQUM5RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBNkI7Q0FBRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnQGlnbzIvY29tbW9uL2VudGl0eSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGZWF0dXJlU3RvcmUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9zdG9yZSc7XG5pbXBvcnQge1xuICBGZWF0dXJlV2l0aERpcmVjdGlvbnMsXG4gIEZlYXR1cmVXaXRoU3RlcCxcbiAgRmVhdHVyZVdpdGhTdG9wLFxuICBTdG9wXG59IGZyb20gJy4vZGlyZWN0aW9ucy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSBjbGFzcyBpcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYW4gRW50aXR5U3RvcmUgdGhhdCBzdG9yZXNcbiAqIHN0b3BzLlxuICovXG5leHBvcnQgY2xhc3MgU3RvcHNTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPFN0b3A+IHtcbiAgcHVibGljIHN0b3JlSW5pdGlhbGl6ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIGNsZWFyU3RvcHMoKSB7XG4gICAgdGhpcy5zdG9yZUluaXRpYWxpemVkJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3BzRmVhdHVyZVN0b3JlIGV4dGVuZHMgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoU3RvcD4ge31cbmV4cG9ydCBjbGFzcyBSb3V0ZXNGZWF0dXJlU3RvcmUgZXh0ZW5kcyBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEaXJlY3Rpb25zPiB7fVxuZXhwb3J0IGNsYXNzIFN0ZXBzRmVhdHVyZVN0b3JlIGV4dGVuZHMgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoU3RlcD4ge31cbiJdfQ==
|