@igo2/geo 16.0.2 → 16.1.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 (327) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +28 -132
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +22 -86
  3. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +22 -65
  4. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +42 -47
  5. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +13 -129
  6. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +14 -55
  7. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +27 -57
  8. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +46 -54
  9. package/esm2022/lib/catalog/catalog.module.mjs +28 -29
  10. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
  11. package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
  12. package/esm2022/lib/catalog/shared/catalog.service.mjs +14 -14
  13. package/esm2022/lib/datasource/datasource.module.mjs +12 -12
  14. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +9 -0
  15. package/esm2022/lib/datasource/shared/capabilities.service.mjs +10 -17
  16. package/esm2022/lib/datasource/shared/datasource.service.mjs +11 -11
  17. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +9 -9
  18. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  19. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  20. package/esm2022/lib/datasource/shared/index.mjs +2 -1
  21. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +12 -12
  22. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +19 -102
  23. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +21 -122
  24. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +11 -103
  25. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +6 -6
  26. package/esm2022/lib/directions/directions.component.mjs +25 -47
  27. package/esm2022/lib/directions/directions.module.mjs +61 -62
  28. package/esm2022/lib/directions/shared/directions.service.mjs +15 -14
  29. package/esm2022/lib/download/download-button/download-button.component.mjs +11 -26
  30. package/esm2022/lib/download/download.module.mjs +22 -23
  31. package/esm2022/lib/download/shared/download.service.mjs +9 -9
  32. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +9 -35
  33. package/esm2022/lib/draw/draw/draw-popup.component.mjs +20 -299
  34. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +7 -40
  35. package/esm2022/lib/draw/draw/draw.component.mjs +56 -322
  36. package/esm2022/lib/draw/draw/draw.module.mjs +64 -65
  37. package/esm2022/lib/draw/drawingTool.module.mjs +12 -13
  38. package/esm2022/lib/draw/shared/draw-icon.service.mjs +9 -9
  39. package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
  40. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  41. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +21 -171
  42. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +17 -19
  43. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +22 -23
  44. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +16 -34
  45. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +12 -13
  46. package/esm2022/lib/feature/feature.module.mjs +13 -14
  47. package/esm2022/lib/feature/shared/feature-store.utils.mjs +2 -2
  48. package/esm2022/lib/feature/shared/feature.interfaces.mjs +1 -1
  49. package/esm2022/lib/feature/shared/feature.utils.mjs +1 -1
  50. package/esm2022/lib/feature/shared/store.mjs +1 -1
  51. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +1 -1
  52. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  53. package/esm2022/lib/feature/shared/strategies/selection.mjs +2 -2
  54. package/esm2022/lib/filter/filter.module.mjs +158 -197
  55. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +24 -49
  56. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +32 -397
  57. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +39 -625
  58. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +20 -47
  59. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +44 -340
  60. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +36 -58
  61. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +26 -126
  62. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +11 -11
  63. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +17 -40
  64. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +9 -9
  65. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +6 -6
  66. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +6 -6
  67. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +9 -9
  68. package/esm2022/lib/filter/shared/time-filter.service.mjs +6 -6
  69. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +73 -386
  70. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +23 -87
  71. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +37 -86
  72. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +24 -49
  73. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +20 -268
  74. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +20 -72
  75. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +11 -11
  76. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +13 -24
  77. package/esm2022/lib/geo.module.mjs +54 -55
  78. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +36 -39
  79. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +32 -97
  80. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +30 -31
  81. package/esm2022/lib/geometry/geometry.module.mjs +13 -14
  82. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  83. package/esm2022/lib/import-export/export-button/export-button.component.mjs +11 -24
  84. package/esm2022/lib/import-export/import-export/import-export.component.mjs +25 -434
  85. package/esm2022/lib/import-export/import-export.module.mjs +54 -55
  86. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +20 -22
  87. package/esm2022/lib/import-export/shared/export.service.mjs +10 -10
  88. package/esm2022/lib/import-export/shared/import.service.mjs +9 -9
  89. package/esm2022/lib/layer/index.mjs +1 -1
  90. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +47 -127
  91. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +16 -183
  92. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +16 -26
  93. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +11 -11
  94. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +26 -130
  95. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +13 -13
  96. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +50 -272
  97. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +21 -72
  98. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +9 -9
  99. package/esm2022/lib/layer/layer.module.mjs +94 -114
  100. package/esm2022/lib/layer/shared/layer.service.mjs +12 -12
  101. package/esm2022/lib/layer/shared/layers/image-layer.mjs +2 -2
  102. package/esm2022/lib/layer/shared/layers/layer.mjs +1 -1
  103. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +2 -2
  104. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +2 -2
  105. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +2 -2
  106. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +12 -27
  107. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +18 -60
  108. package/esm2022/lib/map/baselayers-switcher/index.mjs +1 -1
  109. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +20 -48
  110. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +11 -31
  111. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +17 -26
  112. package/esm2022/lib/map/index.mjs +1 -1
  113. package/esm2022/lib/map/info-section/info-section.component.mjs +9 -22
  114. package/esm2022/lib/map/map-browser/index.mjs +1 -1
  115. package/esm2022/lib/map/map-browser/map-browser.component.mjs +11 -18
  116. package/esm2022/lib/map/map-center/map-center.component.mjs +9 -13
  117. package/esm2022/lib/map/map.module.mjs +88 -96
  118. package/esm2022/lib/map/menu-button/menu-button.component.mjs +11 -19
  119. package/esm2022/lib/map/offline-button/offline-button.component.mjs +13 -24
  120. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +13 -39
  121. package/esm2022/lib/map/shared/hover-feature.directive.mjs +18 -20
  122. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +1 -1
  123. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +15 -15
  124. package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
  125. package/esm2022/lib/map/shared/map.service.mjs +9 -9
  126. package/esm2022/lib/map/shared/mapOffline.directive.mjs +9 -9
  127. package/esm2022/lib/map/shared/projection.service.mjs +9 -9
  128. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +9 -16
  129. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +11 -24
  130. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +11 -28
  131. package/esm2022/lib/measure/measure.module.mjs +12 -13
  132. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +9 -9
  133. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +13 -166
  134. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +19 -51
  135. package/esm2022/lib/measure/measurer/measurer.component.mjs +74 -241
  136. package/esm2022/lib/measure/measurer/measurer.module.mjs +46 -59
  137. package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
  138. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +20 -69
  139. package/esm2022/lib/metadata/metadata.module.mjs +24 -25
  140. package/esm2022/lib/metadata/shared/metadata.interface.mjs +1 -1
  141. package/esm2022/lib/metadata/shared/metadata.service.mjs +9 -9
  142. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +9 -9
  143. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +9 -9
  144. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +9 -9
  145. package/esm2022/lib/offline/shared/geo-network.service.mjs +9 -9
  146. package/esm2022/lib/overlay/overlay.module.mjs +12 -13
  147. package/esm2022/lib/overlay/shared/overlay.directive.mjs +11 -11
  148. package/esm2022/lib/overlay/shared/overlay.mjs +1 -1
  149. package/esm2022/lib/overlay/shared/overlay.service.mjs +9 -9
  150. package/esm2022/lib/overlay/shared/overlay.utils.mjs +2 -2
  151. package/esm2022/lib/print/print/print.component.mjs +21 -27
  152. package/esm2022/lib/print/print-form/print-form.component.mjs +56 -349
  153. package/esm2022/lib/print/print.module.mjs +36 -37
  154. package/esm2022/lib/print/shared/print.service.mjs +14 -14
  155. package/esm2022/lib/print/shared/print.type.mjs +2 -2
  156. package/esm2022/lib/query/query.module.mjs +13 -14
  157. package/esm2022/lib/query/shared/query-search-source.mjs +9 -9
  158. package/esm2022/lib/query/shared/query.directive.mjs +21 -21
  159. package/esm2022/lib/query/shared/query.service.mjs +10 -10
  160. package/esm2022/lib/search/search-bar/search-bar.component.mjs +66 -165
  161. package/esm2022/lib/search/search-bar/search-bar.module.mjs +38 -39
  162. package/esm2022/lib/search/search-bar/search-url-param.directive.mjs +13 -13
  163. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +12 -68
  164. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +23 -66
  165. package/esm2022/lib/search/search-results/search-results-item.component.mjs +18 -74
  166. package/esm2022/lib/search/search-results/search-results.component.mjs +41 -238
  167. package/esm2022/lib/search/search-results/search-results.module.mjs +58 -59
  168. package/esm2022/lib/search/search-selector/search-selector.component.mjs +13 -43
  169. package/esm2022/lib/search/search-selector/search-selector.module.mjs +30 -31
  170. package/esm2022/lib/search/search-settings/search-settings.component.mjs +24 -233
  171. package/esm2022/lib/search/search-settings/search-settings.module.mjs +32 -33
  172. package/esm2022/lib/search/search.module.mjs +32 -33
  173. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +18 -20
  174. package/esm2022/lib/search/shared/search.enums.mjs +3 -3
  175. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  176. package/esm2022/lib/search/shared/search.service.mjs +10 -10
  177. package/esm2022/lib/search/shared/sources/cadastre.mjs +10 -10
  178. package/esm2022/lib/search/shared/sources/coordinates.mjs +19 -19
  179. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  180. package/esm2022/lib/search/shared/sources/icherche.mjs +37 -26
  181. package/esm2022/lib/search/shared/sources/ilayer.mjs +19 -19
  182. package/esm2022/lib/search/shared/sources/nominatim.mjs +10 -10
  183. package/esm2022/lib/search/shared/sources/source.mjs +1 -1
  184. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  185. package/esm2022/lib/search/shared/sources/storedqueries.mjs +18 -18
  186. package/esm2022/lib/search/shared/sources/workspace.mjs +10 -10
  187. package/esm2022/lib/style/style-list/style-list.module.mjs +12 -12
  188. package/esm2022/lib/style/style-list/style-list.service.mjs +9 -9
  189. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +12 -121
  190. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +13 -59
  191. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +9 -17
  192. package/esm2022/lib/style/style-service/draw-style.service.mjs +9 -9
  193. package/esm2022/lib/style/style-service/style.service.mjs +9 -9
  194. package/esm2022/lib/style/style.module.mjs +51 -52
  195. package/esm2022/lib/toast/toast.component.mjs +15 -44
  196. package/esm2022/lib/toast/toast.module.mjs +24 -25
  197. package/esm2022/lib/utils/id-generator.mjs +1 -1
  198. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +9 -9
  199. package/esm2022/lib/wkt/shared/wkt.service.mjs +9 -9
  200. package/esm2022/lib/wkt/wkt.module.mjs +12 -12
  201. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +10 -27
  202. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +20 -21
  203. package/esm2022/lib/workspace/shared/edition-workspace.mjs +4 -4
  204. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +10 -10
  205. package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
  206. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +14 -13
  207. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
  208. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +14 -13
  209. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +12 -12
  210. package/esm2022/lib/workspace/shared/workspace.utils.mjs +1 -1
  211. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +15 -19
  212. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +12 -13
  213. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +21 -21
  214. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +12 -13
  215. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +15 -15
  216. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +12 -13
  217. package/esm2022/lib/workspace/workspace.module.mjs +35 -36
  218. package/fesm2022/igo2-geo.mjs +16547 -23425
  219. package/fesm2022/igo2-geo.mjs.map +1 -1
  220. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +1 -1
  221. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
  222. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
  223. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
  224. package/lib/catalog/catalog-library/catalog-library.component.d.ts +2 -2
  225. package/lib/catalog/shared/catalog.abstract.d.ts +3 -3
  226. package/lib/catalog/shared/catalog.interface.d.ts +2 -2
  227. package/lib/catalog/shared/catalog.service.d.ts +1 -1
  228. package/lib/datasource/shared/capabilities.interface.d.ts +8 -0
  229. package/lib/datasource/shared/capabilities.service.d.ts +1 -8
  230. package/lib/datasource/shared/datasources/wms-datasource.d.ts +1 -1
  231. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +1 -1
  232. package/lib/datasource/shared/index.d.ts +1 -0
  233. package/lib/directions/shared/directions.service.d.ts +2 -2
  234. package/lib/download/shared/download.service.d.ts +1 -1
  235. package/lib/draw/shared/draw.interface.d.ts +1 -1
  236. package/lib/environment/environment.interface.d.ts +8 -6
  237. package/lib/feature/shared/feature.interfaces.d.ts +3 -3
  238. package/lib/feature/shared/feature.utils.d.ts +2 -1
  239. package/lib/feature/shared/store.d.ts +1 -1
  240. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  241. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +1 -1
  242. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +1 -1
  243. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +1 -0
  244. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +1 -1
  245. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  246. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +1 -1
  247. package/lib/filter/shared/spatial-filter.service.d.ts +1 -1
  248. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +1 -1
  249. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +2 -2
  250. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  251. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -1
  252. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -1
  253. package/lib/geometry/shared/geometry.interfaces.d.ts +1 -1
  254. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  255. package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
  256. package/lib/layer/layer-legend/layer-legend.component.d.ts +1 -1
  257. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
  258. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
  259. package/lib/layer/shared/layers/image-layer.d.ts +1 -1
  260. package/lib/layer/shared/layers/layer.d.ts +2 -1
  261. package/lib/layer/shared/layers/tile-layer.d.ts +1 -1
  262. package/lib/layer/shared/layers/vectortile-layer.d.ts +1 -1
  263. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
  264. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
  265. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  266. package/lib/map/shared/map.abstract.d.ts +5 -4
  267. package/lib/measure/measurer/measurer.component.d.ts +8 -4
  268. package/lib/measure/shared/measure.interfaces.d.ts +2 -2
  269. package/lib/metadata/shared/metadata.interface.d.ts +1 -1
  270. package/lib/overlay/shared/overlay.d.ts +1 -1
  271. package/lib/print/print-form/print-form.component.d.ts +4 -6
  272. package/lib/print/shared/print.service.d.ts +2 -1
  273. package/lib/print/shared/print.type.d.ts +2 -6
  274. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  275. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  276. package/lib/search/search-results/search-results.component.d.ts +1 -1
  277. package/lib/search/shared/search.interfaces.d.ts +1 -1
  278. package/lib/search/shared/sources/cadastre.d.ts +1 -1
  279. package/lib/search/shared/sources/coordinates.d.ts +1 -1
  280. package/lib/search/shared/sources/icherche.d.ts +1 -1
  281. package/lib/search/shared/sources/icherche.interfaces.d.ts +1 -1
  282. package/lib/search/shared/sources/nominatim.d.ts +1 -1
  283. package/lib/search/shared/sources/source.d.ts +1 -1
  284. package/lib/search/shared/sources/storedqueries.d.ts +1 -1
  285. package/lib/search/shared/sources/storedqueries.interfaces.d.ts +1 -1
  286. package/lib/search/shared/sources/workspace.d.ts +1 -1
  287. package/lib/utils/id-generator.d.ts +1 -1
  288. package/lib/workspace/shared/edition-workspace.d.ts +3 -3
  289. package/lib/workspace/shared/edition-workspace.service.d.ts +1 -1
  290. package/lib/workspace/shared/feature-workspace.d.ts +1 -1
  291. package/lib/workspace/shared/feature-workspace.service.d.ts +2 -2
  292. package/lib/workspace/shared/wfs-workspace.d.ts +1 -1
  293. package/lib/workspace/shared/wfs-workspace.service.d.ts +2 -2
  294. package/lib/workspace/shared/wms-workspace.service.d.ts +2 -2
  295. package/lib/workspace/shared/workspace.utils.d.ts +1 -1
  296. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
  297. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
  298. package/locale/en.geo.json +5 -3
  299. package/locale/fr.geo.json +5 -3
  300. package/package.json +26 -29
  301. package/{lib → src/lib}/search/search-bar/search-bar.theming.scss +1 -0
  302. package/src/style/style.scss +1 -0
  303. /package/{geo-theme.scss → src/geo-theme.scss} +0 -0
  304. /package/{lib → src/lib}/catalog/catalog-browser/catalog-browser.theming.scss +0 -0
  305. /package/{lib → src/lib}/catalog/catalog.theming.scss +0 -0
  306. /package/{lib → src/lib}/directions/directions-results/directions-results.theming.scss +0 -0
  307. /package/{lib → src/lib}/directions/directions.theming.scss +0 -0
  308. /package/{lib → src/lib}/draw/draw.theming.scss +0 -0
  309. /package/{lib → src/lib}/feature/feature-details/feature-details.theming.scss +0 -0
  310. /package/{lib → src/lib}/feature/feature.theming.scss +0 -0
  311. /package/{lib → src/lib}/filter/filter.theming.scss +0 -0
  312. /package/{lib → src/lib}/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +0 -0
  313. /package/{lib → src/lib}/filter/time-filter-form/time-filter-form.theming.scss +0 -0
  314. /package/{lib → src/lib}/layer/layer-item/layer-item.theme.scss +0 -0
  315. /package/{lib → src/lib}/layer/layer-legend/layer-legend.theming.scss +0 -0
  316. /package/{lib → src/lib}/layer/layer-list-tool/layer-list-tool.theming.scss +0 -0
  317. /package/{lib → src/lib}/layer/layer.theming.scss +0 -0
  318. /package/{lib → src/lib}/map/map-browser/map-browser.theming.scss +0 -0
  319. /package/{lib → src/lib}/map/map.theming.scss +0 -0
  320. /package/{lib → src/lib}/map/menu-button/menu-button.theming.scss +0 -0
  321. /package/{lib → src/lib}/map/zoom-button/zoom-button.theming.scss +0 -0
  322. /package/{lib → src/lib}/measure/measure.theming.scss +0 -0
  323. /package/{lib → src/lib}/measure/measurer/measurer.theming.scss +0 -0
  324. /package/{lib → src/lib}/search/search-results/search-results-item.theme.scss +0 -0
  325. /package/{lib → src/lib}/search/search.theming.scss +0 -0
  326. /package/{lib → src/lib}/workspace/confirmation-popup/confirmation-popup.theming.scss +0 -0
  327. /package/{lib → src/lib}/workspace/workspace.theming.scss +0 -0
@@ -9,213 +9,20 @@ import { LinkedProperties } from '../shared/layers/layer.interface';
9
9
  import { LayerListControlsEnum, LayerListDisplacement } from './layer-list.enum';
10
10
  import { LayerListSelectVisibleEnum } from './layer-list.enum';
11
11
  import * as i0 from "@angular/core";
12
- const _c0 = ["igoLayerItemToolbar"];
13
- function LayerListComponent_igo_layer_list_tool_0_Template(rf, ctx) { if (rf & 1) {
14
- const _r7 = i0.ɵɵgetCurrentView();
15
- i0.ɵɵelementStart(0, "igo-layer-list-tool", 6);
16
- i0.ɵɵlistener("appliedFilterAndSort", function LayerListComponent_igo_layer_list_tool_0_Template_igo_layer_list_tool_appliedFilterAndSort_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.onAppliedFilterAndSortChange($event)); })("selection", function LayerListComponent_igo_layer_list_tool_0_Template_igo_layer_list_tool_selection_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r8 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r8.toggleSelectionMode($event)); });
17
- i0.ɵɵelementEnd();
18
- } if (rf & 2) {
19
- const ctx_r0 = i0.ɵɵnextContext();
20
- i0.ɵɵproperty("layersAreAllVisible", ctx_r0.layersAreAllVisible)("term", ctx_r0.layerFilterAndSortOptions.keyword)("onlyVisible", ctx_r0.layerFilterAndSortOptions.onlyVisible)("sortAlpha", ctx_r0.layerFilterAndSortOptions.sortAlpha);
21
- } }
22
- function LayerListComponent_div_2_Template(rf, ctx) { if (rf & 1) {
23
- const _r10 = i0.ɵɵgetCurrentView();
24
- i0.ɵɵelementStart(0, "div", 7)(1, "mat-checkbox", 8);
25
- i0.ɵɵlistener("change", function LayerListComponent_div_2_Template_mat_checkbox_change_1_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.selectAll()); });
26
- i0.ɵɵtext(2);
27
- i0.ɵɵpipe(3, "translate");
28
- i0.ɵɵpipe(4, "translate");
29
- i0.ɵɵelementEnd()();
30
- } if (rf & 2) {
31
- const ctx_r1 = i0.ɵɵnextContext();
32
- i0.ɵɵadvance(1);
33
- i0.ɵɵproperty("color", !ctx_r1.selectAllCheck && ctx_r1.layersChecked.length > 0 ? "accent" : "primary")("checked", ctx_r1.selectAllCheck)("indeterminate", !ctx_r1.selectAllCheck && ctx_r1.layersChecked.length > 0);
34
- i0.ɵɵadvance(1);
35
- i0.ɵɵtextInterpolate1(" ", ctx_r1.selectAllCheck ? i0.ɵɵpipeBind1(3, 4, "igo.geo.layer.deselectAll") : i0.ɵɵpipeBind1(4, 6, "igo.geo.layer.selectAll"), " ");
36
- } }
37
- function LayerListComponent_ng_template_6_igo_layer_item_0_Template(rf, ctx) { if (rf & 1) {
38
- const _r15 = i0.ɵɵgetCurrentView();
39
- i0.ɵɵelementStart(0, "igo-layer-item", 10);
40
- i0.ɵɵlistener("action", function LayerListComponent_ng_template_6_igo_layer_item_0_Template_igo_layer_item_action_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r14.toggleLayerTool($event)); })("checkbox", function LayerListComponent_ng_template_6_igo_layer_item_0_Template_igo_layer_item_checkbox_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r16 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r16.layersCheck($event)); });
41
- i0.ɵɵelementEnd();
42
- } if (rf & 2) {
43
- const layer_r11 = i0.ɵɵnextContext().$implicit;
44
- const ctx_r13 = i0.ɵɵnextContext();
45
- i0.ɵɵproperty("layer", layer_r11)("activeLayer", ctx_r13.activeLayer)("orderable", ctx_r13.orderable && !layer_r11.baseLayer)("lowerDisabled", ctx_r13.getLowerLayer().id === layer_r11.id)("raiseDisabled", ctx_r13.getUpperLayer().id === layer_r11.id)("queryBadge", ctx_r13.queryBadge)("expandLegendIfVisible", ctx_r13.expandLegendOfVisibleLayers)("updateLegendOnResolutionChange", ctx_r13.updateLegendOnResolutionChange)("toggleLegendOnVisibilityChange", ctx_r13.toggleLegendOnVisibilityChange)("selectionMode", ctx_r13.selection)("selectAll", ctx_r13.selectAllCheck)("layerCheck", layer_r11.options.check)("changeDetection", ctx_r13.layerItemChangeDetection$);
46
- } }
47
- function LayerListComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {
48
- i0.ɵɵtemplate(0, LayerListComponent_ng_template_6_igo_layer_item_0_Template, 1, 13, "igo-layer-item", 9);
49
- } if (rf & 2) {
50
- const layer_r11 = ctx.$implicit;
51
- const ctx_r3 = i0.ɵɵnextContext();
52
- i0.ɵɵproperty("ngIf", !(ctx_r3.excludeBaseLayers && layer_r11.baseLayer));
53
- } }
54
- function LayerListComponent_igo_panel_8_button_2_Template(rf, ctx) { if (rf & 1) {
55
- const _r24 = i0.ɵɵgetCurrentView();
56
- i0.ɵɵelementStart(0, "button", 28);
57
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_8_button_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r23.removeLayers()); });
58
- i0.ɵɵpipe(1, "translate");
59
- i0.ɵɵelement(2, "mat-icon", 29);
60
- i0.ɵɵelementEnd();
61
- } if (rf & 2) {
62
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 1, "igo.geo.layer.removeLayer"));
63
- } }
64
- function LayerListComponent_igo_panel_8_button_21_Template(rf, ctx) { if (rf & 1) {
65
- const _r26 = i0.ɵɵgetCurrentView();
66
- i0.ɵɵelementStart(0, "button", 30);
67
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_8_button_21_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r26); const ctx_r25 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r25.zoomLayerExtents(ctx_r25.activeLayer)); });
68
- i0.ɵɵpipe(1, "translate");
69
- i0.ɵɵelement(2, "mat-icon", 31);
70
- i0.ɵɵelementEnd();
71
- } if (rf & 2) {
72
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 1, "igo.geo.layer.zoomLayer"));
73
- } }
74
- const _c1 = function (a0) { return { layer: a0 }; };
75
- function LayerListComponent_igo_panel_8_Template(rf, ctx) { if (rf & 1) {
76
- const _r28 = i0.ɵɵgetCurrentView();
77
- i0.ɵɵelementStart(0, "igo-panel", 11)(1, "div", 12);
78
- i0.ɵɵtemplate(2, LayerListComponent_igo_panel_8_button_2_Template, 3, 3, "button", 13);
79
- i0.ɵɵelementStart(3, "button", 14);
80
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_8_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r28); const ctx_r27 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r27.moveActiveLayer(ctx_r27.activeLayer, ctx_r27.layerListDisplacement.Lower, true)); });
81
- i0.ɵɵpipe(4, "translate");
82
- i0.ɵɵpipe(5, "translate");
83
- i0.ɵɵelement(6, "mat-icon", 15);
84
- i0.ɵɵelementEnd();
85
- i0.ɵɵelementStart(7, "button", 16);
86
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_8_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r28); const ctx_r29 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r29.moveActiveLayer(ctx_r29.activeLayer, ctx_r29.layerListDisplacement.Raise, true)); });
87
- i0.ɵɵpipe(8, "translate");
88
- i0.ɵɵpipe(9, "translate");
89
- i0.ɵɵelement(10, "mat-icon", 17);
90
- i0.ɵɵelementEnd();
91
- i0.ɵɵelementStart(11, "button", 18);
92
- i0.ɵɵpipe(12, "translate");
93
- i0.ɵɵelement(13, "mat-icon", 19);
94
- i0.ɵɵelementEnd();
95
- i0.ɵɵelementStart(14, "mat-menu", 20, 21)(16, "mat-slider", 22, 23);
96
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_8_Template_mat_slider_click_16_listener($event) { return $event.stopPropagation(); });
97
- i0.ɵɵpipe(18, "translate");
98
- i0.ɵɵelementStart(19, "input", 24, 25);
99
- i0.ɵɵlistener("input", function LayerListComponent_igo_panel_8_Template_input_input_19_listener() { i0.ɵɵrestoreView(_r28); const _r21 = i0.ɵɵreference(20); const _r20 = i0.ɵɵreference(17); const ctx_r31 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r31.changeOpacity({ source: _r21, parent: _r20, value: _r21.value })); });
100
- i0.ɵɵelementEnd()()();
101
- i0.ɵɵtemplate(21, LayerListComponent_igo_panel_8_button_21_Template, 3, 3, "button", 26);
102
- i0.ɵɵelementContainer(22, 27);
103
- i0.ɵɵprojection(23);
104
- i0.ɵɵelementEnd()();
105
- } if (rf & 2) {
106
- const _r19 = i0.ɵɵreference(15);
107
- const ctx_r4 = i0.ɵɵnextContext();
108
- i0.ɵɵproperty("title", ctx_r4.activeLayer.title);
109
- i0.ɵɵadvance(2);
110
- i0.ɵɵproperty("ngIf", ctx_r4.isLayerRemovable(ctx_r4.activeLayer));
111
- i0.ɵɵadvance(1);
112
- i0.ɵɵproperty("matTooltip", ctx_r4.sortAlpha || ctx_r4.onlyVisible || ctx_r4.keyword ? i0.ɵɵpipeBind1(4, 20, "igo.geo.layer.filterLowerLayer") : i0.ɵɵpipeBind1(5, 22, "igo.geo.layer.lowerLayer"))("disabled", ctx_r4.lowerDisabled);
113
- i0.ɵɵadvance(3);
114
- i0.ɵɵproperty("matBadge", ctx_r4.sortAlpha || ctx_r4.onlyVisible || ctx_r4.keyword ? "!" : "")("matBadgeHidden", ctx_r4.lowerDisabled);
115
- i0.ɵɵadvance(1);
116
- i0.ɵɵproperty("matTooltip", ctx_r4.sortAlpha || ctx_r4.onlyVisible || ctx_r4.keyword ? i0.ɵɵpipeBind1(8, 24, "igo.geo.layer.filterRaiseLayer") : i0.ɵɵpipeBind1(9, 26, "igo.geo.layer.raiseLayer"))("disabled", ctx_r4.raiseDisabled);
117
- i0.ɵɵadvance(3);
118
- i0.ɵɵproperty("matBadge", ctx_r4.sortAlpha || ctx_r4.onlyVisible || ctx_r4.keyword ? "!" : "")("matBadgeHidden", ctx_r4.raiseDisabled);
119
- i0.ɵɵadvance(1);
120
- i0.ɵɵproperty("matMenuTriggerFor", _r19)("matTooltip", i0.ɵɵpipeBind1(12, 28, "igo.geo.layer.opacity"));
121
- i0.ɵɵadvance(2);
122
- i0.ɵɵproperty("matBadge", ctx_r4.badgeOpacity);
123
- i0.ɵɵadvance(3);
124
- i0.ɵɵproperty("min", 0)("max", 100)("matTooltip", i0.ɵɵpipeBind1(18, 30, "igo.geo.layer.opacity"));
125
- i0.ɵɵadvance(3);
126
- i0.ɵɵproperty("value", ctx_r4.opacity);
127
- i0.ɵɵadvance(2);
128
- i0.ɵɵproperty("ngIf", ctx_r4.activeLayerExtentIsValid(ctx_r4.activeLayer));
129
- i0.ɵɵadvance(1);
130
- i0.ɵɵproperty("ngTemplateOutlet", ctx_r4.templateLayerToolbar)("ngTemplateOutletContext", i0.ɵɵpureFunction1(32, _c1, ctx_r4.activeLayer));
131
- } }
132
- function LayerListComponent_igo_panel_9_mat_slider_25_Template(rf, ctx) { if (rf & 1) {
133
- const _r36 = i0.ɵɵgetCurrentView();
134
- i0.ɵɵelementStart(0, "mat-slider", 42);
135
- i0.ɵɵlistener("ngModelChange", function LayerListComponent_igo_panel_9_mat_slider_25_Template_mat_slider_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r35 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r35.checkOpacity = $event); })("click", function LayerListComponent_igo_panel_9_mat_slider_25_Template_mat_slider_click_0_listener($event) { return $event.stopPropagation(); });
136
- i0.ɵɵpipe(1, "translate");
137
- i0.ɵɵelement(2, "input", 43);
138
- i0.ɵɵelementEnd();
139
- } if (rf & 2) {
140
- const ctx_r33 = i0.ɵɵnextContext(2);
141
- i0.ɵɵproperty("min", 0)("max", 100)("ngModel", ctx_r33.checkOpacity)("matTooltip", i0.ɵɵpipeBind1(1, 4, "igo.geo.layer.opacity"));
142
- } }
143
- function LayerListComponent_igo_panel_9_button_26_Template(rf, ctx) { if (rf & 1) {
144
- const _r39 = i0.ɵɵgetCurrentView();
145
- i0.ɵɵelementStart(0, "button", 30);
146
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_9_button_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r39); const ctx_r38 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r38.zoomLayersExtents(ctx_r38.layersChecked)); });
147
- i0.ɵɵpipe(1, "translate");
148
- i0.ɵɵelement(2, "mat-icon", 44);
149
- i0.ɵɵelementEnd();
150
- } if (rf & 2) {
151
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 1, "igo.geo.layer.zoomLayers"));
152
- } }
153
- function LayerListComponent_igo_panel_9_Template(rf, ctx) { if (rf & 1) {
154
- const _r41 = i0.ɵɵgetCurrentView();
155
- i0.ɵɵelementStart(0, "igo-panel", 11);
156
- i0.ɵɵpipe(1, "translate");
157
- i0.ɵɵelementStart(2, "div", 32)(3, "button", 33);
158
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_9_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r41); const ctx_r40 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r40.removeLayers(ctx_r40.layersChecked)); });
159
- i0.ɵɵpipe(4, "translate");
160
- i0.ɵɵpipe(5, "translate");
161
- i0.ɵɵelement(6, "mat-icon", 34);
162
- i0.ɵɵelementEnd();
163
- i0.ɵɵelementStart(7, "button", 35);
164
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_9_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r41); const ctx_r42 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r42.toggleVisibility(ctx_r42.layersChecked)); });
165
- i0.ɵɵpipe(8, "translate");
166
- i0.ɵɵpipe(9, "translate");
167
- i0.ɵɵelement(10, "mat-icon", 36);
168
- i0.ɵɵelementEnd();
169
- i0.ɵɵelementStart(11, "button", 14);
170
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_9_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r41); const ctx_r43 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r43.lowerLayers(ctx_r43.layersChecked)); });
171
- i0.ɵɵpipe(12, "translate");
172
- i0.ɵɵpipe(13, "translate");
173
- i0.ɵɵelement(14, "mat-icon", 15);
174
- i0.ɵɵelementEnd();
175
- i0.ɵɵelementStart(15, "button", 16);
176
- i0.ɵɵlistener("click", function LayerListComponent_igo_panel_9_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r41); const ctx_r44 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r44.raiseLayers(ctx_r44.layersChecked)); });
177
- i0.ɵɵpipe(16, "translate");
178
- i0.ɵɵpipe(17, "translate");
179
- i0.ɵɵelement(18, "mat-icon", 17);
180
- i0.ɵɵelementEnd();
181
- i0.ɵɵelementStart(19, "button", 37);
182
- i0.ɵɵpipe(20, "translate");
183
- i0.ɵɵelement(21, "mat-icon", 38);
184
- i0.ɵɵelementEnd();
185
- i0.ɵɵelementStart(22, "mat-menu", 39, 21)(24, "div", 40);
186
- i0.ɵɵtemplate(25, LayerListComponent_igo_panel_9_mat_slider_25_Template, 3, 6, "mat-slider", 41);
187
- i0.ɵɵelementEnd()();
188
- i0.ɵɵtemplate(26, LayerListComponent_igo_panel_9_button_26_Template, 3, 3, "button", 26);
189
- i0.ɵɵelementEnd()();
190
- } if (rf & 2) {
191
- const _r32 = i0.ɵɵreference(23);
192
- const ctx_r5 = i0.ɵɵnextContext();
193
- i0.ɵɵproperty("title", i0.ɵɵpipeBind1(1, 21, "igo.geo.layer.tools"));
194
- i0.ɵɵadvance(3);
195
- i0.ɵɵproperty("disabled", ctx_r5.layersChecked.length === 0)("matTooltip", ctx_r5.isAllLayersRemovable(ctx_r5.layersChecked) ? i0.ɵɵpipeBind1(4, 23, "igo.geo.layer.removeSelectedLayers") : i0.ɵɵpipeBind1(5, 25, "igo.geo.layer.removeSelectedLayersRestriction"));
196
- i0.ɵɵadvance(3);
197
- i0.ɵɵproperty("matBadge", "!")("matBadgeHidden", ctx_r5.isAllLayersRemovable(ctx_r5.layersChecked));
198
- i0.ɵɵadvance(1);
199
- i0.ɵɵproperty("disabled", ctx_r5.layersChecked.length === 0)("matTooltip", ctx_r5.statusSelectedLayersCheck === "ALL_HIDDEN" ? i0.ɵɵpipeBind1(8, 27, "igo.geo.layer.showSelectedLayers") : i0.ɵɵpipeBind1(9, 29, "igo.geo.layer.hideSelectedLayers"));
200
- i0.ɵɵadvance(3);
201
- i0.ɵɵproperty("svgIcon", ctx_r5.statusSelectedLayersCheck === "ALL_HIDDEN" ? "eye-off" : "eye");
202
- i0.ɵɵadvance(1);
203
- i0.ɵɵproperty("matTooltip", ctx_r5.sortAlpha || ctx_r5.onlyVisible || ctx_r5.keyword ? i0.ɵɵpipeBind1(12, 31, "igo.geo.layer.filterLowerLayer") : i0.ɵɵpipeBind1(13, 33, "igo.geo.layer.lowerLayer"))("disabled", ctx_r5.lowerDisabledSelection);
204
- i0.ɵɵadvance(3);
205
- i0.ɵɵproperty("matBadge", ctx_r5.sortAlpha || ctx_r5.onlyVisible || ctx_r5.keyword ? "!" : "")("matBadgeHidden", ctx_r5.lowerDisabledSelection);
206
- i0.ɵɵadvance(1);
207
- i0.ɵɵproperty("matTooltip", ctx_r5.sortAlpha || ctx_r5.onlyVisible || ctx_r5.keyword ? i0.ɵɵpipeBind1(16, 35, "igo.geo.layer.filterRaiseLayer") : i0.ɵɵpipeBind1(17, 37, "igo.geo.layer.raiseLayer"))("disabled", ctx_r5.raiseDisabledSelection);
208
- i0.ɵɵadvance(3);
209
- i0.ɵɵproperty("matBadge", ctx_r5.sortAlpha || ctx_r5.onlyVisible || ctx_r5.keyword ? "!" : "")("matBadgeHidden", ctx_r5.raiseDisabledSelection);
210
- i0.ɵɵadvance(1);
211
- i0.ɵɵproperty("disabled", ctx_r5.layersChecked.length === 0)("matMenuTriggerFor", _r32)("matTooltip", i0.ɵɵpipeBind1(20, 39, "igo.geo.layer.opacity"));
212
- i0.ɵɵadvance(6);
213
- i0.ɵɵproperty("ngIf", ctx_r5.layersChecked.length);
214
- i0.ɵɵadvance(1);
215
- i0.ɵɵproperty("ngIf", ctx_r5.layersChecked.length !== 0 && ctx_r5.activeLayersExtentAreValid(ctx_r5.layersChecked));
216
- } }
217
- const _c2 = [[["", "igoLayerItemToolbar", ""]]];
218
- const _c3 = ["[igoLayerItemToolbar]"];
12
+ import * as i1 from "@angular/forms";
13
+ import * as i2 from "@angular/common";
14
+ import * as i3 from "@angular/material/divider";
15
+ import * as i4 from "@angular/material/menu";
16
+ import * as i5 from "@angular/material/icon";
17
+ import * as i6 from "@angular/material/button";
18
+ import * as i7 from "@angular/material/tooltip";
19
+ import * as i8 from "@angular/material/slider";
20
+ import * as i9 from "@angular/material/badge";
21
+ import * as i10 from "@angular/material/checkbox";
22
+ import * as i11 from "@igo2/common";
23
+ import * as i12 from "../layer-item/layer-item.component";
24
+ import * as i13 from "../layer-list-tool/layer-list-tool.component";
25
+ import * as i14 from "@ngx-translate/core";
219
26
  // TODO: This class could use a clean up. Also, some methods could be moved ealsewhere
220
27
  export class LayerListComponent {
221
28
  elRef;
@@ -954,69 +761,40 @@ export class LayerListComponent {
954
761
  }
955
762
  return layersList;
956
763
  }
957
- static ɵfac = function LayerListComponent_Factory(t) { return new (t || LayerListComponent)(i0.ɵɵdirectiveInject(i0.ElementRef)); };
958
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: LayerListComponent, selectors: [["igo-layer-list"]], contentQueries: function LayerListComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
959
- i0.ɵɵcontentQuery(dirIndex, _c0, 5);
960
- } if (rf & 2) {
961
- let _t;
962
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateLayerToolbar = _t.first);
963
- } }, inputs: { layersAreAllVisible: "layersAreAllVisible", ogcButton: "ogcButton", timeButton: "timeButton", map: "map", layers: "layers", floatLabel: "floatLabel", layerFilterAndSortOptions: "layerFilterAndSortOptions", excludeBaseLayers: "excludeBaseLayers", toggleLegendOnVisibilityChange: "toggleLegendOnVisibilityChange", expandLegendOfVisibleLayers: "expandLegendOfVisibleLayers", updateLegendOnResolutionChange: "updateLegendOnResolutionChange", queryBadge: "queryBadge" }, outputs: { appliedFilterAndSort: "appliedFilterAndSort" }, ngContentSelectors: _c3, decls: 10, vars: 11, consts: [["floatLabel", "auto", 3, "layersAreAllVisible", "term", "onlyVisible", "sortAlpha", "appliedFilterAndSort", "selection", 4, "ngIf"], ["class", "select-all", 4, "ngIf"], [3, "navigation", "selection"], ["igoList", ""], ["ngFor", "", 3, "ngForOf"], ["class", "igo-layer-actions-container", 3, "title", 4, "ngIf"], ["floatLabel", "auto", 3, "layersAreAllVisible", "term", "onlyVisible", "sortAlpha", "appliedFilterAndSort", "selection"], [1, "select-all"], [1, "select-all-checkbox", 3, "color", "checked", "indeterminate", "change"], ["igoListItem", "", 3, "layer", "activeLayer", "orderable", "lowerDisabled", "raiseDisabled", "queryBadge", "expandLegendIfVisible", "updateLegendOnResolutionChange", "toggleLegendOnVisibilityChange", "selectionMode", "selectAll", "layerCheck", "changeDetection", "action", "checkbox", 4, "ngIf"], ["igoListItem", "", 3, "layer", "activeLayer", "orderable", "lowerDisabled", "raiseDisabled", "queryBadge", "expandLegendIfVisible", "updateLegendOnResolutionChange", "toggleLegendOnVisibilityChange", "selectionMode", "selectAll", "layerCheck", "changeDetection", "action", "checkbox"], [1, "igo-layer-actions-container", 3, "title"], [1, "igo-layer-button-group"], ["class", "delete-button", "mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "click", 4, "ngIf"], ["mat-icon-button", "", "color", "primary", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "down-button", 3, "matTooltip", "disabled", "click"], ["aria-hidden", "false", "matBadgeColor", "warn", "matBadgeSize", "medium", "svgIcon", "arrow-down", 3, "matBadge", "matBadgeHidden"], ["color", "primary", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "up-button", 3, "matTooltip", "disabled", "click"], ["aria-hidden", "false", "matBadgeColor", "warn", "matBadgeSize", "medium", "svgIcon", "arrow-up", 3, "matBadge", "matBadgeHidden"], ["color", "primary", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "opacity-button", 3, "matMenuTriggerFor", "matTooltip"], ["aria-hidden", "false", "matBadgeColor", "primary", "matBadgeSize", "medium", "svgIcon", "opacity", 3, "matBadge"], [1, "panel-opacity-menu"], ["opacityMenu", "matMenu"], ["id", "opacity-slider", "color", "primary", "discrete", "", "step", "5", "matTooltipShowDelay", "500", "tooltip-position", "below", 3, "min", "max", "matTooltip", "click"], ["ngSlider", ""], ["matSliderThumb", "", 3, "value", "input"], ["ngSliderThumb", "matSliderThumb"], ["class", "zoomLayer-button", "color", "primary", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 3, "matTooltip", "click", 4, "ngIf"], ["igoLayerItemToolbar", "", 3, "ngTemplateOutlet", "ngTemplateOutletContext"], ["mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "delete-button", 3, "matTooltip", "click"], ["svgIcon", "delete"], ["color", "primary", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "zoomLayer-button", 3, "matTooltip", "click"], ["matBadgeColor", "primary", "matBadgeSize", "medium", "svgIcon", "magnify-scan"], [1, "actions-buttons-multi"], ["mat-icon-button", "", "color", "warn", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "delete-button", 3, "disabled", "matTooltip", "click"], ["aria-hidden", "false", "matBadgeColor", "warn", "matBadgeSize", "medium", "svgIcon", "delete", 3, "matBadge", "matBadgeHidden"], ["mat-icon-button", "", "color", "primary", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "eye-button", 3, "disabled", "matTooltip", "click"], [3, "svgIcon"], ["color", "primary", "mat-icon-button", "", "tooltip-position", "below", "matTooltipShowDelay", "500", 1, "opacity-button", 3, "disabled", "matMenuTriggerFor", "matTooltip"], ["svgIcon", "opacity"], [1, "mat-menu-opacity-slider"], ["id", "opacity-menu"], ["id", "opacity-slider", "color", "primary", "thumbLabel", "", "showTickMarks", "", "step", "5", "matTooltipShowDelay", "500", "tooltip-position", "below", 3, "min", "max", "ngModel", "matTooltip", "ngModelChange", "click", 4, "ngIf"], ["id", "opacity-slider", "color", "primary", "thumbLabel", "", "showTickMarks", "", "step", "5", "matTooltipShowDelay", "500", "tooltip-position", "below", 3, "min", "max", "ngModel", "matTooltip", "ngModelChange", "click"], ["matSliderThumb", ""], ["svgIcon", "magnify-scan"]], template: function LayerListComponent_Template(rf, ctx) { if (rf & 1) {
964
- i0.ɵɵprojectionDef(_c2);
965
- i0.ɵɵtemplate(0, LayerListComponent_igo_layer_list_tool_0_Template, 1, 4, "igo-layer-list-tool", 0);
966
- i0.ɵɵpipe(1, "async");
967
- i0.ɵɵtemplate(2, LayerListComponent_div_2_Template, 5, 8, "div", 1);
968
- i0.ɵɵelement(3, "mat-divider");
969
- i0.ɵɵelementStart(4, "igo-list", 2, 3);
970
- i0.ɵɵtemplate(6, LayerListComponent_ng_template_6_Template, 1, 1, "ng-template", 4);
971
- i0.ɵɵpipe(7, "async");
972
- i0.ɵɵelementEnd();
973
- i0.ɵɵtemplate(8, LayerListComponent_igo_panel_8_Template, 24, 34, "igo-panel", 5);
974
- i0.ɵɵtemplate(9, LayerListComponent_igo_panel_9_Template, 27, 41, "igo-panel", 5);
975
- } if (rf & 2) {
976
- i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(1, 7, ctx.showToolbar$));
977
- i0.ɵɵadvance(2);
978
- i0.ɵɵproperty("ngIf", ctx.selection);
979
- i0.ɵɵadvance(2);
980
- i0.ɵɵproperty("navigation", false)("selection", false);
981
- i0.ɵɵadvance(2);
982
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(7, 9, ctx.layers$));
983
- i0.ɵɵadvance(2);
984
- i0.ɵɵproperty("ngIf", !ctx.selection && ctx.layerTool && ctx.activeLayer);
985
- i0.ɵɵadvance(1);
986
- i0.ɵɵproperty("ngIf", ctx.selection && ctx.layers.length > 0);
987
- } }, styles: ["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%}[_nghost-%COMP%] igo-list[_ngcontent-%COMP%]{flex:1;padding-top:8px}[_nghost-%COMP%] mat-form-field.inputFilter[_ngcontent-%COMP%]{width:calc(100% - 100px);max-width:200px}[_nghost-%COMP%] .igo-layer-actions-container[_ngcontent-%COMP%]{padding:0 6px 0 4px}[_nghost-%COMP%] .igo-layer-actions-container[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{text-align:center}[_nghost-%COMP%] mat-list-item[_ngcontent-%COMP%] .mdc-list-item__content{margin-bottom:10px}[_nghost-%COMP%] .igo-layer-button-group[_ngcontent-%COMP%], [_nghost-%COMP%] .actions-buttons-multi[_ngcontent-%COMP%]{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}[_nghost-%COMP%] .igo-layer-button-group[_ngcontent-%COMP%]::-webkit-scrollbar, [_nghost-%COMP%] .actions-buttons-multi[_ngcontent-%COMP%]::-webkit-scrollbar{height:4px}[_nghost-%COMP%] .igo-layer-button-group[_ngcontent-%COMP%]::-webkit-scrollbar-track, [_nghost-%COMP%] .actions-buttons-multi[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:#f1f1f1}[_nghost-%COMP%] .igo-layer-button-group[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, [_nghost-%COMP%] .actions-buttons-multi[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#888}[_nghost-%COMP%] .igo-layer-button-group[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, [_nghost-%COMP%] .actions-buttons-multi[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:#555}[_nghost-%COMP%] .igo-layer-button-group[_ngcontent-%COMP%]{padding-top:5px}[_nghost-%COMP%] igo-panel[_ngcontent-%COMP%]{height:unset}[_nghost-%COMP%] .select-all[_ngcontent-%COMP%]{display:flex;align-items:center;height:48px;padding:0 16px} .panel-opacity-menu{overflow:visible!important} .panel-opacity-menu #opacity-slider{margin:0 16px}"], changeDetection: 0 });
764
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayerListComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
765
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LayerListComponent, selector: "igo-layer-list", inputs: { layersAreAllVisible: "layersAreAllVisible", ogcButton: "ogcButton", timeButton: "timeButton", map: "map", layers: "layers", floatLabel: "floatLabel", layerFilterAndSortOptions: "layerFilterAndSortOptions", excludeBaseLayers: "excludeBaseLayers", toggleLegendOnVisibilityChange: "toggleLegendOnVisibilityChange", expandLegendOfVisibleLayers: "expandLegendOfVisibleLayers", updateLegendOnResolutionChange: "updateLegendOnResolutionChange", queryBadge: "queryBadge" }, outputs: { appliedFilterAndSort: "appliedFilterAndSort" }, queries: [{ propertyName: "templateLayerToolbar", first: true, predicate: ["igoLayerItemToolbar"], descendants: true }], ngImport: i0, template: "<igo-layer-list-tool\r\n *ngIf=\"showToolbar$ | async\"\r\n floatLabel=\"auto\"\r\n [layersAreAllVisible]=\"layersAreAllVisible\"\r\n [term]=\"layerFilterAndSortOptions.keyword\"\r\n [onlyVisible]=\"layerFilterAndSortOptions.onlyVisible\"\r\n [sortAlpha]=\"layerFilterAndSortOptions.sortAlpha\"\r\n (appliedFilterAndSort)=\"onAppliedFilterAndSortChange($event)\"\r\n (selection)=\"toggleSelectionMode($event)\"\r\n>\r\n</igo-layer-list-tool>\r\n\r\n<div *ngIf=\"selection\" class=\"select-all\">\r\n <mat-checkbox\r\n class=\"select-all-checkbox\"\r\n [color]=\"!selectAllCheck && layersChecked.length > 0 ? 'accent' : 'primary'\"\r\n (change)=\"selectAll()\"\r\n [checked]=\"selectAllCheck\"\r\n [indeterminate]=\"!selectAllCheck && layersChecked.length > 0\"\r\n >\r\n {{\r\n selectAllCheck\r\n ? ('igo.geo.layer.deselectAll' | translate)\r\n : ('igo.geo.layer.selectAll' | translate)\r\n }}\r\n </mat-checkbox>\r\n</div>\r\n<mat-divider></mat-divider>\r\n\r\n<igo-list #igoList [navigation]=\"false\" [selection]=\"false\">\r\n <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\r\n <igo-layer-item\r\n *ngIf=\"!(excludeBaseLayers && layer.baseLayer)\"\r\n igoListItem\r\n [layer]=\"layer\"\r\n [activeLayer]=\"activeLayer\"\r\n [orderable]=\"orderable && !layer.baseLayer\"\r\n [lowerDisabled]=\"getLowerLayer().id === layer.id\"\r\n [raiseDisabled]=\"getUpperLayer().id === layer.id\"\r\n [queryBadge]=\"queryBadge\"\r\n [expandLegendIfVisible]=\"expandLegendOfVisibleLayers\"\r\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\r\n [toggleLegendOnVisibilityChange]=\"toggleLegendOnVisibilityChange\"\r\n [selectionMode]=\"selection\"\r\n [selectAll]=\"selectAllCheck\"\r\n [layerCheck]=\"layer.options.check\"\r\n [changeDetection]=\"layerItemChangeDetection$\"\r\n (action)=\"toggleLayerTool($event)\"\r\n (checkbox)=\"layersCheck($event)\"\r\n >\r\n </igo-layer-item>\r\n </ng-template>\r\n</igo-list>\r\n\r\n<igo-panel\r\n *ngIf=\"!selection && layerTool && activeLayer\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"activeLayer.title\"\r\n>\r\n <div class=\"igo-layer-button-group\">\r\n <button\r\n *ngIf=\"isLayerRemovable(activeLayer)\"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.removeLayer' | translate\"\r\n (click)=\"removeLayers()\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Lower, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabled\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Raise, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabled\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <!-- <label>{{ 'igo.geo.layer.opacity' | translate }} </label> -->\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"badgeOpacity\"\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"opacity\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\r\n <mat-slider\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n discrete\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n #ngSlider\r\n ><input\r\n matSliderThumb\r\n [value]=\"opacity\"\r\n (input)=\"\r\n changeOpacity({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n #ngSliderThumb=\"matSliderThumb\"\r\n />\r\n </mat-slider>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"activeLayerExtentIsValid(activeLayer)\"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayer' | translate\"\r\n (click)=\"zoomLayerExtents(activeLayer)\"\r\n >\r\n <mat-icon\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"magnify-scan\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <ng-container\r\n igoLayerItemToolbar\r\n [ngTemplateOutlet]=\"templateLayerToolbar\"\r\n [ngTemplateOutletContext]=\"{ layer: activeLayer }\"\r\n >\r\n </ng-container>\r\n\r\n <ng-content select=\"[igoLayerItemToolbar]\"></ng-content>\r\n </div>\r\n</igo-panel>\r\n\r\n<igo-panel\r\n *ngIf=\"selection && layers.length > 0\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"'igo.geo.layer.tools' | translate\"\r\n>\r\n <div class=\"actions-buttons-multi\">\r\n <button\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n isAllLayersRemovable(layersChecked)\r\n ? ('igo.geo.layer.removeSelectedLayers' | translate)\r\n : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\r\n \"\r\n (click)=\"removeLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"'!'\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"isAllLayersRemovable(layersChecked)\"\r\n svgIcon=\"delete\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"eye-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN'\r\n ? ('igo.geo.layer.showSelectedLayers' | translate)\r\n : ('igo.geo.layer.hideSelectedLayers' | translate)\r\n \"\r\n (click)=\"toggleVisibility(layersChecked)\"\r\n >\r\n <mat-icon\r\n [svgIcon]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN' ? 'eye-off' : 'eye'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabledSelection\"\r\n (click)=\"lowerLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabledSelection\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabledSelection\"\r\n (click)=\"raiseLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabledSelection\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon svgIcon=\"opacity\"></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"mat-menu-opacity-slider\">\r\n <div id=\"opacity-menu\">\r\n <!-- TODO: The 'tickInterval' property no longer exists -->\r\n <mat-slider\r\n *ngIf=\"layersChecked.length\"\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n thumbLabel\r\n showTickMarks\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [(ngModel)]=\"checkOpacity\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n (click)=\"$event.stopPropagation()\"\r\n ><input matSliderThumb />\r\n </mat-slider>\r\n </div>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"\r\n layersChecked.length !== 0 && activeLayersExtentAreValid(layersChecked)\r\n \"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayers' | translate\"\r\n (click)=\"zoomLayersExtents(layersChecked)\"\r\n >\r\n <mat-icon svgIcon=\"magnify-scan\"></mat-icon>\r\n </button>\r\n </div>\r\n</igo-panel>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host igo-list{flex:1;padding-top:8px}:host mat-form-field.inputFilter{width:calc(100% - 100px);max-width:200px}:host .igo-layer-actions-container{padding:0 6px 0 4px}:host .igo-layer-actions-container>div{text-align:center}:host mat-list-item ::ng-deep .mdc-list-item__content{margin-bottom:10px}:host .igo-layer-button-group,:host .actions-buttons-multi{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}:host .igo-layer-button-group::-webkit-scrollbar,:host .actions-buttons-multi::-webkit-scrollbar{height:4px}:host .igo-layer-button-group::-webkit-scrollbar-track,:host .actions-buttons-multi::-webkit-scrollbar-track{background:#f1f1f1}:host .igo-layer-button-group::-webkit-scrollbar-thumb,:host .actions-buttons-multi::-webkit-scrollbar-thumb{background:#888}:host .igo-layer-button-group::-webkit-scrollbar-thumb:hover,:host .actions-buttons-multi::-webkit-scrollbar-thumb:hover{background:#555}:host .igo-layer-button-group{padding-top:5px}:host igo-panel{height:unset}:host .select-all{display:flex;align-items:center;height:48px;padding:0 16px}::ng-deep .panel-opacity-menu{overflow:visible!important}::ng-deep .panel-opacity-menu #opacity-slider{margin:0 16px}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i8.MatSlider, selector: "mat-slider", inputs: ["color", "disableRipple", "disabled", "discrete", "showTickMarks", "min", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i8.MatSliderThumb, selector: "input[matSliderThumb]", inputs: ["value"], outputs: ["valueChange", "dragStart", "dragEnd"], exportAs: ["matSliderThumb"] }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i11.ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "component", type: i11.ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "component", type: i11.PanelComponent, selector: "igo-panel", inputs: ["title", "withHeader", "cursorPointer"] }, { kind: "component", type: i12.LayerItemComponent, selector: "igo-layer-item", inputs: ["activeLayer", "selectAll", "layerCheck", "layer", "toggleLegendOnVisibilityChange", "expandLegendIfVisible", "updateLegendOnResolutionChange", "orderable", "lowerDisabled", "raiseDisabled", "queryBadge", "selectionMode", "changeDetection"], outputs: ["action", "checkbox"] }, { kind: "component", type: i13.LayerListToolComponent, selector: "igo-layer-list-tool", inputs: ["layersAreAllVisible", "floatLabel", "onlyVisible", "sortAlpha", "term"], outputs: ["appliedFilterAndSort", "selection"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
988
766
  }
989
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LayerListComponent, [{
990
- type: Component,
991
- args: [{ selector: 'igo-layer-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-layer-list-tool\r\n *ngIf=\"showToolbar$ | async\"\r\n floatLabel=\"auto\"\r\n [layersAreAllVisible]=\"layersAreAllVisible\"\r\n [term]=\"layerFilterAndSortOptions.keyword\"\r\n [onlyVisible]=\"layerFilterAndSortOptions.onlyVisible\"\r\n [sortAlpha]=\"layerFilterAndSortOptions.sortAlpha\"\r\n (appliedFilterAndSort)=\"onAppliedFilterAndSortChange($event)\"\r\n (selection)=\"toggleSelectionMode($event)\"\r\n>\r\n</igo-layer-list-tool>\r\n\r\n<div *ngIf=\"selection\" class=\"select-all\">\r\n <mat-checkbox\r\n class=\"select-all-checkbox\"\r\n [color]=\"!selectAllCheck && layersChecked.length > 0 ? 'accent' : 'primary'\"\r\n (change)=\"selectAll()\"\r\n [checked]=\"selectAllCheck\"\r\n [indeterminate]=\"!selectAllCheck && layersChecked.length > 0\"\r\n >\r\n {{\r\n selectAllCheck\r\n ? ('igo.geo.layer.deselectAll' | translate)\r\n : ('igo.geo.layer.selectAll' | translate)\r\n }}\r\n </mat-checkbox>\r\n</div>\r\n<mat-divider></mat-divider>\r\n\r\n<igo-list #igoList [navigation]=\"false\" [selection]=\"false\">\r\n <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\r\n <igo-layer-item\r\n *ngIf=\"!(excludeBaseLayers && layer.baseLayer)\"\r\n igoListItem\r\n [layer]=\"layer\"\r\n [activeLayer]=\"activeLayer\"\r\n [orderable]=\"orderable && !layer.baseLayer\"\r\n [lowerDisabled]=\"getLowerLayer().id === layer.id\"\r\n [raiseDisabled]=\"getUpperLayer().id === layer.id\"\r\n [queryBadge]=\"queryBadge\"\r\n [expandLegendIfVisible]=\"expandLegendOfVisibleLayers\"\r\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\r\n [toggleLegendOnVisibilityChange]=\"toggleLegendOnVisibilityChange\"\r\n [selectionMode]=\"selection\"\r\n [selectAll]=\"selectAllCheck\"\r\n [layerCheck]=\"layer.options.check\"\r\n [changeDetection]=\"layerItemChangeDetection$\"\r\n (action)=\"toggleLayerTool($event)\"\r\n (checkbox)=\"layersCheck($event)\"\r\n >\r\n </igo-layer-item>\r\n </ng-template>\r\n</igo-list>\r\n\r\n<igo-panel\r\n *ngIf=\"!selection && layerTool && activeLayer\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"activeLayer.title\"\r\n>\r\n <div class=\"igo-layer-button-group\">\r\n <button\r\n *ngIf=\"isLayerRemovable(activeLayer)\"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.removeLayer' | translate\"\r\n (click)=\"removeLayers()\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Lower, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabled\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Raise, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabled\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <!-- <label>{{ 'igo.geo.layer.opacity' | translate }} </label> -->\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"badgeOpacity\"\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"opacity\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\r\n <mat-slider\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n discrete\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n #ngSlider\r\n ><input\r\n matSliderThumb\r\n [value]=\"opacity\"\r\n (input)=\"\r\n changeOpacity({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n #ngSliderThumb=\"matSliderThumb\"\r\n />\r\n </mat-slider>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"activeLayerExtentIsValid(activeLayer)\"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayer' | translate\"\r\n (click)=\"zoomLayerExtents(activeLayer)\"\r\n >\r\n <mat-icon\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"magnify-scan\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <ng-container\r\n igoLayerItemToolbar\r\n [ngTemplateOutlet]=\"templateLayerToolbar\"\r\n [ngTemplateOutletContext]=\"{ layer: activeLayer }\"\r\n >\r\n </ng-container>\r\n\r\n <ng-content select=\"[igoLayerItemToolbar]\"></ng-content>\r\n </div>\r\n</igo-panel>\r\n\r\n<igo-panel\r\n *ngIf=\"selection && layers.length > 0\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"'igo.geo.layer.tools' | translate\"\r\n>\r\n <div class=\"actions-buttons-multi\">\r\n <button\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n isAllLayersRemovable(layersChecked)\r\n ? ('igo.geo.layer.removeSelectedLayers' | translate)\r\n : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\r\n \"\r\n (click)=\"removeLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"'!'\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"isAllLayersRemovable(layersChecked)\"\r\n svgIcon=\"delete\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"eye-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN'\r\n ? ('igo.geo.layer.showSelectedLayers' | translate)\r\n : ('igo.geo.layer.hideSelectedLayers' | translate)\r\n \"\r\n (click)=\"toggleVisibility(layersChecked)\"\r\n >\r\n <mat-icon\r\n [svgIcon]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN' ? 'eye-off' : 'eye'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabledSelection\"\r\n (click)=\"lowerLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabledSelection\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabledSelection\"\r\n (click)=\"raiseLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabledSelection\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon svgIcon=\"opacity\"></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"mat-menu-opacity-slider\">\r\n <div id=\"opacity-menu\">\r\n <!-- TODO: The 'tickInterval' property no longer exists -->\r\n <mat-slider\r\n *ngIf=\"layersChecked.length\"\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n thumbLabel\r\n showTickMarks\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [(ngModel)]=\"checkOpacity\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n (click)=\"$event.stopPropagation()\"\r\n ><input matSliderThumb />\r\n </mat-slider>\r\n </div>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"\r\n layersChecked.length !== 0 && activeLayersExtentAreValid(layersChecked)\r\n \"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayers' | translate\"\r\n (click)=\"zoomLayersExtents(layersChecked)\"\r\n >\r\n <mat-icon svgIcon=\"magnify-scan\"></mat-icon>\r\n </button>\r\n </div>\r\n</igo-panel>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host igo-list{flex:1;padding-top:8px}:host mat-form-field.inputFilter{width:calc(100% - 100px);max-width:200px}:host .igo-layer-actions-container{padding:0 6px 0 4px}:host .igo-layer-actions-container>div{text-align:center}:host mat-list-item ::ng-deep .mdc-list-item__content{margin-bottom:10px}:host .igo-layer-button-group,:host .actions-buttons-multi{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}:host .igo-layer-button-group::-webkit-scrollbar,:host .actions-buttons-multi::-webkit-scrollbar{height:4px}:host .igo-layer-button-group::-webkit-scrollbar-track,:host .actions-buttons-multi::-webkit-scrollbar-track{background:#f1f1f1}:host .igo-layer-button-group::-webkit-scrollbar-thumb,:host .actions-buttons-multi::-webkit-scrollbar-thumb{background:#888}:host .igo-layer-button-group::-webkit-scrollbar-thumb:hover,:host .actions-buttons-multi::-webkit-scrollbar-thumb:hover{background:#555}:host .igo-layer-button-group{padding-top:5px}:host igo-panel{height:unset}:host .select-all{display:flex;align-items:center;height:48px;padding:0 16px}::ng-deep .panel-opacity-menu{overflow:visible!important}::ng-deep .panel-opacity-menu #opacity-slider{margin:0 16px}\n"] }]
992
- }], function () { return [{ type: i0.ElementRef }]; }, { templateLayerToolbar: [{
993
- type: ContentChild,
994
- args: ['igoLayerItemToolbar', /* TODO: add static flag */ {}]
995
- }], layersAreAllVisible: [{
996
- type: Input
997
- }], ogcButton: [{
998
- type: Input
999
- }], timeButton: [{
1000
- type: Input
1001
- }], map: [{
1002
- type: Input
1003
- }], layers: [{
1004
- type: Input
1005
- }], floatLabel: [{
1006
- type: Input
1007
- }], layerFilterAndSortOptions: [{
1008
- type: Input
1009
- }], excludeBaseLayers: [{
1010
- type: Input
1011
- }], toggleLegendOnVisibilityChange: [{
1012
- type: Input
1013
- }], expandLegendOfVisibleLayers: [{
1014
- type: Input
1015
- }], updateLegendOnResolutionChange: [{
1016
- type: Input
1017
- }], queryBadge: [{
1018
- type: Input
1019
- }], appliedFilterAndSort: [{
1020
- type: Output
1021
- }] }); })();
1022
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9sYXllci9sYXllci1saXN0L2xheWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvbGF5ZXItbGlzdC9sYXllci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUNMLGVBQWUsRUFDZixLQUFLLEVBQ0wsYUFBYSxFQUViLEtBQUssRUFDTixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLGNBQWMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN4QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU85QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUN0QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7OztJQzNDL0QsOENBU0M7SUFGQyxnT0FBd0IsZUFBQSwyQ0FBb0MsQ0FBQSxJQUFDLDZMQUNoRCxlQUFBLGtDQUEyQixDQUFBLElBRHFCO0lBRy9ELGlCQUFzQjs7O0lBUHBC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QUUzQixzQ0FBNEQ7WUFDMUQsbUZBcUJjOztZQUNoQixpQkFBVztZQUVYLGlGQTRJWTtZQUVaLGlGQXFKWTs7WUF4VlQsNkRBQTBCO1lBV3ZCLGVBQWU7WUFBZixvQ0FBZTtZQWlCRixlQUFvQjtZQUFwQixrQ0FBb0Isb0JBQUE7WUFDTSxlQUEyQjtZQUEzQiwyREFBMkI7WUF5QnJFLGVBQTRDO1lBQTVDLHlFQUE0QztZQThJNUMsZUFBb0M7WUFBcEMsNkRBQW9DOzs7dUZEakoxQixrQkFBa0I7Y0FOOUIsU0FBUzsyQkFDRSxnQkFBZ0IsbUJBR1QsdUJBQXVCLENBQUMsTUFBTTs2REF5Qi9DLG9CQUFvQjtrQkFEbkIsWUFBWTttQkFBQyxxQkFBcUIsRUFBRSwyQkFBMkIsQ0FBQyxFQUFFO1lBRzFELG1CQUFtQjtrQkFBM0IsS0FBSztZQUVHLFNBQVM7a0JBQWpCLEtBQUs7WUFFRyxVQUFVO2tCQUFsQixLQUFLO1lBR0YsR0FBRztrQkFETixLQUFLO1lBVUYsTUFBTTtrQkFEVCxLQUFLO1lBbUJHLFVBQVU7a0JBQWxCLEtBQUs7WUFFRyx5QkFBeUI7a0JBQWpDLEtBQUs7WUFFRyxpQkFBaUI7a0JBQXpCLEtBQUs7WUFFRyw4QkFBOEI7a0JBQXRDLEtBQUs7WUFFRywyQkFBMkI7a0JBQW5DLEtBQUs7WUFFRyw4QkFBOEI7a0JBQXRDLEtBQUs7WUFFRyxVQUFVO2tCQUFsQixLQUFLO1lBRUksb0JBQW9CO2tCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0U2xpZGVyQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcclxuXHJcbmltcG9ydCAqIGFzIG9sZXh0ZW50IGZyb20gJ29sL2V4dGVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCxcclxuICBFTVBUWSxcclxuICBSZXBsYXlTdWJqZWN0LFxyXG4gIFN1YnNjcmlwdGlvbixcclxuICB0aW1lclxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHNjcm9sbEludG9WaWV3IGZyb20gJ3Njcm9sbC1pbnRvLXZpZXctaWYtbmVlZGVkJztcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0QWxsQ2hpbGRMYXllcnNCeVByb3BlcnR5LFxyXG4gIGdldFJvb3RQYXJlbnRCeVByb3BlcnR5XHJcbn0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9saW5rZWRMYXllcnMudXRpbHMnO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XHJcbmltcG9ydCB7XHJcbiAgTWV0YWRhdGFMYXllck9wdGlvbnMsXHJcbiAgTWV0YWRhdGFPcHRpb25zXHJcbn0gZnJvbSAnLi4vLi4vbWV0YWRhdGEvc2hhcmVkL21ldGFkYXRhLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IExheWVyTGlzdENvbnRyb2xzT3B0aW9ucyB9IGZyb20gJy4uL2xheWVyLWxpc3QtdG9vbC9sYXllci1saXN0LXRvb2wuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi9zaGFyZWQvbGF5ZXJzL2xheWVyJztcclxuaW1wb3J0IHsgTGlua2VkUHJvcGVydGllcyB9IGZyb20gJy4uL3NoYXJlZC9sYXllcnMvbGF5ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBMYXllckxpc3RDb250cm9sc0VudW0sXHJcbiAgTGF5ZXJMaXN0RGlzcGxhY2VtZW50XHJcbn0gZnJvbSAnLi9sYXllci1saXN0LmVudW0nO1xyXG5pbXBvcnQgeyBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bSB9IGZyb20gJy4vbGF5ZXItbGlzdC5lbnVtJztcclxuXHJcbi8vIFRPRE86IFRoaXMgY2xhc3MgY291bGQgdXNlIGEgY2xlYW4gdXAuIEFsc28sIHNvbWUgbWV0aG9kcyBjb3VsZCBiZSBtb3ZlZCBlYWxzZXdoZXJlXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWxheWVyLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sYXllci1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sYXllci1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIExheWVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBvcmRlcmFibGUgPSB0cnVlO1xyXG4gIHRocmVzaG9sZFRvRmlsdGVyQW5kU29ydCA9IDU7XHJcblxyXG4gIGxheWVycyQ6IEJlaGF2aW9yU3ViamVjdDxMYXllcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG5cclxuICBjaGFuZ2UkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XHJcblxyXG4gIHNob3dUb29sYmFyJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIHB1YmxpYyBsYXllclRvb2w6IGJvb2xlYW47XHJcblxyXG4gIHB1YmxpYyBoaWRlU2VsZWN0ZWRMYXllcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGFjdGl2ZUxheWVyJDogQmVoYXZpb3JTdWJqZWN0PExheWVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuXHJcbiAgbGF5ZXJzQ2hlY2tlZDogTGF5ZXJbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3Rpb246IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGxheWVycyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHVibGljIGxheWVySXRlbUNoYW5nZURldGVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lnb0xheWVySXRlbVRvb2xiYXInLCAvKiBUT0RPOiBhZGQgc3RhdGljIGZsYWcgKi8ge30pXHJcbiAgdGVtcGxhdGVMYXllclRvb2xiYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBJbnB1dCgpIGxheWVyc0FyZUFsbFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBvZ2NCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSB0aW1lQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFwO1xyXG4gIH1cclxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbGF5ZXJzKHZhbHVlOiBMYXllcltdKSB7XHJcbiAgICB0aGlzLl9sYXllcnMgPSB0aGlzLnJlbW92ZVByb2JsZW1MYXllckluTGlzdCh2YWx1ZSk7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgZ2V0IGxheWVycygpOiBMYXllcltdIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXllcnM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xheWVyczogTGF5ZXJbXTtcclxuXHJcbiAgc2V0IGFjdGl2ZUxheWVyKHZhbHVlOiBMYXllcikge1xyXG4gICAgdGhpcy5fYWN0aXZlTGF5ZXIgPSB2YWx1ZTtcclxuICAgIHRoaXMuYWN0aXZlTGF5ZXIkLm5leHQodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgYWN0aXZlTGF5ZXIoKTogTGF5ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUxheWVyO1xyXG4gIH1cclxuICBwcml2YXRlIF9hY3RpdmVMYXllcjogTGF5ZXI7XHJcblxyXG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xyXG5cclxuICBASW5wdXQoKSBsYXllckZpbHRlckFuZFNvcnRPcHRpb25zOiBMYXllckxpc3RDb250cm9sc09wdGlvbnMgPSB7fTtcclxuXHJcbiAgQElucHV0KCkgZXhjbHVkZUJhc2VMYXllcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgdG9nZ2xlTGVnZW5kT25WaXNpYmlsaXR5Q2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGV4cGFuZExlZ2VuZE9mVmlzaWJsZUxheWVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSB1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcXVlcnlCYWRnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgYXBwbGllZEZpbHRlckFuZFNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPExheWVyTGlzdENvbnRyb2xzT3B0aW9ucz4oKTtcclxuXHJcbiAgZ2V0IGtleXdvcmQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9rZXl3b3JkO1xyXG4gIH1cclxuICBzZXQga2V5d29yZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9rZXl3b3JkID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfa2V5d29yZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgZ2V0IG9ubHlWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29ubHlWaXNpYmxlO1xyXG4gIH1cclxuICBzZXQgb25seVZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX29ubHlWaXNpYmxlID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb25seVZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgZ2V0IHNvcnRBbHBoYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0ZWRBbHBoYTtcclxuICB9XHJcbiAgc2V0IHNvcnRBbHBoYSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc29ydGVkQWxwaGEgPSB2YWx1ZTtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zb3J0ZWRBbHBoYSA9IGZhbHNlO1xyXG5cclxuICBnZXQgb3BhY2l0eSgpIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuYWN0aXZlTGF5ZXIkLmdldFZhbHVlKCkub3BhY2l0eSAqIDEwMCk7XHJcbiAgfVxyXG4gIHNldCBvcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xyXG4gICAgdGhpcy5hY3RpdmVMYXllciQuZ2V0VmFsdWUoKS5vcGFjaXR5ID0gb3BhY2l0eSAvIDEwMDtcclxuICB9XHJcblxyXG4gIGdldCBiYWRnZU9wYWNpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5vcGFjaXR5ID09PSAxMDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMub3BhY2l0eTtcclxuICB9XHJcblxyXG4gIGdldCByYWlzZURpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5vcmRlcmFibGUgfHxcclxuICAgICAgdGhpcy5hY3RpdmVMYXllci5iYXNlTGF5ZXIgfHxcclxuICAgICAgdGhpcy5nZXRVcHBlckxheWVyKCkuaWQgPT09IHRoaXMuYWN0aXZlTGF5ZXIuaWQgfHxcclxuICAgICAgdGhpcy5pc1VwcGVyQmFzZWxheWVyKHRoaXMuYWN0aXZlTGF5ZXIpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXQgbG93ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XHJcbiAgICAgIHRoaXMuYWN0aXZlTGF5ZXIuYmFzZUxheWVyIHx8XHJcbiAgICAgIHRoaXMuZ2V0TG93ZXJMYXllcigpLmlkID09PSB0aGlzLmFjdGl2ZUxheWVyLmlkIHx8XHJcbiAgICAgIHRoaXMuaXNMb3dlckJhc2VsYXllcih0aGlzLmFjdGl2ZUxheWVyKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJhaXNlRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDAgfHxcclxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XHJcbiAgICAgICF0aGlzLnJhaXNhYmxlTGF5ZXJzKHRoaXMubGF5ZXJzQ2hlY2tlZCkgfHxcclxuICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9PT0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvd2VyRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDAgfHxcclxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XHJcbiAgICAgICF0aGlzLmxvd2VyYWJsZUxheWVycyh0aGlzLmxheWVyc0NoZWNrZWQpIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPT09IHRydWVcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldCBjaGVja09wYWNpdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllcnNDaGVja2VkT3BhY2l0eSgpICogMTAwO1xyXG4gIH1cclxuICBzZXQgY2hlY2tPcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xyXG4gICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcclxuICAgICAgbGF5ZXIub3BhY2l0eSA9IG9wYWNpdHkgLyAxMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGF5ZXJMaXN0RGlzcGxhY2VtZW50KCk6IHR5cGVvZiBMYXllckxpc3REaXNwbGFjZW1lbnQge1xyXG4gICAgcmV0dXJuIExheWVyTGlzdERpc3BsYWNlbWVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVPcGFjaXR5ID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBbGxDaGVjazogYm9vbGVhbjtcclxuICBwdWJsaWMgc2VsZWN0QWxsQ2hlY2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih1bmRlZmluZWQpO1xyXG4gIHByaXZhdGUgc2VsZWN0QWxsQ2hlY2skJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIHNlYXJjaCB0ZXJtIHN0cmVhbSBhbmQgdHJpZ2dlciByZXNlYXJjaGVzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZSQkID0gdGhpcy5jaGFuZ2UkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlKCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmxheWVycy5sZW5ndGggPT09IDAgPyBFTVBUWSA6IHRpbWVyKDUwKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIkLm5leHQodGhpcy5jb21wdXRlU2hvd1Rvb2xiYXIoKSk7XHJcbiAgICAgICAgdGhpcy5sYXllcnMkLm5leHQodGhpcy5jb21wdXRlTGF5ZXJzKHRoaXMubGF5ZXJzLnNsaWNlKDApKSk7XHJcbiAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyQW5kU29ydC5lbWl0KHtcclxuICAgICAgICAgIGtleXdvcmQ6IHRoaXMua2V5d29yZCxcclxuICAgICAgICAgIHNvcnRBbHBoYTogdGhpcy5zb3J0QWxwaGEsXHJcbiAgICAgICAgICBvbmx5VmlzaWJsZTogdGhpcy5vbmx5VmlzaWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrJCQgPSB0aGlzLnNlbGVjdEFsbENoZWNrJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSB2YWx1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLmxheWVycyQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMubGF5ZXJzKSB7XHJcbiAgICAgICAgbGV0IGNoZWNrcyA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xyXG4gICAgICAgICAgbGF5ZXIuc3RhdHVzJC5zdWJzY3JpYmUoKHZhbFN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsU3RhdHVzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChsYXllci5vcHRpb25zLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUxheWVyID0gbGF5ZXI7XHJcbiAgICAgICAgICAgIHRoaXMubGF5ZXJUb29sID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChsYXllci5vcHRpb25zLmNoZWNrKSB7XHJcbiAgICAgICAgICAgIGNoZWNrcyArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5leGNsdWRlQmFzZUxheWVycykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9XHJcbiAgICAgICAgICAgIGNoZWNrcyA9PT1cclxuICAgICAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChsYXkpID0+IGxheS5iYXNlTGF5ZXIgIT09IHRydWUgJiYgbGF5LnNob3dJbkxheWVyTGlzdFxyXG4gICAgICAgICAgICApLmxlbmd0aFxyXG4gICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPVxyXG4gICAgICAgICAgICBjaGVja3MgPT09IHRoaXMubGF5ZXJzLmZpbHRlcigobGF5KSA9PiBsYXkuc2hvd0luTGF5ZXJMaXN0KS5sZW5ndGhcclxuICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY2hhbmdlJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2skJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5sYXllcnMkJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZlTGF5ZXJFeHRlbnRJc1ZhbGlkKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XHJcbiAgICBpZiAobGF5ZXIub3B0aW9ucy5zaG93QnV0dG9uWm9vbVRvRXh0ZW50ID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXllckV4dGVudCA9IGxheWVyLm9wdGlvbnMuZXh0ZW50O1xyXG4gICAgY29uc3QgbWF4TGF5ZXJab29tRXh0ZW50ID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIubWF4TGF5ZXJab29tRXh0ZW50O1xyXG5cclxuICAgIGlmIChsYXllckV4dGVudCkge1xyXG4gICAgICBpZiAobWF4TGF5ZXJab29tRXh0ZW50KSB7XHJcbiAgICAgICAgdmFsaWQgPSBvbGV4dGVudC5jb250YWluc0V4dGVudChtYXhMYXllclpvb21FeHRlbnQsIGxheWVyRXh0ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZDtcclxuICB9XHJcblxyXG4gIGFjdGl2ZUxheWVyc0V4dGVudEFyZVZhbGlkKGxheWVyczogTGF5ZXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XHJcbiAgICBjb25zdCBsYXllcnNFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpO1xyXG4gICAgY29uc3QgbWF4TGF5ZXJab29tRXh0ZW50ID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIubWF4TGF5ZXJab29tRXh0ZW50O1xyXG5cclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyRXh0ZW50ID0gbGF5ZXIub3B0aW9ucy5leHRlbnQ7XHJcblxyXG4gICAgICBpZiAobGF5ZXJFeHRlbnQgJiYgIWxheWVyRXh0ZW50LmluY2x1ZGVzKEluZmluaXR5KSkge1xyXG4gICAgICAgIG9sZXh0ZW50LmV4dGVuZChsYXllcnNFeHRlbnQsIGxheWVyRXh0ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghb2xleHRlbnQuaXNFbXB0eShsYXllcnNFeHRlbnQpKSB7XHJcbiAgICAgIGlmIChtYXhMYXllclpvb21FeHRlbnQpIHtcclxuICAgICAgICB2YWxpZCA9IG9sZXh0ZW50LmNvbnRhaW5zRXh0ZW50KG1heExheWVyWm9vbUV4dGVudCwgbGF5ZXJzRXh0ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZDtcclxuICB9XHJcblxyXG4gIHpvb21MYXllckV4dGVudHMobGF5ZXI6IExheWVyKSB7XHJcbiAgICB0aGlzLm1hcC52aWV3Q29udHJvbGxlci56b29tVG9FeHRlbnQobGF5ZXIub3B0aW9ucy5leHRlbnQpO1xyXG4gIH1cclxuXHJcbiAgem9vbUxheWVyc0V4dGVudHMobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICBjb25zdCBsYXllcnNFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpIGFzIFtcclxuICAgICAgbnVtYmVyLFxyXG4gICAgICBudW1iZXIsXHJcbiAgICAgIG51bWJlcixcclxuICAgICAgbnVtYmVyXHJcbiAgICBdO1xyXG5cclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyRXh0ZW50ID0gbGF5ZXIub3B0aW9ucy5leHRlbnQ7XHJcblxyXG4gICAgICBpZiAobGF5ZXJFeHRlbnQpIHtcclxuICAgICAgICBvbGV4dGVudC5leHRlbmQobGF5ZXJzRXh0ZW50LCBsYXllckV4dGVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLnpvb21Ub0V4dGVudChsYXllcnNFeHRlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlT3BhY2l0eShldmVudDogTWF0U2xpZGVyQ2hhbmdlKSB7XHJcbiAgICB0aGlzLm9wYWNpdHkgPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIGNsZWFyS2V5d29yZCgpIHtcclxuICAgIHRoaXMua2V5d29yZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldExvd2VyTGF5ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllcnNcclxuICAgICAgLmZpbHRlcigobCkgPT4gIWwuYmFzZUxheWVyKVxyXG4gICAgICAucmVkdWNlKFxyXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcHJldi56SW5kZXggPCBjdXJyZW50LnpJbmRleCA/IHByZXYgOiBjdXJyZW50O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyB6SW5kZXg6IHVuZGVmaW5lZCwgaWQ6IHVuZGVmaW5lZCB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBpc0xvd2VyQmFzZWxheWVyKGxheWVyKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sYXllcnMgJiZcclxuICAgICAgdGhpcy5sYXllcnNbaW5kZXggKyAxXSAmJlxyXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCArIDFdLmJhc2VMYXllciA9PT0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXBwZXJMYXllcigpIHtcclxuICAgIHJldHVybiB0aGlzLmxheWVyc1xyXG4gICAgICAuZmlsdGVyKChsKSA9PiAhbC5iYXNlTGF5ZXIpXHJcbiAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcclxuICAgICAgICAgIHJldHVybiBwcmV2LnpJbmRleCA+IGN1cnJlbnQuekluZGV4ID8gcHJldiA6IGN1cnJlbnQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IHpJbmRleDogdW5kZWZpbmVkLCBpZDogdW5kZWZpbmVkIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGlzVXBwZXJCYXNlbGF5ZXIobGF5ZXIpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxheWVycyAmJlxyXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCAtIDFdICYmXHJcbiAgICAgIHRoaXMubGF5ZXJzW2luZGV4IC0gMV0uYmFzZUxheWVyID09PSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3ZlQWN0aXZlTGF5ZXIoXHJcbiAgICBhY3RpdmVMYXllcjogTGF5ZXIsXHJcbiAgICBhY3Rpb250eXBlOiBMYXllckxpc3REaXNwbGFjZW1lbnQsXHJcbiAgICBmcm9tVWk6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgY29uc3Qgc29ydGVkTGF5ZXJzVG9Nb3ZlID0gW107XHJcbiAgICBnZXRSb290UGFyZW50QnlQcm9wZXJ0eSh0aGlzLm1hcCwgYWN0aXZlTGF5ZXIsIExpbmtlZFByb3BlcnRpZXMuWklOREVYKTtcclxuICAgIGxldCByb290UGFyZW50QnlQcm9wZXJ0eSA9IGdldFJvb3RQYXJlbnRCeVByb3BlcnR5KFxyXG4gICAgICB0aGlzLm1hcCxcclxuICAgICAgYWN0aXZlTGF5ZXIsXHJcbiAgICAgIExpbmtlZFByb3BlcnRpZXMuWklOREVYXHJcbiAgICApO1xyXG4gICAgaWYgKCFyb290UGFyZW50QnlQcm9wZXJ0eSkge1xyXG4gICAgICByb290UGFyZW50QnlQcm9wZXJ0eSA9IGFjdGl2ZUxheWVyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGF5ZXJzVG9Nb3ZlID0gW3Jvb3RQYXJlbnRCeVByb3BlcnR5XTtcclxuICAgIGdldEFsbENoaWxkTGF5ZXJzQnlQcm9wZXJ0eShcclxuICAgICAgdGhpcy5tYXAsXHJcbiAgICAgIHJvb3RQYXJlbnRCeVByb3BlcnR5LFxyXG4gICAgICBsYXllcnNUb01vdmUsXHJcbiAgICAgIExpbmtlZFByb3BlcnRpZXMuWklOREVYXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMubGF5ZXJzLm1hcCgobGF5ZXIpID0+IHtcclxuICAgICAgaWYgKGxheWVyc1RvTW92ZS5pbmRleE9mKGxheWVyKSAhPT0gLTEpIHtcclxuICAgICAgICBzb3J0ZWRMYXllcnNUb01vdmUucHVzaChsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChhY3Rpb250eXBlID09PSBMYXllckxpc3REaXNwbGFjZW1lbnQuUmFpc2UpIHtcclxuICAgICAgdGhpcy5yYWlzZUxheWVycyhzb3J0ZWRMYXllcnNUb01vdmUsIGZyb21VaSk7XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbnR5cGUgPT09IExheWVyTGlzdERpc3BsYWNlbWVudC5Mb3dlcikge1xyXG4gICAgICB0aGlzLmxvd2VyTGF5ZXJzKHNvcnRlZExheWVyc1RvTW92ZSwgZnJvbVVpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogRm9yIHNlbGVjdGlvbiBtb2RlIGRpc2FibGVkIGF0dHJpYnV0ZVxyXG4gICAqL1xyXG4gIHJhaXNhYmxlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xyXG4gICAgbGV0IHJlc3BvbnNlID0gZmFsc2U7XHJcbiAgICBsZXQgYmFzZSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xyXG4gICAgICBjb25zdCBtYXBJbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcclxuICAgICAgY29uc3QgY3VycmVudExheWVyID0gdGhpcy5sYXllcnNbbWFwSW5kZXhdO1xyXG4gICAgICBpZiAoY3VycmVudExheWVyLmJhc2VMYXllcikge1xyXG4gICAgICAgIGJhc2UgKz0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcHJldmlvdXNMYXllciA9IHRoaXMubGF5ZXJzW21hcEluZGV4IC0gMV07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmV2aW91c0xheWVyICYmXHJcbiAgICAgICAgcHJldmlvdXNMYXllci5iYXNlTGF5ZXIgIT09IHRydWUgJiZcclxuICAgICAgICAhbGF5ZXJzLmZpbmQoKGxheSkgPT4gcHJldmlvdXNMYXllci5pZCA9PT0gbGF5LmlkKSAmJlxyXG4gICAgICAgIGN1cnJlbnRMYXllci5iYXNlTGF5ZXIgIT09IHRydWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmVzcG9uc2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmxheWVyc0NoZWNrZWRbMF0uYmFzZUxheWVyKSB8fFxyXG4gICAgICBiYXNlID09PSB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2hlbiBtdWx0aXBsZSBsYXllcnMgaXMgc2VsZWN0ZWQgYnV0IHNvbWUgbWF5IGJlIGFsbG93IHRvIG1vdmVcclxuICAgKi9cclxuICByYWlzYWJsZUxheWVyKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChpbmRleCA8IDEpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmxheWVyc1tpbmRleCAtIDFdLm9wdGlvbnMuY2hlY2spIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmFpc2FibGVMYXllcihpbmRleCAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICByYWlzZUxheWVycyhsYXllcnM6IExheWVyW10sIGZyb21VaTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IGxheWVyc1RvUmFpc2UgPSBbXTtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheS5pZCA9PT0gbGF5ZXIuaWQpO1xyXG4gICAgICBpZiAodGhpcy5yYWlzYWJsZUxheWVyKGluZGV4KSkge1xyXG4gICAgICAgIGxheWVyc1RvUmFpc2UucHVzaChsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubWFwLnJhaXNlTGF5ZXJzKGxheWVyc1RvUmFpc2UpO1xyXG4gICAgaWYgKGZyb21VaSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja0l0ZW1zID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnbWF0LWNoZWNrYm94LWNoZWNrZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBpdGVtRm9jdXNlZCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgJ2lnby1sYXllci1pdGVtLWZvY3VzZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgdGFyZ2V0VG9TY3JvbGw7XHJcbiAgICAgICAgaWYgKGNoZWNrSXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0YXJnZXRUb1Njcm9sbCA9IGNoZWNrSXRlbXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtRm9jdXNlZC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRhcmdldFRvU2Nyb2xsID0gaXRlbUZvY3VzZWRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXRUb1Njcm9sbCkge1xyXG4gICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGFyZ2V0VG9TY3JvbGwsIHtcclxuICAgICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCcsXHJcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgICAgICAgYmxvY2s6ICdlbmQnLFxyXG4gICAgICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKlxyXG4gICAqIEZvciBzZWxlY3Rpb24gbW9kZSBkaXNhYmxlZCBhdHRyaWJ1dGVcclxuICAgKi9cclxuICBsb3dlcmFibGVMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICBsZXQgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIGxldCBiYXNlID0gMDtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IG1hcEluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpO1xyXG4gICAgICBjb25zdCBjdXJyZW50TGF5ZXIgPSB0aGlzLmxheWVyc1ttYXBJbmRleF07XHJcbiAgICAgIGlmIChjdXJyZW50TGF5ZXIuYmFzZUxheWVyKSB7XHJcbiAgICAgICAgYmFzZSArPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBuZXh0TGF5ZXIgPSB0aGlzLmxheWVyc1ttYXBJbmRleCArIDFdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbmV4dExheWVyICYmXHJcbiAgICAgICAgbmV4dExheWVyLmJhc2VMYXllciAhPT0gdHJ1ZSAmJlxyXG4gICAgICAgICFsYXllcnMuZmluZCgobGF5KSA9PiBuZXh0TGF5ZXIuaWQgPT09IGxheS5pZClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmVzcG9uc2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmxheWVyc0NoZWNrZWRbMF0uYmFzZUxheWVyKSB8fFxyXG4gICAgICBiYXNlID09PSB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2hlbiBtdWx0aXBsZSBsYXllcnMgaXMgc2VsZWN0ZWQgYnV0IHNvbWUgbWF5IGJlIGFsbG93IHRvIG1vdmVcclxuICAgKi9cclxuICBsb3dlcmFibGVMYXllcihpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGluZGV4ID5cclxuICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKChsYXkpID0+IGxheS5iYXNlTGF5ZXIgIT09IHRydWUpLmxlbmd0aCAtIDJcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubGF5ZXJzW2luZGV4ICsgMV0ub3B0aW9ucy5jaGVjaykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb3dlcmFibGVMYXllcihpbmRleCArIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBsb3dlckxheWVycyhsYXllcnM6IExheWVyW10sIGZyb21VaTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IGxheWVyc1RvTG93ZXIgPSBbXTtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheS5pZCA9PT0gbGF5ZXIuaWQpO1xyXG4gICAgICBpZiAodGhpcy5sb3dlcmFibGVMYXllcihpbmRleCkpIHtcclxuICAgICAgICBsYXllcnNUb0xvd2VyLnB1c2gobGF5ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm1hcC5sb3dlckxheWVycyhsYXllcnNUb0xvd2VyKTtcclxuICAgIGlmIChmcm9tVWkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tJdGVtcyA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgJ21hdC1jaGVja2JveC1jaGVja2VkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgaXRlbUZvY3VzZWQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICdpZ28tbGF5ZXItaXRlbS1mb2N1c2VkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHRhcmdldFRvU2Nyb2xsO1xyXG4gICAgICAgIGlmIChjaGVja0l0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGFyZ2V0VG9TY3JvbGwgPSBjaGVja0l0ZW1zW2NoZWNrSXRlbXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtRm9jdXNlZC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRhcmdldFRvU2Nyb2xsID0gaXRlbUZvY3VzZWRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXRUb1Njcm9sbCkge1xyXG4gICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGFyZ2V0VG9TY3JvbGwsIHtcclxuICAgICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCcsXHJcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgICAgICAgYmxvY2s6ICdlbmQnLFxyXG4gICAgICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIG5leHQoKSB7XHJcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSk6IExheWVyW10ge1xyXG4gICAgbGV0IGxheWVyc091dCA9IHRoaXMuZmlsdGVyTGF5ZXJzKGxheWVycyk7XHJcbiAgICBpZiAodGhpcy5zb3J0QWxwaGEpIHtcclxuICAgICAgbGF5ZXJzT3V0ID0gdGhpcy5zb3J0TGF5ZXJzQnlUaXRsZShsYXllcnNPdXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGF5ZXJzT3V0ID0gdGhpcy5zb3J0TGF5ZXJzQnlaaW5kZXgobGF5ZXJzT3V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsYXllcnNPdXQ7XHJcbiAgfVxyXG5cclxuICBvbktleXdvcmRDaGFuZ2UodGVybSkge1xyXG4gICAgdGhpcy5rZXl3b3JkID0gdGVybTtcclxuICB9XHJcblxyXG4gIG9uQXBwbGllZEZpbHRlckFuZFNvcnRDaGFuZ2UoYXBwbGllZEZpbHRlcjogTGF5ZXJMaXN0Q29udHJvbHNPcHRpb25zKSB7XHJcbiAgICB0aGlzLmtleXdvcmQgPSBhcHBsaWVkRmlsdGVyLmtleXdvcmQ7XHJcbiAgICB0aGlzLm9ubHlWaXNpYmxlID0gYXBwbGllZEZpbHRlci5vbmx5VmlzaWJsZTtcclxuICAgIHRoaXMuc29ydEFscGhhID0gYXBwbGllZEZpbHRlci5zb3J0QWxwaGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckxheWVycyhsYXllcnM6IExheWVyW10pOiBMYXllcltdIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sYXllckZpbHRlckFuZFNvcnRPcHRpb25zLnNob3dUb29sYmFyID09PSBMYXllckxpc3RDb250cm9sc0VudW0ubmV2ZXJcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gbGF5ZXJzO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmtleXdvcmQgJiYgIXRoaXMub25seVZpc2libGUpIHtcclxuICAgICAgcmV0dXJuIGxheWVycztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZWVwTGF5ZXJJZHMgPSBsYXllcnMubWFwKChsYXllcjogTGF5ZXIpID0+IGxheWVyLmlkKTtcclxuXHJcbiAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXI6IExheWVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxheWVyT3B0aW9ucyA9IChsYXllci5vcHRpb25zIGFzIE1ldGFkYXRhTGF5ZXJPcHRpb25zKSB8fCB7fTtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5kYXRhU291cmNlLm9wdGlvbnMgfHwge307XHJcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gbGF5ZXJPcHRpb25zLm1ldGFkYXRhIHx8ICh7fSBhcyBNZXRhZGF0YU9wdGlvbnMpO1xyXG4gICAgICBjb25zdCBrZXl3b3JkcyA9IG1ldGFkYXRhLmtleXdvcmRMaXN0IHx8IFtdO1xyXG4gICAgICBjb25zdCBsYXllcktleXdvcmRzID0ga2V5d29yZHMubWFwKChrdzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGt3Lm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmtleXdvcmQgJiYgbGF5ZXIudGl0bGUpIHtcclxuICAgICAgICBjb25zdCBsb2NhbEtleXdvcmQgPSB0aGlzLmtleXdvcmRcclxuICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgIGNvbnN0IGxheWVyVGl0bGUgPSBsYXllci50aXRsZVxyXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZVR5cGUgPSBkYXRhU291cmNlT3B0aW9ucy50eXBlIHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAobG9jYWxLZXl3b3JkLCAnZ2knKTtcclxuICAgICAgICBjb25zdCBrZXl3b3JkSW5MaXN0ID1cclxuICAgICAgICAgIGxheWVyS2V5d29yZHMuZmluZCgoa3c6IHN0cmluZykgPT4ga2V5d29yZFJlZ2V4LnRlc3Qoa3cpKSAhPT1cclxuICAgICAgICAgIHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAha2V5d29yZFJlZ2V4LnRlc3QobGF5ZXJUaXRsZSkgJiZcclxuICAgICAgICAgICEodGhpcy5rZXl3b3JkLnRvTG93ZXJDYXNlKCkgPT09IGRhdGFTb3VyY2VUeXBlLnRvTG93ZXJDYXNlKCkpICYmXHJcbiAgICAgICAgICAha2V5d29yZEluTGlzdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBrZWVwTGF5ZXJJZHMuaW5kZXhPZihsYXllci5pZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBrZWVwTGF5ZXJJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm9ubHlWaXNpYmxlICYmIGxheWVyLnZpc2libGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBrZWVwTGF5ZXJJZHMuaW5kZXhPZihsYXllci5pZCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIGtlZXBMYXllcklkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGxheWVycy5maWx0ZXIoXHJcbiAgICAgIChsYXllcjogTGF5ZXIpID0+IGtlZXBMYXllcklkcy5pbmRleE9mKGxheWVyLmlkKSAhPT0gLTFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNvcnRMYXllcnNCeVppbmRleChsYXllcnM6IExheWVyW10pIHtcclxuICAgIHJldHVybiBsYXllcnMuc29ydCgobGF5ZXIxLCBsYXllcjIpID0+IGxheWVyMi56SW5kZXggLSBsYXllcjEuekluZGV4KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc29ydExheWVyc0J5VGl0bGUobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICByZXR1cm4gbGF5ZXJzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpIDwgdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpID4gdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBub3JtYWxpemUoc3RyOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBzdHJcclxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxyXG4gICAgICAudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZVNob3dUb29sYmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoICh0aGlzLmxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnMuc2hvd1Rvb2xiYXIpIHtcclxuICAgICAgY2FzZSBMYXllckxpc3RDb250cm9sc0VudW0uYWx3YXlzOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBjYXNlIExheWVyTGlzdENvbnRyb2xzRW51bS5uZXZlcjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5sYXllcnMubGVuZ3RoID49IHRoaXMudGhyZXNob2xkVG9GaWx0ZXJBbmRTb3J0IHx8XHJcbiAgICAgICAgICB0aGlzLmtleXdvcmQgfHxcclxuICAgICAgICAgIHRoaXMub25seVZpc2libGVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVMYXllclRvb2wobGF5ZXIpIHtcclxuICAgIHRoaXMudG9nZ2xlT3BhY2l0eSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMubGF5ZXJUb29sICYmIGxheWVyID09PSB0aGlzLmFjdGl2ZUxheWVyKSB7XHJcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxheWVyVG9vbCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBsYXkgb2YgdGhpcy5sYXllcnMpIHtcclxuICAgICAgbGF5Lm9wdGlvbnMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsYXllci5vcHRpb25zLmFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmFjdGl2ZUxheWVyID0gbGF5ZXI7XHJcbiAgfVxyXG5cclxuICByZW1vdmVMYXllcnMobGF5ZXJzPzogTGF5ZXJbXSkge1xyXG4gICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5yZW1vdmFibGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBsYXllci5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQucHVzaChsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFsYXllcnMgJiYgdGhpcy5hY3RpdmVMYXllci5vcHRpb25zLnJlbW92YWJsZSAhPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5hY3RpdmVMYXllci5tYXAucmVtb3ZlTGF5ZXIodGhpcy5hY3RpdmVMYXllcik7XHJcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVWaXNpYmlsaXR5KGxheWVycz86IExheWVyW10pIHtcclxuICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgICBsYXllci52aXNpYmxlID0gdGhpcy5oaWRlU2VsZWN0ZWRMYXllcnM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubGF5ZXJJdGVtQ2hhbmdlRGV0ZWN0aW9uJC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgaXNMYXllclJlbW92YWJsZShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsYXllci5vcHRpb25zLnJlbW92YWJsZSAhPT0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0FsbExheWVyc1JlbW92YWJsZShsYXllcnM6IExheWVyW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsYXllcnMuZXZlcnkoKGwpID0+IHRoaXMuaXNMYXllclJlbW92YWJsZShsKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgc3RhdHVzU2VsZWN0ZWRMYXllcnNDaGVjaygpOiBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bSB7XHJcbiAgICBsZXQgc3RhdHVzU2VsZWN0ZWRMYXllcnM6IExheWVyTGlzdFNlbGVjdFZpc2libGVFbnVtID1cclxuICAgICAgTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTlVMTDtcclxuICAgIGxldCBmaW5kVHJ1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGZpbmRGYWxzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTlVMTDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTUlYRUQ7XHJcbiAgICAgIHRoaXMuaGlkZVNlbGVjdGVkTGF5ZXJzID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGxheWVyMiBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcclxuICAgICAgICBpZiAobGF5ZXIyLnZpc2libGUgPT09IHRydWUpIHtcclxuICAgICAgICAgIGZpbmRUcnVlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheWVyMi52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgZmluZEZhbHNlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmaW5kVHJ1ZSA9PT0gdHJ1ZSAmJiBmaW5kRmFsc2UgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnMgPSBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bS5BTExfVklTSUJMRTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmluZFRydWUgPT09IGZhbHNlICYmIGZpbmRGYWxzZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uQUxMX0hJRERFTjtcclxuICAgICAgICB0aGlzLmhpZGVTZWxlY3RlZExheWVycyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RhdHVzU2VsZWN0ZWRMYXllcnM7XHJcbiAgfVxyXG5cclxuICBsYXllcnNDaGVjayhldmVudDogeyBsYXllcjogTGF5ZXI7IGNoZWNrOiBib29sZWFuIH0pIHtcclxuICAgIGV2ZW50LmxheWVyLm9wdGlvbnMuY2hlY2sgPSBldmVudC5jaGVjaztcclxuICAgIGlmIChldmVudC5jaGVjayA9PT0gdHJ1ZSkge1xyXG4gICAgICBjb25zdCBldmVudE1hcEluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KFxyXG4gICAgICAgIChsYXllcikgPT4gZXZlbnQubGF5ZXIuaWQgPT09IGxheWVyLmlkXHJcbiAgICAgICk7XHJcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnNDaGVja2VkKSB7XHJcbiAgICAgICAgY29uc3QgbWFwSW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGxheSkgPT4gbGF5ZXIuaWQgPT09IGxheS5pZCk7XHJcbiAgICAgICAgaWYgKGV2ZW50TWFwSW5kZXggPCBtYXBJbmRleCkge1xyXG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnNwbGljZShcclxuICAgICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgZXZlbnQubGF5ZXJcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZUJhc2VMYXllcnMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XHJcbiAgICAgICAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGxheSkgPT4gbGF5LmJhc2VMYXllciAhPT0gdHJ1ZSAmJiBsYXkuc2hvd0luTGF5ZXJMaXN0XHJcbiAgICAgICAgICAgICAgKS5sZW5ndGhcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID09PVxyXG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzLmZpbHRlcigobGF5KSA9PiBsYXkuc2hvd0luTGF5ZXJMaXN0KS5sZW5ndGhcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGV2ZW50LmxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnNDaGVja2VkLmZpbmRJbmRleChcclxuICAgICAgICAobGF5ZXIpID0+IGV2ZW50LmxheWVyLmlkID09PSBsYXllci5pZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leGNsdWRlQmFzZUxheWVycykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT1cclxuICAgICAgICB0aGlzLmxheWVycy5maWx0ZXIoXHJcbiAgICAgICAgICAobGF5KSA9PiBsYXkuYmFzZUxheWVyICE9PSB0cnVlICYmIGxheS5zaG93SW5MYXllckxpc3RcclxuICAgICAgICApLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuZXhjbHVkZUJhc2VMYXllcnMpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XHJcbiAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKChsYXkpID0+IGxheS5zaG93SW5MYXllckxpc3QpLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlbGVjdGlvbk1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsdWU7XHJcbiAgICB0aGlzLmFjdGl2ZUxheWVyID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XHJcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMpIHtcclxuICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5jaGVjaykge1xyXG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnB1c2gobGF5ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGF5ZXJzQ2hlY2tlZE9wYWNpdHkoKTogYW55IHtcclxuICAgIGlmICh0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID4gMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcclxuICAgICAgICBvcGFjaXR5LnB1c2gobGF5ZXIub3BhY2l0eSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9wYWNpdHk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0QWxsQ2hlY2spIHtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZXhjbHVkZUJhc2VMYXllcnMgJiZcclxuICAgICAgICAgIGxheWVyLmJhc2VMYXllciAhPT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgbGF5ZXIuc2hvd0luTGF5ZXJMaXN0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsYXllci5vcHRpb25zLmNoZWNrID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGxheWVyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzICYmIGxheWVyLnNob3dJbkxheWVyTGlzdCkge1xyXG4gICAgICAgICAgbGF5ZXIub3B0aW9ucy5jaGVjayA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQucHVzaChsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2skLm5leHQodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XHJcbiAgICAgICAgbGF5ZXIub3B0aW9ucy5jaGVjayA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZCA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrJC5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzU2Nyb2xsZWRJbnRvVmlldyhlbGVtU291cmNlLCBlbGVtKSB7XHJcbiAgICBjb25zdCBkb2NWaWV3VG9wID0gZWxlbVNvdXJjZS5zY3JvbGxUb3A7XHJcbiAgICBjb25zdCBkb2NWaWV3Qm90dG9tID0gZG9jVmlld1RvcCArIGVsZW1Tb3VyY2UuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgIGNvbnN0IGVsZW1Ub3AgPSBlbGVtLm9mZnNldFRvcDtcclxuICAgIGNvbnN0IGVsZW1Cb3R0b20gPSBlbGVtVG9wICsgZWxlbS5jbGllbnRIZWlnaHQ7XHJcbiAgICByZXR1cm4gZWxlbUJvdHRvbSA8PSBkb2NWaWV3Qm90dG9tICYmIGVsZW1Ub3AgPj0gZG9jVmlld1RvcDtcclxuICB9XHJcblxyXG4gIHJlbW92ZVByb2JsZW1MYXllckluTGlzdChsYXllcnNMaXN0OiBMYXllcltdKTogTGF5ZXJbXSB7XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVyc0xpc3QpIHtcclxuICAgICAgaWYgKGxheWVyLm9sTG9hZGluZ1Byb2JsZW0gPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLm1hcC5yZW1vdmVMYXllcihsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsYXllcnNMaXN0O1xyXG4gIH1cclxufVxyXG4iLCI8aWdvLWxheWVyLWxpc3QtdG9vbFxyXG4gICpuZ0lmPVwic2hvd1Rvb2xiYXIkIHwgYXN5bmNcIlxyXG4gIGZsb2F0TGFiZWw9XCJhdXRvXCJcclxuICBbbGF5ZXJzQXJlQWxsVmlzaWJsZV09XCJsYXllcnNBcmVBbGxWaXNpYmxlXCJcclxuICBbdGVybV09XCJsYXllckZpbHRlckFuZFNvcnRPcHRpb25zLmtleXdvcmRcIlxyXG4gIFtvbmx5VmlzaWJsZV09XCJsYXllckZpbHRlckFuZFNvcnRPcHRpb25zLm9ubHlWaXNpYmxlXCJcclxuICBbc29ydEFscGhhXT1cImxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnMuc29ydEFscGhhXCJcclxuICAoYXBwbGllZEZpbHRlckFuZFNvcnQpPVwib25BcHBsaWVkRmlsdGVyQW5kU29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAoc2VsZWN0aW9uKT1cInRvZ2dsZVNlbGVjdGlvbk1vZGUoJGV2ZW50KVwiXHJcbj5cclxuPC9pZ28tbGF5ZXItbGlzdC10b29sPlxyXG5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGlvblwiIGNsYXNzPVwic2VsZWN0LWFsbFwiPlxyXG4gIDxtYXQtY2hlY2tib3hcclxuICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveFwiXHJcbiAgICBbY29sb3JdPVwiIXNlbGVjdEFsbENoZWNrICYmIGxheWVyc0NoZWNrZWQubGVuZ3RoID4gMCA/ICdhY2NlbnQnIDogJ3ByaW1hcnknXCJcclxuICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsKClcIlxyXG4gICAgW2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tcIlxyXG4gICAgW2luZGV0ZXJtaW5hdGVdPVwiIXNlbGVjdEFsbENoZWNrICYmIGxheWVyc0NoZWNrZWQubGVuZ3RoID4gMFwiXHJcbiAgPlxyXG4gICAge3tcclxuICAgICAgc2VsZWN0QWxsQ2hlY2tcclxuICAgICAgICA/ICgnaWdvLmdlby5sYXllci5kZXNlbGVjdEFsbCcgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIuc2VsZWN0QWxsJyB8IHRyYW5zbGF0ZSlcclxuICAgIH19XHJcbiAgPC9tYXQtY2hlY2tib3g+XHJcbjwvZGl2PlxyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbjxpZ28tbGlzdCAjaWdvTGlzdCBbbmF2aWdhdGlvbl09XCJmYWxzZVwiIFtzZWxlY3Rpb25dPVwiZmFsc2VcIj5cclxuICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWxheWVyIGxldC1pPVwiaW5kZXhcIiBbbmdGb3JPZl09XCJsYXllcnMkIHwgYXN5bmNcIj5cclxuICAgIDxpZ28tbGF5ZXItaXRlbVxyXG4gICAgICAqbmdJZj1cIiEoZXhjbHVkZUJhc2VMYXllcnMgJiYgbGF5ZXIuYmFzZUxheWVyKVwiXHJcbiAgICAgIGlnb0xpc3RJdGVtXHJcbiAgICAgIFtsYXllcl09XCJsYXllclwiXHJcbiAgICAgIFthY3RpdmVMYXllcl09XCJhY3RpdmVMYXllclwiXHJcbiAgICAgIFtvcmRlcmFibGVdPVwib3JkZXJhYmxlICYmICFsYXllci5iYXNlTGF5ZXJcIlxyXG4gICAgICBbbG93ZXJEaXNhYmxlZF09XCJnZXRMb3dlckxheWVyKCkuaWQgPT09IGxheWVyLmlkXCJcclxuICAgICAgW3JhaXNlRGlzYWJsZWRdPVwiZ2V0VXBwZXJMYXllcigpLmlkID09PSBsYXllci5pZFwiXHJcbiAgICAgIFtxdWVyeUJhZGdlXT1cInF1ZXJ5QmFkZ2VcIlxyXG4gICAgICBbZXhwYW5kTGVnZW5kSWZWaXNpYmxlXT1cImV4cGFuZExlZ2VuZE9mVmlzaWJsZUxheWVyc1wiXHJcbiAgICAgIFt1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2VdPVwidXBkYXRlTGVnZW5kT25SZXNvbHV0aW9uQ2hhbmdlXCJcclxuICAgICAgW3RvZ2dsZUxlZ2VuZE9uVmlzaWJpbGl0eUNoYW5nZV09XCJ0b2dnbGVMZWdlbmRPblZpc2liaWxpdHlDaGFuZ2VcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25cIlxyXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbENoZWNrXCJcclxuICAgICAgW2xheWVyQ2hlY2tdPVwibGF5ZXIub3B0aW9ucy5jaGVja1wiXHJcbiAgICAgIFtjaGFuZ2VEZXRlY3Rpb25dPVwibGF5ZXJJdGVtQ2hhbmdlRGV0ZWN0aW9uJFwiXHJcbiAgICAgIChhY3Rpb24pPVwidG9nZ2xlTGF5ZXJUb29sKCRldmVudClcIlxyXG4gICAgICAoY2hlY2tib3gpPVwibGF5ZXJzQ2hlY2soJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L2lnby1sYXllci1pdGVtPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvaWdvLWxpc3Q+XHJcblxyXG48aWdvLXBhbmVsXHJcbiAgKm5nSWY9XCIhc2VsZWN0aW9uICYmIGxheWVyVG9vbCAmJiBhY3RpdmVMYXllclwiXHJcbiAgY2xhc3M9XCJpZ28tbGF5ZXItYWN0aW9ucy1jb250YWluZXJcIlxyXG4gIFt0aXRsZV09XCJhY3RpdmVMYXllci50aXRsZVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWxheWVyLWJ1dHRvbi1ncm91cFwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImlzTGF5ZXJSZW1vdmFibGUoYWN0aXZlTGF5ZXIpXCJcclxuICAgICAgY2xhc3M9XCJkZWxldGUtYnV0dG9uXCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5yZW1vdmVMYXllcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlTGF5ZXJzKClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRlbGV0ZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZG93bi1idXR0b25cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJMb3dlckxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLmxvd2VyTGF5ZXInIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwibG93ZXJEaXNhYmxlZFwiXHJcbiAgICAgIChjbGljayk9XCJtb3ZlQWN0aXZlTGF5ZXIoYWN0aXZlTGF5ZXIsIGxheWVyTGlzdERpc3BsYWNlbWVudC5Mb3dlciwgdHJ1ZSlcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb25cclxuICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcclxuICAgICAgICBbbWF0QmFkZ2VdPVwic29ydEFscGhhIHx8IG9ubHlWaXNpYmxlIHx8IGtleXdvcmQgPyAnIScgOiAnJ1wiXHJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxyXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImxvd2VyRGlzYWJsZWRcIlxyXG4gICAgICAgIHN2Z0ljb249XCJhcnJvdy1kb3duXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwidXAtYnV0dG9uXCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCJcclxuICAgICAgICBzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZFxyXG4gICAgICAgICAgPyAoJ2lnby5nZW8ubGF5ZXIuZmlsdGVyUmFpc2VMYXllcicgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICA6ICgnaWdvLmdlby5sYXllci5yYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInJhaXNlRGlzYWJsZWRcIlxyXG4gICAgICAoY2xpY2spPVwibW92ZUFjdGl2ZUxheWVyKGFjdGl2ZUxheWVyLCBsYXllckxpc3REaXNwbGFjZW1lbnQuUmFpc2UsIHRydWUpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXHJcbiAgICAgICAgW21hdEJhZGdlXT1cInNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkID8gJyEnIDogJydcIlxyXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcclxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCJyYWlzZURpc2FibGVkXCJcclxuICAgICAgICBzdmdJY29uPVwiYXJyb3ctdXBcIlxyXG4gICAgICA+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gPGxhYmVsPnt7ICdpZ28uZ2VvLmxheWVyLm9wYWNpdHknIHwgdHJhbnNsYXRlIH19IDwvbGFiZWw+IC0tPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cIm9wYWNpdHktYnV0dG9uXCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwib3BhY2l0eU1lbnVcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxyXG4gICAgICAgIFttYXRCYWRnZV09XCJiYWRnZU9wYWNpdHlcIlxyXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgIHN2Z0ljb249XCJvcGFjaXR5XCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8bWF0LW1lbnUgI29wYWNpdHlNZW51PVwibWF0TWVudVwiIGNsYXNzPVwicGFuZWwtb3BhY2l0eS1tZW51XCI+XHJcbiAgICAgIDxtYXQtc2xpZGVyXHJcbiAgICAgICAgaWQ9XCJvcGFjaXR5LXNsaWRlclwiXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBkaXNjcmV0ZVxyXG4gICAgICAgIHN0ZXA9XCI1XCJcclxuICAgICAgICBbbWluXT1cIjBcIlxyXG4gICAgICAgIFttYXhdPVwiMTAwXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAjbmdTbGlkZXJcclxuICAgICAgICA+PGlucHV0XHJcbiAgICAgICAgICBtYXRTbGlkZXJUaHVtYlxyXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wYWNpdHlcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIlxyXG4gICAgICAgICAgICBjaGFuZ2VPcGFjaXR5KHtcclxuICAgICAgICAgICAgICBzb3VyY2U6IG5nU2xpZGVyVGh1bWIsXHJcbiAgICAgICAgICAgICAgcGFyZW50OiBuZ1NsaWRlcixcclxuICAgICAgICAgICAgICB2YWx1ZTogbmdTbGlkZXJUaHVtYi52YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgICNuZ1NsaWRlclRodW1iPVwibWF0U2xpZGVyVGh1bWJcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvbWF0LXNsaWRlcj5cclxuICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImFjdGl2ZUxheWVyRXh0ZW50SXNWYWxpZChhY3RpdmVMYXllcilcIlxyXG4gICAgICBjbGFzcz1cInpvb21MYXllci1idXR0b25cIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLnpvb21MYXllcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAoY2xpY2spPVwiem9vbUxheWVyRXh0ZW50cyhhY3RpdmVMYXllcilcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb25cclxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcclxuICAgICAgICBzdmdJY29uPVwibWFnbmlmeS1zY2FuXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgIGlnb0xheWVySXRlbVRvb2xiYXJcclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVMYXllclRvb2xiYXJcIlxyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBsYXllcjogYWN0aXZlTGF5ZXIgfVwiXHJcbiAgICA+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWdvTGF5ZXJJdGVtVG9vbGJhcl1cIj48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbjwvaWdvLXBhbmVsPlxyXG5cclxuPGlnby1wYW5lbFxyXG4gICpuZ0lmPVwic2VsZWN0aW9uICYmIGxheWVycy5sZW5ndGggPiAwXCJcclxuICBjbGFzcz1cImlnby1sYXllci1hY3Rpb25zLWNvbnRhaW5lclwiXHJcbiAgW3RpdGxlXT1cIidpZ28uZ2VvLmxheWVyLnRvb2xzJyB8IHRyYW5zbGF0ZVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1idXR0b25zLW11bHRpXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgaXNBbGxMYXllcnNSZW1vdmFibGUobGF5ZXJzQ2hlY2tlZClcclxuICAgICAgICAgID8gKCdpZ28uZ2VvLmxheWVyLnJlbW92ZVNlbGVjdGVkTGF5ZXJzJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnJlbW92ZVNlbGVjdGVkTGF5ZXJzUmVzdHJpY3Rpb24nIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlTGF5ZXJzKGxheWVyc0NoZWNrZWQpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXHJcbiAgICAgICAgW21hdEJhZGdlXT1cIichJ1wiXHJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxyXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImlzQWxsTGF5ZXJzUmVtb3ZhYmxlKGxheWVyc0NoZWNrZWQpXCJcclxuICAgICAgICBzdmdJY29uPVwiZGVsZXRlXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZXllLWJ1dHRvblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnNDaGVjayA9PT0gJ0FMTF9ISURERU4nXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5zaG93U2VsZWN0ZWRMYXllcnMnIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIuaGlkZVNlbGVjdGVkTGF5ZXJzJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgXCJcclxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVZpc2liaWxpdHkobGF5ZXJzQ2hlY2tlZClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb25cclxuICAgICAgICBbc3ZnSWNvbl09XCJcclxuICAgICAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzQ2hlY2sgPT09ICdBTExfSElEREVOJyA/ICdleWUtb2ZmJyA6ICdleWUnXHJcbiAgICAgICAgXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZG93bi1idXR0b25cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJMb3dlckxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLmxvd2VyTGF5ZXInIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwibG93ZXJEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgIChjbGljayk9XCJsb3dlckxheWVycyhsYXllcnNDaGVja2VkKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxyXG4gICAgICAgIFttYXRCYWRnZV09XCJzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZCA/ICchJyA6ICcnXCJcclxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcclxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwibG93ZXJEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgICAgc3ZnSWNvbj1cImFycm93LWRvd25cIlxyXG4gICAgICA+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJ1cC1idXR0b25cIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJSYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnJhaXNlTGF5ZXInIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwicmFpc2VEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgIChjbGljayk9XCJyYWlzZUxheWVycyhsYXllcnNDaGVja2VkKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxyXG4gICAgICAgIFttYXRCYWRnZV09XCJzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZCA/ICchJyA6ICcnXCJcclxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcclxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwicmFpc2VEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgICAgc3ZnSWNvbj1cImFycm93LXVwXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwib3BhY2l0eS1idXR0b25cIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJsYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcGFjaXR5TWVudVwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLm9wYWNpdHknIHwgdHJhbnNsYXRlXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvcGFjaXR5XCI+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxtYXQtbWVudSAjb3BhY2l0eU1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJtYXQtbWVudS1vcGFjaXR5LXNsaWRlclwiPlxyXG4gICAgICA8ZGl2IGlkPVwib3BhY2l0eS1tZW51XCI+XHJcbiAgICAgICAgPCEtLSBUT0RPOiBUaGUgJ3RpY2tJbnRlcnZhbCcgcHJvcGVydHkgbm8gbG9uZ2VyIGV4aXN0cyAtLT5cclxuICAgICAgICA8bWF0LXNsaWRlclxyXG4gICAgICAgICAgKm5nSWY9XCJsYXllcnNDaGVja2VkLmxlbmd0aFwiXHJcbiAgICAgICAgICBpZD1cIm9wYWNpdHktc2xpZGVyXCJcclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0aHVtYkxhYmVsXHJcbiAgICAgICAgICBzaG93VGlja01hcmtzXHJcbiAgICAgICAgICBzdGVwPVwiNVwiXHJcbiAgICAgICAgICBbbWluXT1cIjBcIlxyXG4gICAgICAgICAgW21heF09XCIxMDBcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGVja09wYWNpdHlcIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIub3BhY2l0eScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICA+PGlucHV0IG1hdFNsaWRlclRodW1iIC8+XHJcbiAgICAgICAgPC9tYXQtc2xpZGVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgIGxheWVyc0NoZWNrZWQubGVuZ3RoICE9PSAwICYmIGFjdGl2ZUxheWVyc0V4dGVudEFyZVZhbGlkKGxheWVyc0NoZWNrZWQpXHJcbiAgICAgIFwiXHJcbiAgICAgIGNsYXNzPVwiem9vbUxheWVyLWJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIuem9vbUxheWVycycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAoY2xpY2spPVwiem9vbUxheWVyc0V4dGVudHMobGF5ZXJzQ2hlY2tlZClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm1hZ25pZnktc2NhblwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9pZ28tcGFuZWw+XHJcbiJdfQ==
767
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayerListComponent, decorators: [{
768
+ type: Component,
769
+ args: [{ selector: 'igo-layer-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-layer-list-tool\r\n *ngIf=\"showToolbar$ | async\"\r\n floatLabel=\"auto\"\r\n [layersAreAllVisible]=\"layersAreAllVisible\"\r\n [term]=\"layerFilterAndSortOptions.keyword\"\r\n [onlyVisible]=\"layerFilterAndSortOptions.onlyVisible\"\r\n [sortAlpha]=\"layerFilterAndSortOptions.sortAlpha\"\r\n (appliedFilterAndSort)=\"onAppliedFilterAndSortChange($event)\"\r\n (selection)=\"toggleSelectionMode($event)\"\r\n>\r\n</igo-layer-list-tool>\r\n\r\n<div *ngIf=\"selection\" class=\"select-all\">\r\n <mat-checkbox\r\n class=\"select-all-checkbox\"\r\n [color]=\"!selectAllCheck && layersChecked.length > 0 ? 'accent' : 'primary'\"\r\n (change)=\"selectAll()\"\r\n [checked]=\"selectAllCheck\"\r\n [indeterminate]=\"!selectAllCheck && layersChecked.length > 0\"\r\n >\r\n {{\r\n selectAllCheck\r\n ? ('igo.geo.layer.deselectAll' | translate)\r\n : ('igo.geo.layer.selectAll' | translate)\r\n }}\r\n </mat-checkbox>\r\n</div>\r\n<mat-divider></mat-divider>\r\n\r\n<igo-list #igoList [navigation]=\"false\" [selection]=\"false\">\r\n <ng-template ngFor let-layer let-i=\"index\" [ngForOf]=\"layers$ | async\">\r\n <igo-layer-item\r\n *ngIf=\"!(excludeBaseLayers && layer.baseLayer)\"\r\n igoListItem\r\n [layer]=\"layer\"\r\n [activeLayer]=\"activeLayer\"\r\n [orderable]=\"orderable && !layer.baseLayer\"\r\n [lowerDisabled]=\"getLowerLayer().id === layer.id\"\r\n [raiseDisabled]=\"getUpperLayer().id === layer.id\"\r\n [queryBadge]=\"queryBadge\"\r\n [expandLegendIfVisible]=\"expandLegendOfVisibleLayers\"\r\n [updateLegendOnResolutionChange]=\"updateLegendOnResolutionChange\"\r\n [toggleLegendOnVisibilityChange]=\"toggleLegendOnVisibilityChange\"\r\n [selectionMode]=\"selection\"\r\n [selectAll]=\"selectAllCheck\"\r\n [layerCheck]=\"layer.options.check\"\r\n [changeDetection]=\"layerItemChangeDetection$\"\r\n (action)=\"toggleLayerTool($event)\"\r\n (checkbox)=\"layersCheck($event)\"\r\n >\r\n </igo-layer-item>\r\n </ng-template>\r\n</igo-list>\r\n\r\n<igo-panel\r\n *ngIf=\"!selection && layerTool && activeLayer\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"activeLayer.title\"\r\n>\r\n <div class=\"igo-layer-button-group\">\r\n <button\r\n *ngIf=\"isLayerRemovable(activeLayer)\"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.removeLayer' | translate\"\r\n (click)=\"removeLayers()\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Lower, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabled\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabled\"\r\n (click)=\"moveActiveLayer(activeLayer, layerListDisplacement.Raise, true)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabled\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <!-- <label>{{ 'igo.geo.layer.opacity' | translate }} </label> -->\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"badgeOpacity\"\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"opacity\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"panel-opacity-menu\">\r\n <mat-slider\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n discrete\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n (click)=\"$event.stopPropagation()\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n #ngSlider\r\n ><input\r\n matSliderThumb\r\n [value]=\"opacity\"\r\n (input)=\"\r\n changeOpacity({\r\n source: ngSliderThumb,\r\n parent: ngSlider,\r\n value: ngSliderThumb.value\r\n })\r\n \"\r\n #ngSliderThumb=\"matSliderThumb\"\r\n />\r\n </mat-slider>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"activeLayerExtentIsValid(activeLayer)\"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayer' | translate\"\r\n (click)=\"zoomLayerExtents(activeLayer)\"\r\n >\r\n <mat-icon\r\n matBadgeColor=\"primary\"\r\n matBadgeSize=\"medium\"\r\n svgIcon=\"magnify-scan\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <ng-container\r\n igoLayerItemToolbar\r\n [ngTemplateOutlet]=\"templateLayerToolbar\"\r\n [ngTemplateOutletContext]=\"{ layer: activeLayer }\"\r\n >\r\n </ng-container>\r\n\r\n <ng-content select=\"[igoLayerItemToolbar]\"></ng-content>\r\n </div>\r\n</igo-panel>\r\n\r\n<igo-panel\r\n *ngIf=\"selection && layers.length > 0\"\r\n class=\"igo-layer-actions-container\"\r\n [title]=\"'igo.geo.layer.tools' | translate\"\r\n>\r\n <div class=\"actions-buttons-multi\">\r\n <button\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n isAllLayersRemovable(layersChecked)\r\n ? ('igo.geo.layer.removeSelectedLayers' | translate)\r\n : ('igo.geo.layer.removeSelectedLayersRestriction' | translate)\r\n \"\r\n (click)=\"removeLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"'!'\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"isAllLayersRemovable(layersChecked)\"\r\n svgIcon=\"delete\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"eye-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matTooltip]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN'\r\n ? ('igo.geo.layer.showSelectedLayers' | translate)\r\n : ('igo.geo.layer.hideSelectedLayers' | translate)\r\n \"\r\n (click)=\"toggleVisibility(layersChecked)\"\r\n >\r\n <mat-icon\r\n [svgIcon]=\"\r\n statusSelectedLayersCheck === 'ALL_HIDDEN' ? 'eye-off' : 'eye'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"down-button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterLowerLayer' | translate)\r\n : ('igo.geo.layer.lowerLayer' | translate)\r\n \"\r\n [disabled]=\"lowerDisabledSelection\"\r\n (click)=\"lowerLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"lowerDisabledSelection\"\r\n svgIcon=\"arrow-down\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"up-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"\r\n sortAlpha || onlyVisible || keyword\r\n ? ('igo.geo.layer.filterRaiseLayer' | translate)\r\n : ('igo.geo.layer.raiseLayer' | translate)\r\n \"\r\n [disabled]=\"raiseDisabledSelection\"\r\n (click)=\"raiseLayers(layersChecked)\"\r\n >\r\n <mat-icon\r\n aria-hidden=\"false\"\r\n [matBadge]=\"sortAlpha || onlyVisible || keyword ? '!' : ''\"\r\n matBadgeColor=\"warn\"\r\n matBadgeSize=\"medium\"\r\n [matBadgeHidden]=\"raiseDisabledSelection\"\r\n svgIcon=\"arrow-up\"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n class=\"opacity-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [disabled]=\"layersChecked.length === 0\"\r\n [matMenuTriggerFor]=\"opacityMenu\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n >\r\n <mat-icon svgIcon=\"opacity\"></mat-icon>\r\n </button>\r\n\r\n <mat-menu #opacityMenu=\"matMenu\" class=\"mat-menu-opacity-slider\">\r\n <div id=\"opacity-menu\">\r\n <!-- TODO: The 'tickInterval' property no longer exists -->\r\n <mat-slider\r\n *ngIf=\"layersChecked.length\"\r\n id=\"opacity-slider\"\r\n color=\"primary\"\r\n thumbLabel\r\n showTickMarks\r\n step=\"5\"\r\n [min]=\"0\"\r\n [max]=\"100\"\r\n [(ngModel)]=\"checkOpacity\"\r\n [matTooltip]=\"'igo.geo.layer.opacity' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n tooltip-position=\"below\"\r\n (click)=\"$event.stopPropagation()\"\r\n ><input matSliderThumb />\r\n </mat-slider>\r\n </div>\r\n </mat-menu>\r\n\r\n <button\r\n *ngIf=\"\r\n layersChecked.length !== 0 && activeLayersExtentAreValid(layersChecked)\r\n \"\r\n class=\"zoomLayer-button\"\r\n color=\"primary\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.geo.layer.zoomLayers' | translate\"\r\n (click)=\"zoomLayersExtents(layersChecked)\"\r\n >\r\n <mat-icon svgIcon=\"magnify-scan\"></mat-icon>\r\n </button>\r\n </div>\r\n</igo-panel>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%}:host igo-list{flex:1;padding-top:8px}:host mat-form-field.inputFilter{width:calc(100% - 100px);max-width:200px}:host .igo-layer-actions-container{padding:0 6px 0 4px}:host .igo-layer-actions-container>div{text-align:center}:host mat-list-item ::ng-deep .mdc-list-item__content{margin-bottom:10px}:host .igo-layer-button-group,:host .actions-buttons-multi{display:flex;align-items:center;flex-direction:row-reverse;overflow-x:auto;overflow-y:hidden}:host .igo-layer-button-group::-webkit-scrollbar,:host .actions-buttons-multi::-webkit-scrollbar{height:4px}:host .igo-layer-button-group::-webkit-scrollbar-track,:host .actions-buttons-multi::-webkit-scrollbar-track{background:#f1f1f1}:host .igo-layer-button-group::-webkit-scrollbar-thumb,:host .actions-buttons-multi::-webkit-scrollbar-thumb{background:#888}:host .igo-layer-button-group::-webkit-scrollbar-thumb:hover,:host .actions-buttons-multi::-webkit-scrollbar-thumb:hover{background:#555}:host .igo-layer-button-group{padding-top:5px}:host igo-panel{height:unset}:host .select-all{display:flex;align-items:center;height:48px;padding:0 16px}::ng-deep .panel-opacity-menu{overflow:visible!important}::ng-deep .panel-opacity-menu #opacity-slider{margin:0 16px}\n"] }]
770
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { templateLayerToolbar: [{
771
+ type: ContentChild,
772
+ args: ['igoLayerItemToolbar', /* TODO: add static flag */ {}]
773
+ }], layersAreAllVisible: [{
774
+ type: Input
775
+ }], ogcButton: [{
776
+ type: Input
777
+ }], timeButton: [{
778
+ type: Input
779
+ }], map: [{
780
+ type: Input
781
+ }], layers: [{
782
+ type: Input
783
+ }], floatLabel: [{
784
+ type: Input
785
+ }], layerFilterAndSortOptions: [{
786
+ type: Input
787
+ }], excludeBaseLayers: [{
788
+ type: Input
789
+ }], toggleLegendOnVisibilityChange: [{
790
+ type: Input
791
+ }], expandLegendOfVisibleLayers: [{
792
+ type: Input
793
+ }], updateLegendOnResolutionChange: [{
794
+ type: Input
795
+ }], queryBadge: [{
796
+ type: Input
797
+ }], appliedFilterAndSort: [{
798
+ type: Output
799
+ }] } });
800
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9sYXllci9sYXllci1saXN0L2xheWVyLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbGF5ZXIvbGF5ZXItbGlzdC9sYXllci1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxLQUFLLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFFdEMsT0FBTyxFQUNMLGVBQWUsRUFDZixLQUFLLEVBQ0wsYUFBYSxFQUViLEtBQUssRUFDTixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLGNBQWMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN4QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU85QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUN0QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRS9ELHNGQUFzRjtBQU90RixNQUFNLE9BQU8sa0JBQWtCO0lBdUxUO0lBdExwQixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLHdCQUF3QixHQUFH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QU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0IsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDL0MsT0FBTyxVQUFVLElBQUksYUFBYSxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUM7SUFDOUQsQ0FBQztJQUVELHdCQUF3QixDQUFDLFVBQW1CO1FBQzFDLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVSxFQUFFO1lBQzlCLElBQUksS0FBSyxDQUFDLGdCQUFnQixLQUFLLElBQUksRUFBRTtnQkFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0I7U0FDRjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7d0dBOTRCVSxrQkFBa0I7NEZBQWxCLGtCQUFrQixzc0JDcEQvQixvMldBMFZBOzs0RkR0U2Esa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNO2lHQXlCL0Msb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLDJCQUEyQixDQUFDLEVBQUU7Z0JBRzFELG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0YsR0FBRztzQkFETixLQUFLO2dCQVVGLE1BQU07c0JBRFQsS0FBSztnQkFtQkcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFFRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBRUcsOEJBQThCO3NCQUF0QyxLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0U2xpZGVyQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2xpZGVyJztcclxuXHJcbmltcG9ydCAqIGFzIG9sZXh0ZW50IGZyb20gJ29sL2V4dGVudCc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCxcclxuICBFTVBUWSxcclxuICBSZXBsYXlTdWJqZWN0LFxyXG4gIFN1YnNjcmlwdGlvbixcclxuICB0aW1lclxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHNjcm9sbEludG9WaWV3IGZyb20gJ3Njcm9sbC1pbnRvLXZpZXctaWYtbmVlZGVkJztcclxuXHJcbmltcG9ydCB7XHJcbiAgZ2V0QWxsQ2hpbGRMYXllcnNCeVByb3BlcnR5LFxyXG4gIGdldFJvb3RQYXJlbnRCeVByb3BlcnR5XHJcbn0gZnJvbSAnLi4vLi4vbWFwL3NoYXJlZC9saW5rZWRMYXllcnMudXRpbHMnO1xyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XHJcbmltcG9ydCB7XHJcbiAgTWV0YWRhdGFMYXllck9wdGlvbnMsXHJcbiAgTWV0YWRhdGFPcHRpb25zXHJcbn0gZnJvbSAnLi4vLi4vbWV0YWRhdGEvc2hhcmVkL21ldGFkYXRhLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IExheWVyTGlzdENvbnRyb2xzT3B0aW9ucyB9IGZyb20gJy4uL2xheWVyLWxpc3QtdG9vbC9sYXllci1saXN0LXRvb2wuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi9zaGFyZWQvbGF5ZXJzL2xheWVyJztcclxuaW1wb3J0IHsgTGlua2VkUHJvcGVydGllcyB9IGZyb20gJy4uL3NoYXJlZC9sYXllcnMvbGF5ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBMYXllckxpc3RDb250cm9sc0VudW0sXHJcbiAgTGF5ZXJMaXN0RGlzcGxhY2VtZW50XHJcbn0gZnJvbSAnLi9sYXllci1saXN0LmVudW0nO1xyXG5pbXBvcnQgeyBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bSB9IGZyb20gJy4vbGF5ZXItbGlzdC5lbnVtJztcclxuXHJcbi8vIFRPRE86IFRoaXMgY2xhc3MgY291bGQgdXNlIGEgY2xlYW4gdXAuIEFsc28sIHNvbWUgbWV0aG9kcyBjb3VsZCBiZSBtb3ZlZCBlYWxzZXdoZXJlXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWxheWVyLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sYXllci1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9sYXllci1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIExheWVyTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBvcmRlcmFibGUgPSB0cnVlO1xyXG4gIHRocmVzaG9sZFRvRmlsdGVyQW5kU29ydCA9IDU7XHJcblxyXG4gIGxheWVycyQ6IEJlaGF2aW9yU3ViamVjdDxMYXllcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG5cclxuICBjaGFuZ2UkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XHJcblxyXG4gIHNob3dUb29sYmFyJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIHB1YmxpYyBsYXllclRvb2w6IGJvb2xlYW47XHJcblxyXG4gIHB1YmxpYyBoaWRlU2VsZWN0ZWRMYXllcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGFjdGl2ZUxheWVyJDogQmVoYXZpb3JTdWJqZWN0PExheWVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QodW5kZWZpbmVkKTtcclxuXHJcbiAgbGF5ZXJzQ2hlY2tlZDogTGF5ZXJbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3Rpb246IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGxheWVycyQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHVibGljIGxheWVySXRlbUNoYW5nZURldGVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoJ2lnb0xheWVySXRlbVRvb2xiYXInLCAvKiBUT0RPOiBhZGQgc3RhdGljIGZsYWcgKi8ge30pXHJcbiAgdGVtcGxhdGVMYXllclRvb2xiYXI6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBJbnB1dCgpIGxheWVyc0FyZUFsbFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBvZ2NCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSB0aW1lQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFwO1xyXG4gIH1cclxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgbGF5ZXJzKHZhbHVlOiBMYXllcltdKSB7XHJcbiAgICB0aGlzLl9sYXllcnMgPSB0aGlzLnJlbW92ZVByb2JsZW1MYXllckluTGlzdCh2YWx1ZSk7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgZ2V0IGxheWVycygpOiBMYXllcltdIHtcclxuICAgIHJldHVybiB0aGlzLl9sYXllcnM7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2xheWVyczogTGF5ZXJbXTtcclxuXHJcbiAgc2V0IGFjdGl2ZUxheWVyKHZhbHVlOiBMYXllcikge1xyXG4gICAgdGhpcy5fYWN0aXZlTGF5ZXIgPSB2YWx1ZTtcclxuICAgIHRoaXMuYWN0aXZlTGF5ZXIkLm5leHQodmFsdWUpO1xyXG4gIH1cclxuICBnZXQgYWN0aXZlTGF5ZXIoKTogTGF5ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZUxheWVyO1xyXG4gIH1cclxuICBwcml2YXRlIF9hY3RpdmVMYXllcjogTGF5ZXI7XHJcblxyXG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xyXG5cclxuICBASW5wdXQoKSBsYXllckZpbHRlckFuZFNvcnRPcHRpb25zOiBMYXllckxpc3RDb250cm9sc09wdGlvbnMgPSB7fTtcclxuXHJcbiAgQElucHV0KCkgZXhjbHVkZUJhc2VMYXllcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgdG9nZ2xlTGVnZW5kT25WaXNpYmlsaXR5Q2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGV4cGFuZExlZ2VuZE9mVmlzaWJsZUxheWVyczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSB1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcXVlcnlCYWRnZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgYXBwbGllZEZpbHRlckFuZFNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPExheWVyTGlzdENvbnRyb2xzT3B0aW9ucz4oKTtcclxuXHJcbiAgZ2V0IGtleXdvcmQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9rZXl3b3JkO1xyXG4gIH1cclxuICBzZXQga2V5d29yZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9rZXl3b3JkID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfa2V5d29yZCA9IHVuZGVmaW5lZDtcclxuXHJcbiAgZ2V0IG9ubHlWaXNpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX29ubHlWaXNpYmxlO1xyXG4gIH1cclxuICBzZXQgb25seVZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX29ubHlWaXNpYmxlID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb25seVZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgZ2V0IHNvcnRBbHBoYSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0ZWRBbHBoYTtcclxuICB9XHJcbiAgc2V0IHNvcnRBbHBoYSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc29ydGVkQWxwaGEgPSB2YWx1ZTtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zb3J0ZWRBbHBoYSA9IGZhbHNlO1xyXG5cclxuICBnZXQgb3BhY2l0eSgpIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuYWN0aXZlTGF5ZXIkLmdldFZhbHVlKCkub3BhY2l0eSAqIDEwMCk7XHJcbiAgfVxyXG4gIHNldCBvcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xyXG4gICAgdGhpcy5hY3RpdmVMYXllciQuZ2V0VmFsdWUoKS5vcGFjaXR5ID0gb3BhY2l0eSAvIDEwMDtcclxuICB9XHJcblxyXG4gIGdldCBiYWRnZU9wYWNpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5vcGFjaXR5ID09PSAxMDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMub3BhY2l0eTtcclxuICB9XHJcblxyXG4gIGdldCByYWlzZURpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5vcmRlcmFibGUgfHxcclxuICAgICAgdGhpcy5hY3RpdmVMYXllci5iYXNlTGF5ZXIgfHxcclxuICAgICAgdGhpcy5nZXRVcHBlckxheWVyKCkuaWQgPT09IHRoaXMuYWN0aXZlTGF5ZXIuaWQgfHxcclxuICAgICAgdGhpcy5pc1VwcGVyQmFzZWxheWVyKHRoaXMuYWN0aXZlTGF5ZXIpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXQgbG93ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XHJcbiAgICAgIHRoaXMuYWN0aXZlTGF5ZXIuYmFzZUxheWVyIHx8XHJcbiAgICAgIHRoaXMuZ2V0TG93ZXJMYXllcigpLmlkID09PSB0aGlzLmFjdGl2ZUxheWVyLmlkIHx8XHJcbiAgICAgIHRoaXMuaXNMb3dlckJhc2VsYXllcih0aGlzLmFjdGl2ZUxheWVyKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHJhaXNlRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDAgfHxcclxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XHJcbiAgICAgICF0aGlzLnJhaXNhYmxlTGF5ZXJzKHRoaXMubGF5ZXJzQ2hlY2tlZCkgfHxcclxuICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9PT0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxvd2VyRGlzYWJsZWRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09IDAgfHxcclxuICAgICAgIXRoaXMub3JkZXJhYmxlIHx8XHJcbiAgICAgICF0aGlzLmxvd2VyYWJsZUxheWVycyh0aGlzLmxheWVyc0NoZWNrZWQpIHx8XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPT09IHRydWVcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldCBjaGVja09wYWNpdHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllcnNDaGVja2VkT3BhY2l0eSgpICogMTAwO1xyXG4gIH1cclxuICBzZXQgY2hlY2tPcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xyXG4gICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcclxuICAgICAgbGF5ZXIub3BhY2l0eSA9IG9wYWNpdHkgLyAxMDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGF5ZXJMaXN0RGlzcGxhY2VtZW50KCk6IHR5cGVvZiBMYXllckxpc3REaXNwbGFjZW1lbnQge1xyXG4gICAgcmV0dXJuIExheWVyTGlzdERpc3BsYWNlbWVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGVPcGFjaXR5ID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBbGxDaGVjazogYm9vbGVhbjtcclxuICBwdWJsaWMgc2VsZWN0QWxsQ2hlY2skID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih1bmRlZmluZWQpO1xyXG4gIHByaXZhdGUgc2VsZWN0QWxsQ2hlY2skJDogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIHNlYXJjaCB0ZXJtIHN0cmVhbSBhbmQgdHJpZ2dlciByZXNlYXJjaGVzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZSQkID0gdGhpcy5jaGFuZ2UkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlKCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmxheWVycy5sZW5ndGggPT09IDAgPyBFTVBUWSA6IHRpbWVyKDUwKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd1Rvb2xiYXIkLm5leHQodGhpcy5jb21wdXRlU2hvd1Rvb2xiYXIoKSk7XHJcbiAgICAgICAgdGhpcy5sYXllcnMkLm5leHQodGhpcy5jb21wdXRlTGF5ZXJzKHRoaXMubGF5ZXJzLnNsaWNlKDApKSk7XHJcbiAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyQW5kU29ydC5lbWl0KHtcclxuICAgICAgICAgIGtleXdvcmQ6IHRoaXMua2V5d29yZCxcclxuICAgICAgICAgIHNvcnRBbHBoYTogdGhpcy5zb3J0QWxwaGEsXHJcbiAgICAgICAgICBvbmx5VmlzaWJsZTogdGhpcy5vbmx5VmlzaWJsZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdEFsbENoZWNrJCQgPSB0aGlzLnNlbGVjdEFsbENoZWNrJC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPSB2YWx1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLmxheWVycyQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMubGF5ZXJzKSB7XHJcbiAgICAgICAgbGV0IGNoZWNrcyA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xyXG4gICAgICAgICAgbGF5ZXIuc3RhdHVzJC5zdWJzY3JpYmUoKHZhbFN0YXR1cykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsU3RhdHVzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChsYXllci5vcHRpb25zLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUxheWVyID0gbGF5ZXI7XHJcbiAgICAgICAgICAgIHRoaXMubGF5ZXJUb29sID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChsYXllci5vcHRpb25zLmNoZWNrKSB7XHJcbiAgICAgICAgICAgIGNoZWNrcyArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5leGNsdWRlQmFzZUxheWVycykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9XHJcbiAgICAgICAgICAgIGNoZWNrcyA9PT1cclxuICAgICAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChsYXkpID0+IGxheS5iYXNlTGF5ZXIgIT09IHRydWUgJiYgbGF5LnNob3dJbkxheWVyTGlzdFxyXG4gICAgICAgICAgICApLmxlbmd0aFxyXG4gICAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2sgPVxyXG4gICAgICAgICAgICBjaGVja3MgPT09IHRoaXMubGF5ZXJzLmZpbHRlcigobGF5KSA9PiBsYXkuc2hvd0luTGF5ZXJMaXN0KS5sZW5ndGhcclxuICAgICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY2hhbmdlJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2skJC51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5sYXllcnMkJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZlTGF5ZXJFeHRlbnRJc1ZhbGlkKGxheWVyOiBMYXllcik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XHJcbiAgICBpZiAobGF5ZXIub3B0aW9ucy5zaG93QnV0dG9uWm9vbVRvRXh0ZW50ID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXllckV4dGVudCA9IGxheWVyLm9wdGlvbnMuZXh0ZW50O1xyXG4gICAgY29uc3QgbWF4TGF5ZXJab29tRXh0ZW50ID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIubWF4TGF5ZXJab29tRXh0ZW50O1xyXG5cclxuICAgIGlmIChsYXllckV4dGVudCkge1xyXG4gICAgICBpZiAobWF4TGF5ZXJab29tRXh0ZW50KSB7XHJcbiAgICAgICAgdmFsaWQgPSBvbGV4dGVudC5jb250YWluc0V4dGVudChtYXhMYXllclpvb21FeHRlbnQsIGxheWVyRXh0ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZDtcclxuICB9XHJcblxyXG4gIGFjdGl2ZUxheWVyc0V4dGVudEFyZVZhbGlkKGxheWVyczogTGF5ZXJbXSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbGlkID0gZmFsc2U7XHJcbiAgICBjb25zdCBsYXllcnNFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpO1xyXG4gICAgY29uc3QgbWF4TGF5ZXJab29tRXh0ZW50ID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIubWF4TGF5ZXJab29tRXh0ZW50O1xyXG5cclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyRXh0ZW50ID0gbGF5ZXIub3B0aW9ucy5leHRlbnQ7XHJcblxyXG4gICAgICBpZiAobGF5ZXJFeHRlbnQgJiYgIWxheWVyRXh0ZW50LmluY2x1ZGVzKEluZmluaXR5KSkge1xyXG4gICAgICAgIG9sZXh0ZW50LmV4dGVuZChsYXllcnNFeHRlbnQsIGxheWVyRXh0ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghb2xleHRlbnQuaXNFbXB0eShsYXllcnNFeHRlbnQpKSB7XHJcbiAgICAgIGlmIChtYXhMYXllclpvb21FeHRlbnQpIHtcclxuICAgICAgICB2YWxpZCA9IG9sZXh0ZW50LmNvbnRhaW5zRXh0ZW50KG1heExheWVyWm9vbUV4dGVudCwgbGF5ZXJzRXh0ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YWxpZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWxpZDtcclxuICB9XHJcblxyXG4gIHpvb21MYXllckV4dGVudHMobGF5ZXI6IExheWVyKSB7XHJcbiAgICB0aGlzLm1hcC52aWV3Q29udHJvbGxlci56b29tVG9FeHRlbnQobGF5ZXIub3B0aW9ucy5leHRlbnQpO1xyXG4gIH1cclxuXHJcbiAgem9vbUxheWVyc0V4dGVudHMobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICBjb25zdCBsYXllcnNFeHRlbnQgPSBvbGV4dGVudC5jcmVhdGVFbXB0eSgpIGFzIFtcclxuICAgICAgbnVtYmVyLFxyXG4gICAgICBudW1iZXIsXHJcbiAgICAgIG51bWJlcixcclxuICAgICAgbnVtYmVyXHJcbiAgICBdO1xyXG5cclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGxheWVyRXh0ZW50ID0gbGF5ZXIub3B0aW9ucy5leHRlbnQ7XHJcblxyXG4gICAgICBpZiAobGF5ZXJFeHRlbnQpIHtcclxuICAgICAgICBvbGV4dGVudC5leHRlbmQobGF5ZXJzRXh0ZW50LCBsYXllckV4dGVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubWFwLnZpZXdDb250cm9sbGVyLnpvb21Ub0V4dGVudChsYXllcnNFeHRlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlT3BhY2l0eShldmVudDogTWF0U2xpZGVyQ2hhbmdlKSB7XHJcbiAgICB0aGlzLm9wYWNpdHkgPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIGNsZWFyS2V5d29yZCgpIHtcclxuICAgIHRoaXMua2V5d29yZCA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldExvd2VyTGF5ZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllcnNcclxuICAgICAgLmZpbHRlcigobCkgPT4gIWwuYmFzZUxheWVyKVxyXG4gICAgICAucmVkdWNlKFxyXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcHJldi56SW5kZXggPCBjdXJyZW50LnpJbmRleCA/IHByZXYgOiBjdXJyZW50O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyB6SW5kZXg6IHVuZGVmaW5lZCwgaWQ6IHVuZGVmaW5lZCB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBpc0xvd2VyQmFzZWxheWVyKGxheWVyKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sYXllcnMgJiZcclxuICAgICAgdGhpcy5sYXllcnNbaW5kZXggKyAxXSAmJlxyXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCArIDFdLmJhc2VMYXllciA9PT0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXBwZXJMYXllcigpIHtcclxuICAgIHJldHVybiB0aGlzLmxheWVyc1xyXG4gICAgICAuZmlsdGVyKChsKSA9PiAhbC5iYXNlTGF5ZXIpXHJcbiAgICAgIC5yZWR1Y2UoXHJcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcclxuICAgICAgICAgIHJldHVybiBwcmV2LnpJbmRleCA+IGN1cnJlbnQuekluZGV4ID8gcHJldiA6IGN1cnJlbnQ7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IHpJbmRleDogdW5kZWZpbmVkLCBpZDogdW5kZWZpbmVkIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGlzVXBwZXJCYXNlbGF5ZXIobGF5ZXIpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmxheWVycyAmJlxyXG4gICAgICB0aGlzLmxheWVyc1tpbmRleCAtIDFdICYmXHJcbiAgICAgIHRoaXMubGF5ZXJzW2luZGV4IC0gMV0uYmFzZUxheWVyID09PSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBtb3ZlQWN0aXZlTGF5ZXIoXHJcbiAgICBhY3RpdmVMYXllcjogTGF5ZXIsXHJcbiAgICBhY3Rpb250eXBlOiBMYXllckxpc3REaXNwbGFjZW1lbnQsXHJcbiAgICBmcm9tVWk6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgY29uc3Qgc29ydGVkTGF5ZXJzVG9Nb3ZlID0gW107XHJcbiAgICBnZXRSb290UGFyZW50QnlQcm9wZXJ0eSh0aGlzLm1hcCwgYWN0aXZlTGF5ZXIsIExpbmtlZFByb3BlcnRpZXMuWklOREVYKTtcclxuICAgIGxldCByb290UGFyZW50QnlQcm9wZXJ0eSA9IGdldFJvb3RQYXJlbnRCeVByb3BlcnR5KFxyXG4gICAgICB0aGlzLm1hcCxcclxuICAgICAgYWN0aXZlTGF5ZXIsXHJcbiAgICAgIExpbmtlZFByb3BlcnRpZXMuWklOREVYXHJcbiAgICApO1xyXG4gICAgaWYgKCFyb290UGFyZW50QnlQcm9wZXJ0eSkge1xyXG4gICAgICByb290UGFyZW50QnlQcm9wZXJ0eSA9IGFjdGl2ZUxheWVyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGF5ZXJzVG9Nb3ZlID0gW3Jvb3RQYXJlbnRCeVByb3BlcnR5XTtcclxuICAgIGdldEFsbENoaWxkTGF5ZXJzQnlQcm9wZXJ0eShcclxuICAgICAgdGhpcy5tYXAsXHJcbiAgICAgIHJvb3RQYXJlbnRCeVByb3BlcnR5LFxyXG4gICAgICBsYXllcnNUb01vdmUsXHJcbiAgICAgIExpbmtlZFByb3BlcnRpZXMuWklOREVYXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMubGF5ZXJzLm1hcCgobGF5ZXIpID0+IHtcclxuICAgICAgaWYgKGxheWVyc1RvTW92ZS5pbmRleE9mKGxheWVyKSAhPT0gLTEpIHtcclxuICAgICAgICBzb3J0ZWRMYXllcnNUb01vdmUucHVzaChsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChhY3Rpb250eXBlID09PSBMYXllckxpc3REaXNwbGFjZW1lbnQuUmFpc2UpIHtcclxuICAgICAgdGhpcy5yYWlzZUxheWVycyhzb3J0ZWRMYXllcnNUb01vdmUsIGZyb21VaSk7XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbnR5cGUgPT09IExheWVyTGlzdERpc3BsYWNlbWVudC5Mb3dlcikge1xyXG4gICAgICB0aGlzLmxvd2VyTGF5ZXJzKHNvcnRlZExheWVyc1RvTW92ZSwgZnJvbVVpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogRm9yIHNlbGVjdGlvbiBtb2RlIGRpc2FibGVkIGF0dHJpYnV0ZVxyXG4gICAqL1xyXG4gIHJhaXNhYmxlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xyXG4gICAgbGV0IHJlc3BvbnNlID0gZmFsc2U7XHJcbiAgICBsZXQgYmFzZSA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xyXG4gICAgICBjb25zdCBtYXBJbmRleCA9IHRoaXMubGF5ZXJzLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKTtcclxuICAgICAgY29uc3QgY3VycmVudExheWVyID0gdGhpcy5sYXllcnNbbWFwSW5kZXhdO1xyXG4gICAgICBpZiAoY3VycmVudExheWVyLmJhc2VMYXllcikge1xyXG4gICAgICAgIGJhc2UgKz0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcHJldmlvdXNMYXllciA9IHRoaXMubGF5ZXJzW21hcEluZGV4IC0gMV07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmV2aW91c0xheWVyICYmXHJcbiAgICAgICAgcHJldmlvdXNMYXllci5iYXNlTGF5ZXIgIT09IHRydWUgJiZcclxuICAgICAgICAhbGF5ZXJzLmZpbmQoKGxheSkgPT4gcHJldmlvdXNMYXllci5pZCA9PT0gbGF5LmlkKSAmJlxyXG4gICAgICAgIGN1cnJlbnRMYXllci5iYXNlTGF5ZXIgIT09IHRydWVcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmVzcG9uc2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmxheWVyc0NoZWNrZWRbMF0uYmFzZUxheWVyKSB8fFxyXG4gICAgICBiYXNlID09PSB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2hlbiBtdWx0aXBsZSBsYXllcnMgaXMgc2VsZWN0ZWQgYnV0IHNvbWUgbWF5IGJlIGFsbG93IHRvIG1vdmVcclxuICAgKi9cclxuICByYWlzYWJsZUxheWVyKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmIChpbmRleCA8IDEpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmxheWVyc1tpbmRleCAtIDFdLm9wdGlvbnMuY2hlY2spIHtcclxuICAgICAgcmV0dXJuIHRoaXMucmFpc2FibGVMYXllcihpbmRleCAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICByYWlzZUxheWVycyhsYXllcnM6IExheWVyW10sIGZyb21VaTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IGxheWVyc1RvUmFpc2UgPSBbXTtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheS5pZCA9PT0gbGF5ZXIuaWQpO1xyXG4gICAgICBpZiAodGhpcy5yYWlzYWJsZUxheWVyKGluZGV4KSkge1xyXG4gICAgICAgIGxheWVyc1RvUmFpc2UucHVzaChsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubWFwLnJhaXNlTGF5ZXJzKGxheWVyc1RvUmFpc2UpO1xyXG4gICAgaWYgKGZyb21VaSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja0l0ZW1zID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXHJcbiAgICAgICAgICAnbWF0LWNoZWNrYm94LWNoZWNrZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBpdGVtRm9jdXNlZCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgJ2lnby1sYXllci1pdGVtLWZvY3VzZWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgdGFyZ2V0VG9TY3JvbGw7XHJcbiAgICAgICAgaWYgKGNoZWNrSXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0YXJnZXRUb1Njcm9sbCA9IGNoZWNrSXRlbXNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtRm9jdXNlZC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRhcmdldFRvU2Nyb2xsID0gaXRlbUZvY3VzZWRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXRUb1Njcm9sbCkge1xyXG4gICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGFyZ2V0VG9TY3JvbGwsIHtcclxuICAgICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCcsXHJcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgICAgICAgYmxvY2s6ICdlbmQnLFxyXG4gICAgICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKlxyXG4gICAqIEZvciBzZWxlY3Rpb24gbW9kZSBkaXNhYmxlZCBhdHRyaWJ1dGVcclxuICAgKi9cclxuICBsb3dlcmFibGVMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICBsZXQgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIGxldCBiYXNlID0gMDtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IG1hcEluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheWVyLmlkID09PSBsYXkuaWQpO1xyXG4gICAgICBjb25zdCBjdXJyZW50TGF5ZXIgPSB0aGlzLmxheWVyc1ttYXBJbmRleF07XHJcbiAgICAgIGlmIChjdXJyZW50TGF5ZXIuYmFzZUxheWVyKSB7XHJcbiAgICAgICAgYmFzZSArPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBuZXh0TGF5ZXIgPSB0aGlzLmxheWVyc1ttYXBJbmRleCArIDFdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbmV4dExheWVyICYmXHJcbiAgICAgICAgbmV4dExheWVyLmJhc2VMYXllciAhPT0gdHJ1ZSAmJlxyXG4gICAgICAgICFsYXllcnMuZmluZCgobGF5KSA9PiBuZXh0TGF5ZXIuaWQgPT09IGxheS5pZClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmVzcG9uc2UgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmxheWVyc0NoZWNrZWRbMF0uYmFzZUxheWVyKSB8fFxyXG4gICAgICBiYXNlID09PSB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoXHJcbiAgICApIHtcclxuICAgICAgcmVzcG9uc2UgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogV2hlbiBtdWx0aXBsZSBsYXllcnMgaXMgc2VsZWN0ZWQgYnV0IHNvbWUgbWF5IGJlIGFsbG93IHRvIG1vdmVcclxuICAgKi9cclxuICBsb3dlcmFibGVMYXllcihpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGluZGV4ID5cclxuICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKChsYXkpID0+IGxheS5iYXNlTGF5ZXIgIT09IHRydWUpLmxlbmd0aCAtIDJcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubGF5ZXJzW2luZGV4ICsgMV0ub3B0aW9ucy5jaGVjaykge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb3dlcmFibGVMYXllcihpbmRleCArIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBsb3dlckxheWVycyhsYXllcnM6IExheWVyW10sIGZyb21VaTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IGxheWVyc1RvTG93ZXIgPSBbXTtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KChsYXkpID0+IGxheS5pZCA9PT0gbGF5ZXIuaWQpO1xyXG4gICAgICBpZiAodGhpcy5sb3dlcmFibGVMYXllcihpbmRleCkpIHtcclxuICAgICAgICBsYXllcnNUb0xvd2VyLnB1c2gobGF5ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm1hcC5sb3dlckxheWVycyhsYXllcnNUb0xvd2VyKTtcclxuICAgIGlmIChmcm9tVWkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tJdGVtcyA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxyXG4gICAgICAgICAgJ21hdC1jaGVja2JveC1jaGVja2VkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgaXRlbUZvY3VzZWQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcclxuICAgICAgICAgICdpZ28tbGF5ZXItaXRlbS1mb2N1c2VkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IHRhcmdldFRvU2Nyb2xsO1xyXG4gICAgICAgIGlmIChjaGVja0l0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGFyZ2V0VG9TY3JvbGwgPSBjaGVja0l0ZW1zW2NoZWNrSXRlbXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtRm9jdXNlZC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRhcmdldFRvU2Nyb2xsID0gaXRlbUZvY3VzZWRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXRUb1Njcm9sbCkge1xyXG4gICAgICAgICAgc2Nyb2xsSW50b1ZpZXcodGFyZ2V0VG9TY3JvbGwsIHtcclxuICAgICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCcsXHJcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgICAgICAgYmxvY2s6ICdlbmQnLFxyXG4gICAgICAgICAgICBpbmxpbmU6ICduZWFyZXN0J1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIG5leHQoKSB7XHJcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSk6IExheWVyW10ge1xyXG4gICAgbGV0IGxheWVyc091dCA9IHRoaXMuZmlsdGVyTGF5ZXJzKGxheWVycyk7XHJcbiAgICBpZiAodGhpcy5zb3J0QWxwaGEpIHtcclxuICAgICAgbGF5ZXJzT3V0ID0gdGhpcy5zb3J0TGF5ZXJzQnlUaXRsZShsYXllcnNPdXQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGF5ZXJzT3V0ID0gdGhpcy5zb3J0TGF5ZXJzQnlaaW5kZXgobGF5ZXJzT3V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBsYXllcnNPdXQ7XHJcbiAgfVxyXG5cclxuICBvbktleXdvcmRDaGFuZ2UodGVybSkge1xyXG4gICAgdGhpcy5rZXl3b3JkID0gdGVybTtcclxuICB9XHJcblxyXG4gIG9uQXBwbGllZEZpbHRlckFuZFNvcnRDaGFuZ2UoYXBwbGllZEZpbHRlcjogTGF5ZXJMaXN0Q29udHJvbHNPcHRpb25zKSB7XHJcbiAgICB0aGlzLmtleXdvcmQgPSBhcHBsaWVkRmlsdGVyLmtleXdvcmQ7XHJcbiAgICB0aGlzLm9ubHlWaXNpYmxlID0gYXBwbGllZEZpbHRlci5vbmx5VmlzaWJsZTtcclxuICAgIHRoaXMuc29ydEFscGhhID0gYXBwbGllZEZpbHRlci5zb3J0QWxwaGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckxheWVycyhsYXllcnM6IExheWVyW10pOiBMYXllcltdIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5sYXllckZpbHRlckFuZFNvcnRPcHRpb25zLnNob3dUb29sYmFyID09PSBMYXllckxpc3RDb250cm9sc0VudW0ubmV2ZXJcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gbGF5ZXJzO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmtleXdvcmQgJiYgIXRoaXMub25seVZpc2libGUpIHtcclxuICAgICAgcmV0dXJuIGxheWVycztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZWVwTGF5ZXJJZHMgPSBsYXllcnMubWFwKChsYXllcjogTGF5ZXIpID0+IGxheWVyLmlkKTtcclxuXHJcbiAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXI6IExheWVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxheWVyT3B0aW9ucyA9IChsYXllci5vcHRpb25zIGFzIE1ldGFkYXRhTGF5ZXJPcHRpb25zKSB8fCB7fTtcclxuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5kYXRhU291cmNlLm9wdGlvbnMgfHwge307XHJcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gbGF5ZXJPcHRpb25zLm1ldGFkYXRhIHx8ICh7fSBhcyBNZXRhZGF0YU9wdGlvbnMpO1xyXG4gICAgICBjb25zdCBrZXl3b3JkcyA9IG1ldGFkYXRhLmtleXdvcmRMaXN0IHx8IFtdO1xyXG4gICAgICBjb25zdCBsYXllcktleXdvcmRzID0ga2V5d29yZHMubWFwKChrdzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGt3Lm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmtleXdvcmQgJiYgbGF5ZXIudGl0bGUpIHtcclxuICAgICAgICBjb25zdCBsb2NhbEtleXdvcmQgPSB0aGlzLmtleXdvcmRcclxuICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgIGNvbnN0IGxheWVyVGl0bGUgPSBsYXllci50aXRsZVxyXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZVR5cGUgPSBkYXRhU291cmNlT3B0aW9ucy50eXBlIHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IGtleXdvcmRSZWdleCA9IG5ldyBSZWdFeHAobG9jYWxLZXl3b3JkLCAnZ2knKTtcclxuICAgICAgICBjb25zdCBrZXl3b3JkSW5MaXN0ID1cclxuICAgICAgICAgIGxheWVyS2V5d29yZHMuZmluZCgoa3c6IHN0cmluZykgPT4ga2V5d29yZFJlZ2V4LnRlc3Qoa3cpKSAhPT1cclxuICAgICAgICAgIHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAha2V5d29yZFJlZ2V4LnRlc3QobGF5ZXJUaXRsZSkgJiZcclxuICAgICAgICAgICEodGhpcy5rZXl3b3JkLnRvTG93ZXJDYXNlKCkgPT09IGRhdGFTb3VyY2VUeXBlLnRvTG93ZXJDYXNlKCkpICYmXHJcbiAgICAgICAgICAha2V5d29yZEluTGlzdFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBrZWVwTGF5ZXJJZHMuaW5kZXhPZihsYXllci5pZCk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBrZWVwTGF5ZXJJZHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLm9ubHlWaXNpYmxlICYmIGxheWVyLnZpc2libGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBrZWVwTGF5ZXJJZHMuaW5kZXhPZihsYXllci5pZCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIGtlZXBMYXllcklkcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGxheWVycy5maWx0ZXIoXHJcbiAgICAgIChsYXllcjogTGF5ZXIpID0+IGtlZXBMYXllcklkcy5pbmRleE9mKGxheWVyLmlkKSAhPT0gLTFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNvcnRMYXllcnNCeVppbmRleChsYXllcnM6IExheWVyW10pIHtcclxuICAgIHJldHVybiBsYXllcnMuc29ydCgobGF5ZXIxLCBsYXllcjIpID0+IGxheWVyMi56SW5kZXggLSBsYXllcjEuekluZGV4KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc29ydExheWVyc0J5VGl0bGUobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICByZXR1cm4gbGF5ZXJzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpIDwgdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpID4gdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBub3JtYWxpemUoc3RyOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBzdHJcclxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxyXG4gICAgICAudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZVNob3dUb29sYmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgc3dpdGNoICh0aGlzLmxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnMuc2hvd1Rvb2xiYXIpIHtcclxuICAgICAgY2FzZSBMYXllckxpc3RDb250cm9sc0VudW0uYWx3YXlzOlxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICBjYXNlIExheWVyTGlzdENvbnRyb2xzRW51bS5uZXZlcjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5sYXllcnMubGVuZ3RoID49IHRoaXMudGhyZXNob2xkVG9GaWx0ZXJBbmRTb3J0IHx8XHJcbiAgICAgICAgICB0aGlzLmtleXdvcmQgfHxcclxuICAgICAgICAgIHRoaXMub25seVZpc2libGVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVMYXllclRvb2wobGF5ZXIpIHtcclxuICAgIHRoaXMudG9nZ2xlT3BhY2l0eSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMubGF5ZXJUb29sICYmIGxheWVyID09PSB0aGlzLmFjdGl2ZUxheWVyKSB7XHJcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxheWVyVG9vbCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBsYXkgb2YgdGhpcy5sYXllcnMpIHtcclxuICAgICAgbGF5Lm9wdGlvbnMuYWN0aXZlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBsYXllci5vcHRpb25zLmFjdGl2ZSA9IHRydWU7XHJcbiAgICB0aGlzLmFjdGl2ZUxheWVyID0gbGF5ZXI7XHJcbiAgfVxyXG5cclxuICByZW1vdmVMYXllcnMobGF5ZXJzPzogTGF5ZXJbXSkge1xyXG4gICAgaWYgKGxheWVycyAmJiBsYXllcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5yZW1vdmFibGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBsYXllci5tYXAucmVtb3ZlTGF5ZXIobGF5ZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQucHVzaChsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFsYXllcnMgJiYgdGhpcy5hY3RpdmVMYXllci5vcHRpb25zLnJlbW92YWJsZSAhPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5hY3RpdmVMYXllci5tYXAucmVtb3ZlTGF5ZXIodGhpcy5hY3RpdmVMYXllcik7XHJcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVWaXNpYmlsaXR5KGxheWVycz86IExheWVyW10pIHtcclxuICAgIGlmIChsYXllcnMgJiYgbGF5ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcclxuICAgICAgICBsYXllci52aXNpYmxlID0gdGhpcy5oaWRlU2VsZWN0ZWRMYXllcnM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMubGF5ZXJJdGVtQ2hhbmdlRGV0ZWN0aW9uJC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgaXNMYXllclJlbW92YWJsZShsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsYXllci5vcHRpb25zLnJlbW92YWJsZSAhPT0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0FsbExheWVyc1JlbW92YWJsZShsYXllcnM6IExheWVyW10pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBsYXllcnMuZXZlcnkoKGwpID0+IHRoaXMuaXNMYXllclJlbW92YWJsZShsKSk7XHJcbiAgfVxyXG5cclxuICBnZXQgc3RhdHVzU2VsZWN0ZWRMYXllcnNDaGVjaygpOiBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bSB7XHJcbiAgICBsZXQgc3RhdHVzU2VsZWN0ZWRMYXllcnM6IExheWVyTGlzdFNlbGVjdFZpc2libGVFbnVtID1cclxuICAgICAgTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTlVMTDtcclxuICAgIGxldCBmaW5kVHJ1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IGZpbmRGYWxzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGlmICh0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTlVMTDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uTUlYRUQ7XHJcbiAgICAgIHRoaXMuaGlkZVNlbGVjdGVkTGF5ZXJzID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGxheWVyMiBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcclxuICAgICAgICBpZiAobGF5ZXIyLnZpc2libGUgPT09IHRydWUpIHtcclxuICAgICAgICAgIGZpbmRUcnVlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheWVyMi52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgZmluZEZhbHNlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmaW5kVHJ1ZSA9PT0gdHJ1ZSAmJiBmaW5kRmFsc2UgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnMgPSBMYXllckxpc3RTZWxlY3RWaXNpYmxlRW51bS5BTExfVklTSUJMRTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZmluZFRydWUgPT09IGZhbHNlICYmIGZpbmRGYWxzZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzID0gTGF5ZXJMaXN0U2VsZWN0VmlzaWJsZUVudW0uQUxMX0hJRERFTjtcclxuICAgICAgICB0aGlzLmhpZGVTZWxlY3RlZExheWVycyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RhdHVzU2VsZWN0ZWRMYXllcnM7XHJcbiAgfVxyXG5cclxuICBsYXllcnNDaGVjayhldmVudDogeyBsYXllcjogTGF5ZXI7IGNoZWNrOiBib29sZWFuIH0pIHtcclxuICAgIGV2ZW50LmxheWVyLm9wdGlvbnMuY2hlY2sgPSBldmVudC5jaGVjaztcclxuICAgIGlmIChldmVudC5jaGVjayA9PT0gdHJ1ZSkge1xyXG4gICAgICBjb25zdCBldmVudE1hcEluZGV4ID0gdGhpcy5sYXllcnMuZmluZEluZGV4KFxyXG4gICAgICAgIChsYXllcikgPT4gZXZlbnQubGF5ZXIuaWQgPT09IGxheWVyLmlkXHJcbiAgICAgICk7XHJcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnNDaGVja2VkKSB7XHJcbiAgICAgICAgY29uc3QgbWFwSW5kZXggPSB0aGlzLmxheWVycy5maW5kSW5kZXgoKGxheSkgPT4gbGF5ZXIuaWQgPT09IGxheS5pZCk7XHJcbiAgICAgICAgaWYgKGV2ZW50TWFwSW5kZXggPCBtYXBJbmRleCkge1xyXG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnNwbGljZShcclxuICAgICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmZpbmRJbmRleCgobGF5KSA9PiBsYXllci5pZCA9PT0gbGF5LmlkKSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgZXZlbnQubGF5ZXJcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZUJhc2VMYXllcnMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XHJcbiAgICAgICAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGxheSkgPT4gbGF5LmJhc2VMYXllciAhPT0gdHJ1ZSAmJiBsYXkuc2hvd0luTGF5ZXJMaXN0XHJcbiAgICAgICAgICAgICAgKS5sZW5ndGhcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID09PVxyXG4gICAgICAgICAgICAgIHRoaXMubGF5ZXJzLmZpbHRlcigobGF5KSA9PiBsYXkuc2hvd0luTGF5ZXJMaXN0KS5sZW5ndGhcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGVjayA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGV2ZW50LmxheWVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5sYXllcnNDaGVja2VkLmZpbmRJbmRleChcclxuICAgICAgICAobGF5ZXIpID0+IGV2ZW50LmxheWVyLmlkID09PSBsYXllci5pZFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmxheWVyc0NoZWNrZWQuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leGNsdWRlQmFzZUxheWVycykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLmxlbmd0aCA9PT1cclxuICAgICAgICB0aGlzLmxheWVycy5maWx0ZXIoXHJcbiAgICAgICAgICAobGF5KSA9PiBsYXkuYmFzZUxheWVyICE9PSB0cnVlICYmIGxheS5zaG93SW5MYXllckxpc3RcclxuICAgICAgICApLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuZXhjbHVkZUJhc2VMYXllcnMpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5sZW5ndGggPT09XHJcbiAgICAgICAgdGhpcy5sYXllcnMuZmlsdGVyKChsYXkpID0+IGxheS5zaG93SW5MYXllckxpc3QpLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZVNlbGVjdGlvbk1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsdWU7XHJcbiAgICB0aGlzLmFjdGl2ZUxheWVyID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMubGF5ZXJUb29sID0gZmFsc2U7XHJcbiAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgdGhpcy5sYXllcnMpIHtcclxuICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5jaGVjaykge1xyXG4gICAgICAgICAgdGhpcy5sYXllcnNDaGVja2VkLnB1c2gobGF5ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGF5ZXJzQ2hlY2tlZE9wYWNpdHkoKTogYW55IHtcclxuICAgIGlmICh0aGlzLmxheWVyc0NoZWNrZWQubGVuZ3RoID4gMSkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IG9wYWNpdHkgPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVyc0NoZWNrZWQpIHtcclxuICAgICAgICBvcGFjaXR5LnB1c2gobGF5ZXIub3BhY2l0eSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9wYWNpdHk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0QWxsQ2hlY2spIHtcclxuICAgICAgZm9yIChjb25zdCBsYXllciBvZiB0aGlzLmxheWVycykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuZXhjbHVkZUJhc2VMYXllcnMgJiZcclxuICAgICAgICAgIGxheWVyLmJhc2VMYXllciAhPT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgbGF5ZXIuc2hvd0luTGF5ZXJMaXN0XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBsYXllci5vcHRpb25zLmNoZWNrID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZC5wdXNoKGxheWVyKTtcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmV4Y2x1ZGVCYXNlTGF5ZXJzICYmIGxheWVyLnNob3dJbkxheWVyTGlzdCkge1xyXG4gICAgICAgICAgbGF5ZXIub3B0aW9ucy5jaGVjayA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxheWVyc0NoZWNrZWQucHVzaChsYXllcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2skLm5leHQodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHRoaXMubGF5ZXJzKSB7XHJcbiAgICAgICAgbGF5ZXIub3B0aW9ucy5jaGVjayA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGF5ZXJzQ2hlY2tlZCA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdEFsbENoZWNrJC5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzU2Nyb2xsZWRJbnRvVmlldyhlbGVtU291cmNlLCBlbGVtKSB7XHJcbiAgICBjb25zdCBkb2NWaWV3VG9wID0gZWxlbVNvdXJjZS5zY3JvbGxUb3A7XHJcbiAgICBjb25zdCBkb2NWaWV3Qm90dG9tID0gZG9jVmlld1RvcCArIGVsZW1Tb3VyY2UuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgIGNvbnN0IGVsZW1Ub3AgPSBlbGVtLm9mZnNldFRvcDtcclxuICAgIGNvbnN0IGVsZW1Cb3R0b20gPSBlbGVtVG9wICsgZWxlbS5jbGllbnRIZWlnaHQ7XHJcbiAgICByZXR1cm4gZWxlbUJvdHRvbSA8PSBkb2NWaWV3Qm90dG9tICYmIGVsZW1Ub3AgPj0gZG9jVmlld1RvcDtcclxuICB9XHJcblxyXG4gIHJlbW92ZVByb2JsZW1MYXllckluTGlzdChsYXllcnNMaXN0OiBMYXllcltdKTogTGF5ZXJbXSB7XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVyc0xpc3QpIHtcclxuICAgICAgaWYgKGxheWVyLm9sTG9hZGluZ1Byb2JsZW0gPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLm1hcC5yZW1vdmVMYXllcihsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsYXllcnNMaXN0O1xyXG4gIH1cclxufVxyXG4iLCI8aWdvLWxheWVyLWxpc3QtdG9vbFxyXG4gICpuZ0lmPVwic2hvd1Rvb2xiYXIkIHwgYXN5bmNcIlxyXG4gIGZsb2F0TGFiZWw9XCJhdXRvXCJcclxuICBbbGF5ZXJzQXJlQWxsVmlzaWJsZV09XCJsYXllcnNBcmVBbGxWaXNpYmxlXCJcclxuICBbdGVybV09XCJsYXllckZpbHRlckFuZFNvcnRPcHRpb25zLmtleXdvcmRcIlxyXG4gIFtvbmx5VmlzaWJsZV09XCJsYXllckZpbHRlckFuZFNvcnRPcHRpb25zLm9ubHlWaXNpYmxlXCJcclxuICBbc29ydEFscGhhXT1cImxheWVyRmlsdGVyQW5kU29ydE9wdGlvbnMuc29ydEFscGhhXCJcclxuICAoYXBwbGllZEZpbHRlckFuZFNvcnQpPVwib25BcHBsaWVkRmlsdGVyQW5kU29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAoc2VsZWN0aW9uKT1cInRvZ2dsZVNlbGVjdGlvbk1vZGUoJGV2ZW50KVwiXHJcbj5cclxuPC9pZ28tbGF5ZXItbGlzdC10b29sPlxyXG5cclxuPGRpdiAqbmdJZj1cInNlbGVjdGlvblwiIGNsYXNzPVwic2VsZWN0LWFsbFwiPlxyXG4gIDxtYXQtY2hlY2tib3hcclxuICAgIGNsYXNzPVwic2VsZWN0LWFsbC1jaGVja2JveFwiXHJcbiAgICBbY29sb3JdPVwiIXNlbGVjdEFsbENoZWNrICYmIGxheWVyc0NoZWNrZWQubGVuZ3RoID4gMCA/ICdhY2NlbnQnIDogJ3ByaW1hcnknXCJcclxuICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsKClcIlxyXG4gICAgW2NoZWNrZWRdPVwic2VsZWN0QWxsQ2hlY2tcIlxyXG4gICAgW2luZGV0ZXJtaW5hdGVdPVwiIXNlbGVjdEFsbENoZWNrICYmIGxheWVyc0NoZWNrZWQubGVuZ3RoID4gMFwiXHJcbiAgPlxyXG4gICAge3tcclxuICAgICAgc2VsZWN0QWxsQ2hlY2tcclxuICAgICAgICA/ICgnaWdvLmdlby5sYXllci5kZXNlbGVjdEFsbCcgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIuc2VsZWN0QWxsJyB8IHRyYW5zbGF0ZSlcclxuICAgIH19XHJcbiAgPC9tYXQtY2hlY2tib3g+XHJcbjwvZGl2PlxyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbjxpZ28tbGlzdCAjaWdvTGlzdCBbbmF2aWdhdGlvbl09XCJmYWxzZVwiIFtzZWxlY3Rpb25dPVwiZmFsc2VcIj5cclxuICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWxheWVyIGxldC1pPVwiaW5kZXhcIiBbbmdGb3JPZl09XCJsYXllcnMkIHwgYXN5bmNcIj5cclxuICAgIDxpZ28tbGF5ZXItaXRlbVxyXG4gICAgICAqbmdJZj1cIiEoZXhjbHVkZUJhc2VMYXllcnMgJiYgbGF5ZXIuYmFzZUxheWVyKVwiXHJcbiAgICAgIGlnb0xpc3RJdGVtXHJcbiAgICAgIFtsYXllcl09XCJsYXllclwiXHJcbiAgICAgIFthY3RpdmVMYXllcl09XCJhY3RpdmVMYXllclwiXHJcbiAgICAgIFtvcmRlcmFibGVdPVwib3JkZXJhYmxlICYmICFsYXllci5iYXNlTGF5ZXJcIlxyXG4gICAgICBbbG93ZXJEaXNhYmxlZF09XCJnZXRMb3dlckxheWVyKCkuaWQgPT09IGxheWVyLmlkXCJcclxuICAgICAgW3JhaXNlRGlzYWJsZWRdPVwiZ2V0VXBwZXJMYXllcigpLmlkID09PSBsYXllci5pZFwiXHJcbiAgICAgIFtxdWVyeUJhZGdlXT1cInF1ZXJ5QmFkZ2VcIlxyXG4gICAgICBbZXhwYW5kTGVnZW5kSWZWaXNpYmxlXT1cImV4cGFuZExlZ2VuZE9mVmlzaWJsZUxheWVyc1wiXHJcbiAgICAgIFt1cGRhdGVMZWdlbmRPblJlc29sdXRpb25DaGFuZ2VdPVwidXBkYXRlTGVnZW5kT25SZXNvbHV0aW9uQ2hhbmdlXCJcclxuICAgICAgW3RvZ2dsZUxlZ2VuZE9uVmlzaWJpbGl0eUNoYW5nZV09XCJ0b2dnbGVMZWdlbmRPblZpc2liaWxpdHlDaGFuZ2VcIlxyXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25cIlxyXG4gICAgICBbc2VsZWN0QWxsXT1cInNlbGVjdEFsbENoZWNrXCJcclxuICAgICAgW2xheWVyQ2hlY2tdPVwibGF5ZXIub3B0aW9ucy5jaGVja1wiXHJcbiAgICAgIFtjaGFuZ2VEZXRlY3Rpb25dPVwibGF5ZXJJdGVtQ2hhbmdlRGV0ZWN0aW9uJFwiXHJcbiAgICAgIChhY3Rpb24pPVwidG9nZ2xlTGF5ZXJUb29sKCRldmVudClcIlxyXG4gICAgICAoY2hlY2tib3gpPVwibGF5ZXJzQ2hlY2soJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L2lnby1sYXllci1pdGVtPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvaWdvLWxpc3Q+XHJcblxyXG48aWdvLXBhbmVsXHJcbiAgKm5nSWY9XCIhc2VsZWN0aW9uICYmIGxheWVyVG9vbCAmJiBhY3RpdmVMYXllclwiXHJcbiAgY2xhc3M9XCJpZ28tbGF5ZXItYWN0aW9ucy1jb250YWluZXJcIlxyXG4gIFt0aXRsZV09XCJhY3RpdmVMYXllci50aXRsZVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaWdvLWxheWVyLWJ1dHRvbi1ncm91cFwiPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImlzTGF5ZXJSZW1vdmFibGUoYWN0aXZlTGF5ZXIpXCJcclxuICAgICAgY2xhc3M9XCJkZWxldGUtYnV0dG9uXCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5yZW1vdmVMYXllcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlTGF5ZXJzKClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImRlbGV0ZVwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZG93bi1idXR0b25cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJMb3dlckxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLmxvd2VyTGF5ZXInIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwibG93ZXJEaXNhYmxlZFwiXHJcbiAgICAgIChjbGljayk9XCJtb3ZlQWN0aXZlTGF5ZXIoYWN0aXZlTGF5ZXIsIGxheWVyTGlzdERpc3BsYWNlbWVudC5Mb3dlciwgdHJ1ZSlcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb25cclxuICAgICAgICBhcmlhLWhpZGRlbj1cImZhbHNlXCJcclxuICAgICAgICBbbWF0QmFkZ2VdPVwic29ydEFscGhhIHx8IG9ubHlWaXNpYmxlIHx8IGtleXdvcmQgPyAnIScgOiAnJ1wiXHJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxyXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImxvd2VyRGlzYWJsZWRcIlxyXG4gICAgICAgIHN2Z0ljb249XCJhcnJvdy1kb3duXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwidXAtYnV0dG9uXCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCJcclxuICAgICAgICBzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZFxyXG4gICAgICAgICAgPyAoJ2lnby5nZW8ubGF5ZXIuZmlsdGVyUmFpc2VMYXllcicgfCB0cmFuc2xhdGUpXHJcbiAgICAgICAgICA6ICgnaWdvLmdlby5sYXllci5yYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInJhaXNlRGlzYWJsZWRcIlxyXG4gICAgICAoY2xpY2spPVwibW92ZUFjdGl2ZUxheWVyKGFjdGl2ZUxheWVyLCBsYXllckxpc3REaXNwbGFjZW1lbnQuUmFpc2UsIHRydWUpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXHJcbiAgICAgICAgW21hdEJhZGdlXT1cInNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkID8gJyEnIDogJydcIlxyXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJ3YXJuXCJcclxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCJyYWlzZURpc2FibGVkXCJcclxuICAgICAgICBzdmdJY29uPVwiYXJyb3ctdXBcIlxyXG4gICAgICA+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwhLS0gPGxhYmVsPnt7ICdpZ28uZ2VvLmxheWVyLm9wYWNpdHknIHwgdHJhbnNsYXRlIH19IDwvbGFiZWw+IC0tPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICBjbGFzcz1cIm9wYWNpdHktYnV0dG9uXCJcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiXHJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwib3BhY2l0eU1lbnVcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxyXG4gICAgICAgIFttYXRCYWRnZV09XCJiYWRnZU9wYWNpdHlcIlxyXG4gICAgICAgIG1hdEJhZGdlQ29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBtYXRCYWRnZVNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgIHN2Z0ljb249XCJvcGFjaXR5XCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8bWF0LW1lbnUgI29wYWNpdHlNZW51PVwibWF0TWVudVwiIGNsYXNzPVwicGFuZWwtb3BhY2l0eS1tZW51XCI+XHJcbiAgICAgIDxtYXQtc2xpZGVyXHJcbiAgICAgICAgaWQ9XCJvcGFjaXR5LXNsaWRlclwiXHJcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICBkaXNjcmV0ZVxyXG4gICAgICAgIHN0ZXA9XCI1XCJcclxuICAgICAgICBbbWluXT1cIjBcIlxyXG4gICAgICAgIFttYXhdPVwiMTAwXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5vcGFjaXR5JyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgICAjbmdTbGlkZXJcclxuICAgICAgICA+PGlucHV0XHJcbiAgICAgICAgICBtYXRTbGlkZXJUaHVtYlxyXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wYWNpdHlcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIlxyXG4gICAgICAgICAgICBjaGFuZ2VPcGFjaXR5KHtcclxuICAgICAgICAgICAgICBzb3VyY2U6IG5nU2xpZGVyVGh1bWIsXHJcbiAgICAgICAgICAgICAgcGFyZW50OiBuZ1NsaWRlcixcclxuICAgICAgICAgICAgICB2YWx1ZTogbmdTbGlkZXJUaHVtYi52YWx1ZVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgICNuZ1NsaWRlclRodW1iPVwibWF0U2xpZGVyVGh1bWJcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvbWF0LXNsaWRlcj5cclxuICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cImFjdGl2ZUxheWVyRXh0ZW50SXNWYWxpZChhY3RpdmVMYXllcilcIlxyXG4gICAgICBjbGFzcz1cInpvb21MYXllci1idXR0b25cIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLnpvb21MYXllcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAoY2xpY2spPVwiem9vbUxheWVyRXh0ZW50cyhhY3RpdmVMYXllcilcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb25cclxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcclxuICAgICAgICBzdmdJY29uPVwibWFnbmlmeS1zY2FuXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyXHJcbiAgICAgIGlnb0xheWVySXRlbVRvb2xiYXJcclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVMYXllclRvb2xiYXJcIlxyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBsYXllcjogYWN0aXZlTGF5ZXIgfVwiXHJcbiAgICA+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWdvTGF5ZXJJdGVtVG9vbGJhcl1cIj48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbjwvaWdvLXBhbmVsPlxyXG5cclxuPGlnby1wYW5lbFxyXG4gICpuZ0lmPVwic2VsZWN0aW9uICYmIGxheWVycy5sZW5ndGggPiAwXCJcclxuICBjbGFzcz1cImlnby1sYXllci1hY3Rpb25zLWNvbnRhaW5lclwiXHJcbiAgW3RpdGxlXT1cIidpZ28uZ2VvLmxheWVyLnRvb2xzJyB8IHRyYW5zbGF0ZVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1idXR0b25zLW11bHRpXCI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgaXNBbGxMYXllcnNSZW1vdmFibGUobGF5ZXJzQ2hlY2tlZClcclxuICAgICAgICAgID8gKCdpZ28uZ2VvLmxheWVyLnJlbW92ZVNlbGVjdGVkTGF5ZXJzJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnJlbW92ZVNlbGVjdGVkTGF5ZXJzUmVzdHJpY3Rpb24nIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlTGF5ZXJzKGxheWVyc0NoZWNrZWQpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiXHJcbiAgICAgICAgW21hdEJhZGdlXT1cIichJ1wiXHJcbiAgICAgICAgbWF0QmFkZ2VDb2xvcj1cIndhcm5cIlxyXG4gICAgICAgIG1hdEJhZGdlU2l6ZT1cIm1lZGl1bVwiXHJcbiAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cImlzQWxsTGF5ZXJzUmVtb3ZhYmxlKGxheWVyc0NoZWNrZWQpXCJcclxuICAgICAgICBzdmdJY29uPVwiZGVsZXRlXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZXllLWJ1dHRvblwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImxheWVyc0NoZWNrZWQubGVuZ3RoID09PSAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgc3RhdHVzU2VsZWN0ZWRMYXllcnNDaGVjayA9PT0gJ0FMTF9ISURERU4nXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5zaG93U2VsZWN0ZWRMYXllcnMnIHwgdHJhbnNsYXRlKVxyXG4gICAgICAgICAgOiAoJ2lnby5nZW8ubGF5ZXIuaGlkZVNlbGVjdGVkTGF5ZXJzJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgXCJcclxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVZpc2liaWxpdHkobGF5ZXJzQ2hlY2tlZClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb25cclxuICAgICAgICBbc3ZnSWNvbl09XCJcclxuICAgICAgICAgIHN0YXR1c1NlbGVjdGVkTGF5ZXJzQ2hlY2sgPT09ICdBTExfSElEREVOJyA/ICdleWUtb2ZmJyA6ICdleWUnXHJcbiAgICAgICAgXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwiZG93bi1idXR0b25cIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJMb3dlckxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLmxvd2VyTGF5ZXInIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwibG93ZXJEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgIChjbGljayk9XCJsb3dlckxheWVycyhsYXllcnNDaGVja2VkKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxyXG4gICAgICAgIFttYXRCYWRnZV09XCJzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZCA/ICchJyA6ICcnXCJcclxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcclxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwibG93ZXJEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgICAgc3ZnSWNvbj1cImFycm93LWRvd25cIlxyXG4gICAgICA+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJ1cC1idXR0b25cIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgIHNvcnRBbHBoYSB8fCBvbmx5VmlzaWJsZSB8fCBrZXl3b3JkXHJcbiAgICAgICAgICA/ICgnaWdvLmdlby5sYXllci5maWx0ZXJSYWlzZUxheWVyJyB8IHRyYW5zbGF0ZSlcclxuICAgICAgICAgIDogKCdpZ28uZ2VvLmxheWVyLnJhaXNlTGF5ZXInIHwgdHJhbnNsYXRlKVxyXG4gICAgICBcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwicmFpc2VEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgIChjbGljayk9XCJyYWlzZUxheWVycyhsYXllcnNDaGVja2VkKVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIlxyXG4gICAgICAgIFttYXRCYWRnZV09XCJzb3J0QWxwaGEgfHwgb25seVZpc2libGUgfHwga2V5d29yZCA/ICchJyA6ICcnXCJcclxuICAgICAgICBtYXRCYWRnZUNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgbWF0QmFkZ2VTaXplPVwibWVkaXVtXCJcclxuICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwicmFpc2VEaXNhYmxlZFNlbGVjdGlvblwiXHJcbiAgICAgICAgc3ZnSWNvbj1cImFycm93LXVwXCJcclxuICAgICAgPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGNsYXNzPVwib3BhY2l0eS1idXR0b25cIlxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCJcclxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJsYXllcnNDaGVja2VkLmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJvcGFjaXR5TWVudVwiXHJcbiAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLm9wYWNpdHknIHwgdHJhbnNsYXRlXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvcGFjaXR5XCI+PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxtYXQtbWVudSAjb3BhY2l0eU1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJtYXQtbWVudS1vcGFjaXR5LXNsaWRlclwiPlxyXG4gICAgICA8ZGl2IGlkPVwib3BhY2l0eS1tZW51XCI+XHJcbiAgICAgICAgPCEtLSBUT0RPOiBUaGUgJ3RpY2tJbnRlcnZhbCcgcHJvcGVydHkgbm8gbG9uZ2VyIGV4aXN0cyAtLT5cclxuICAgICAgICA8bWF0LXNsaWRlclxyXG4gICAgICAgICAgKm5nSWY9XCJsYXllcnNDaGVja2VkLmxlbmd0aFwiXHJcbiAgICAgICAgICBpZD1cIm9wYWNpdHktc2xpZGVyXCJcclxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICB0aHVtYkxhYmVsXHJcbiAgICAgICAgICBzaG93VGlja01hcmtzXHJcbiAgICAgICAgICBzdGVwPVwiNVwiXHJcbiAgICAgICAgICBbbWluXT1cIjBcIlxyXG4gICAgICAgICAgW21heF09XCIxMDBcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJjaGVja09wYWNpdHlcIlxyXG4gICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIub3BhY2l0eScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICA+PGlucHV0IG1hdFNsaWRlclRodW1iIC8+XHJcbiAgICAgICAgPC9tYXQtc2xpZGVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LW1lbnU+XHJcblxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgIGxheWVyc0NoZWNrZWQubGVuZ3RoICE9PSAwICYmIGFjdGl2ZUxheWVyc0V4dGVudEFyZVZhbGlkKGxheWVyc0NoZWNrZWQpXHJcbiAgICAgIFwiXHJcbiAgICAgIGNsYXNzPVwiem9vbUxheWVyLWJ1dHRvblwiXHJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIlxyXG4gICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIuem9vbUxheWVycycgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAoY2xpY2spPVwiem9vbUxheWVyc0V4dGVudHMobGF5ZXJzQ2hlY2tlZClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm1hZ25pZnktc2NhblwiPjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9pZ28tcGFuZWw+XHJcbiJdfQ==