@igo2/geo 18.0.0-next.9 → 18.0.1-next.1

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 (607) hide show
  1. package/fesm2022/igo2-geo.mjs +23016 -22107
  2. package/fesm2022/igo2-geo.mjs.map +1 -1
  3. package/lib/datasource/shared/capabilities.service.d.ts +7 -2
  4. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +2 -2
  5. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +5 -5
  6. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +57 -20
  7. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +115 -13
  8. package/lib/directions/directions-results/directions-results.component.d.ts +50 -16
  9. package/lib/directions/directions-sources/directions-source.d.ts +2 -2
  10. package/lib/directions/directions-sources/osrm-directions-source.d.ts +2 -2
  11. package/lib/directions/directions.component.d.ts +5 -5
  12. package/lib/directions/shared/directions.enum.d.ts +42 -1
  13. package/lib/directions/shared/directions.interface.d.ts +50 -25
  14. package/lib/directions/shared/directions.service.d.ts +46 -8
  15. package/lib/directions/shared/directions.utils.d.ts +102 -23
  16. package/lib/directions/shared/store.d.ts +3 -3
  17. package/lib/download/download-button/download-button.component.d.ts +4 -8
  18. package/lib/download/shared/download.service.d.ts +1 -1
  19. package/lib/draw/draw/draw.component.d.ts +2 -2
  20. package/lib/draw/shared/draw.utils.d.ts +2 -1
  21. package/lib/environment/environment.interface.d.ts +2 -0
  22. package/lib/feature/shared/feature-store.utils.d.ts +1 -1
  23. package/lib/feature/shared/feature.interfaces.d.ts +1 -1
  24. package/lib/feature/shared/store.d.ts +1 -1
  25. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  26. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  27. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +2 -2
  28. package/lib/filter/shared/filterable-datasource.pipe.d.ts +2 -2
  29. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +3 -3
  30. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -5
  31. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -5
  32. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  33. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +5 -5
  34. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  35. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +2 -7
  36. package/lib/import-export/export-button/export-button.component.d.ts +3 -7
  37. package/lib/import-export/import-export/import-export.component.d.ts +1 -2
  38. package/lib/import-export/shared/export.service.d.ts +2 -2
  39. package/lib/layer/index.d.ts +9 -4
  40. package/lib/layer/layer-group/index.d.ts +1 -0
  41. package/lib/layer/layer-group/layer-group.component.d.ts +30 -0
  42. package/lib/layer/layer-item/layer-item.component.d.ts +19 -42
  43. package/lib/layer/layer-legend/layer-legend.component.d.ts +2 -5
  44. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +6 -7
  45. package/lib/layer/layer-list/index.d.ts +0 -2
  46. package/lib/layer/layer-list/layer-list.component.d.ts +51 -128
  47. package/lib/layer/layer-list-tool/index.d.ts +0 -1
  48. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +19 -26
  49. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +5 -1
  50. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +9 -8
  51. package/lib/layer/layer-search/index.d.ts +1 -0
  52. package/lib/layer/layer-search/layer-search.component.d.ts +16 -0
  53. package/lib/layer/layer-unavailable/index.d.ts +2 -0
  54. package/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.d.ts +10 -0
  55. package/lib/layer/layer-unavailable/layer-unavailable.component.d.ts +11 -0
  56. package/lib/layer/layer-viewer/index.d.ts +2 -0
  57. package/lib/layer/layer-viewer/layer-viewer.component.d.ts +52 -0
  58. package/lib/layer/layer-viewer/layer-viewer.interface.d.ts +22 -0
  59. package/lib/layer/layer-viewer-bottom-actions/index.d.ts +1 -0
  60. package/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.d.ts +44 -0
  61. package/lib/layer/layer-visibility-button/index.d.ts +1 -0
  62. package/lib/layer/layer-visibility-button/layer-visibility-button.component.d.ts +22 -0
  63. package/lib/layer/layer.module.d.ts +18 -6
  64. package/lib/layer/shared/index.d.ts +1 -0
  65. package/lib/layer/shared/layer-controller.d.ts +81 -0
  66. package/lib/layer/shared/layer-selection.d.ts +14 -0
  67. package/lib/layer/shared/layer.service.d.ts +9 -5
  68. package/lib/layer/shared/layers/any-layer.d.ts +3 -6
  69. package/lib/layer/shared/layers/any-layer.interface.d.ts +8 -6
  70. package/lib/layer/shared/layers/image-layer.d.ts +5 -2
  71. package/lib/layer/shared/layers/image-layer.interface.d.ts +1 -4
  72. package/lib/layer/shared/layers/index.d.ts +5 -0
  73. package/lib/layer/shared/layers/layer-base.d.ts +75 -0
  74. package/lib/layer/shared/layers/layer-group.d.ts +32 -0
  75. package/lib/layer/shared/layers/layer-group.interface.d.ts +8 -0
  76. package/lib/layer/shared/layers/layer.d.ts +27 -45
  77. package/lib/layer/shared/layers/layer.interface.d.ts +23 -41
  78. package/lib/layer/shared/layers/linked/index.d.ts +3 -0
  79. package/lib/layer/shared/layers/linked/linked-layer.d.ts +35 -0
  80. package/lib/layer/shared/layers/linked/linked-layer.interface.d.ts +32 -0
  81. package/lib/layer/shared/layers/linked/linked-layer.utils.d.ts +9 -0
  82. package/lib/layer/shared/layers/tile-layer.d.ts +5 -2
  83. package/lib/layer/shared/layers/vector-layer.d.ts +7 -3
  84. package/lib/layer/shared/layers/vectortile-layer.d.ts +5 -2
  85. package/lib/layer/utils/layer.utils.d.ts +12 -2
  86. package/lib/layer/utils/outputLegend.d.ts +2 -2
  87. package/lib/map/shared/controllers/geolocation.interface.d.ts +2 -1
  88. package/lib/map/shared/hover-feature.directive.d.ts +0 -1
  89. package/lib/map/shared/linkedLayers.utils.d.ts +13 -17
  90. package/lib/map/shared/map.abstract.d.ts +12 -29
  91. package/lib/map/shared/map.d.ts +10 -85
  92. package/lib/map/shared/map.service.d.ts +1 -1
  93. package/lib/map/shared/map.utils.d.ts +5 -3
  94. package/lib/map/utils/index.d.ts +1 -0
  95. package/lib/map/utils/layer-watcher.d.ts +18 -8
  96. package/lib/measure/measurer/measurer.component.d.ts +0 -8
  97. package/lib/metadata/metadata-button/metadata-button.component.d.ts +3 -7
  98. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  99. package/lib/offline/layerDB/layerDB.service.d.ts +1 -1
  100. package/lib/offline/offline.provider.d.ts +1 -1
  101. package/lib/query/shared/query.service.d.ts +1 -1
  102. package/lib/query/shared/query.utils.d.ts +2 -1
  103. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  104. package/lib/search/shared/search-pointer-summary.directive.d.ts +0 -1
  105. package/lib/search/shared/sources/workspace.interfaces.d.ts +1 -1
  106. package/lib/style/style-list/style-list.provider.d.ts +1 -8
  107. package/lib/style/style-list/style-list.service.d.ts +1 -1
  108. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  109. package/locale/en.geo.json +104 -89
  110. package/locale/fr.geo.json +103 -89
  111. package/package.json +15 -17
  112. package/src/geo-theme.scss +1 -1
  113. package/src/lib/directions/directions-inputs/directions-inputs.theming.scss +21 -0
  114. package/src/lib/directions/directions.theming.scss +2 -0
  115. package/src/lib/layer/layer-group/layer-group.theme.scss +28 -0
  116. package/src/lib/layer/layer-item/layer-item.theme.scss +4 -9
  117. package/src/lib/layer/layer-legend/layer-legend.theme.scss +30 -0
  118. package/src/lib/layer/layer-list/layer-list.theme.scss +51 -0
  119. package/src/lib/layer/layer-unavailable/layer-unavailable.theme.scss +19 -0
  120. package/src/lib/layer/layer-viewer/_layer-viewer.theme.scss +16 -0
  121. package/src/lib/layer/layer-visibility-button/layer-visibility-button.theme.scss +27 -0
  122. package/src/lib/layer/layer.theming.scss +14 -3
  123. package/src/lib/map/menu-button/menu-button.theming.scss +3 -3
  124. package/src/style/style.scss +1 -1
  125. package/esm2022/igo2-geo.mjs +0 -5
  126. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +0 -234
  127. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +0 -274
  128. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +0 -243
  129. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +0 -19
  130. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +0 -136
  131. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +0 -60
  132. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +0 -232
  133. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +0 -24
  134. package/esm2022/lib/catalog/catalog-library/index.mjs +0 -4
  135. package/esm2022/lib/catalog/catalog.module.mjs +0 -26
  136. package/esm2022/lib/catalog/index.mjs +0 -6
  137. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +0 -32
  138. package/esm2022/lib/catalog/shared/catalog.enum.mjs +0 -16
  139. package/esm2022/lib/catalog/shared/catalog.interface.mjs +0 -2
  140. package/esm2022/lib/catalog/shared/catalog.service.mjs +0 -706
  141. package/esm2022/lib/catalog/shared/catalogs.mjs +0 -75
  142. package/esm2022/lib/catalog/shared/index.mjs +0 -5
  143. package/esm2022/lib/datasource/index.mjs +0 -3
  144. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +0 -17
  145. package/esm2022/lib/datasource/shared/capabilities.service.mjs +0 -441
  146. package/esm2022/lib/datasource/shared/datasource.service.mjs +0 -258
  147. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +0 -2
  148. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +0 -2
  149. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +0 -2
  150. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +0 -222
  151. package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +0 -2
  152. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +0 -118
  153. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +0 -2
  154. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +0 -24
  155. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +0 -3
  156. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +0 -2
  157. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +0 -40
  158. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +0 -2
  159. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +0 -52
  160. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +0 -2
  161. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +0 -70
  162. package/esm2022/lib/datasource/shared/datasources/index.mjs +0 -36
  163. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +0 -2
  164. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +0 -33
  165. package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +0 -2
  166. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +0 -14
  167. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +0 -2
  168. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +0 -60
  169. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +0 -2
  170. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +0 -17
  171. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +0 -2
  172. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +0 -56
  173. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +0 -2
  174. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +0 -137
  175. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +0 -170
  176. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +0 -2
  177. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +0 -227
  178. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +0 -224
  179. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +0 -2
  180. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +0 -18
  181. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +0 -2
  182. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +0 -11
  183. package/esm2022/lib/datasource/shared/index.mjs +0 -6
  184. package/esm2022/lib/datasource/shared/options/index.mjs +0 -5
  185. package/esm2022/lib/datasource/shared/options/options-api.interface.mjs +0 -2
  186. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +0 -15
  187. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +0 -85
  188. package/esm2022/lib/datasource/shared/options/options.service.mjs +0 -3
  189. package/esm2022/lib/datasource/utils/index.mjs +0 -2
  190. package/esm2022/lib/datasource/utils/tilegrid.mjs +0 -20
  191. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +0 -197
  192. package/esm2022/lib/directions/directions-buttons/index.mjs +0 -2
  193. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +0 -218
  194. package/esm2022/lib/directions/directions-inputs/index.mjs +0 -2
  195. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +0 -143
  196. package/esm2022/lib/directions/directions-results/index.mjs +0 -2
  197. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +0 -5
  198. package/esm2022/lib/directions/directions-sources/directions-source.mjs +0 -3
  199. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +0 -23
  200. package/esm2022/lib/directions/directions-sources/index.mjs +0 -5
  201. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +0 -159
  202. package/esm2022/lib/directions/directions.component.mjs +0 -413
  203. package/esm2022/lib/directions/directions.module.mjs +0 -46
  204. package/esm2022/lib/directions/directions.provider.mjs +0 -16
  205. package/esm2022/lib/directions/index.mjs +0 -8
  206. package/esm2022/lib/directions/shared/directions-source.service.mjs +0 -18
  207. package/esm2022/lib/directions/shared/directions.enum.mjs +0 -28
  208. package/esm2022/lib/directions/shared/directions.interface.mjs +0 -2
  209. package/esm2022/lib/directions/shared/directions.service.mjs +0 -213
  210. package/esm2022/lib/directions/shared/directions.utils.mjs +0 -559
  211. package/esm2022/lib/directions/shared/index.mjs +0 -6
  212. package/esm2022/lib/directions/shared/store.mjs +0 -21
  213. package/esm2022/lib/download/download-button/download-button.component.mjs +0 -60
  214. package/esm2022/lib/download/download-button/index.mjs +0 -2
  215. package/esm2022/lib/download/download.module.mjs +0 -24
  216. package/esm2022/lib/download/index.mjs +0 -3
  217. package/esm2022/lib/download/shared/download.interface.mjs +0 -2
  218. package/esm2022/lib/download/shared/download.service.mjs +0 -67
  219. package/esm2022/lib/download/shared/index.mjs +0 -3
  220. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +0 -42
  221. package/esm2022/lib/draw/draw/draw-popup.component.mjs +0 -421
  222. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +0 -28
  223. package/esm2022/lib/draw/draw/draw.component.mjs +0 -1143
  224. package/esm2022/lib/draw/draw/draw.module.mjs +0 -19
  225. package/esm2022/lib/draw/drawingTool.module.mjs +0 -18
  226. package/esm2022/lib/draw/index.mjs +0 -3
  227. package/esm2022/lib/draw/shared/draw-icon.service.mjs +0 -30
  228. package/esm2022/lib/draw/shared/draw.enum.mjs +0 -21
  229. package/esm2022/lib/draw/shared/draw.interface.mjs +0 -2
  230. package/esm2022/lib/draw/shared/draw.utils.mjs +0 -125
  231. package/esm2022/lib/draw/shared/index.mjs +0 -5
  232. package/esm2022/lib/environment/environment.interface.mjs +0 -2
  233. package/esm2022/lib/environment/index.mjs +0 -2
  234. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +0 -306
  235. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +0 -56
  236. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +0 -26
  237. package/esm2022/lib/feature/feature-details/index.mjs +0 -4
  238. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +0 -101
  239. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +0 -19
  240. package/esm2022/lib/feature/feature.module.mjs +0 -26
  241. package/esm2022/lib/feature/index.mjs +0 -5
  242. package/esm2022/lib/feature/shared/feature-store.utils.mjs +0 -27
  243. package/esm2022/lib/feature/shared/feature.enums.mjs +0 -9
  244. package/esm2022/lib/feature/shared/feature.interfaces.mjs +0 -2
  245. package/esm2022/lib/feature/shared/feature.utils.mjs +0 -332
  246. package/esm2022/lib/feature/shared/index.mjs +0 -8
  247. package/esm2022/lib/feature/shared/store.mjs +0 -143
  248. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +0 -216
  249. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +0 -116
  250. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +0 -99
  251. package/esm2022/lib/feature/shared/strategies/index.mjs +0 -8
  252. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +0 -103
  253. package/esm2022/lib/feature/shared/strategies/loading.mjs +0 -136
  254. package/esm2022/lib/feature/shared/strategies/search.mjs +0 -158
  255. package/esm2022/lib/feature/shared/strategies/selection.mjs +0 -384
  256. package/esm2022/lib/feature/shared/strategies.utils.mjs +0 -37
  257. package/esm2022/lib/filter/filter.module.mjs +0 -131
  258. package/esm2022/lib/filter/index.mjs +0 -17
  259. package/esm2022/lib/filter/ogc-filter-button/index.mjs +0 -2
  260. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +0 -141
  261. package/esm2022/lib/filter/ogc-filter-form/index.mjs +0 -2
  262. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +0 -325
  263. package/esm2022/lib/filter/ogc-filter-selection/index.mjs +0 -2
  264. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +0 -787
  265. package/esm2022/lib/filter/ogc-filter-time/index.mjs +0 -3
  266. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +0 -201
  267. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +0 -665
  268. package/esm2022/lib/filter/ogc-filterable-form/index.mjs +0 -2
  269. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +0 -66
  270. package/esm2022/lib/filter/ogc-filterable-item/index.mjs +0 -2
  271. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +0 -244
  272. package/esm2022/lib/filter/ogc-filterable-list/index.mjs +0 -3
  273. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +0 -37
  274. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +0 -32
  275. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +0 -56
  276. package/esm2022/lib/filter/shared/index.mjs +0 -12
  277. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +0 -72
  278. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +0 -30
  279. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +0 -2
  280. package/esm2022/lib/filter/shared/ogc-filter.mjs +0 -756
  281. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +0 -47
  282. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +0 -23
  283. package/esm2022/lib/filter/shared/spatial-filter.interface.mjs +0 -2
  284. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +0 -282
  285. package/esm2022/lib/filter/shared/time-filter.enum.mjs +0 -13
  286. package/esm2022/lib/filter/shared/time-filter.interface.mjs +0 -2
  287. package/esm2022/lib/filter/shared/time-filter.service.mjs +0 -107
  288. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/index.mjs +0 -2
  289. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +0 -875
  290. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/index.mjs +0 -2
  291. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +0 -197
  292. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/index.mjs +0 -2
  293. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +0 -126
  294. package/esm2022/lib/filter/time-filter-button/index.mjs +0 -2
  295. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +0 -70
  296. package/esm2022/lib/filter/time-filter-form/index.mjs +0 -2
  297. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +0 -534
  298. package/esm2022/lib/filter/time-filter-item/index.mjs +0 -2
  299. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +0 -90
  300. package/esm2022/lib/filter/time-filter-list/index.mjs +0 -3
  301. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +0 -37
  302. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +0 -35
  303. package/esm2022/lib/geo.module.mjs +0 -63
  304. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +0 -559
  305. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +0 -170
  306. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +0 -24
  307. package/esm2022/lib/geometry/geometry-form-field/index.mjs +0 -4
  308. package/esm2022/lib/geometry/geometry.module.mjs +0 -18
  309. package/esm2022/lib/geometry/index.mjs +0 -3
  310. package/esm2022/lib/geometry/shared/controls/draw.mjs +0 -340
  311. package/esm2022/lib/geometry/shared/controls/index.mjs +0 -4
  312. package/esm2022/lib/geometry/shared/controls/modify.mjs +0 -538
  313. package/esm2022/lib/geometry/shared/controls/slice.mjs +0 -190
  314. package/esm2022/lib/geometry/shared/geometry.errors.mjs +0 -24
  315. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +0 -2
  316. package/esm2022/lib/geometry/shared/geometry.utils.mjs +0 -113
  317. package/esm2022/lib/geometry/shared/index.mjs +0 -5
  318. package/esm2022/lib/import-export/export-button/export-button.component.mjs +0 -62
  319. package/esm2022/lib/import-export/export-button/index.mjs +0 -2
  320. package/esm2022/lib/import-export/import-export/import-export.component.mjs +0 -865
  321. package/esm2022/lib/import-export/import-export/index.mjs +0 -2
  322. package/esm2022/lib/import-export/import-export.module.mjs +0 -31
  323. package/esm2022/lib/import-export/index.mjs +0 -5
  324. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +0 -114
  325. package/esm2022/lib/import-export/shared/export.errors.mjs +0 -15
  326. package/esm2022/lib/import-export/shared/export.interface.mjs +0 -2
  327. package/esm2022/lib/import-export/shared/export.service.mjs +0 -375
  328. package/esm2022/lib/import-export/shared/export.type.mjs +0 -13
  329. package/esm2022/lib/import-export/shared/export.utils.mjs +0 -51
  330. package/esm2022/lib/import-export/shared/import.errors.mjs +0 -39
  331. package/esm2022/lib/import-export/shared/import.interface.mjs +0 -2
  332. package/esm2022/lib/import-export/shared/import.service.mjs +0 -221
  333. package/esm2022/lib/import-export/shared/import.utils.mjs +0 -203
  334. package/esm2022/lib/import-export/shared/index.mjs +0 -11
  335. package/esm2022/lib/layer/index.mjs +0 -11
  336. package/esm2022/lib/layer/layer-item/index.mjs +0 -2
  337. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +0 -281
  338. package/esm2022/lib/layer/layer-legend/index.mjs +0 -2
  339. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +0 -290
  340. package/esm2022/lib/layer/layer-legend-item/index.mjs +0 -2
  341. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +0 -85
  342. package/esm2022/lib/layer/layer-legend-list/index.mjs +0 -3
  343. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +0 -55
  344. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +0 -111
  345. package/esm2022/lib/layer/layer-list/index.mjs +0 -4
  346. package/esm2022/lib/layer/layer-list/layer-list-binding.directive.mjs +0 -70
  347. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +0 -841
  348. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +0 -19
  349. package/esm2022/lib/layer/layer-list-tool/index.mjs +0 -5
  350. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +0 -125
  351. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +0 -7
  352. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +0 -2
  353. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +0 -21
  354. package/esm2022/lib/layer/layer.module.mjs +0 -89
  355. package/esm2022/lib/layer/shared/clusterParam.mjs +0 -2
  356. package/esm2022/lib/layer/shared/index.mjs +0 -5
  357. package/esm2022/lib/layer/shared/layer.enums.mjs +0 -2
  358. package/esm2022/lib/layer/shared/layer.service.mjs +0 -300
  359. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +0 -2
  360. package/esm2022/lib/layer/shared/layers/any-layer.mjs +0 -2
  361. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +0 -2
  362. package/esm2022/lib/layer/shared/layers/image-layer.mjs +0 -70
  363. package/esm2022/lib/layer/shared/layers/index.mjs +0 -13
  364. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +0 -17
  365. package/esm2022/lib/layer/shared/layers/layer.mjs +0 -187
  366. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +0 -2
  367. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +0 -2
  368. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +0 -50
  369. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +0 -2
  370. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +0 -570
  371. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +0 -2
  372. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +0 -107
  373. package/esm2022/lib/layer/track-feature-button/index.mjs +0 -2
  374. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +0 -54
  375. package/esm2022/lib/layer/utils/image-watcher.mjs +0 -62
  376. package/esm2022/lib/layer/utils/index.mjs +0 -6
  377. package/esm2022/lib/layer/utils/layer.utils.mjs +0 -11
  378. package/esm2022/lib/layer/utils/outputLegend.mjs +0 -28
  379. package/esm2022/lib/layer/utils/tile-watcher.mjs +0 -52
  380. package/esm2022/lib/layer/utils/vector-watcher.mjs +0 -50
  381. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +0 -20
  382. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +0 -87
  383. package/esm2022/lib/map/baselayers-switcher/index.mjs +0 -3
  384. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +0 -120
  385. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +0 -78
  386. package/esm2022/lib/map/geolocate-button/index.mjs +0 -2
  387. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +0 -73
  388. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +0 -2
  389. package/esm2022/lib/map/home-extent-button/index.mjs +0 -3
  390. package/esm2022/lib/map/index.mjs +0 -14
  391. package/esm2022/lib/map/info-section/index.mjs +0 -2
  392. package/esm2022/lib/map/info-section/info-section.component.mjs +0 -15
  393. package/esm2022/lib/map/map-browser/index.mjs +0 -2
  394. package/esm2022/lib/map/map-browser/map-browser.component.mjs +0 -67
  395. package/esm2022/lib/map/map-center/index.mjs +0 -2
  396. package/esm2022/lib/map/map-center/map-center.component.mjs +0 -57
  397. package/esm2022/lib/map/map.module.mjs +0 -89
  398. package/esm2022/lib/map/menu-button/index.mjs +0 -2
  399. package/esm2022/lib/map/menu-button/menu-button.component.mjs +0 -57
  400. package/esm2022/lib/map/offline-button/index.mjs +0 -2
  401. package/esm2022/lib/map/offline-button/offline-button.component.mjs +0 -53
  402. package/esm2022/lib/map/rotation-button/index.mjs +0 -2
  403. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +0 -58
  404. package/esm2022/lib/map/shared/controllers/controller.mjs +0 -44
  405. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +0 -8
  406. package/esm2022/lib/map/shared/controllers/geolocation.mjs +0 -431
  407. package/esm2022/lib/map/shared/controllers/index.mjs +0 -5
  408. package/esm2022/lib/map/shared/controllers/view.mjs +0 -361
  409. package/esm2022/lib/map/shared/hover-feature.directive.mjs +0 -489
  410. package/esm2022/lib/map/shared/index.mjs +0 -15
  411. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +0 -248
  412. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +0 -122
  413. package/esm2022/lib/map/shared/map.abstract.mjs +0 -23
  414. package/esm2022/lib/map/shared/map.enums.mjs +0 -6
  415. package/esm2022/lib/map/shared/map.interface.mjs +0 -2
  416. package/esm2022/lib/map/shared/map.mjs +0 -437
  417. package/esm2022/lib/map/shared/map.service.mjs +0 -29
  418. package/esm2022/lib/map/shared/map.utils.mjs +0 -455
  419. package/esm2022/lib/map/shared/mapOffline.directive.mjs +0 -110
  420. package/esm2022/lib/map/shared/projection.interfaces.mjs +0 -2
  421. package/esm2022/lib/map/shared/projection.service.mjs +0 -67
  422. package/esm2022/lib/map/shared/projection.utils.mjs +0 -122
  423. package/esm2022/lib/map/swipe-control/index.mjs +0 -2
  424. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +0 -213
  425. package/esm2022/lib/map/utils/layer-watcher.mjs +0 -80
  426. package/esm2022/lib/map/wake-lock-button/index.mjs +0 -2
  427. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +0 -103
  428. package/esm2022/lib/map/zoom-button/index.mjs +0 -2
  429. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +0 -35
  430. package/esm2022/lib/measure/index.mjs +0 -3
  431. package/esm2022/lib/measure/measure.module.mjs +0 -20
  432. package/esm2022/lib/measure/measurer/index.mjs +0 -6
  433. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +0 -40
  434. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +0 -38
  435. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +0 -143
  436. package/esm2022/lib/measure/measurer/measurer.component.mjs +0 -966
  437. package/esm2022/lib/measure/measurer/measurer.module.mjs +0 -20
  438. package/esm2022/lib/measure/shared/index.mjs +0 -4
  439. package/esm2022/lib/measure/shared/measure.enum.mjs +0 -37
  440. package/esm2022/lib/measure/shared/measure.interfaces.mjs +0 -2
  441. package/esm2022/lib/measure/shared/measure.utils.mjs +0 -497
  442. package/esm2022/lib/metadata/index.mjs +0 -4
  443. package/esm2022/lib/metadata/metadata-button/index.mjs +0 -2
  444. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +0 -108
  445. package/esm2022/lib/metadata/metadata.module.mjs +0 -29
  446. package/esm2022/lib/metadata/shared/index.mjs +0 -3
  447. package/esm2022/lib/metadata/shared/metadata.interface.mjs +0 -2
  448. package/esm2022/lib/metadata/shared/metadata.service.mjs +0 -18
  449. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +0 -130
  450. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +0 -6
  451. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +0 -2
  452. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +0 -172
  453. package/esm2022/lib/offline/geoDB/index.mjs +0 -5
  454. package/esm2022/lib/offline/index.mjs +0 -6
  455. package/esm2022/lib/offline/layerDB/index.mjs +0 -3
  456. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +0 -2
  457. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +0 -83
  458. package/esm2022/lib/offline/offline.interface.mjs +0 -2
  459. package/esm2022/lib/offline/offline.provider.mjs +0 -51
  460. package/esm2022/lib/offline/shared/geo-network.service.mjs +0 -79
  461. package/esm2022/lib/offline/shared/index.mjs +0 -2
  462. package/esm2022/lib/overlay/index.mjs +0 -2
  463. package/esm2022/lib/overlay/shared/index.mjs +0 -4
  464. package/esm2022/lib/overlay/shared/overlay.enum.mjs +0 -8
  465. package/esm2022/lib/overlay/shared/overlay.mjs +0 -139
  466. package/esm2022/lib/overlay/shared/overlay.utils.mjs +0 -17
  467. package/esm2022/lib/print/index.mjs +0 -4
  468. package/esm2022/lib/print/print/print.component.mjs +0 -116
  469. package/esm2022/lib/print/print-form/index.mjs +0 -2
  470. package/esm2022/lib/print/print-form/print-form.component.mjs +0 -320
  471. package/esm2022/lib/print/print.module.mjs +0 -20
  472. package/esm2022/lib/print/shared/geopdf.mjs +0 -68
  473. package/esm2022/lib/print/shared/index.mjs +0 -5
  474. package/esm2022/lib/print/shared/print.interface.mjs +0 -2
  475. package/esm2022/lib/print/shared/print.service.mjs +0 -1136
  476. package/esm2022/lib/print/shared/print.type.mjs +0 -30
  477. package/esm2022/lib/query/index.mjs +0 -2
  478. package/esm2022/lib/query/query.module.mjs +0 -27
  479. package/esm2022/lib/query/shared/index.mjs +0 -8
  480. package/esm2022/lib/query/shared/query-search-source.mjs +0 -35
  481. package/esm2022/lib/query/shared/query-search-source.providers.mjs +0 -22
  482. package/esm2022/lib/query/shared/query.directive.mjs +0 -286
  483. package/esm2022/lib/query/shared/query.enums.mjs +0 -32
  484. package/esm2022/lib/query/shared/query.interfaces.mjs +0 -2
  485. package/esm2022/lib/query/shared/query.service.mjs +0 -753
  486. package/esm2022/lib/query/shared/query.utils.mjs +0 -41
  487. package/esm2022/lib/search/index.mjs +0 -10
  488. package/esm2022/lib/search/search-bar/search-bar.component.mjs +0 -483
  489. package/esm2022/lib/search/search-bar/search-bar.module.mjs +0 -19
  490. package/esm2022/lib/search/search-results/index.mjs +0 -5
  491. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +0 -101
  492. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +0 -427
  493. package/esm2022/lib/search/search-results/search-results-item.component.mjs +0 -119
  494. package/esm2022/lib/search/search-results/search-results.component.mjs +0 -297
  495. package/esm2022/lib/search/search-results/search-results.directive.mjs +0 -7
  496. package/esm2022/lib/search/search-results/search-results.module.mjs +0 -20
  497. package/esm2022/lib/search/search-selector/search-selector.component.mjs +0 -118
  498. package/esm2022/lib/search/search-selector/search-selector.module.mjs +0 -19
  499. package/esm2022/lib/search/search-settings/search-settings.component.mjs +0 -264
  500. package/esm2022/lib/search/search-settings/search-settings.module.mjs +0 -19
  501. package/esm2022/lib/search/search.module.mjs +0 -77
  502. package/esm2022/lib/search/shared/index.mjs +0 -10
  503. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +0 -337
  504. package/esm2022/lib/search/shared/search-source-service.providers.mjs +0 -20
  505. package/esm2022/lib/search/shared/search-source.service.mjs +0 -56
  506. package/esm2022/lib/search/shared/search.enums.mjs +0 -4
  507. package/esm2022/lib/search/shared/search.interfaces.mjs +0 -2
  508. package/esm2022/lib/search/shared/search.provider.mjs +0 -20
  509. package/esm2022/lib/search/shared/search.service.mjs +0 -149
  510. package/esm2022/lib/search/shared/search.utils.mjs +0 -92
  511. package/esm2022/lib/search/shared/sources/cadastre.mjs +0 -142
  512. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +0 -32
  513. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +0 -2
  514. package/esm2022/lib/search/shared/sources/coordinates.mjs +0 -168
  515. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +0 -52
  516. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +0 -32
  517. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +0 -2
  518. package/esm2022/lib/search/shared/sources/icherche.mjs +0 -816
  519. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +0 -87
  520. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +0 -2
  521. package/esm2022/lib/search/shared/sources/ilayer.mjs +0 -339
  522. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +0 -58
  523. package/esm2022/lib/search/shared/sources/index.mjs +0 -23
  524. package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +0 -2
  525. package/esm2022/lib/search/shared/sources/nominatim.mjs +0 -263
  526. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +0 -31
  527. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +0 -13
  528. package/esm2022/lib/search/shared/sources/source.mjs +0 -221
  529. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +0 -2
  530. package/esm2022/lib/search/shared/sources/storedqueries.mjs +0 -454
  531. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +0 -56
  532. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +0 -2
  533. package/esm2022/lib/search/shared/sources/workspace.mjs +0 -192
  534. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +0 -31
  535. package/esm2022/lib/style/index.mjs +0 -5
  536. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +0 -360
  537. package/esm2022/lib/style/shared/datasource/index.mjs +0 -2
  538. package/esm2022/lib/style/shared/feature/feature-style.mjs +0 -162
  539. package/esm2022/lib/style/shared/feature/index.mjs +0 -2
  540. package/esm2022/lib/style/shared/font.enum.mjs +0 -17
  541. package/esm2022/lib/style/shared/index.mjs +0 -5
  542. package/esm2022/lib/style/shared/overlay/index.mjs +0 -3
  543. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +0 -39
  544. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +0 -88
  545. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +0 -78
  546. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +0 -27
  547. package/esm2022/lib/style/shared/vector/index.mjs +0 -4
  548. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +0 -2
  549. package/esm2022/lib/style/style-list/index.mjs +0 -5
  550. package/esm2022/lib/style/style-list/style-list.interface.mjs +0 -2
  551. package/esm2022/lib/style/style-list/style-list.module.mjs +0 -23
  552. package/esm2022/lib/style/style-list/style-list.provider.mjs +0 -21
  553. package/esm2022/lib/style/style-list/style-list.service.mjs +0 -52
  554. package/esm2022/lib/style/style-modal/drawing/index.mjs +0 -2
  555. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +0 -193
  556. package/esm2022/lib/style/style-modal/index.mjs +0 -5
  557. package/esm2022/lib/style/style-modal/layer/index.mjs +0 -2
  558. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +0 -142
  559. package/esm2022/lib/style/style-modal/layer-button/index.mjs +0 -2
  560. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +0 -44
  561. package/esm2022/lib/style/style-modal/shared/index.mjs +0 -2
  562. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +0 -2
  563. package/esm2022/lib/style/style-service/draw-style.service.mjs +0 -255
  564. package/esm2022/lib/style/style-service/index.mjs +0 -3
  565. package/esm2022/lib/style/style-service/style.service.mjs +0 -393
  566. package/esm2022/lib/style/style.module.mjs +0 -46
  567. package/esm2022/lib/toast/index.mjs +0 -2
  568. package/esm2022/lib/toast/toast.component.mjs +0 -99
  569. package/esm2022/lib/toast/toast.module.mjs +0 -24
  570. package/esm2022/lib/utils/googleLinks.mjs +0 -13
  571. package/esm2022/lib/utils/id-generator.mjs +0 -112
  572. package/esm2022/lib/utils/index.mjs +0 -5
  573. package/esm2022/lib/utils/osmLinks.mjs +0 -9
  574. package/esm2022/lib/utils/propertyTypeDetector/index.mjs +0 -3
  575. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +0 -2
  576. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +0 -64
  577. package/esm2022/lib/wkt/index.mjs +0 -2
  578. package/esm2022/lib/wkt/shared/index.mjs +0 -2
  579. package/esm2022/lib/wkt/shared/wkt.service.mjs +0 -235
  580. package/esm2022/lib/wkt/wkt.module.mjs +0 -25
  581. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +0 -36
  582. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +0 -19
  583. package/esm2022/lib/workspace/confirmation-popup/index.mjs +0 -3
  584. package/esm2022/lib/workspace/index.mjs +0 -8
  585. package/esm2022/lib/workspace/shared/edition-workspace.mjs +0 -299
  586. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +0 -718
  587. package/esm2022/lib/workspace/shared/feature-workspace.mjs +0 -41
  588. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +0 -113
  589. package/esm2022/lib/workspace/shared/index.mjs +0 -8
  590. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +0 -41
  591. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +0 -106
  592. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +0 -230
  593. package/esm2022/lib/workspace/shared/workspace.utils.mjs +0 -185
  594. package/esm2022/lib/workspace/widgets/index.mjs +0 -4
  595. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +0 -48
  596. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +0 -19
  597. package/esm2022/lib/workspace/widgets/widgets.mjs +0 -15
  598. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +0 -168
  599. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +0 -19
  600. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +0 -136
  601. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +0 -19
  602. package/esm2022/lib/workspace/workspace.module.mjs +0 -32
  603. package/esm2022/public_api.mjs +0 -56
  604. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +0 -19
  605. package/lib/layer/layer-list/layer-list.enum.d.ts +0 -15
  606. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +0 -5
  607. package/src/lib/layer/layer-legend/layer-legend.theming.scss +0 -10
@@ -1,455 +0,0 @@
1
- import { NumberUtils } from '@igo2/utils';
2
- import { MAC } from 'ol/has';
3
- import * as olproj from 'ol/proj';
4
- /**
5
- * This method extracts a coordinate tuple from a string.
6
- * @param str Any string
7
- * @param mapProjection string Map Projection
8
- * @param opts.forceNA boolean Force North America Zone
9
- * @returns object:
10
- * lonLat: Coordinate,
11
- * message: Message of error,
12
- * radius: radius of the confience of coordinate,
13
- * conf: confidence of the coordinate}
14
- */
15
- export function stringToLonLat(str, mapProjection, opts = {}) {
16
- let lonLat;
17
- let coordStr;
18
- let negativeLon;
19
- let degreesLon;
20
- let minutesLon;
21
- let secondsLon;
22
- let directionLon;
23
- let decimalLon;
24
- let negativeLat;
25
- let degreesLat;
26
- let minutesLat;
27
- let secondsLat;
28
- let directionLat;
29
- let decimalLat;
30
- let zone;
31
- let radius;
32
- let conf;
33
- let lon;
34
- let lat;
35
- const projectionPattern = '(\\s*;\\s*[\\d]{4,6})';
36
- const toProjection = '4326';
37
- let projectionStr;
38
- const projectionRegex = new RegExp(projectionPattern, 'g');
39
- const lonlatCoord = '([-+])?([\\d]{1,3})([,.](\\d+))?';
40
- const lonLatPattern = `${lonlatCoord}[\\s,]+${lonlatCoord}`;
41
- const lonLatRegex = new RegExp(`^${lonLatPattern}$`, 'g');
42
- const dmsCoord = '([0-9]{1,2})[:|°]?\\s*([0-9]{1,2})?[:|\'|′|’]?\\s*([0-9]{1,2}(?:.[0-9]+){0,1})?\\s*["|″|”]?\\s*';
43
- const dmsCoordPattern = `${dmsCoord}([N|S|E|W|O]),?\\s*${dmsCoord}([N|S|E|W|O])`;
44
- const dmsRegex = new RegExp(`^${dmsCoordPattern}$`, 'gi');
45
- const patternUtm = '(UTM)-?(\\d{1,2})[\\s,]*(\\d+[.,]?\\d+)[\\s,]+(\\d+[.,]?\\d+)';
46
- const utmRegex = new RegExp(`^${patternUtm}`, 'gi');
47
- const patternMtm = '(MTM)-?(\\d{1,2})[\\s,]*(\\d+[.,]?\\d+)[\\s,]+(\\d+[.,]?\\d+)';
48
- const mtmRegex = new RegExp(`^${patternMtm}`, 'gi');
49
- const ddCoord = '([-+])?(\\d{1,3})[,.](\\d+)';
50
- const patternDd = `${ddCoord}\\s*[,]?\\s*${ddCoord}`;
51
- const ddRegex = new RegExp(`^${patternDd}`, 'g');
52
- const dmdCoord = '([-+])?(\\d{1,3})[\\s,.]{1}(\\d{1,2})[\\s,.]{1}(\\d{1,2})[.,]?(\\d{1,5})?';
53
- const patternDmd = `${dmdCoord}\\s*[,.]?\\s*${dmdCoord}`;
54
- const dmdRegex = new RegExp(`^${patternDmd}`, 'g');
55
- const patternBELL = 'LAT\\s*[\\s:]*\\s*([-+])?(\\d{1,2})[\\s.,]?(\\d+)?[\\s.,]?\\s*(\\d{1,2}([.,]\\d+)?)?\\s*(N|S|E|W)?\\s*LONG\\s*[\\s:]*\\s*([-+])?(\\d{1,3})[\\s.,]?(\\d+)?[\\s.,]?\\s*(\\d{1,2}([.,]\\d+)?)?\\s*(N|S|E|W)?\\s*UNC\\s*[\\s:]?\\s*(\\d+)\\s*CONF\\s*[\\s:]?\\s*(\\d{1,3})';
56
- const bellRegex = new RegExp(`^${patternBELL}?`, 'gi');
57
- const mmCoord = '([-+]?\\d+)[,.]?(\\d+)?';
58
- const mmPattern = `${mmCoord}[\\s,]+${mmCoord}`;
59
- const mmRegex = new RegExp(`^${mmPattern}$`, 'g');
60
- let isXYCoords = false;
61
- str = str.toLocaleUpperCase().trim();
62
- // Extract projection
63
- if (projectionRegex.test(str)) {
64
- [coordStr, projectionStr] = str.split(';').map((s) => s.trim());
65
- }
66
- else {
67
- coordStr = str;
68
- }
69
- if (lonLatRegex.test(coordStr)) {
70
- [, negativeLon, lon, , decimalLon, negativeLat, lat, , decimalLat] =
71
- coordStr.match(lonLatPattern);
72
- lon = parseFloat((negativeLon ? negativeLon : '') + lon + '.' + decimalLon);
73
- lat = parseFloat((negativeLat ? negativeLat : '') + lat + '.' + decimalLat);
74
- }
75
- else if (dmsRegex.test(coordStr)) {
76
- [
77
- ,
78
- degreesLon,
79
- minutesLon,
80
- secondsLon,
81
- directionLon,
82
- degreesLat,
83
- minutesLat,
84
- secondsLat,
85
- directionLat
86
- ] = coordStr.match(dmsCoordPattern);
87
- if (directionLon === 'S' || directionLon === 'N') {
88
- degreesLon = [degreesLat, (degreesLat = degreesLon)][0];
89
- minutesLon = [minutesLat, (minutesLat = minutesLon)][0];
90
- secondsLon = [secondsLat, (secondsLat = secondsLon)][0];
91
- directionLon = [directionLat, (directionLat = directionLon)][0];
92
- }
93
- lon = convertDMSToDD(parseFloat(degreesLon), parseFloat(minutesLon), parseFloat(secondsLon), directionLon);
94
- lat = convertDMSToDD(parseFloat(degreesLat), parseFloat(minutesLat), parseFloat(secondsLat), directionLat);
95
- }
96
- else if (utmRegex.test(coordStr)) {
97
- isXYCoords = true;
98
- [, , zone, lon, lat] = coordStr.match(patternUtm);
99
- const epsgUtm = Number(zone) < 10 ? `EPSG:3260${zone}` : `EPSG:326${zone}`;
100
- [lon, lat] = olproj.transform([parseFloat(lon), parseFloat(lat)], epsgUtm, 'EPSG:4326');
101
- }
102
- else if (mtmRegex.test(coordStr)) {
103
- isXYCoords = true;
104
- [, , zone, lon, lat] = coordStr.match(patternMtm);
105
- const epsgMtm = Number(zone) < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + Number(zone)}`;
106
- [lon, lat] = olproj.transform([parseFloat(lon), parseFloat(lat)], epsgMtm, 'EPSG:4326');
107
- }
108
- else if (dmdRegex.test(coordStr)) {
109
- [
110
- ,
111
- negativeLon,
112
- degreesLon,
113
- minutesLon,
114
- secondsLon,
115
- decimalLon,
116
- negativeLat,
117
- degreesLat,
118
- minutesLat,
119
- secondsLat,
120
- decimalLat
121
- ] = coordStr.match(patternDmd);
122
- lon = convertDMSToDD(parseFloat((negativeLon ? negativeLon : '') + degreesLon), parseFloat(minutesLon), parseFloat(secondsLon), directionLon);
123
- lat = convertDMSToDD(parseFloat((negativeLat ? negativeLat : '') + degreesLat), parseFloat(minutesLat), parseFloat(secondsLat), directionLat);
124
- }
125
- else if (ddRegex.test(coordStr)) {
126
- [
127
- ,
128
- negativeLon,
129
- degreesLon,
130
- decimalLon,
131
- negativeLat,
132
- degreesLat,
133
- decimalLat
134
- ] = coordStr.match(patternDd);
135
- lon = convertDMSToDD(parseFloat((negativeLon ? negativeLon : '') + degreesLon), parseFloat(minutesLon), parseFloat(secondsLon), directionLon);
136
- lat = convertDMSToDD(parseFloat((negativeLat ? negativeLat : '') + degreesLat), parseFloat(minutesLat), parseFloat(secondsLat), directionLat);
137
- }
138
- else if (bellRegex.test(coordStr)) {
139
- [
140
- ,
141
- negativeLat,
142
- degreesLat,
143
- minutesLat,
144
- secondsLat,
145
- ,
146
- directionLat,
147
- negativeLon,
148
- degreesLon,
149
- minutesLon,
150
- secondsLon,
151
- ,
152
- directionLon,
153
- radius,
154
- conf
155
- ] = coordStr.match(patternBELL);
156
- // Set default value for North America
157
- if (!directionLon) {
158
- directionLon = 'W';
159
- }
160
- // Check if real minutes or decimals
161
- if (minutesLon && minutesLon.length > 2) {
162
- lon = parseFloat((negativeLon ? negativeLon : '') + degreesLon + '.' + minutesLon);
163
- }
164
- else {
165
- lon = convertDMSToDD(parseFloat(degreesLon), parseFloat(minutesLon), parseFloat(secondsLon), directionLon);
166
- }
167
- if (minutesLat && minutesLat.length > 2) {
168
- lat = parseFloat((negativeLat ? negativeLat : '') + degreesLat + '.' + minutesLat);
169
- }
170
- else {
171
- lat = convertDMSToDD(parseFloat(degreesLat), parseFloat(minutesLat), parseFloat(secondsLat), directionLat);
172
- }
173
- }
174
- else if (mmRegex.test(coordStr)) {
175
- isXYCoords = true;
176
- [, lon, decimalLon, lat, decimalLat] = coordStr.match(mmPattern);
177
- if (decimalLon) {
178
- lon = parseFloat(lon + '.' + decimalLon);
179
- }
180
- if (decimalLat) {
181
- lat = parseFloat(lat + '.' + decimalLat);
182
- }
183
- }
184
- else {
185
- return {
186
- lonLat: undefined,
187
- message: '',
188
- radius: undefined,
189
- conf: undefined
190
- };
191
- }
192
- if (opts.forceNA && !isXYCoords) {
193
- // Set a negative coordinate for North America zone
194
- if (lon > 0 && lat > 0) {
195
- if (lon > lat) {
196
- lon = -lon;
197
- }
198
- else {
199
- lat = -lat;
200
- }
201
- }
202
- // Reverse coordinate to respect lonLat convention
203
- if (lon > lat) {
204
- lon = [lat, (lat = lon)][0];
205
- }
206
- }
207
- lonLat = [Number(lon), Number(lat)];
208
- // Reproject the coordinate if projection parameter have been set and coord is not 4326
209
- if ((projectionStr !== undefined && projectionStr !== toProjection) ||
210
- lonLat[0] > 180 ||
211
- lonLat[0] < -180 ||
212
- lonLat[1] > 90 ||
213
- lonLat[1] < -90) {
214
- const source = projectionStr ? 'EPSG:' + projectionStr : mapProjection;
215
- const dest = 'EPSG:' + toProjection;
216
- try {
217
- lonLat = olproj.transform(lonLat, source, dest);
218
- }
219
- catch {
220
- return {
221
- lonLat: undefined,
222
- message: 'Projection ' + source + ' not supported',
223
- radius: undefined,
224
- conf: undefined
225
- };
226
- }
227
- }
228
- if (Math.abs(lonLat[0]) <= 180 && Math.abs(lonLat[1]) <= 90) {
229
- return {
230
- lonLat,
231
- message: '',
232
- radius: radius ? parseInt(radius, 10) : undefined,
233
- conf: conf ? parseInt(conf, 10) : undefined
234
- };
235
- }
236
- else {
237
- return {
238
- lonLat: undefined,
239
- message: 'Coordinate out of Longitude/Latitude bounds',
240
- radius: undefined,
241
- conf: undefined
242
- };
243
- }
244
- }
245
- /**
246
- * Convert degrees minutes seconds to dd
247
- * @param degrees Degrees
248
- * @param minutes Minutes
249
- * @param seconds Seconds
250
- * @param direction Direction
251
- */
252
- function convertDMSToDD(degrees, minutes, seconds, direction) {
253
- minutes = minutes || 0;
254
- seconds = seconds || 0;
255
- const neg = degrees < 0;
256
- let dd = Math.abs(degrees) + minutes / 60 + seconds / 3600;
257
- if (neg || direction === 'S' || direction === 'W') {
258
- dd = -dd;
259
- } // Don't do anything for N or E
260
- return dd;
261
- }
262
- /**
263
- * Convert dd to degrees minutes seconds
264
- * @param lonLatDD longitude and latitude in dd
265
- * @param decimal number of decimals for seconds
266
- * @returns longitude and latitude in dms
267
- */
268
- export function convertDDToDMS(lonLatDD, decimal = 3) {
269
- const lonLatDMS = [];
270
- lonLatDD.forEach((dd) => {
271
- const degrees = dd < 0 ? Math.ceil(dd) : Math.floor(dd);
272
- const int = dd < 0 ? (degrees - dd) * 60 : (dd - degrees) * 60;
273
- const minutes = Math.floor(int);
274
- const seconds = ((int - minutes) * 60).toFixed(decimal);
275
- lonLatDMS.push(`${degrees}° ${minutes}' ${seconds}"`);
276
- });
277
- return lonLatDMS;
278
- }
279
- /**
280
- * Return true of two view states are equal.
281
- * @param state1 View state
282
- * @param state2 View state
283
- * @returns True if the view states are equal
284
- */
285
- export function viewStatesAreEqual(state1, state2) {
286
- if (state1 === undefined || state2 === undefined) {
287
- return false;
288
- }
289
- const tolerance = 1 / 10000;
290
- return (state1.zoom === state2.zoom &&
291
- Math.trunc(state1.center[0] / tolerance) ===
292
- Math.trunc(state2.center[0] / tolerance) &&
293
- Math.trunc(state1.center[1] / tolerance) ===
294
- Math.trunc(state2.center[1] / tolerance));
295
- }
296
- /**
297
- * Format the scale to a human readable text
298
- * @param Scale of the map
299
- * @returns Human readable scale text
300
- */
301
- export function formatScale(scale) {
302
- scale = Math.round(scale);
303
- if (scale < 10000) {
304
- return scale + '';
305
- }
306
- scale = Math.round(scale / 1000);
307
- if (scale < 1000) {
308
- return scale + 'K';
309
- }
310
- scale = Math.round(scale / 1000);
311
- return scale + 'M';
312
- }
313
- /**
314
- * Return the resolution from a scale denom
315
- * @param scale Scale denom
316
- * @param dpi DPI
317
- * @returns Resolution
318
- */
319
- export function getResolutionFromScale(scale, dpi = 96) {
320
- const inchesPerMeter = 39.3701;
321
- return scale / (inchesPerMeter * dpi);
322
- }
323
- /**
324
- * Return the resolution from a scale denom
325
- * @param Scale denom
326
- * @returns Resolution
327
- */
328
- export function getScaleFromResolution(resolution, unit = 'm', dpi = 96) {
329
- const inchesPerMeter = 39.3701;
330
- return resolution * olproj.METERS_PER_UNIT[unit] * inchesPerMeter * dpi;
331
- }
332
- /**
333
- * Returns true if the CTRL key is pushed during an Ol MapBrowserPointerEvent
334
- * @param event OL MapBrowserPointerEvent
335
- * @returns Whether the CTRL key is pushed
336
- */
337
- export function ctrlKeyDown(event) {
338
- const originalEvent = event.originalEvent;
339
- return (!originalEvent.altKey &&
340
- (MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&
341
- !originalEvent.shiftKey);
342
- }
343
- export function roundCoordTo(coord, decimal = 3) {
344
- return [
345
- NumberUtils.roundToNDecimal(coord[0], decimal),
346
- NumberUtils.roundToNDecimal(coord[1], decimal)
347
- ];
348
- }
349
- export function roundCoordToString(coord, decimal = 3) {
350
- return roundCoordTo(coord, decimal).map((r) => r.toString());
351
- }
352
- /**
353
- * Returns an array of converted coordinates.
354
- * Conversion is done for every configured projections
355
- * and for the current UTM zone and MTM zone.
356
- * @param lonLat [number, number] array of the coordinate to transform.
357
- * @param projections Projection[] Array of destination projection.
358
- * @param reverseCoords To reverse coords from latLon to lonLat (search option)
359
- * @returns Returns an array of converted coordinates.
360
- */
361
- export function lonLatConversion(lonLat, projections) {
362
- const rawCoord3857 = olproj.transform(lonLat, 'EPSG:4326', 'EPSG:3857');
363
- const convertedLonLat = [
364
- {
365
- code: 'EPSG:3857',
366
- alias: 'Web Mercator',
367
- coord: rawCoord3857,
368
- igo2CoordFormat: `${roundCoordTo(rawCoord3857).join(', ')} ; 3857`
369
- }
370
- ];
371
- // detect the current utm zone.
372
- const utmZone = utmZoneFromLonLat(lonLat);
373
- const epsgUtm = utmZone < 10 ? `EPSG:3260${utmZone}` : `EPSG:326${utmZone}`;
374
- const utmName = `UTM-${utmZone}`;
375
- const rawCoordUtm = olproj.transform(lonLat, 'EPSG:4326', epsgUtm);
376
- convertedLonLat.push({
377
- code: epsgUtm,
378
- alias: 'UTM',
379
- coord: rawCoordUtm,
380
- igo2CoordFormat: `${utmName} ${roundCoordTo(rawCoordUtm).join(', ')}`
381
- });
382
- // detect the current mtm zone.
383
- const mtmZone = mtmZoneFromLonLat(lonLat);
384
- if (mtmZone) {
385
- const epsgMtm = mtmZone < 10 ? `EPSG:3218${mtmZone}` : `EPSG:321${80 + mtmZone}`;
386
- const mtmName = `MTM-${mtmZone}`;
387
- const rawCoordMtm = olproj.transform(lonLat, 'EPSG:4326', epsgMtm);
388
- convertedLonLat.push({
389
- code: epsgMtm,
390
- alias: 'MTM',
391
- coord: rawCoordMtm,
392
- igo2CoordFormat: `${mtmName} ${roundCoordTo(rawCoordMtm).join(', ')}`
393
- });
394
- }
395
- projections.forEach((projection) => {
396
- const rawCoord = olproj.transform(lonLat, 'EPSG:4326', projection.code);
397
- const numericEpsgCode = projection.code.split(':')[1];
398
- convertedLonLat.push({
399
- code: projection.code,
400
- alias: projection.alias || projection.code,
401
- coord: rawCoord,
402
- igo2CoordFormat: `${roundCoordTo(rawCoord).join(', ')} ; ${numericEpsgCode}`
403
- });
404
- });
405
- return convertedLonLat;
406
- }
407
- /**
408
- * Detect the current utm zone of the lon/lat coordinate.
409
- * @param lonLat [number, number] array of the coordinate to detect the UTM zone.
410
- * @returns number The UTM zone.
411
- */
412
- export function utmZoneFromLonLat(lonLat) {
413
- return Math.ceil((lonLat[0] + 180) / 6);
414
- }
415
- /**
416
- * Detect the current mtm zone of the lon/lat coordinate.
417
- * @param lonLat [number, number] array of the coordinate to detect the MTM zone.
418
- * @returns number The MTM zone. Undefined if outside of the mtm application zone.
419
- */
420
- export function mtmZoneFromLonLat(lonLat) {
421
- const long = lonLat[0];
422
- let mtmZone;
423
- if (long < -51 && long > -54) {
424
- mtmZone = 1;
425
- }
426
- if (long < -54 && long > -57) {
427
- mtmZone = 2;
428
- }
429
- if (long < -57 && long > -60) {
430
- mtmZone = 3;
431
- }
432
- if (long < -60 && long > -63) {
433
- mtmZone = 4;
434
- }
435
- if (long < -63 && long > -66) {
436
- mtmZone = 5;
437
- }
438
- if (long < -66 && long > -69) {
439
- mtmZone = 6;
440
- }
441
- if (long < -69 && long > -72) {
442
- mtmZone = 7;
443
- }
444
- if (long < -72 && long > -75) {
445
- mtmZone = 8;
446
- }
447
- if (long < -75 && long > -78) {
448
- mtmZone = 9;
449
- }
450
- if (long < -78 && long > -81) {
451
- mtmZone = 10;
452
- }
453
- return mtmZone;
454
- }
455
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbWFwL3NoYXJlZC9tYXAudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUcxQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBS2xDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixHQUFXLEVBQ1gsYUFBcUIsRUFDckIsT0FBOEIsRUFBRTtJQU9oQyxJQUFJLE1BQXdCLENBQUM7SUFDN0IsSUFBSSxRQUFnQixDQUFDO0lBQ3JCLElBQUksV0FBbUIsQ0FBQztJQUN4QixJQUFJLFVBQWtCLENBQUM7SUFDdkIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBa0IsQ0FBQztJQUN2QixJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksV0FBbUIsQ0FBQztJQUN4QixJQUFJLFVBQWtCLENBQUM7SUFDdkIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBa0IsQ0FBQztJQUN2QixJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksSUFBWSxDQUFDO0lBQ2pCLElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksSUFBWSxDQUFDO0lBQ2pCLElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxHQUFRLENBQUM7SUFFYixNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDO0lBQ2xELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUM1QixJQUFJLGFBQXFCLENBQUM7SUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxD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LENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbkMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDLEVBQUUsQUFBRCxFQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1FBQzNFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQzNCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNsQyxPQUFPLEVBQ1AsV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbkMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDLEVBQUUsQUFBRCxFQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsRCxNQUFNLE9BQU8sR0FDWCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUMzQixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDbEMsT0FBTyxFQUNQLFdB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R0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0IsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0IsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTnVtYmVyVXRpbHMgfSBmcm9tICdAaWdvMi91dGlscyc7XG5cbmltcG9ydCBNYXBCcm93c2VyUG9pbnRlckV2ZW50IGZyb20gJ29sL01hcEJyb3dzZXJFdmVudCc7XG5pbXBvcnQgeyBNQUMgfSBmcm9tICdvbC9oYXMnO1xuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xuXG5pbXBvcnQgeyBNYXBWaWV3U3RhdGUgfSBmcm9tICcuL21hcC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUHJvamVjdGlvbiB9IGZyb20gJy4vcHJvamVjdGlvbi5pbnRlcmZhY2VzJztcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBleHRyYWN0cyBhIGNvb3JkaW5hdGUgdHVwbGUgZnJvbSBhIHN0cmluZy5cbiAqIEBwYXJhbSBzdHIgQW55IHN0cmluZ1xuICogQHBhcmFtIG1hcFByb2plY3Rpb24gc3RyaW5nIE1hcCBQcm9qZWN0aW9uXG4gKiBAcGFyYW0gb3B0cy5mb3JjZU5BIGJvb2xlYW4gRm9yY2UgTm9ydGggQW1lcmljYSBab25lXG4gKiBAcmV0dXJucyBvYmplY3Q6XG4gKiAgICAgICAgICAgICBsb25MYXQ6IENvb3JkaW5hdGUsXG4gKiAgICAgICAgICAgICBtZXNzYWdlOiBNZXNzYWdlIG9mIGVycm9yLFxuICogICAgICAgICAgICAgcmFkaXVzOiByYWRpdXMgb2YgdGhlIGNvbmZpZW5jZSBvZiBjb29yZGluYXRlLFxuICogICAgICAgICAgICAgY29uZjogY29uZmlkZW5jZSBvZiB0aGUgY29vcmRpbmF0ZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvTG9uTGF0KFxuICBzdHI6IHN0cmluZyxcbiAgbWFwUHJvamVjdGlvbjogc3RyaW5nLFxuICBvcHRzOiB7IGZvcmNlTkE/OiBib29sZWFuIH0gPSB7fVxuKToge1xuICBsb25MYXQ6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcmFkaXVzOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGNvbmY6IG51bWJlciB8IHVuZGVmaW5lZDtcbn0ge1xuICBsZXQgbG9uTGF0OiBbbnVtYmVyLCBudW1iZXJdO1xuICBsZXQgY29vcmRTdHI6IHN0cmluZztcbiAgbGV0IG5lZ2F0aXZlTG9uOiBzdHJpbmc7XG4gIGxldCBkZWdyZWVzTG9uOiBzdHJpbmc7XG4gIGxldCBtaW51dGVzTG9uOiBzdHJpbmc7XG4gIGxldCBzZWNvbmRzTG9uOiBzdHJpbmc7XG4gIGxldCBkaXJlY3Rpb25Mb246IHN0cmluZztcbiAgbGV0IGRlY2ltYWxMb246IHN0cmluZztcbiAgbGV0IG5lZ2F0aXZlTGF0OiBzdHJpbmc7XG4gIGxldCBkZWdyZWVzTGF0OiBzdHJpbmc7XG4gIGxldCBtaW51dGVzTGF0OiBzdHJpbmc7XG4gIGxldCBzZWNvbmRzTGF0OiBzdHJpbmc7XG4gIGxldCBkaXJlY3Rpb25MYXQ6IHN0cmluZztcbiAgbGV0IGRlY2ltYWxMYXQ6IHN0cmluZztcbiAgbGV0IHpvbmU6IHN0cmluZztcbiAgbGV0IHJhZGl1czogc3RyaW5nO1xuICBsZXQgY29uZjogc3RyaW5nO1xuICBsZXQgbG9uOiBhbnk7XG4gIGxldCBsYXQ6IGFueTtcblxuICBjb25zdCBwcm9qZWN0aW9uUGF0dGVybiA9ICcoXFxcXHMqO1xcXFxzKltcXFxcZF17NCw2fSknO1xuICBjb25zdCB0b1Byb2plY3Rpb24gPSAnNDMyNic7XG4gIGxldCBwcm9qZWN0aW9uU3RyOiBzdHJpbmc7XG4gIGNvbnN0IHByb2plY3Rpb25SZWdleCA9IG5ldyBSZWdFeHAocHJvamVjdGlvblBhdHRlcm4sICdnJyk7XG5cbiAgY29uc3QgbG9ubGF0Q29vcmQgPSAnKFstK10pPyhbXFxcXGRdezEsM30pKFssLl0oXFxcXGQrKSk/JztcbiAgY29uc3QgbG9uTGF0UGF0dGVybiA9IGAke2xvbmxhdENvb3JkfVtcXFxccyxdKyR7bG9ubGF0Q29vcmR9YDtcbiAgY29uc3QgbG9uTGF0UmVnZXggPSBuZXcgUmVnRXhwKGBeJHtsb25MYXRQYXR0ZXJufSRgLCAnZycpO1xuXG4gIGNvbnN0IGRtc0Nvb3JkID1cbiAgICAnKFswLTldezEsMn0pWzp8wrBdP1xcXFxzKihbMC05XXsxLDJ9KT9bOnxcXCd84oCyfOKAmV0/XFxcXHMqKFswLTldezEsMn0oPzouWzAtOV0rKXswLDF9KT9cXFxccypbXCJ84oCzfOKAnV0/XFxcXHMqJztcbiAgY29uc3QgZG1zQ29vcmRQYXR0ZXJuID0gYCR7ZG1zQ29vcmR9KFtOfFN8RXxXfE9dKSw/XFxcXHMqJHtkbXNDb29yZH0oW058U3xFfFd8T10pYDtcbiAgY29uc3QgZG1zUmVnZXggPSBuZXcgUmVnRXhwKGBeJHtkbXNDb29yZFBhdHRlcm59JGAsICdnaScpO1xuXG4gIGNvbnN0IHBhdHRlcm5VdG0gPVxuICAgICcoVVRNKS0/KFxcXFxkezEsMn0pW1xcXFxzLF0qKFxcXFxkK1suLF0/XFxcXGQrKVtcXFxccyxdKyhcXFxcZCtbLixdP1xcXFxkKyknO1xuICBjb25zdCB1dG1SZWdleCA9IG5ldyBSZWdFeHAoYF4ke3BhdHRlcm5VdG19YCwgJ2dpJyk7XG5cbiAgY29uc3QgcGF0dGVybk10bSA9XG4gICAgJyhNVE0pLT8oXFxcXGR7MSwyfSlbXFxcXHMsXSooXFxcXGQrWy4sXT9cXFxcZCspW1xcXFxzLF0rKFxcXFxkK1suLF0/XFxcXGQrKSc7XG4gIGNvbnN0IG10bVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7cGF0dGVybk10bX1gLCAnZ2knKTtcblxuICBjb25zdCBkZENvb3JkID0gJyhbLStdKT8oXFxcXGR7MSwzfSlbLC5dKFxcXFxkKyknO1xuICBjb25zdCBwYXR0ZXJuRGQgPSBgJHtkZENvb3JkfVxcXFxzKlssXT9cXFxccyoke2RkQ29vcmR9YDtcbiAgY29uc3QgZGRSZWdleCA9IG5ldyBSZWdFeHAoYF4ke3BhdHRlcm5EZH1gLCAnZycpO1xuXG4gIGNvbnN0IGRtZENvb3JkID1cbiAgICAnKFstK10pPyhcXFxcZHsxLDN9KVtcXFxccywuXXsxfShcXFxcZHsxLDJ9KVtcXFxccywuXXsxfShcXFxcZHsxLDJ9KVsuLF0/KFxcXFxkezEsNX0pPyc7XG4gIGNvbnN0IHBhdHRlcm5EbWQgPSBgJHtkbWRDb29yZH1cXFxccypbLC5dP1xcXFxzKiR7ZG1kQ29vcmR9YDtcbiAgY29uc3QgZG1kUmVnZXggPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJuRG1kfWAsICdnJyk7XG5cbiAgY29uc3QgcGF0dGVybkJFTEwgPVxuICAgICdMQVRcXFxccypbXFxcXHM6XSpcXFxccyooWy0rXSk/KFxcXFxkezEsMn0pW1xcXFxzLixdPyhcXFxcZCspP1tcXFxccy4sXT9cXFxccyooXFxcXGR7MSwyfShbLixdXFxcXGQrKT8pP1xcXFxzKihOfFN8RXxXKT9cXFxccypMT05HXFxcXHMqW1xcXFxzOl0qXFxcXHMqKFstK10pPyhcXFxcZHsxLDN9KVtcXFxccy4sXT8oXFxcXGQrKT9bXFxcXHMuLF0/XFxcXHMqKFxcXFxkezEsMn0oWy4sXVxcXFxkKyk/KT9cXFxccyooTnxTfEV8Vyk/XFxcXHMqVU5DXFxcXHMqW1xcXFxzOl0/XFxcXHMqKFxcXFxkKylcXFxccypDT05GXFxcXHMqW1xcXFxzOl0/XFxcXHMqKFxcXFxkezEsM30pJztcbiAgY29uc3QgYmVsbFJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7cGF0dGVybkJFTEx9P2AsICdnaScpO1xuXG4gIGNvbnN0IG1tQ29vcmQgPSAnKFstK10/XFxcXGQrKVssLl0/KFxcXFxkKyk/JztcbiAgY29uc3QgbW1QYXR0ZXJuID0gYCR7bW1Db29yZH1bXFxcXHMsXSske21tQ29vcmR9YDtcbiAgY29uc3QgbW1SZWdleCA9IG5ldyBSZWdFeHAoYF4ke21tUGF0dGVybn0kYCwgJ2cnKTtcblxuICBsZXQgaXNYWUNvb3JkcyA9IGZhbHNlO1xuXG4gIHN0ciA9IHN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpLnRyaW0oKTtcblxuICAvLyBFeHRyYWN0IHByb2plY3Rpb25cbiAgaWYgKHByb2plY3Rpb25SZWdleC50ZXN0KHN0cikpIHtcbiAgICBbY29vcmRTdHIsIHByb2plY3Rpb25TdHJdID0gc3RyLnNwbGl0KCc7JykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gIH0gZWxzZSB7XG4gICAgY29vcmRTdHIgPSBzdHI7XG4gIH1cbiAgaWYgKGxvbkxhdFJlZ2V4LnRlc3QoY29vcmRTdHIpKSB7XG4gICAgWywgbmVnYXRpdmVMb24sIGxvbiwgLCBkZWNpbWFsTG9uLCBuZWdhdGl2ZUxhdCwgbGF0LCAsIGRlY2ltYWxMYXRdID1cbiAgICAgIGNvb3JkU3RyLm1hdGNoKGxvbkxhdFBhdHRlcm4pO1xuXG4gICAgbG9uID0gcGFyc2VGbG9hdCgobmVnYXRpdmVMb24gPyBuZWdhdGl2ZUxvbiA6ICcnKSArIGxvbiArICcuJyArIGRlY2ltYWxMb24pO1xuICAgIGxhdCA9IHBhcnNlRmxvYXQoKG5lZ2F0aXZlTGF0ID8gbmVnYXRpdmVMYXQgOiAnJykgKyBsYXQgKyAnLicgKyBkZWNpbWFsTGF0KTtcbiAgfSBlbHNlIGlmIChkbXNSZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIFtcbiAgICAgICxcbiAgICAgIGRlZ3JlZXNMb24sXG4gICAgICBtaW51dGVzTG9uLFxuICAgICAgc2Vjb25kc0xvbixcbiAgICAgIGRpcmVjdGlvbkxvbixcbiAgICAgIGRlZ3JlZXNMYXQsXG4gICAgICBtaW51dGVzTGF0LFxuICAgICAgc2Vjb25kc0xhdCxcbiAgICAgIGRpcmVjdGlvbkxhdFxuICAgIF0gPSBjb29yZFN0ci5tYXRjaChkbXNDb29yZFBhdHRlcm4pO1xuXG4gICAgaWYgKGRpcmVjdGlvbkxvbiA9PT0gJ1MnIHx8IGRpcmVjdGlvbkxvbiA9PT0gJ04nKSB7XG4gICAgICBkZWdyZWVzTG9uID0gW2RlZ3JlZXNMYXQsIChkZWdyZWVzTGF0ID0gZGVncmVlc0xvbildWzBdO1xuICAgICAgbWludXRlc0xvbiA9IFttaW51dGVzTGF0LCAobWludXRlc0xhdCA9IG1pbnV0ZXNMb24pXVswXTtcbiAgICAgIHNlY29uZHNMb24gPSBbc2Vjb25kc0xhdCwgKHNlY29uZHNMYXQgPSBzZWNvbmRzTG9uKV1bMF07XG4gICAgICBkaXJlY3Rpb25Mb24gPSBbZGlyZWN0aW9uTGF0LCAoZGlyZWN0aW9uTGF0ID0gZGlyZWN0aW9uTG9uKV1bMF07XG4gICAgfVxuXG4gICAgbG9uID0gY29udmVydERNU1RvREQoXG4gICAgICBwYXJzZUZsb2F0KGRlZ3JlZXNMb24pLFxuICAgICAgcGFyc2VGbG9hdChtaW51dGVzTG9uKSxcbiAgICAgIHBhcnNlRmxvYXQoc2Vjb25kc0xvbiksXG4gICAgICBkaXJlY3Rpb25Mb25cbiAgICApO1xuICAgIGxhdCA9IGNvbnZlcnRETVNUb0REKFxuICAgICAgcGFyc2VGbG9hdChkZWdyZWVzTGF0KSxcbiAgICAgIHBhcnNlRmxvYXQobWludXRlc0xhdCksXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMYXQpLFxuICAgICAgZGlyZWN0aW9uTGF0XG4gICAgKTtcbiAgfSBlbHNlIGlmICh1dG1SZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIGlzWFlDb29yZHMgPSB0cnVlO1xuICAgIFssICwgem9uZSwgbG9uLCBsYXRdID0gY29vcmRTdHIubWF0Y2gocGF0dGVyblV0bSk7XG4gICAgY29uc3QgZXBzZ1V0bSA9IE51bWJlcih6b25lKSA8IDEwID8gYEVQU0c6MzI2MCR7em9uZX1gIDogYEVQU0c6MzI2JHt6b25lfWA7XG4gICAgW2xvbiwgbGF0XSA9IG9scHJvai50cmFuc2Zvcm0oXG4gICAgICBbcGFyc2VGbG9hdChsb24pLCBwYXJzZUZsb2F0KGxhdCldLFxuICAgICAgZXBzZ1V0bSxcbiAgICAgICdFUFNHOjQzMjYnXG4gICAgKTtcbiAgfSBlbHNlIGlmIChtdG1SZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIGlzWFlDb29yZHMgPSB0cnVlO1xuICAgIFssICwgem9uZSwgbG9uLCBsYXRdID0gY29vcmRTdHIubWF0Y2gocGF0dGVybk10bSk7XG4gICAgY29uc3QgZXBzZ010bSA9XG4gICAgICBOdW1iZXIoem9uZSkgPCAxMCA/IGBFUFNHOjMyMTgke3pvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyBOdW1iZXIoem9uZSl9YDtcbiAgICBbbG9uLCBsYXRdID0gb2xwcm9qLnRyYW5zZm9ybShcbiAgICAgIFtwYXJzZUZsb2F0KGxvbiksIHBhcnNlRmxvYXQobGF0KV0sXG4gICAgICBlcHNnTXRtLFxuICAgICAgJ0VQU0c6NDMyNidcbiAgICApO1xuICB9IGVsc2UgaWYgKGRtZFJlZ2V4LnRlc3QoY29vcmRTdHIpKSB7XG4gICAgW1xuICAgICAgLFxuICAgICAgbmVnYXRpdmVMb24sXG4gICAgICBkZWdyZWVzTG9uLFxuICAgICAgbWludXRlc0xvbixcbiAgICAgIHNlY29uZHNMb24sXG4gICAgICBkZWNpbWFsTG9uLFxuICAgICAgbmVnYXRpdmVMYXQsXG4gICAgICBkZWdyZWVzTGF0LFxuICAgICAgbWludXRlc0xhdCxcbiAgICAgIHNlY29uZHNMYXQsXG4gICAgICBkZWNpbWFsTGF0XG4gICAgXSA9IGNvb3JkU3RyLm1hdGNoKHBhdHRlcm5EbWQpO1xuXG4gICAgbG9uID0gY29udmVydERNU1RvREQoXG4gICAgICBwYXJzZUZsb2F0KChuZWdhdGl2ZUxvbiA/IG5lZ2F0aXZlTG9uIDogJycpICsgZGVncmVlc0xvbiksXG4gICAgICBwYXJzZUZsb2F0KG1pbnV0ZXNMb24pLFxuICAgICAgcGFyc2VGbG9hdChzZWNvbmRzTG9uKSxcbiAgICAgIGRpcmVjdGlvbkxvblxuICAgICk7XG4gICAgbGF0ID0gY29udmVydERNU1RvREQoXG4gICAgICBwYXJzZUZsb2F0KChuZWdhdGl2ZUxhdCA/IG5lZ2F0aXZlTGF0IDogJycpICsgZGVncmVlc0xhdCksXG4gICAgICBwYXJzZUZsb2F0KG1pbnV0ZXNMYXQpLFxuICAgICAgcGFyc2VGbG9hdChzZWNvbmRzTGF0KSxcbiAgICAgIGRpcmVjdGlvbkxhdFxuICAgICk7XG4gIH0gZWxzZSBpZiAoZGRSZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIFtcbiAgICAgICxcbiAgICAgIG5lZ2F0aXZlTG9uLFxuICAgICAgZGVncmVlc0xvbixcbiAgICAgIGRlY2ltYWxMb24sXG4gICAgICBuZWdhdGl2ZUxhdCxcbiAgICAgIGRlZ3JlZXNMYXQsXG4gICAgICBkZWNpbWFsTGF0XG4gICAgXSA9IGNvb3JkU3RyLm1hdGNoKHBhdHRlcm5EZCk7XG5cbiAgICBsb24gPSBjb252ZXJ0RE1TVG9ERChcbiAgICAgIHBhcnNlRmxvYXQoKG5lZ2F0aXZlTG9uID8gbmVnYXRpdmVMb24gOiAnJykgKyBkZWdyZWVzTG9uKSxcbiAgICAgIHBhcnNlRmxvYXQobWludXRlc0xvbiksXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMb24pLFxuICAgICAgZGlyZWN0aW9uTG9uXG4gICAgKTtcbiAgICBsYXQgPSBjb252ZXJ0RE1TVG9ERChcbiAgICAgIHBhcnNlRmxvYXQoKG5lZ2F0aXZlTGF0ID8gbmVnYXRpdmVMYXQgOiAnJykgKyBkZWdyZWVzTGF0KSxcbiAgICAgIHBhcnNlRmxvYXQobWludXRlc0xhdCksXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMYXQpLFxuICAgICAgZGlyZWN0aW9uTGF0XG4gICAgKTtcbiAgfSBlbHNlIGlmIChiZWxsUmVnZXgudGVzdChjb29yZFN0cikpIHtcbiAgICBbXG4gICAgICAsXG4gICAgICBuZWdhdGl2ZUxhdCxcbiAgICAgIGRlZ3JlZXNMYXQsXG4gICAgICBtaW51dGVzTGF0LFxuICAgICAgc2Vjb25kc0xhdCxcbiAgICAgICxcbiAgICAgIGRpcmVjdGlvbkxhdCxcbiAgICAgIG5lZ2F0aXZlTG9uLFxuICAgICAgZGVncmVlc0xvbixcbiAgICAgIG1pbnV0ZXNMb24sXG4gICAgICBzZWNvbmRzTG9uLFxuICAgICAgLFxuICAgICAgZGlyZWN0aW9uTG9uLFxuICAgICAgcmFkaXVzLFxuICAgICAgY29uZlxuICAgIF0gPSBjb29yZFN0ci5tYXRjaChwYXR0ZXJuQkVMTCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgTm9ydGggQW1lcmljYVxuICAgIGlmICghZGlyZWN0aW9uTG9uKSB7XG4gICAgICBkaXJlY3Rpb25Mb24gPSAnVyc7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgcmVhbCBtaW51dGVzIG9yIGRlY2ltYWxzXG4gICAgaWYgKG1pbnV0ZXNMb24gJiYgbWludXRlc0xvbi5sZW5ndGggPiAyKSB7XG4gICAgICBsb24gPSBwYXJzZUZsb2F0KFxuICAgICAgICAobmVnYXRpdmVMb24gPyBuZWdhdGl2ZUxvbiA6ICcnKSArIGRlZ3JlZXNMb24gKyAnLicgKyBtaW51dGVzTG9uXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb24gPSBjb252ZXJ0RE1TVG9ERChcbiAgICAgICAgcGFyc2VGbG9hdChkZWdyZWVzTG9uKSxcbiAgICAgICAgcGFyc2VGbG9hdChtaW51dGVzTG9uKSxcbiAgICAgICAgcGFyc2VGbG9hdChzZWNvbmRzTG9uKSxcbiAgICAgICAgZGlyZWN0aW9uTG9uXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzTGF0ICYmIG1pbnV0ZXNMYXQubGVuZ3RoID4gMikge1xuICAgICAgbGF0ID0gcGFyc2VGbG9hdChcbiAgICAgICAgKG5lZ2F0aXZlTGF0ID8gbmVnYXRpdmVMYXQgOiAnJykgKyBkZWdyZWVzTGF0ICsgJy4nICsgbWludXRlc0xhdFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGF0ID0gY29udmVydERNU1RvREQoXG4gICAgICAgIHBhcnNlRmxvYXQoZGVncmVlc0xhdCksXG4gICAgICAgIHBhcnNlRmxvYXQobWludXRlc0xhdCksXG4gICAgICAgIHBhcnNlRmxvYXQoc2Vjb25kc0xhdCksXG4gICAgICAgIGRpcmVjdGlvbkxhdFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobW1SZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIGlzWFlDb29yZHMgPSB0cnVlO1xuICAgIFssIGxvbiwgZGVjaW1hbExvbiwgbGF0LCBkZWNpbWFsTGF0XSA9IGNvb3JkU3RyLm1hdGNoKG1tUGF0dGVybik7XG5cbiAgICBpZiAoZGVjaW1hbExvbikge1xuICAgICAgbG9uID0gcGFyc2VGbG9hdChsb24gKyAnLicgKyBkZWNpbWFsTG9uKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjaW1hbExhdCkge1xuICAgICAgbGF0ID0gcGFyc2VGbG9hdChsYXQgKyAnLicgKyBkZWNpbWFsTGF0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvbkxhdDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICByYWRpdXM6IHVuZGVmaW5lZCxcbiAgICAgIGNvbmY6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBpZiAob3B0cy5mb3JjZU5BICYmICFpc1hZQ29vcmRzKSB7XG4gICAgLy8gU2V0IGEgbmVnYXRpdmUgY29vcmRpbmF0ZSBmb3IgTm9ydGggQW1lcmljYSB6b25lXG4gICAgaWYgKGxvbiA+IDAgJiYgbGF0ID4gMCkge1xuICAgICAgaWYgKGxvbiA+IGxhdCkge1xuICAgICAgICBsb24gPSAtbG9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGF0ID0gLWxhdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXZlcnNlIGNvb3JkaW5hdGUgdG8gcmVzcGVjdCBsb25MYXQgY29udmVudGlvblxuICAgIGlmIChsb24gPiBsYXQpIHtcbiAgICAgIGxvbiA9IFtsYXQsIChsYXQgPSBsb24pXVswXTtcbiAgICB9XG4gIH1cblxuICBsb25MYXQgPSBbTnVtYmVyKGxvbiksIE51bWJlcihsYXQpXSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuXG4gIC8vIFJlcHJvamVjdCB0aGUgY29vcmRpbmF0ZSBpZiBwcm9qZWN0aW9uIHBhcmFtZXRlciBoYXZlIGJlZW4gc2V0IGFuZCBjb29yZCBpcyBub3QgNDMyNlxuICBpZiAoXG4gICAgKHByb2plY3Rpb25TdHIgIT09IHVuZGVmaW5lZCAmJiBwcm9qZWN0aW9uU3RyICE9PSB0b1Byb2plY3Rpb24pIHx8XG4gICAgbG9uTGF0WzBdID4gMTgwIHx8XG4gICAgbG9uTGF0WzBdIDwgLTE4MCB8fFxuICAgIGxvbkxhdFsxXSA+IDkwIHx8XG4gICAgbG9uTGF0WzFdIDwgLTkwXG4gICkge1xuICAgIGNvbnN0IHNvdXJjZSA9IHByb2plY3Rpb25TdHIgPyAnRVBTRzonICsgcHJvamVjdGlvblN0ciA6IG1hcFByb2plY3Rpb247XG4gICAgY29uc3QgZGVzdCA9ICdFUFNHOicgKyB0b1Byb2plY3Rpb247XG5cbiAgICB0cnkge1xuICAgICAgbG9uTGF0ID0gb2xwcm9qLnRyYW5zZm9ybShsb25MYXQsIHNvdXJjZSwgZGVzdCkgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvbkxhdDogdW5kZWZpbmVkLFxuICAgICAgICBtZXNzYWdlOiAnUHJvamVjdGlvbiAnICsgc291cmNlICsgJyBub3Qgc3VwcG9ydGVkJyxcbiAgICAgICAgcmFkaXVzOiB1bmRlZmluZWQsXG4gICAgICAgIGNvbmY6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgaWYgKE1hdGguYWJzKGxvbkxhdFswXSkgPD0gMTgwICYmIE1hdGguYWJzKGxvbkxhdFsxXSkgPD0gOTApIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9uTGF0LFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICByYWRpdXM6IHJhZGl1cyA/IHBhcnNlSW50KHJhZGl1cywgMTApIDogdW5kZWZpbmVkLFxuICAgICAgY29uZjogY29uZiA/IHBhcnNlSW50KGNvbmYsIDEwKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvbkxhdDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZTogJ0Nvb3JkaW5hdGUgb3V0IG9mIExvbmdpdHVkZS9MYXRpdHVkZSBib3VuZHMnLFxuICAgICAgcmFkaXVzOiB1bmRlZmluZWQsXG4gICAgICBjb25mOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBkZWdyZWVzIG1pbnV0ZXMgc2Vjb25kcyB0byBkZFxuICogQHBhcmFtIGRlZ3JlZXMgRGVncmVlc1xuICogQHBhcmFtIG1pbnV0ZXMgTWludXRlc1xuICogQHBhcmFtIHNlY29uZHMgU2Vjb25kc1xuICogQHBhcmFtIGRpcmVjdGlvbiBEaXJlY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29udmVydERNU1RvREQoXG4gIGRlZ3JlZXM6IG51bWJlcixcbiAgbWludXRlczogbnVtYmVyLFxuICBzZWNvbmRzOiBudW1iZXIsXG4gIGRpcmVjdGlvbjogc3RyaW5nXG4pIHtcbiAgbWludXRlcyA9IG1pbnV0ZXMgfHwgMDtcbiAgc2Vjb25kcyA9IHNlY29uZHMgfHwgMDtcblxuICBjb25zdCBuZWcgPSBkZWdyZWVzIDwgMDtcbiAgbGV0IGRkID0gTWF0aC5hYnMoZGVncmVlcykgKyBtaW51dGVzIC8gNjAgKyBzZWNvbmRzIC8gMzYwMDtcblxuICBpZiAobmVnIHx8IGRpcmVjdGlvbiA9PT0gJ1MnIHx8IGRpcmVjdGlvbiA9PT0gJ1cnKSB7XG4gICAgZGQgPSAtZGQ7XG4gIH0gLy8gRG9uJ3QgZG8gYW55dGhpbmcgZm9yIE4gb3IgRVxuICByZXR1cm4gZGQ7XG59XG5cbi8qKlxuICogQ29udmVydCBkZCB0byBkZWdyZWVzIG1pbnV0ZXMgc2Vjb25kc1xuICogQHBhcmFtIGxvbkxhdEREIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgaW4gZGRcbiAqIEBwYXJhbSBkZWNpbWFsIG51bWJlciBvZiBkZWNpbWFscyBmb3Igc2Vjb25kc1xuICogQHJldHVybnMgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBpbiBkbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRERFRvRE1TKFxuICBsb25MYXRERDogW251bWJlciwgbnVtYmVyXSxcbiAgZGVjaW1hbCA9IDNcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbG9uTGF0RE1TID0gW107XG5cbiAgbG9uTGF0REQuZm9yRWFjaCgoZGQpID0+IHtcbiAgICBjb25zdCBkZWdyZWVzID0gZGQgPCAwID8gTWF0aC5jZWlsKGRkKSA6IE1hdGguZmxvb3IoZGQpO1xuICAgIGNvbnN0IGludCA9IGRkIDwgMCA/IChkZWdyZWVzIC0gZGQpICogNjAgOiAoZGQgLSBkZWdyZWVzKSAqIDYwO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKGludCk7XG4gICAgY29uc3Qgc2Vjb25kcyA9ICgoaW50IC0gbWludXRlcykgKiA2MCkudG9GaXhlZChkZWNpbWFsKTtcblxuICAgIGxvbkxhdERNUy5wdXNoKGAke2RlZ3JlZXN9wrAgJHttaW51dGVzfScgJHtzZWNvbmRzfVwiYCk7XG4gIH0pO1xuICByZXR1cm4gbG9uTGF0RE1TO1xufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIG9mIHR3byB2aWV3IHN0YXRlcyBhcmUgZXF1YWwuXG4gKiBAcGFyYW0gc3RhdGUxIFZpZXcgc3RhdGVcbiAqIEBwYXJhbSBzdGF0ZTIgVmlldyBzdGF0ZVxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgdmlldyBzdGF0ZXMgYXJlIGVxdWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aWV3U3RhdGVzQXJlRXF1YWwoXG4gIHN0YXRlMTogTWFwVmlld1N0YXRlLFxuICBzdGF0ZTI6IE1hcFZpZXdTdGF0ZVxuKTogYm9vbGVhbiB7XG4gIGlmIChzdGF0ZTEgPT09IHVuZGVmaW5lZCB8fCBzdGF0ZTIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IDEgLyAxMDAwMDtcbiAgcmV0dXJuIChcbiAgICBzdGF0ZTEuem9vbSA9PT0gc3RhdGUyLnpvb20gJiZcbiAgICBNYXRoLnRydW5jKHN0YXRlMS5jZW50ZXJbMF0gLyB0b2xlcmFuY2UpID09PVxuICAgICAgTWF0aC50cnVuYyhzdGF0ZTIuY2VudGVyWzBdIC8gdG9sZXJhbmNlKSAmJlxuICAgIE1hdGgudHJ1bmMoc3RhdGUxLmNlbnRlclsxXSAvIHRvbGVyYW5jZSkgPT09XG4gICAgICBNYXRoLnRydW5jKHN0YXRlMi5jZW50ZXJbMV0gLyB0b2xlcmFuY2UpXG4gICk7XG59XG5cbi8qKlxuICogRm9ybWF0IHRoZSBzY2FsZSB0byBhIGh1bWFuIHJlYWRhYmxlIHRleHRcbiAqIEBwYXJhbSBTY2FsZSBvZiB0aGUgbWFwXG4gKiBAcmV0dXJucyBIdW1hbiByZWFkYWJsZSBzY2FsZSB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTY2FsZShzY2FsZSkge1xuICBzY2FsZSA9IE1hdGgucm91bmQoc2NhbGUpO1xuICBpZiAoc2NhbGUgPCAxMDAwMCkge1xuICAgIHJldHVybiBzY2FsZSArICcnO1xuICB9XG5cbiAgc2NhbGUgPSBNYXRoLnJvdW5kKHNjYWxlIC8gMTAwMCk7XG4gIGlmIChzY2FsZSA8IDEwMDApIHtcbiAgICByZXR1cm4gc2NhbGUgKyAnSyc7XG4gIH1cblxuICBzY2FsZSA9IE1hdGgucm91bmQoc2NhbGUgLyAxMDAwKTtcbiAgcmV0dXJuIHNjYWxlICsgJ00nO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcmVzb2x1dGlvbiBmcm9tIGEgc2NhbGUgZGVub21cbiAqIEBwYXJhbSBzY2FsZSBTY2FsZSBkZW5vbVxuICogQHBhcmFtIGRwaSBEUElcbiAqIEByZXR1cm5zIFJlc29sdXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc29sdXRpb25Gcm9tU2NhbGUoc2NhbGU6IG51bWJlciwgZHBpID0gOTYpOiBudW1iZXIge1xuICBjb25zdCBpbmNoZXNQZXJNZXRlciA9IDM5LjM3MDE7XG4gIHJldHVybiBzY2FsZSAvIChpbmNoZXNQZXJNZXRlciAqIGRwaSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSByZXNvbHV0aW9uIGZyb20gYSBzY2FsZSBkZW5vbVxuICogQHBhcmFtIFNjYWxlIGRlbm9tXG4gKiBAcmV0dXJucyBSZXNvbHV0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsZUZyb21SZXNvbHV0aW9uKFxuICByZXNvbHV0aW9uOiBudW1iZXIsXG4gIHVuaXQgPSAnbScsXG4gIGRwaSA9IDk2XG4pOiBudW1iZXIge1xuICBjb25zdCBpbmNoZXNQZXJNZXRlciA9IDM5LjM3MDE7XG4gIHJldHVybiByZXNvbHV0aW9uICogb2xwcm9qLk1FVEVSU19QRVJfVU5JVFt1bml0XSAqIGluY2hlc1Blck1ldGVyICogZHBpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgQ1RSTCBrZXkgaXMgcHVzaGVkIGR1cmluZyBhbiBPbCBNYXBCcm93c2VyUG9pbnRlckV2ZW50XG4gKiBAcGFyYW0gZXZlbnQgT0wgTWFwQnJvd3NlclBvaW50ZXJFdmVudFxuICogQHJldHVybnMgV2hldGhlciB0aGUgQ1RSTCBrZXkgaXMgcHVzaGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdHJsS2V5RG93bihldmVudDogTWFwQnJvd3NlclBvaW50ZXJFdmVudDxhbnk+KTogYm9vbGVhbiB7XG4gIGNvbnN0IG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xuICByZXR1cm4gKFxuICAgICFvcmlnaW5hbEV2ZW50LmFsdEtleSAmJlxuICAgIChNQUMgPyBvcmlnaW5hbEV2ZW50Lm1ldGFLZXkgOiBvcmlnaW5hbEV2ZW50LmN0cmxLZXkpICYmXG4gICAgIW9yaWdpbmFsRXZlbnQuc2hpZnRLZXlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJvdW5kQ29vcmRUbyhcbiAgY29vcmQ6IFtudW1iZXIsIG51bWJlcl0sXG4gIGRlY2ltYWwgPSAzXG4pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgcmV0dXJuIFtcbiAgICBOdW1iZXJVdGlscy5yb3VuZFRvTkRlY2ltYWwoY29vcmRbMF0sIGRlY2ltYWwpLFxuICAgIE51bWJlclV0aWxzLnJvdW5kVG9ORGVjaW1hbChjb29yZFsxXSwgZGVjaW1hbClcbiAgXSBhcyBbbnVtYmVyLCBudW1iZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcm91bmRDb29yZFRvU3RyaW5nKFxuICBjb29yZDogW251bWJlciwgbnVtYmVyXSxcbiAgZGVjaW1hbCA9IDNcbik6IFtzdHJpbmcsIHN0cmluZ10ge1xuICByZXR1cm4gcm91bmRDb29yZFRvKGNvb3JkLCBkZWNpbWFsKS5tYXAoKHIpID0+IHIudG9TdHJpbmcoKSkgYXMgW1xuICAgIHN0cmluZyxcbiAgICBzdHJpbmdcbiAgXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbnZlcnRlZCBjb29yZGluYXRlcy5cbiAqIENvbnZlcnNpb24gaXMgZG9uZSBmb3IgZXZlcnkgY29uZmlndXJlZCBwcm9qZWN0aW9uc1xuICogYW5kIGZvciB0aGUgY3VycmVudCBVVE0gem9uZSBhbmQgTVRNIHpvbmUuXG4gKiBAcGFyYW0gbG9uTGF0IFtudW1iZXIsIG51bWJlcl0gYXJyYXkgb2YgdGhlIGNvb3JkaW5hdGUgdG8gdHJhbnNmb3JtLlxuICogQHBhcmFtIHByb2plY3Rpb25zICBQcm9qZWN0aW9uW10gQXJyYXkgb2YgZGVzdGluYXRpb24gcHJvamVjdGlvbi5cbiAqIEBwYXJhbSByZXZlcnNlQ29vcmRzIFRvIHJldmVyc2UgY29vcmRzIGZyb20gbGF0TG9uIHRvIGxvbkxhdCAoc2VhcmNoIG9wdGlvbilcbiAqIEByZXR1cm5zIFJldHVybnMgYW4gYXJyYXkgb2YgY29udmVydGVkIGNvb3JkaW5hdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9uTGF0Q29udmVyc2lvbihcbiAgbG9uTGF0OiBbbnVtYmVyLCBudW1iZXJdLFxuICBwcm9qZWN0aW9uczogUHJvamVjdGlvbltdXG4pOiB7XG4gIGNvZGU6IHN0cmluZztcbiAgYWxpYXM6IHN0cmluZztcbiAgY29vcmQ6IFtudW1iZXIsIG51bWJlcl07XG4gIGlnbzJDb29yZEZvcm1hdDogc3RyaW5nO1xufVtdIHtcbiAgY29uc3QgcmF3Q29vcmQzODU3ID0gb2xwcm9qLnRyYW5zZm9ybShsb25MYXQsICdFUFNHOjQzMjYnLCAnRVBTRzozODU3JykgYXMgW1xuICAgIG51bWJlcixcbiAgICBudW1iZXJcbiAgXTtcbiAgY29uc3QgY29udmVydGVkTG9uTGF0ID0gW1xuICAgIHtcbiAgICAgIGNvZGU6ICdFUFNHOjM4NTcnLFxuICAgICAgYWxpYXM6ICdXZWIgTWVyY2F0b3InLFxuICAgICAgY29vcmQ6IHJhd0Nvb3JkMzg1NyxcbiAgICAgIGlnbzJDb29yZEZvcm1hdDogYCR7cm91bmRDb29yZFRvKHJhd0Nvb3JkMzg1Nykuam9pbignLCAnKX0gOyAzODU3YFxuICAgIH1cbiAgXTtcblxuICAvLyBkZXRlY3QgdGhlIGN1cnJlbnQgdXRtIHpvbmUuXG4gIGNvbnN0IHV0bVpvbmUgPSB1dG1ab25lRnJvbUxvbkxhdChsb25MYXQpO1xuICBjb25zdCBlcHNnVXRtID0gdXRtWm9uZSA8IDEwID8gYEVQU0c6MzI2MCR7dXRtWm9uZX1gIDogYEVQU0c6MzI2JHt1dG1ab25lfWA7XG4gIGNvbnN0IHV0bU5hbWUgPSBgVVRNLSR7dXRtWm9uZX1gO1xuICBjb25zdCByYXdDb29yZFV0bSA9IG9scHJvai50cmFuc2Zvcm0obG9uTGF0LCAnRVBTRzo0MzI2JywgZXBzZ1V0bSkgYXMgW1xuICAgIG51bWJlcixcbiAgICBudW1iZXJcbiAgXTtcbiAgY29udmVydGVkTG9uTGF0LnB1c2goe1xuICAgIGNvZGU6IGVwc2dVdG0sXG4gICAgYWxpYXM6ICdVVE0nLFxuICAgIGNvb3JkOiByYXdDb29yZFV0bSxcbiAgICBpZ28yQ29vcmRGb3JtYXQ6IGAke3V0bU5hbWV9ICR7cm91bmRDb29yZFRvKHJhd0Nvb3JkVXRtKS5qb2luKCcsICcpfWBcbiAgfSk7XG5cbiAgLy8gZGV0ZWN0IHRoZSBjdXJyZW50IG10bSB6b25lLlxuICBjb25zdCBtdG1ab25lID0gbXRtWm9uZUZyb21Mb25MYXQobG9uTGF0KTtcbiAgaWYgKG10bVpvbmUpIHtcbiAgICBjb25zdCBlcHNnTXRtID1cbiAgICAgIG10bVpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke210bVpvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyBtdG1ab25lfWA7XG4gICAgY29uc3QgbXRtTmFtZSA9IGBNVE0tJHttdG1ab25lfWA7XG4gICAgY29uc3QgcmF3Q29vcmRNdG0gPSBvbHByb2oudHJhbnNmb3JtKGxvbkxhdCwgJ0VQU0c6NDMyNicsIGVwc2dNdG0pIGFzIFtcbiAgICAgIG51bWJlcixcbiAgICAgIG51bWJlclxuICAgIF07XG4gICAgY29udmVydGVkTG9uTGF0LnB1c2goe1xuICAgICAgY29kZTogZXBzZ010bSxcbiAgICAgIGFsaWFzOiAnTVRNJyxcbiAgICAgIGNvb3JkOiByYXdDb29yZE10bSxcbiAgICAgIGlnbzJDb29yZEZvcm1hdDogYCR7bXRtTmFtZX0gJHtyb3VuZENvb3JkVG8ocmF3Q29vcmRNdG0pLmpvaW4oJywgJyl9YFxuICAgIH0pO1xuICB9XG5cbiAgcHJvamVjdGlvbnMuZm9yRWFjaCgocHJvamVjdGlvbikgPT4ge1xuICAgIGNvbnN0IHJhd0Nvb3JkID0gb2xwcm9qLnRyYW5zZm9ybShsb25MYXQsICdFUFNHOjQzMjYnLCBwcm9qZWN0aW9uLmNvZGUpIGFzIFtcbiAgICAgIG51bWJlcixcbiAgICAgIG51bWJlclxuICAgIF07XG4gICAgY29uc3QgbnVtZXJpY0Vwc2dDb2RlID0gcHJvamVjdGlvbi5jb2RlLnNwbGl0KCc6JylbMV07XG4gICAgY29udmVydGVkTG9uTGF0LnB1c2goe1xuICAgICAgY29kZTogcHJvamVjdGlvbi5jb2RlLFxuICAgICAgYWxpYXM6IHByb2plY3Rpb24uYWxpYXMgfHwgcHJvamVjdGlvbi5jb2RlLFxuICAgICAgY29vcmQ6IHJhd0Nvb3JkLFxuICAgICAgaWdvMkNvb3JkRm9ybWF0OiBgJHtyb3VuZENvb3JkVG8ocmF3Q29vcmQpLmpvaW4oXG4gICAgICAgICcsICdcbiAgICAgICl9IDsgJHtudW1lcmljRXBzZ0NvZGV9YFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gY29udmVydGVkTG9uTGF0O1xufVxuXG4vKipcbiAqIERldGVjdCB0aGUgY3VycmVudCB1dG0gem9uZSBvZiB0aGUgbG9uL2xhdCBjb29yZGluYXRlLlxuICogQHBhcmFtIGxvbkxhdCBbbnVtYmVyLCBudW1iZXJdIGFycmF5IG9mIHRoZSBjb29yZGluYXRlIHRvIGRldGVjdCB0aGUgVVRNIHpvbmUuXG4gKiBAcmV0dXJucyBudW1iZXIgVGhlIFVUTSB6b25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXRtWm9uZUZyb21Mb25MYXQobG9uTGF0OiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gIHJldHVybiBNYXRoLmNlaWwoKGxvbkxhdFswXSArIDE4MCkgLyA2KTtcbn1cblxuLyoqXG4gKiBEZXRlY3QgdGhlIGN1cnJlbnQgbXRtIHpvbmUgb2YgdGhlIGxvbi9sYXQgY29vcmRpbmF0ZS5cbiAqIEBwYXJhbSBsb25MYXQgW251bWJlciwgbnVtYmVyXSBhcnJheSBvZiB0aGUgY29vcmRpbmF0ZSB0byBkZXRlY3QgdGhlIE1UTSB6b25lLlxuICogQHJldHVybnMgbnVtYmVyIFRoZSBNVE0gem9uZS4gVW5kZWZpbmVkIGlmIG91dHNpZGUgb2YgdGhlIG10bSBhcHBsaWNhdGlvbiB6b25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbXRtWm9uZUZyb21Mb25MYXQobG9uTGF0OiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gIGNvbnN0IGxvbmcgPSBsb25MYXRbMF07XG4gIGxldCBtdG1ab25lO1xuICBpZiAobG9uZyA8IC01MSAmJiBsb25nID4gLTU0KSB7XG4gICAgbXRtWm9uZSA9IDE7XG4gIH1cbiAgaWYgKGxvbmcgPCAtNTQgJiYgbG9uZyA+IC01Nykge1xuICAgIG10bVpvbmUgPSAyO1xuICB9XG4gIGlmIChsb25nIDwgLTU3ICYmIGxvbmcgPiAtNjApIHtcbiAgICBtdG1ab25lID0gMztcbiAgfVxuICBpZiAobG9uZyA8IC02MCAmJiBsb25nID4gLTYzKSB7XG4gICAgbXRtWm9uZSA9IDQ7XG4gIH1cbiAgaWYgKGxvbmcgPCAtNjMgJiYgbG9uZyA+IC02Nikge1xuICAgIG10bVpvbmUgPSA1O1xuICB9XG4gIGlmIChsb25nIDwgLTY2ICYmIGxvbmcgPiAtNjkpIHtcbiAgICBtdG1ab25lID0gNjtcbiAgfVxuICBpZiAobG9uZyA8IC02OSAmJiBsb25nID4gLTcyKSB7XG4gICAgbXRtWm9uZSA9IDc7XG4gIH1cbiAgaWYgKGxvbmcgPCAtNzIgJiYgbG9uZyA+IC03NSkge1xuICAgIG10bVpvbmUgPSA4O1xuICB9XG4gIGlmIChsb25nIDwgLTc1ICYmIGxvbmcgPiAtNzgpIHtcbiAgICBtdG1ab25lID0gOTtcbiAgfVxuICBpZiAobG9uZyA8IC03OCAmJiBsb25nID4gLTgxKSB7XG4gICAgbXRtWm9uZSA9IDEwO1xuICB9XG4gIHJldHVybiBtdG1ab25lO1xufVxuIl19