@igo2/geo 18.0.0-next.9 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +4 -6
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +13 -10
  3. package/esm2022/lib/datasource/shared/capabilities.service.mjs +1 -1
  4. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +2 -1
  5. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  6. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  7. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +151 -102
  8. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +177 -83
  9. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +93 -44
  10. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  11. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  12. package/esm2022/lib/directions/directions.component.mjs +55 -31
  13. package/esm2022/lib/directions/shared/directions.enum.mjs +51 -7
  14. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  15. package/esm2022/lib/directions/shared/directions.service.mjs +122 -96
  16. package/esm2022/lib/directions/shared/directions.utils.mjs +281 -318
  17. package/esm2022/lib/directions/shared/store.mjs +2 -2
  18. package/esm2022/lib/download/download-button/download-button.component.mjs +8 -20
  19. package/esm2022/lib/download/shared/download.service.mjs +1 -1
  20. package/esm2022/lib/draw/draw/draw-popup.component.mjs +1 -1
  21. package/esm2022/lib/draw/draw/draw.component.mjs +5 -12
  22. package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
  23. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  24. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +2 -2
  25. package/esm2022/lib/feature/shared/feature-store.utils.mjs +7 -6
  26. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  27. package/esm2022/lib/feature/shared/store.mjs +1 -1
  28. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +3 -3
  29. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +7 -4
  30. package/esm2022/lib/feature/shared/strategies/selection.mjs +5 -4
  31. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  32. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  33. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +5 -3
  34. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +1 -1
  35. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +8 -1
  36. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1 -1
  37. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +2 -8
  38. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -8
  39. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  40. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +13 -10
  41. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  42. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +4 -2
  43. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +5 -16
  44. package/esm2022/lib/import-export/export-button/export-button.component.mjs +4 -17
  45. package/esm2022/lib/import-export/import-export/import-export.component.mjs +23 -12
  46. package/esm2022/lib/import-export/shared/export.service.mjs +7 -4
  47. package/esm2022/lib/import-export/shared/import.utils.mjs +3 -3
  48. package/esm2022/lib/layer/index.mjs +10 -5
  49. package/esm2022/lib/layer/layer-group/index.mjs +2 -0
  50. package/esm2022/lib/layer/layer-group/layer-group.component.mjs +103 -0
  51. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +76 -161
  52. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +5 -8
  53. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +5 -6
  54. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +14 -21
  55. package/esm2022/lib/layer/layer-list/index.mjs +1 -3
  56. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +176 -785
  57. package/esm2022/lib/layer/layer-list-tool/index.mjs +1 -2
  58. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +51 -84
  59. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +7 -2
  60. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +56 -16
  61. package/esm2022/lib/layer/layer-search/index.mjs +2 -0
  62. package/esm2022/lib/layer/layer-search/layer-search.component.mjs +65 -0
  63. package/esm2022/lib/layer/layer-unavailable/index.mjs +3 -0
  64. package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +25 -0
  65. package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +35 -0
  66. package/esm2022/lib/layer/layer-viewer/index.mjs +3 -0
  67. package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +226 -0
  68. package/esm2022/lib/layer/layer-viewer/layer-viewer.interface.mjs +2 -0
  69. package/esm2022/lib/layer/layer-viewer-bottom-actions/index.mjs +2 -0
  70. package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +207 -0
  71. package/esm2022/lib/layer/layer-visibility-button/index.mjs +2 -0
  72. package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +83 -0
  73. package/esm2022/lib/layer/layer.module.mjs +51 -33
  74. package/esm2022/lib/layer/shared/index.mjs +2 -1
  75. package/esm2022/lib/layer/shared/layer-controller.mjs +316 -0
  76. package/esm2022/lib/layer/shared/layer-selection.mjs +38 -0
  77. package/esm2022/lib/layer/shared/layer.service.mjs +31 -16
  78. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  79. package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
  80. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  81. package/esm2022/lib/layer/shared/layers/image-layer.mjs +8 -3
  82. package/esm2022/lib/layer/shared/layers/index.mjs +6 -1
  83. package/esm2022/lib/layer/shared/layers/layer-base.mjs +199 -0
  84. package/esm2022/lib/layer/shared/layers/layer-group.interface.mjs +2 -0
  85. package/esm2022/lib/layer/shared/layers/layer-group.mjs +120 -0
  86. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +1 -11
  87. package/esm2022/lib/layer/shared/layers/layer.mjs +108 -117
  88. package/esm2022/lib/layer/shared/layers/linked/index.mjs +4 -0
  89. package/esm2022/lib/layer/shared/layers/linked/linked-layer.interface.mjs +12 -0
  90. package/esm2022/lib/layer/shared/layers/linked/linked-layer.mjs +242 -0
  91. package/esm2022/lib/layer/shared/layers/linked/linked-layer.utils.mjs +70 -0
  92. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +8 -3
  93. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +9 -3
  94. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +8 -3
  95. package/esm2022/lib/layer/utils/layer.utils.mjs +47 -1
  96. package/esm2022/lib/layer/utils/outputLegend.mjs +5 -1
  97. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
  98. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +8 -6
  99. package/esm2022/lib/map/map-center/map-center.component.mjs +1 -2
  100. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
  101. package/esm2022/lib/map/shared/controllers/view.mjs +1 -1
  102. package/esm2022/lib/map/shared/hover-feature.directive.mjs +1 -9
  103. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +113 -123
  104. package/esm2022/lib/map/shared/map.abstract.mjs +4 -3
  105. package/esm2022/lib/map/shared/map.mjs +7 -243
  106. package/esm2022/lib/map/shared/map.service.mjs +1 -1
  107. package/esm2022/lib/map/shared/map.utils.mjs +3 -3
  108. package/esm2022/lib/map/shared/mapOffline.directive.mjs +9 -5
  109. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +1 -3
  110. package/esm2022/lib/map/utils/index.mjs +2 -0
  111. package/esm2022/lib/map/utils/layer-watcher.mjs +45 -13
  112. package/esm2022/lib/measure/measurer/measurer.component.mjs +7 -25
  113. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +6 -18
  114. package/esm2022/lib/offline/offline.provider.mjs +10 -11
  115. package/esm2022/lib/print/shared/print.service.mjs +3 -3
  116. package/esm2022/lib/query/shared/query.directive.mjs +9 -5
  117. package/esm2022/lib/query/shared/query.service.mjs +7 -7
  118. package/esm2022/lib/query/shared/query.utils.mjs +5 -1
  119. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +15 -9
  120. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +1 -10
  121. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  122. package/esm2022/lib/search/shared/sources/workspace.mjs +1 -1
  123. package/esm2022/lib/workspace/shared/edition-workspace.mjs +6 -4
  124. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +19 -17
  125. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +17 -2
  126. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +22 -4
  127. package/esm2022/lib/workspace/shared/workspace.utils.mjs +6 -3
  128. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  129. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +6 -2
  130. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +4 -3
  131. package/fesm2022/igo2-geo.mjs +22952 -22018
  132. package/fesm2022/igo2-geo.mjs.map +1 -1
  133. package/lib/datasource/shared/capabilities.service.d.ts +7 -2
  134. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +2 -2
  135. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +5 -5
  136. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +57 -20
  137. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +115 -13
  138. package/lib/directions/directions-results/directions-results.component.d.ts +50 -16
  139. package/lib/directions/directions-sources/directions-source.d.ts +2 -2
  140. package/lib/directions/directions-sources/osrm-directions-source.d.ts +2 -2
  141. package/lib/directions/directions.component.d.ts +5 -5
  142. package/lib/directions/shared/directions.enum.d.ts +42 -1
  143. package/lib/directions/shared/directions.interface.d.ts +50 -25
  144. package/lib/directions/shared/directions.service.d.ts +46 -8
  145. package/lib/directions/shared/directions.utils.d.ts +102 -23
  146. package/lib/directions/shared/store.d.ts +3 -3
  147. package/lib/download/download-button/download-button.component.d.ts +4 -8
  148. package/lib/download/shared/download.service.d.ts +1 -1
  149. package/lib/draw/draw/draw.component.d.ts +2 -2
  150. package/lib/draw/shared/draw.utils.d.ts +2 -1
  151. package/lib/environment/environment.interface.d.ts +2 -0
  152. package/lib/feature/shared/feature-store.utils.d.ts +1 -1
  153. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  154. package/lib/feature/shared/store.d.ts +1 -1
  155. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  156. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  157. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +2 -2
  158. package/lib/filter/shared/filterable-datasource.pipe.d.ts +2 -2
  159. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +3 -3
  160. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -5
  161. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -5
  162. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  163. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +5 -5
  164. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  165. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +2 -7
  166. package/lib/import-export/export-button/export-button.component.d.ts +3 -7
  167. package/lib/import-export/import-export/import-export.component.d.ts +1 -2
  168. package/lib/import-export/shared/export.service.d.ts +2 -2
  169. package/lib/layer/index.d.ts +9 -4
  170. package/lib/layer/layer-group/index.d.ts +1 -0
  171. package/lib/layer/layer-group/layer-group.component.d.ts +30 -0
  172. package/lib/layer/layer-item/layer-item.component.d.ts +19 -42
  173. package/lib/layer/layer-legend/layer-legend.component.d.ts +2 -5
  174. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +6 -7
  175. package/lib/layer/layer-list/index.d.ts +0 -2
  176. package/lib/layer/layer-list/layer-list.component.d.ts +51 -128
  177. package/lib/layer/layer-list-tool/index.d.ts +0 -1
  178. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +19 -26
  179. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +5 -1
  180. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +9 -8
  181. package/lib/layer/layer-search/index.d.ts +1 -0
  182. package/lib/layer/layer-search/layer-search.component.d.ts +16 -0
  183. package/lib/layer/layer-unavailable/index.d.ts +2 -0
  184. package/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.d.ts +10 -0
  185. package/lib/layer/layer-unavailable/layer-unavailable.component.d.ts +11 -0
  186. package/lib/layer/layer-viewer/index.d.ts +2 -0
  187. package/lib/layer/layer-viewer/layer-viewer.component.d.ts +52 -0
  188. package/lib/layer/layer-viewer/layer-viewer.interface.d.ts +22 -0
  189. package/lib/layer/layer-viewer-bottom-actions/index.d.ts +1 -0
  190. package/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.d.ts +44 -0
  191. package/lib/layer/layer-visibility-button/index.d.ts +1 -0
  192. package/lib/layer/layer-visibility-button/layer-visibility-button.component.d.ts +22 -0
  193. package/lib/layer/layer.module.d.ts +18 -6
  194. package/lib/layer/shared/index.d.ts +1 -0
  195. package/lib/layer/shared/layer-controller.d.ts +81 -0
  196. package/lib/layer/shared/layer-selection.d.ts +14 -0
  197. package/lib/layer/shared/layer.service.d.ts +9 -5
  198. package/lib/layer/shared/layers/any-layer.d.ts +3 -6
  199. package/lib/layer/shared/layers/any-layer.interface.d.ts +8 -6
  200. package/lib/layer/shared/layers/image-layer.d.ts +5 -2
  201. package/lib/layer/shared/layers/image-layer.interface.d.ts +1 -4
  202. package/lib/layer/shared/layers/index.d.ts +5 -0
  203. package/lib/layer/shared/layers/layer-base.d.ts +75 -0
  204. package/lib/layer/shared/layers/layer-group.d.ts +32 -0
  205. package/lib/layer/shared/layers/layer-group.interface.d.ts +8 -0
  206. package/lib/layer/shared/layers/layer.d.ts +27 -45
  207. package/lib/layer/shared/layers/layer.interface.d.ts +23 -41
  208. package/lib/layer/shared/layers/linked/index.d.ts +3 -0
  209. package/lib/layer/shared/layers/linked/linked-layer.d.ts +35 -0
  210. package/lib/layer/shared/layers/linked/linked-layer.interface.d.ts +32 -0
  211. package/lib/layer/shared/layers/linked/linked-layer.utils.d.ts +9 -0
  212. package/lib/layer/shared/layers/tile-layer.d.ts +5 -2
  213. package/lib/layer/shared/layers/vector-layer.d.ts +7 -3
  214. package/lib/layer/shared/layers/vectortile-layer.d.ts +5 -2
  215. package/lib/layer/utils/layer.utils.d.ts +12 -2
  216. package/lib/layer/utils/outputLegend.d.ts +2 -2
  217. package/lib/map/shared/controllers/geolocation.interface.d.ts +2 -1
  218. package/lib/map/shared/hover-feature.directive.d.ts +0 -1
  219. package/lib/map/shared/linkedLayers.utils.d.ts +13 -17
  220. package/lib/map/shared/map.abstract.d.ts +12 -29
  221. package/lib/map/shared/map.d.ts +10 -85
  222. package/lib/map/shared/map.service.d.ts +1 -1
  223. package/lib/map/shared/map.utils.d.ts +5 -3
  224. package/lib/map/utils/index.d.ts +1 -0
  225. package/lib/map/utils/layer-watcher.d.ts +18 -8
  226. package/lib/measure/measurer/measurer.component.d.ts +0 -8
  227. package/lib/metadata/metadata-button/metadata-button.component.d.ts +3 -7
  228. package/lib/offline/offline.provider.d.ts +1 -1
  229. package/lib/query/shared/query.service.d.ts +1 -1
  230. package/lib/query/shared/query.utils.d.ts +2 -1
  231. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  232. package/lib/search/shared/search-pointer-summary.directive.d.ts +0 -1
  233. package/lib/search/shared/sources/workspace.interfaces.d.ts +1 -1
  234. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  235. package/locale/en.geo.json +104 -89
  236. package/locale/fr.geo.json +103 -89
  237. package/package.json +5 -5
  238. package/src/geo-theme.scss +1 -1
  239. package/src/lib/directions/directions-inputs/directions-inputs.theming.scss +21 -0
  240. package/src/lib/directions/directions.theming.scss +2 -0
  241. package/src/lib/layer/layer-group/layer-group.theme.scss +28 -0
  242. package/src/lib/layer/layer-item/layer-item.theme.scss +4 -9
  243. package/src/lib/layer/layer-legend/layer-legend.theme.scss +30 -0
  244. package/src/lib/layer/layer-list/layer-list.theme.scss +50 -0
  245. package/src/lib/layer/layer-unavailable/layer-unavailable.theme.scss +19 -0
  246. package/src/lib/layer/layer-viewer/_layer-viewer.theme.scss +16 -0
  247. package/src/lib/layer/layer-visibility-button/layer-visibility-button.theme.scss +27 -0
  248. package/src/lib/layer/layer.theming.scss +14 -3
  249. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +0 -70
  250. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +0 -19
  251. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +0 -7
  252. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +0 -19
  253. package/lib/layer/layer-list/layer-list.enum.d.ts +0 -15
  254. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +0 -5
  255. package/src/lib/layer/layer-legend/layer-legend.theming.scss +0 -10
@@ -7,21 +7,17 @@ import * as olproj from 'ol/proj';
7
7
  import * as olproj4 from 'ol/proj/proj4';
8
8
  import { getUid } from 'ol/util';
9
9
  import proj4 from 'proj4';
10
- import { BehaviorSubject, pairwise, skipWhile } from 'rxjs';
11
- import { VectorLayer } from '../../layer/shared/layers/vector-layer';
10
+ import { BehaviorSubject } from 'rxjs';
11
+ import { LayerController } from '../../layer';
12
12
  import { Overlay } from '../../overlay/shared/overlay';
13
13
  import { LayerWatcher } from '../utils/layer-watcher';
14
14
  import { MapGeolocationController } from './controllers/geolocation';
15
15
  import { MapViewController } from './controllers/view';
16
- import { getAllChildLayersByDeletion, getRootParentByDeletion, handleLayerPropertyChange, initLayerSyncFromRootParentLayers } from './linkedLayers.utils';
17
- // TODO: This class is messy. Clearly define it's scope and the map browser's.
18
- // Move some stuff into controllers.
19
16
  export class IgoMap {
20
17
  storageService;
21
18
  configService;
22
19
  ol;
23
20
  forcedOffline$ = new BehaviorSubject(false);
24
- layers$ = new BehaviorSubject([]);
25
21
  layersAddedByClick$ = new BehaviorSubject(undefined);
26
22
  status$;
27
23
  propertyChange$;
@@ -29,6 +25,7 @@ export class IgoMap {
29
25
  queryResultsOverlay;
30
26
  searchResultsOverlay;
31
27
  viewController;
28
+ layerController;
32
29
  geolocationController;
33
30
  swipeEnabled$ = new BehaviorSubject(false);
34
31
  mapCenter$ = new BehaviorSubject(false);
@@ -40,9 +37,6 @@ export class IgoMap {
40
37
  defaultOptions = {
41
38
  controls: { attribution: false }
42
39
  };
43
- get layers() {
44
- return this.layers$.value;
45
- }
46
40
  /** @deprecated use projectionCode */
47
41
  get projection() {
48
42
  return this.projectionCode;
@@ -57,6 +51,7 @@ export class IgoMap {
57
51
  this.storageService = storageService;
58
52
  this.configService = configService;
59
53
  this.options = Object.assign({}, this.defaultOptions, options);
54
+ this.layerController = new LayerController(this, []);
60
55
  this.layerWatcher = new LayerWatcher();
61
56
  this.status$ = this.layerWatcher.status$;
62
57
  this.propertyChange$ = this.layerWatcher.propertyChange$;
@@ -112,25 +107,8 @@ export class IgoMap {
112
107
  if (this.geolocationController) {
113
108
  this.geolocationController.updateGeolocationOptions(this.mapViewOptions);
114
109
  }
115
- this.layers$.pipe(pairwise()).subscribe(([prevLayers, currentLayers]) => {
116
- let prevLayersId;
117
- if (prevLayers) {
118
- prevLayersId = prevLayers.map((l) => l.id);
119
- }
120
- const layers = currentLayers.filter((l) => !prevLayersId.includes(l.id));
121
- for (const layer of layers) {
122
- if (layer.options.linkedLayers) {
123
- layer.ol.once('postrender', () => {
124
- initLayerSyncFromRootParentLayers(this, layers);
125
- });
126
- }
127
- }
128
- });
129
110
  this.viewController.monitorRotation();
130
111
  });
131
- this.propertyChange$
132
- .pipe(skipWhile((pc) => !pc))
133
- .subscribe((p) => handleLayerPropertyChange(this, p.event, p.layer));
134
112
  }
135
113
  setTarget(id) {
136
114
  this.ol.setTarget(id);
@@ -215,223 +193,9 @@ export class IgoMap {
215
193
  getZoom() {
216
194
  return this.viewController.getZoom();
217
195
  }
218
- changeBaseLayer(baseLayer) {
219
- if (!baseLayer) {
220
- return;
221
- }
222
- for (const bl of this.getBaseLayers()) {
223
- bl.visible = false;
224
- }
225
- baseLayer.visible = true;
226
- this.viewController.olView.setMinZoom(baseLayer.dataSource.options.minZoom || (this.options.view || {}).minZoom);
227
- this.viewController.olView.setMaxZoom(baseLayer.dataSource.options.maxZoom || (this.options.view || {}).maxZoom);
228
- }
229
- getBaseLayers() {
230
- return this.layers.filter((layer) => layer.baseLayer === true);
231
- }
232
- getLayerById(id) {
233
- return this.layers.find((layer) => layer.id && layer.id === id);
234
- }
235
- getLayerByAlias(alias) {
236
- return this.layers.find((layer) => layer.alias && layer.alias === alias);
237
- }
196
+ /** @deprecated find a way to remove this method. For now we discourage to use it until we find the way to remove it */
238
197
  getLayerByOlUId(olUId) {
239
- return this.layers.find((layer) => getUid(layer.ol) && getUid(layer.ol) === olUId);
240
- }
241
- getLayerByOlLayer(olLayer) {
242
- const olUId = getUid(olLayer);
243
- return this.getLayerByOlUId(olUId);
244
- }
245
- /**
246
- * Add a single layer
247
- * @param layer Layer to add
248
- * @param push DEPRECATED
249
- */
250
- addLayer(layer) {
251
- this.addLayers([layer]);
252
- }
253
- /**
254
- * Add many layers
255
- * @param layers Layers to add
256
- * @param push DEPRECATED
257
- */
258
- addLayers(layers) {
259
- let offsetZIndex = 0;
260
- let offsetBaseLayerZIndex = 0;
261
- const addedLayers = layers
262
- .map((layer) => {
263
- if (!layer) {
264
- return;
265
- }
266
- const offset = layer.zIndex
267
- ? 0
268
- : layer.baseLayer
269
- ? offsetBaseLayerZIndex++
270
- : offsetZIndex++;
271
- return this.doAddLayer(layer, offset);
272
- })
273
- .filter((layer) => layer !== undefined);
274
- this.setLayers([].concat(this.layers, addedLayers));
275
- }
276
- /**
277
- * Remove a single layer
278
- * @param layer Layer to remove
279
- */
280
- removeLayer(layer) {
281
- this.removeLayers([layer]);
282
- }
283
- /**
284
- * Remove many layers
285
- * @param layers Layers to remove
286
- */
287
- removeLayers(layers) {
288
- const newLayers = this.layers$.value.slice(0);
289
- const layersToRemove = [];
290
- layers.forEach((layer) => {
291
- if (layer instanceof VectorLayer) {
292
- layer.removeLayerFromIDB();
293
- }
294
- const index = newLayers.indexOf(layer);
295
- if (index >= 0) {
296
- layersToRemove.push(layer);
297
- newLayers.splice(index, 1);
298
- this.handleLinkedLayersDeletion(layer, layersToRemove);
299
- layersToRemove.map((linkedLayer) => {
300
- const linkedIndex = newLayers.indexOf(linkedLayer);
301
- if (linkedIndex >= 0) {
302
- newLayers.splice(linkedIndex, 1);
303
- }
304
- });
305
- }
306
- });
307
- layersToRemove.forEach((layer) => this.doRemoveLayer(layer));
308
- this.setLayers(newLayers);
309
- }
310
- /**
311
- * Build a list of linked layers to delete
312
- * @param srcLayer Layer that has triggered the deletion
313
- * @param layersToRemove list to append the layer to delete into
314
- */
315
- handleLinkedLayersDeletion(srcLayer, layersToRemove) {
316
- let rootParentByDeletion = getRootParentByDeletion(this, srcLayer);
317
- if (!rootParentByDeletion) {
318
- rootParentByDeletion = srcLayer;
319
- }
320
- const clbd = getAllChildLayersByDeletion(this, rootParentByDeletion, [
321
- rootParentByDeletion
322
- ]);
323
- for (const layer of clbd) {
324
- layersToRemove.push(layer);
325
- }
326
- }
327
- /**
328
- * Remove all layers
329
- */
330
- removeAllLayers() {
331
- this.layers.forEach((layer) => this.doRemoveLayer(layer));
332
- this.layers$.next([]);
333
- }
334
- raiseLayer(layer) {
335
- const index = this.getLayerIndex(layer);
336
- if (index > 1) {
337
- this.moveLayer(layer, index, index - 1);
338
- }
339
- }
340
- raiseLayers(layers) {
341
- for (const layer of layers) {
342
- this.raiseLayer(layer);
343
- }
344
- }
345
- lowerLayer(layer) {
346
- const index = this.getLayerIndex(layer);
347
- if (index < this.layers.length - 1) {
348
- this.moveLayer(layer, index, index + 1);
349
- }
350
- }
351
- lowerLayers(layers) {
352
- const reverseLayers = layers.reverse();
353
- for (const layer of reverseLayers) {
354
- this.lowerLayer(layer);
355
- }
356
- }
357
- moveLayer(layer, from, to) {
358
- const layerTo = this.layers[to];
359
- const zIndexTo = layerTo.zIndex;
360
- const zIndexFrom = layer.zIndex;
361
- if (layerTo.baseLayer || layer.baseLayer) {
362
- return;
363
- }
364
- layer.zIndex = zIndexTo;
365
- layerTo.zIndex = zIndexFrom;
366
- this.layers[to] = layer;
367
- this.layers[from] = layerTo;
368
- this.layers$.next(this.layers.slice(0));
369
- }
370
- /**
371
- * Add a layer to the OL map and start watching. If the layer is already
372
- * added to this map, make it visible but don't add it one again.
373
- * @param layer Layer
374
- * @returns The layer added, if any
375
- */
376
- doAddLayer(layer, offsetZIndex) {
377
- if (layer.baseLayer && layer.visible) {
378
- this.changeBaseLayer(layer);
379
- }
380
- const existingLayer = this.getLayerById(layer.id);
381
- if (existingLayer !== undefined) {
382
- existingLayer.visible = true;
383
- return;
384
- }
385
- if (!layer.baseLayer && layer.zIndex) {
386
- layer.zIndex += 10;
387
- }
388
- if (layer.zIndex === undefined || layer.zIndex === 0) {
389
- const maxZIndex = Math.max(layer.baseLayer ? 0 : 10, ...this.layers
390
- .filter((l) => l.baseLayer === layer.baseLayer && l.zIndex < 200 // zIndex > 200 = system layer
391
- )
392
- .map((l) => l.zIndex));
393
- layer.zIndex = maxZIndex + 1 + offsetZIndex;
394
- }
395
- if (layer.baseLayer && layer.zIndex > 9) {
396
- layer.zIndex = 10; // baselayer must have zIndex < 10
397
- }
398
- layer.setMap(this);
399
- this.layerWatcher.watchLayer(layer);
400
- this.ol.addLayer(layer.ol);
401
- return layer;
402
- }
403
- /**
404
- * Remove a layer from the OL map and stop watching
405
- * @param layer Layer
406
- */
407
- doRemoveLayer(layer) {
408
- this.layerWatcher.unwatchLayer(layer);
409
- this.ol.removeLayer(layer.ol);
410
- layer.setMap(undefined);
411
- }
412
- /**
413
- * Update the layers observable
414
- * @param layers Layers
415
- */
416
- setLayers(layers) {
417
- this.layers$.next(this.sortLayersByZIndex(layers).slice(0));
418
- }
419
- /**
420
- * Sort layers by descending zIndex
421
- * @param layers Array of layers
422
- * @returns The original array, sorted by zIndex
423
- */
424
- sortLayersByZIndex(layers) {
425
- // Sort by descending zIndex
426
- return layers.sort((layer1, layer2) => layer2.zIndex - layer1.zIndex);
427
- }
428
- /**
429
- * Get layer index in the map's inenr array of layers
430
- * @param layer Layer
431
- * @returns The layer index
432
- */
433
- getLayerIndex(layer) {
434
- return this.layers.findIndex((_layer) => _layer === layer);
198
+ return this.layerController.all.find((layer) => getUid(layer.ol) && getUid(layer.ol) === olUId);
435
199
  }
436
200
  }
437
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbWFwL3NoYXJlZC9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBRTNCLE9BQU8sTUFBdUIsTUFBTSxTQUFTLENBQUM7QUFDOUMsT0FBTyxvQkFBb0IsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxhQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFFbEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVqQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLGVBQWUsRUFBVyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXJFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixpQ0FBaUMsRUFDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQVc5Qiw4RUFBOEU7QUFDOUUsb0NBQW9DO0FBQ3BDLE1BQU0sT0FBTyxNQUFNO0lBNENQO0lBQ0E7SUE1Q0gsRUFBRSxDQUFRO0lBQ1YsY0FB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LENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxrQkFBa0IsQ0FBQyxNQUFlO1FBQ3hDLDRCQUE0QjtRQUM1QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLENBQUMsTUFBYSxFQUFFLE1BQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNoRSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxhQUFhLENBQUMsS0FBWTtRQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDcEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvY29uZmlnJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9zdG9yYWdlJztcbmltcG9ydCB7IFN1YmplY3RTdGF0dXMgfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCBvbE1hcCBmcm9tICdvbC9NYXAnO1xuaW1wb3J0IHsgT2JqZWN0RXZlbnQgfSBmcm9tICdvbC9PYmplY3QnO1xuaW1wb3J0IG9sVmlldywgeyBWaWV3T3B0aW9ucyB9IGZyb20gJ29sL1ZpZXcnO1xuaW1wb3J0IG9sQ29udHJvbEF0dHJpYnV0aW9uIGZyb20gJ29sL2NvbnRyb2wvQXR0cmlidXRpb24nO1xuaW1wb3J0IG9sQ29udHJvbFNjYWxlTGluZSBmcm9tICdvbC9jb250cm9sL1NjYWxlTGluZSc7XG5pbXBvcnQgKiBhcyBvbGludGVyYWN0aW9uIGZyb20gJ29sL2ludGVyYWN0aW9uJztcbmltcG9ydCBvbExheWVyIGZyb20gJ29sL2xheWVyL0xheWVyJztcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcbmltcG9ydCBPbFByb2plY3Rpb24gZnJvbSAnb2wvcHJvai9Qcm9qZWN0aW9uJztcbmltcG9ydCAqIGFzIG9scHJvajQgZnJvbSAnb2wvcHJvai9wcm9qNCc7XG5pbXBvcnQgb2xTb3VyY2UgZnJvbSAnb2wvc291cmNlL1NvdXJjZSc7XG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICdvbC91dGlsJztcblxuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgcGFpcndpc2UsIHNraXBXaGlsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2ZlYXR1cmUtZGF0YXNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7IExheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycyc7XG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9yLWxheWVyJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi8uLi9vdmVybGF5L3NoYXJlZC9vdmVybGF5JztcbmltcG9ydCB7IExheWVyV2F0Y2hlciB9IGZyb20gJy4uL3V0aWxzL2xheWVyLXdhdGNoZXInO1xuaW1wb3J0IHsgTWFwR2VvbG9jYXRpb25Db250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVycy9nZW9sb2NhdGlvbic7XG5pbXBvcnQgeyBNYXBWaWV3Q29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcnMvdmlldyc7XG5pbXBvcnQge1xuICBnZXRBbGxDaGlsZExheWVyc0J5RGVsZXRpb24sXG4gIGdldFJvb3RQYXJlbnRCeURlbGV0aW9uLFxuICBoYW5kbGVMYXllclByb3BlcnR5Q2hhbmdlLFxuICBpbml0TGF5ZXJTeW5jRnJvbVJvb3RQYXJlbnRMYXllcnNcbn0gZnJvbSAnLi9saW5rZWRMYXllcnMudXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBNYXBCYXNlIH0gZnJvbSAnLi9tYXAuYWJzdHJhY3QnO1xuaW1wb3J0IHtcbiAgTWFwQXR0cmlidXRpb25PcHRpb25zLFxuICBNYXBDb250cm9sc09wdGlvbnMsXG4gIE1hcEV4dGVudCxcbiAgTWFwT3B0aW9ucyxcbiAgTWFwU2NhbGVMaW5lT3B0aW9ucyxcbiAgTWFwVmlld09wdGlvbnNcbn0gZnJvbSAnLi9tYXAuaW50ZXJmYWNlJztcblxuLy8gVE9ETzogVGhpcyBjbGFzcyBpcyBtZXNzeS4gQ2xlYXJseSBkZWZpbmUgaXQncyBzY29wZSBhbmQgdGhlIG1hcCBicm93c2VyJ3MuXG4vLyBNb3ZlIHNvbWUgc3R1ZmYgaW50byBjb250cm9sbGVycy5cbmV4cG9ydCBjbGFzcyBJZ29NYXAgaW1wbGVtZW50cyBNYXBCYXNlIHtcbiAgcHVibGljIG9sOiBvbE1hcDtcbiAgcHVibGljIGZvcmNlZE9mZmxpbmUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBsYXllcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMYXllcltdPihbXSk7XG4gIHB1YmxpYyBsYXllcnNBZGRlZEJ5Q2xpY2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMYXllcltdPih1bmRlZmluZWQpO1xuICBwdWJsaWMgc3RhdHVzJDogU3ViamVjdDxTdWJqZWN0U3RhdHVzPjtcbiAgcHVibGljIHByb3BlcnR5Q2hhbmdlJDogU3ViamVjdDx7IGV2ZW50OiBPYmplY3RFdmVudDsgbGF5ZXI6IExheWVyIH0+O1xuICBwdWJsaWMgb3ZlcmxheTogT3ZlcmxheTtcbiAgcHVibGljIHF1ZXJ5UmVzdWx0c092ZXJsYXk6IE92ZXJsYXk7XG4gIHB1YmxpYyBzZWFyY2hSZXN1bHRzT3ZlcmxheTogT3ZlcmxheTtcbiAgcHVibGljIHZpZXdDb250cm9sbGVyOiBNYXBWaWV3Q29udHJvbGxlcjtcbiAgcHVibGljIGdlb2xvY2F0aW9uQ29udHJvbGxlcjogTWFwR2VvbG9jYXRpb25Db250cm9sbGVyO1xuICBwdWJsaWMgc3dpcGVFbmFibGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgbWFwQ2VudGVyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgc2VsZWN0ZWRGZWF0dXJlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExheWVyW10+KG51bGwpO1xuXG4gIHB1YmxpYyBidWZmZXJEYXRhU291cmNlOiBGZWF0dXJlRGF0YVNvdXJjZTtcblxuICBwcml2YXRlIGxheWVyV2F0Y2hlcjogTGF5ZXJXYXRjaGVyO1xuICBwcml2YXRlIG9wdGlvbnM6IE1hcE9wdGlvbnM7XG4gIHByaXZhdGUgbWFwVmlld09wdGlvbnM6IE1hcFZpZXdPcHRpb25zO1xuICBwcml2YXRlIGRlZmF1bHRPcHRpb25zOiBQYXJ0aWFsPE1hcE9wdGlvbnM+ID0ge1xuICAgIGNvbnRyb2xzOiB7IGF0dHJpYnV0aW9uOiBmYWxzZSB9XG4gIH07XG5cbiAgZ2V0IGxheWVycygpOiBMYXllcltdIHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnMkLnZhbHVlO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBwcm9qZWN0aW9uQ29kZSAqL1xuICBnZXQgcHJvamVjdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2plY3Rpb25Db2RlO1xuICB9XG5cbiAgZ2V0IHZpZXdQcm9qZWN0aW9uKCk6IG9scHJvai5Qcm9qZWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udHJvbGxlci5nZXRPbFByb2plY3Rpb24oKTtcbiAgfVxuXG4gIGdldCBwcm9qZWN0aW9uQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnZpZXdQcm9qZWN0aW9uLmdldENvZGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM/OiBNYXBPcHRpb25zLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U/OiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U/OiBDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHRoaXMubGF5ZXJXYXRjaGVyID0gbmV3IExheWVyV2F0Y2hlcigpO1xuICAgIHRoaXMuc3RhdHVzJCA9IHRoaXMubGF5ZXJXYXRjaGVyLnN0YXR1cyQ7XG4gICAgdGhpcy5wcm9wZXJ0eUNoYW5nZSQgPSB0aGlzLmxheWVyV2F0Y2hlci5wcm9wZXJ0eUNoYW5nZSQ7XG4gICAgb2xwcm9qNC5yZWdpc3Rlcihwcm9qNCk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBpbml0KCkge1xuICAgIGNvbnN0IGNvbnRyb2xzID0gW107XG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250cm9scykge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250cm9scy5hdHRyaWJ1dGlvbikge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGlvbk9wdCA9IChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udHJvbHMuYXR0cmlidXRpb24gPT09IHRydWVcbiAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgIDogdGhpcy5vcHRpb25zLmNvbnRyb2xzLmF0dHJpYnV0aW9uXG4gICAgICAgICkgYXMgTWFwQXR0cmlidXRpb25PcHRpb25zO1xuICAgICAgICBjb250cm9scy5wdXNoKG5ldyBvbENvbnRyb2xBdHRyaWJ1dGlvbihhdHRyaWJ1dGlvbk9wdCkpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250cm9scy5zY2FsZUxpbmUpIHtcbiAgICAgICAgY29uc3Qgc2NhbGVMaW5lT3B0ID0gKFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5jb250cm9scy5zY2FsZUxpbmUgPT09IHRydWVcbiAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgIDogdGhpcy5vcHRpb25zLmNvbnRyb2xzLnNjYWxlTGluZVxuICAgICAgICApIGFzIE1hcFNjYWxlTGluZU9wdGlvbnM7XG4gICAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbFNjYWxlTGluZShzY2FsZUxpbmVPcHQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGludGVyYWN0aW9ucyA9IHt9O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaW50ZXJhY3Rpb25zID09PSBmYWxzZSkge1xuICAgICAgaW50ZXJhY3Rpb25zID0ge1xuICAgICAgICBhbHRTaGlmdERyYWdSb3RhdGU6IGZhbHNlLFxuICAgICAgICBkb3VibGVDbGlja1pvb206IGZhbHNlLFxuICAgICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgICAgIG1vdXNlV2hlZWxab29tOiBmYWxzZSxcbiAgICAgICAgc2hpZnREcmFnWm9vbTogZmFsc2UsXG4gICAgICAgIGRyYWdQYW46IGZhbHNlLFxuICAgICAgICBwaW5jaFJvdGF0ZTogZmFsc2UsXG4gICAgICAgIHBpbmNoWm9vbTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5vbCA9IG5ldyBvbE1hcCh7XG4gICAgICBpbnRlcmFjdGlvbnM6IG9saW50ZXJhY3Rpb24uZGVmYXVsdHMoaW50ZXJhY3Rpb25zKSxcbiAgICAgIGNvbnRyb2xzXG4gICAgfSk7XG5cbiAgICB0aGlzLnNldFZpZXcodGhpcy5vcHRpb25zLnZpZXcgfHwge30pO1xuICAgIHRoaXMudmlld0NvbnRyb2xsZXIgPSBuZXcgTWFwVmlld0NvbnRyb2xsZXIoe1xuICAgICAgc3RhdGVIaXN0b3J5OiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy52aWV3Q29udHJvbGxlci5zZXRPbE1hcCh0aGlzLm9sKTtcbiAgICB0aGlzLm92ZXJsYXkgPSBuZXcgT3ZlcmxheSh0aGlzKTtcbiAgICB0aGlzLnF1ZXJ5UmVzdWx0c092ZXJsYXkgPSBuZXcgT3ZlcmxheSh0aGlzKTtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdHNPdmVybGF5ID0gbmV3IE92ZXJsYXkodGhpcyk7XG4gICAgdGhpcy5vbC5vbmNlKCdyZW5kZXJjb21wbGV0ZScsICgpID0+IHtcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25Db250cm9sbGVyID0gbmV3IE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAge1xuICAgICAgICAgIHByb2plY3Rpb246IHRoaXMudmlld0NvbnRyb2xsZXIuZ2V0T2xQcm9qZWN0aW9uKClcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZSxcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlXG4gICAgICApO1xuICAgICAgdGhpcy5nZW9sb2NhdGlvbkNvbnRyb2xsZXIuc2V0T2xNYXAodGhpcy5vbCk7XG4gICAgICBpZiAodGhpcy5nZW9sb2NhdGlvbkNvbnRyb2xsZXIpIHtcbiAgICAgICAgdGhpcy5nZW9sb2NhdGlvbkNvbnRyb2xsZXIudXBkYXRlR2VvbG9jYXRpb25PcHRpb25zKFxuICAgICAgICAgIHRoaXMubWFwVmlld09wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGF5ZXJzJC5waXBlKHBhaXJ3aXNlKCkpLnN1YnNjcmliZSgoW3ByZXZMYXllcnMsIGN1cnJlbnRMYXllcnNdKSA9PiB7XG4gICAgICAgIGxldCBwcmV2TGF5ZXJzSWQ7XG4gICAgICAgIGlmIChwcmV2TGF5ZXJzKSB7XG4gICAgICAgICAgcHJldkxheWVyc0lkID0gcHJldkxheWVycy5tYXAoKGwpID0+IGwuaWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxheWVycyA9IGN1cnJlbnRMYXllcnMuZmlsdGVyKFxuICAgICAgICAgIChsKSA9PiAhcHJldkxheWVyc0lkLmluY2x1ZGVzKGwuaWQpXG4gICAgICAgICk7XG5cbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMpIHtcbiAgICAgICAgICAgIGxheWVyLm9sLm9uY2UoJ3Bvc3RyZW5kZXInLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGluaXRMYXllclN5bmNGcm9tUm9vdFBhcmVudExheWVycyh0aGlzLCBsYXllcnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMudmlld0NvbnRyb2xsZXIubW9uaXRvclJvdGF0aW9uKCk7XG4gICAgfSk7XG4gICAgdGhpcy5wcm9wZXJ0eUNoYW5nZSRcbiAgICAgIC5waXBlKHNraXBXaGlsZSgocGMpID0+ICFwYykpXG4gICAgICAuc3Vic2NyaWJlKChwKSA9PiBoYW5kbGVMYXllclByb3BlcnR5Q2hhbmdlKHRoaXMsIHAuZXZlbnQsIHAubGF5ZXIpKTtcbiAgfVxuXG4gIHNldFRhcmdldChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5vbC5zZXRUYXJnZXQoaWQpO1xuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmxheWVyV2F0Y2hlci5zdWJzY3JpYmUoKCkgPT4gdm9pZCAxLCBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXllcldhdGNoZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVWaWV3KG9wdGlvbnM6IE1hcFZpZXdPcHRpb25zKSB7XG4gICAgY29uc3QgY3VycmVudFZpZXcgPSB0aGlzLm9sLmdldFZpZXcoKTtcbiAgICBjb25zdCB2aWV3T3B0aW9uczogTWFwVmlld09wdGlvbnMgPSB7XG4gICAgICAuLi5jdXJyZW50Vmlldy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLnpvb20gJiYgb3B0aW9ucy5yZXNvbHV0aW9uID09IG51bGwpIHtcbiAgICAgIHZpZXdPcHRpb25zLnJlc29sdXRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRWaWV3KHZpZXdPcHRpb25zKTtcbiAgICBpZiAob3B0aW9ucy5tYXhab29tT25FeHRlbnQpIHtcbiAgICAgIHRoaXMudmlld0NvbnRyb2xsZXIubWF4Wm9vbU9uRXh0ZW50ID0gb3B0aW9ucy5tYXhab29tT25FeHRlbnQ7XG4gICAgfVxuICAgIHRoaXMubWFwVmlld09wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbWFwIHZpZXdcbiAgICogQHBhcmFtIG9wdGlvbnMgTWFwIHZpZXcgb3B0aW9uc1xuICAgKi9cbiAgc2V0VmlldyhvcHRpb25zOiBNYXBWaWV3T3B0aW9ucykge1xuICAgIGlmICh0aGlzLnZpZXdDb250cm9sbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudmlld0NvbnRyb2xsZXIuY2xlYXJTdGF0ZUhpc3RvcnkoKTtcbiAgICB9XG5cbiAgICBjb25zdCB2aWV3T3B0aW9uczogVmlld09wdGlvbnMgPSB7IGNvbnN0cmFpblJlc29sdXRpb246IHRydWUsIC4uLm9wdGlvbnMgfTtcbiAgICBpZiAob3B0aW9ucy5jZW50ZXIpIHtcbiAgICAgIHZpZXdPcHRpb25zLmNlbnRlciA9IG9scHJvai5mcm9tTG9uTGF0KFxuICAgICAgICBvcHRpb25zLmNlbnRlcixcbiAgICAgICAgb3B0aW9ucy5wcm9qZWN0aW9uXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMub2wuc2V0VmlldyhuZXcgb2xWaWV3KHZpZXdPcHRpb25zKSk7XG5cbiAgICBpZiAob3B0aW9ucy5tYXhMYXllclpvb21FeHRlbnQpIHtcbiAgICAgIHRoaXMudmlld0NvbnRyb2xsZXIubWF4TGF5ZXJab29tRXh0ZW50ID0gb3B0aW9ucy5tYXhMYXllclpvb21FeHRlbnQ7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29udHJvbHModmFsdWU6IE1hcENvbnRyb2xzT3B0aW9ucykge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbHMgPSBbXTtcbiAgICBpZiAodmFsdWUuYXR0cmlidXRpb24pIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0aW9uT3B0ID0gKFxuICAgICAgICB2YWx1ZS5hdHRyaWJ1dGlvbiA9PT0gdHJ1ZSA/IHt9IDogdmFsdWUuYXR0cmlidXRpb25cbiAgICAgICkgYXMgTWFwQXR0cmlidXRpb25PcHRpb25zO1xuICAgICAgY29udHJvbHMucHVzaChuZXcgb2xDb250cm9sQXR0cmlidXRpb24oYXR0cmlidXRpb25PcHQpKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlLnNjYWxlTGluZSkge1xuICAgICAgY29uc3Qgc2NhbGVMaW5lT3B0ID0gKFxuICAgICAgICB2YWx1ZS5zY2FsZUxpbmUgPT09IHRydWUgPyB7fSA6IHZhbHVlLnNjYWxlTGluZVxuICAgICAgKSBhcyBNYXBTY2FsZUxpbmVPcHRpb25zO1xuICAgICAgY29udHJvbHMucHVzaChuZXcgb2xDb250cm9sU2NhbGVMaW5lKHNjYWxlTGluZU9wdCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRDb250cm9scyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMub2wuZ2V0Q29udHJvbHMoKS5nZXRBcnJheSgpKTtcbiAgICBjdXJyZW50Q29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgdGhpcy5vbC5yZW1vdmVDb250cm9sKGNvbnRyb2wpO1xuICAgIH0pO1xuICAgIGNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgIHRoaXMub2wuYWRkQ29udHJvbChjb250cm9sKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBUT0RPOiBNb3ZlIHRvIFZpZXdDb250cm9sbGVyIGFuZCB1cGRhdGUgZXZlcnkgcGxhY2UgaXQncyB1c2VkXG4gICAqL1xuICBnZXRDZW50ZXIocHJvamVjdGlvbj86IHN0cmluZyB8IE9sUHJvamVjdGlvbik6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250cm9sbGVyLmdldENlbnRlcihwcm9qZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBUT0RPOiBNb3ZlIHRvIFZpZXdDb250cm9sbGVyIGFuZCB1cGRhdGUgZXZlcnkgcGxhY2UgaXQncyB1c2VkXG4gICAqL1xuICBnZXRFeHRlbnQocHJvamVjdGlvbj86IHN0cmluZyB8IE9sUHJvamVjdGlvbik6IE1hcEV4dGVudCB7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KHByb2plY3Rpb24pO1xuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBUT0RPOiBNb3ZlIHRvIFZpZXdDb250cm9sbGVyIGFuZCB1cGRhdGUgZXZlcnkgcGxhY2UgaXQncyB1c2VkXG4gICAqL1xuICBnZXRab29tKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRyb2xsZXIuZ2V0Wm9vbSgpO1xuICB9XG5cbiAgY2hhbmdlQmFzZUxheWVyKGJhc2VMYXllcjogTGF5ZXIpIHtcbiAgICBpZiAoIWJhc2VMYXllcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgYmwgb2YgdGhpcy5nZXRCYXNlTGF5ZXJzKCkpIHtcbiAgICAgIGJsLnZpc2libGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBiYXNlTGF5ZXIudmlzaWJsZSA9IHRydWU7XG5cbiAgICB0aGlzLnZpZXdDb250cm9sbGVyLm9sVmlldy5zZXRNaW5ab29tKFxuICAgICAgYmFzZUxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5taW5ab29tIHx8ICh0aGlzLm9wdGlvbnMudmlldyB8fCB7fSkubWluWm9vbVxuICAgICk7XG4gICAgdGhpcy52aWV3Q29udHJvbGxlci5vbFZpZXcuc2V0TWF4Wm9vbShcbiAgICAgIGJhc2VMYXllci5kYXRhU291cmNlLm9wdGlvbnMubWF4Wm9vbSB8fCAodGhpcy5vcHRpb25zLnZpZXcgfHwge30pLm1heFpvb21cbiAgICApO1xuICB9XG5cbiAgZ2V0QmFzZUxheWVycygpOiBMYXllcltdIHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnMuZmlsdGVyKChsYXllcjogTGF5ZXIpID0+IGxheWVyLmJhc2VMYXllciA9PT0gdHJ1ZSk7XG4gIH1cblxuICBnZXRMYXllckJ5SWQoaWQ6IHN0cmluZyk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnMuZmluZCgobGF5ZXI6IExheWVyKSA9PiBsYXllci5pZCAmJiBsYXllci5pZCA9PT0gaWQpO1xuICB9XG5cbiAgZ2V0TGF5ZXJCeUFsaWFzKGFsaWFzOiBzdHJpbmcpOiBMYXllciB7XG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzLmZpbmQoXG4gICAgICAobGF5ZXI6IExheWVyKSA9PiBsYXllci5hbGlhcyAmJiBsYXllci5hbGlhcyA9PT0gYWxpYXNcbiAgICApO1xuICB9XG5cbiAgZ2V0TGF5ZXJCeU9sVUlkKG9sVUlkOiBzdHJpbmcpOiBMYXllciB7XG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzLmZpbmQoXG4gICAgICAobGF5ZXI6IExheWVyKSA9PiBnZXRVaWQobGF5ZXIub2wpICYmIGdldFVpZChsYXllci5vbCkgPT09IG9sVUlkXG4gICAgKTtcbiAgfVxuXG4gIGdldExheWVyQnlPbExheWVyKG9sTGF5ZXI6IG9sTGF5ZXI8b2xTb3VyY2U+KTogTGF5ZXIge1xuICAgIGNvbnN0IG9sVUlkID0gZ2V0VWlkKG9sTGF5ZXIpO1xuICAgIHJldHVybiB0aGlzLmdldExheWVyQnlPbFVJZChvbFVJZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc2luZ2xlIGxheWVyXG4gICAqIEBwYXJhbSBsYXllciBMYXllciB0byBhZGRcbiAgICogQHBhcmFtIHB1c2ggREVQUkVDQVRFRFxuICAgKi9cbiAgYWRkTGF5ZXIobGF5ZXI6IExheWVyKSB7XG4gICAgdGhpcy5hZGRMYXllcnMoW2xheWVyXSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG1hbnkgbGF5ZXJzXG4gICAqIEBwYXJhbSBsYXllcnMgTGF5ZXJzIHRvIGFkZFxuICAgKiBAcGFyYW0gcHVzaCBERVBSRUNBVEVEXG4gICAqL1xuICBhZGRMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgbGV0IG9mZnNldFpJbmRleCA9IDA7XG4gICAgbGV0IG9mZnNldEJhc2VMYXllclpJbmRleCA9IDA7XG4gICAgY29uc3QgYWRkZWRMYXllcnMgPSBsYXllcnNcbiAgICAgIC5tYXAoKGxheWVyOiBMYXllcikgPT4ge1xuICAgICAgICBpZiAoIWxheWVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGxheWVyLnpJbmRleFxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogbGF5ZXIuYmFzZUxheWVyXG4gICAgICAgICAgICA/IG9mZnNldEJhc2VMYXllclpJbmRleCsrXG4gICAgICAgICAgICA6IG9mZnNldFpJbmRleCsrO1xuICAgICAgICByZXR1cm4gdGhpcy5kb0FkZExheWVyKGxheWVyLCBvZmZzZXQpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGxheWVyOiBMYXllciB8IHVuZGVmaW5lZCkgPT4gbGF5ZXIgIT09IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zZXRMYXllcnMoW10uY29uY2F0KHRoaXMubGF5ZXJzLCBhZGRlZExheWVycykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNpbmdsZSBsYXllclxuICAgKiBAcGFyYW0gbGF5ZXIgTGF5ZXIgdG8gcmVtb3ZlXG4gICAqL1xuICByZW1vdmVMYXllcihsYXllcjogTGF5ZXIpIHtcbiAgICB0aGlzLnJlbW92ZUxheWVycyhbbGF5ZXJdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgbWFueSBsYXllcnNcbiAgICogQHBhcmFtIGxheWVycyBMYXllcnMgdG8gcmVtb3ZlXG4gICAqL1xuICByZW1vdmVMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgY29uc3QgbmV3TGF5ZXJzID0gdGhpcy5sYXllcnMkLnZhbHVlLnNsaWNlKDApO1xuICAgIGNvbnN0IGxheWVyc1RvUmVtb3ZlID0gW107XG4gICAgbGF5ZXJzLmZvckVhY2goKGxheWVyOiBMYXllcikgPT4ge1xuICAgICAgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpIHtcbiAgICAgICAgbGF5ZXIucmVtb3ZlTGF5ZXJGcm9tSURCKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleCA9IG5ld0xheWVycy5pbmRleE9mKGxheWVyKTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIpO1xuICAgICAgICBuZXdMYXllcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5oYW5kbGVMaW5rZWRMYXllcnNEZWxldGlvbihsYXllciwgbGF5ZXJzVG9SZW1vdmUpO1xuICAgICAgICBsYXllcnNUb1JlbW92ZS5tYXAoKGxpbmtlZExheWVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGlua2VkSW5kZXggPSBuZXdMYXllcnMuaW5kZXhPZihsaW5rZWRMYXllcik7XG4gICAgICAgICAgaWYgKGxpbmtlZEluZGV4ID49IDApIHtcbiAgICAgICAgICAgIG5ld0xheWVycy5zcGxpY2UobGlua2VkSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsYXllcnNUb1JlbW92ZS5mb3JFYWNoKChsYXllcjogTGF5ZXIpID0+IHRoaXMuZG9SZW1vdmVMYXllcihsYXllcikpO1xuICAgIHRoaXMuc2V0TGF5ZXJzKG5ld0xheWVycyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBsaXN0IG9mIGxpbmtlZCBsYXllcnMgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSBzcmNMYXllciBMYXllciB0aGF0IGhhcyB0cmlnZ2VyZWQgdGhlIGRlbGV0aW9uXG4gICAqIEBwYXJhbSBsYXllcnNUb1JlbW92ZSBsaXN0IHRvIGFwcGVuZCB0aGUgbGF5ZXIgdG8gZGVsZXRlIGludG9cbiAgICovXG4gIGhhbmRsZUxpbmtlZExheWVyc0RlbGV0aW9uKHNyY0xheWVyOiBMYXllciwgbGF5ZXJzVG9SZW1vdmU6IExheWVyW10pIHtcbiAgICBsZXQgcm9vdFBhcmVudEJ5RGVsZXRpb24gPSBnZXRSb290UGFyZW50QnlEZWxldGlvbih0aGlzLCBzcmNMYXllcik7XG4gICAgaWYgKCFyb290UGFyZW50QnlEZWxldGlvbikge1xuICAgICAgcm9vdFBhcmVudEJ5RGVsZXRpb24gPSBzcmNMYXllcjtcbiAgICB9XG4gICAgY29uc3QgY2xiZCA9IGdldEFsbENoaWxkTGF5ZXJzQnlEZWxldGlvbih0aGlzLCByb290UGFyZW50QnlEZWxldGlvbiwgW1xuICAgICAgcm9vdFBhcmVudEJ5RGVsZXRpb25cbiAgICBdKTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGNsYmQpIHtcbiAgICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGxheWVyc1xuICAgKi9cbiAgcmVtb3ZlQWxsTGF5ZXJzKCkge1xuICAgIHRoaXMubGF5ZXJzLmZvckVhY2goKGxheWVyOiBMYXllcikgPT4gdGhpcy5kb1JlbW92ZUxheWVyKGxheWVyKSk7XG4gICAgdGhpcy5sYXllcnMkLm5leHQoW10pO1xuICB9XG5cbiAgcmFpc2VMYXllcihsYXllcjogTGF5ZXIpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0TGF5ZXJJbmRleChsYXllcik7XG4gICAgaWYgKGluZGV4ID4gMSkge1xuICAgICAgdGhpcy5tb3ZlTGF5ZXIobGF5ZXIsIGluZGV4LCBpbmRleCAtIDEpO1xuICAgIH1cbiAgfVxuXG4gIHJhaXNlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XG4gICAgICB0aGlzLnJhaXNlTGF5ZXIobGF5ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGxvd2VyTGF5ZXIobGF5ZXI6IExheWVyKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldExheWVySW5kZXgobGF5ZXIpO1xuICAgIGlmIChpbmRleCA8IHRoaXMubGF5ZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZUxheWVyKGxheWVyLCBpbmRleCwgaW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICBsb3dlckxheWVycyhsYXllcnM6IExheWVyW10pIHtcbiAgICBjb25zdCByZXZlcnNlTGF5ZXJzID0gbGF5ZXJzLnJldmVyc2UoKTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHJldmVyc2VMYXllcnMpIHtcbiAgICAgIHRoaXMubG93ZXJMYXllcihsYXllcik7XG4gICAgfVxuICB9XG5cbiAgbW92ZUxheWVyKGxheWVyOiBMYXllciwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyKSB7XG4gICAgY29uc3QgbGF5ZXJUbyA9IHRoaXMubGF5ZXJzW3RvXTtcbiAgICBjb25zdCB6SW5kZXhUbyA9IGxheWVyVG8uekluZGV4O1xuICAgIGNvbnN0IHpJbmRleEZyb20gPSBsYXllci56SW5kZXg7XG5cbiAgICBpZiAobGF5ZXJUby5iYXNlTGF5ZXIgfHwgbGF5ZXIuYmFzZUxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGF5ZXIuekluZGV4ID0gekluZGV4VG87XG4gICAgbGF5ZXJUby56SW5kZXggPSB6SW5kZXhGcm9tO1xuXG4gICAgdGhpcy5sYXllcnNbdG9dID0gbGF5ZXI7XG4gICAgdGhpcy5sYXllcnNbZnJvbV0gPSBsYXllclRvO1xuICAgIHRoaXMubGF5ZXJzJC5uZXh0KHRoaXMubGF5ZXJzLnNsaWNlKDApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBsYXllciB0byB0aGUgT0wgbWFwIGFuZCBzdGFydCB3YXRjaGluZy4gSWYgdGhlIGxheWVyIGlzIGFscmVhZHlcbiAgICogYWRkZWQgdG8gdGhpcyBtYXAsIG1ha2UgaXQgdmlzaWJsZSBidXQgZG9uJ3QgYWRkIGl0IG9uZSBhZ2Fpbi5cbiAgICogQHBhcmFtIGxheWVyIExheWVyXG4gICAqIEByZXR1cm5zIFRoZSBsYXllciBhZGRlZCwgaWYgYW55XG4gICAqL1xuICBwcml2YXRlIGRvQWRkTGF5ZXIobGF5ZXI6IExheWVyLCBvZmZzZXRaSW5kZXg6IG51bWJlcikge1xuICAgIGlmIChsYXllci5iYXNlTGF5ZXIgJiYgbGF5ZXIudmlzaWJsZSkge1xuICAgICAgdGhpcy5jaGFuZ2VCYXNlTGF5ZXIobGF5ZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nTGF5ZXIgPSB0aGlzLmdldExheWVyQnlJZChsYXllci5pZCk7XG4gICAgaWYgKGV4aXN0aW5nTGF5ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXhpc3RpbmdMYXllci52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWxheWVyLmJhc2VMYXllciAmJiBsYXllci56SW5kZXgpIHtcbiAgICAgIGxheWVyLnpJbmRleCArPSAxMDtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXIuekluZGV4ID09PSB1bmRlZmluZWQgfHwgbGF5ZXIuekluZGV4ID09PSAwKSB7XG4gICAgICBjb25zdCBtYXhaSW5kZXggPSBNYXRoLm1heChcbiAgICAgICAgbGF5ZXIuYmFzZUxheWVyID8gMCA6IDEwLFxuICAgICAgICAuLi50aGlzLmxheWVyc1xuICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAobCkgPT4gbC5iYXNlTGF5ZXIgPT09IGxheWVyLmJhc2VMYXllciAmJiBsLnpJbmRleCA8IDIwMCAvLyB6SW5kZXggPiAyMDAgPSBzeXN0ZW0gbGF5ZXJcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcCgobCkgPT4gbC56SW5kZXgpXG4gICAgICApO1xuICAgICAgbGF5ZXIuekluZGV4ID0gbWF4WkluZGV4ICsgMSArIG9mZnNldFpJbmRleDtcbiAgICB9XG5cbiAgICBpZiAobGF5ZXIuYmFzZUxheWVyICYmIGxheWVyLnpJbmRleCA+IDkpIHtcbiAgICAgIGxheWVyLnpJbmRleCA9IDEwOyAvLyBiYXNlbGF5ZXIgbXVzdCBoYXZlIHpJbmRleCA8IDEwXG4gICAgfVxuXG4gICAgbGF5ZXIuc2V0TWFwKHRoaXMpO1xuICAgIHRoaXMubGF5ZXJXYXRjaGVyLndhdGNoTGF5ZXIobGF5ZXIpO1xuICAgIHRoaXMub2wuYWRkTGF5ZXIobGF5ZXIub2wpO1xuXG4gICAgcmV0dXJuIGxheWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGxheWVyIGZyb20gdGhlIE9MIG1hcCBhbmQgc3RvcCB3YXRjaGluZ1xuICAgKiBAcGFyYW0gbGF5ZXIgTGF5ZXJcbiAgICovXG4gIHByaXZhdGUgZG9SZW1vdmVMYXllcihsYXllcjogTGF5ZXIpIHtcbiAgICB0aGlzLmxheWVyV2F0Y2hlci51bndhdGNoTGF5ZXIobGF5ZXIpO1xuICAgIHRoaXMub2wucmVtb3ZlTGF5ZXIobGF5ZXIub2wpO1xuICAgIGxheWVyLnNldE1hcCh1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgbGF5ZXJzIG9ic2VydmFibGVcbiAgICogQHBhcmFtIGxheWVycyBMYXllcnNcbiAgICovXG4gIHByaXZhdGUgc2V0TGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xuICAgIHRoaXMubGF5ZXJzJC5uZXh0KHRoaXMuc29ydExheWVyc0J5WkluZGV4KGxheWVycykuc2xpY2UoMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnQgbGF5ZXJzIGJ5IGRlc2NlbmRpbmcgekluZGV4XG4gICAqIEBwYXJhbSBsYXllcnMgQXJyYXkgb2YgbGF5ZXJzXG4gICAqIEByZXR1cm5zIFRoZSBvcmlnaW5hbCBhcnJheSwgc29ydGVkIGJ5IHpJbmRleFxuICAgKi9cbiAgcHJpdmF0ZSBzb3J0TGF5ZXJzQnlaSW5kZXgobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgLy8gU29ydCBieSBkZXNjZW5kaW5nIHpJbmRleFxuICAgIHJldHVybiBsYXllcnMuc29ydChcbiAgICAgIChsYXllcjE6IExheWVyLCBsYXllcjI6IExheWVyKSA9PiBsYXllcjIuekluZGV4IC0gbGF5ZXIxLnpJbmRleFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxheWVyIGluZGV4IGluIHRoZSBtYXAncyBpbmVuciBhcnJheSBvZiBsYXllcnNcbiAgICogQHBhcmFtIGxheWVyIExheWVyXG4gICAqIEByZXR1cm5zIFRoZSBsYXllciBpbmRleFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRMYXllckluZGV4KGxheWVyOiBMYXllcikge1xuICAgIHJldHVybiB0aGlzLmxheWVycy5maW5kSW5kZXgoKF9sYXllcjogTGF5ZXIpID0+IF9sYXllciA9PT0gbGF5ZXIpO1xuICB9XG59XG4iXX0=
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbWFwL3NoYXJlZC9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sTUFBdUIsTUFBTSxTQUFTLENBQUM7QUFDOUMsT0FBTyxvQkFBb0IsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxhQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFFbEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVqQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLGVBQWUsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUdoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFzQixNQUFNLHdCQUF3QixDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBV3ZELE1BQU0sT0FBTyxNQUFNO0lBd0NQO0lBQ0E7SUF4Q0gsRUFBRSxDQUFRO0lBQ1YsY0FBYyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3JELG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUFhLFNBQVMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sQ0FBeUI7SUFDaEMsZUFBZSxDQUE4QjtJQUM3QyxPQUFPLENB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QUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx1SEFBdUg7SUFDdkgsZUFBZSxDQUFDLEtBQWE7UUFDM0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ2xDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUMxRCxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvY29uZmlnJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9zdG9yYWdlJztcbmltcG9ydCB7IFN1YmplY3RTdGF0dXMgfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCBvbE1hcCBmcm9tICdvbC9NYXAnO1xuaW1wb3J0IG9sVmlldywgeyBWaWV3T3B0aW9ucyB9IGZyb20gJ29sL1ZpZXcnO1xuaW1wb3J0IG9sQ29udHJvbEF0dHJpYnV0aW9uIGZyb20gJ29sL2NvbnRyb2wvQXR0cmlidXRpb24nO1xuaW1wb3J0IG9sQ29udHJvbFNjYWxlTGluZSBmcm9tICdvbC9jb250cm9sL1NjYWxlTGluZSc7XG5pbXBvcnQgKiBhcyBvbGludGVyYWN0aW9uIGZyb20gJ29sL2ludGVyYWN0aW9uJztcbmltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcbmltcG9ydCBPbFByb2plY3Rpb24gZnJvbSAnb2wvcHJvai9Qcm9qZWN0aW9uJztcbmltcG9ydCAqIGFzIG9scHJvajQgZnJvbSAnb2wvcHJvai9wcm9qNCc7XG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICdvbC91dGlsJztcblxuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2ZlYXR1cmUtZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBMYXllckNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9sYXllcic7XG5pbXBvcnQgdHlwZSB7IEFueUxheWVyLCBMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMnO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uLy4uL292ZXJsYXkvc2hhcmVkL292ZXJsYXknO1xuaW1wb3J0IHsgTGF5ZXJXYXRjaGVyLCBMYXllcldhdGNoZXJDaGFuZ2UgfSBmcm9tICcuLi91dGlscy9sYXllci13YXRjaGVyJztcbmltcG9ydCB7IE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcnMvZ2VvbG9jYXRpb24nO1xuaW1wb3J0IHsgTWFwVmlld0NvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXJzL3ZpZXcnO1xuaW1wb3J0IHR5cGUgeyBNYXBCYXNlIH0gZnJvbSAnLi9tYXAuYWJzdHJhY3QnO1xuaW1wb3J0IHtcbiAgTWFwQXR0cmlidXRpb25PcHRpb25zLFxuICBNYXBDb250cm9sc09wdGlvbnMsXG4gIE1hcEV4dGVudCxcbiAgTWFwT3B0aW9ucyxcbiAgTWFwU2NhbGVMaW5lT3B0aW9ucyxcbiAgTWFwVmlld09wdGlvbnNcbn0gZnJvbSAnLi9tYXAuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIElnb01hcCBpbXBsZW1lbnRzIE1hcEJhc2Uge1xuICBwdWJsaWMgb2w6IG9sTWFwO1xuICBwdWJsaWMgZm9yY2VkT2ZmbGluZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxheWVyc0FkZGVkQnlDbGljayQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFueUxheWVyW10+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBzdGF0dXMkOiBTdWJqZWN0PFN1YmplY3RTdGF0dXM+O1xuICBwdWJsaWMgcHJvcGVydHlDaGFuZ2UkOiBTdWJqZWN0PExheWVyV2F0Y2hlckNoYW5nZT47XG4gIHB1YmxpYyBvdmVybGF5OiBPdmVybGF5O1xuICBwdWJsaWMgcXVlcnlSZXN1bHRzT3ZlcmxheTogT3ZlcmxheTtcbiAgcHVibGljIHNlYXJjaFJlc3VsdHNPdmVybGF5OiBPdmVybGF5O1xuICBwdWJsaWMgdmlld0NvbnRyb2xsZXI6IE1hcFZpZXdDb250cm9sbGVyO1xuICBwdWJsaWMgbGF5ZXJDb250cm9sbGVyOiBMYXllckNvbnRyb2xsZXI7XG4gIHB1YmxpYyBnZW9sb2NhdGlvbkNvbnRyb2xsZXI6IE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlcjtcbiAgcHVibGljIHN3aXBlRW5hYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIG1hcENlbnRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHNlbGVjdGVkRmVhdHVyZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMYXllcltdPihudWxsKTtcblxuICBwdWJsaWMgYnVmZmVyRGF0YVNvdXJjZTogRmVhdHVyZURhdGFTb3VyY2U7XG5cbiAgcHVibGljIGxheWVyV2F0Y2hlcjogTGF5ZXJXYXRjaGVyO1xuICByZWFkb25seSBvcHRpb25zOiBNYXBPcHRpb25zO1xuICBwcml2YXRlIG1hcFZpZXdPcHRpb25zOiBNYXBWaWV3T3B0aW9ucztcbiAgcHJpdmF0ZSBkZWZhdWx0T3B0aW9uczogUGFydGlhbDxNYXBPcHRpb25zPiA9IHtcbiAgICBjb250cm9sczogeyBhdHRyaWJ1dGlvbjogZmFsc2UgfVxuICB9O1xuXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgcHJvamVjdGlvbkNvZGUgKi9cbiAgZ2V0IHByb2plY3Rpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0aW9uQ29kZTtcbiAgfVxuXG4gIGdldCB2aWV3UHJvamVjdGlvbigpOiBvbHByb2ouUHJvamVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRyb2xsZXIuZ2V0T2xQcm9qZWN0aW9uKCk7XG4gIH1cblxuICBnZXQgcHJvamVjdGlvbkNvZGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52aWV3UHJvamVjdGlvbi5nZXRDb2RlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zPzogTWFwT3B0aW9ucyxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlPzogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlPzogQ29uZmlnU2VydmljZVxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB0aGlzLmxheWVyQ29udHJvbGxlciA9IG5ldyBMYXllckNvbnRyb2xsZXIodGhpcywgW10pO1xuICAgIHRoaXMubGF5ZXJXYXRjaGVyID0gbmV3IExheWVyV2F0Y2hlcigpO1xuICAgIHRoaXMuc3RhdHVzJCA9IHRoaXMubGF5ZXJXYXRjaGVyLnN0YXR1cyQ7XG4gICAgdGhpcy5wcm9wZXJ0eUNoYW5nZSQgPSB0aGlzLmxheWVyV2F0Y2hlci5wcm9wZXJ0eUNoYW5nZSQ7XG4gICAgb2xwcm9qNC5yZWdpc3Rlcihwcm9qNCk7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBpbml0KCkge1xuICAgIGNvbnN0IGNvbnRyb2xzID0gW107XG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250cm9scykge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250cm9scy5hdHRyaWJ1dGlvbikge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGlvbk9wdCA9IChcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuY29udHJvbHMuYXR0cmlidXRpb24gPT09IHRydWVcbiAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgIDogdGhpcy5vcHRpb25zLmNvbnRyb2xzLmF0dHJpYnV0aW9uXG4gICAgICAgICkgYXMgTWFwQXR0cmlidXRpb25PcHRpb25zO1xuICAgICAgICBjb250cm9scy5wdXNoKG5ldyBvbENvbnRyb2xBdHRyaWJ1dGlvbihhdHRyaWJ1dGlvbk9wdCkpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250cm9scy5zY2FsZUxpbmUpIHtcbiAgICAgICAgY29uc3Qgc2NhbGVMaW5lT3B0ID0gKFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5jb250cm9scy5zY2FsZUxpbmUgPT09IHRydWVcbiAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgIDogdGhpcy5vcHRpb25zLmNvbnRyb2xzLnNjYWxlTGluZVxuICAgICAgICApIGFzIE1hcFNjYWxlTGluZU9wdGlvbnM7XG4gICAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbFNjYWxlTGluZShzY2FsZUxpbmVPcHQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGludGVyYWN0aW9ucyA9IHt9O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaW50ZXJhY3Rpb25zID09PSBmYWxzZSkge1xuICAgICAgaW50ZXJhY3Rpb25zID0ge1xuICAgICAgICBhbHRTaGlmdERyYWdSb3RhdGU6IGZhbHNlLFxuICAgICAgICBkb3VibGVDbGlja1pvb206IGZhbHNlLFxuICAgICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgICAgIG1vdXNlV2hlZWxab29tOiBmYWxzZSxcbiAgICAgICAgc2hpZnREcmFnWm9vbTogZmFsc2UsXG4gICAgICAgIGRyYWdQYW46IGZhbHNlLFxuICAgICAgICBwaW5jaFJvdGF0ZTogZmFsc2UsXG4gICAgICAgIHBpbmNoWm9vbTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5vbCA9IG5ldyBvbE1hcCh7XG4gICAgICBpbnRlcmFjdGlvbnM6IG9saW50ZXJhY3Rpb24uZGVmYXVsdHMoaW50ZXJhY3Rpb25zKSxcbiAgICAgIGNvbnRyb2xzXG4gICAgfSk7XG5cbiAgICB0aGlzLnNldFZpZXcodGhpcy5vcHRpb25zLnZpZXcgfHwge30pO1xuICAgIHRoaXMudmlld0NvbnRyb2xsZXIgPSBuZXcgTWFwVmlld0NvbnRyb2xsZXIoe1xuICAgICAgc3RhdGVIaXN0b3J5OiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy52aWV3Q29udHJvbGxlci5zZXRPbE1hcCh0aGlzLm9sKTtcbiAgICB0aGlzLm92ZXJsYXkgPSBuZXcgT3ZlcmxheSh0aGlzKTtcbiAgICB0aGlzLnF1ZXJ5UmVzdWx0c092ZXJsYXkgPSBuZXcgT3ZlcmxheSh0aGlzKTtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdHNPdmVybGF5ID0gbmV3IE92ZXJsYXkodGhpcyk7XG4gICAgdGhpcy5vbC5vbmNlKCdyZW5kZXJjb21wbGV0ZScsICgpID0+IHtcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25Db250cm9sbGVyID0gbmV3IE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAge1xuICAgICAgICAgIHByb2plY3Rpb246IHRoaXMudmlld0NvbnRyb2xsZXIuZ2V0T2xQcm9qZWN0aW9uKClcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZSxcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlXG4gICAgICApO1xuICAgICAgdGhpcy5nZW9sb2NhdGlvbkNvbnRyb2xsZXIuc2V0T2xNYXAodGhpcy5vbCk7XG4gICAgICBpZiAodGhpcy5nZW9sb2NhdGlvbkNvbnRyb2xsZXIpIHtcbiAgICAgICAgdGhpcy5nZW9sb2NhdGlvbkNvbnRyb2xsZXIudXBkYXRlR2VvbG9jYXRpb25PcHRpb25zKFxuICAgICAgICAgIHRoaXMubWFwVmlld09wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmlld0NvbnRyb2xsZXIubW9uaXRvclJvdGF0aW9uKCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRUYXJnZXQoaWQ6IHN0cmluZykge1xuICAgIHRoaXMub2wuc2V0VGFyZ2V0KGlkKTtcbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sYXllcldhdGNoZXIuc3Vic2NyaWJlKCgpID0+IHZvaWQgMSwgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGF5ZXJXYXRjaGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVmlldyhvcHRpb25zOiBNYXBWaWV3T3B0aW9ucykge1xuICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gdGhpcy5vbC5nZXRWaWV3KCk7XG4gICAgY29uc3Qgdmlld09wdGlvbnM6IE1hcFZpZXdPcHRpb25zID0ge1xuICAgICAgLi4uY3VycmVudFZpZXcuZ2V0UHJvcGVydGllcygpLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy56b29tICYmIG9wdGlvbnMucmVzb2x1dGlvbiA9PSBudWxsKSB7XG4gICAgICB2aWV3T3B0aW9ucy5yZXNvbHV0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuc2V0Vmlldyh2aWV3T3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMubWF4Wm9vbU9uRXh0ZW50KSB7XG4gICAgICB0aGlzLnZpZXdDb250cm9sbGVyLm1heFpvb21PbkV4dGVudCA9IG9wdGlvbnMubWF4Wm9vbU9uRXh0ZW50O1xuICAgIH1cbiAgICB0aGlzLm1hcFZpZXdPcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1hcCB2aWV3XG4gICAqIEBwYXJhbSBvcHRpb25zIE1hcCB2aWV3IG9wdGlvbnNcbiAgICovXG4gIHNldFZpZXcob3B0aW9uczogTWFwVmlld09wdGlvbnMpIHtcbiAgICBpZiAodGhpcy52aWV3Q29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnZpZXdDb250cm9sbGVyLmNsZWFyU3RhdGVIaXN0b3J5KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgdmlld09wdGlvbnM6IFZpZXdPcHRpb25zID0geyBjb25zdHJhaW5SZXNvbHV0aW9uOiB0cnVlLCAuLi5vcHRpb25zIH07XG4gICAgaWYgKG9wdGlvbnMuY2VudGVyKSB7XG4gICAgICB2aWV3T3B0aW9ucy5jZW50ZXIgPSBvbHByb2ouZnJvbUxvbkxhdChcbiAgICAgICAgb3B0aW9ucy5jZW50ZXIsXG4gICAgICAgIG9wdGlvbnMucHJvamVjdGlvblxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm9sLnNldFZpZXcobmV3IG9sVmlldyh2aWV3T3B0aW9ucykpO1xuXG4gICAgaWYgKG9wdGlvbnMubWF4TGF5ZXJab29tRXh0ZW50KSB7XG4gICAgICB0aGlzLnZpZXdDb250cm9sbGVyLm1heExheWVyWm9vbUV4dGVudCA9IG9wdGlvbnMubWF4TGF5ZXJab29tRXh0ZW50O1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbnRyb2xzKHZhbHVlOiBNYXBDb250cm9sc09wdGlvbnMpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xzID0gW107XG4gICAgaWYgKHZhbHVlLmF0dHJpYnV0aW9uKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGlvbk9wdCA9IChcbiAgICAgICAgdmFsdWUuYXR0cmlidXRpb24gPT09IHRydWUgPyB7fSA6IHZhbHVlLmF0dHJpYnV0aW9uXG4gICAgICApIGFzIE1hcEF0dHJpYnV0aW9uT3B0aW9ucztcbiAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbEF0dHJpYnV0aW9uKGF0dHJpYnV0aW9uT3B0KSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5zY2FsZUxpbmUpIHtcbiAgICAgIGNvbnN0IHNjYWxlTGluZU9wdCA9IChcbiAgICAgICAgdmFsdWUuc2NhbGVMaW5lID09PSB0cnVlID8ge30gOiB2YWx1ZS5zY2FsZUxpbmVcbiAgICAgICkgYXMgTWFwU2NhbGVMaW5lT3B0aW9ucztcbiAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbFNjYWxlTGluZShzY2FsZUxpbmVPcHQpKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q29udHJvbHMgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLm9sLmdldENvbnRyb2xzKCkuZ2V0QXJyYXkoKSk7XG4gICAgY3VycmVudENvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgIHRoaXMub2wucmVtb3ZlQ29udHJvbChjb250cm9sKTtcbiAgICB9KTtcbiAgICBjb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICB0aGlzLm9sLmFkZENvbnRyb2woY29udHJvbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVE9ETzogTW92ZSB0byBWaWV3Q29udHJvbGxlciBhbmQgdXBkYXRlIGV2ZXJ5IHBsYWNlIGl0J3MgdXNlZFxuICAgKi9cbiAgZ2V0Q2VudGVyKHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udHJvbGxlci5nZXRDZW50ZXIocHJvamVjdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVE9ETzogTW92ZSB0byBWaWV3Q29udHJvbGxlciBhbmQgdXBkYXRlIGV2ZXJ5IHBsYWNlIGl0J3MgdXNlZFxuICAgKi9cbiAgZ2V0RXh0ZW50KHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBNYXBFeHRlbnQge1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250cm9sbGVyLmdldEV4dGVudChwcm9qZWN0aW9uKTtcbiAgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICogVE9ETzogTW92ZSB0byBWaWV3Q29udHJvbGxlciBhbmQgdXBkYXRlIGV2ZXJ5IHBsYWNlIGl0J3MgdXNlZFxuICAgKi9cbiAgZ2V0Wm9vbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250cm9sbGVyLmdldFpvb20oKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCBmaW5kIGEgd2F5IHRvIHJlbW92ZSB0aGlzIG1ldGhvZC4gRm9yIG5vdyB3ZSBkaXNjb3VyYWdlIHRvIHVzZSBpdCB1bnRpbCB3ZSBmaW5kIHRoZSB3YXkgdG8gcmVtb3ZlIGl0ICovXG4gIGdldExheWVyQnlPbFVJZChvbFVJZDogc3RyaW5nKTogQW55TGF5ZXIge1xuICAgIHJldHVybiB0aGlzLmxheWVyQ29udHJvbGxlci5hbGwuZmluZChcbiAgICAgIChsYXllcikgPT4gZ2V0VWlkKGxheWVyLm9sKSAmJiBnZXRVaWQobGF5ZXIub2wpID09PSBvbFVJZFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -26,4 +26,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26
26
  providedIn: 'root'
27
27
  }]
28
28
  }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL21hcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLFVBQVU7SUFDYixHQUFHLENBQVM7SUFFcEIsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQzt3R0FUVSxVQUFVOzRHQUFWLFVBQVUsY0FGVCxNQUFNOzs0RkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi9tYXAnO1xuXG4vKipcbiAqIE1hcFNlcnZpY2VcbiAqXG4gKiBUaGlzIHNlcnZpY2UgdHJhY2tzIHRoZSBJZ29NYXAgaW5zdGFuY2UsIGlmIGFueS5cbiAqIEN1cnJlbnRseSwgb25seSBvbmUgbWFwIGluc3RhbmNlIGlzIHN1cHBvcnRlZFxuICogYnV0IHN1cHBvcnQgZm9yIG11bHRpcGxlIG1hcHMgbWF5IGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuXG4gKiBUaGlzIHdpbGwgaW1wYWN0IG90aGVyIHNlcnZpY2VzIHN1Y2ggYXMgdGhlIE92ZXJsYXlTZXJ2aWNlXG4gKiBiZWNhdXNlIHRoZXNlIG1hcHMgd29uJ3QgYmUgc2hhcmluZyBvdmVybGF5ZWQgZmVhdHVyZXMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1hcFNlcnZpY2Uge1xuICBwcml2YXRlIG1hcDogSWdvTWFwO1xuXG4gIGdldE1hcCgpOiBJZ29NYXAge1xuICAgIHJldHVybiB0aGlzLm1hcDtcbiAgfVxuXG4gIHNldE1hcChtYXA6IElnb01hcCkge1xuICAgIHRoaXMubWFwID0gbWFwO1xuICB9XG59XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL21hcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLFVBQVU7SUFDYixHQUFHLENBQVM7SUFFcEIsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVc7UUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDakIsQ0FBQzt3R0FUVSxVQUFVOzRHQUFWLFVBQVUsY0FGVCxNQUFNOzs0RkFFUCxVQUFVO2tCQUh0QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBJZ29NYXAgfSBmcm9tICcuL21hcCc7XG5cbi8qKlxuICogTWFwU2VydmljZVxuICpcbiAqIFRoaXMgc2VydmljZSB0cmFja3MgdGhlIElnb01hcCBpbnN0YW5jZSwgaWYgYW55LlxuICogQ3VycmVudGx5LCBvbmx5IG9uZSBtYXAgaW5zdGFuY2UgaXMgc3VwcG9ydGVkXG4gKiBidXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgbWFwcyBtYXkgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS5cbiAqIFRoaXMgd2lsbCBpbXBhY3Qgb3RoZXIgc2VydmljZXMgc3VjaCBhcyB0aGUgT3ZlcmxheVNlcnZpY2VcbiAqIGJlY2F1c2UgdGhlc2UgbWFwcyB3b24ndCBiZSBzaGFyaW5nIG92ZXJsYXllZCBmZWF0dXJlcy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTWFwU2VydmljZSB7XG4gIHByaXZhdGUgbWFwOiBJZ29NYXA7XG5cbiAgZ2V0TWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMubWFwO1xuICB9XG5cbiAgc2V0TWFwKG1hcDogSWdvTWFwKSB7XG4gICAgdGhpcy5tYXAgPSBtYXA7XG4gIH1cbn1cbiJdfQ==