@igo2/geo 1.12.0 → 1.13.0-alpha.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 (613) hide show
  1. package/{esm2015/igo2-geo.js → esm2020/igo2-geo.mjs} +0 -0
  2. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +299 -0
  3. package/{esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js → esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs} +13 -19
  4. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +244 -0
  5. package/{esm2015/lib/catalog/catalog-browser/catalog-browser.module.js → esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs} +17 -19
  6. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +209 -0
  7. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +79 -0
  8. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +217 -0
  9. package/{esm2015/lib/catalog/catalog-library/catalog-library.module.js → esm2020/lib/catalog/catalog-library/catalog-library.module.mjs} +21 -23
  10. package/{esm2015/lib/catalog/catalog.module.js → esm2020/lib/catalog/catalog.module.mjs} +9 -11
  11. package/{esm2015/lib/catalog/index.js → esm2020/lib/catalog/index.mjs} +0 -0
  12. package/{esm2015/lib/catalog/shared/catalog.abstract.js → esm2020/lib/catalog/shared/catalog.abstract.mjs} +0 -0
  13. package/{esm2015/lib/catalog/shared/catalog.enum.js → esm2020/lib/catalog/shared/catalog.enum.mjs} +0 -0
  14. package/{esm2015/lib/catalog/shared/catalog.interface.js → esm2020/lib/catalog/shared/catalog.interface.mjs} +0 -0
  15. package/esm2020/lib/catalog/shared/catalog.service.mjs +606 -0
  16. package/{esm2015/lib/catalog/shared/index.js → esm2020/lib/catalog/shared/index.mjs} +0 -0
  17. package/{esm2015/lib/datasource/datasource.module.js → esm2020/lib/datasource/datasource.module.mjs} +2 -2
  18. package/{esm2015/lib/datasource/index.js → esm2020/lib/datasource/index.mjs} +0 -0
  19. package/esm2020/lib/datasource/shared/capabilities.service.mjs +426 -0
  20. package/{esm2015/lib/datasource/shared/datasource.service.js → esm2020/lib/datasource/shared/datasource.service.mjs} +0 -0
  21. package/{esm2015/lib/datasource/shared/datasources/any-datasource.interface.js → esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs} +0 -0
  22. package/{esm2015/lib/datasource/shared/datasources/any-datasource.js → esm2020/lib/datasource/shared/datasources/any-datasource.mjs} +0 -0
  23. package/{esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.interface.js → esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs} +0 -0
  24. package/{esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.js → esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs} +0 -0
  25. package/{esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js → esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs} +0 -0
  26. package/{esm2015/lib/datasource/shared/datasources/carto-datasource.js → esm2020/lib/datasource/shared/datasources/carto-datasource.mjs} +0 -0
  27. package/{esm2015/lib/datasource/shared/datasources/cluster-datasource.interface.js → esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs} +0 -0
  28. package/{esm2015/lib/datasource/shared/datasources/cluster-datasource.js → esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs} +0 -0
  29. package/{esm2015/lib/datasource/shared/datasources/data.service.js → esm2020/lib/datasource/shared/datasources/data.service.mjs} +0 -0
  30. package/{esm2015/lib/datasource/shared/datasources/datasource.interface.js → esm2020/lib/datasource/shared/datasources/datasource.interface.mjs} +0 -0
  31. package/{esm2015/lib/datasource/shared/datasources/datasource.js → esm2020/lib/datasource/shared/datasources/datasource.mjs} +0 -0
  32. package/{esm2015/lib/datasource/shared/datasources/feature-datasource.interface.js → esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs} +0 -0
  33. package/{esm2015/lib/datasource/shared/datasources/feature-datasource.js → esm2020/lib/datasource/shared/datasources/feature-datasource.mjs} +0 -0
  34. package/{esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.js → esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs} +0 -0
  35. package/{esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.js → esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs} +0 -0
  36. package/{esm2015/lib/datasource/shared/datasources/index.js → esm2020/lib/datasource/shared/datasources/index.mjs} +0 -0
  37. package/{esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js → esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs} +0 -0
  38. package/{esm2015/lib/datasource/shared/datasources/mvt-datasource.js → esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs} +0 -0
  39. package/{esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js → esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs} +0 -0
  40. package/{esm2015/lib/datasource/shared/datasources/osm-datasource.js → esm2020/lib/datasource/shared/datasources/osm-datasource.mjs} +0 -0
  41. package/{esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.js → esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs} +0 -0
  42. package/{esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.js → esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs} +0 -0
  43. package/{esm2015/lib/datasource/shared/datasources/tiledebug-datasource.interface.js → esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs} +0 -0
  44. package/{esm2015/lib/datasource/shared/datasources/tiledebug-datasource.js → esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs} +0 -0
  45. package/{esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js → esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs} +0 -0
  46. package/{esm2015/lib/datasource/shared/datasources/websocket-datasource.js → esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs} +0 -0
  47. package/{esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js → esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs} +0 -0
  48. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +74 -0
  49. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +152 -0
  50. package/{esm2015/lib/datasource/shared/datasources/wms-datasource.interface.js → esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs} +0 -0
  51. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -0
  52. package/{esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js → esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs} +4 -4
  53. package/{esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js → esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs} +0 -0
  54. package/{esm2015/lib/datasource/shared/datasources/wmts-datasource.js → esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs} +0 -0
  55. package/{esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js → esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs} +0 -0
  56. package/{esm2015/lib/datasource/shared/datasources/xyz-datasource.js → esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs} +0 -0
  57. package/{esm2015/lib/datasource/shared/index.js → esm2020/lib/datasource/shared/index.mjs} +0 -0
  58. package/{esm2015/lib/datasource/shared/options/index.js → esm2020/lib/datasource/shared/options/index.mjs} +0 -0
  59. package/{esm2015/lib/datasource/shared/options/options-api.interface.js → esm2020/lib/datasource/shared/options/options-api.interface.mjs} +0 -0
  60. package/{esm2015/lib/datasource/shared/options/options-api.providers.js → esm2020/lib/datasource/shared/options/options-api.providers.mjs} +0 -0
  61. package/{esm2015/lib/datasource/shared/options/options-api.service.js → esm2020/lib/datasource/shared/options/options-api.service.mjs} +0 -0
  62. package/{esm2015/lib/datasource/shared/options/options.service.js → esm2020/lib/datasource/shared/options/options.service.mjs} +0 -0
  63. package/{esm2015/lib/datasource/utils/esri-style-generator.js → esm2020/lib/datasource/utils/esri-style-generator.mjs} +0 -0
  64. package/{esm2015/lib/datasource/utils/index.js → esm2020/lib/datasource/utils/index.mjs} +0 -0
  65. package/{esm2015/lib/datasource/utils/tilegrid.js → esm2020/lib/datasource/utils/tilegrid.mjs} +0 -0
  66. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +224 -0
  67. package/{esm2015/lib/directions/directions-buttons/index.js → esm2020/lib/directions/directions-buttons/index.mjs} +0 -0
  68. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +290 -0
  69. package/{esm2015/lib/directions/directions-inputs/index.js → esm2020/lib/directions/directions-inputs/index.mjs} +0 -0
  70. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +196 -0
  71. package/{esm2015/lib/directions/directions-results/index.js → esm2020/lib/directions/directions-results/index.mjs} +0 -0
  72. package/{esm2015/lib/directions/directions-sources/directions-source.interface.js → esm2020/lib/directions/directions-sources/directions-source.interface.mjs} +0 -0
  73. package/{esm2015/lib/directions/directions-sources/directions-source.js → esm2020/lib/directions/directions-sources/directions-source.mjs} +0 -0
  74. package/{esm2015/lib/directions/directions-sources/directions-source.provider.js → esm2020/lib/directions/directions-sources/directions-source.provider.mjs} +0 -0
  75. package/{esm2015/lib/directions/directions-sources/index.js → esm2020/lib/directions/directions-sources/index.mjs} +0 -0
  76. package/{esm2015/lib/directions/directions-sources/osrm-directions-source.js → esm2020/lib/directions/directions-sources/osrm-directions-source.mjs} +0 -0
  77. package/esm2020/lib/directions/directions.component.mjs +311 -0
  78. package/{esm2015/lib/directions/directions.module.js → esm2020/lib/directions/directions.module.mjs} +16 -18
  79. package/{esm2015/lib/directions/index.js → esm2020/lib/directions/index.mjs} +0 -0
  80. package/{esm2015/lib/directions/shared/directions-source.service.js → esm2020/lib/directions/shared/directions-source.service.mjs} +0 -0
  81. package/{esm2015/lib/directions/shared/directions.enum.js → esm2020/lib/directions/shared/directions.enum.mjs} +0 -0
  82. package/{esm2015/lib/directions/shared/directions.interface.js → esm2020/lib/directions/shared/directions.interface.mjs} +0 -0
  83. package/{esm2015/lib/directions/shared/directions.service.js → esm2020/lib/directions/shared/directions.service.mjs} +0 -0
  84. package/esm2020/lib/directions/shared/directions.utils.mjs +510 -0
  85. package/{esm2015/lib/directions/shared/index.js → esm2020/lib/directions/shared/index.mjs} +0 -0
  86. package/{esm2015/lib/directions/shared/store.js → esm2020/lib/directions/shared/store.mjs} +0 -0
  87. package/esm2020/lib/download/download-button/download-button.component.mjs +61 -0
  88. package/{esm2015/lib/download/download-button/index.js → esm2020/lib/download/download-button/index.mjs} +0 -0
  89. package/{esm2015/lib/download/download.module.js → esm2020/lib/download/download.module.mjs} +6 -8
  90. package/{esm2015/lib/download/index.js → esm2020/lib/download/index.mjs} +0 -0
  91. package/{esm2015/lib/download/shared/download.interface.js → esm2020/lib/download/shared/download.interface.mjs} +0 -0
  92. package/{esm2015/lib/download/shared/download.service.js → esm2020/lib/download/shared/download.service.mjs} +0 -0
  93. package/{esm2015/lib/download/shared/index.js → esm2020/lib/download/shared/index.mjs} +0 -0
  94. package/{esm2015/lib/draw/draw/draw-popup.component.js → esm2020/lib/draw/draw/draw-popup.component.mjs} +11 -19
  95. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +48 -0
  96. package/esm2020/lib/draw/draw/draw.component.mjs +714 -0
  97. package/{esm2015/lib/draw/draw/draw.module.js → esm2020/lib/draw/draw/draw.module.mjs} +19 -21
  98. package/{esm2015/lib/draw/drawingTool.module.js → esm2020/lib/draw/drawingTool.module.mjs} +2 -2
  99. package/{esm2015/lib/draw/index.js → esm2020/lib/draw/index.mjs} +0 -0
  100. package/{esm2015/lib/draw/shared/draw-icon.service.js → esm2020/lib/draw/shared/draw-icon.service.mjs} +0 -0
  101. package/{esm2015/lib/draw/shared/draw-style.service.js → esm2020/lib/draw/shared/draw-style.service.mjs} +0 -0
  102. package/{esm2015/lib/draw/shared/draw.enum.js → esm2020/lib/draw/shared/draw.enum.mjs} +0 -0
  103. package/{esm2015/lib/draw/shared/draw.interface.js → esm2020/lib/draw/shared/draw.interface.mjs} +0 -0
  104. package/{esm2015/lib/draw/shared/draw.utils.js → esm2020/lib/draw/shared/draw.utils.mjs} +0 -0
  105. package/{esm2015/lib/draw/shared/index.js → esm2020/lib/draw/shared/index.mjs} +0 -0
  106. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +377 -0
  107. package/{esm2015/lib/feature/feature-details/feature-details.directive.js → esm2020/lib/feature/feature-details/feature-details.directive.mjs} +0 -0
  108. package/{esm2015/lib/feature/feature-details/feature-details.module.js → esm2020/lib/feature/feature-details/feature-details.module.mjs} +6 -8
  109. package/{esm2015/lib/feature/feature-form/feature-form.component.js → esm2020/lib/feature/feature-form/feature-form.component.mjs} +3 -8
  110. package/{esm2015/lib/feature/feature-form/feature-form.module.js → esm2020/lib/feature/feature-form/feature-form.module.mjs} +3 -5
  111. package/{esm2015/lib/feature/feature.module.js → esm2020/lib/feature/feature.module.mjs} +2 -4
  112. package/{esm2015/lib/feature/index.js → esm2020/lib/feature/index.mjs} +0 -0
  113. package/{esm2015/lib/feature/shared/feature.enums.js → esm2020/lib/feature/shared/feature.enums.mjs} +0 -0
  114. package/{esm2015/lib/feature/shared/feature.interfaces.js → esm2020/lib/feature/shared/feature.interfaces.mjs} +0 -0
  115. package/{esm2015/lib/feature/shared/feature.utils.js → esm2020/lib/feature/shared/feature.utils.mjs} +0 -0
  116. package/{esm2015/lib/feature/shared/index.js → esm2020/lib/feature/shared/index.mjs} +0 -0
  117. package/{esm2015/lib/feature/shared/store.js → esm2020/lib/feature/shared/store.mjs} +0 -0
  118. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +113 -0
  119. package/{esm2015/lib/feature/shared/strategies/in-map-resolution.js → esm2020/lib/feature/shared/strategies/in-map-resolution.mjs} +0 -0
  120. package/{esm2015/lib/feature/shared/strategies/index.js → esm2020/lib/feature/shared/strategies/index.mjs} +0 -0
  121. package/{esm2015/lib/feature/shared/strategies/loading-layer.js → esm2020/lib/feature/shared/strategies/loading-layer.mjs} +0 -0
  122. package/{esm2015/lib/feature/shared/strategies/loading.js → esm2020/lib/feature/shared/strategies/loading.mjs} +0 -0
  123. package/{esm2015/lib/feature/shared/strategies/selection.js → esm2020/lib/feature/shared/strategies/selection.mjs} +0 -0
  124. package/{esm2015/lib/feature/shared/strategies.utils.js → esm2020/lib/feature/shared/strategies.utils.mjs} +0 -0
  125. package/esm2020/lib/filter/filter.module.mjs +289 -0
  126. package/{esm2015/lib/filter/index.js → esm2020/lib/filter/index.mjs} +0 -0
  127. package/{esm2015/lib/filter/ogc-filter-button/index.js → esm2020/lib/filter/ogc-filter-button/index.mjs} +0 -0
  128. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +140 -0
  129. package/{esm2015/lib/filter/ogc-filter-form/index.js → esm2020/lib/filter/ogc-filter-form/index.mjs} +0 -0
  130. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +645 -0
  131. package/{esm2015/lib/filter/ogc-filter-selection/index.js → esm2020/lib/filter/ogc-filter-selection/index.mjs} +0 -0
  132. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1302 -0
  133. package/{esm2015/lib/filter/ogc-filter-time/index.js → esm2020/lib/filter/ogc-filter-time/index.mjs} +0 -0
  134. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +177 -0
  135. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +871 -0
  136. package/{esm2015/lib/filter/ogc-filterable-form/index.js → esm2020/lib/filter/ogc-filterable-form/index.mjs} +0 -0
  137. package/{esm2015/lib/filter/ogc-filterable-form/ogc-filterable-form.component.js → esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs} +3 -6
  138. package/{esm2015/lib/filter/ogc-filterable-item/index.js → esm2020/lib/filter/ogc-filterable-item/index.mjs} +0 -0
  139. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +302 -0
  140. package/{esm2015/lib/filter/ogc-filterable-list/index.js → esm2020/lib/filter/ogc-filterable-list/index.mjs} +0 -0
  141. package/{esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js → esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs} +0 -0
  142. package/{esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js → esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs} +2 -6
  143. package/{esm2015/lib/filter/shared/filterable-datasource.pipe.js → esm2020/lib/filter/shared/filterable-datasource.pipe.mjs} +0 -0
  144. package/{esm2015/lib/filter/shared/index.js → esm2020/lib/filter/shared/index.mjs} +0 -0
  145. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +72 -0
  146. package/{esm2015/lib/filter/shared/ogc-filter.enum.js → esm2020/lib/filter/shared/ogc-filter.enum.mjs} +0 -0
  147. package/{esm2015/lib/filter/shared/ogc-filter.interface.js → esm2020/lib/filter/shared/ogc-filter.interface.mjs} +0 -0
  148. package/esm2020/lib/filter/shared/ogc-filter.mjs +692 -0
  149. package/{esm2015/lib/filter/shared/ogc-filter.service.js → esm2020/lib/filter/shared/ogc-filter.service.mjs} +0 -0
  150. package/{esm2015/lib/filter/shared/spatial-filter.enum.js → esm2020/lib/filter/shared/spatial-filter.enum.mjs} +0 -0
  151. package/{esm2015/lib/filter/shared/spatial-filter.interface.js → esm2020/lib/filter/shared/spatial-filter.interface.mjs} +0 -0
  152. package/{esm2015/lib/filter/shared/spatial-filter.service.js → esm2020/lib/filter/shared/spatial-filter.service.mjs} +0 -0
  153. package/{esm2015/lib/filter/shared/time-filter.enum.js → esm2020/lib/filter/shared/time-filter.enum.mjs} +0 -0
  154. package/{esm2015/lib/filter/shared/time-filter.interface.js → esm2020/lib/filter/shared/time-filter.interface.mjs} +0 -0
  155. package/{esm2015/lib/filter/shared/time-filter.service.js → esm2020/lib/filter/shared/time-filter.service.mjs} +0 -0
  156. package/{esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js → esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs} +0 -0
  157. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1076 -0
  158. package/{esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js → esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs} +0 -0
  159. package/{esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js → esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs} +16 -32
  160. package/{esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js → esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs} +0 -0
  161. package/{esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js → esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs} +7 -20
  162. package/{esm2015/lib/filter/time-filter-button/index.js → esm2020/lib/filter/time-filter-button/index.mjs} +0 -0
  163. package/{esm2015/lib/filter/time-filter-button/time-filter-button.component.js → esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs} +3 -8
  164. package/{esm2015/lib/filter/time-filter-form/index.js → esm2020/lib/filter/time-filter-form/index.mjs} +0 -0
  165. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +734 -0
  166. package/{esm2015/lib/filter/time-filter-item/index.js → esm2020/lib/filter/time-filter-item/index.mjs} +0 -0
  167. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +119 -0
  168. package/{esm2015/lib/filter/time-filter-list/index.js → esm2020/lib/filter/time-filter-list/index.mjs} +0 -0
  169. package/{esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js → esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs} +0 -0
  170. package/{esm2015/lib/filter/time-filter-list/time-filter-list.component.js → esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs} +2 -6
  171. package/{esm2015/lib/geo.module.js → esm2020/lib/geo.module.mjs} +2 -2
  172. package/{esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js → esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs} +2 -6
  173. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +189 -0
  174. package/{esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js → esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs} +10 -12
  175. package/{esm2015/lib/geometry/geometry.module.js → esm2020/lib/geometry/geometry.module.mjs} +3 -5
  176. package/{esm2015/lib/geometry/index.js → esm2020/lib/geometry/index.mjs} +0 -0
  177. package/{esm2015/lib/geometry/shared/controls/draw.js → esm2020/lib/geometry/shared/controls/draw.mjs} +0 -0
  178. package/{esm2015/lib/geometry/shared/controls/index.js → esm2020/lib/geometry/shared/controls/index.mjs} +0 -0
  179. package/{esm2015/lib/geometry/shared/controls/modify.js → esm2020/lib/geometry/shared/controls/modify.mjs} +1 -1
  180. package/{esm2015/lib/geometry/shared/controls/slice.js → esm2020/lib/geometry/shared/controls/slice.mjs} +0 -0
  181. package/{esm2015/lib/geometry/shared/geometry.errors.js → esm2020/lib/geometry/shared/geometry.errors.mjs} +0 -0
  182. package/{esm2015/lib/geometry/shared/geometry.interfaces.js → esm2020/lib/geometry/shared/geometry.interfaces.mjs} +0 -0
  183. package/{esm2015/lib/geometry/shared/geometry.utils.js → esm2020/lib/geometry/shared/geometry.utils.mjs} +0 -0
  184. package/{esm2015/lib/geometry/shared/index.js → esm2020/lib/geometry/shared/index.mjs} +0 -0
  185. package/esm2020/lib/import-export/export-button/export-button.component.mjs +64 -0
  186. package/{esm2015/lib/import-export/export-button/index.js → esm2020/lib/import-export/export-button/index.mjs} +0 -0
  187. package/esm2020/lib/import-export/import-export/import-export.component.mjs +1190 -0
  188. package/{esm2015/lib/import-export/import-export/index.js → esm2020/lib/import-export/import-export/index.mjs} +0 -0
  189. package/{esm2015/lib/import-export/import-export.module.js → esm2020/lib/import-export/import-export.module.mjs} +19 -21
  190. package/{esm2015/lib/import-export/index.js → esm2020/lib/import-export/index.mjs} +0 -0
  191. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +135 -0
  192. package/{esm2015/lib/import-export/shared/export.errors.js → esm2020/lib/import-export/shared/export.errors.mjs} +0 -0
  193. package/{esm2015/lib/import-export/shared/export.interface.js → esm2020/lib/import-export/shared/export.interface.mjs} +0 -0
  194. package/{esm2015/lib/import-export/shared/export.service.js → esm2020/lib/import-export/shared/export.service.mjs} +0 -0
  195. package/{esm2015/lib/import-export/shared/export.type.js → esm2020/lib/import-export/shared/export.type.mjs} +0 -0
  196. package/{esm2015/lib/import-export/shared/export.utils.js → esm2020/lib/import-export/shared/export.utils.mjs} +0 -0
  197. package/{esm2015/lib/import-export/shared/import.errors.js → esm2020/lib/import-export/shared/import.errors.mjs} +0 -0
  198. package/{esm2015/lib/import-export/shared/import.interface.js → esm2020/lib/import-export/shared/import.interface.mjs} +0 -0
  199. package/{esm2015/lib/import-export/shared/import.service.js → esm2020/lib/import-export/shared/import.service.mjs} +0 -0
  200. package/{esm2015/lib/import-export/shared/import.utils.js → esm2020/lib/import-export/shared/import.utils.mjs} +0 -0
  201. package/{esm2015/lib/import-export/shared/index.js → esm2020/lib/import-export/shared/index.mjs} +0 -0
  202. package/{esm2015/lib/import-export/style-list/index.js → esm2020/lib/import-export/style-list/index.mjs} +0 -0
  203. package/{esm2015/lib/import-export/style-list/style-list.interface.js → esm2020/lib/import-export/style-list/style-list.interface.mjs} +0 -0
  204. package/{esm2015/lib/import-export/style-list/style-list.module.js → esm2020/lib/import-export/style-list/style-list.module.mjs} +2 -2
  205. package/{esm2015/lib/import-export/style-list/style-list.provider.js → esm2020/lib/import-export/style-list/style-list.provider.mjs} +0 -0
  206. package/{esm2015/lib/import-export/style-list/style-list.service.js → esm2020/lib/import-export/style-list/style-list.service.mjs} +0 -0
  207. package/{esm2015/lib/layer/index.js → esm2020/lib/layer/index.mjs} +0 -0
  208. package/{esm2015/lib/layer/layer-item/index.js → esm2020/lib/layer/layer-item/index.mjs} +0 -0
  209. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +300 -0
  210. package/{esm2015/lib/layer/layer-legend/index.js → esm2020/lib/layer/layer-legend/index.mjs} +0 -0
  211. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +382 -0
  212. package/{esm2015/lib/layer/layer-legend-item/index.js → esm2020/lib/layer/layer-legend-item/index.mjs} +0 -0
  213. package/{esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js → esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs} +4 -11
  214. package/{esm2015/lib/layer/layer-legend-list/index.js → esm2020/lib/layer/layer-legend-list/index.mjs} +0 -0
  215. package/{esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js → esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs} +0 -0
  216. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +195 -0
  217. package/{esm2015/lib/layer/layer-list/index.js → esm2020/lib/layer/layer-list/index.mjs} +0 -0
  218. package/{esm2015/lib/layer/layer-list/layer-list-binding.directive.js → esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs} +0 -0
  219. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1024 -0
  220. package/{esm2015/lib/layer/layer-list/layer-list.enum.js → esm2020/lib/layer/layer-list/layer-list.enum.mjs} +0 -0
  221. package/{esm2015/lib/layer/layer-list-tool/index.js → esm2020/lib/layer/layer-list-tool/index.mjs} +0 -0
  222. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +165 -0
  223. package/{esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js → esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs} +0 -0
  224. package/{esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js → esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs} +0 -0
  225. package/{esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js → esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs} +0 -0
  226. package/esm2020/lib/layer/layer.module.mjs +173 -0
  227. package/{esm2015/lib/layer/shared/clusterParam.js → esm2020/lib/layer/shared/clusterParam.mjs} +0 -0
  228. package/{esm2015/lib/layer/shared/index.js → esm2020/lib/layer/shared/index.mjs} +0 -0
  229. package/{esm2015/lib/layer/shared/layer.enums.js → esm2020/lib/layer/shared/layer.enums.mjs} +0 -0
  230. package/esm2020/lib/layer/shared/layer.service.mjs +186 -0
  231. package/{esm2015/lib/layer/shared/layers/any-layer.interface.js → esm2020/lib/layer/shared/layers/any-layer.interface.mjs} +0 -0
  232. package/{esm2015/lib/layer/shared/layers/any-layer.js → esm2020/lib/layer/shared/layers/any-layer.mjs} +0 -0
  233. package/{esm2015/lib/layer/shared/layers/image-layer.interface.js → esm2020/lib/layer/shared/layers/image-layer.interface.mjs} +0 -0
  234. package/{esm2015/lib/layer/shared/layers/image-layer.js → esm2020/lib/layer/shared/layers/image-layer.mjs} +0 -0
  235. package/{esm2015/lib/layer/shared/layers/index.js → esm2020/lib/layer/shared/layers/index.mjs} +0 -0
  236. package/{esm2015/lib/layer/shared/layers/layer.interface.js → esm2020/lib/layer/shared/layers/layer.interface.mjs} +0 -0
  237. package/esm2020/lib/layer/shared/layers/layer.mjs +170 -0
  238. package/{esm2015/lib/layer/shared/layers/tile-layer.interface.js → esm2020/lib/layer/shared/layers/tile-layer.interface.mjs} +0 -0
  239. package/{esm2015/lib/layer/shared/layers/tile-layer.js → esm2020/lib/layer/shared/layers/tile-layer.mjs} +0 -0
  240. package/{esm2015/lib/layer/shared/layers/vector-layer.interface.js → esm2020/lib/layer/shared/layers/vector-layer.interface.mjs} +0 -0
  241. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +376 -0
  242. package/{esm2015/lib/layer/shared/layers/vectortile-layer.interface.js → esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs} +0 -0
  243. package/{esm2015/lib/layer/shared/layers/vectortile-layer.js → esm2020/lib/layer/shared/layers/vectortile-layer.mjs} +0 -0
  244. package/esm2020/lib/layer/shared/style.service.mjs +356 -0
  245. package/{esm2015/lib/layer/shared/vector-style.interface.js → esm2020/lib/layer/shared/vector-style.interface.mjs} +0 -0
  246. package/{esm2015/lib/layer/track-feature-button/index.js → esm2020/lib/layer/track-feature-button/index.mjs} +0 -0
  247. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +59 -0
  248. package/{esm2015/lib/layer/utils/image-watcher.js → esm2020/lib/layer/utils/image-watcher.mjs} +0 -0
  249. package/{esm2015/lib/layer/utils/index.js → esm2020/lib/layer/utils/index.mjs} +0 -0
  250. package/esm2020/lib/layer/utils/layer.utils.mjs +10 -0
  251. package/esm2020/lib/layer/utils/layerSync-watcher.mjs +242 -0
  252. package/esm2020/lib/layer/utils/outputLegend.mjs +27 -0
  253. package/{esm2015/lib/layer/utils/tile-watcher.js → esm2020/lib/layer/utils/tile-watcher.mjs} +0 -0
  254. package/{esm2015/lib/layer/utils/vector-watcher.js → esm2020/lib/layer/utils/vector-watcher.mjs} +0 -0
  255. package/{esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js → esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs} +0 -0
  256. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +97 -0
  257. package/{esm2015/lib/map/baselayers-switcher/index.js → esm2020/lib/map/baselayers-switcher/index.mjs} +0 -0
  258. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +133 -0
  259. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +76 -0
  260. package/{esm2015/lib/map/geolocate-button/index.js → esm2020/lib/map/geolocate-button/index.mjs} +0 -0
  261. package/{esm2015/lib/map/home-extent-button/home-extent-button.component.js → esm2020/lib/map/home-extent-button/home-extent-button.component.mjs} +8 -14
  262. package/{esm2015/lib/map/home-extent-button/index.js → esm2020/lib/map/home-extent-button/index.mjs} +0 -0
  263. package/{esm2015/lib/map/index.js → esm2020/lib/map/index.mjs} +0 -0
  264. package/{esm2015/lib/map/info-section/index.js → esm2020/lib/map/info-section/index.mjs} +0 -0
  265. package/esm2020/lib/map/info-section/info-section.component.mjs +30 -0
  266. package/{esm2015/lib/map/map-browser/index.js → esm2020/lib/map/map-browser/index.mjs} +0 -0
  267. package/esm2020/lib/map/map-browser/map-browser.component.mjs +66 -0
  268. package/{esm2015/lib/map/map-center/index.js → esm2020/lib/map/map-center/index.mjs} +0 -0
  269. package/{esm2015/lib/map/map-center/map-center.component.js → esm2020/lib/map/map-center/map-center.component.mjs} +3 -8
  270. package/{esm2015/lib/map/map.module.js → esm2020/lib/map/map.module.mjs} +11 -13
  271. package/{esm2015/lib/map/menu-button/index.js → esm2020/lib/map/menu-button/index.mjs} +0 -0
  272. package/{esm2015/lib/map/menu-button/menu-button.component.js → esm2020/lib/map/menu-button/menu-button.component.mjs} +7 -11
  273. package/{esm2015/lib/map/offline-button/index.js → esm2020/lib/map/offline-button/index.mjs} +0 -0
  274. package/esm2020/lib/map/offline-button/offline-button.component.mjs +76 -0
  275. package/{esm2015/lib/map/rotation-button/index.js → esm2020/lib/map/rotation-button/index.mjs} +0 -0
  276. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +91 -0
  277. package/{esm2015/lib/map/shared/controllers/controller.js → esm2020/lib/map/shared/controllers/controller.mjs} +0 -0
  278. package/esm2020/lib/map/shared/controllers/geolocation.mjs +308 -0
  279. package/{esm2015/lib/map/shared/controllers/index.js → esm2020/lib/map/shared/controllers/index.mjs} +0 -0
  280. package/{esm2015/lib/map/shared/controllers/view.js → esm2020/lib/map/shared/controllers/view.mjs} +0 -0
  281. package/esm2020/lib/map/shared/hover-feature.directive.mjs +506 -0
  282. package/{esm2015/lib/map/shared/index.js → esm2020/lib/map/shared/index.mjs} +0 -0
  283. package/{esm2015/lib/map/shared/map-pointer-position.directive.js → esm2020/lib/map/shared/map-pointer-position.directive.mjs} +0 -0
  284. package/{esm2015/lib/map/shared/map.enums.js → esm2020/lib/map/shared/map.enums.mjs} +0 -0
  285. package/{esm2015/lib/map/shared/map.interface.js → esm2020/lib/map/shared/map.interface.mjs} +0 -0
  286. package/esm2020/lib/map/shared/map.mjs +417 -0
  287. package/{esm2015/lib/map/shared/map.service.js → esm2020/lib/map/shared/map.service.mjs} +0 -0
  288. package/{esm2015/lib/map/shared/map.utils.js → esm2020/lib/map/shared/map.utils.mjs} +0 -0
  289. package/{esm2015/lib/map/shared/mapOffline.directive.js → esm2020/lib/map/shared/mapOffline.directive.mjs} +0 -0
  290. package/{esm2015/lib/map/shared/projection.interfaces.js → esm2020/lib/map/shared/projection.interfaces.mjs} +0 -0
  291. package/{esm2015/lib/map/shared/projection.service.js → esm2020/lib/map/shared/projection.service.mjs} +0 -0
  292. package/{esm2015/lib/map/shared/projection.utils.js → esm2020/lib/map/shared/projection.utils.mjs} +0 -0
  293. package/{esm2015/lib/map/swipe-control/index.js → esm2020/lib/map/swipe-control/index.mjs} +0 -0
  294. package/{esm2015/lib/map/swipe-control/swipe-control.component.js → esm2020/lib/map/swipe-control/swipe-control.component.mjs} +4 -10
  295. package/{esm2015/lib/map/utils/layer-watcher.js → esm2020/lib/map/utils/layer-watcher.mjs} +0 -0
  296. package/{esm2015/lib/map/wake-lock-button/index.js → esm2020/lib/map/wake-lock-button/index.mjs} +0 -0
  297. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +114 -0
  298. package/{esm2015/lib/map/zoom-button/index.js → esm2020/lib/map/zoom-button/index.mjs} +0 -0
  299. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +40 -0
  300. package/{esm2015/lib/measure/index.js → esm2020/lib/measure/index.mjs} +0 -0
  301. package/{esm2015/lib/measure/measure.module.js → esm2020/lib/measure/measure.module.mjs} +2 -2
  302. package/{esm2015/lib/measure/measurer/measure-format.pipe.js → esm2020/lib/measure/measurer/measure-format.pipe.mjs} +0 -0
  303. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +180 -0
  304. package/{esm2015/lib/measure/measurer/measurer-item.component.js → esm2020/lib/measure/measurer/measurer-item.component.mjs} +12 -20
  305. package/esm2020/lib/measure/measurer/measurer.component.mjs +1042 -0
  306. package/esm2020/lib/measure/measurer/measurer.module.mjs +94 -0
  307. package/{esm2015/lib/measure/shared/index.js → esm2020/lib/measure/shared/index.mjs} +0 -0
  308. package/{esm2015/lib/measure/shared/measure.enum.js → esm2020/lib/measure/shared/measure.enum.mjs} +0 -0
  309. package/{esm2015/lib/measure/shared/measure.interfaces.js → esm2020/lib/measure/shared/measure.interfaces.mjs} +0 -0
  310. package/{esm2015/lib/measure/shared/measure.utils.js → esm2020/lib/measure/shared/measure.utils.mjs} +0 -0
  311. package/{esm2015/lib/metadata/index.js → esm2020/lib/metadata/index.mjs} +0 -0
  312. package/{esm2015/lib/metadata/metadata-button/index.js → esm2020/lib/metadata/metadata-button/index.mjs} +0 -0
  313. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +134 -0
  314. package/{esm2015/lib/metadata/metadata.module.js → esm2020/lib/metadata/metadata.module.mjs} +7 -9
  315. package/{esm2015/lib/metadata/shared/index.js → esm2020/lib/metadata/shared/index.mjs} +0 -0
  316. package/{esm2015/lib/metadata/shared/metadata.interface.js → esm2020/lib/metadata/shared/metadata.interface.mjs} +0 -0
  317. package/{esm2015/lib/metadata/shared/metadata.service.js → esm2020/lib/metadata/shared/metadata.service.mjs} +0 -0
  318. package/{esm2015/lib/offline/geoDB/geoDB.enums.js → esm2020/lib/offline/geoDB/geoDB.enums.mjs} +0 -0
  319. package/{esm2015/lib/offline/geoDB/geoDB.interface.js → esm2020/lib/offline/geoDB/geoDB.interface.mjs} +0 -0
  320. package/{esm2015/lib/offline/geoDB/geoDB.service.js → esm2020/lib/offline/geoDB/geoDB.service.mjs} +0 -0
  321. package/{esm2015/lib/offline/geoDB/index.js → esm2020/lib/offline/geoDB/index.mjs} +0 -0
  322. package/{esm2015/lib/offline/index.js → esm2020/lib/offline/index.mjs} +0 -0
  323. package/{esm2015/lib/offline/shared/geo-network.service.js → esm2020/lib/offline/shared/geo-network.service.mjs} +0 -0
  324. package/{esm2015/lib/offline/shared/index.js → esm2020/lib/offline/shared/index.mjs} +0 -0
  325. package/{esm2015/lib/overlay/index.js → esm2020/lib/overlay/index.mjs} +0 -0
  326. package/{esm2015/lib/overlay/overlay.module.js → esm2020/lib/overlay/overlay.module.mjs} +2 -2
  327. package/{esm2015/lib/overlay/shared/index.js → esm2020/lib/overlay/shared/index.mjs} +0 -0
  328. package/{esm2015/lib/overlay/shared/overlay-marker-style.utils.js → esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs} +0 -0
  329. package/{esm2015/lib/overlay/shared/overlay.directive.js → esm2020/lib/overlay/shared/overlay.directive.mjs} +0 -0
  330. package/{esm2015/lib/overlay/shared/overlay.enum.js → esm2020/lib/overlay/shared/overlay.enum.mjs} +0 -0
  331. package/{esm2015/lib/overlay/shared/overlay.js → esm2020/lib/overlay/shared/overlay.mjs} +0 -0
  332. package/{esm2015/lib/overlay/shared/overlay.service.js → esm2020/lib/overlay/shared/overlay.service.mjs} +0 -0
  333. package/{esm2015/lib/overlay/shared/overlay.utils.js → esm2020/lib/overlay/shared/overlay.utils.mjs} +0 -0
  334. package/{esm2015/lib/print/index.js → esm2020/lib/print/index.mjs} +0 -0
  335. package/{esm2015/lib/print/print/print.component.js → esm2020/lib/print/print/print.component.mjs} +3 -6
  336. package/{esm2015/lib/print/print-form/index.js → esm2020/lib/print/print-form/index.mjs} +0 -0
  337. package/esm2020/lib/print/print-form/print-form.component.mjs +405 -0
  338. package/{esm2015/lib/print/print.module.js → esm2020/lib/print/print.module.mjs} +13 -15
  339. package/{esm2015/lib/print/shared/index.js → esm2020/lib/print/shared/index.mjs} +0 -0
  340. package/{esm2015/lib/print/shared/print.interface.js → esm2020/lib/print/shared/print.interface.mjs} +0 -0
  341. package/esm2020/lib/print/shared/print.service.mjs +807 -0
  342. package/{esm2015/lib/print/shared/print.type.js → esm2020/lib/print/shared/print.type.mjs} +0 -0
  343. package/{esm2015/lib/query/index.js → esm2020/lib/query/index.mjs} +0 -0
  344. package/{esm2015/lib/query/query.module.js → esm2020/lib/query/query.module.mjs} +2 -2
  345. package/{esm2015/lib/query/shared/index.js → esm2020/lib/query/shared/index.mjs} +0 -0
  346. package/{esm2015/lib/query/shared/query-search-source.js → esm2020/lib/query/shared/query-search-source.mjs} +0 -0
  347. package/{esm2015/lib/query/shared/query-search-source.providers.js → esm2020/lib/query/shared/query-search-source.providers.mjs} +0 -0
  348. package/{esm2015/lib/query/shared/query.directive.js → esm2020/lib/query/shared/query.directive.mjs} +0 -0
  349. package/{esm2015/lib/query/shared/query.enums.js → esm2020/lib/query/shared/query.enums.mjs} +0 -0
  350. package/{esm2015/lib/query/shared/query.interfaces.js → esm2020/lib/query/shared/query.interfaces.mjs} +0 -0
  351. package/esm2020/lib/query/shared/query.service.mjs +613 -0
  352. package/{esm2015/lib/query/shared/query.utils.js → esm2020/lib/query/shared/query.utils.mjs} +0 -0
  353. package/{esm2015/lib/search/index.js → esm2020/lib/search/index.mjs} +0 -0
  354. package/esm2020/lib/search/search-bar/search-bar.component.mjs +489 -0
  355. package/{esm2015/lib/search/search-bar/search-bar.module.js → esm2020/lib/search/search-bar/search-bar.module.mjs} +13 -15
  356. package/{esm2015/lib/search/search-bar/search-url-param.directive.js → esm2020/lib/search/search-bar/search-url-param.directive.mjs} +0 -0
  357. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +193 -0
  358. package/esm2020/lib/search/search-results/search-results-item.component.mjs +124 -0
  359. package/esm2020/lib/search/search-results/search-results.component.mjs +331 -0
  360. package/{esm2015/lib/search/search-results/search-results.module.js → esm2020/lib/search/search-results/search-results.module.mjs} +13 -15
  361. package/esm2020/lib/search/search-selector/search-selector.component.mjs +123 -0
  362. package/{esm2015/lib/search/search-selector/search-selector.module.js → esm2020/lib/search/search-selector/search-selector.module.mjs} +10 -12
  363. package/esm2020/lib/search/search-settings/search-settings.component.mjs +418 -0
  364. package/{esm2015/lib/search/search-settings/search-settings.module.js → esm2020/lib/search/search-settings/search-settings.module.mjs} +11 -13
  365. package/{esm2015/lib/search/search.module.js → esm2020/lib/search/search.module.mjs} +6 -8
  366. package/{esm2015/lib/search/shared/index.js → esm2020/lib/search/shared/index.mjs} +0 -0
  367. package/{esm2015/lib/search/shared/search-pointer-summary.directive.js → esm2020/lib/search/shared/search-pointer-summary.directive.mjs} +0 -0
  368. package/{esm2015/lib/search/shared/search-source-service.providers.js → esm2020/lib/search/shared/search-source-service.providers.mjs} +0 -0
  369. package/{esm2015/lib/search/shared/search-source.service.js → esm2020/lib/search/shared/search-source.service.mjs} +0 -0
  370. package/{esm2015/lib/search/shared/search.enums.js → esm2020/lib/search/shared/search.enums.mjs} +0 -0
  371. package/{esm2015/lib/search/shared/search.interfaces.js → esm2020/lib/search/shared/search.interfaces.mjs} +0 -0
  372. package/esm2020/lib/search/shared/search.service.mjs +118 -0
  373. package/{esm2015/lib/search/shared/search.utils.js → esm2020/lib/search/shared/search.utils.mjs} +0 -0
  374. package/{esm2015/lib/search/shared/sources/cadastre.js → esm2020/lib/search/shared/sources/cadastre.mjs} +1 -1
  375. package/{esm2015/lib/search/shared/sources/cadastre.providers.js → esm2020/lib/search/shared/sources/cadastre.providers.mjs} +0 -0
  376. package/{esm2015/lib/search/shared/sources/coordinates.interfaces.js → esm2020/lib/search/shared/sources/coordinates.interfaces.mjs} +0 -0
  377. package/{esm2015/lib/search/shared/sources/coordinates.js → esm2020/lib/search/shared/sources/coordinates.mjs} +0 -0
  378. package/{esm2015/lib/search/shared/sources/coordinates.providers.js → esm2020/lib/search/shared/sources/coordinates.providers.mjs} +0 -0
  379. package/{esm2015/lib/search/shared/sources/icherche.interfaces.js → esm2020/lib/search/shared/sources/icherche.interfaces.mjs} +0 -0
  380. package/esm2020/lib/search/shared/sources/icherche.mjs +755 -0
  381. package/{esm2015/lib/search/shared/sources/icherche.providers.js → esm2020/lib/search/shared/sources/icherche.providers.mjs} +0 -0
  382. package/{esm2015/lib/search/shared/sources/ilayer.interfaces.js → esm2020/lib/search/shared/sources/ilayer.interfaces.mjs} +0 -0
  383. package/{esm2015/lib/search/shared/sources/ilayer.js → esm2020/lib/search/shared/sources/ilayer.mjs} +0 -0
  384. package/{esm2015/lib/search/shared/sources/ilayer.providers.js → esm2020/lib/search/shared/sources/ilayer.providers.mjs} +0 -0
  385. package/{esm2015/lib/search/shared/sources/index.js → esm2020/lib/search/shared/sources/index.mjs} +0 -0
  386. package/{esm2015/lib/search/shared/sources/nominatim.interfaces.js → esm2020/lib/search/shared/sources/nominatim.interfaces.mjs} +0 -0
  387. package/{esm2015/lib/search/shared/sources/nominatim.js → esm2020/lib/search/shared/sources/nominatim.mjs} +0 -0
  388. package/{esm2015/lib/search/shared/sources/nominatim.providers.js → esm2020/lib/search/shared/sources/nominatim.providers.mjs} +0 -0
  389. package/{esm2015/lib/search/shared/sources/source.interfaces.js → esm2020/lib/search/shared/sources/source.interfaces.mjs} +0 -0
  390. package/{esm2015/lib/search/shared/sources/source.js → esm2020/lib/search/shared/sources/source.mjs} +0 -0
  391. package/{esm2015/lib/search/shared/sources/storedqueries.interfaces.js → esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs} +0 -0
  392. package/{esm2015/lib/search/shared/sources/storedqueries.js → esm2020/lib/search/shared/sources/storedqueries.mjs} +1 -1
  393. package/{esm2015/lib/search/shared/sources/storedqueries.providers.js → esm2020/lib/search/shared/sources/storedqueries.providers.mjs} +0 -0
  394. package/{esm2015/lib/toast/index.js → esm2020/lib/toast/index.mjs} +0 -0
  395. package/esm2020/lib/toast/toast.component.mjs +113 -0
  396. package/{esm2015/lib/toast/toast.module.js → esm2020/lib/toast/toast.module.mjs} +7 -9
  397. package/{esm2015/lib/utils/commonVectorStyle.interface.js → esm2020/lib/utils/commonVectorStyle.interface.mjs} +0 -0
  398. package/{esm2015/lib/utils/commonVectorStyle.js → esm2020/lib/utils/commonVectorStyle.mjs} +0 -0
  399. package/{esm2015/lib/utils/googleLinks.js → esm2020/lib/utils/googleLinks.mjs} +0 -0
  400. package/{esm2015/lib/utils/id-generator.js → esm2020/lib/utils/id-generator.mjs} +0 -0
  401. package/{esm2015/lib/utils/index.js → esm2020/lib/utils/index.mjs} +0 -0
  402. package/{esm2015/lib/utils/osmLinks.js → esm2020/lib/utils/osmLinks.mjs} +0 -0
  403. package/{esm2015/lib/wkt/index.js → esm2020/lib/wkt/index.mjs} +0 -0
  404. package/{esm2015/lib/wkt/shared/index.js → esm2020/lib/wkt/shared/index.mjs} +0 -0
  405. package/{esm2015/lib/wkt/shared/wkt.service.js → esm2020/lib/wkt/shared/wkt.service.mjs} +0 -0
  406. package/{esm2015/lib/wkt/wkt.module.js → esm2020/lib/wkt/wkt.module.mjs} +2 -2
  407. package/{esm2015/lib/workspace/confirmation-popup/confirmation-popup.component.js → esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs} +7 -15
  408. package/{esm2015/lib/workspace/confirmation-popup/confirmation-popup.module.js → esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs} +5 -7
  409. package/{esm2015/lib/workspace/confirmation-popup/index.js → esm2020/lib/workspace/confirmation-popup/index.mjs} +0 -0
  410. package/{esm2015/lib/workspace/index.js → esm2020/lib/workspace/index.mjs} +0 -0
  411. package/{esm2015/lib/workspace/shared/edition-workspace.js → esm2020/lib/workspace/shared/edition-workspace.mjs} +2 -3
  412. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +642 -0
  413. package/esm2020/lib/workspace/shared/feature-workspace.mjs +35 -0
  414. package/{esm2015/lib/workspace/shared/wfs-workspace.service.js → esm2020/lib/workspace/shared/feature-workspace.service.mjs} +8 -9
  415. package/{esm2015/lib/workspace/shared/index.js → esm2020/lib/workspace/shared/index.mjs} +0 -0
  416. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +35 -0
  417. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +150 -0
  418. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +261 -0
  419. package/{esm2015/lib/workspace/shared/workspace.utils.js → esm2020/lib/workspace/shared/workspace.utils.mjs} +0 -0
  420. package/{esm2015/lib/workspace/widgets/index.js → esm2020/lib/workspace/widgets/index.mjs} +0 -0
  421. package/{esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js → esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs} +3 -8
  422. package/{esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js → esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs} +5 -7
  423. package/{esm2015/lib/workspace/widgets/widgets.js → esm2020/lib/workspace/widgets/widgets.mjs} +0 -0
  424. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +133 -0
  425. package/{esm2015/lib/workspace/workspace-selector/workspace-selector.module.js → esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs} +2 -4
  426. package/{esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js → esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs} +8 -11
  427. package/{esm2015/lib/workspace/workspace-updator/workspace-updator.module.js → esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs} +2 -4
  428. package/{esm2015/lib/workspace/workspace.module.js → esm2020/lib/workspace/workspace.module.mjs} +8 -10
  429. package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
  430. package/fesm2015/igo2-geo.mjs +42904 -0
  431. package/fesm2015/igo2-geo.mjs.map +1 -0
  432. package/{fesm2015/igo2-geo.js → fesm2020/igo2-geo.mjs} +1635 -2527
  433. package/fesm2020/igo2-geo.mjs.map +1 -0
  434. package/{igo2-geo.d.ts → index.d.ts} +0 -0
  435. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +1 -1
  436. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
  437. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
  438. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +1 -1
  439. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
  440. package/lib/catalog/catalog-library/catalog-library.component.d.ts +1 -1
  441. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +1 -1
  442. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +1 -1
  443. package/lib/directions/directions-results/directions-results.component.d.ts +1 -1
  444. package/lib/directions/directions.component.d.ts +1 -1
  445. package/lib/download/download-button/download-button.component.d.ts +1 -1
  446. package/lib/draw/draw/draw-popup.component.d.ts +1 -1
  447. package/lib/draw/draw/draw-shorcuts.component.d.ts +1 -1
  448. package/lib/draw/draw/draw.component.d.ts +1 -1
  449. package/lib/feature/feature-details/feature-details.component.d.ts +1 -1
  450. package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
  451. package/lib/feature/feature-form/feature-form.component.d.ts +1 -1
  452. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  453. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +1 -1
  454. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +1 -1
  455. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
  456. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +5 -5
  457. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +1 -1
  458. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  459. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
  460. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +1 -1
  461. package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
  462. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +4 -4
  463. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +3 -3
  464. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +2 -2
  465. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  466. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +1 -1
  467. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  468. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
  469. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
  470. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -1
  471. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +1 -1
  472. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  473. package/lib/import-export/import-export/import-export.component.d.ts +1 -1
  474. package/lib/import-export/shared/drop-geo-file.directive.d.ts +1 -1
  475. package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
  476. package/lib/layer/layer-legend/layer-legend.component.d.ts +1 -1
  477. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
  478. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
  479. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
  480. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
  481. package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
  482. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
  483. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
  484. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
  485. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  486. package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
  487. package/lib/map/home-extent-button/home-extent-button.component.d.ts +1 -1
  488. package/lib/map/info-section/info-section.component.d.ts +1 -1
  489. package/lib/map/map-browser/map-browser.component.d.ts +1 -1
  490. package/lib/map/map-center/map-center.component.d.ts +1 -1
  491. package/lib/map/menu-button/menu-button.component.d.ts +1 -1
  492. package/lib/map/offline-button/offline-button.component.d.ts +1 -1
  493. package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
  494. package/lib/map/shared/controllers/geolocation.d.ts +3 -2
  495. package/lib/map/shared/hover-feature.directive.d.ts +1 -1
  496. package/lib/map/shared/map-pointer-position.directive.d.ts +1 -1
  497. package/lib/map/shared/map.d.ts +3 -2
  498. package/lib/map/shared/mapOffline.directive.d.ts +1 -1
  499. package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
  500. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +1 -1
  501. package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
  502. package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
  503. package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
  504. package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
  505. package/lib/measure/measurer/measurer.component.d.ts +1 -1
  506. package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
  507. package/lib/overlay/shared/overlay.directive.d.ts +1 -1
  508. package/lib/print/print/print.component.d.ts +1 -1
  509. package/lib/print/print-form/print-form.component.d.ts +14 -14
  510. package/lib/print/shared/print.service.d.ts +6 -1
  511. package/lib/query/shared/query.directive.d.ts +1 -1
  512. package/lib/search/search-bar/search-bar.component.d.ts +1 -1
  513. package/lib/search/search-bar/search-url-param.directive.d.ts +1 -1
  514. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  515. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  516. package/lib/search/search-results/search-results.component.d.ts +1 -1
  517. package/lib/search/search-selector/search-selector.component.d.ts +1 -1
  518. package/lib/search/search-settings/search-settings.component.d.ts +1 -1
  519. package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
  520. package/lib/toast/toast.component.d.ts +1 -1
  521. package/lib/wkt/shared/wkt.service.d.ts +1 -1
  522. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
  523. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  524. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
  525. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
  526. package/package.json +31 -18
  527. package/bundles/igo2-geo.umd.js +0 -47612
  528. package/bundles/igo2-geo.umd.js.map +0 -1
  529. package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +0 -305
  530. package/esm2015/lib/catalog/catalog-browser/catalog-browser.component.js +0 -248
  531. package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +0 -235
  532. package/esm2015/lib/catalog/catalog-library/catalog-library-item.component.js +0 -85
  533. package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +0 -224
  534. package/esm2015/lib/catalog/shared/catalog.service.js +0 -606
  535. package/esm2015/lib/datasource/shared/capabilities.service.js +0 -427
  536. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.js +0 -74
  537. package/esm2015/lib/datasource/shared/datasources/wfs.service.js +0 -153
  538. package/esm2015/lib/datasource/shared/datasources/wms-datasource.js +0 -205
  539. package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +0 -229
  540. package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +0 -300
  541. package/esm2015/lib/directions/directions-results/directions-results.component.js +0 -204
  542. package/esm2015/lib/directions/directions.component.js +0 -316
  543. package/esm2015/lib/directions/shared/directions.utils.js +0 -510
  544. package/esm2015/lib/download/download-button/download-button.component.js +0 -66
  545. package/esm2015/lib/draw/draw/draw-shorcuts.component.js +0 -64
  546. package/esm2015/lib/draw/draw/draw.component.js +0 -745
  547. package/esm2015/lib/feature/feature-details/feature-details.component.js +0 -393
  548. package/esm2015/lib/feature/shared/strategies/in-map-extent.js +0 -114
  549. package/esm2015/lib/filter/filter.module.js +0 -290
  550. package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +0 -161
  551. package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +0 -657
  552. package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +0 -1355
  553. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.js +0 -185
  554. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +0 -898
  555. package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +0 -307
  556. package/esm2015/lib/filter/shared/ogc-filter-time.service.js +0 -73
  557. package/esm2015/lib/filter/shared/ogc-filter.js +0 -693
  558. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +0 -1108
  559. package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +0 -772
  560. package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +0 -126
  561. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +0 -199
  562. package/esm2015/lib/import-export/export-button/export-button.component.js +0 -70
  563. package/esm2015/lib/import-export/import-export/import-export.component.js +0 -1238
  564. package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +0 -136
  565. package/esm2015/lib/layer/layer-item/layer-item.component.js +0 -305
  566. package/esm2015/lib/layer/layer-legend/layer-legend.component.js +0 -395
  567. package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +0 -200
  568. package/esm2015/lib/layer/layer-list/layer-list.component.js +0 -1043
  569. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +0 -176
  570. package/esm2015/lib/layer/layer.module.js +0 -174
  571. package/esm2015/lib/layer/shared/layer.service.js +0 -186
  572. package/esm2015/lib/layer/shared/layers/layer.js +0 -169
  573. package/esm2015/lib/layer/shared/layers/vector-layer.js +0 -376
  574. package/esm2015/lib/layer/shared/style.service.js +0 -358
  575. package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +0 -64
  576. package/esm2015/lib/layer/utils/layer.utils.js +0 -11
  577. package/esm2015/lib/layer/utils/layerSync-watcher.js +0 -249
  578. package/esm2015/lib/layer/utils/outputLegend.js +0 -27
  579. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.component.js +0 -105
  580. package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +0 -137
  581. package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +0 -82
  582. package/esm2015/lib/map/info-section/info-section.component.js +0 -36
  583. package/esm2015/lib/map/map-browser/map-browser.component.js +0 -70
  584. package/esm2015/lib/map/offline-button/offline-button.component.js +0 -84
  585. package/esm2015/lib/map/rotation-button/rotation-button.component.js +0 -97
  586. package/esm2015/lib/map/shared/controllers/geolocation.js +0 -295
  587. package/esm2015/lib/map/shared/hover-feature.directive.js +0 -509
  588. package/esm2015/lib/map/shared/map.js +0 -417
  589. package/esm2015/lib/map/wake-lock-button/wake-lock-button.component.js +0 -122
  590. package/esm2015/lib/map/zoom-button/zoom-button.component.js +0 -46
  591. package/esm2015/lib/measure/measurer/measurer-dialog.component.js +0 -220
  592. package/esm2015/lib/measure/measurer/measurer.component.js +0 -1053
  593. package/esm2015/lib/measure/measurer/measurer.module.js +0 -96
  594. package/esm2015/lib/metadata/metadata-button/metadata-button.component.js +0 -135
  595. package/esm2015/lib/print/print-form/print-form.component.js +0 -447
  596. package/esm2015/lib/print/shared/print.service.js +0 -820
  597. package/esm2015/lib/query/shared/query.service.js +0 -619
  598. package/esm2015/lib/search/search-bar/search-bar.component.js +0 -496
  599. package/esm2015/lib/search/search-results/search-results-add-button.component.js +0 -198
  600. package/esm2015/lib/search/search-results/search-results-item.component.js +0 -129
  601. package/esm2015/lib/search/search-results/search-results.component.js +0 -337
  602. package/esm2015/lib/search/search-selector/search-selector.component.js +0 -132
  603. package/esm2015/lib/search/search-settings/search-settings.component.js +0 -435
  604. package/esm2015/lib/search/shared/search.service.js +0 -118
  605. package/esm2015/lib/search/shared/sources/icherche.js +0 -756
  606. package/esm2015/lib/toast/toast.component.js +0 -119
  607. package/esm2015/lib/workspace/shared/edition-workspace.service.js +0 -646
  608. package/esm2015/lib/workspace/shared/feature-workspace.js +0 -37
  609. package/esm2015/lib/workspace/shared/feature-workspace.service.js +0 -151
  610. package/esm2015/lib/workspace/shared/wfs-workspace.js +0 -37
  611. package/esm2015/lib/workspace/shared/wms-workspace.service.js +0 -263
  612. package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +0 -135
  613. package/fesm2015/igo2-geo.js.map +0 -1
@@ -0,0 +1,692 @@
1
+ import * as olfilter from 'ol/format/filter';
2
+ import olFormatWKT from 'ol/format/WKT';
3
+ import olFormatWFS from 'ol/format/WFS';
4
+ import { uuid, ObjectUtils } from '@igo2/utils';
5
+ import { OgcFilterOperatorType, OgcFilterOperator } from './ogc-filter.enum';
6
+ import { default as moment } from 'moment';
7
+ export class OgcFilterWriter {
8
+ constructor() {
9
+ this.filterSequence = [];
10
+ this.operators = {
11
+ [OgcFilterOperator.PropertyIsEqualTo]: {
12
+ spatial: false,
13
+ fieldRestrict: []
14
+ },
15
+ [OgcFilterOperator.PropertyIsNotEqualTo]: {
16
+ spatial: false,
17
+ fieldRestrict: []
18
+ },
19
+ [OgcFilterOperator.PropertyIsLike]: {
20
+ spatial: false,
21
+ fieldRestrict: ['string']
22
+ },
23
+ [OgcFilterOperator.PropertyIsGreaterThan]: {
24
+ spatial: false,
25
+ fieldRestrict: ['number']
26
+ },
27
+ [OgcFilterOperator.PropertyIsGreaterThanOrEqualTo]: {
28
+ spatial: false,
29
+ fieldRestrict: ['number']
30
+ },
31
+ [OgcFilterOperator.PropertyIsLessThan]: {
32
+ spatial: false,
33
+ fieldRestrict: ['number']
34
+ },
35
+ [OgcFilterOperator.PropertyIsLessThanOrEqualTo]: {
36
+ spatial: false,
37
+ fieldRestrict: ['number']
38
+ },
39
+ [OgcFilterOperator.PropertyIsBetween]: {
40
+ spatial: false,
41
+ fieldRestrict: ['number']
42
+ },
43
+ [OgcFilterOperator.During]: { spatial: false, fieldRestrict: [] },
44
+ [OgcFilterOperator.PropertyIsNull]: {
45
+ spatial: false,
46
+ fieldRestrict: []
47
+ },
48
+ [OgcFilterOperator.Intersects]: {
49
+ spatial: true,
50
+ fieldRestrict: []
51
+ },
52
+ [OgcFilterOperator.Within]: { spatial: true, fieldRestrict: [] },
53
+ [OgcFilterOperator.Contains]: { spatial: true, fieldRestrict: [] }
54
+ };
55
+ }
56
+ defineOgcFiltersDefaultOptions(ogcFiltersOptions, fieldNameGeometry, srcType) {
57
+ let ogcFiltersDefaultValue = true; // default values for wfs.
58
+ if (srcType && srcType === 'wms') {
59
+ ogcFiltersDefaultValue = false;
60
+ }
61
+ ogcFiltersOptions = ogcFiltersOptions || {};
62
+ ogcFiltersOptions.enabled =
63
+ ogcFiltersOptions.enabled === undefined
64
+ ? ogcFiltersDefaultValue
65
+ : ogcFiltersOptions.enabled;
66
+ ogcFiltersOptions.editable =
67
+ ogcFiltersOptions.editable === undefined
68
+ ? ogcFiltersDefaultValue
69
+ : ogcFiltersOptions.editable;
70
+ ogcFiltersOptions.geometryName = fieldNameGeometry;
71
+ ogcFiltersOptions.advancedOgcFilters = true;
72
+ if (ogcFiltersOptions.enabled && (ogcFiltersOptions.pushButtons || ogcFiltersOptions.checkboxes
73
+ || ogcFiltersOptions.radioButtons || ogcFiltersOptions.select || ogcFiltersOptions.autocomplete)) {
74
+ ogcFiltersOptions.advancedOgcFilters = false;
75
+ }
76
+ return ogcFiltersOptions;
77
+ }
78
+ buildFilter(filters, extent, proj, fieldNameGeometry, options) {
79
+ let ourBboxFilter;
80
+ let enableBbox;
81
+ if (/intersects|contains|within/gi.test(JSON.stringify(filters))) {
82
+ enableBbox = false;
83
+ }
84
+ else {
85
+ enableBbox = true;
86
+ }
87
+ if (filters) {
88
+ fieldNameGeometry =
89
+ filters.geometryName !== undefined
90
+ ? filters.geometryName
91
+ : fieldNameGeometry;
92
+ }
93
+ if (extent && filters) {
94
+ ourBboxFilter = olfilter.bbox(fieldNameGeometry, extent, proj.getCode());
95
+ }
96
+ let filterAssembly;
97
+ if (filters) {
98
+ filters = this.checkIgoFiltersProperties(filters, fieldNameGeometry, proj);
99
+ if (extent && enableBbox) {
100
+ filterAssembly = olfilter.and(ourBboxFilter, this.bundleFilter(filters, options));
101
+ }
102
+ else {
103
+ filterAssembly = this.bundleFilter(filters, options);
104
+ }
105
+ }
106
+ else {
107
+ return 'bbox=' + extent.join(',') + ',' + proj.getCode();
108
+ }
109
+ const wfsOptions = {
110
+ srsName: '',
111
+ featureNS: '',
112
+ featurePrefix: '',
113
+ featureTypes: ['featureTypes'],
114
+ filter: filterAssembly,
115
+ outputFormat: '',
116
+ geometryName: fieldNameGeometry
117
+ };
118
+ const query = new olFormatWFS().writeGetFeature(wfsOptions);
119
+ const str = new XMLSerializer().serializeToString(query);
120
+ const regexp1 = /typenames *=|typename *=\"featureTypes\" *>/gi;
121
+ const regexp2 = /<\/Query><\/GetFeature>/gi;
122
+ return 'filter=' + str.split(regexp1)[1].split(regexp2)[0];
123
+ }
124
+ bundleFilter(filterObject, options) {
125
+ if (filterObject instanceof Array) {
126
+ const logicalArray = [];
127
+ filterObject.forEach((element) => {
128
+ logicalArray.push(this.bundleFilter(element, options));
129
+ });
130
+ return logicalArray;
131
+ }
132
+ else {
133
+ if (filterObject.hasOwnProperty('logical')) {
134
+ return this.createFilter({
135
+ operator: filterObject.logical,
136
+ logicalArray: this.bundleFilter(filterObject.filters, options)
137
+ }, options);
138
+ }
139
+ else if (filterObject.hasOwnProperty('operator')) {
140
+ return this.createFilter(filterObject, options);
141
+ }
142
+ }
143
+ }
144
+ createFilter(filterOptions, options) {
145
+ const operator = filterOptions.operator;
146
+ const logicalArray = filterOptions.logicalArray;
147
+ const wfsPropertyName = filterOptions.propertyName;
148
+ const wfsPattern = filterOptions.pattern;
149
+ const wfsMatchCase = filterOptions.matchCase
150
+ ? filterOptions.matchCase
151
+ : true;
152
+ const wfsWildCard = filterOptions.wildCard ? filterOptions.wildCard : '*';
153
+ const wfsSingleChar = filterOptions.singleChar
154
+ ? filterOptions.singleChar
155
+ : '.';
156
+ const wfsEscapeChar = filterOptions.escapeChar
157
+ ? filterOptions.escapeChar
158
+ : '!';
159
+ const wfsLowerBoundary = filterOptions.lowerBoundary;
160
+ const wfsUpperBoundary = filterOptions.upperBoundary;
161
+ const wfsGeometryName = filterOptions.geometryName;
162
+ const wfsExtent = filterOptions.extent;
163
+ const wfsWktGeometry = filterOptions.wkt_geometry;
164
+ const wfsSrsName = filterOptions.srsName
165
+ ? filterOptions.srsName
166
+ : 'EPSG:3857';
167
+ const wfsBegin = this.parseFilterOptionDate(filterOptions.begin, options ? options.minDate : undefined);
168
+ const wfsEnd = this.parseFilterOptionDate(filterOptions.end, options ? options.maxDate : undefined);
169
+ const wfsExpression = filterOptions.expression;
170
+ let geometry;
171
+ if (wfsWktGeometry) {
172
+ const wkt = new olFormatWKT();
173
+ geometry = wkt.readGeometry(wfsWktGeometry, {
174
+ dataProjection: wfsSrsName,
175
+ featureProjection: wfsSrsName || 'EPSG:3857'
176
+ });
177
+ }
178
+ switch (operator.toLowerCase()) {
179
+ case OgcFilterOperator.BBOX.toLowerCase():
180
+ return olfilter.bbox(wfsGeometryName, wfsExtent, wfsSrsName);
181
+ case OgcFilterOperator.PropertyIsBetween.toLowerCase():
182
+ return olfilter.between(wfsPropertyName, wfsLowerBoundary || 1e40 * -1, wfsUpperBoundary || 1e40);
183
+ case OgcFilterOperator.Contains.toLowerCase():
184
+ return olfilter.contains(wfsGeometryName, geometry, wfsSrsName);
185
+ case OgcFilterOperator.During.toLowerCase():
186
+ return olfilter.during(wfsPropertyName, wfsBegin, wfsEnd);
187
+ case OgcFilterOperator.PropertyIsEqualTo.toLowerCase():
188
+ return olfilter.equalTo(wfsPropertyName, wfsExpression, wfsMatchCase);
189
+ case OgcFilterOperator.PropertyIsGreaterThan.toLowerCase():
190
+ return olfilter.greaterThan(wfsPropertyName, wfsExpression);
191
+ case OgcFilterOperator.PropertyIsGreaterThanOrEqualTo.toLowerCase():
192
+ return olfilter.greaterThanOrEqualTo(wfsPropertyName, wfsExpression);
193
+ case OgcFilterOperator.Intersects.toLowerCase():
194
+ return olfilter.intersects(wfsGeometryName, geometry, wfsSrsName);
195
+ case OgcFilterOperator.PropertyIsNull.toLowerCase():
196
+ return olfilter.isNull(wfsPropertyName);
197
+ case OgcFilterOperator.PropertyIsLessThan.toLowerCase():
198
+ return olfilter.lessThan(wfsPropertyName, wfsExpression);
199
+ case OgcFilterOperator.PropertyIsLessThanOrEqualTo.toLowerCase():
200
+ return olfilter.lessThanOrEqualTo(wfsPropertyName, wfsExpression);
201
+ case OgcFilterOperator.PropertyIsLike.toLowerCase():
202
+ return olfilter.like(wfsPropertyName, wfsPattern ? wfsPattern.replace(/[()_]/gi, wfsSingleChar) : wfsWildCard, wfsWildCard, wfsSingleChar, wfsEscapeChar, wfsMatchCase);
203
+ case OgcFilterOperator.PropertyIsNotEqualTo.toLowerCase():
204
+ return olfilter.notEqualTo(wfsPropertyName, wfsExpression, wfsMatchCase);
205
+ case OgcFilterOperator.Within.toLowerCase():
206
+ return olfilter.within(wfsGeometryName, geometry, wfsSrsName);
207
+ // LOGICAL
208
+ case OgcFilterOperator.And.toLowerCase():
209
+ return olfilter.and.apply(null, logicalArray);
210
+ case OgcFilterOperator.Or.toLowerCase():
211
+ return olfilter.or.apply(null, logicalArray);
212
+ case OgcFilterOperator.Not.toLowerCase():
213
+ return olfilter.not.apply(null, logicalArray);
214
+ default:
215
+ return undefined;
216
+ }
217
+ }
218
+ defineInterfaceFilterSequence(filterObject, geometryName, logical = '', level = -1) {
219
+ if (filterObject instanceof Array) {
220
+ filterObject.forEach((element) => {
221
+ this.filterSequence.concat(this.defineInterfaceFilterSequence(element, geometryName, logical, level));
222
+ });
223
+ }
224
+ else {
225
+ if (filterObject.hasOwnProperty('logical')) {
226
+ level = level + 1;
227
+ this.filterSequence.concat(this.defineInterfaceFilterSequence(filterObject.filters, geometryName, filterObject.logical, level));
228
+ }
229
+ else if (filterObject.hasOwnProperty('operator')) {
230
+ this.filterSequence.push(this.addInterfaceFilter(filterObject, geometryName, level, logical));
231
+ }
232
+ }
233
+ return this.filterSequence;
234
+ }
235
+ computeAllowedOperators(fields, propertyName, defaultOperatorsType) {
236
+ let effectiveOperators = {};
237
+ let allowedOperators;
238
+ let fieldsHasSpatialOperator;
239
+ let includeContains;
240
+ if (fields && propertyName) {
241
+ const srcField = fields.find((field) => field.name === propertyName);
242
+ allowedOperators =
243
+ srcField && srcField.allowedOperatorsType
244
+ ? srcField.allowedOperatorsType
245
+ : defaultOperatorsType;
246
+ }
247
+ if (fields) {
248
+ fields.map((field) => {
249
+ if (!field.allowedOperatorsType) {
250
+ return;
251
+ }
252
+ const allowedOperatorsType = field.allowedOperatorsType.toLowerCase();
253
+ if (allowedOperatorsType === OgcFilterOperatorType.All.toLowerCase() ||
254
+ allowedOperatorsType ===
255
+ OgcFilterOperatorType.Spatial.toLowerCase() ||
256
+ allowedOperatorsType ===
257
+ OgcFilterOperatorType.BasicAndSpatial.toLowerCase()) {
258
+ fieldsHasSpatialOperator = true;
259
+ if (allowedOperatorsType === OgcFilterOperatorType.All.toLowerCase()) {
260
+ includeContains = true;
261
+ }
262
+ }
263
+ });
264
+ }
265
+ allowedOperators = allowedOperators
266
+ ? allowedOperators
267
+ : OgcFilterOperatorType.BasicAndSpatial;
268
+ switch (allowedOperators.toLowerCase()) {
269
+ case OgcFilterOperatorType.All:
270
+ effectiveOperators = this.operators;
271
+ break;
272
+ case OgcFilterOperatorType.Spatial:
273
+ effectiveOperators = {
274
+ [OgcFilterOperator.Intersects]: { spatial: true, fieldRestrict: [] },
275
+ [OgcFilterOperator.Within]: { spatial: true, fieldRestrict: [] }
276
+ };
277
+ break;
278
+ case OgcFilterOperatorType.BasicAndSpatial:
279
+ effectiveOperators = {
280
+ [OgcFilterOperator.PropertyIsEqualTo]: {
281
+ spatial: false,
282
+ fieldRestrict: []
283
+ },
284
+ [OgcFilterOperator.PropertyIsNotEqualTo]: {
285
+ spatial: false,
286
+ fieldRestrict: []
287
+ },
288
+ [OgcFilterOperator.Intersects]: { spatial: true, fieldRestrict: [] },
289
+ [OgcFilterOperator.Within]: { spatial: true, fieldRestrict: [] }
290
+ };
291
+ break;
292
+ case OgcFilterOperatorType.Basic:
293
+ effectiveOperators = {
294
+ [OgcFilterOperator.PropertyIsEqualTo]: {
295
+ spatial: false,
296
+ fieldRestrict: []
297
+ },
298
+ [OgcFilterOperator.PropertyIsNotEqualTo]: {
299
+ spatial: false,
300
+ fieldRestrict: []
301
+ }
302
+ };
303
+ break;
304
+ case OgcFilterOperatorType.Time:
305
+ effectiveOperators = {
306
+ [OgcFilterOperator.During]: { spatial: false, fieldRestrict: [] }
307
+ };
308
+ break;
309
+ case OgcFilterOperatorType.BasicNumericOperator:
310
+ effectiveOperators = {
311
+ [OgcFilterOperator.PropertyIsEqualTo]: {
312
+ spatial: false,
313
+ fieldRestrict: []
314
+ },
315
+ [OgcFilterOperator.PropertyIsNotEqualTo]: {
316
+ spatial: false,
317
+ fieldRestrict: []
318
+ },
319
+ [OgcFilterOperator.PropertyIsGreaterThan]: {
320
+ spatial: false,
321
+ fieldRestrict: ['number']
322
+ },
323
+ [OgcFilterOperator.PropertyIsGreaterThanOrEqualTo]: {
324
+ spatial: false,
325
+ fieldRestrict: ['number']
326
+ },
327
+ [OgcFilterOperator.PropertyIsLessThan]: {
328
+ spatial: false,
329
+ fieldRestrict: ['number']
330
+ },
331
+ [OgcFilterOperator.PropertyIsLessThanOrEqualTo]: {
332
+ spatial: false,
333
+ fieldRestrict: ['number']
334
+ }
335
+ };
336
+ break;
337
+ default:
338
+ effectiveOperators = {
339
+ [OgcFilterOperator.PropertyIsEqualTo]: {
340
+ spatial: false,
341
+ fieldRestrict: []
342
+ },
343
+ [OgcFilterOperator.PropertyIsNotEqualTo]: {
344
+ spatial: false,
345
+ fieldRestrict: []
346
+ },
347
+ [OgcFilterOperator.Intersects]: { spatial: true, fieldRestrict: [] },
348
+ [OgcFilterOperator.Within]: { spatial: true, fieldRestrict: [] }
349
+ };
350
+ }
351
+ if (fieldsHasSpatialOperator) {
352
+ effectiveOperators.Intersects = {
353
+ spatial: true,
354
+ fieldRestrict: []
355
+ };
356
+ effectiveOperators.Within = { spatial: true, fieldRestrict: [] };
357
+ if (includeContains) {
358
+ effectiveOperators.Contains = {
359
+ spatial: true,
360
+ fieldRestrict: []
361
+ };
362
+ }
363
+ }
364
+ return effectiveOperators;
365
+ }
366
+ addInterfaceFilter(igoOgcFilterObject, geometryName, level = 0, parentLogical = 'Or') {
367
+ if (!igoOgcFilterObject) {
368
+ igoOgcFilterObject = { operator: 'PropertyIsEqualTo' };
369
+ }
370
+ const f = {
371
+ propertyName: '',
372
+ operator: '',
373
+ active: '',
374
+ filterid: uuid(),
375
+ step: '',
376
+ begin: '',
377
+ end: '',
378
+ sliderOptions: {},
379
+ lowerBoundary: '',
380
+ upperBoundary: '',
381
+ expression: '',
382
+ pattern: '',
383
+ wildCard: '*',
384
+ singleChar: '.',
385
+ escapeChar: '!',
386
+ matchCase: true,
387
+ igoSpatialSelector: '',
388
+ igoSNRC: '',
389
+ geometryName: '',
390
+ geometry: '',
391
+ wkt_geometry: '',
392
+ extent: '',
393
+ srsName: '',
394
+ parentLogical: '',
395
+ level: 0
396
+ };
397
+ return Object.assign(f, {
398
+ parentLogical,
399
+ level,
400
+ geometryName
401
+ }, igoOgcFilterObject);
402
+ }
403
+ checkIgoFiltersProperties(filterObject, fieldNameGeometry, proj, active = false) {
404
+ const filterArray = [];
405
+ if (filterObject instanceof Array) {
406
+ filterObject.forEach((element) => {
407
+ filterArray.push(this.checkIgoFiltersProperties(element, fieldNameGeometry, proj, active));
408
+ });
409
+ return filterArray;
410
+ }
411
+ else {
412
+ if (filterObject.hasOwnProperty('logical')) {
413
+ return Object.assign({}, {
414
+ logical: filterObject.logical,
415
+ filters: this.checkIgoFiltersProperties(filterObject.filters, fieldNameGeometry, proj, active)
416
+ });
417
+ }
418
+ else if (filterObject.hasOwnProperty('operator')) {
419
+ return this.addFilterProperties(filterObject, fieldNameGeometry, proj, active);
420
+ }
421
+ }
422
+ }
423
+ addFilterProperties(igoOgcFilterObject, fieldNameGeometry, proj, active = false) {
424
+ const filterid = igoOgcFilterObject.hasOwnProperty('filterid')
425
+ ? igoOgcFilterObject.filterid
426
+ : uuid();
427
+ const status = igoOgcFilterObject.hasOwnProperty('active')
428
+ ? igoOgcFilterObject.active
429
+ : active;
430
+ const srsName = igoOgcFilterObject.hasOwnProperty('srsName')
431
+ ? igoOgcFilterObject.srsName
432
+ : proj
433
+ ? proj.getCode()
434
+ : 'EPSG:3857';
435
+ return Object.assign({}, {
436
+ filterid,
437
+ active: status,
438
+ igoSpatialSelector: 'fixedExtent',
439
+ srsName
440
+ }, igoOgcFilterObject, { geometryName: fieldNameGeometry });
441
+ }
442
+ rebuiltIgoOgcFilterObjectFromSequence(sequence) {
443
+ if (sequence instanceof Array) {
444
+ if (sequence.length >= 1) {
445
+ let lastParentLogical = sequence[0].parentLogical;
446
+ let nextElement;
447
+ let logicalArray = [];
448
+ let lastProcessedFilter;
449
+ sequence.forEach((uiFilter) => {
450
+ const element = Object.assign({}, uiFilter);
451
+ const index = sequence.indexOf(uiFilter);
452
+ if (index >= 0 && index < sequence.length - 1) {
453
+ nextElement = sequence[index + 1];
454
+ }
455
+ else {
456
+ nextElement = element;
457
+ }
458
+ delete element.active;
459
+ delete element.filterid;
460
+ delete element.parentLogical;
461
+ logicalArray.push(element);
462
+ if (sequence.length === 1) {
463
+ lastProcessedFilter = element;
464
+ }
465
+ else if (lastParentLogical !== nextElement.parentLogical) {
466
+ if (logicalArray.length === 1) {
467
+ console.log('You must set at ' +
468
+ 'least two operator in a logical (' +
469
+ lastParentLogical +
470
+ ')');
471
+ }
472
+ else {
473
+ lastProcessedFilter = Object.assign({}, { logical: lastParentLogical, filters: logicalArray });
474
+ logicalArray = [lastProcessedFilter];
475
+ lastParentLogical = nextElement.parentLogical;
476
+ }
477
+ }
478
+ });
479
+ return lastProcessedFilter;
480
+ }
481
+ else {
482
+ return undefined;
483
+ }
484
+ }
485
+ else {
486
+ return undefined;
487
+ }
488
+ }
489
+ computeIgoSelector(selectors) {
490
+ if (selectors.groups.every((group) => group.computedSelectors !== undefined)) {
491
+ return selectors;
492
+ }
493
+ let selector;
494
+ if (selectors.groups && selectors.bundles) {
495
+ if (!selectors.bundles.every((bundle) => bundle.id !== undefined)) {
496
+ throw new Error('You must set an id for each of your bundles');
497
+ }
498
+ selector = ObjectUtils.copyDeep(selectors);
499
+ selector.groups.forEach((group) => {
500
+ group.title = group.title ? group.title : group.name;
501
+ group.enabled = group.enabled ? group.enabled : false;
502
+ group.computedSelectors = ObjectUtils.copyDeep(selector.bundles.filter((b) => group.ids.includes(b.id)));
503
+ });
504
+ }
505
+ else if (!selectors.groups && selectors.bundles) {
506
+ selector = ObjectUtils.copyDeep(selectors);
507
+ selector.groups = [
508
+ {
509
+ title: 'group1',
510
+ name: 'group1',
511
+ computedSelectors: ObjectUtils.copyDeep(selector.bundles)
512
+ }
513
+ ];
514
+ }
515
+ else {
516
+ selector = {
517
+ bundles: selectors,
518
+ groups: [
519
+ {
520
+ title: 'group1',
521
+ name: 'group1',
522
+ computedSelectors: ObjectUtils.copyDeep(selectors)
523
+ }
524
+ ],
525
+ selectorType: selector.selectorType
526
+ };
527
+ }
528
+ if (!selector.groups.find((selectorGroup) => selectorGroup.enabled)) {
529
+ selector.groups[0].enabled = true;
530
+ }
531
+ return selector;
532
+ }
533
+ handleOgcFiltersAppliedValue(options, fieldNameGeometry, extent, proj) {
534
+ const ogcFilters = options.ogcFilters;
535
+ if (!ogcFilters) {
536
+ return;
537
+ }
538
+ const conditions = [];
539
+ let filterQueryStringSelector = '';
540
+ let filterQueryStringAdvancedFilters = '';
541
+ if (ogcFilters.enabled && (ogcFilters.pushButtons || ogcFilters.checkboxes || ogcFilters.radioButtons || ogcFilters.select
542
+ || ogcFilters.autocomplete)) {
543
+ let selectors;
544
+ if (ogcFilters.pushButtons) {
545
+ selectors = ogcFilters.pushButtons;
546
+ const pushConditions = this.formatGroupAndFilter(ogcFilters, selectors);
547
+ for (const condition of pushConditions) {
548
+ conditions.push(condition);
549
+ }
550
+ }
551
+ if (ogcFilters.checkboxes) {
552
+ selectors = ogcFilters.checkboxes;
553
+ const checkboxConditions = this.formatGroupAndFilter(ogcFilters, selectors);
554
+ for (const condition of checkboxConditions) {
555
+ conditions.push(condition);
556
+ }
557
+ }
558
+ if (ogcFilters.radioButtons) {
559
+ selectors = ogcFilters.radioButtons;
560
+ const selectorsCorr = this.verifyMultipleEnableds(selectors);
561
+ const radioConditions = this.formatGroupAndFilter(ogcFilters, selectorsCorr);
562
+ for (const condition of radioConditions) {
563
+ conditions.push(condition);
564
+ }
565
+ }
566
+ if (ogcFilters.select) {
567
+ selectors = ogcFilters.select;
568
+ const selectorsCorr = this.verifyMultipleEnableds(selectors);
569
+ const selectConditions = this.formatGroupAndFilter(ogcFilters, selectorsCorr);
570
+ for (const condition of selectConditions) {
571
+ conditions.push(condition);
572
+ }
573
+ }
574
+ if (ogcFilters.autocomplete) {
575
+ selectors = ogcFilters.autocomplete;
576
+ const selectConditions = this.formatGroupAndFilter(ogcFilters, selectors);
577
+ for (const condition of selectConditions) {
578
+ conditions.push(condition);
579
+ }
580
+ }
581
+ if (conditions.length >= 1) {
582
+ filterQueryStringSelector = this.buildFilter(conditions.length === 1
583
+ ? conditions[0]
584
+ : { logical: 'And', filters: conditions }, extent, proj, ogcFilters.geometryName);
585
+ }
586
+ }
587
+ if (ogcFilters.enabled && ogcFilters.filters) {
588
+ ogcFilters.geometryName = ogcFilters.geometryName || fieldNameGeometry;
589
+ const igoFilters = ogcFilters.filters;
590
+ filterQueryStringAdvancedFilters = this.buildFilter(igoFilters, extent, proj, ogcFilters.geometryName, options);
591
+ }
592
+ let filterQueryString = ogcFilters.advancedOgcFilters
593
+ ? filterQueryStringAdvancedFilters
594
+ : filterQueryStringSelector;
595
+ if (options.type === 'wms') {
596
+ filterQueryString = this.formatProcessedOgcFilter(filterQueryString, options.params.LAYERS);
597
+ }
598
+ if (options.type === 'wfs') {
599
+ filterQueryString = this.formatProcessedOgcFilter(filterQueryString, options.params.featureTypes);
600
+ }
601
+ return filterQueryString;
602
+ }
603
+ verifyMultipleEnableds(selectors) {
604
+ selectors.bundles.forEach(bundle => {
605
+ if (!bundle.multiple && bundle.selectors) {
606
+ const enableds = bundle.selectors.reduce((list, filter, index) => (filter.enabled) === true ? list.concat(index) : list, []);
607
+ if (enableds.length > 1) {
608
+ enableds.splice(0, 1);
609
+ enableds.forEach(index => {
610
+ bundle.selectors[index].enabled = false;
611
+ });
612
+ }
613
+ }
614
+ });
615
+ return selectors;
616
+ }
617
+ formatGroupAndFilter(ogcFilters, selectors) {
618
+ selectors = this.computeIgoSelector(selectors);
619
+ const selectorBundle = selectors.groups.find((g) => g.enabled).computedSelectors;
620
+ const conditions = [];
621
+ selectorBundle.map((bundle) => {
622
+ const bundleCondition = [];
623
+ const selectorsType = bundle.selectors;
624
+ if (!selectorsType) {
625
+ return;
626
+ }
627
+ selectorsType
628
+ .filter((ogcselector) => ogcselector.enabled === true)
629
+ .forEach((enabledSelector) => bundleCondition.push(enabledSelector.filters));
630
+ if (bundleCondition.length === 1) {
631
+ conditions.push(bundleCondition[0]);
632
+ }
633
+ else if (bundleCondition.length > 1) {
634
+ conditions.push({
635
+ logical: bundle.logical,
636
+ filters: bundleCondition
637
+ });
638
+ }
639
+ });
640
+ if (selectors.selectorType === 'pushButton') {
641
+ ogcFilters.pushButtons = selectors;
642
+ }
643
+ else if (selectors.selectorType === 'checkbox') {
644
+ ogcFilters.checkboxes = selectors;
645
+ }
646
+ else if (selectors.selectorType === 'radioButton') {
647
+ ogcFilters.radioButtons = selectors;
648
+ }
649
+ else if (selectors.selectorType === 'select') {
650
+ ogcFilters.select = selectors;
651
+ }
652
+ else if (selectors.selectorType === 'autocomplete') {
653
+ ogcFilters.autocomplete = selectors;
654
+ }
655
+ return conditions;
656
+ }
657
+ formatProcessedOgcFilter(processedFilter, layersOrTypenames) {
658
+ if (!processedFilter) {
659
+ return undefined;
660
+ }
661
+ ;
662
+ let appliedFilter = '';
663
+ if (processedFilter.length === 0 && layersOrTypenames.indexOf(',') === -1) {
664
+ appliedFilter = processedFilter;
665
+ }
666
+ else {
667
+ layersOrTypenames.split(',').forEach((layerOrTypenames) => {
668
+ appliedFilter = `${appliedFilter}(${processedFilter.replace('filter=', '')})`;
669
+ });
670
+ }
671
+ appliedFilter = appliedFilter.replace(/\(\)/g, '');
672
+ const filterValue = appliedFilter.length > 0
673
+ ? appliedFilter.replace('filter=', '')
674
+ : undefined;
675
+ return filterValue;
676
+ }
677
+ parseFilterOptionDate(value, defaultValue) {
678
+ if (!value) {
679
+ return defaultValue;
680
+ }
681
+ else if (value === 'today') {
682
+ return undefined;
683
+ }
684
+ else if (moment(value).isValid()) {
685
+ return value;
686
+ }
687
+ else {
688
+ return undefined;
689
+ }
690
+ }
691
+ }
692
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssUUFBUSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sV0FBVyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLFdBQXVDLE1BQU0sZUFBZSxDQUFDO0FBS3BFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBYWhELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdFLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzNDLE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBQ1UsbUJBQWMsR0FBZ0MsRUFBRSxDQUFDO1FBQ2xELGNBQVMsR0FBRztZQUNqQixDQUFDLGlCQUFpQixDQUFDLGlCQUEyQixDQUFDLEVBQUU7Z0JBQy9DLE9BQU8sRUFBRSxLQUFLO2dCQUNkLGFBQWEsRUFBRSxFQUFFO2FBQ2xCO1lBQ0QsQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBOEIsQ0FBQyxFQUFFO2dCQUNsRCxPQUFPLEVBQUUsS0FBSztnQkFDZCxhQUFhLEVBQUUsRUFBRTthQUNsQjtZQUNELENBQUMsaUJBQWlCLENBQUMsY0FBd0IsQ0FBQyxFQUFFO2dCQUM1QyxPQUFPLEVBQUUsS0FBSztnQkFDZCxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7YUFDMUI7WUFDRCxDQUFDLGlCQUFpQixDQUFDLHFCQUErQixDQUFDLEVBQUU7Z0JBQ25ELE9BQU8sRUFBRSxLQUFLO2dCQUNkLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUMxQjtZQUNELENBQUMsaUJBQWlCLENBQUMsOEJBQXdDLENBQUMsRUFBRTtnQkFD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LE9BQU8sU0FBUyxDQUFDO1NBQ2xCO2FBQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbEMsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvbGZpbHRlciBmcm9tICdvbC9mb3JtYXQvZmlsdGVyJztcclxuaW1wb3J0IG9sRm9ybWF0V0tUIGZyb20gJ29sL2Zvcm1hdC9XS1QnO1xyXG5pbXBvcnQgb2xGb3JtYXRXRlMsIHsgV3JpdGVHZXRGZWF0dXJlT3B0aW9ucyB9IGZyb20gJ29sL2Zvcm1hdC9XRlMnO1xyXG5pbXBvcnQgb2xHZW9tZXRyeSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcclxuXHJcbmltcG9ydCBvbFByb2plY3Rpb24gZnJvbSAnb2wvcHJvai9Qcm9qZWN0aW9uJztcclxuXHJcbmltcG9ydCB7IHV1aWQsIE9iamVjdFV0aWxzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHtcclxuICBPZ2NGaWx0ZXIsXHJcbiAgSWdvT2djRmlsdGVyT2JqZWN0LFxyXG4gIEFueUJhc2VPZ2NGaWx0ZXJPcHRpb25zLFxyXG4gIE9nY0ludGVyZmFjZUZpbHRlck9wdGlvbnMsXHJcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zLFxyXG4gIE9nY0ZpbHRlcnNPcHRpb25zLFxyXG4gIElnb09nY1NlbGVjdG9yLFxyXG4gIFNlbGVjdG9yR3JvdXAsXHJcbiAgT2djU2VsZWN0b3JCdW5kbGVcclxufSBmcm9tICcuL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgT2djRmlsdGVyT3BlcmF0b3JUeXBlLCBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4vb2djLWZpbHRlci5lbnVtJztcclxuaW1wb3J0IHsgU291cmNlRmllbGRzT3B0aW9uc1BhcmFtcyB9IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzL2RhdGFzb3VyY2UuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgZGVmYXVsdCBhcyBtb21lbnQgfSBmcm9tICdtb21lbnQnO1xyXG5leHBvcnQgY2xhc3MgT2djRmlsdGVyV3JpdGVyIHtcclxuICBwcml2YXRlIGZpbHRlclNlcXVlbmNlOiBPZ2NJbnRlcmZhY2VGaWx0ZXJPcHRpb25zW10gPSBbXTtcclxuICBwdWJsaWMgb3BlcmF0b3JzID0ge1xyXG4gICAgW09nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNFcXVhbFRvIGFzIHN0cmluZ106IHtcclxuICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgIGZpZWxkUmVzdHJpY3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgW09nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNOb3RFcXVhbFRvIGFzIHN0cmluZ106IHtcclxuICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgIGZpZWxkUmVzdHJpY3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgW09nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMaWtlIGFzIHN0cmluZ106IHtcclxuICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgIGZpZWxkUmVzdHJpY3Q6IFsnc3RyaW5nJ11cclxuICAgIH0sXHJcbiAgICBbT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuIGFzIHN0cmluZ106IHtcclxuICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgIGZpZWxkUmVzdHJpY3Q6IFsnbnVtYmVyJ11cclxuICAgIH0sXHJcbiAgICBbT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuT3JFcXVhbFRvIGFzIHN0cmluZ106IHtcclxuICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgIGZpZWxkUmVzdHJpY3Q6IFsnbnVtYmVyJ11cclxuICAgIH0sXHJcbiAgICBbT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuIGFzIHN0cmluZ106IHtcclxuICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgIGZpZWxkUmVzdHJpY3Q6IFsnbnVtYmVyJ11cclxuICAgIH0sXHJcbiAgICBbT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuT3JFcXVhbFRvIGFzIHN0cmluZ106IHtcclxuICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgIGZpZWxkUmVzdHJpY3Q6IFsnbnVtYmVyJ11cclxuICAgIH0sXHJcbiAgICBbT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0JldHdlZW4gYXMgc3RyaW5nXToge1xyXG4gICAgICBzcGF0aWFsOiBmYWxzZSxcclxuICAgICAgZmllbGRSZXN0cmljdDogWydudW1iZXInXVxyXG4gICAgfSxcclxuICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5EdXJpbmcgYXMgc3RyaW5nXTogeyBzcGF0aWFsOiBmYWxzZSwgZmllbGRSZXN0cmljdDogW10gfSxcclxuICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTnVsbCBhcyBzdHJpbmddOiB7XHJcbiAgICAgIHNwYXRpYWw6IGZhbHNlLFxyXG4gICAgICBmaWVsZFJlc3RyaWN0OiBbXVxyXG4gICAgfSxcclxuICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5JbnRlcnNlY3RzIGFzIHN0cmluZ106IHtcclxuICAgICAgc3BhdGlhbDogdHJ1ZSxcclxuICAgICAgZmllbGRSZXN0cmljdDogW11cclxuICAgIH0sXHJcbiAgICBbT2djRmlsdGVyT3BlcmF0b3IuV2l0aGluIGFzIHN0cmluZ106IHsgc3BhdGlhbDogdHJ1ZSwgZmllbGRSZXN0cmljdDogW10gfSxcclxuICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5Db250YWlucyBhcyBzdHJpbmddOiB7IHNwYXRpYWw6IHRydWUsIGZpZWxkUmVzdHJpY3Q6IFtdIH1cclxuICB9O1xyXG5cclxuICBkZWZpbmVPZ2NGaWx0ZXJzRGVmYXVsdE9wdGlvbnMoXHJcbiAgICBvZ2NGaWx0ZXJzT3B0aW9uczogT2djRmlsdGVyc09wdGlvbnMsXHJcbiAgICBmaWVsZE5hbWVHZW9tZXRyeTogc3RyaW5nLFxyXG4gICAgc3JjVHlwZT86IHN0cmluZ1xyXG4gICk6IE9nY0ZpbHRlcnNPcHRpb25zIHtcclxuICAgIGxldCBvZ2NGaWx0ZXJzRGVmYXVsdFZhbHVlID0gdHJ1ZTsgLy8gZGVmYXVsdCB2YWx1ZXMgZm9yIHdmcy5cclxuICAgIGlmIChzcmNUeXBlICYmIHNyY1R5cGUgPT09ICd3bXMnKSB7XHJcbiAgICAgIG9nY0ZpbHRlcnNEZWZhdWx0VmFsdWUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvZ2NGaWx0ZXJzT3B0aW9ucyA9IG9nY0ZpbHRlcnNPcHRpb25zIHx8IHt9O1xyXG4gICAgb2djRmlsdGVyc09wdGlvbnMuZW5hYmxlZCA9XHJcbiAgICAgIG9nY0ZpbHRlcnNPcHRpb25zLmVuYWJsZWQgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgID8gb2djRmlsdGVyc0RlZmF1bHRWYWx1ZVxyXG4gICAgICAgIDogb2djRmlsdGVyc09wdGlvbnMuZW5hYmxlZDtcclxuICAgIG9nY0ZpbHRlcnNPcHRpb25zLmVkaXRhYmxlID1cclxuICAgICAgb2djRmlsdGVyc09wdGlvbnMuZWRpdGFibGUgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgID8gb2djRmlsdGVyc0RlZmF1bHRWYWx1ZVxyXG4gICAgICAgIDogb2djRmlsdGVyc09wdGlvbnMuZWRpdGFibGU7XHJcbiAgICBvZ2NGaWx0ZXJzT3B0aW9ucy5nZW9tZXRyeU5hbWUgPSBmaWVsZE5hbWVHZW9tZXRyeTtcclxuXHJcbiAgICBvZ2NGaWx0ZXJzT3B0aW9ucy5hZHZhbmNlZE9nY0ZpbHRlcnMgPSB0cnVlO1xyXG4gICAgaWYgKG9nY0ZpbHRlcnNPcHRpb25zLmVuYWJsZWQgJiYgKG9nY0ZpbHRlcnNPcHRpb25zLnB1c2hCdXR0b25zIHx8IG9nY0ZpbHRlcnNPcHRpb25zLmNoZWNrYm94ZXNcclxuICAgICAgfHwgb2djRmlsdGVyc09wdGlvbnMucmFkaW9CdXR0b25zIHx8IG9nY0ZpbHRlcnNPcHRpb25zLnNlbGVjdCB8fCBvZ2NGaWx0ZXJzT3B0aW9ucy5hdXRvY29tcGxldGUpKSB7XHJcbiAgICAgIG9nY0ZpbHRlcnNPcHRpb25zLmFkdmFuY2VkT2djRmlsdGVycyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9nY0ZpbHRlcnNPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1aWxkRmlsdGVyKFxyXG4gICAgZmlsdGVycz86IElnb09nY0ZpbHRlck9iamVjdCxcclxuICAgIGV4dGVudD86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxyXG4gICAgcHJvaj86IG9sUHJvamVjdGlvbixcclxuICAgIGZpZWxkTmFtZUdlb21ldHJ5Pzogc3RyaW5nLFxyXG4gICAgb3B0aW9ucz86IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9uc1xyXG4gICk6IHN0cmluZyB7XHJcbiAgICBsZXQgb3VyQmJveEZpbHRlcjtcclxuICAgIGxldCBlbmFibGVCYm94OiBib29sZWFuO1xyXG4gICAgaWYgKC9pbnRlcnNlY3RzfGNvbnRhaW5zfHdpdGhpbi9naS50ZXN0KEpTT04uc3RyaW5naWZ5KGZpbHRlcnMpKSkge1xyXG4gICAgICBlbmFibGVCYm94ID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbmFibGVCYm94ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChmaWx0ZXJzKSB7XHJcbiAgICAgIGZpZWxkTmFtZUdlb21ldHJ5ID1cclxuICAgICAgICAoZmlsdGVycyBhcyBhbnkpLmdlb21ldHJ5TmFtZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICA/IChmaWx0ZXJzIGFzIGFueSkuZ2VvbWV0cnlOYW1lXHJcbiAgICAgICAgICA6IGZpZWxkTmFtZUdlb21ldHJ5O1xyXG4gICAgfVxyXG4gICAgaWYgKGV4dGVudCAmJiBmaWx0ZXJzKSB7XHJcbiAgICAgIG91ckJib3hGaWx0ZXIgPSBvbGZpbHRlci5iYm94KGZpZWxkTmFtZUdlb21ldHJ5LCBleHRlbnQsIHByb2ouZ2V0Q29kZSgpKTtcclxuICAgIH1cclxuICAgIGxldCBmaWx0ZXJBc3NlbWJseTogT2djRmlsdGVyO1xyXG4gICAgaWYgKGZpbHRlcnMpIHtcclxuICAgICAgZmlsdGVycyA9IHRoaXMuY2hlY2tJZ29GaWx0ZXJzUHJvcGVydGllcyhcclxuICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgIGZpZWxkTmFtZUdlb21ldHJ5LFxyXG4gICAgICAgIHByb2pcclxuICAgICAgKTtcclxuICAgICAgaWYgKGV4dGVudCAmJiBlbmFibGVCYm94KSB7XHJcbiAgICAgICAgZmlsdGVyQXNzZW1ibHkgPSBvbGZpbHRlci5hbmQoXHJcbiAgICAgICAgICBvdXJCYm94RmlsdGVyLFxyXG4gICAgICAgICAgdGhpcy5idW5kbGVGaWx0ZXIoZmlsdGVycywgb3B0aW9ucylcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbHRlckFzc2VtYmx5ID0gdGhpcy5idW5kbGVGaWx0ZXIoZmlsdGVycywgb3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnYmJveD0nICsgZXh0ZW50LmpvaW4oJywnKSArICcsJyArIHByb2ouZ2V0Q29kZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHdmc09wdGlvbnM6IFdyaXRlR2V0RmVhdHVyZU9wdGlvbnMgPSB7XHJcbiAgICAgIHNyc05hbWU6ICcnLFxyXG4gICAgICBmZWF0dXJlTlM6ICcnLFxyXG4gICAgICBmZWF0dXJlUHJlZml4OiAnJyxcclxuICAgICAgZmVhdHVyZVR5cGVzOiBbJ2ZlYXR1cmVUeXBlcyddLFxyXG4gICAgICBmaWx0ZXI6IGZpbHRlckFzc2VtYmx5LFxyXG4gICAgICBvdXRwdXRGb3JtYXQ6ICcnLFxyXG4gICAgICBnZW9tZXRyeU5hbWU6IGZpZWxkTmFtZUdlb21ldHJ5XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IG9sRm9ybWF0V0ZTKCkud3JpdGVHZXRGZWF0dXJlKHdmc09wdGlvbnMpO1xyXG4gICAgY29uc3Qgc3RyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhxdWVyeSk7XHJcbiAgICBjb25zdCByZWdleHAxID0gL3R5cGVuYW1lcyAqPXx0eXBlbmFtZSAqPVxcXCJmZWF0dXJlVHlwZXNcXFwiICo+L2dpO1xyXG4gICAgY29uc3QgcmVnZXhwMiA9IC88XFwvUXVlcnk+PFxcL0dldEZlYXR1cmU+L2dpO1xyXG5cclxuICAgIHJldHVybiAnZmlsdGVyPScgKyBzdHIuc3BsaXQocmVnZXhwMSlbMV0uc3BsaXQocmVnZXhwMilbMF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1bmRsZUZpbHRlcihcclxuICAgIGZpbHRlck9iamVjdDogYW55LFxyXG4gICAgb3B0aW9ucz86IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9uc1xyXG4gICkge1xyXG4gICAgaWYgKGZpbHRlck9iamVjdCBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgIGNvbnN0IGxvZ2ljYWxBcnJheSA9IFtdO1xyXG4gICAgICBmaWx0ZXJPYmplY3QuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGxvZ2ljYWxBcnJheS5wdXNoKHRoaXMuYnVuZGxlRmlsdGVyKGVsZW1lbnQsIG9wdGlvbnMpKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBsb2dpY2FsQXJyYXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZmlsdGVyT2JqZWN0Lmhhc093blByb3BlcnR5KCdsb2dpY2FsJykpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGaWx0ZXIoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXJPYmplY3QubG9naWNhbCxcclxuICAgICAgICAgICAgbG9naWNhbEFycmF5OiB0aGlzLmJ1bmRsZUZpbHRlcihmaWx0ZXJPYmplY3QuZmlsdGVycywgb3B0aW9ucylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvcHRpb25zXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChmaWx0ZXJPYmplY3QuaGFzT3duUHJvcGVydHkoJ29wZXJhdG9yJykpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGaWx0ZXIoXHJcbiAgICAgICAgICBmaWx0ZXJPYmplY3QgYXMgQW55QmFzZU9nY0ZpbHRlck9wdGlvbnMsXHJcbiAgICAgICAgICBvcHRpb25zXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXIoXHJcbiAgICBmaWx0ZXJPcHRpb25zLFxyXG4gICAgb3B0aW9ucz86IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9uc1xyXG4gICk6IE9nY0ZpbHRlciB7XHJcbiAgICBjb25zdCBvcGVyYXRvciA9IGZpbHRlck9wdGlvbnMub3BlcmF0b3I7XHJcbiAgICBjb25zdCBsb2dpY2FsQXJyYXkgPSBmaWx0ZXJPcHRpb25zLmxvZ2ljYWxBcnJheTtcclxuXHJcbiAgICBjb25zdCB3ZnNQcm9wZXJ0eU5hbWUgPSBmaWx0ZXJPcHRpb25zLnByb3BlcnR5TmFtZTtcclxuICAgIGNvbnN0IHdmc1BhdHRlcm4gPSBmaWx0ZXJPcHRpb25zLnBhdHRlcm47XHJcbiAgICBjb25zdCB3ZnNNYXRjaENhc2UgPSBmaWx0ZXJPcHRpb25zLm1hdGNoQ2FzZVxyXG4gICAgICA/IGZpbHRlck9wdGlvbnMubWF0Y2hDYXNlXHJcbiAgICAgIDogdHJ1ZTtcclxuICAgIGNvbnN0IHdmc1dpbGRDYXJkID0gZmlsdGVyT3B0aW9ucy53aWxkQ2FyZCA/IGZpbHRlck9wdGlvbnMud2lsZENhcmQgOiAnKic7XHJcbiAgICBjb25zdCB3ZnNTaW5nbGVDaGFyID0gZmlsdGVyT3B0aW9ucy5zaW5nbGVDaGFyXHJcbiAgICAgID8gZmlsdGVyT3B0aW9ucy5zaW5nbGVDaGFyXHJcbiAgICAgIDogJy4nO1xyXG4gICAgY29uc3Qgd2ZzRXNjYXBlQ2hhciA9IGZpbHRlck9wdGlvbnMuZXNjYXBlQ2hhclxyXG4gICAgICA/IGZpbHRlck9wdGlvbnMuZXNjYXBlQ2hhclxyXG4gICAgICA6ICchJztcclxuXHJcbiAgICBjb25zdCB3ZnNMb3dlckJvdW5kYXJ5ID0gZmlsdGVyT3B0aW9ucy5sb3dlckJvdW5kYXJ5O1xyXG4gICAgY29uc3Qgd2ZzVXBwZXJCb3VuZGFyeSA9IGZpbHRlck9wdGlvbnMudXBwZXJCb3VuZGFyeTtcclxuXHJcbiAgICBjb25zdCB3ZnNHZW9tZXRyeU5hbWUgPSBmaWx0ZXJPcHRpb25zLmdlb21ldHJ5TmFtZTtcclxuICAgIGNvbnN0IHdmc0V4dGVudCA9IGZpbHRlck9wdGlvbnMuZXh0ZW50O1xyXG4gICAgY29uc3Qgd2ZzV2t0R2VvbWV0cnkgPSBmaWx0ZXJPcHRpb25zLndrdF9nZW9tZXRyeTtcclxuICAgIGNvbnN0IHdmc1Nyc05hbWUgPSBmaWx0ZXJPcHRpb25zLnNyc05hbWVcclxuICAgICAgPyBmaWx0ZXJPcHRpb25zLnNyc05hbWVcclxuICAgICAgOiAnRVBTRzozODU3JztcclxuXHJcbiAgICBjb25zdCB3ZnNCZWdpbiA9IHRoaXMucGFyc2VGaWx0ZXJPcHRpb25EYXRlKFxyXG4gICAgICBmaWx0ZXJPcHRpb25zLmJlZ2luLFxyXG4gICAgICBvcHRpb25zID8gb3B0aW9ucy5taW5EYXRlIDogdW5kZWZpbmVkXHJcbiAgICApO1xyXG4gICAgY29uc3Qgd2ZzRW5kID0gdGhpcy5wYXJzZUZpbHRlck9wdGlvbkRhdGUoXHJcbiAgICAgIGZpbHRlck9wdGlvbnMuZW5kLFxyXG4gICAgICBvcHRpb25zID8gb3B0aW9ucy5tYXhEYXRlIDogdW5kZWZpbmVkXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHdmc0V4cHJlc3Npb24gPSBmaWx0ZXJPcHRpb25zLmV4cHJlc3Npb247XHJcblxyXG4gICAgbGV0IGdlb21ldHJ5OiBvbEdlb21ldHJ5O1xyXG4gICAgaWYgKHdmc1drdEdlb21ldHJ5KSB7XHJcbiAgICAgIGNvbnN0IHdrdCA9IG5ldyBvbEZvcm1hdFdLVCgpO1xyXG4gICAgICBnZW9tZXRyeSA9IHdrdC5yZWFkR2VvbWV0cnkod2ZzV2t0R2VvbWV0cnksIHtcclxuICAgICAgICBkYXRhUHJvamVjdGlvbjogd2ZzU3JzTmFtZSxcclxuICAgICAgICBmZWF0dXJlUHJvamVjdGlvbjogd2ZzU3JzTmFtZSB8fCAnRVBTRzozODU3J1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKG9wZXJhdG9yLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5CQk9YLnRvTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgcmV0dXJuIG9sZmlsdGVyLmJib3god2ZzR2VvbWV0cnlOYW1lLCB3ZnNFeHRlbnQsIHdmc1Nyc05hbWUpO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNCZXR3ZWVuLnRvTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgcmV0dXJuIG9sZmlsdGVyLmJldHdlZW4oXHJcbiAgICAgICAgICB3ZnNQcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICB3ZnNMb3dlckJvdW5kYXJ5IHx8IDFlNDAqLTEsXHJcbiAgICAgICAgICB3ZnNVcHBlckJvdW5kYXJ5IHx8IDFlNDBcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLkNvbnRhaW5zLnRvTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgcmV0dXJuIG9sZmlsdGVyLmNvbnRhaW5zKHdmc0dlb21ldHJ5TmFtZSwgZ2VvbWV0cnksIHdmc1Nyc05hbWUpO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZy50b0xvd2VyQ2FzZSgpOlxyXG4gICAgICAgIHJldHVybiBvbGZpbHRlci5kdXJpbmcod2ZzUHJvcGVydHlOYW1lLCB3ZnNCZWdpbiwgd2ZzRW5kKTtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUby50b0xvd2VyQ2FzZSgpOlxyXG4gICAgICAgIHJldHVybiBvbGZpbHRlci5lcXVhbFRvKHdmc1Byb3BlcnR5TmFtZSwgd2ZzRXhwcmVzc2lvbiwgd2ZzTWF0Y2hDYXNlKTtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW4udG9Mb3dlckNhc2UoKTpcclxuICAgICAgICByZXR1cm4gb2xmaWx0ZXIuZ3JlYXRlclRoYW4od2ZzUHJvcGVydHlOYW1lLCB3ZnNFeHByZXNzaW9uKTtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW5PckVxdWFsVG8udG9Mb3dlckNhc2UoKTpcclxuICAgICAgICByZXR1cm4gb2xmaWx0ZXIuZ3JlYXRlclRoYW5PckVxdWFsVG8od2ZzUHJvcGVydHlOYW1lLCB3ZnNFeHByZXNzaW9uKTtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5JbnRlcnNlY3RzLnRvTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgcmV0dXJuIG9sZmlsdGVyLmludGVyc2VjdHMod2ZzR2VvbWV0cnlOYW1lLCBnZW9tZXRyeSwgd2ZzU3JzTmFtZSk7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc051bGwudG9Mb3dlckNhc2UoKTpcclxuICAgICAgICByZXR1cm4gb2xmaWx0ZXIuaXNOdWxsKHdmc1Byb3BlcnR5TmFtZSk7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuLnRvTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgcmV0dXJuIG9sZmlsdGVyLmxlc3NUaGFuKHdmc1Byb3BlcnR5TmFtZSwgd2ZzRXhwcmVzc2lvbik7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuT3JFcXVhbFRvLnRvTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgcmV0dXJuIG9sZmlsdGVyLmxlc3NUaGFuT3JFcXVhbFRvKHdmc1Byb3BlcnR5TmFtZSwgd2ZzRXhwcmVzc2lvbik7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xpa2UudG9Mb3dlckNhc2UoKTpcclxuICAgICAgICByZXR1cm4gb2xmaWx0ZXIubGlrZShcclxuICAgICAgICAgIHdmc1Byb3BlcnR5TmFtZSxcclxuICAgICAgICAgIHdmc1BhdHRlcm4gPyB3ZnNQYXR0ZXJuLnJlcGxhY2UoL1soKV9dL2dpLCB3ZnNTaW5nbGVDaGFyKTogd2ZzV2lsZENhcmQsXHJcbiAgICAgICAgICB3ZnNXaWxkQ2FyZCxcclxuICAgICAgICAgIHdmc1NpbmdsZUNoYXIsXHJcbiAgICAgICAgICB3ZnNFc2NhcGVDaGFyLFxyXG4gICAgICAgICAgd2ZzTWF0Y2hDYXNlXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTm90RXF1YWxUby50b0xvd2VyQ2FzZSgpOlxyXG4gICAgICAgIHJldHVybiBvbGZpbHRlci5ub3RFcXVhbFRvKFxyXG4gICAgICAgICAgd2ZzUHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgd2ZzRXhwcmVzc2lvbixcclxuICAgICAgICAgIHdmc01hdGNoQ2FzZVxyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuV2l0aGluLnRvTG93ZXJDYXNlKCk6XHJcbiAgICAgICAgcmV0dXJuIG9sZmlsdGVyLndpdGhpbih3ZnNHZW9tZXRyeU5hbWUsIGdlb21ldHJ5LCB3ZnNTcnNOYW1lKTtcclxuICAgICAgLy8gTE9HSUNBTFxyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLkFuZC50b0xvd2VyQ2FzZSgpOlxyXG4gICAgICAgIHJldHVybiBvbGZpbHRlci5hbmQuYXBwbHkobnVsbCwgbG9naWNhbEFycmF5KTtcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Pci50b0xvd2VyQ2FzZSgpOlxyXG4gICAgICAgIHJldHVybiBvbGZpbHRlci5vci5hcHBseShudWxsLCBsb2dpY2FsQXJyYXkpO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLk5vdC50b0xvd2VyQ2FzZSgpOlxyXG4gICAgICAgIHJldHVybiBvbGZpbHRlci5ub3QuYXBwbHkobnVsbCwgbG9naWNhbEFycmF5KTtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWZpbmVJbnRlcmZhY2VGaWx0ZXJTZXF1ZW5jZShcclxuICAgIGZpbHRlck9iamVjdDogYW55LFxyXG4gICAgZ2VvbWV0cnlOYW1lLFxyXG4gICAgbG9naWNhbCA9ICcnLFxyXG4gICAgbGV2ZWwgPSAtMVxyXG4gICk6IE9nY0ludGVyZmFjZUZpbHRlck9wdGlvbnNbXSB7XHJcbiAgICBpZiAoZmlsdGVyT2JqZWN0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgZmlsdGVyT2JqZWN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICB0aGlzLmZpbHRlclNlcXVlbmNlLmNvbmNhdChcclxuICAgICAgICAgIHRoaXMuZGVmaW5lSW50ZXJmYWNlRmlsdGVyU2VxdWVuY2UoXHJcbiAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgIGdlb21ldHJ5TmFtZSxcclxuICAgICAgICAgICAgbG9naWNhbCxcclxuICAgICAgICAgICAgbGV2ZWxcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChmaWx0ZXJPYmplY3QuaGFzT3duUHJvcGVydHkoJ2xvZ2ljYWwnKSkge1xyXG4gICAgICAgIGxldmVsID0gbGV2ZWwgKyAxO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyU2VxdWVuY2UuY29uY2F0KFxyXG4gICAgICAgICAgdGhpcy5kZWZpbmVJbnRlcmZhY2VGaWx0ZXJTZXF1ZW5jZShcclxuICAgICAgICAgICAgZmlsdGVyT2JqZWN0LmZpbHRlcnMsXHJcbiAgICAgICAgICAgIGdlb21ldHJ5TmFtZSxcclxuICAgICAgICAgICAgZmlsdGVyT2JqZWN0LmxvZ2ljYWwsXHJcbiAgICAgICAgICAgIGxldmVsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmIChmaWx0ZXJPYmplY3QuaGFzT3duUHJvcGVydHkoJ29wZXJhdG9yJykpIHtcclxuICAgICAgICB0aGlzLmZpbHRlclNlcXVlbmNlLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmFkZEludGVyZmFjZUZpbHRlcihmaWx0ZXJPYmplY3QsIGdlb21ldHJ5TmFtZSwgbGV2ZWwsIGxvZ2ljYWwpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VxdWVuY2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tcHV0ZUFsbG93ZWRPcGVyYXRvcnMoXHJcbiAgICBmaWVsZHM/OiBTb3VyY2VGaWVsZHNPcHRpb25zUGFyYW1zW10sXHJcbiAgICBwcm9wZXJ0eU5hbWU/OiBzdHJpbmcsXHJcbiAgICBkZWZhdWx0T3BlcmF0b3JzVHlwZT86IE9nY0ZpbHRlck9wZXJhdG9yVHlwZVxyXG4gICkge1xyXG4gICAgbGV0IGVmZmVjdGl2ZU9wZXJhdG9yczoge30gPSB7fTtcclxuICAgIGxldCBhbGxvd2VkT3BlcmF0b3JzO1xyXG4gICAgbGV0IGZpZWxkc0hhc1NwYXRpYWxPcGVyYXRvcjogYm9vbGVhbjtcclxuICAgIGxldCBpbmNsdWRlQ29udGFpbnM6IGJvb2xlYW47XHJcblxyXG4gICAgaWYgKGZpZWxkcyAmJiBwcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgY29uc3Qgc3JjRmllbGQgPSBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09IHByb3BlcnR5TmFtZSk7XHJcbiAgICAgIGFsbG93ZWRPcGVyYXRvcnMgPVxyXG4gICAgICAgIHNyY0ZpZWxkICYmIHNyY0ZpZWxkLmFsbG93ZWRPcGVyYXRvcnNUeXBlXHJcbiAgICAgICAgICA/IHNyY0ZpZWxkLmFsbG93ZWRPcGVyYXRvcnNUeXBlXHJcbiAgICAgICAgICA6IGRlZmF1bHRPcGVyYXRvcnNUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaWVsZHMpIHtcclxuICAgICAgZmllbGRzLm1hcCgoZmllbGQpID0+IHtcclxuICAgICAgICBpZiAoIWZpZWxkLmFsbG93ZWRPcGVyYXRvcnNUeXBlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFsbG93ZWRPcGVyYXRvcnNUeXBlID0gZmllbGQuYWxsb3dlZE9wZXJhdG9yc1R5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBhbGxvd2VkT3BlcmF0b3JzVHlwZSA9PT0gT2djRmlsdGVyT3BlcmF0b3JUeXBlLkFsbC50b0xvd2VyQ2FzZSgpIHx8XHJcbiAgICAgICAgICBhbGxvd2VkT3BlcmF0b3JzVHlwZSA9PT1cclxuICAgICAgICAgICAgT2djRmlsdGVyT3BlcmF0b3JUeXBlLlNwYXRpYWwudG9Mb3dlckNhc2UoKSB8fFxyXG4gICAgICAgICAgYWxsb3dlZE9wZXJhdG9yc1R5cGUgPT09XHJcbiAgICAgICAgICAgIE9nY0ZpbHRlck9wZXJhdG9yVHlwZS5CYXNpY0FuZFNwYXRpYWwudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZmllbGRzSGFzU3BhdGlhbE9wZXJhdG9yID0gdHJ1ZTtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgYWxsb3dlZE9wZXJhdG9yc1R5cGUgPT09IE9nY0ZpbHRlck9wZXJhdG9yVHlwZS5BbGwudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGluY2x1ZGVDb250YWlucyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhbGxvd2VkT3BlcmF0b3JzID0gYWxsb3dlZE9wZXJhdG9yc1xyXG4gICAgICA/IGFsbG93ZWRPcGVyYXRvcnNcclxuICAgICAgOiBPZ2NGaWx0ZXJPcGVyYXRvclR5cGUuQmFzaWNBbmRTcGF0aWFsO1xyXG5cclxuICAgIHN3aXRjaCAoYWxsb3dlZE9wZXJhdG9ycy50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3JUeXBlLkFsbDpcclxuICAgICAgICBlZmZlY3RpdmVPcGVyYXRvcnMgPSB0aGlzLm9wZXJhdG9ycztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvclR5cGUuU3BhdGlhbDpcclxuICAgICAgICBlZmZlY3RpdmVPcGVyYXRvcnMgPSB7XHJcbiAgICAgICAgICBbT2djRmlsdGVyT3BlcmF0b3IuSW50ZXJzZWN0c106IHsgc3BhdGlhbDogdHJ1ZSwgZmllbGRSZXN0cmljdDogW10gfSxcclxuICAgICAgICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5XaXRoaW5dOiB7IHNwYXRpYWw6IHRydWUsIGZpZWxkUmVzdHJpY3Q6IFtdIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yVHlwZS5CYXNpY0FuZFNwYXRpYWw6XHJcbiAgICAgICAgZWZmZWN0aXZlT3BlcmF0b3JzID0ge1xyXG4gICAgICAgICAgW09nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNFcXVhbFRvXToge1xyXG4gICAgICAgICAgICBzcGF0aWFsOiBmYWxzZSxcclxuICAgICAgICAgICAgZmllbGRSZXN0cmljdDogW11cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc05vdEVxdWFsVG9dOiB7XHJcbiAgICAgICAgICAgIHNwYXRpYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWVsZFJlc3RyaWN0OiBbXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5JbnRlcnNlY3RzXTogeyBzcGF0aWFsOiB0cnVlLCBmaWVsZFJlc3RyaWN0OiBbXSB9LFxyXG4gICAgICAgICAgW09nY0ZpbHRlck9wZXJhdG9yLldpdGhpbl06IHsgc3BhdGlhbDogdHJ1ZSwgZmllbGRSZXN0cmljdDogW10gfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3JUeXBlLkJhc2ljOlxyXG4gICAgICAgIGVmZmVjdGl2ZU9wZXJhdG9ycyA9IHtcclxuICAgICAgICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUb106IHtcclxuICAgICAgICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZpZWxkUmVzdHJpY3Q6IFtdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgW09nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNOb3RFcXVhbFRvXToge1xyXG4gICAgICAgICAgICBzcGF0aWFsOiBmYWxzZSxcclxuICAgICAgICAgICAgZmllbGRSZXN0cmljdDogW11cclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yVHlwZS5UaW1lOlxyXG4gICAgICAgIGVmZmVjdGl2ZU9wZXJhdG9ycyA9IHtcclxuICAgICAgICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5EdXJpbmddOiB7IHNwYXRpYWw6IGZhbHNlLCBmaWVsZFJlc3RyaWN0OiBbXSB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvclR5cGUuQmFzaWNOdW1lcmljT3BlcmF0b3I6XHJcbiAgICAgICAgZWZmZWN0aXZlT3BlcmF0b3JzID0ge1xyXG4gICAgICAgICAgW09nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNFcXVhbFRvXToge1xyXG4gICAgICAgICAgICBzcGF0aWFsOiBmYWxzZSxcclxuICAgICAgICAgICAgZmllbGRSZXN0cmljdDogW11cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc05vdEVxdWFsVG9dOiB7XHJcbiAgICAgICAgICAgIHNwYXRpYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWVsZFJlc3RyaWN0OiBbXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW5dOiB7XHJcbiAgICAgICAgICAgIHNwYXRpYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWVsZFJlc3RyaWN0OiBbJ251bWJlciddXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgW09nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNHcmVhdGVyVGhhbk9yRXF1YWxUb106IHtcclxuICAgICAgICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZpZWxkUmVzdHJpY3Q6IFsnbnVtYmVyJ11cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBbT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuXToge1xyXG4gICAgICAgICAgICBzcGF0aWFsOiBmYWxzZSxcclxuICAgICAgICAgICAgZmllbGRSZXN0cmljdDogWydudW1iZXInXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW5PckVxdWFsVG9dOiB7XHJcbiAgICAgICAgICAgIHNwYXRpYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWVsZFJlc3RyaWN0OiBbJ251bWJlciddXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBlZmZlY3RpdmVPcGVyYXRvcnMgPSB7XHJcbiAgICAgICAgICBbT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0VxdWFsVG9dOiB7XHJcbiAgICAgICAgICAgIHNwYXRpYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBmaWVsZFJlc3RyaWN0OiBbXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIFtPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTm90RXF1YWxUb106IHtcclxuICAgICAgICAgICAgc3BhdGlhbDogZmFsc2UsXHJcbiAgICAgICAgICAgIGZpZWxkUmVzdHJpY3Q6IFtdXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgW09nY0ZpbHRlck9wZXJhdG9yLkludGVyc2VjdHNdOiB7IHNwYXRpYWw6IHRydWUsIGZpZWxkUmVzdHJpY3Q6IFtdIH0sXHJcbiAgICAgICAgICBbT2djRmlsdGVyT3BlcmF0b3IuV2l0aGluXTogeyBzcGF0aWFsOiB0cnVlLCBmaWVsZFJlc3RyaWN0OiBbXSB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZmllbGRzSGFzU3BhdGlhbE9wZXJhdG9yKSB7XHJcbiAgICAgIChlZmZlY3RpdmVPcGVyYXRvcnMgYXMgYW55KS5JbnRlcnNlY3RzID0ge1xyXG4gICAgICAgIHNwYXRpYWw6IHRydWUsXHJcbiAgICAgICAgZmllbGRSZXN0cmljdDogW11cclxuICAgICAgfTtcclxuICAgICAgKGVmZmVjdGl2ZU9wZXJhdG9ycyBhcyBhbnkpLldpdGhpbiA9IHsgc3BhdGlhbDogdHJ1ZSwgZmllbGRSZXN0cmljdDogW10gfTtcclxuICAgICAgaWYgKGluY2x1ZGVDb250YWlucykge1xyXG4gICAgICAgIChlZmZlY3RpdmVPcGVyYXRvcnMgYXMgYW55KS5Db250YWlucyA9IHtcclxuICAgICAgICAgIHNwYXRpYWw6IHRydWUsXHJcbiAgICAgICAgICBmaWVsZFJlc3RyaWN0OiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZWZmZWN0aXZlT3BlcmF0b3JzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEludGVyZmFjZUZpbHRlcihcclxuICAgIGlnb09nY0ZpbHRlck9iamVjdD8sXHJcbiAgICBnZW9tZXRyeU5hbWU/LFxyXG4gICAgbGV2ZWwgPSAwLFxyXG4gICAgcGFyZW50TG9naWNhbCA9ICdPcidcclxuICApOiBPZ2NJbnRlcmZhY2VGaWx0ZXJPcHRpb25zIHtcclxuICAgIGlmICghaWdvT2djRmlsdGVyT2JqZWN0KSB7XHJcbiAgICAgIGlnb09nY0ZpbHRlck9iamVjdCA9IHsgb3BlcmF0b3I6ICdQcm9wZXJ0eUlzRXF1YWxUbycgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGYgPSB7XHJcbiAgICAgIHByb3BlcnR5TmFtZTogJycsXHJcbiAgICAgIG9wZXJhdG9yOiAnJyxcclxuICAgICAgYWN0aXZlOiAnJyxcclxuICAgICAgZmlsdGVyaWQ6IHV1aWQoKSxcclxuICAgICAgc3RlcDogJycsXHJcbiAgICAgIGJlZ2luOiAnJyxcclxuICAgICAgZW5kOiAnJyxcclxuICAgICAgc2xpZGVyT3B0aW9uczoge30sXHJcbiAgICAgIGxvd2VyQm91bmRhcnk6ICcnLFxyXG4gICAgICB1cHBlckJvdW5kYXJ5OiAnJyxcclxuICAgICAgZXhwcmVzc2lvbjogJycsXHJcbiAgICAgIHBhdHRlcm46ICcnLFxyXG4gICAgICB3aWxkQ2FyZDogJyonLFxyXG4gICAgICBzaW5nbGVDaGFyOiAnLicsXHJcbiAgICAgIGVzY2FwZUNoYXI6ICchJyxcclxuICAgICAgbWF0Y2hDYXNlOiB0cnVlLFxyXG4gICAgICBpZ29TcGF0aWFsU2VsZWN0b3I6ICcnLFxyXG4gICAgICBpZ29TTlJDOiAnJyxcclxuICAgICAgZ2VvbWV0cnlOYW1lOiAnJyxcclxuICAgICAgZ2VvbWV0cnk6ICcnLFxyXG4gICAgICB3a3RfZ2VvbWV0cnk6ICcnLFxyXG4gICAgICBleHRlbnQ6ICcnLFxyXG4gICAgICBzcnNOYW1lOiAnJyxcclxuICAgICAgcGFyZW50TG9naWNhbDogJycsXHJcbiAgICAgIGxldmVsOiAwXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICBmLFxyXG4gICAgICB7XHJcbiAgICAgICAgcGFyZW50TG9naWNhbCxcclxuICAgICAgICBsZXZlbCxcclxuICAgICAgICBnZW9tZXRyeU5hbWVcclxuICAgICAgfSxcclxuICAgICAgaWdvT2djRmlsdGVyT2JqZWN0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrSWdvRmlsdGVyc1Byb3BlcnRpZXMoXHJcbiAgICBmaWx0ZXJPYmplY3Q6IGFueSxcclxuICAgIGZpZWxkTmFtZUdlb21ldHJ5LFxyXG4gICAgcHJvajogb2xQcm9qZWN0aW9uLFxyXG4gICAgYWN0aXZlID0gZmFsc2VcclxuICApIHtcclxuICAgIGNvbnN0IGZpbHRlckFycmF5ID0gW107XHJcbiAgICBpZiAoZmlsdGVyT2JqZWN0IGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgZmlsdGVyT2JqZWN0LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICBmaWx0ZXJBcnJheS5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5jaGVja0lnb0ZpbHRlcnNQcm9wZXJ0aWVzKFxyXG4gICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICBmaWVsZE5hbWVHZW9tZXRyeSxcclxuICAgICAgICAgICAgcHJvaixcclxuICAgICAgICAgICAgYWN0aXZlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJBcnJheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChmaWx0ZXJPYmplY3QuaGFzT3duUHJvcGVydHkoJ2xvZ2ljYWwnKSkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAge30sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxvZ2ljYWw6IGZpbHRlck9iamVjdC5sb2dpY2FsLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmNoZWNrSWdvRmlsdGVyc1Byb3BlcnRpZXMoXHJcbiAgICAgICAgICAgICAgZmlsdGVyT2JqZWN0LmZpbHRlcnMsXHJcbiAgICAgICAgICAgICAgZmllbGROYW1lR2VvbWV0cnksXHJcbiAgICAgICAgICAgICAgcHJvaixcclxuICAgICAgICAgICAgICBhY3RpdmVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyT2JqZWN0Lmhhc093blByb3BlcnR5KCdvcGVyYXRvcicpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmlsdGVyUHJvcGVydGllcyhcclxuICAgICAgICAgIGZpbHRlck9iamVjdCBhcyBPZ2NJbnRlcmZhY2VGaWx0ZXJPcHRpb25zLFxyXG4gICAgICAgICAgZmllbGROYW1lR2VvbWV0cnksXHJcbiAgICAgICAgICBwcm9qLFxyXG4gICAgICAgICAgYWN0aXZlXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRGaWx0ZXJQcm9wZXJ0aWVzKFxyXG4gICAgaWdvT2djRmlsdGVyT2JqZWN0OiBPZ2NJbnRlcmZhY2VGaWx0ZXJPcHRpb25zLFxyXG4gICAgZmllbGROYW1lR2VvbWV0cnksXHJcbiAgICBwcm9qOiBvbFByb2plY3Rpb24sXHJcbiAgICBhY3RpdmUgPSBmYWxzZVxyXG4gICkge1xyXG4gICAgY29uc3QgZmlsdGVyaWQgPSBpZ29PZ2NGaWx0ZXJPYmplY3QuaGFzT3duUHJvcGVydHkoJ2ZpbHRlcmlkJylcclxuICAgICAgPyBpZ29PZ2NGaWx0ZXJPYmplY3QuZmlsdGVyaWRcclxuICAgICAgOiB1dWlkKCk7XHJcbiAgICBjb25zdCBzdGF0dXMgPSBpZ29PZ2NGaWx0ZXJPYmplY3QuaGFzT3duUHJvcGVydHkoJ2FjdGl2ZScpXHJcbiAgICAgID8gaWdvT2djRmlsdGVyT2JqZWN0LmFjdGl2ZVxyXG4gICAgICA6IGFjdGl2ZTtcclxuXHJcbiAgICBjb25zdCBzcnNOYW1lID0gaWdvT2djRmlsdGVyT2JqZWN0Lmhhc093blByb3BlcnR5KCdzcnNOYW1lJylcclxuICAgICAgPyBpZ29PZ2NGaWx0ZXJPYmplY3Quc3JzTmFtZVxyXG4gICAgICA6IHByb2pcclxuICAgICAgPyBwcm9qLmdldENvZGUoKVxyXG4gICAgICA6ICdFUFNHOjM4NTcnO1xyXG5cclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAge1xyXG4gICAgICAgIGZpbHRlcmlkLFxyXG4gICAgICAgIGFjdGl2ZTogc3RhdHVzLFxyXG4gICAgICAgIGlnb1NwYXRpYWxTZWxlY3RvcjogJ2ZpeGVkRXh0ZW50JyxcclxuICAgICAgICBzcnNOYW1lXHJcbiAgICAgIH0sXHJcbiAgICAgIGlnb09nY0ZpbHRlck9iamVjdCxcclxuICAgICAgeyBnZW9tZXRyeU5hbWU6IGZpZWxkTmFtZUdlb21ldHJ5IH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVidWlsdElnb09nY0ZpbHRlck9iamVjdEZyb21TZXF1ZW5jZShcclxuICAgIHNlcXVlbmNlOiBPZ2NJbnRlcmZhY2VGaWx0ZXJPcHRpb25zW11cclxuICApOiBJZ29PZ2NGaWx0ZXJPYmplY3Qge1xyXG4gICAgaWYgKHNlcXVlbmNlIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgaWYgKHNlcXVlbmNlLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgbGV0IGxhc3RQYXJlbnRMb2dpY2FsID0gc2VxdWVuY2VbMF0ucGFyZW50TG9naWNhbDtcclxuICAgICAgICBsZXQgbmV4dEVsZW1lbnQ6IGFueTtcclxuICAgICAgICBsZXQgbG9naWNhbEFycmF5ID0gW107XHJcbiAgICAgICAgbGV0IGxhc3RQcm9jZXNzZWRGaWx0ZXI7XHJcbiAgICAgICAgc2VxdWVuY2UuZm9yRWFjaCgodWlGaWx0ZXIpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBPYmplY3QuYXNzaWduKHt9LCB1aUZpbHRlcik7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHNlcXVlbmNlLmluZGV4T2YodWlGaWx0ZXIpO1xyXG4gICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCBzZXF1ZW5jZS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIG5leHRFbGVtZW50ID0gc2VxdWVuY2VbaW5kZXggKyAxXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG5leHRFbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LmFjdGl2ZTtcclxuICAgICAgICAgIGRlbGV0ZSBlbGVtZW50LmZpbHRlcmlkO1xyXG4gICAgICAgICAgZGVsZXRlIGVsZW1lbnQucGFyZW50TG9naWNhbDtcclxuICAgICAgICAgIGxvZ2ljYWxBcnJheS5wdXNoKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgIGlmIChzZXF1ZW5jZS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgbGFzdFByb2Nlc3NlZEZpbHRlciA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGxhc3RQYXJlbnRMb2dpY2FsICE9PSBuZXh0RWxlbWVudC5wYXJlbnRMb2dpY2FsKSB7XHJcbiAgICAgICAgICAgIGlmIChsb2dpY2FsQXJyYXkubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAnWW91IG11c3Qgc2V0IGF0ICcgK1xyXG4gICAgICAgICAgICAgICAgICAnbGVhc3QgdHdvIG9wZXJhdG9yIGluIGEgbG9naWNhbCAoJyArXHJcbiAgICAgICAgICAgICAgICAgIGxhc3RQYXJlbnRMb2dpY2FsICtcclxuICAgICAgICAgICAgICAgICAgJyknXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsYXN0UHJvY2Vzc2VkRmlsdGVyID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICAgeyBsb2dpY2FsOiBsYXN0UGFyZW50TG9naWNhbCwgZmlsdGVyczogbG9naWNhbEFycmF5IH1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGxvZ2ljYWxBcnJheSA9IFtsYXN0UHJvY2Vzc2VkRmlsdGVyXTtcclxuICAgICAgICAgICAgICBsYXN0UGFyZW50TG9naWNhbCA9IG5leHRFbGVtZW50LnBhcmVudExvZ2ljYWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gbGFzdFByb2Nlc3NlZEZpbHRlcjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlSWdvU2VsZWN0b3Ioc2VsZWN0b3JzOiBJZ29PZ2NTZWxlY3Rvcik6IElnb09nY1NlbGVjdG9yIHtcclxuICAgIGlmIChcclxuICAgICAgc2VsZWN0b3JzLmdyb3Vwcy5ldmVyeSgoZ3JvdXApID0+IGdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzICE9PSB1bmRlZmluZWQpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHNlbGVjdG9ycztcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3RvcjogSWdvT2djU2VsZWN0b3I7XHJcbiAgICBpZiAoc2VsZWN0b3JzLmdyb3VwcyAmJiBzZWxlY3RvcnMuYnVuZGxlcykge1xyXG4gICAgICBpZiAoIXNlbGVjdG9ycy5idW5kbGVzLmV2ZXJ5KChidW5kbGUpID0+IGJ1bmRsZS5pZCAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICdZb3UgbXVzdCBzZXQgYW4gaWQgZm9yIGVhY2ggb2YgeW91ciBidW5kbGVzJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgc2VsZWN0b3IgPSBPYmplY3RVdGlscy5jb3B5RGVlcChzZWxlY3RvcnMpO1xyXG4gICAgICBzZWxlY3Rvci5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgICBncm91cC50aXRsZSA9IGdyb3VwLnRpdGxlID8gZ3JvdXAudGl0bGUgOiBncm91cC5uYW1lO1xyXG4gICAgICAgIGdyb3VwLmVuYWJsZWQgPSBncm91cC5lbmFibGVkID8gZ3JvdXAuZW5hYmxlZCA6IGZhbHNlO1xyXG4gICAgICAgIGdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzID0gT2JqZWN0VXRpbHMuY29weURlZXAoXHJcbiAgICAgICAgICBzZWxlY3Rvci5idW5kbGVzLmZpbHRlcigoYikgPT4gZ3JvdXAuaWRzLmluY2x1ZGVzKGIuaWQpKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICghc2VsZWN0b3JzLmdyb3VwcyAmJiBzZWxlY3RvcnMuYnVuZGxlcykge1xyXG4gICAgICBzZWxlY3RvciA9IE9iamVjdFV0aWxzLmNvcHlEZWVwKHNlbGVjdG9ycyk7XHJcbiAgICAgIHNlbGVjdG9yLmdyb3VwcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0aXRsZTogJ2dyb3VwMScsXHJcbiAgICAgICAgICBuYW1lOiAnZ3JvdXAxJyxcclxuICAgICAgICAgIGNvbXB1dGVkU2VsZWN0b3JzOiBPYmplY3RVdGlscy5jb3B5RGVlcChzZWxlY3Rvci5idW5kbGVzKVxyXG4gICAgICAgIH0gYXMgU2VsZWN0b3JHcm91cFxyXG4gICAgICBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZWN0b3IgPSB7XHJcbiAgICAgICAgYnVuZGxlczogc2VsZWN0b3JzIGFzIGFueSxcclxuICAgICAgICBncm91cHM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6ICdncm91cDEnLFxyXG4gICAgICAgICAgICBuYW1lOiAnZ3JvdXAxJyxcclxuICAgICAgICAgICAgY29tcHV0ZWRTZWxlY3RvcnM6IE9iamVjdFV0aWxzLmNvcHlEZWVwKFxyXG4gICAgICAgICAgICAgIHNlbGVjdG9yc1xyXG4gICAgICAgICAgICApIGFzIE9nY1NlbGVjdG9yQnVuZGxlW11cclxuICAgICAgICAgIH0gYXMgU2VsZWN0b3JHcm91cFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc2VsZWN0b3JUeXBlOiBzZWxlY3Rvci5zZWxlY3RvclR5cGVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICghc2VsZWN0b3IuZ3JvdXBzLmZpbmQoKHNlbGVjdG9yR3JvdXApID0+IHNlbGVjdG9yR3JvdXAuZW5hYmxlZCkpIHtcclxuICAgICAgc2VsZWN0b3IuZ3JvdXBzWzBdLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNlbGVjdG9yO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhbmRsZU9nY0ZpbHRlcnNBcHBsaWVkVmFsdWUoXHJcbiAgICBvcHRpb25zOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMsXHJcbiAgICBmaWVsZE5hbWVHZW9tZXRyeTogc3RyaW5nLFxyXG4gICAgZXh0ZW50PzogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXHJcbiAgICBwcm9qPzogb2xQcm9qZWN0aW9uXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG9nY0ZpbHRlcnMgPSBvcHRpb25zLm9nY0ZpbHRlcnM7XHJcbiAgICBpZiAoIW9nY0ZpbHRlcnMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29uZGl0aW9ucyA9IFtdO1xyXG4gICAgbGV0IGZpbHRlclF1ZXJ5U3RyaW5nU2VsZWN0b3IgPSAnJztcclxuICAgIGxldCBmaWx0ZXJRdWVyeVN0cmluZ0FkdmFuY2VkRmlsdGVycyA9ICcnO1xyXG4gICAgaWYgKG9nY0ZpbHRlcnMuZW5hYmxlZCAmJiAob2djRmlsdGVycy5wdXNoQnV0dG9ucyB8fCBvZ2NGaWx0ZXJzLmNoZWNrYm94ZXMgfHwgb2djRmlsdGVycy5yYWRpb0J1dHRvbnMgfHwgb2djRmlsdGVycy5zZWxlY3RcclxuICAgICAgfHwgb2djRmlsdGVycy5hdXRvY29tcGxldGUpKSB7XHJcbiAgICAgIGxldCBzZWxlY3RvcnM7XHJcbiAgICAgIGlmIChvZ2NGaWx0ZXJzLnB1c2hCdXR0b25zKSB7XHJcbiAgICAgICAgc2VsZWN0b3JzID0gb2djRmlsdGVycy5wdXNoQnV0dG9ucztcclxuICAgICAgICBjb25zdCBwdXNoQ29uZGl0aW9ucyA9IHRoaXMuZm9ybWF0R3JvdXBBbmRGaWx0ZXIob2djRmlsdGVycywgc2VsZWN0b3JzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBwdXNoQ29uZGl0aW9ucykge1xyXG4gICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvZ2NGaWx0ZXJzLmNoZWNrYm94ZXMpIHtcclxuICAgICAgICBzZWxlY3RvcnMgPSBvZ2NGaWx0ZXJzLmNoZWNrYm94ZXM7XHJcbiAgICAgICAgY29uc3QgY2hlY2tib3hDb25kaXRpb25zID0gdGhpcy5mb3JtYXRHcm91cEFuZEZpbHRlcihvZ2NGaWx0ZXJzLCBzZWxlY3RvcnMpO1xyXG4gICAgICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGNoZWNrYm94Q29uZGl0aW9ucykge1xyXG4gICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucykge1xyXG4gICAgICAgIHNlbGVjdG9ycyA9IG9nY0ZpbHRlcnMucmFkaW9CdXR0b25zO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yc0NvcnIgPSB0aGlzLnZlcmlmeU11bHRpcGxlRW5hYmxlZHMoc2VsZWN0b3JzKTtcclxuICAgICAgICBjb25zdCByYWRpb0NvbmRpdGlvbnMgPSB0aGlzLmZvcm1hdEdyb3VwQW5kRmlsdGVyKG9nY0ZpbHRlcnMsIHNlbGVjdG9yc0NvcnIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIHJhZGlvQ29uZGl0aW9ucykge1xyXG4gICAgICAgICAgY29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvZ2NGaWx0ZXJzLnNlbGVjdCkge1xyXG4gICAgICAgIHNlbGVjdG9ycyA9IG9nY0ZpbHRlcnMuc2VsZWN0O1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yc0NvcnIgPSB0aGlzLnZlcmlmeU11bHRpcGxlRW5hYmxlZHMoc2VsZWN0b3JzKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RDb25kaXRpb25zID0gdGhpcy5mb3JtYXRHcm91cEFuZEZpbHRlcihvZ2NGaWx0ZXJzLCBzZWxlY3RvcnNDb3JyKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBzZWxlY3RDb25kaXRpb25zKSB7XHJcbiAgICAgICAgICBjb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlKSB7XHJcbiAgICAgICAgc2VsZWN0b3JzID0gb2djRmlsdGVycy5hdXRvY29tcGxldGU7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0Q29uZGl0aW9ucyA9IHRoaXMuZm9ybWF0R3JvdXBBbmRGaWx0ZXIob2djRmlsdGVycywgc2VsZWN0b3JzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBzZWxlY3RDb25kaXRpb25zKSB7XHJcbiAgICAgICAgICBjb25kaXRpb25zLnB1c2goY29uZGl0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgZmlsdGVyUXVlcnlTdHJpbmdTZWxlY3RvciA9IHRoaXMuYnVpbGRGaWx0ZXIoXHJcbiAgICAgICAgICBjb25kaXRpb25zLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgICA/IGNvbmRpdGlvbnNbMF1cclxuICAgICAgICAgICAgOiB7IGxvZ2ljYWw6ICdBbmQnLCBmaWx0ZXJzOiBjb25kaXRpb25zIH0sXHJcbiAgICAgICAgICBleHRlbnQsXHJcbiAgICAgICAgICBwcm9qLFxyXG4gICAgICAgICAgb2djRmlsdGVycy5nZW9tZXRyeU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob2djRmlsdGVycy5lbmFibGVkICYmIG9nY0ZpbHRlcnMuZmlsdGVycykge1xyXG4gICAgICBvZ2NGaWx0ZXJzLmdlb21ldHJ5TmFtZSA9IG9nY0ZpbHRlcnMuZ2VvbWV0cnlOYW1lIHx8IGZpZWxkTmFtZUdlb21ldHJ5O1xyXG4gICAgICBjb25zdCBpZ29GaWx0ZXJzID0gb2djRmlsdGVycy5maWx0ZXJzO1xyXG4gICAgICBmaWx0ZXJRdWVyeVN0cmluZ0FkdmFuY2VkRmlsdGVycyA9IHRoaXMuYnVpbGRGaWx0ZXIoXHJcbiAgICAgICAgaWdvRmlsdGVycyxcclxuICAgICAgICBleHRlbnQsXHJcbiAgICAgICAgcHJvaixcclxuICAgICAgICBvZ2NGaWx0ZXJzLmdlb21ldHJ5TmFtZSxcclxuICAgICAgICBvcHRpb25zXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZpbHRlclF1ZXJ5U3RyaW5nID0gb2djRmlsdGVycy5hZHZhbmNlZE9nY0ZpbHRlcnNcclxuICAgICAgPyBmaWx0ZXJRdWVyeVN0cmluZ0FkdmFuY2VkRmlsdGVyc1xyXG4gICAgICA6IGZpbHRlclF1ZXJ5U3RyaW5nU2VsZWN0b3I7XHJcbiAgICBpZiAob3B0aW9ucy50eXBlID09PSAnd21zJykge1xyXG4gICAgICBmaWx0ZXJRdWVyeVN0cmluZyA9IHRoaXMuZm9ybWF0UHJvY2Vzc2VkT2djRmlsdGVyKFxyXG4gICAgICAgIGZpbHRlclF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgIChvcHRpb25zIGFzIGFueSkucGFyYW1zLkxBWUVSU1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ3dmcycpIHtcclxuICAgICAgZmlsdGVyUXVlcnlTdHJpbmcgPSB0aGlzLmZvcm1hdFByb2Nlc3NlZE9nY0ZpbHRlcihcclxuICAgICAgICBmaWx0ZXJRdWVyeVN0cmluZyxcclxuICAgICAgICAob3B0aW9ucyBhcyBhbnkpLnBhcmFtcy5mZWF0dXJlVHlwZXNcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsdGVyUXVlcnlTdHJpbmc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmVyaWZ5TXVsdGlwbGVFbmFibGVkcyhzZWxlY3RvcnMpIHtcclxuICAgIHNlbGVjdG9ycy5idW5kbGVzLmZvckVhY2goYnVuZGxlID0+IHtcclxuICAgICAgaWYgKCFidW5kbGUubXVsdGlwbGUgJiYgYnVuZGxlLnNlbGVjdG9ycykge1xyXG4gICAgICAgIGNvbnN0IGVuYWJsZWRzID0gYnVuZGxlLnNlbGVjdG9ycy5yZWR1Y2UoKGxpc3QsIGZpbHRlciwgaW5kZXgpID0+IChmaWx0ZXIuZW5hYmxlZCkgPT09IHRydWUgPyBsaXN0LmNvbmNhdChpbmRleCkgOiBsaXN0LCBbXSk7XHJcbiAgICAgICAgaWYgKGVuYWJsZWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgIGVuYWJsZWRzLnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgIGVuYWJsZWRzLmZvckVhY2goaW5kZXggPT4ge1xyXG4gICAgICAgICAgICBidW5kbGUuc2VsZWN0b3JzW2luZGV4XS5lbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHNlbGVjdG9ycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb3JtYXRHcm91cEFuZEZpbHRlcihvZ2NGaWx0ZXJzOiBPZ2NGaWx0ZXJzT3B0aW9ucywgc2VsZWN0b3JzKSB7XHJcbiAgICBzZWxlY3RvcnMgPSB0aGlzLmNvbXB1dGVJZ29TZWxlY3RvcihcclxuICAgICAgc2VsZWN0b3JzXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0b3JCdW5kbGUgPSBzZWxlY3RvcnMuZ3JvdXBzLmZpbmQoXHJcbiAgICAgIChnKSA9PiBnLmVuYWJsZWRcclxuICAgICkuY29tcHV0ZWRTZWxlY3RvcnM7XHJcbiAgICBjb25zdCBjb25kaXRpb25zID0gW107XHJcbiAgICBzZWxlY3RvckJ1bmRsZS5tYXAoKGJ1bmRsZSkgPT4ge1xyXG4gICAgICBjb25zdCBidW5kbGVDb25kaXRpb24gPSBbXTtcclxuICAgICAgY29uc3Qgc2VsZWN0b3JzVHlwZSA9IGJ1bmRsZS5zZWxlY3RvcnMgYXMgYW55O1xyXG4gICAgICBpZiAoIXNlbGVjdG9yc1R5cGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc2VsZWN0b3JzVHlwZVxyXG4gICAgICAgIC5maWx0ZXIoKG9nY3NlbGVjdG9yKSA9PiBvZ2NzZWxlY3Rvci5lbmFibGVkID09PSB0cnVlKVxyXG4gICAgICAgIC5mb3JFYWNoKChlbmFibGVkU2VsZWN0b3IpID0+IGJ1bmRsZUNvbmRpdGlvbi5wdXNoKGVuYWJsZWRTZWxlY3Rvci5maWx0ZXJzKSk7XHJcbiAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKGJ1bmRsZUNvbmRpdGlvblswXSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoYnVuZGxlQ29uZGl0aW9uLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBjb25kaXRpb25zLnB1c2goe1xyXG4gICAgICAgICAgbG9naWNhbDogYnVuZGxlLmxvZ2ljYWwsXHJcbiAgICAgICAgICBmaWx0ZXJzOiBidW5kbGVDb25kaXRpb25cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNlbGVjdG9ycy5zZWxlY3RvclR5cGUgPT09ICdwdXNoQnV0dG9uJykge1xyXG4gICAgICBvZ2NGaWx0ZXJzLnB1c2hCdXR0b25zID0gc2VsZWN0b3JzO1xyXG4gICAgfSBlbHNlIGlmIChzZWxlY3RvcnMuc2VsZWN0b3JUeXBlID09PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgIG9nY0ZpbHRlcnMuY2hlY2tib3hlcyA9IHNlbGVjdG9ycztcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3JzLnNlbGVjdG9yVHlwZSA9PT0gJ3JhZGlvQnV0dG9uJykge1xyXG4gICAgICBvZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucyA9IHNlbGVjdG9ycztcclxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3JzLnNlbGVjdG9yVHlwZSA9PT0gJ3NlbGVjdCcpIHtcclxuICAgICAgb2djRmlsdGVycy5zZWxlY3QgPSBzZWxlY3RvcnM7XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9ycy5zZWxlY3RvclR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XHJcbiAgICAgIG9nY0ZpbHRlcnMuYXV0b2NvbXBsZXRlID0gc2VsZWN0b3JzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmRpdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9ybWF0UHJvY2Vzc2VkT2djRmlsdGVyKFxyXG4gICAgcHJvY2Vzc2VkRmlsdGVyOiBzdHJpbmcsXHJcbiAgICBsYXllcnNPclR5cGVuYW1lczogc3RyaW5nXHJcbiAgKTogc3RyaW5nIHtcclxuXHJcbiAgICBpZiAoIXByb2Nlc3NlZEZpbHRlcikge3JldHVybiB1bmRlZmluZWQ7fTtcclxuICAgIGxldCBhcHBsaWVkRmlsdGVyID0gJyc7XHJcbiAgICBpZiAocHJvY2Vzc2VkRmlsdGVyLmxlbmd0aCA9PT0gMCAmJiBsYXllcnNPclR5cGVuYW1lcy5pbmRleE9mKCcsJykgPT09IC0xKSB7XHJcbiAgICAgIGFwcGxpZWRGaWx0ZXIgPSBwcm9jZXNzZWRGaWx0ZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsYXllcnNPclR5cGVuYW1lcy5zcGxpdCgnLCcpLmZvckVhY2goKGxheWVyT3JUeXBlbmFtZXMpID0+IHtcclxuICAgICAgICBhcHBsaWVkRmlsdGVyID0gYCR7YXBwbGllZEZpbHRlcn0oJHtwcm9jZXNzZWRGaWx0ZXIucmVwbGFjZShcclxuICAgICAgICAgICdmaWx0ZXI9JyxcclxuICAgICAgICAgICcnXHJcbiAgICAgICAgKX0pYDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBhcHBsaWVkRmlsdGVyID0gYXBwbGllZEZpbHRlci5yZXBsYWNlKC9cXChcXCkvZywgJycpO1xyXG4gICAgY29uc3QgZmlsdGVyVmFsdWUgPVxyXG4gICAgICBhcHBsaWVkRmlsdGVyLmxlbmd0aCA+IDBcclxuICAgICAgICA/IGFwcGxpZWRGaWx0ZXIucmVwbGFjZSgnZmlsdGVyPScsICcnKVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIGZpbHRlclZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBhcnNlRmlsdGVyT3B0aW9uRGF0ZSh2YWx1ZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3RvZGF5Jykge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIGlmIChtb21lbnQodmFsdWUpLmlzVmFsaWQoKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=