@igo2/geo 16.2.0 → 16.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +3 -3
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +3 -3
  3. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +3 -3
  4. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +3 -3
  5. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
  6. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +3 -3
  7. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +1 -1
  8. package/esm2022/lib/catalog/shared/catalog.enum.mjs +1 -1
  9. package/esm2022/lib/catalog/shared/catalog.interface.mjs +1 -1
  10. package/esm2022/lib/catalog/shared/catalog.service.mjs +64 -26
  11. package/esm2022/lib/catalog/shared/catalogs.mjs +1 -1
  12. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +7 -1
  13. package/esm2022/lib/datasource/shared/capabilities.service.mjs +1 -1
  14. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  15. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  16. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  17. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +2 -2
  18. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  19. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  20. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +1 -1
  21. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  22. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +1 -1
  23. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  24. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  25. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  26. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  27. package/esm2022/lib/datasource/shared/datasources/index.mjs +1 -1
  28. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  29. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  30. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  31. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  32. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  33. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  34. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  35. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  36. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  37. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
  38. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  39. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  40. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  41. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  42. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  43. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  44. package/esm2022/lib/datasource/shared/index.mjs +1 -1
  45. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +1 -1
  46. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +1 -1
  47. package/esm2022/lib/datasource/shared/options/options.service.mjs +1 -1
  48. package/esm2022/lib/datasource/utils/tilegrid.mjs +1 -1
  49. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +3 -3
  50. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +3 -3
  51. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +3 -3
  52. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  53. package/esm2022/lib/directions/directions-sources/directions-source.mjs +1 -1
  54. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  55. package/esm2022/lib/directions/directions.component.mjs +3 -3
  56. package/esm2022/lib/directions/shared/directions.interface.mjs +1 -1
  57. package/esm2022/lib/directions/shared/directions.service.mjs +1 -1
  58. package/esm2022/lib/directions/shared/directions.utils.mjs +1 -1
  59. package/esm2022/lib/directions/shared/store.mjs +1 -1
  60. package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
  61. package/esm2022/lib/download/shared/download.service.mjs +1 -1
  62. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +3 -3
  63. package/esm2022/lib/draw/draw/draw-popup.component.mjs +3 -3
  64. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
  65. package/esm2022/lib/draw/draw/draw.component.mjs +3 -3
  66. package/esm2022/lib/draw/shared/draw-icon.service.mjs +1 -1
  67. package/esm2022/lib/draw/shared/draw.enum.mjs +1 -1
  68. package/esm2022/lib/draw/shared/draw.interface.mjs +1 -1
  69. package/esm2022/lib/draw/shared/draw.utils.mjs +1 -1
  70. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  71. package/esm2022/lib/environment/index.mjs +1 -1
  72. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +3 -3
  73. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +3 -3
  74. package/esm2022/lib/feature/shared/feature-store.utils.mjs +1 -1
  75. package/esm2022/lib/feature/shared/index.mjs +1 -1
  76. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +1 -1
  77. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  78. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  79. package/esm2022/lib/feature/shared/strategies/loading.mjs +1 -1
  80. package/esm2022/lib/feature/shared/strategies/selection.mjs +1 -1
  81. package/esm2022/lib/feature/shared/strategies.utils.mjs +1 -1
  82. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  83. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
  84. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +3 -3
  85. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +3 -3
  86. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +3 -3
  87. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +3 -3
  88. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +3 -3
  89. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +3 -3
  90. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  91. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  92. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +1 -1
  93. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  94. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +1 -1
  95. package/esm2022/lib/filter/shared/time-filter.enum.mjs +1 -1
  96. package/esm2022/lib/filter/shared/time-filter.interface.mjs +1 -1
  97. package/esm2022/lib/filter/shared/time-filter.service.mjs +1 -1
  98. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +3 -3
  99. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +3 -3
  100. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +3 -3
  101. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
  102. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +3 -3
  103. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
  104. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
  105. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +3 -3
  106. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +3 -3
  107. package/esm2022/lib/geometry/shared/controls/draw.mjs +1 -1
  108. package/esm2022/lib/geometry/shared/controls/modify.mjs +1 -1
  109. package/esm2022/lib/geometry/shared/controls/slice.mjs +1 -1
  110. package/esm2022/lib/geometry/shared/geometry.errors.mjs +1 -1
  111. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  112. package/esm2022/lib/geometry/shared/geometry.utils.mjs +1 -1
  113. package/esm2022/lib/import-export/export-button/export-button.component.mjs +3 -3
  114. package/esm2022/lib/import-export/shared/export.interface.mjs +1 -1
  115. package/esm2022/lib/import-export/shared/export.service.mjs +1 -1
  116. package/esm2022/lib/import-export/shared/export.type.mjs +1 -1
  117. package/esm2022/lib/import-export/shared/export.utils.mjs +1 -1
  118. package/esm2022/lib/import-export/shared/import.errors.mjs +1 -1
  119. package/esm2022/lib/import-export/shared/import.interface.mjs +1 -1
  120. package/esm2022/lib/import-export/shared/import.service.mjs +1 -1
  121. package/esm2022/lib/import-export/shared/import.utils.mjs +1 -1
  122. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +3 -3
  123. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
  124. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +3 -3
  125. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +3 -3
  126. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +3 -3
  127. package/esm2022/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  128. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
  129. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  130. package/esm2022/lib/layer/shared/clusterParam.mjs +1 -1
  131. package/esm2022/lib/layer/shared/layer.service.mjs +6 -6
  132. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  133. package/esm2022/lib/layer/shared/layers/any-layer.mjs +1 -1
  134. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  135. package/esm2022/lib/layer/shared/layers/image-layer.mjs +1 -1
  136. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +1 -1
  137. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  138. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +1 -1
  139. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  140. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +1 -1
  141. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  142. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  143. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +3 -3
  144. package/esm2022/lib/layer/utils/layer.utils.mjs +1 -1
  145. package/esm2022/lib/layer/utils/outputLegend.mjs +1 -1
  146. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
  147. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +3 -3
  148. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +3 -3
  149. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +1 -1
  150. package/esm2022/lib/map/home-extent-button/index.mjs +1 -1
  151. package/esm2022/lib/map/info-section/info-section.component.mjs +3 -3
  152. package/esm2022/lib/map/map-center/map-center.component.mjs +3 -3
  153. package/esm2022/lib/map/menu-button/menu-button.component.mjs +3 -3
  154. package/esm2022/lib/map/offline-button/offline-button.component.mjs +3 -3
  155. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
  156. package/esm2022/lib/map/shared/controllers/controller.mjs +1 -1
  157. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +1 -1
  158. package/esm2022/lib/map/shared/controllers/index.mjs +1 -1
  159. package/esm2022/lib/map/shared/index.mjs +1 -1
  160. package/esm2022/lib/map/shared/map.abstract.mjs +1 -1
  161. package/esm2022/lib/map/shared/map.interface.mjs +1 -1
  162. package/esm2022/lib/map/shared/map.utils.mjs +1 -1
  163. package/esm2022/lib/map/shared/projection.interfaces.mjs +1 -1
  164. package/esm2022/lib/map/shared/projection.service.mjs +1 -1
  165. package/esm2022/lib/map/shared/projection.utils.mjs +1 -1
  166. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  167. package/esm2022/lib/map/utils/layer-watcher.mjs +1 -1
  168. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +3 -3
  169. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +3 -3
  170. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
  171. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +3 -3
  172. package/esm2022/lib/measure/measurer/measurer.component.mjs +3 -3
  173. package/esm2022/lib/measure/shared/measure.enum.mjs +1 -1
  174. package/esm2022/lib/measure/shared/measure.interfaces.mjs +1 -1
  175. package/esm2022/lib/measure/shared/measure.utils.mjs +1 -1
  176. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
  177. package/esm2022/lib/metadata/shared/metadata.interface.mjs +1 -1
  178. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +1 -1
  179. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  180. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  181. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +1 -1
  182. package/esm2022/lib/offline/layerDB/index.mjs +1 -1
  183. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +1 -1
  184. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +1 -1
  185. package/esm2022/lib/offline/shared/geo-network.service.mjs +1 -1
  186. package/esm2022/lib/overlay/shared/overlay.enum.mjs +1 -1
  187. package/esm2022/lib/overlay/shared/overlay.mjs +2 -2
  188. package/esm2022/lib/overlay/shared/overlay.service.mjs +1 -1
  189. package/esm2022/lib/overlay/shared/overlay.utils.mjs +1 -1
  190. package/esm2022/lib/print/print/print.component.mjs +3 -3
  191. package/esm2022/lib/print/print-form/print-form.component.mjs +3 -3
  192. package/esm2022/lib/print/shared/geopdf.mjs +1 -1
  193. package/esm2022/lib/print/shared/print.interface.mjs +1 -1
  194. package/esm2022/lib/print/shared/print.service.mjs +1 -1
  195. package/esm2022/lib/print/shared/print.type.mjs +1 -1
  196. package/esm2022/lib/query/shared/query-search-source.mjs +1 -1
  197. package/esm2022/lib/query/shared/query-search-source.providers.mjs +1 -1
  198. package/esm2022/lib/query/shared/query.interfaces.mjs +1 -1
  199. package/esm2022/lib/query/shared/query.utils.mjs +1 -1
  200. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +3 -3
  201. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +3 -3
  202. package/esm2022/lib/search/search-results/search-results-item.component.mjs +3 -3
  203. package/esm2022/lib/search/search-results/search-results.component.mjs +3 -3
  204. package/esm2022/lib/search/search-selector/search-selector.component.mjs +3 -3
  205. package/esm2022/lib/search/search-settings/search-settings.component.mjs +3 -3
  206. package/esm2022/lib/search/shared/search-source-service.providers.mjs +1 -1
  207. package/esm2022/lib/search/shared/search-source.service.mjs +1 -1
  208. package/esm2022/lib/search/shared/search.enums.mjs +1 -1
  209. package/esm2022/lib/search/shared/search.interfaces.mjs +1 -1
  210. package/esm2022/lib/search/shared/search.service.mjs +1 -1
  211. package/esm2022/lib/search/shared/search.utils.mjs +1 -1
  212. package/esm2022/lib/search/shared/sources/cadastre.mjs +1 -1
  213. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +1 -1
  214. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  215. package/esm2022/lib/search/shared/sources/coordinates.mjs +1 -1
  216. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +1 -1
  217. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  218. package/esm2022/lib/search/shared/sources/icherche.mjs +1 -1
  219. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +1 -1
  220. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  221. package/esm2022/lib/search/shared/sources/ilayer.mjs +1 -1
  222. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +1 -1
  223. package/esm2022/lib/search/shared/sources/index.mjs +1 -1
  224. package/esm2022/lib/search/shared/sources/nominatim.mjs +2 -2
  225. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +1 -1
  226. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +1 -1
  227. package/esm2022/lib/search/shared/sources/source.mjs +1 -1
  228. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  229. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
  230. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +1 -1
  231. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +1 -1
  232. package/esm2022/lib/style/index.mjs +1 -1
  233. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +1 -1
  234. package/esm2022/lib/style/shared/feature/feature-style.mjs +1 -1
  235. package/esm2022/lib/style/shared/font.enum.mjs +1 -1
  236. package/esm2022/lib/style/shared/index.mjs +1 -1
  237. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +1 -1
  238. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +1 -1
  239. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +1 -1
  240. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +1 -1
  241. package/esm2022/lib/style/style-list/style-list.module.mjs +1 -1
  242. package/esm2022/lib/style/style-list/style-list.provider.mjs +1 -1
  243. package/esm2022/lib/style/style-list/style-list.service.mjs +1 -1
  244. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +3 -3
  245. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +3 -3
  246. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
  247. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +1 -1
  248. package/esm2022/lib/style/style-service/draw-style.service.mjs +1 -1
  249. package/esm2022/lib/style/style-service/style.service.mjs +1 -1
  250. package/esm2022/lib/toast/toast.component.mjs +3 -3
  251. package/esm2022/lib/utils/googleLinks.mjs +1 -1
  252. package/esm2022/lib/utils/id-generator.mjs +1 -1
  253. package/esm2022/lib/utils/osmLinks.mjs +1 -1
  254. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +1 -1
  255. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +1 -1
  256. package/esm2022/lib/wkt/shared/wkt.service.mjs +15 -15
  257. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +3 -3
  258. package/esm2022/lib/workspace/confirmation-popup/index.mjs +1 -1
  259. package/esm2022/lib/workspace/shared/edition-workspace.mjs +1 -1
  260. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +1 -1
  261. package/esm2022/lib/workspace/shared/feature-workspace.mjs +1 -1
  262. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +1 -1
  263. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +1 -1
  264. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +1 -1
  265. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +1 -1
  266. package/esm2022/lib/workspace/shared/workspace.utils.mjs +1 -1
  267. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
  268. package/fesm2022/igo2-geo.mjs +233 -190
  269. package/fesm2022/igo2-geo.mjs.map +1 -1
  270. package/lib/datasource/shared/capabilities.interface.d.ts +16 -0
  271. package/lib/overlay/shared/overlay.d.ts +1 -1
  272. package/package.json +5 -5
  273. package/src/geo-theme.scss +23 -23
  274. package/src/lib/catalog/catalog-browser/catalog-browser.theming.scss +22 -22
  275. package/src/lib/catalog/catalog.theming.scss +5 -5
  276. package/src/lib/directions/directions-results/directions-results.theming.scss +10 -10
  277. package/src/lib/directions/directions.theming.scss +6 -6
  278. package/src/lib/draw/draw.theming.scss +32 -32
  279. package/src/lib/feature/feature-details/feature-details.theming.scss +16 -16
  280. package/src/lib/feature/feature.theming.scss +4 -4
  281. package/src/lib/filter/filter.theming.scss +13 -13
  282. package/src/lib/filter/ogc-filter-selection/ogc-filter-selection.theming.scss +18 -18
  283. package/src/lib/filter/time-filter-form/time-filter-form.theming.scss +5 -5
  284. package/src/lib/layer/layer-item/layer-item.theme.scss +33 -33
  285. package/src/lib/layer/layer-legend/layer-legend.theming.scss +10 -10
  286. package/src/lib/layer/layer-list-tool/layer-list-tool.theming.scss +34 -34
  287. package/src/lib/layer/layer.theming.scss +10 -10
  288. package/src/lib/map/map-browser/map-browser.theming.scss +46 -46
  289. package/src/lib/map/map.theming.scss +9 -9
  290. package/src/lib/map/menu-button/menu-button.theming.scss +20 -20
  291. package/src/lib/map/zoom-button/zoom-button.theming.scss +32 -32
  292. package/src/lib/measure/measure.theming.scss +5 -5
  293. package/src/lib/measure/measurer/measurer.theming.scss +26 -26
  294. package/src/lib/search/search-results/search-results-item.theme.scss +20 -20
  295. package/src/lib/search/search.theming.scss +7 -7
  296. package/src/lib/workspace/confirmation-popup/confirmation-popup.theming.scss +14 -14
  297. package/src/lib/workspace/workspace.theming.scss +6 -6
  298. package/src/style/style.scss +1 -1
@@ -4,6 +4,7 @@ import { ConfigService, LanguageService, MessageService } from '@igo2/core';
4
4
  import { ObjectUtils, uuid } from '@igo2/utils';
5
5
  import { EMPTY, of, zip } from 'rxjs';
6
6
  import { catchError, map } from 'rxjs/operators';
7
+ import { ArcGISRestCapabilitiesLayerTypes } from '../../datasource/shared/capabilities.interface';
7
8
  import { CapabilitiesService } from '../../datasource/shared/capabilities.service';
8
9
  import { getResolutionFromScale } from '../../map/shared/map.utils';
9
10
  import { QueryFormat } from '../../query/shared/query.enums';
@@ -498,17 +499,19 @@ export class CatalogService {
498
499
  })
499
500
  .filter((item) => item !== undefined);
500
501
  }
501
- /// ERSI
502
502
  getArcGISRESTItems(catalog, capabilities) {
503
- if (!capabilities) {
503
+ if (!capabilities || !capabilities.layers) {
504
+ this.messageService.error('igo.geo.catalog.someUnavailable', 'igo.geo.catalog.unavailableTitle');
504
505
  return [];
505
506
  }
507
+ const groups = !capabilities.layers
508
+ ? []
509
+ : capabilities.layers.filter((layer) => layer.subLayerIds);
506
510
  const layers = !capabilities.layers
507
511
  ? []
508
- : capabilities.layers.filter((layer) => !layer.type || layer.type === 'Feature Layer');
509
- if (!capabilities.layers) {
510
- this.messageService.error('igo.geo.catalog.someUnavailable', 'igo.geo.catalog.unavailableTitle');
511
- }
512
+ : capabilities.layers.filter((layer) => !layer.type ||
513
+ layer.type === ArcGISRestCapabilitiesLayerTypes.FeatureLayer ||
514
+ layer.type === ArcGISRestCapabilitiesLayerTypes.RasterLayer);
512
515
  const regexes = (catalog.regFilters || []).map((pattern) => new RegExp(pattern));
513
516
  let abstract;
514
517
  if (capabilities.serviceDescription &&
@@ -516,17 +519,11 @@ export class CatalogService {
516
519
  const regex = /(<([^>]+)>)/gi;
517
520
  abstract = capabilities.serviceDescription.replace(regex, '');
518
521
  }
519
- return layers
522
+ const items = layers
520
523
  .map((layer) => {
521
524
  const propertiesToForce = this.computeForcedProperties(layer.name, catalog.forcedProperties);
522
- let baseAbstract;
525
+ let baseAbstract = catalog.abstract;
523
526
  let extern = true;
524
- if (layer.Abstract) {
525
- baseAbstract = layer.Abstract;
526
- }
527
- else if (!layer.Abstract && catalog.abstract) {
528
- baseAbstract = catalog.abstract;
529
- }
530
527
  let metadataUrl = propertiesToForce?.metadataUrl || propertiesToForce?.metadataUrlAll;
531
528
  let metadataAbstract = propertiesToForce?.metadataAbstract ||
532
529
  propertiesToForce?.metadataAbstractAll ||
@@ -541,21 +538,16 @@ export class CatalogService {
541
538
  propertiesToForce?.metadataUrlAll) {
542
539
  extern = false;
543
540
  }
544
- if (this.testLayerRegexes(layer.id, regexes) === false) {
541
+ if (this.testLayerRegexes(layer.id.toString(), regexes) === false) {
545
542
  return undefined;
546
543
  }
547
544
  const baseSourceOptions = {
548
545
  type: TypeCatalog[catalog.type],
549
546
  url: catalog.url,
550
- crossOrigin: catalog.setCrossOriginAnonymous
551
- ? 'anonymous'
552
- : undefined,
553
- layer: layer.id,
547
+ layer: layer.id.toString(),
554
548
  queryable: true,
555
- queryFormat: 'esrijson',
556
- matrixSet: catalog.matrixSet,
557
- optionsFromCapabilities: true,
558
- style: 'default'
549
+ queryFormat: QueryFormat.ESRIJSON,
550
+ optionsFromCapabilities: true
559
551
  };
560
552
  const sourceOptions = Object.assign({}, baseSourceOptions, catalog.sourceOptions);
561
553
  return ObjectUtils.removeUndefined({
@@ -565,7 +557,6 @@ export class CatalogService {
565
557
  ? propertiesToForce.title
566
558
  : layer.name,
567
559
  externalProvider: catalog.externalProvider,
568
- address: catalog.id,
569
560
  options: {
570
561
  sourceOptions,
571
562
  minResolution: getResolutionFromScale(layer.maxScale),
@@ -574,12 +565,59 @@ export class CatalogService {
574
565
  url: metadataUrl,
575
566
  extern,
576
567
  abstract: metadataAbstract,
577
- type: baseSourceOptions.type
568
+ type: catalog.type
578
569
  }
579
570
  }
580
571
  });
581
572
  })
582
573
  .filter((item) => item !== undefined);
574
+ const groupHandledLayersIds = [];
575
+ const groupedItems = groups
576
+ .map((group) => {
577
+ return {
578
+ options: undefined,
579
+ address: `catalog.group.${group.name}`,
580
+ id: `catalog.group.${group.name}`,
581
+ type: CatalogItemType.Group,
582
+ externalProvider: catalog.externalProvider,
583
+ sortDirection: catalog.sortDirection,
584
+ title: group.name,
585
+ items: items
586
+ .filter((i) => {
587
+ const subLayerIdsStr = group.subLayerIds.map((r) => r.toString());
588
+ return subLayerIdsStr.includes(i.options.sourceOptions.layer);
589
+ })
590
+ .map((i) => {
591
+ groupHandledLayersIds.push(i.id);
592
+ return Object.assign({}, i, {
593
+ address: `catalog.group.${group.name}`
594
+ });
595
+ })
596
+ };
597
+ })
598
+ .filter((g) => g.items.length);
599
+ if (groups) {
600
+ const TitleOrId = catalog.title || catalog.id;
601
+ const nonHandledLayers = items
602
+ .filter((i) => !groupHandledLayersIds.includes(i.id))
603
+ .map((i) => Object.assign({}, i, {
604
+ address: `catalog.group.${TitleOrId}`
605
+ }));
606
+ if (nonHandledLayers.length) {
607
+ const nonHandledGroup = {
608
+ options: undefined,
609
+ address: `catalog.group.${TitleOrId}`,
610
+ id: `catalog.group.${TitleOrId}`,
611
+ type: CatalogItemType.Group,
612
+ externalProvider: catalog.externalProvider,
613
+ sortDirection: catalog.sortDirection,
614
+ title: TitleOrId,
615
+ items: nonHandledLayers
616
+ };
617
+ groupedItems.push(nonHandledGroup);
618
+ }
619
+ }
620
+ return groups ? groupedItems : items;
583
621
  }
584
622
  testLayerRegexes(layerName, regexes) {
585
623
  if (regexes.length === 0) {
@@ -662,4 +700,4 @@ class CatalogFactory {
662
700
  return catalog;
663
701
  }
664
702
  }
665
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvY2F0YWxvZy9zaGFyZWQvY2F0YWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFRbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFROUQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLDRCQUE0QixFQUM1QixVQUFVLEVBQ1YsV0FBVyxFQUNaLE1BQU0sWUFBWSxDQUFDOzs7OztBQUtwQixNQUFNLE9BQU8sY0FBYztJQUVmO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFMVixZQUNVLElBQWdCLEVBQ2hCLE1BQXFCLEVBQ3JCLGVBQWdD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Q0g7YUFBTTtZQUNMLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FDckQsY0FBYyxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUNqRCxDQUFDO1NBQ0g7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSwgTGFuZ3VhZ2VTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBPYmplY3RVdGlscywgdXVpZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBvZiwgemlwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IENhcGFiaWxpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9jYXBhYmlsaXRpZXMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zLFxyXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zLFxyXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zUGFyYW1zLFxyXG4gIFdNVFNEYXRhU291cmNlT3B0aW9uc1xyXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzJztcclxuaW1wb3J0IHsgSW1hZ2VMYXllck9wdGlvbnMsIExheWVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZCc7XHJcbmltcG9ydCB7IGdldFJlc29sdXRpb25Gcm9tU2NhbGUgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC51dGlscyc7XHJcbmltcG9ydCB7IFF1ZXJ5Rm9ybWF0IH0gZnJvbSAnLi4vLi4vcXVlcnkvc2hhcmVkL3F1ZXJ5LmVudW1zJztcclxuaW1wb3J0IHsgZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vdXRpbHMvaWQtZ2VuZXJhdG9yJztcclxuaW1wb3J0IHsgQ2F0YWxvZyB9IGZyb20gJy4vY2F0YWxvZy5hYnN0cmFjdCc7XHJcbmltcG9ydCB7IENhdGFsb2dJdGVtVHlwZSwgVHlwZUNhdGFsb2cgfSBmcm9tICcuL2NhdGFsb2cuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQ2F0YWxvZ0l0ZW0sXHJcbiAgQ2F0YWxvZ0l0ZW1Hcm91cCxcclxuICBDYXRhbG9nSXRlbUxheWVyLFxyXG4gIENhdGFsb2dTZXJ2aWNlT3B0aW9ucyxcclxuICBGb3JjZWRQcm9wZXJ0eVxyXG59IGZyb20gJy4vY2F0YWxvZy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1xyXG4gIEFyY0dJU1Jlc3RDYXRhbG9nLFxyXG4gIEJhc2VsYXllcnNDYXRhbG9nLFxyXG4gIENvbXBvc2l0ZUNhdGFsb2csXHJcbiAgVGlsZU9ySW1hZ2VBcmNHSVNSZXN0Q2F0YWxvZyxcclxuICBXTVNDYXRhbG9nLFxyXG4gIFdNVFNDYXRhbG9nXHJcbn0gZnJvbSAnLi9jYXRhbG9ncyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXRhbG9nU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2FwYWJpbGl0aWVzU2VydmljZTogQ2FwYWJpbGl0aWVzU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbG9hZENhdGFsb2dzKCk6IE9ic2VydmFibGU8Q2F0YWxvZ1tdPiB7XHJcbiAgICBjb25zdCBjb250ZXh0Q29uZmlnID0gdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdjb250ZXh0JykgfHwge307XHJcblxyXG4gICAgY29uc3QgY2F0YWxvZ0NvbmZpZzogQ2F0YWxvZ1NlcnZpY2VPcHRpb25zID1cclxuICAgICAgdGhpcy5jb25maWcuZ2V0Q29uZmlnKCdjYXRhbG9nJykgfHwge307XHJcbiAgICBjb25zdCBhcGlVcmwgPSBjYXRhbG9nQ29uZmlnLnVybCB8fCBjb250ZXh0Q29uZmlnLnVybDtcclxuICAgIGNvbnN0IGNhdGFsb2dzRnJvbUNvbmZpZyA9IGNhdGFsb2dDb25maWcuc291cmNlcyB8fCBbXTtcclxuXHJcbiAgICBjb25zdCBvYnNlcnZhYmxlcyQgPSBbXTtcclxuXHJcbiAgICBpZiAoYXBpVXJsKSB7XHJcbiAgICAgIGlmIChjYXRhbG9nQ29uZmlnLmJhc2VsYXllcnMpIHtcclxuICAgICAgICBjb25zdCB0cmFuc2xhdGUgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XHJcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5jYXRhbG9nLmJhc2VMYXllcnMnKTtcclxuICAgICAgICBjb25zdCBiYXNlTGF5ZXJzQ2F0YWxvZyA9IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgaWQ6ICdjYXRhbG9nLmJhc2VsYXllcnMnLFxyXG4gICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgdXJsOiBgJHthcGlVcmx9L2Jhc2VsYXllcnNgLFxyXG4gICAgICAgICAgICB0eXBlOiAnYmFzZWxheWVycydcclxuICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICAgIG9ic2VydmFibGVzJC5wdXNoKG9mKGJhc2VMYXllcnNDYXRhbG9nKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENhdGFsb2dzIGZyb20gQVBJXHJcbiAgICAgIGNvbnN0IGNhdGFsb2dzRnJvbUFwaSQgPSB0aGlzLmh0dHBcclxuICAgICAgICAuZ2V0PENhdGFsb2dbXT4oYCR7YXBpVXJsfS9jYXRhbG9nc2ApXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKGNhdGFsb2dzKSA9PlxyXG4gICAgICAgICAgICBjYXRhbG9ncy5tYXAoKGM6IGFueSkgPT4gT2JqZWN0LmFzc2lnbihjLCBjLm9wdGlvbnMpKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKF9yZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IEVNUFRZKVxyXG4gICAgICAgICk7XHJcbiAgICAgIG9ic2VydmFibGVzJC5wdXNoKGNhdGFsb2dzRnJvbUFwaSQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENhdGFsb2dzIGZyb20gY29uZmlnXHJcbiAgICBpZiAoY2F0YWxvZ3NGcm9tQ29uZmlnLmxlbmd0aCA+IDApIHtcclxuICAgICAgb2JzZXJ2YWJsZXMkLnB1c2goXHJcbiAgICAgICAgb2YoY2F0YWxvZ3NGcm9tQ29uZmlnKS5waXBlKFxyXG4gICAgICAgICAgbWFwKChjYXRhbG9nczogQ2F0YWxvZ1tdKSA9PlxyXG4gICAgICAgICAgICBjYXRhbG9ncy5tYXAoKGMpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoIWMuaWQpIHtcclxuICAgICAgICAgICAgICAgIGMuaWQgPSB1dWlkKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBjO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gemlwKC4uLm9ic2VydmFibGVzJCkucGlwZShcclxuICAgICAgbWFwKChjYXRhbG9nczogQ2F0YWxvZ1tdW10pID0+IFtdLmNvbmNhdC5hcHBseShbXSwgY2F0YWxvZ3MpKVxyXG4gICAgKSBhcyBPYnNlcnZhYmxlPENhdGFsb2dbXT47XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0l0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcclxuICAgIGxldCBuZXdDYXRhbG9nOiBDYXRhbG9nO1xyXG4gICAgbmV3Q2F0YWxvZyA9IENhdGFsb2dGYWN0b3J5LmNyZWF0ZUluc3RhbmNlQ2F0YWxvZyhjYXRhbG9nLCB0aGlzKTtcclxuICAgIHJldHVybiBuZXdDYXRhbG9nLmNvbGxlY3RDYXRhbG9nSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nQmFzZUxheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1Hcm91cFtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQmFzZUxheWVyc09wdGlvbnMoY2F0YWxvZykucGlwZShcclxuICAgICAgbWFwKChsYXllcnNPcHRpb25zOiBMYXllck9wdGlvbnNbXSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gbGF5ZXJzT3B0aW9ucy5tYXAoKGxheWVyT3B0aW9uczogTGF5ZXJPcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKGxheWVyT3B0aW9ucy5zb3VyY2VPcHRpb25zKSxcclxuICAgICAgICAgICAgdGl0bGU6IGxheWVyT3B0aW9ucy50aXRsZSxcclxuICAgICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxyXG4gICAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICAgIG9wdGlvbnM6IGxheWVyT3B0aW9uc1xyXG4gICAgICAgICAgfSBhcyBDYXRhbG9nSXRlbUxheWVyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkOiAnY2F0YWxvZy5ncm91cC5iYXNlbGF5ZXJzJyxcclxuICAgICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwLFxyXG4gICAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICAgIHRpdGxlOiBjYXRhbG9nLnRpdGxlLFxyXG4gICAgICAgICAgICBpdGVtc1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDYXRhbG9nQmFzZUxheWVyc09wdGlvbnMoXHJcbiAgICBjYXRhbG9nOiBDYXRhbG9nXHJcbiAgKTogT2JzZXJ2YWJsZTxMYXllck9wdGlvbnNbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TGF5ZXJPcHRpb25zW10+KGNhdGFsb2cudXJsKTtcclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nV01TTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQ2FwYWJpbGl0aWVzKGNhdGFsb2cpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2FwYWJpbGl0aWVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xyXG4gICAgICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlICYmXHJcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuU2VydmljZS5BYnN0cmFjdCAmJlxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3QubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjYXRhbG9nLmFic3RyYWN0ID0gY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpbmFsTGF5ZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5mbGF0dGVuV21zQ2FwYWJpbGl0aWVzKFxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLkNhcGFiaWxpdHkuTGF5ZXIsXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgZmluYWxMYXllcnMsXHJcbiAgICAgICAgICBjYXRhbG9nLmdyb3VwU2VwYXJhdG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjYXBhYmlsaXRpZXNDYXBhYmlsaXR5TGF5ZXIgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAge30sXHJcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuQ2FwYWJpbGl0eS5MYXllclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyLkxheWVyID0gZmluYWxMYXllcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKGYpID0+IGYuTGF5ZXIubGVuZ3RoICE9PSAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmluY2x1ZGVSZWN1cnNpdmVJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXNDYXBhYmlsaXR5TGF5ZXIsIGl0ZW1zKTtcclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmxhdHRlbldtc0NhcGFiaWxpdGllcyhwYXJlbnQsIGxldmVsID0gMCwgZmluYWxMYXllcnMsIHNlcGFyYXRvciA9ICcgLyAnKSB7XHJcbiAgICBpZiAoIWZpbmFsTGF5ZXJzLmluY2x1ZGVzKHBhcmVudC5UaXRsZSkpIHtcclxuICAgICAgY29uc3QgbW9kaWZpZWRQYXJlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnQpO1xyXG4gICAgICBtb2RpZmllZFBhcmVudC5MYXllciA9IFtdO1xyXG4gICAgICBmaW5hbExheWVycy5wdXNoKG1vZGlmaWVkUGFyZW50KTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgcGFyZW50LkxheWVyKSB7XHJcbiAgICAgIGNvbnN0IG1vZGlmaWVkTGF5ZXIgPSBPYmplY3QuYXNzaWduKHt9LCBsYXllcik7XHJcbiAgICAgIGlmIChsZXZlbCA+IDApIHtcclxuICAgICAgICBtb2RpZmllZExheWVyLlRpdGxlID0gcGFyZW50LlRpdGxlICsgc2VwYXJhdG9yICsgbGF5ZXIuVGl0bGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGxheWVyLkxheWVyKSB7XHJcbiAgICAgICAgdGhpcy5mbGF0dGVuV21zQ2FwYWJpbGl0aWVzKFxyXG4gICAgICAgICAgbW9kaWZpZWRMYXllcixcclxuICAgICAgICAgIGxldmVsICsgMSxcclxuICAgICAgICAgIGZpbmFsTGF5ZXJzLFxyXG4gICAgICAgICAgc2VwYXJhdG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaW5hbExheWVycy5maW5kKChmZikgPT4gZmYuVGl0bGUgPT09IHBhcmVudC5UaXRsZSkuTGF5ZXIucHVzaChsYXllcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nV01UU0xheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nKS5waXBlKFxyXG4gICAgICBtYXAoKGNhcGFiaWxpdGllczogYW55KSA9PiB0aGlzLmdldFdNVFNJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXMpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nQXJjR0lTUmVzdEl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZykucGlwZShcclxuICAgICAgbWFwKChjYXBhYmlsaXRpZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFyY0dJU1JFU1RJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXMpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvYWRDYXRhbG9nQ29tcG9zaXRlTGF5ZXJJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICBjb25zdCBjb21wb3NpdGVDYXRhbG9nID0gKGNhdGFsb2cgYXMgQ29tcG9zaXRlQ2F0YWxvZykuY29tcG9zaXRlO1xyXG5cclxuICAgIGNvbnN0IGNhdGFsb2dzRnJvbUluc3RhbmNlID0gW10gYXMgQ2F0YWxvZ1tdO1xyXG4gICAgY29tcG9zaXRlQ2F0YWxvZy5tYXAoKGNvbXBvbmVudDogQ2F0YWxvZykgPT4ge1xyXG4gICAgICBjb21wb25lbnQuc29ydERpcmVjdGlvbiA9IGNhdGFsb2cuc29ydERpcmVjdGlvbjsgLy8gcHJvcGFnYXRlIHNvcnREaXJlY3Rpb24gd2l0aCBwYXJlbnQgdmFsdWVcclxuICAgICAgY2F0YWxvZ3NGcm9tSW5zdGFuY2UucHVzaChcclxuICAgICAgICBDYXRhbG9nRmFjdG9yeS5jcmVhdGVJbnN0YW5jZUNhdGFsb2coY29tcG9uZW50LCB0aGlzKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gZ2V0IENhdGFsb2dJdGVtcyBmb3IgZWFjaCBvcmlnaW5hbCBDYXRhbG9nLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGNvbnN0IHJlcXVlc3QxJCA9IFtdO1xyXG4gICAgY2F0YWxvZ3NGcm9tSW5zdGFuY2UubWFwKChjb21wb25lbnQ6IENhdGFsb2cpID0+XHJcbiAgICAgIHJlcXVlc3QxJC5wdXNoKGNvbXBvbmVudC5jb2xsZWN0Q2F0YWxvZ0l0ZW1zKCkpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGludGVncmF0ZSBpbXBvc2VkIGdyb3VwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBsZXQgcmVxdWVzdDIkID0gW107XHJcblxyXG4gICAgZnVuY3Rpb24gZmxhdERlZXBMYXllcihhcnIpIHtcclxuICAgICAgcmV0dXJuIGFyci5yZWR1Y2UoXHJcbiAgICAgICAgKGFjYywgdmFsKSA9PlxyXG4gICAgICAgICAgYWNjLmNvbmNhdChcclxuICAgICAgICAgICAgdmFsLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5Hcm91cCA/IGZsYXREZWVwTGF5ZXIodmFsLml0ZW1zKSA6IHZhbFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgT2JqZWN0LmtleXMoY29tcG9zaXRlQ2F0YWxvZykuZmluZCgoaykgPT4gY29tcG9zaXRlQ2F0YWxvZ1trXS5ncm91cEltcG9zZSlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBwdXNoSW1wb3NlR3JvdXAgPSAoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICBjb25zdCBjID0gY2F0YWxvZ3NGcm9tSW5zdGFuY2VbaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IG91dEdyb3VwSW1wb3NlID0gT2JqZWN0LmFzc2lnbih7fSwgYy5ncm91cEltcG9zZSk7XHJcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuYWRkcmVzcyA9IGMuaWQ7XHJcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UudHlwZSA9IENhdGFsb2dJdGVtVHlwZS5Hcm91cDtcclxuICAgICAgICBvdXRHcm91cEltcG9zZS5leHRlcm5hbFByb3ZpZGVyID0gYy5leHRlcm5hbFByb3ZpZGVyO1xyXG4gICAgICAgIGlmIChvdXRHcm91cEltcG9zZS5zb3J0RGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIG91dEdyb3VwSW1wb3NlLnNvcnREaXJlY3Rpb24gPSBjLnNvcnREaXJlY3Rpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLml0ZW1zID0gW107XHJcblxyXG4gICAgICAgIGNvbnN0IGZsYXRMYXllciA9IGZsYXREZWVwTGF5ZXIoaXRlbSk7XHJcbiAgICAgICAgZmxhdExheWVyLm1hcChcclxuICAgICAgICAgICh2KSA9PiAodi5hZGRyZXNzID0gYCR7b3V0R3JvdXBJbXBvc2UuYWRkcmVzc30uJHtvdXRHcm91cEltcG9zZS5pZH1gKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuaXRlbXMgPSBmbGF0TGF5ZXI7XHJcblxyXG4gICAgICAgIHJldHVybiBvdXRHcm91cEltcG9zZTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlcXVlc3QyJCA9IHJlcXVlc3QxJC5tYXAoKG9icywgaWR4KSA9PlxyXG4gICAgICAgIG9icy5waXBlKFxyXG4gICAgICAgICAgbWFwKChpdGVtcykgPT5cclxuICAgICAgICAgICAgY29tcG9zaXRlQ2F0YWxvZ1tpZHhdLmdyb3VwSW1wb3NlXHJcbiAgICAgICAgICAgICAgPyBwdXNoSW1wb3NlR3JvdXAoaXRlbXMsIGlkeClcclxuICAgICAgICAgICAgICA6IGl0ZW1zXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVxdWVzdDIkID0gcmVxdWVzdDEkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbmNhdCBHcm91cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgY29uc3QgcmVxdWVzdDMkID0gemlwKC4uLnJlcXVlc3QyJCkucGlwZShcclxuICAgICAgbWFwKFxyXG4gICAgICAgIChvdXRwdXQ6IENhdGFsb2dJdGVtW10pID0+IFtdLmNvbmNhdCguLi5vdXRwdXQpIC8vIFtdLmNvbmNhdC5hcHBseShbXSwgcmVzdWx0MVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIC8vIG1lcmdlIEdyb3VwIChmaXJzdCBsZXZlbCBvbmx5KSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgY29uc3QgZ3JvdXBCeUdyb3VwSWQgPSAoZGF0YSwga2V5Rm4pID0+XHJcbiAgICAgIGRhdGEucmVkdWNlKChhY2MsIGdyb3VwKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBJZCA9IGtleUZuKGdyb3VwKTtcclxuICAgICAgICBjb25zdCBpbmQgPSBhY2MuZmluZCgoeCkgPT4geC5pZCA9PT0gZ3JvdXBJZCk7XHJcblxyXG4gICAgICAgIGlmICghaW5kKSB7XHJcbiAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSBncm91cDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaXggPSBhY2MuaW5kZXhPZihpbmQpO1xyXG4gICAgICAgICAgaWYgKGFjY1tpeF0uYWRkcmVzcy5zcGxpdCgnfCcpLmluZGV4T2YoZ3JvdXAuYWRkcmVzcykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIGFjY1tpeF0uYWRkcmVzcyA9IGAke2FjY1tpeF0uYWRkcmVzc318JHtncm91cC5hZGRyZXNzfWA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhY2NbaXhdLml0ZW1zLnB1c2goLi4uZ3JvdXAuaXRlbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICB9LCBbXSk7XHJcblxyXG4gICAgLy8gbWVyZ2UgTGF5ZXIgZm9yIGVhY2ggTGV2ZWwgKGNhdGFsb2csIGdyb3VwKHJlY3Vyc2l2ZSkpXHJcbiAgICBjb25zdCByZWN1cnNpdmVHcm91cEJ5TGF5ZXJBZGRyZXNzID0gKGl0ZW1zLCBrZXlGbikgPT5cclxuICAgICAgaXRlbXMucmVkdWNlKChhY2MsIGl0ZW0sIGlkeCwgYXJyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF5ZXJUaXRsZSA9IGtleUZuKGl0ZW0pO1xyXG4gICAgICAgIGNvbnN0IG91dEl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyKSB7XHJcbiAgICAgICAgICAvLyBzYW1lIHRpdGxlLCBzYW1lIGFkZHJlc3MgPT4gcmVzdWx0OiBvbmx5IG9uZSBpdGVtIGlzIGtlcHRcclxuXHJcbiAgICAgICAgICAvLyBzYW1lIHRpdGxlLCBhZGRyZXNzIGRpZmZcclxuICAgICAgICAgIGNvbnN0IGluZGljZXNNYXRjaFRpdGxlID0gW107XHJcbiAgICAgICAgICBjb25zdCBpbmRpY2VzTWF0Y2hOZXdNZXRhZGF0YVVybCA9IFtdOyAvLyBtZXRhZGF0YVxyXG4gICAgICAgICAgY29uc3QgZGlmZkFkZHJlc3MgPSBhcnIuZmlsdGVyKCh4LCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBiSW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh4LnRpdGxlID09PSBsYXllclRpdGxlICYmIHgudHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGkgIT09IGlkeCAmJiB4LmFkZHJlc3MgIT09IGl0ZW0uYWRkcmVzcykge1xyXG4gICAgICAgICAgICAgICAgYkluZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGluZGljZXNNYXRjaFRpdGxlLnB1c2goaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGJJbmQ7XHJcbiAgICAgICAgICB9KTsgLy8gJCYgaSAhPT0gaWR4XHJcblxyXG4gICAgICAgICAgaWYgKGRpZmZBZGRyZXNzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5Qb3NpdGlvbiA9IGluZGljZXNNYXRjaFRpdGxlLmZpbmRJbmRleCgoeCkgPT4geCA9PT0gaWR4KSArIDE7XHJcbiAgICAgICAgICAgIG91dEl0ZW0udGl0bGUgPSBgJHtpdGVtLnRpdGxlfSAoJHtuUG9zaXRpb259KWA7IC8vIHNvdXJjZTogJHtpdGVtLmFkZHJlc3Muc3BsaXQoJy4nKVswXX1cclxuICAgICAgICAgICAgblBvc2l0aW9uID1cclxuICAgICAgICAgICAgICBpbmRpY2VzTWF0Y2hOZXdNZXRhZGF0YVVybC5maW5kSW5kZXgoKHgpID0+IHggPT09IGlkeCkgKyAxO1xyXG4gICAgICAgICAgICBvdXRJdGVtLm5ld01ldGFkYXRhVXJsID0gYCR7aXRlbS5uZXdNZXRhZGF0YVVybH0gKCR7blBvc2l0aW9ufSlgOyAvLyBzb3VyY2U6ICR7aXRlbS5hZGRyZXNzLnNwbGl0KCcuJylbMF19XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgZXhpc3QgPSBhY2MuZmluZChcclxuICAgICAgICAgICAgKHgpID0+IHgudGl0bGUgPT09IG91dEl0ZW0udGl0bGUgJiYgeC50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuTGF5ZXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgICAgICAgIGFjY1thY2MubGVuZ3RoXSA9IG91dEl0ZW07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5Hcm91cCkge1xyXG4gICAgICAgICAgb3V0SXRlbS5pdGVtcyA9IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MoXHJcbiAgICAgICAgICAgIGl0ZW0uaXRlbXMsXHJcbiAgICAgICAgICAgIChsYXllcikgPT4gbGF5ZXIudGl0bGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSBvdXRJdGVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgW10pO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3Q0JCA9IHJlcXVlc3QzJC5waXBlKFxyXG4gICAgICBtYXAoKG91dHB1dCkgPT4gZ3JvdXBCeUdyb3VwSWQob3V0cHV0LCAoZ3JvdXApID0+IGdyb3VwLmlkKSksXHJcbiAgICAgIG1hcCgob3V0cHV0KSA9PiBbXS5jb25jYXQoLi4ub3V0cHV0KSksXHJcbiAgICAgIG1hcCgoZGF0YSkgPT4gcmVjdXJzaXZlR3JvdXBCeUxheWVyQWRkcmVzcyhkYXRhLCAobGF5ZXIpID0+IGxheWVyLnRpdGxlKSlcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHJlcXVlc3Q0JDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHNUeXBlOiBzdHJpbmcgPSBUeXBlQ2F0YWxvZ1tjYXRhbG9nLnR5cGUgYXMgc3RyaW5nXTtcclxuICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdGllc1NlcnZpY2VcclxuICAgICAgLmdldENhcGFiaWxpdGllcyhzVHlwZSBhcyBhbnksIGNhdGFsb2cudXJsLCBjYXRhbG9nLnZlcnNpb24pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcclxuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGNhdGFsb2cudGl0bGVcclxuICAgICAgICAgICAgICA/ICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGUnXHJcbiAgICAgICAgICAgICAgOiAnaWdvLmdlby5jYXRhbG9nLnNvbWVVbmF2YWlsYWJsZScsXHJcbiAgICAgICAgICAgICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGVUaXRsZScsXHJcbiAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgY2F0YWxvZy50aXRsZSA/IHsgdmFsdWU6IGNhdGFsb2cudGl0bGUgfSA6IHVuZGVmaW5lZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlRm9yY2VkUHJvcGVydGllcyhcclxuICAgIGxheWVyTmFtZUZyb21DYXRhbG9nOiBzdHJpbmcsXHJcbiAgICBmb3JjZWRQcm9wZXJ0aWVzOiBGb3JjZWRQcm9wZXJ0eVtdXHJcbiAgKTogRm9yY2VkUHJvcGVydHkge1xyXG4gICAgaWYgKCFmb3JjZWRQcm9wZXJ0aWVzIHx8IGZvcmNlZFByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldHVyblByb3BlcnR5OiBGb3JjZWRQcm9wZXJ0eSA9IHtcclxuICAgICAgbGF5ZXJOYW1lOiBsYXllck5hbWVGcm9tQ2F0YWxvZyxcclxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcclxuICAgICAgbWV0YWRhdGFVcmw6IHVuZGVmaW5lZCxcclxuICAgICAgbWV0YWRhdGFBYnN0cmFjdDogdW5kZWZpbmVkLFxyXG4gICAgICBtZXRhZGF0YUFic3RyYWN0QWxsOiB1bmRlZmluZWQsXHJcbiAgICAgIG1ldGFkYXRhVXJsQWxsOiB1bmRlZmluZWRcclxuICAgIH07XHJcbiAgICAvL3Byb2Nlc3Mgd2lsZGNhcmQgYmVmb3JlXHJcbiAgICAvLyBpZiB0aGVyZSBpcyBhICogd2lsZGNhcmRcclxuICAgIGNvbnN0IGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMgPSBmb3JjZWRQcm9wZXJ0aWVzLmZpbmQoXHJcbiAgICAgIChmKSA9PiBmLmxheWVyTmFtZSA9PT0gJyonXHJcbiAgICApO1xyXG4gICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMpIHtcclxuICAgICAgLy8gbWV0YWRhdGFBYnN0cmFjdEFsbFxyXG4gICAgICBpZiAoZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YUFic3RyYWN0QWxsKSB7XHJcbiAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFBYnN0cmFjdEFsbCA9XHJcbiAgICAgICAgICBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzLm1ldGFkYXRhQWJzdHJhY3RBbGw7XHJcbiAgICAgIH1cclxuICAgICAgLy8gbWV0YWRhdGFVcmxBbGxcclxuICAgICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFVcmxBbGwpIHtcclxuICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YVVybEFsbCA9XHJcbiAgICAgICAgICBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzLm1ldGFkYXRhVXJsQWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JjZWRQcm9wZXJ0aWVzLm1hcCgoZm9yY2VkUHJvcGVydHkpID0+IHtcclxuICAgICAgLy8gaWYgbWF0Y2ggZm91bmRcclxuICAgICAgaWYgKGxheWVyTmFtZUZyb21DYXRhbG9nID09PSBmb3JjZWRQcm9wZXJ0eS5sYXllck5hbWUpIHtcclxuICAgICAgICAvLyB0aXRsZVxyXG4gICAgICAgIGlmIChmb3JjZWRQcm9wZXJ0eS50aXRsZSkge1xyXG4gICAgICAgICAgcmV0dXJuUHJvcGVydHkudGl0bGUgPSBmb3JjZWRQcm9wZXJ0eS50aXRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gbWV0YWRhdGFVcmxcclxuICAgICAgICBpZiAoZm9yY2VkUHJvcGVydHkubWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgIHJldHVyblByb3BlcnR5Lm1ldGFkYXRhVXJsID0gZm9yY2VkUHJvcGVydHkubWV0YWRhdGFVcmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1ldGFkYXRhQWJzdHJhY3RcclxuICAgICAgICBpZiAoZm9yY2VkUHJvcGVydHkubWV0YWRhdGFBYnN0cmFjdCkge1xyXG4gICAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFBYnN0cmFjdCA9IGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5Qcm9wZXJ0eTtcclxuICB9XHJcblxyXG4gIC8vLyBXTVNcclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihsYXllciwgaWRQYXJlbnQsIGxheWVyc1F1ZXJ5Rm9ybWF0LCBjYXRhbG9nKSB7XHJcbiAgICBjb25zdCBjb25maWd1cmVkUXVlcnlGb3JtYXQgPSB0aGlzLnJldHJpZXZlTGF5ZXJJbmZvRm9ybWF0KFxyXG4gICAgICBsYXllci5OYW1lLFxyXG4gICAgICBsYXllcnNRdWVyeUZvcm1hdFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsZWdlbmRPcHRpb25zID1cclxuICAgICAgY2F0YWxvZy5zaG93TGVnZW5kICYmIGxheWVyLlN0eWxlXHJcbiAgICAgICAgPyB0aGlzLmNhcGFiaWxpdGllc1NlcnZpY2UuZ2V0U3R5bGUobGF5ZXIuU3R5bGUpXHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgY2F0YWxvZy5xdWVyeVBhcmFtcywge1xyXG4gICAgICBMQVlFUlM6IGxheWVyLk5hbWUsXHJcbiAgICAgIFZFUlNJT046IGNhdGFsb2cudmVyc2lvblxyXG4gICAgfSBhcyBXTVNEYXRhU291cmNlT3B0aW9uc1BhcmFtcyk7XHJcblxyXG4gICAgY29uc3QgYmFzZVNvdXJjZU9wdGlvbnMgPSB7XHJcbiAgICAgIHR5cGU6ICd3bXMnLFxyXG4gICAgICB1cmw6IGNhdGFsb2cudXJsLFxyXG4gICAgICBjcm9zc09yaWdpbjogY2F0YWxvZy5zZXRDcm9zc09yaWdpbkFub255bW91cyA/ICdhbm9ueW1vdXMnIDogdW5kZWZpbmVkLFxyXG4gICAgICBxdWVyeUZvcm1hdDogY29uZmlndXJlZFF1ZXJ5Rm9ybWF0LFxyXG4gICAgICBxdWVyeUh0bWxUYXJnZXQ6XHJcbiAgICAgICAgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID09PSBRdWVyeUZvcm1hdC5IVE1MIHx8XHJcbiAgICAgICAgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID09PSBRdWVyeUZvcm1hdC5IVE1MR01MMlxyXG4gICAgICAgICAgPyAnaWZyYW1lJ1xyXG4gICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgIG9wdGlvbnNGcm9tQ2FwYWJpbGl0aWVzOiB0cnVlXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICB7fSxcclxuICAgICAgYmFzZVNvdXJjZU9wdGlvbnMsXHJcbiAgICAgIGNhdGFsb2cuc291cmNlT3B0aW9ucyxcclxuICAgICAgeyBwYXJhbXMgfVxyXG4gICAgKSBhcyBXTVNEYXRhU291cmNlT3B0aW9ucztcclxuXHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICAgIGxheWVyLk5hbWUsXHJcbiAgICAgIGNhdGFsb2cuZm9yY2VkUHJvcGVydGllc1xyXG4gICAgKTtcclxuICAgIGxldCBiYXNlQWJzdHJhY3Q7XHJcbiAgICBsZXQgZXh0ZXJuID0gdHJ1ZTtcclxuICAgIGlmIChsYXllci5BYnN0cmFjdCkge1xyXG4gICAgICBiYXNlQWJzdHJhY3QgPSBsYXllci5BYnN0cmFjdDtcclxuICAgIH0gZWxzZSBpZiAoIWxheWVyLkFic3RyYWN0ICYmIGNhdGFsb2cuYWJzdHJhY3QpIHtcclxuICAgICAgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IGxheWVyT25saW5lUmVzb3VyY2UgPVxyXG4gICAgICBsYXllcj8uRGF0YVVSTCAmJiBsYXllcj8uRGF0YVVSTC5sZW5ndGggPiAwXHJcbiAgICAgICAgPyBsYXllcj8uRGF0YVVSTFswXS5PbmxpbmVSZXNvdXJjZVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGxldCBtZXRhZGF0YVVybCA9XHJcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fFxyXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgfHxcclxuICAgICAgbGF5ZXJPbmxpbmVSZXNvdXJjZTtcclxuICAgIGxldCBtZXRhZGF0YUFic3RyYWN0ID1cclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwgfHxcclxuICAgICAgYmFzZUFic3RyYWN0O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxyXG4gICAgICAhcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsICYmXHJcbiAgICAgIChwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxyXG4gICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxyXG4gICAgKSB7XHJcbiAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCAmJlxyXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcclxuICAgICkge1xyXG4gICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXllclByZXBhcmUgPSB7XHJcbiAgICAgIGlkOiBnZW5lcmF0ZUlkRnJvbVNvdXJjZU9wdGlvbnMoc291cmNlT3B0aW9ucyksXHJcbiAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcclxuICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZSA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlIDogbGF5ZXIuVGl0bGUsXHJcbiAgICAgIGFkZHJlc3M6IGlkUGFyZW50LFxyXG4gICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIgfHwgZmFsc2UsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBtYXhSZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLk1heFNjYWxlRGVub21pbmF0b3IpLFxyXG4gICAgICAgIG1pblJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIuTWluU2NhbGVEZW5vbWluYXRvciksXHJcbiAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgIHVybDogbWV0YWRhdGFVcmwsXHJcbiAgICAgICAgICBleHRlcm4sXHJcbiAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcclxuICAgICAgICAgIHR5cGU6IGJhc2VTb3VyY2VPcHRpb25zLnR5cGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGxlZ2VuZE9wdGlvbnMsXHJcbiAgICAgICAgdG9vbHRpcDogeyB0eXBlOiBjYXRhbG9nLnRvb2x0aXBUeXBlIH0sXHJcbiAgICAgICAgc291cmNlT3B0aW9uc1xyXG4gICAgICB9XHJcbiAgICB9IGFzIENhdGFsb2dJdGVtO1xyXG5cclxuICAgIHJldHVybiBPYmplY3RVdGlscy5yZW1vdmVVbmRlZmluZWQobGF5ZXJQcmVwYXJlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXHJcbiAgICBpdGVtTGlzdEluLFxyXG4gICAgcmVnZXhlcyxcclxuICAgIGlkR3JvdXAsXHJcbiAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgIGNhdGFsb2dcclxuICApIHtcclxuICAgIGNvbnN0IGdyb3VwUHJlcGFyZSA9IHtcclxuICAgICAgaWQ6IGlkR3JvdXAsXHJcbiAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcclxuICAgICAgdGl0bGU6IGl0ZW1MaXN0SW4uVGl0bGUsXHJcbiAgICAgIGFkZHJlc3M6IGNhdGFsb2cuaWQsXHJcbiAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlciB8fCBmYWxzZSxcclxuICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLCAvLyBwcm9wYWdhdGUgc29ydERpcmVjdGlvblxyXG4gICAgICBpdGVtczogaXRlbUxpc3RJbi5MYXllci5yZWR1Y2UoKGl0ZW1zOiBDYXRhbG9nSXRlbVtdLCBsYXllcjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGxheWVyLkxheWVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIC8vIHJlY3Vyc2l2ZSwgY2hlY2sgbmV4dCBsZXZlbFxyXG4gICAgICAgICAgY29uc3QgaWRHcm91cEl0ZW1OZXh0TGV2ZWwgPVxyXG4gICAgICAgICAgICBpZEdyb3VwICsgYC5ncm91cC4ke2xheWVyLk5hbWUgfHwgbGF5ZXIuTGF5ZXJbMF0uTmFtZX1gO1xyXG4gICAgICAgICAgY29uc3QgZ3JvdXBJdGVtOiBDYXRhbG9nSXRlbUdyb3VwID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1Hcm91cChcclxuICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgIHJlZ2V4ZXMsXHJcbiAgICAgICAgICAgIGlkR3JvdXBJdGVtTmV4dExldmVsLFxyXG4gICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgICAgICAgICAgY2F0YWxvZ1xyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGdyb3VwSXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLnRlc3RMYXllclJlZ2V4ZXMobGF5ZXIuTmFtZSwgcmVnZXhlcykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBsYXllckl0ZW06IENhdGFsb2dJdGVtTGF5ZXI8SW1hZ2VMYXllck9wdGlvbnM+ID1cclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcclxuICAgICAgICAgICAgICBsYXllcixcclxuICAgICAgICAgICAgICBpZEdyb3VwLFxyXG4gICAgICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LFxyXG4gICAgICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGxheWVySXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgICAgfSwgW10pXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGdyb3VwUHJlcGFyZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5jbHVkZVJlY3Vyc2l2ZUl0ZW1zKFxyXG4gICAgY2F0YWxvZzogQ2F0YWxvZyxcclxuICAgIGl0ZW1MaXN0SW46IGFueSxcclxuICAgIGl0ZW1zUHJlcGFyZTogQ2F0YWxvZ0l0ZW1bXSxcclxuICAgIGxvb3BMZXZlbDogbnVtYmVyID0gMFxyXG4gICkge1xyXG4gICAgLy8gRGlnIGFsbCBsZXZlbHMgdW50aWwgbGFzdCBsZXZlbCAobGF5ZXIgb2JqZWN0IGFyZSBub3QgZGVmaW5lZCBvbiBsYXN0IGxldmVsKVxyXG4gICAgY29uc3QgcmVnZXhlcyA9IChjYXRhbG9nLnJlZ0ZpbHRlcnMgfHwgW10pLm1hcChcclxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxyXG4gICAgKTtcclxuICAgIGlmICghaXRlbUxpc3RJbi5MYXllcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1MaXN0SW4uTGF5ZXIpIHtcclxuICAgICAgaWYgKGl0ZW0uTGF5ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSwgY2hlY2sgbmV4dCBsZXZlbFxyXG4gICAgICAgIHRoaXMuaW5jbHVkZVJlY3Vyc2l2ZUl0ZW1zKGNhdGFsb2csIGl0ZW0sIGl0ZW1zUHJlcGFyZSwgbG9vcExldmVsICsgMSk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGxheWVyc1F1ZXJ5Rm9ybWF0ID0gdGhpcy5maW5kQ2F0YWxvZ0luZm9Gb3JtYXQoY2F0YWxvZyk7XHJcblxyXG4gICAgICAvLyBncm91cCh3aXRoIGxheWVycykgYW5kIGxheWVyKHdpdGhvdXQgZ3JvdXApIGxldmVsIDFcclxuICAgICAgaWYgKGxvb3BMZXZlbCAhPT0gMCkge1xyXG4gICAgICAgIC8vIFRPRE86IFNsaWNlIHRoYXQgaW50byBtdWx0aXBsZSBtZXRob2RzXHJcbiAgICAgICAgLy8gRGVmaW5lIG9iamVjdCBvZiBncm91cCBsYXllclxyXG4gICAgICAgIGNvbnN0IGlkR3JvdXBJdGVtID0gYGNhdGFsb2cuZ3JvdXAuJHtpdGVtTGlzdEluLk5hbWUgfHwgaXRlbS5OYW1lfWA7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBJdGVtID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1Hcm91cChcclxuICAgICAgICAgIGl0ZW1MaXN0SW4sXHJcbiAgICAgICAgICByZWdleGVzLFxyXG4gICAgICAgICAgaWRHcm91cEl0ZW0sXHJcbiAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXBJdGVtLml0ZW1zLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgaXRlbXNQcmVwYXJlLnB1c2goZ3JvdXBJdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEJyZWFrIHRoZSBncm91cCAoZG9uJ3QgYWRkIGEgZ3JvdXAgb2YgbGF5ZXIgZm9yIGVhY2ggb2YgdGhlaXIgbGF5ZXIhKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGxheWVyIHdpdGhvdXQgZ3JvdXBcclxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGl0ZW0uTmFtZSwgcmVnZXhlcykgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICBjb25zdCBsYXllckl0ZW0gPSB0aGlzLnByZXBhcmVDYXRhbG9nSXRlbUxheWVyKFxyXG4gICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICBjYXRhbG9nLmlkLFxyXG4gICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgICAgICAgICAgY2F0YWxvZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGl0ZW1zUHJlcGFyZS5wdXNoKGxheWVySXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gV01UU1xyXG5cclxuICBwcml2YXRlIGdldFdNVFNJdGVtcyhcclxuICAgIGNhdGFsb2csXHJcbiAgICBjYXBhYmlsaXRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH1cclxuICApOiBDYXRhbG9nSXRlbUxheWVyW10ge1xyXG4gICAgaWYgKCFjYXBhYmlsaXRpZXMpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGF5ZXJzID0gY2FwYWJpbGl0aWVzLkNvbnRlbnRzLkxheWVyO1xyXG4gICAgY29uc3QgcmVnZXhlcyA9IChjYXRhbG9nLnJlZ0ZpbHRlcnMgfHwgW10pLm1hcChcclxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlSWRlbnRpZmljYXRpb24gJiZcclxuICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2VJZGVudGlmaWNhdGlvbi5BYnN0cmFjdCAmJlxyXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0Lmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIGNhdGFsb2cuYWJzdHJhY3QgPSBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uLkFic3RyYWN0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllcnNcclxuICAgICAgLm1hcCgobGF5ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0ZvcmNlID0gdGhpcy5jb21wdXRlRm9yY2VkUHJvcGVydGllcyhcclxuICAgICAgICAgIGxheWVyLlRpdGxlLFxyXG4gICAgICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgZXh0ZXJuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgbGV0IG1ldGFkYXRhVXJsID1cclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fCBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGw7XHJcbiAgICAgICAgbGV0IG1ldGFkYXRhQWJzdHJhY3QgPVxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XHJcbiAgICAgICAgICBjYXRhbG9nLmFic3RyYWN0O1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsICYmXHJcbiAgICAgICAgICAhcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsICYmXHJcbiAgICAgICAgICAocHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3RBbGwpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgJiZcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLklkZW50aWZpZXIsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgY2F0YWxvZy5xdWVyeVBhcmFtcywge1xyXG4gICAgICAgICAgdmVyc2lvbjogJzEuMC4wJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICAgICAgdHlwZTogJ3dtdHMnLFxyXG4gICAgICAgICAgdXJsOiBjYXRhbG9nLnVybCxcclxuICAgICAgICAgIGNyb3NzT3JpZ2luOiBjYXRhbG9nLnNldENyb3NzT3JpZ2luQW5vbnltb3VzXHJcbiAgICAgICAgICAgID8gJ2Fub255bW91cydcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBsYXllcjogbGF5ZXIuSWRlbnRpZmllcixcclxuICAgICAgICAgIG1hdHJpeFNldDogY2F0YWxvZy5tYXRyaXhTZXQsXHJcbiAgICAgICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZSxcclxuICAgICAgICAgIHJlcXVlc3RFbmNvZGluZzogY2F0YWxvZy5yZXF1ZXN0RW5jb2RpbmcgfHwgJ0tWUCcsXHJcbiAgICAgICAgICBzdHlsZTogJ2RlZmF1bHQnXHJcbiAgICAgICAgfSBhcyBXTVRTRGF0YVNvdXJjZU9wdGlvbnM7XHJcbiAgICAgICAgY29uc3Qgc291cmNlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICB7fSxcclxuICAgICAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxyXG4gICAgICAgICAgY2F0YWxvZy5zb3VyY2VPcHRpb25zLFxyXG4gICAgICAgICAgeyBwYXJhbXMgfVxyXG4gICAgICAgICkgYXMgV01UU0RhdGFTb3VyY2VPcHRpb25zO1xyXG5cclxuICAgICAgICByZXR1cm4gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKHtcclxuICAgICAgICAgIGlkOiBnZW5lcmF0ZUlkRnJvbVNvdXJjZU9wdGlvbnMoc291cmNlT3B0aW9ucyksXHJcbiAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXHJcbiAgICAgICAgICB0aXRsZTogcHJvcGVydGllc1RvRm9yY2U/LnRpdGxlXHJcbiAgICAgICAgICAgID8gcHJvcGVydGllc1RvRm9yY2UudGl0bGVcclxuICAgICAgICAgICAgOiBsYXllci5UaXRsZSxcclxuICAgICAgICAgIGFkZHJlc3M6IGNhdGFsb2cuaWQsXHJcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHNvdXJjZU9wdGlvbnMsXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgICAgICAgdXJsOiBtZXRhZGF0YVVybCxcclxuICAgICAgICAgICAgICBleHRlcm4sXHJcbiAgICAgICAgICAgICAgYWJzdHJhY3Q6IG1ldGFkYXRhQWJzdHJhY3QsXHJcbiAgICAgICAgICAgICAgdHlwZTogYmFzZVNvdXJjZU9wdGlvbnMudHlwZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBhcyBDYXRhbG9nSXRlbSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW06IENhdGFsb2dJdGVtTGF5ZXIgfCB1bmRlZmluZWQpID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICAvLy8gRVJTSVxyXG5cclxuICBwcml2YXRlIGdldEFyY0dJU1JFU1RJdGVtcyhjYXRhbG9nLCBjYXBhYmlsaXRpZXMpOiBDYXRhbG9nSXRlbUxheWVyW10ge1xyXG4gICAgaWYgKCFjYXBhYmlsaXRpZXMpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbGF5ZXJzID0gIWNhcGFiaWxpdGllcy5sYXllcnNcclxuICAgICAgPyBbXVxyXG4gICAgICA6IGNhcGFiaWxpdGllcy5sYXllcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKGxheWVyKSA9PiAhbGF5ZXIudHlwZSB8fCBsYXllci50eXBlID09PSAnRmVhdHVyZSBMYXllcidcclxuICAgICAgICApO1xyXG4gICAgaWYgKCFjYXBhYmlsaXRpZXMubGF5ZXJzKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxyXG4gICAgICAgICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGVUaXRsZSdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWdleGVzID0gKGNhdGFsb2cucmVnRmlsdGVycyB8fCBbXSkubWFwKFxyXG4gICAgICAocGF0dGVybjogc3RyaW5nKSA9PiBuZXcgUmVnRXhwKHBhdHRlcm4pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBhYnN0cmFjdDtcclxuICAgIGlmIChcclxuICAgICAgY2FwYWJpbGl0aWVzLnNlcnZpY2VEZXNjcmlwdGlvbiAmJlxyXG4gICAgICBjYXBhYmlsaXRpZXMuc2VydmljZURlc2NyaXB0aW9uLmxlbmd0aFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHJlZ2V4ID0gLyg8KFtePl0rKT4pL2dpO1xyXG4gICAgICBhYnN0cmFjdCA9IGNhcGFiaWxpdGllcy5zZXJ2aWNlRGVzY3JpcHRpb24ucmVwbGFjZShyZWdleCwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsYXllcnNcclxuICAgICAgLm1hcCgobGF5ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0ZvcmNlID0gdGhpcy5jb21wdXRlRm9yY2VkUHJvcGVydGllcyhcclxuICAgICAgICAgIGxheWVyLm5hbWUsXHJcbiAgICAgICAgICBjYXRhbG9nLmZvcmNlZFByb3BlcnRpZXNcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBiYXNlQWJzdHJhY3Q7XHJcbiAgICAgICAgbGV0IGV4dGVybiA9IHRydWU7XHJcbiAgICAgICAgaWYgKGxheWVyLkFic3RyYWN0KSB7XHJcbiAgICAgICAgICBiYXNlQWJzdHJhY3QgPSBsYXllci5BYnN0cmFjdDtcclxuICAgICAgICB9IGVsc2UgaWYgKCFsYXllci5BYnN0cmFjdCAmJiBjYXRhbG9nLmFic3RyYWN0KSB7XHJcbiAgICAgICAgICBiYXNlQWJzdHJhY3QgPSBjYXRhbG9nLmFic3RyYWN0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1ldGFkYXRhVXJsID1cclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fCBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGw7XHJcbiAgICAgICAgbGV0IG1ldGFkYXRhQWJzdHJhY3QgPVxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XHJcbiAgICAgICAgICBiYXNlQWJzdHJhY3Q7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcclxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgJiZcclxuICAgICAgICAgIChwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCAmJlxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlc3RMYXllclJlZ2V4ZXMobGF5ZXIuaWQsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmFzZVNvdXJjZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICB0eXBlOiBUeXBlQ2F0YWxvZ1tjYXRhbG9nLnR5cGVdLFxyXG4gICAgICAgICAgdXJsOiBjYXRhbG9nLnVybCxcclxuICAgICAgICAgIGNyb3NzT3JpZ2luOiBjYXRhbG9nLnNldENyb3NzT3JpZ2luQW5vbnltb3VzXHJcbiAgICAgICAgICAgID8gJ2Fub255bW91cydcclxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBsYXllcjogbGF5ZXIuaWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgcXVlcnlhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgcXVlcnlGb3JtYXQ6ICdlc3JpanNvbicsXHJcbiAgICAgICAgICBtYXRyaXhTZXQ6IGNhdGFsb2cubWF0cml4U2V0LFxyXG4gICAgICAgICAgb3B0aW9uc0Zyb21DYXBhYmlsaXRpZXM6IHRydWUsXHJcbiAgICAgICAgICBzdHlsZTogJ2RlZmF1bHQnXHJcbiAgICAgICAgfSBhcyBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnM7XHJcbiAgICAgICAgY29uc3Qgc291cmNlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICB7fSxcclxuICAgICAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxyXG4gICAgICAgICAgY2F0YWxvZy5zb3VyY2VPcHRpb25zXHJcbiAgICAgICAgKSBhcyBBcmNHSVNSZXN0RGF0YVNvdXJjZU9wdGlvbnM7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlbW92ZVVuZGVmaW5lZCh7XHJcbiAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxyXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxyXG4gICAgICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZVxyXG4gICAgICAgICAgICA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlXHJcbiAgICAgICAgICAgIDogbGF5ZXIubmFtZSxcclxuICAgICAgICAgIGV4dGVybmFsUHJvdmlkZXI6IGNhdGFsb2cuZXh0ZXJuYWxQcm92aWRlcixcclxuICAgICAgICAgIGFkZHJlc3M6IGNhdGFsb2cuaWQsXHJcbiAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHNvdXJjZU9wdGlvbnMsXHJcbiAgICAgICAgICAgIG1pblJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIubWF4U2NhbGUpLFxyXG4gICAgICAgICAgICBtYXhSZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLm1pblNjYWxlKSxcclxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxyXG4gICAgICAgICAgICAgIGV4dGVybixcclxuICAgICAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcclxuICAgICAgICAgICAgICB0eXBlOiBiYXNlU291cmNlT3B0aW9ucy50eXBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGFzIENhdGFsb2dJdGVtKTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigoaXRlbTogQ2F0YWxvZ0l0ZW1MYXllciB8IHVuZGVmaW5lZCkgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdGVzdExheWVyUmVnZXhlcyhsYXllck5hbWU6IHN0cmluZywgcmVnZXhlczogUmVnRXhwW10pOiBib29sZWFuIHtcclxuICAgIGlmIChyZWdleGVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZWdleGVzLmZpbmQoKHJlZ2V4OiBSZWdFeHApID0+IHJlZ2V4LnRlc3QobGF5ZXJOYW1lKSkgIT09IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmV0cmlldmVMYXllckluZm9Gb3JtYXQoXHJcbiAgICBsYXllck5hbWVGcm9tQ2F0YWxvZzogc3RyaW5nLFxyXG4gICAgbGF5ZXJzUXVlcnlGb3JtYXQ6IHsgbGF5ZXI6IHN0cmluZzsgcXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0IH1bXVxyXG4gICk6IFF1ZXJ5Rm9ybWF0IHtcclxuICAgIGNvbnN0IGN1cnJlbnRMYXllckluZm9Gb3JtYXQgPSBsYXllcnNRdWVyeUZvcm1hdC5maW5kKFxyXG4gICAgICAoZikgPT4gZi5sYXllciA9PT0gbGF5ZXJOYW1lRnJvbUNhdGFsb2dcclxuICAgICk7XHJcbiAgICBjb25zdCBiYXNlSW5mb0Zvcm1hdCA9IGxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoKGYpID0+IGYubGF5ZXIgPT09ICcqJyk7XHJcbiAgICBsZXQgcXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0O1xyXG4gICAgaWYgKGN1cnJlbnRMYXllckluZm9Gb3JtYXQpIHtcclxuICAgICAgcXVlcnlGb3JtYXQgPSBjdXJyZW50TGF5ZXJJbmZvRm9ybWF0LnF1ZXJ5Rm9ybWF0O1xyXG4gICAgfSBlbHNlIGlmIChiYXNlSW5mb0Zvcm1hdCkge1xyXG4gICAgICBxdWVyeUZvcm1hdCA9IGJhc2VJbmZvRm9ybWF0LnF1ZXJ5Rm9ybWF0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5Rm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQ2F0YWxvZ0luZm9Gb3JtYXQoXHJcbiAgICBjYXRhbG9nOiBDYXRhbG9nXHJcbiAgKTogeyBsYXllcjogc3RyaW5nOyBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQgfVtdIHtcclxuICAgIGNvbnN0IGxheWVyc1F1ZXJ5Rm9ybWF0OiB7IGxheWVyOiBzdHJpbmc7IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdCB9W10gPSBbXTtcclxuICAgIGlmICghY2F0YWxvZy5xdWVyeUZvcm1hdCkge1xyXG4gICAgICByZXR1cm4gbGF5ZXJzUXVlcnlGb3JtYXQ7XHJcbiAgICB9XHJcbiAgICBPYmplY3Qua2V5cyhjYXRhbG9nLnF1ZXJ5Rm9ybWF0KS5mb3JFYWNoKChjb25maWd1cmVkSW5mb0Zvcm1hdCkgPT4ge1xyXG4gICAgICBpZiAoY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF0gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgIGNhdGFsb2cucXVlcnlGb3JtYXRbY29uZmlndXJlZEluZm9Gb3JtYXRdLmZvckVhY2goKGxheWVyTmFtZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhbGF5ZXJzUXVlcnlGb3JtYXQuZmluZCgoc3BlY2lmaWMpID0+IHNwZWNpZmljLmxheWVyID09PSBsYXllck5hbWUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQucHVzaCh7XHJcbiAgICAgICAgICAgICAgbGF5ZXI6IGxheWVyTmFtZSxcclxuICAgICAgICAgICAgICBxdWVyeUZvcm1hdDogY29uZmlndXJlZEluZm9Gb3JtYXQgYXMgUXVlcnlGb3JtYXRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIWxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoXHJcbiAgICAgICAgICAgIChzcGVjaWZpYykgPT5cclxuICAgICAgICAgICAgICBzcGVjaWZpYy5sYXllciA9PT0gY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF1cclxuICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGxheWVyc1F1ZXJ5Rm9ybWF0LnB1c2goe1xyXG4gICAgICAgICAgICBsYXllcjogY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF0sXHJcbiAgICAgICAgICAgIHF1ZXJ5Rm9ybWF0OiBjb25maWd1cmVkSW5mb0Zvcm1hdCBhcyBRdWVyeUZvcm1hdFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBsYXllcnNRdWVyeUZvcm1hdDtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIENhdGFsb2dGYWN0b3J5IHtcclxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUluc3RhbmNlQ2F0YWxvZyhcclxuICAgIG9wdGlvbnM6IENhdGFsb2csXHJcbiAgICBjYXRhbG9nU2VydmljZTogQ2F0YWxvZ1NlcnZpY2VcclxuICApOiBDYXRhbG9nIHtcclxuICAgIGxldCBjYXRhbG9nOiBDYXRhbG9nO1xyXG4gICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NvbXBvc2l0ZScpKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgQ29tcG9zaXRlQ2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cclxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0NvbXBvc2l0ZUxheWVySXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy5iYXNlbGF5ZXJzXSkge1xyXG4gICAgICBjYXRhbG9nID0gbmV3IEJhc2VsYXllcnNDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQmFzZUxheWVySXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy5hcmNnaXNyZXN0XSkge1xyXG4gICAgICBjYXRhbG9nID0gbmV3IEFyY0dJU1Jlc3RDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQXJjR0lTUmVzdEl0ZW1zKGNhdGFsb2cpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cudGlsZWFyY2dpc3Jlc3RdKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgVGlsZU9ySW1hZ2VBcmNHSVNSZXN0Q2F0YWxvZyhcclxuICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dBcmNHSVNSZXN0SXRlbXMoY2F0YWxvZyksXHJcbiAgICAgICAgVHlwZUNhdGFsb2cudGlsZWFyY2dpc3Jlc3RcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy5pbWFnZWFyY2dpc3Jlc3RdKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgVGlsZU9ySW1hZ2VBcmNHSVNSZXN0Q2F0YWxvZyhcclxuICAgICAgICBvcHRpb25zLFxyXG4gICAgICAgIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dBcmNHSVNSZXN0SXRlbXMoY2F0YWxvZyksXHJcbiAgICAgICAgVHlwZUNhdGFsb2cuaW1hZ2VhcmNnaXNyZXN0XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMudHlwZSA9PT0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cud210c10pIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBXTVRTQ2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cclxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ1dNVFNMYXllckl0ZW1zKGNhdGFsb2cpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjYXRhbG9nID0gbmV3IFdNU0NhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dXTVNMYXllckl0ZW1zKGNhdGFsb2cpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNhdGFsb2c7XHJcbiAgfVxyXG59XHJcbiJdfQ==
703
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvY2F0YWxvZy9zaGFyZWQvY2F0YWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsT0FBTyxFQUVMLGdDQUFnQyxFQUNqQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBUW5GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUTlELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQiw0QkFBNEIsRUFDNUIsVUFBVSxFQUNWLFdBQVcsRUFDWixNQUFNLFlBQVksQ0FBQzs7Ozs7QUFLcEIsTUFBTSxPQUFPLGNBQWM7SUFFZjtJQUNBO0lBQ0E7SUFD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QUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSwgTGFuZ3VhZ2VTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBPYmplY3RVdGlscywgdXVpZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBvZiwgemlwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyLFxyXG4gIEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzXHJcbn0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvY2FwYWJpbGl0aWVzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENhcGFiaWxpdGllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9jYXBhYmlsaXRpZXMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zLFxyXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zLFxyXG4gIFdNU0RhdGFTb3VyY2VPcHRpb25zUGFyYW1zLFxyXG4gIFdNVFNEYXRhU291cmNlT3B0aW9uc1xyXG59IGZyb20gJy4uLy4uL2RhdGFzb3VyY2Uvc2hhcmVkL2RhdGFzb3VyY2VzJztcclxuaW1wb3J0IHsgSW1hZ2VMYXllck9wdGlvbnMsIExheWVyT3B0aW9ucyB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZCc7XHJcbmltcG9ydCB7IGdldFJlc29sdXRpb25Gcm9tU2NhbGUgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC51dGlscyc7XHJcbmltcG9ydCB7IFF1ZXJ5Rm9ybWF0IH0gZnJvbSAnLi4vLi4vcXVlcnkvc2hhcmVkL3F1ZXJ5LmVudW1zJztcclxuaW1wb3J0IHsgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuLi8uLi9xdWVyeS9zaGFyZWQvcXVlcnkuaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3V0aWxzL2lkLWdlbmVyYXRvcic7XHJcbmltcG9ydCB7IENhdGFsb2cgfSBmcm9tICcuL2NhdGFsb2cuYWJzdHJhY3QnO1xyXG5pbXBvcnQgeyBDYXRhbG9nSXRlbVR5cGUsIFR5cGVDYXRhbG9nIH0gZnJvbSAnLi9jYXRhbG9nLmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIENhdGFsb2dJdGVtLFxyXG4gIENhdGFsb2dJdGVtR3JvdXAsXHJcbiAgQ2F0YWxvZ0l0ZW1MYXllcixcclxuICBDYXRhbG9nU2VydmljZU9wdGlvbnMsXHJcbiAgRm9yY2VkUHJvcGVydHlcclxufSBmcm9tICcuL2NhdGFsb2cuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtcclxuICBBcmNHSVNSZXN0Q2F0YWxvZyxcclxuICBCYXNlbGF5ZXJzQ2F0YWxvZyxcclxuICBDb21wb3NpdGVDYXRhbG9nLFxyXG4gIFRpbGVPckltYWdlQXJjR0lTUmVzdENhdGFsb2csXHJcbiAgV01TQ2F0YWxvZyxcclxuICBXTVRTQ2F0YWxvZ1xyXG59IGZyb20gJy4vY2F0YWxvZ3MnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ1NlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNhcGFiaWxpdGllc1NlcnZpY2U6IENhcGFiaWxpdGllc1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIGxvYWRDYXRhbG9ncygpOiBPYnNlcnZhYmxlPENhdGFsb2dbXT4ge1xyXG4gICAgY29uc3QgY29udGV4dENvbmZpZyA9IHRoaXMuY29uZmlnLmdldENvbmZpZygnY29udGV4dCcpIHx8IHt9O1xyXG5cclxuICAgIGNvbnN0IGNhdGFsb2dDb25maWc6IENhdGFsb2dTZXJ2aWNlT3B0aW9ucyA9XHJcbiAgICAgIHRoaXMuY29uZmlnLmdldENvbmZpZygnY2F0YWxvZycpIHx8IHt9O1xyXG4gICAgY29uc3QgYXBpVXJsID0gY2F0YWxvZ0NvbmZpZy51cmwgfHwgY29udGV4dENvbmZpZy51cmw7XHJcbiAgICBjb25zdCBjYXRhbG9nc0Zyb21Db25maWcgPSBjYXRhbG9nQ29uZmlnLnNvdXJjZXMgfHwgW107XHJcblxyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZXMkID0gW107XHJcblxyXG4gICAgaWYgKGFwaVVybCkge1xyXG4gICAgICBpZiAoY2F0YWxvZ0NvbmZpZy5iYXNlbGF5ZXJzKSB7XHJcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgICAgIGNvbnN0IHRpdGxlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uY2F0YWxvZy5iYXNlTGF5ZXJzJyk7XHJcbiAgICAgICAgY29uc3QgYmFzZUxheWVyc0NhdGFsb2cgPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGlkOiAnY2F0YWxvZy5iYXNlbGF5ZXJzJyxcclxuICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgIHVybDogYCR7YXBpVXJsfS9iYXNlbGF5ZXJzYCxcclxuICAgICAgICAgICAgdHlwZTogJ2Jhc2VsYXllcnMnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXTtcclxuICAgICAgICBvYnNlcnZhYmxlcyQucHVzaChvZihiYXNlTGF5ZXJzQ2F0YWxvZykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDYXRhbG9ncyBmcm9tIEFQSVxyXG4gICAgICBjb25zdCBjYXRhbG9nc0Zyb21BcGkkID0gdGhpcy5odHRwXHJcbiAgICAgICAgLmdldDxDYXRhbG9nW10+KGAke2FwaVVybH0vY2F0YWxvZ3NgKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgbWFwKChjYXRhbG9ncykgPT5cclxuICAgICAgICAgICAgY2F0YWxvZ3MubWFwKChjOiBhbnkpID0+IE9iamVjdC5hc3NpZ24oYywgYy5vcHRpb25zKSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChfcmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBFTVBUWSlcclxuICAgICAgICApO1xyXG4gICAgICBvYnNlcnZhYmxlcyQucHVzaChjYXRhbG9nc0Zyb21BcGkkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDYXRhbG9ncyBmcm9tIGNvbmZpZ1xyXG4gICAgaWYgKGNhdGFsb2dzRnJvbUNvbmZpZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG9ic2VydmFibGVzJC5wdXNoKFxyXG4gICAgICAgIG9mKGNhdGFsb2dzRnJvbUNvbmZpZykucGlwZShcclxuICAgICAgICAgIG1hcCgoY2F0YWxvZ3M6IENhdGFsb2dbXSkgPT5cclxuICAgICAgICAgICAgY2F0YWxvZ3MubWFwKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKCFjLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjLmlkID0gdXVpZCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gYztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHppcCguLi5vYnNlcnZhYmxlcyQpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2F0YWxvZ3M6IENhdGFsb2dbXVtdKSA9PiBbXS5jb25jYXQuYXBwbHkoW10sIGNhdGFsb2dzKSlcclxuICAgICkgYXMgT2JzZXJ2YWJsZTxDYXRhbG9nW10+O1xyXG4gIH1cclxuXHJcbiAgbG9hZENhdGFsb2dJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICBsZXQgbmV3Q2F0YWxvZzogQ2F0YWxvZztcclxuICAgIG5ld0NhdGFsb2cgPSBDYXRhbG9nRmFjdG9yeS5jcmVhdGVJbnN0YW5jZUNhdGFsb2coY2F0YWxvZywgdGhpcyk7XHJcbiAgICByZXR1cm4gbmV3Q2F0YWxvZy5jb2xsZWN0Q2F0YWxvZ0l0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0Jhc2VMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtR3JvdXBbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0Jhc2VMYXllcnNPcHRpb25zKGNhdGFsb2cpLnBpcGUoXHJcbiAgICAgIG1hcCgobGF5ZXJzT3B0aW9uczogTGF5ZXJPcHRpb25zW10pID0+IHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IGxheWVyc09wdGlvbnMubWFwKChsYXllck9wdGlvbnM6IExheWVyT3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhsYXllck9wdGlvbnMuc291cmNlT3B0aW9ucyksXHJcbiAgICAgICAgICAgIHRpdGxlOiBsYXllck9wdGlvbnMudGl0bGUsXHJcbiAgICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcclxuICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgICBvcHRpb25zOiBsYXllck9wdGlvbnNcclxuICAgICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW1MYXllcjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBpZDogJ2NhdGFsb2cuZ3JvdXAuYmFzZWxheWVycycsXHJcbiAgICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5Hcm91cCxcclxuICAgICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgICB0aXRsZTogY2F0YWxvZy50aXRsZSxcclxuICAgICAgICAgICAgaXRlbXNcclxuICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q2F0YWxvZ0Jhc2VMYXllcnNPcHRpb25zKFxyXG4gICAgY2F0YWxvZzogQ2F0YWxvZ1xyXG4gICk6IE9ic2VydmFibGU8TGF5ZXJPcHRpb25zW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PExheWVyT3B0aW9uc1tdPihjYXRhbG9nLnVybCk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ1dNU0xheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2F0YWxvZ0NhcGFiaWxpdGllcyhjYXRhbG9nKS5waXBlKFxyXG4gICAgICBtYXAoKGNhcGFiaWxpdGllczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbXM6IENhdGFsb2dJdGVtW10gPSBbXTtcclxuICAgICAgICBpZiAoIWNhcGFiaWxpdGllcykge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjYXBhYmlsaXRpZXMuU2VydmljZSAmJlxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2UuQWJzdHJhY3QgJiZcclxuICAgICAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlLkFic3RyYWN0Lmxlbmd0aFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY2F0YWxvZy5hYnN0cmFjdCA9IGNhcGFiaWxpdGllcy5TZXJ2aWNlLkFic3RyYWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaW5hbExheWVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmxhdHRlbldtc0NhcGFiaWxpdGllcyhcclxuICAgICAgICAgIGNhcGFiaWxpdGllcy5DYXBhYmlsaXR5LkxheWVyLFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIGZpbmFsTGF5ZXJzLFxyXG4gICAgICAgICAgY2F0YWxvZy5ncm91cFNlcGFyYXRvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgY2FwYWJpbGl0aWVzLkNhcGFiaWxpdHkuTGF5ZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIGNhcGFiaWxpdGllc0NhcGFiaWxpdHlMYXllci5MYXllciA9IGZpbmFsTGF5ZXJzLmZpbHRlcihcclxuICAgICAgICAgIChmKSA9PiBmLkxheWVyLmxlbmd0aCAhPT0gMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5pbmNsdWRlUmVjdXJzaXZlSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzQ2FwYWJpbGl0eUxheWVyLCBpdGVtcyk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZsYXR0ZW5XbXNDYXBhYmlsaXRpZXMocGFyZW50LCBsZXZlbCA9IDAsIGZpbmFsTGF5ZXJzLCBzZXBhcmF0b3IgPSAnIC8gJykge1xyXG4gICAgaWYgKCFmaW5hbExheWVycy5pbmNsdWRlcyhwYXJlbnQuVGl0bGUpKSB7XHJcbiAgICAgIGNvbnN0IG1vZGlmaWVkUGFyZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50KTtcclxuICAgICAgbW9kaWZpZWRQYXJlbnQuTGF5ZXIgPSBbXTtcclxuICAgICAgZmluYWxMYXllcnMucHVzaChtb2RpZmllZFBhcmVudCk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIHBhcmVudC5MYXllcikge1xyXG4gICAgICBjb25zdCBtb2RpZmllZExheWVyID0gT2JqZWN0LmFzc2lnbih7fSwgbGF5ZXIpO1xyXG4gICAgICBpZiAobGV2ZWwgPiAwKSB7XHJcbiAgICAgICAgbW9kaWZpZWRMYXllci5UaXRsZSA9IHBhcmVudC5UaXRsZSArIHNlcGFyYXRvciArIGxheWVyLlRpdGxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsYXllci5MYXllcikge1xyXG4gICAgICAgIHRoaXMuZmxhdHRlbldtc0NhcGFiaWxpdGllcyhcclxuICAgICAgICAgIG1vZGlmaWVkTGF5ZXIsXHJcbiAgICAgICAgICBsZXZlbCArIDEsXHJcbiAgICAgICAgICBmaW5hbExheWVycyxcclxuICAgICAgICAgIHNlcGFyYXRvclxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmluYWxMYXllcnMuZmluZCgoZmYpID0+IGZmLlRpdGxlID09PSBwYXJlbnQuVGl0bGUpLkxheWVyLnB1c2gobGF5ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ1dNVFNMYXllckl0ZW1zKGNhdGFsb2c6IENhdGFsb2cpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZykucGlwZShcclxuICAgICAgbWFwKChjYXBhYmlsaXRpZXM6IGFueSkgPT4gdGhpcy5nZXRXTVRTSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nOiBDYXRhbG9nKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDYXRhbG9nQ2FwYWJpbGl0aWVzKGNhdGFsb2cpLnBpcGUoXHJcbiAgICAgIG1hcCgoY2FwYWJpbGl0aWVzOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcmNHSVNSRVNUSXRlbXMoY2F0YWxvZywgY2FwYWJpbGl0aWVzKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBsb2FkQ2F0YWxvZ0NvbXBvc2l0ZUxheWVySXRlbXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8Q2F0YWxvZ0l0ZW1bXT4ge1xyXG4gICAgY29uc3QgY29tcG9zaXRlQ2F0YWxvZyA9IChjYXRhbG9nIGFzIENvbXBvc2l0ZUNhdGFsb2cpLmNvbXBvc2l0ZTtcclxuXHJcbiAgICBjb25zdCBjYXRhbG9nc0Zyb21JbnN0YW5jZSA9IFtdIGFzIENhdGFsb2dbXTtcclxuICAgIGNvbXBvc2l0ZUNhdGFsb2cubWFwKChjb21wb25lbnQ6IENhdGFsb2cpID0+IHtcclxuICAgICAgY29tcG9uZW50LnNvcnREaXJlY3Rpb24gPSBjYXRhbG9nLnNvcnREaXJlY3Rpb247IC8vIHByb3BhZ2F0ZSBzb3J0RGlyZWN0aW9uIHdpdGggcGFyZW50IHZhbHVlXHJcbiAgICAgIGNhdGFsb2dzRnJvbUluc3RhbmNlLnB1c2goXHJcbiAgICAgICAgQ2F0YWxvZ0ZhY3RvcnkuY3JlYXRlSW5zdGFuY2VDYXRhbG9nKGNvbXBvbmVudCwgdGhpcylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGdldCBDYXRhbG9nSXRlbXMgZm9yIGVhY2ggb3JpZ2luYWwgQ2F0YWxvZy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBjb25zdCByZXF1ZXN0MSQgPSBbXTtcclxuICAgIGNhdGFsb2dzRnJvbUluc3RhbmNlLm1hcCgoY29tcG9uZW50OiBDYXRhbG9nKSA9PlxyXG4gICAgICByZXF1ZXN0MSQucHVzaChjb21wb25lbnQuY29sbGVjdENhdGFsb2dJdGVtcygpKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBpbnRlZ3JhdGUgaW1wb3NlZCBncm91cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgbGV0IHJlcXVlc3QyJCA9IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIGZsYXREZWVwTGF5ZXIoYXJyKSB7XHJcbiAgICAgIHJldHVybiBhcnIucmVkdWNlKFxyXG4gICAgICAgIChhY2MsIHZhbCkgPT5cclxuICAgICAgICAgIGFjYy5jb25jYXQoXHJcbiAgICAgICAgICAgIHZhbC50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuR3JvdXAgPyBmbGF0RGVlcExheWVyKHZhbC5pdGVtcykgOiB2YWxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgW11cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIE9iamVjdC5rZXlzKGNvbXBvc2l0ZUNhdGFsb2cpLmZpbmQoKGspID0+IGNvbXBvc2l0ZUNhdGFsb2dba10uZ3JvdXBJbXBvc2UpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgcHVzaEltcG9zZUdyb3VwID0gKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYyA9IGNhdGFsb2dzRnJvbUluc3RhbmNlW2luZGV4XTtcclxuICAgICAgICBjb25zdCBvdXRHcm91cEltcG9zZSA9IE9iamVjdC5hc3NpZ24oe30sIGMuZ3JvdXBJbXBvc2UpO1xyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLmFkZHJlc3MgPSBjLmlkO1xyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLnR5cGUgPSBDYXRhbG9nSXRlbVR5cGUuR3JvdXA7XHJcbiAgICAgICAgb3V0R3JvdXBJbXBvc2UuZXh0ZXJuYWxQcm92aWRlciA9IGMuZXh0ZXJuYWxQcm92aWRlcjtcclxuICAgICAgICBpZiAob3V0R3JvdXBJbXBvc2Uuc29ydERpcmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBvdXRHcm91cEltcG9zZS5zb3J0RGlyZWN0aW9uID0gYy5zb3J0RGlyZWN0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRHcm91cEltcG9zZS5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBmbGF0TGF5ZXIgPSBmbGF0RGVlcExheWVyKGl0ZW0pO1xyXG4gICAgICAgIGZsYXRMYXllci5tYXAoXHJcbiAgICAgICAgICAodikgPT4gKHYuYWRkcmVzcyA9IGAke291dEdyb3VwSW1wb3NlLmFkZHJlc3N9LiR7b3V0R3JvdXBJbXBvc2UuaWR9YClcclxuICAgICAgICApO1xyXG4gICAgICAgIG91dEdyb3VwSW1wb3NlLml0ZW1zID0gZmxhdExheWVyO1xyXG5cclxuICAgICAgICByZXR1cm4gb3V0R3JvdXBJbXBvc2U7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZXF1ZXN0MiQgPSByZXF1ZXN0MSQubWFwKChvYnMsIGlkeCkgPT5cclxuICAgICAgICBvYnMucGlwZShcclxuICAgICAgICAgIG1hcCgoaXRlbXMpID0+XHJcbiAgICAgICAgICAgIGNvbXBvc2l0ZUNhdGFsb2dbaWR4XS5ncm91cEltcG9zZVxyXG4gICAgICAgICAgICAgID8gcHVzaEltcG9zZUdyb3VwKGl0ZW1zLCBpZHgpXHJcbiAgICAgICAgICAgICAgOiBpdGVtc1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlcXVlc3QyJCA9IHJlcXVlc3QxJDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjb25jYXQgR3JvdXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGNvbnN0IHJlcXVlc3QzJCA9IHppcCguLi5yZXF1ZXN0MiQpLnBpcGUoXHJcbiAgICAgIG1hcChcclxuICAgICAgICAob3V0cHV0OiBDYXRhbG9nSXRlbVtdKSA9PiBbXS5jb25jYXQoLi4ub3V0cHV0KSAvLyBbXS5jb25jYXQuYXBwbHkoW10sIHJlc3VsdDFcclxuICAgICAgKVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBtZXJnZSBHcm91cCAoZmlyc3QgbGV2ZWwgb25seSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGNvbnN0IGdyb3VwQnlHcm91cElkID0gKGRhdGEsIGtleUZuKSA9PlxyXG4gICAgICBkYXRhLnJlZHVjZSgoYWNjLCBncm91cCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwSWQgPSBrZXlGbihncm91cCk7XHJcbiAgICAgICAgY29uc3QgaW5kID0gYWNjLmZpbmQoKHgpID0+IHguaWQgPT09IGdyb3VwSWQpO1xyXG5cclxuICAgICAgICBpZiAoIWluZCkge1xyXG4gICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gZ3JvdXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGl4ID0gYWNjLmluZGV4T2YoaW5kKTtcclxuICAgICAgICAgIGlmIChhY2NbaXhdLmFkZHJlc3Muc3BsaXQoJ3wnKS5pbmRleE9mKGdyb3VwLmFkZHJlc3MpID09PSAtMSkge1xyXG4gICAgICAgICAgICBhY2NbaXhdLmFkZHJlc3MgPSBgJHthY2NbaXhdLmFkZHJlc3N9fCR7Z3JvdXAuYWRkcmVzc31gO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWNjW2l4XS5pdGVtcy5wdXNoKC4uLmdyb3VwLml0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgfSwgW10pO1xyXG5cclxuICAgIC8vIG1lcmdlIExheWVyIGZvciBlYWNoIExldmVsIChjYXRhbG9nLCBncm91cChyZWN1cnNpdmUpKVxyXG4gICAgY29uc3QgcmVjdXJzaXZlR3JvdXBCeUxheWVyQWRkcmVzcyA9IChpdGVtcywga2V5Rm4pID0+XHJcbiAgICAgIGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtLCBpZHgsIGFycikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxheWVyVGl0bGUgPSBrZXlGbihpdGVtKTtcclxuICAgICAgICBjb25zdCBvdXRJdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5MYXllcikge1xyXG4gICAgICAgICAgLy8gc2FtZSB0aXRsZSwgc2FtZSBhZGRyZXNzID0+IHJlc3VsdDogb25seSBvbmUgaXRlbSBpcyBrZXB0XHJcblxyXG4gICAgICAgICAgLy8gc2FtZSB0aXRsZSwgYWRkcmVzcyBkaWZmXHJcbiAgICAgICAgICBjb25zdCBpbmRpY2VzTWF0Y2hUaXRsZSA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgaW5kaWNlc01hdGNoTmV3TWV0YWRhdGFVcmwgPSBbXTsgLy8gbWV0YWRhdGFcclxuICAgICAgICAgIGNvbnN0IGRpZmZBZGRyZXNzID0gYXJyLmZpbHRlcigoeCwgaSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgYkluZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoeC50aXRsZSA9PT0gbGF5ZXJUaXRsZSAmJiB4LnR5cGUgPT09IENhdGFsb2dJdGVtVHlwZS5MYXllcikge1xyXG4gICAgICAgICAgICAgIGlmIChpICE9PSBpZHggJiYgeC5hZGRyZXNzICE9PSBpdGVtLmFkZHJlc3MpIHtcclxuICAgICAgICAgICAgICAgIGJJbmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpbmRpY2VzTWF0Y2hUaXRsZS5wdXNoKGkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBiSW5kO1xyXG4gICAgICAgICAgfSk7IC8vICQmIGkgIT09IGlkeFxyXG5cclxuICAgICAgICAgIGlmIChkaWZmQWRkcmVzcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBuUG9zaXRpb24gPSBpbmRpY2VzTWF0Y2hUaXRsZS5maW5kSW5kZXgoKHgpID0+IHggPT09IGlkeCkgKyAxO1xyXG4gICAgICAgICAgICBvdXRJdGVtLnRpdGxlID0gYCR7aXRlbS50aXRsZX0gKCR7blBvc2l0aW9ufSlgOyAvLyBzb3VyY2U6ICR7aXRlbS5hZGRyZXNzLnNwbGl0KCcuJylbMF19XHJcbiAgICAgICAgICAgIG5Qb3NpdGlvbiA9XHJcbiAgICAgICAgICAgICAgaW5kaWNlc01hdGNoTmV3TWV0YWRhdGFVcmwuZmluZEluZGV4KCh4KSA9PiB4ID09PSBpZHgpICsgMTtcclxuICAgICAgICAgICAgb3V0SXRlbS5uZXdNZXRhZGF0YVVybCA9IGAke2l0ZW0ubmV3TWV0YWRhdGFVcmx9ICgke25Qb3NpdGlvbn0pYDsgLy8gc291cmNlOiAke2l0ZW0uYWRkcmVzcy5zcGxpdCgnLicpWzBdfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGV4aXN0ID0gYWNjLmZpbmQoXHJcbiAgICAgICAgICAgICh4KSA9PiB4LnRpdGxlID09PSBvdXRJdGVtLnRpdGxlICYmIHgudHlwZSA9PT0gQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKCFleGlzdCkge1xyXG4gICAgICAgICAgICBhY2NbYWNjLmxlbmd0aF0gPSBvdXRJdGVtO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSBDYXRhbG9nSXRlbVR5cGUuR3JvdXApIHtcclxuICAgICAgICAgIG91dEl0ZW0uaXRlbXMgPSByZWN1cnNpdmVHcm91cEJ5TGF5ZXJBZGRyZXNzKFxyXG4gICAgICAgICAgICBpdGVtLml0ZW1zLFxyXG4gICAgICAgICAgICAobGF5ZXIpID0+IGxheWVyLnRpdGxlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYWNjW2FjYy5sZW5ndGhdID0gb3V0SXRlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sIFtdKTtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0NCQgPSByZXF1ZXN0MyQucGlwZShcclxuICAgICAgbWFwKChvdXRwdXQpID0+IGdyb3VwQnlHcm91cElkKG91dHB1dCwgKGdyb3VwKSA9PiBncm91cC5pZCkpLFxyXG4gICAgICBtYXAoKG91dHB1dCkgPT4gW10uY29uY2F0KC4uLm91dHB1dCkpLFxyXG4gICAgICBtYXAoKGRhdGEpID0+IHJlY3Vyc2l2ZUdyb3VwQnlMYXllckFkZHJlc3MoZGF0YSwgKGxheWVyKSA9PiBsYXllci50aXRsZSkpXHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiByZXF1ZXN0NCQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENhdGFsb2dDYXBhYmlsaXRpZXMoY2F0YWxvZzogQ2F0YWxvZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbY2F0YWxvZy50eXBlIGFzIHN0cmluZ107XHJcbiAgICByZXR1cm4gdGhpcy5jYXBhYmlsaXRpZXNTZXJ2aWNlXHJcbiAgICAgIC5nZXRDYXBhYmlsaXRpZXMoc1R5cGUgYXMgYW55LCBjYXRhbG9nLnVybCwgY2F0YWxvZy52ZXJzaW9uKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBjYXRhbG9nLnRpdGxlXHJcbiAgICAgICAgICAgICAgPyAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlJ1xyXG4gICAgICAgICAgICAgIDogJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxyXG4gICAgICAgICAgICAnaWdvLmdlby5jYXRhbG9nLnVuYXZhaWxhYmxlVGl0bGUnLFxyXG4gICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIGNhdGFsb2cudGl0bGUgPyB7IHZhbHVlOiBjYXRhbG9nLnRpdGxlIH0gOiB1bmRlZmluZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICBsYXllck5hbWVGcm9tQ2F0YWxvZzogc3RyaW5nLFxyXG4gICAgZm9yY2VkUHJvcGVydGllczogRm9yY2VkUHJvcGVydHlbXVxyXG4gICk6IEZvcmNlZFByb3BlcnR5IHtcclxuICAgIGlmICghZm9yY2VkUHJvcGVydGllcyB8fCBmb3JjZWRQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXR1cm5Qcm9wZXJ0eTogRm9yY2VkUHJvcGVydHkgPSB7XHJcbiAgICAgIGxheWVyTmFtZTogbGF5ZXJOYW1lRnJvbUNhdGFsb2csXHJcbiAgICAgIHRpdGxlOiB1bmRlZmluZWQsXHJcbiAgICAgIG1ldGFkYXRhVXJsOiB1bmRlZmluZWQsXHJcbiAgICAgIG1ldGFkYXRhQWJzdHJhY3Q6IHVuZGVmaW5lZCxcclxuICAgICAgbWV0YWRhdGFBYnN0cmFjdEFsbDogdW5kZWZpbmVkLFxyXG4gICAgICBtZXRhZGF0YVVybEFsbDogdW5kZWZpbmVkXHJcbiAgICB9O1xyXG4gICAgLy9wcm9jZXNzIHdpbGRjYXJkIGJlZm9yZVxyXG4gICAgLy8gaWYgdGhlcmUgaXMgYSAqIHdpbGRjYXJkXHJcbiAgICBjb25zdCBmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzID0gZm9yY2VkUHJvcGVydGllcy5maW5kKFxyXG4gICAgICAoZikgPT4gZi5sYXllck5hbWUgPT09ICcqJ1xyXG4gICAgKTtcclxuICAgIGlmIChmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzKSB7XHJcbiAgICAgIC8vIG1ldGFkYXRhQWJzdHJhY3RBbGxcclxuICAgICAgaWYgKGZvcmNlZFByb3BlcnRpZXNGb3JBbGxMYXllcnMubWV0YWRhdGFBYnN0cmFjdEFsbCkge1xyXG4gICAgICAgIHJldHVyblByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3RBbGwgPVxyXG4gICAgICAgICAgZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YUFic3RyYWN0QWxsO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIG1ldGFkYXRhVXJsQWxsXHJcbiAgICAgIGlmIChmb3JjZWRQcm9wZXJ0aWVzRm9yQWxsTGF5ZXJzLm1ldGFkYXRhVXJsQWxsKSB7XHJcbiAgICAgICAgcmV0dXJuUHJvcGVydHkubWV0YWRhdGFVcmxBbGwgPVxyXG4gICAgICAgICAgZm9yY2VkUHJvcGVydGllc0ZvckFsbExheWVycy5tZXRhZGF0YVVybEFsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yY2VkUHJvcGVydGllcy5tYXAoKGZvcmNlZFByb3BlcnR5KSA9PiB7XHJcbiAgICAgIC8vIGlmIG1hdGNoIGZvdW5kXHJcbiAgICAgIGlmIChsYXllck5hbWVGcm9tQ2F0YWxvZyA9PT0gZm9yY2VkUHJvcGVydHkubGF5ZXJOYW1lKSB7XHJcbiAgICAgICAgLy8gdGl0bGVcclxuICAgICAgICBpZiAoZm9yY2VkUHJvcGVydHkudGl0bGUpIHtcclxuICAgICAgICAgIHJldHVyblByb3BlcnR5LnRpdGxlID0gZm9yY2VkUHJvcGVydHkudGl0bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIG1ldGFkYXRhVXJsXHJcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICByZXR1cm5Qcm9wZXJ0eS5tZXRhZGF0YVVybCA9IGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhVXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBtZXRhZGF0YUFic3RyYWN0XHJcbiAgICAgICAgaWYgKGZvcmNlZFByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3QpIHtcclxuICAgICAgICAgIHJldHVyblByb3BlcnR5Lm1ldGFkYXRhQWJzdHJhY3QgPSBmb3JjZWRQcm9wZXJ0eS5tZXRhZGF0YUFic3RyYWN0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0dXJuUHJvcGVydHk7XHJcbiAgfVxyXG5cclxuICAvLy8gV01TXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUNhdGFsb2dJdGVtTGF5ZXIobGF5ZXIsIGlkUGFyZW50LCBsYXllcnNRdWVyeUZvcm1hdCwgY2F0YWxvZykge1xyXG4gICAgY29uc3QgY29uZmlndXJlZFF1ZXJ5Rm9ybWF0ID0gdGhpcy5yZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcclxuICAgICAgbGF5ZXIuTmFtZSxcclxuICAgICAgbGF5ZXJzUXVlcnlGb3JtYXRcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbGVnZW5kT3B0aW9ucyA9XHJcbiAgICAgIGNhdGFsb2cuc2hvd0xlZ2VuZCAmJiBsYXllci5TdHlsZVxyXG4gICAgICAgID8gdGhpcy5jYXBhYmlsaXRpZXNTZXJ2aWNlLmdldFN0eWxlKGxheWVyLlN0eWxlKVxyXG4gICAgICAgIDogdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIGNhdGFsb2cucXVlcnlQYXJhbXMsIHtcclxuICAgICAgTEFZRVJTOiBsYXllci5OYW1lLFxyXG4gICAgICBWRVJTSU9OOiBjYXRhbG9nLnZlcnNpb25cclxuICAgIH0gYXMgV01TRGF0YVNvdXJjZU9wdGlvbnNQYXJhbXMpO1xyXG5cclxuICAgIGNvbnN0IGJhc2VTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICB0eXBlOiAnd21zJyxcclxuICAgICAgdXJsOiBjYXRhbG9nLnVybCxcclxuICAgICAgY3Jvc3NPcmlnaW46IGNhdGFsb2cuc2V0Q3Jvc3NPcmlnaW5Bbm9ueW1vdXMgPyAnYW5vbnltb3VzJyA6IHVuZGVmaW5lZCxcclxuICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCxcclxuICAgICAgcXVlcnlIdG1sVGFyZ2V0OlxyXG4gICAgICAgIGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCA9PT0gUXVlcnlGb3JtYXQuSFRNTCB8fFxyXG4gICAgICAgIGNvbmZpZ3VyZWRRdWVyeUZvcm1hdCA9PT0gUXVlcnlGb3JtYXQuSFRNTEdNTDJcclxuICAgICAgICAgID8gJ2lmcmFtZSdcclxuICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAge30sXHJcbiAgICAgIGJhc2VTb3VyY2VPcHRpb25zLFxyXG4gICAgICBjYXRhbG9nLnNvdXJjZU9wdGlvbnMsXHJcbiAgICAgIHsgcGFyYW1zIH1cclxuICAgICkgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XHJcblxyXG4gICAgY29uc3QgcHJvcGVydGllc1RvRm9yY2UgPSB0aGlzLmNvbXB1dGVGb3JjZWRQcm9wZXJ0aWVzKFxyXG4gICAgICBsYXllci5OYW1lLFxyXG4gICAgICBjYXRhbG9nLmZvcmNlZFByb3BlcnRpZXNcclxuICAgICk7XHJcbiAgICBsZXQgYmFzZUFic3RyYWN0O1xyXG4gICAgbGV0IGV4dGVybiA9IHRydWU7XHJcbiAgICBpZiAobGF5ZXIuQWJzdHJhY3QpIHtcclxuICAgICAgYmFzZUFic3RyYWN0ID0gbGF5ZXIuQWJzdHJhY3Q7XHJcbiAgICB9IGVsc2UgaWYgKCFsYXllci5BYnN0cmFjdCAmJiBjYXRhbG9nLmFic3RyYWN0KSB7XHJcbiAgICAgIGJhc2VBYnN0cmFjdCA9IGNhdGFsb2cuYWJzdHJhY3Q7XHJcbiAgICB9XHJcbiAgICBjb25zdCBsYXllck9ubGluZVJlc291cmNlID1cclxuICAgICAgbGF5ZXI/LkRhdGFVUkwgJiYgbGF5ZXI/LkRhdGFVUkwubGVuZ3RoID4gMFxyXG4gICAgICAgID8gbGF5ZXI/LkRhdGFVUkxbMF0uT25saW5lUmVzb3VyY2VcclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuXHJcbiAgICBsZXQgbWV0YWRhdGFVcmwgPVxyXG4gICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHxcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsIHx8XHJcbiAgICAgIGxheWVyT25saW5lUmVzb3VyY2U7XHJcbiAgICBsZXQgbWV0YWRhdGFBYnN0cmFjdCA9XHJcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XHJcbiAgICAgIGJhc2VBYnN0cmFjdDtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcclxuICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxyXG4gICAgICAocHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcclxuICAgICkge1xyXG4gICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgJiZcclxuICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXHJcbiAgICApIHtcclxuICAgICAgZXh0ZXJuID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGF5ZXJQcmVwYXJlID0ge1xyXG4gICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxyXG4gICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuTGF5ZXIsXHJcbiAgICAgIHRpdGxlOiBwcm9wZXJ0aWVzVG9Gb3JjZT8udGl0bGUgPyBwcm9wZXJ0aWVzVG9Gb3JjZS50aXRsZSA6IGxheWVyLlRpdGxlLFxyXG4gICAgICBhZGRyZXNzOiBpZFBhcmVudCxcclxuICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyIHx8IGZhbHNlLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgbWF4UmVzb2x1dGlvbjogZ2V0UmVzb2x1dGlvbkZyb21TY2FsZShsYXllci5NYXhTY2FsZURlbm9taW5hdG9yKSxcclxuICAgICAgICBtaW5SZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLk1pblNjYWxlRGVub21pbmF0b3IpLFxyXG4gICAgICAgIG1ldGFkYXRhOiB7XHJcbiAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxyXG4gICAgICAgICAgZXh0ZXJuLFxyXG4gICAgICAgICAgYWJzdHJhY3Q6IG1ldGFkYXRhQWJzdHJhY3QsXHJcbiAgICAgICAgICB0eXBlOiBiYXNlU291cmNlT3B0aW9ucy50eXBlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBsZWdlbmRPcHRpb25zLFxyXG4gICAgICAgIHRvb2x0aXA6IHsgdHlwZTogY2F0YWxvZy50b29sdGlwVHlwZSB9LFxyXG4gICAgICAgIHNvdXJjZU9wdGlvbnNcclxuICAgICAgfVxyXG4gICAgfSBhcyBDYXRhbG9nSXRlbTtcclxuXHJcbiAgICByZXR1cm4gT2JqZWN0VXRpbHMucmVtb3ZlVW5kZWZpbmVkKGxheWVyUHJlcGFyZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByZXBhcmVDYXRhbG9nSXRlbUdyb3VwKFxyXG4gICAgaXRlbUxpc3RJbixcclxuICAgIHJlZ2V4ZXMsXHJcbiAgICBpZEdyb3VwLFxyXG4gICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICBjYXRhbG9nXHJcbiAgKSB7XHJcbiAgICBjb25zdCBncm91cFByZXBhcmUgPSB7XHJcbiAgICAgIGlkOiBpZEdyb3VwLFxyXG4gICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuR3JvdXAsXHJcbiAgICAgIHRpdGxlOiBpdGVtTGlzdEluLlRpdGxlLFxyXG4gICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxyXG4gICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIgfHwgZmFsc2UsXHJcbiAgICAgIHNvcnREaXJlY3Rpb246IGNhdGFsb2cuc29ydERpcmVjdGlvbiwgLy8gcHJvcGFnYXRlIHNvcnREaXJlY3Rpb25cclxuICAgICAgaXRlbXM6IGl0ZW1MaXN0SW4uTGF5ZXIucmVkdWNlKChpdGVtczogQ2F0YWxvZ0l0ZW1bXSwgbGF5ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChsYXllci5MYXllciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAvLyByZWN1cnNpdmUsIGNoZWNrIG5leHQgbGV2ZWxcclxuICAgICAgICAgIGNvbnN0IGlkR3JvdXBJdGVtTmV4dExldmVsID1cclxuICAgICAgICAgICAgaWRHcm91cCArIGAuZ3JvdXAuJHtsYXllci5OYW1lIHx8IGxheWVyLkxheWVyWzBdLk5hbWV9YDtcclxuICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbTogQ2F0YWxvZ0l0ZW1Hcm91cCA9IHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXHJcbiAgICAgICAgICAgIGxheWVyLFxyXG4gICAgICAgICAgICByZWdleGVzLFxyXG4gICAgICAgICAgICBpZEdyb3VwSXRlbU5leHRMZXZlbCxcclxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaXRlbXMucHVzaChncm91cEl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50ZXN0TGF5ZXJSZWdleGVzKGxheWVyLk5hbWUsIHJlZ2V4ZXMpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgbGF5ZXJJdGVtOiBDYXRhbG9nSXRlbUxheWVyPEltYWdlTGF5ZXJPcHRpb25zPiA9XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtTGF5ZXIoXHJcbiAgICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgICAgaWRHcm91cCxcclxuICAgICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdCxcclxuICAgICAgICAgICAgICBjYXRhbG9nXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaXRlbXMucHVzaChsYXllckl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICAgIH0sIFtdKVxyXG4gICAgfTtcclxuICAgIHJldHVybiBncm91cFByZXBhcmU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluY2x1ZGVSZWN1cnNpdmVJdGVtcyhcclxuICAgIGNhdGFsb2c6IENhdGFsb2csXHJcbiAgICBpdGVtTGlzdEluOiBhbnksXHJcbiAgICBpdGVtc1ByZXBhcmU6IENhdGFsb2dJdGVtW10sXHJcbiAgICBsb29wTGV2ZWw6IG51bWJlciA9IDBcclxuICApIHtcclxuICAgIC8vIERpZyBhbGwgbGV2ZWxzIHVudGlsIGxhc3QgbGV2ZWwgKGxheWVyIG9iamVjdCBhcmUgbm90IGRlZmluZWQgb24gbGFzdCBsZXZlbClcclxuICAgIGNvbnN0IHJlZ2V4ZXMgPSAoY2F0YWxvZy5yZWdGaWx0ZXJzIHx8IFtdKS5tYXAoXHJcbiAgICAgIChwYXR0ZXJuOiBzdHJpbmcpID0+IG5ldyBSZWdFeHAocGF0dGVybilcclxuICAgICk7XHJcbiAgICBpZiAoIWl0ZW1MaXN0SW4uTGF5ZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtTGlzdEluLkxheWVyKSB7XHJcbiAgICAgIGlmIChpdGVtLkxheWVyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAvLyByZWN1cnNpdmUsIGNoZWNrIG5leHQgbGV2ZWxcclxuICAgICAgICB0aGlzLmluY2x1ZGVSZWN1cnNpdmVJdGVtcyhjYXRhbG9nLCBpdGVtLCBpdGVtc1ByZXBhcmUsIGxvb3BMZXZlbCArIDEpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBsYXllcnNRdWVyeUZvcm1hdCA9IHRoaXMuZmluZENhdGFsb2dJbmZvRm9ybWF0KGNhdGFsb2cpO1xyXG5cclxuICAgICAgLy8gZ3JvdXAod2l0aCBsYXllcnMpIGFuZCBsYXllcih3aXRob3V0IGdyb3VwKSBsZXZlbCAxXHJcbiAgICAgIGlmIChsb29wTGV2ZWwgIT09IDApIHtcclxuICAgICAgICAvLyBUT0RPOiBTbGljZSB0aGF0IGludG8gbXVsdGlwbGUgbWV0aG9kc1xyXG4gICAgICAgIC8vIERlZmluZSBvYmplY3Qgb2YgZ3JvdXAgbGF5ZXJcclxuICAgICAgICBjb25zdCBpZEdyb3VwSXRlbSA9IGBjYXRhbG9nLmdyb3VwLiR7aXRlbUxpc3RJbi5OYW1lIHx8IGl0ZW0uTmFtZX1gO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwSXRlbSA9IHRoaXMucHJlcGFyZUNhdGFsb2dJdGVtR3JvdXAoXHJcbiAgICAgICAgICBpdGVtTGlzdEluLFxyXG4gICAgICAgICAgcmVnZXhlcyxcclxuICAgICAgICAgIGlkR3JvdXBJdGVtLFxyXG4gICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICAgICAgICBjYXRhbG9nXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGdyb3VwSXRlbS5pdGVtcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgIGl0ZW1zUHJlcGFyZS5wdXNoKGdyb3VwSXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBCcmVhayB0aGUgZ3JvdXAgKGRvbid0IGFkZCBhIGdyb3VwIG9mIGxheWVyIGZvciBlYWNoIG9mIHRoZWlyIGxheWVyISlcclxuICAgICAgICBicmVhaztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsYXllciB3aXRob3V0IGdyb3VwXHJcbiAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhpdGVtLk5hbWUsIHJlZ2V4ZXMpICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgY29uc3QgbGF5ZXJJdGVtID0gdGhpcy5wcmVwYXJlQ2F0YWxvZ0l0ZW1MYXllcihcclxuICAgICAgICAgICAgaXRlbSxcclxuICAgICAgICAgICAgY2F0YWxvZy5pZCxcclxuICAgICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQsXHJcbiAgICAgICAgICAgIGNhdGFsb2dcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpdGVtc1ByZXBhcmUucHVzaChsYXllckl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIFdNVFNcclxuXHJcbiAgcHJpdmF0ZSBnZXRXTVRTSXRlbXMoXHJcbiAgICBjYXRhbG9nLFxyXG4gICAgY2FwYWJpbGl0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9XHJcbiAgKTogQ2F0YWxvZ0l0ZW1MYXllcltdIHtcclxuICAgIGlmICghY2FwYWJpbGl0aWVzKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxheWVycyA9IGNhcGFiaWxpdGllcy5Db250ZW50cy5MYXllcjtcclxuICAgIGNvbnN0IHJlZ2V4ZXMgPSAoY2F0YWxvZy5yZWdGaWx0ZXJzIHx8IFtdKS5tYXAoXHJcbiAgICAgIChwYXR0ZXJuOiBzdHJpbmcpID0+IG5ldyBSZWdFeHAocGF0dGVybilcclxuICAgICk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBjYXBhYmlsaXRpZXMuU2VydmljZUlkZW50aWZpY2F0aW9uICYmXHJcbiAgICAgIGNhcGFiaWxpdGllcy5TZXJ2aWNlSWRlbnRpZmljYXRpb24uQWJzdHJhY3QgJiZcclxuICAgICAgY2FwYWJpbGl0aWVzLlNlcnZpY2VJZGVudGlmaWNhdGlvbi5BYnN0cmFjdC5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICBjYXRhbG9nLmFic3RyYWN0ID0gY2FwYWJpbGl0aWVzLlNlcnZpY2VJZGVudGlmaWNhdGlvbi5BYnN0cmFjdDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGF5ZXJzXHJcbiAgICAgIC5tYXAoKGxheWVyOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICAgICAgICBsYXllci5UaXRsZSxcclxuICAgICAgICAgIGNhdGFsb2cuZm9yY2VkUHJvcGVydGllc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IGV4dGVybiA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCBtZXRhZGF0YVVybCA9XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgfHwgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsO1xyXG4gICAgICAgIGxldCBtZXRhZGF0YUFic3RyYWN0ID1cclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbCB8fFxyXG4gICAgICAgICAgY2F0YWxvZy5hYnN0cmFjdDtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCAmJlxyXG4gICAgICAgICAgIXByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybEFsbCAmJlxyXG4gICAgICAgICAgKHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0IHx8XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZXh0ZXJuID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0ICYmXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGVzdExheWVyUmVnZXhlcyhsYXllci5JZGVudGlmaWVyLCByZWdleGVzKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIGNhdGFsb2cucXVlcnlQYXJhbXMsIHtcclxuICAgICAgICAgIHZlcnNpb246ICcxLjAuMCdcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBiYXNlU291cmNlT3B0aW9ucyA9IHtcclxuICAgICAgICAgIHR5cGU6ICd3bXRzJyxcclxuICAgICAgICAgIHVybDogY2F0YWxvZy51cmwsXHJcbiAgICAgICAgICBjcm9zc09yaWdpbjogY2F0YWxvZy5zZXRDcm9zc09yaWdpbkFub255bW91c1xyXG4gICAgICAgICAgICA/ICdhbm9ueW1vdXMnXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLklkZW50aWZpZXIsXHJcbiAgICAgICAgICBtYXRyaXhTZXQ6IGNhdGFsb2cubWF0cml4U2V0LFxyXG4gICAgICAgICAgb3B0aW9uc0Zyb21DYXBhYmlsaXRpZXM6IHRydWUsXHJcbiAgICAgICAgICByZXF1ZXN0RW5jb2Rpbmc6IGNhdGFsb2cucmVxdWVzdEVuY29kaW5nIHx8ICdLVlAnLFxyXG4gICAgICAgICAgc3R5bGU6ICdkZWZhdWx0J1xyXG4gICAgICAgIH0gYXMgV01UU0RhdGFTb3VyY2VPcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgICAge30sXHJcbiAgICAgICAgICBiYXNlU291cmNlT3B0aW9ucyxcclxuICAgICAgICAgIGNhdGFsb2cuc291cmNlT3B0aW9ucyxcclxuICAgICAgICAgIHsgcGFyYW1zIH1cclxuICAgICAgICApIGFzIFdNVFNEYXRhU291cmNlT3B0aW9ucztcclxuXHJcbiAgICAgICAgcmV0dXJuIE9iamVjdFV0aWxzLnJlbW92ZVVuZGVmaW5lZCh7XHJcbiAgICAgICAgICBpZDogZ2VuZXJhdGVJZEZyb21Tb3VyY2VPcHRpb25zKHNvdXJjZU9wdGlvbnMpLFxyXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkxheWVyLFxyXG4gICAgICAgICAgdGl0bGU6IHByb3BlcnRpZXNUb0ZvcmNlPy50aXRsZVxyXG4gICAgICAgICAgICA/IHByb3BlcnRpZXNUb0ZvcmNlLnRpdGxlXHJcbiAgICAgICAgICAgIDogbGF5ZXIuVGl0bGUsXHJcbiAgICAgICAgICBhZGRyZXNzOiBjYXRhbG9nLmlkLFxyXG4gICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBzb3VyY2VPcHRpb25zLFxyXG4gICAgICAgICAgICBtZXRhZGF0YToge1xyXG4gICAgICAgICAgICAgIHVybDogbWV0YWRhdGFVcmwsXHJcbiAgICAgICAgICAgICAgZXh0ZXJuLFxyXG4gICAgICAgICAgICAgIGFic3RyYWN0OiBtZXRhZGF0YUFic3RyYWN0LFxyXG4gICAgICAgICAgICAgIHR5cGU6IGJhc2VTb3VyY2VPcHRpb25zLnR5cGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChpdGVtOiBDYXRhbG9nSXRlbUxheWVyIHwgdW5kZWZpbmVkKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBcmNHSVNSRVNUSXRlbXMoXHJcbiAgICBjYXRhbG9nOiBDYXRhbG9nLFxyXG4gICAgY2FwYWJpbGl0aWVzXHJcbiAgKTogQ2F0YWxvZ0l0ZW1MYXllcltdIHtcclxuICAgIGlmICghY2FwYWJpbGl0aWVzIHx8ICFjYXBhYmlsaXRpZXMubGF5ZXJzKSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgJ2lnby5nZW8uY2F0YWxvZy5zb21lVW5hdmFpbGFibGUnLFxyXG4gICAgICAgICdpZ28uZ2VvLmNhdGFsb2cudW5hdmFpbGFibGVUaXRsZSdcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JvdXBzOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJbXSA9ICFjYXBhYmlsaXRpZXMubGF5ZXJzXHJcbiAgICAgID8gW11cclxuICAgICAgOiBjYXBhYmlsaXRpZXMubGF5ZXJzLmZpbHRlcigobGF5ZXIpID0+IGxheWVyLnN1YkxheWVySWRzKTtcclxuICAgIGNvbnN0IGxheWVyczogQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyW10gPSAhY2FwYWJpbGl0aWVzLmxheWVyc1xyXG4gICAgICA/IFtdXHJcbiAgICAgIDogY2FwYWJpbGl0aWVzLmxheWVycy5maWx0ZXIoXHJcbiAgICAgICAgICAobGF5ZXIpID0+XHJcbiAgICAgICAgICAgICFsYXllci50eXBlIHx8XHJcbiAgICAgICAgICAgIGxheWVyLnR5cGUgPT09IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzLkZlYXR1cmVMYXllciB8fFxyXG4gICAgICAgICAgICBsYXllci50eXBlID09PSBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXJUeXBlcy5SYXN0ZXJMYXllclxyXG4gICAgICAgICk7XHJcblxyXG4gICAgY29uc3QgcmVnZXhlcyA9IChjYXRhbG9nLnJlZ0ZpbHRlcnMgfHwgW10pLm1hcChcclxuICAgICAgKHBhdHRlcm46IHN0cmluZykgPT4gbmV3IFJlZ0V4cChwYXR0ZXJuKVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgYWJzdHJhY3Q7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNhcGFiaWxpdGllcy5zZXJ2aWNlRGVzY3JpcHRpb24gJiZcclxuICAgICAgY2FwYWJpbGl0aWVzLnNlcnZpY2VEZXNjcmlwdGlvbi5sZW5ndGhcclxuICAgICkge1xyXG4gICAgICBjb25zdCByZWdleCA9IC8oPChbXj5dKyk+KS9naTtcclxuICAgICAgYWJzdHJhY3QgPSBjYXBhYmlsaXRpZXMuc2VydmljZURlc2NyaXB0aW9uLnJlcGxhY2UocmVnZXgsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpdGVtczogQ2F0YWxvZ0l0ZW1MYXllcltdID0gbGF5ZXJzXHJcbiAgICAgIC5tYXAoKGxheWVyOiBBcmNHSVNSZXN0Q2FwYWJpbGl0aWVzTGF5ZXIpID0+IHtcclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVG9Gb3JjZSA9IHRoaXMuY29tcHV0ZUZvcmNlZFByb3BlcnRpZXMoXHJcbiAgICAgICAgICBsYXllci5uYW1lLFxyXG4gICAgICAgICAgY2F0YWxvZy5mb3JjZWRQcm9wZXJ0aWVzXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgYmFzZUFic3RyYWN0ID0gY2F0YWxvZy5hYnN0cmFjdDtcclxuICAgICAgICBsZXQgZXh0ZXJuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgbGV0IG1ldGFkYXRhVXJsID1cclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YVVybCB8fCBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGw7XHJcbiAgICAgICAgbGV0IG1ldGFkYXRhQWJzdHJhY3QgPVxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhQWJzdHJhY3QgfHxcclxuICAgICAgICAgIHByb3BlcnRpZXNUb0ZvcmNlPy5tZXRhZGF0YUFic3RyYWN0QWxsIHx8XHJcbiAgICAgICAgICBiYXNlQWJzdHJhY3Q7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmwgJiZcclxuICAgICAgICAgICFwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFVcmxBbGwgJiZcclxuICAgICAgICAgIChwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCB8fFxyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdEFsbClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGV4dGVybiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzVG9Gb3JjZT8ubWV0YWRhdGFBYnN0cmFjdCAmJlxyXG4gICAgICAgICAgcHJvcGVydGllc1RvRm9yY2U/Lm1ldGFkYXRhVXJsQWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBleHRlcm4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlc3RMYXllclJlZ2V4ZXMobGF5ZXIuaWQudG9TdHJpbmcoKSwgcmVnZXhlcykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBiYXNlU291cmNlT3B0aW9uczogQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zICZcclxuICAgICAgICAgIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICAgICAgdHlwZTogVHlwZUNhdGFsb2dbY2F0YWxvZy50eXBlXSBhcyBhbnksXHJcbiAgICAgICAgICB1cmw6IGNhdGFsb2cudXJsLFxyXG4gICAgICAgICAgbGF5ZXI6IGxheWVyLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICBxdWVyeWFibGU6IHRydWUsXHJcbiAgICAgICAgICBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQuRVNSSUpTT04sXHJcbiAgICAgICAgICBvcHRpb25zRnJvbUNhcGFiaWxpdGllczogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3Qgc291cmNlT3B0aW9uczogQXJjR0lTUmVzdERhdGFTb3VyY2VPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgYmFzZVNvdXJjZU9wdGlvbnMsXHJcbiAgICAgICAgICBjYXRhbG9nLnNvdXJjZU9wdGlvbnNcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5yZW1vdmVVbmRlZmluZWQoe1xyXG4gICAgICAgICAgaWQ6IGdlbmVyYXRlSWRGcm9tU291cmNlT3B0aW9ucyhzb3VyY2VPcHRpb25zKSxcclxuICAgICAgICAgIHR5cGU6IENhdGFsb2dJdGVtVHlwZS5MYXllcixcclxuICAgICAgICAgIHRpdGxlOiBwcm9wZXJ0aWVzVG9Gb3JjZT8udGl0bGVcclxuICAgICAgICAgICAgPyBwcm9wZXJ0aWVzVG9Gb3JjZS50aXRsZVxyXG4gICAgICAgICAgICA6IGxheWVyLm5hbWUsXHJcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHNvdXJjZU9wdGlvbnMsXHJcbiAgICAgICAgICAgIG1pblJlc29sdXRpb246IGdldFJlc29sdXRpb25Gcm9tU2NhbGUobGF5ZXIubWF4U2NhbGUpLFxyXG4gICAgICAgICAgICBtYXhSZXNvbHV0aW9uOiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKGxheWVyLm1pblNjYWxlKSxcclxuICAgICAgICAgICAgbWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICB1cmw6IG1ldGFkYXRhVXJsLFxyXG4gICAgICAgICAgICAgIGV4dGVybixcclxuICAgICAgICAgICAgICBhYnN0cmFjdDogbWV0YWRhdGFBYnN0cmFjdCxcclxuICAgICAgICAgICAgICB0eXBlOiBjYXRhbG9nLnR5cGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gYXMgQ2F0YWxvZ0l0ZW0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmlsdGVyKChpdGVtOiBDYXRhbG9nSXRlbUxheWVyIHwgdW5kZWZpbmVkKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gICAgY29uc3QgZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3QgZ3JvdXBlZEl0ZW1zOiBDYXRhbG9nSXRlbUxheWVyW10gPSBncm91cHNcclxuICAgICAgLm1hcCgoZ3JvdXApID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgb3B0aW9uczogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWAsXHJcbiAgICAgICAgICBpZDogYGNhdGFsb2cuZ3JvdXAuJHtncm91cC5uYW1lfWAsXHJcbiAgICAgICAgICB0eXBlOiBDYXRhbG9nSXRlbVR5cGUuR3JvdXAsXHJcbiAgICAgICAgICBleHRlcm5hbFByb3ZpZGVyOiBjYXRhbG9nLmV4dGVybmFsUHJvdmlkZXIsXHJcbiAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBjYXRhbG9nLnNvcnREaXJlY3Rpb24sXHJcbiAgICAgICAgICB0aXRsZTogZ3JvdXAubmFtZSxcclxuICAgICAgICAgIGl0ZW1zOiBpdGVtc1xyXG4gICAgICAgICAgICAuZmlsdGVyKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3ViTGF5ZXJJZHNTdHIgPSBncm91cC5zdWJMYXllcklkcy5tYXAoKHIpID0+IHIudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHN1YkxheWVySWRzU3RyLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgICAgKGkub3B0aW9ucy5zb3VyY2VPcHRpb25zIGFzIEFyY0dJU1Jlc3REYXRhU291cmNlT3B0aW9ucykubGF5ZXJcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAubWFwKChpKSA9PiB7XHJcbiAgICAgICAgICAgICAgZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzLnB1c2goaS5pZCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGksIHtcclxuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGBjYXRhbG9nLmdyb3VwLiR7Z3JvdXAubmFtZX1gXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigoZykgPT4gZy5pdGVtcy5sZW5ndGgpO1xyXG5cclxuICAgIGlmIChncm91cHMpIHtcclxuICAgICAgY29uc3QgVGl0bGVPcklkID0gY2F0YWxvZy50aXRsZSB8fCBjYXRhbG9nLmlkO1xyXG4gICAgICBjb25zdCBub25IYW5kbGVkTGF5ZXJzID0gaXRlbXNcclxuICAgICAgICAuZmlsdGVyKChpKSA9PiAhZ3JvdXBIYW5kbGVkTGF5ZXJzSWRzLmluY2x1ZGVzKGkuaWQpKVxyXG4gICAgICAgIC5tYXAoKGkpID0+XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBpLCB7XHJcbiAgICAgICAgICAgIGFkZHJlc3M6IGBjYXRhbG9nLmdyb3VwLiR7VGl0bGVPcklkfWBcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgaWYgKG5vbkhhbmRsZWRMYXllcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9uSGFuZGxlZEdyb3VwID0ge1xyXG4gICAgICAgICAgb3B0aW9uczogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgYWRkcmVzczogYGNhdGFsb2cuZ3JvdXAuJHtUaXRsZU9ySWR9YCxcclxuICAgICAgICAgIGlkOiBgY2F0YWxvZy5ncm91cC4ke1RpdGxlT3JJZH1gLFxyXG4gICAgICAgICAgdHlwZTogQ2F0YWxvZ0l0ZW1UeXBlLkdyb3VwLFxyXG4gICAgICAgICAgZXh0ZXJuYWxQcm92aWRlcjogY2F0YWxvZy5leHRlcm5hbFByb3ZpZGVyLFxyXG4gICAgICAgICAgc29ydERpcmVjdGlvbjogY2F0YWxvZy5zb3J0RGlyZWN0aW9uLFxyXG4gICAgICAgICAgdGl0bGU6IFRpdGxlT3JJZCxcclxuICAgICAgICAgIGl0ZW1zOiBub25IYW5kbGVkTGF5ZXJzXHJcbiAgICAgICAgfTtcclxuICAgICAgICBncm91cGVkSXRlbXMucHVzaChub25IYW5kbGVkR3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwcyA/IGdyb3VwZWRJdGVtcyA6IGl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0ZXN0TGF5ZXJSZWdleGVzKGxheWVyTmFtZTogc3RyaW5nLCByZWdleGVzOiBSZWdFeHBbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlZ2V4ZXMuZmluZCgocmVnZXg6IFJlZ0V4cCkgPT4gcmVnZXgudGVzdChsYXllck5hbWUpKSAhPT0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXRyaWV2ZUxheWVySW5mb0Zvcm1hdChcclxuICAgIGxheWVyTmFtZUZyb21DYXRhbG9nOiBzdHJpbmcsXHJcbiAgICBsYXllcnNRdWVyeUZvcm1hdDogeyBsYXllcjogc3RyaW5nOyBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQgfVtdXHJcbiAgKTogUXVlcnlGb3JtYXQge1xyXG4gICAgY29uc3QgY3VycmVudExheWVySW5mb0Zvcm1hdCA9IGxheWVyc1F1ZXJ5Rm9ybWF0LmZpbmQoXHJcbiAgICAgIChmKSA9PiBmLmxheWVyID09PSBsYXllck5hbWVGcm9tQ2F0YWxvZ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGJhc2VJbmZvRm9ybWF0ID0gbGF5ZXJzUXVlcnlGb3JtYXQuZmluZCgoZikgPT4gZi5sYXllciA9PT0gJyonKTtcclxuICAgIGxldCBxdWVyeUZvcm1hdDogUXVlcnlGb3JtYXQ7XHJcbiAgICBpZiAoY3VycmVudExheWVySW5mb0Zvcm1hdCkge1xyXG4gICAgICBxdWVyeUZvcm1hdCA9IGN1cnJlbnRMYXllckluZm9Gb3JtYXQucXVlcnlGb3JtYXQ7XHJcbiAgICB9IGVsc2UgaWYgKGJhc2VJbmZvRm9ybWF0KSB7XHJcbiAgICAgIHF1ZXJ5Rm9ybWF0ID0gYmFzZUluZm9Gb3JtYXQucXVlcnlGb3JtYXQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcXVlcnlGb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDYXRhbG9nSW5mb0Zvcm1hdChcclxuICAgIGNhdGFsb2c6IENhdGFsb2dcclxuICApOiB7IGxheWVyOiBzdHJpbmc7IHF1ZXJ5Rm9ybWF0OiBRdWVyeUZvcm1hdCB9W10ge1xyXG4gICAgY29uc3QgbGF5ZXJzUXVlcnlGb3JtYXQ6IHsgbGF5ZXI6IHN0cmluZzsgcXVlcnlGb3JtYXQ6IFF1ZXJ5Rm9ybWF0IH1bXSA9IFtdO1xyXG4gICAgaWYgKCFjYXRhbG9nLnF1ZXJ5Rm9ybWF0KSB7XHJcbiAgICAgIHJldHVybiBsYXllcnNRdWVyeUZvcm1hdDtcclxuICAgIH1cclxuICAgIE9iamVjdC5rZXlzKGNhdGFsb2cucXVlcnlGb3JtYXQpLmZvckVhY2goKGNvbmZpZ3VyZWRJbmZvRm9ybWF0KSA9PiB7XHJcbiAgICAgIGlmIChjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgY2F0YWxvZy5xdWVyeUZvcm1hdFtjb25maWd1cmVkSW5mb0Zvcm1hdF0uZm9yRWFjaCgobGF5ZXJOYW1lKSA9PiB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFsYXllcnNRdWVyeUZvcm1hdC5maW5kKChzcGVjaWZpYykgPT4gc3BlY2lmaWMubGF5ZXIgPT09IGxheWVyTmFtZSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsYXllcnNRdWVyeUZvcm1hdC5wdXNoKHtcclxuICAgICAgICAgICAgICBsYXllcjogbGF5ZXJOYW1lLFxyXG4gICAgICAgICAgICAgIHF1ZXJ5Rm9ybWF0OiBjb25maWd1cmVkSW5mb0Zvcm1hdCBhcyBRdWVyeUZvcm1hdFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhbGF5ZXJzUXVlcnlGb3JtYXQuZmluZChcclxuICAgICAgICAgICAgKHNwZWNpZmljKSA9PlxyXG4gICAgICAgICAgICAgIHNwZWNpZmljLmxheWVyID09PSBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgbGF5ZXJzUXVlcnlGb3JtYXQucHVzaCh7XHJcbiAgICAgICAgICAgIGxheWVyOiBjYXRhbG9nLnF1ZXJ5Rm9ybWF0W2NvbmZpZ3VyZWRJbmZvRm9ybWF0XSxcclxuICAgICAgICAgICAgcXVlcnlGb3JtYXQ6IGNvbmZpZ3VyZWRJbmZvRm9ybWF0IGFzIFF1ZXJ5Rm9ybWF0XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGxheWVyc1F1ZXJ5Rm9ybWF0O1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgQ2F0YWxvZ0ZhY3Rvcnkge1xyXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW5zdGFuY2VDYXRhbG9nKFxyXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcclxuICAgIGNhdGFsb2dTZXJ2aWNlOiBDYXRhbG9nU2VydmljZVxyXG4gICk6IENhdGFsb2cge1xyXG4gICAgbGV0IGNhdGFsb2c6IENhdGFsb2c7XHJcbiAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY29tcG9zaXRlJykpIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBDb21wb3NpdGVDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nQ29tcG9zaXRlTGF5ZXJJdGVtcyhjYXRhbG9nKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmJhc2VsYXllcnNdKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgQmFzZWxheWVyc0NhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dCYXNlTGF5ZXJJdGVtcyhjYXRhbG9nKVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmFyY2dpc3Jlc3RdKSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgQXJjR0lTUmVzdENhdGFsb2cob3B0aW9ucywgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgY2F0YWxvZ1NlcnZpY2UubG9hZENhdGFsb2dBcmNHSVNSZXN0SXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy50aWxlYXJjZ2lzcmVzdF0pIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nKFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKSxcclxuICAgICAgICBUeXBlQ2F0YWxvZy50aWxlYXJjZ2lzcmVzdFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmltYWdlYXJjZ2lzcmVzdF0pIHtcclxuICAgICAgY2F0YWxvZyA9IG5ldyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nKFxyXG4gICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgKGNhdGFsb2c6IENhdGFsb2cpID0+XHJcbiAgICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ0FyY0dJU1Jlc3RJdGVtcyhjYXRhbG9nKSxcclxuICAgICAgICBUeXBlQ2F0YWxvZy5pbWFnZWFyY2dpc3Jlc3RcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy53bXRzXSkge1xyXG4gICAgICBjYXRhbG9nID0gbmV3IFdNVFNDYXRhbG9nKG9wdGlvbnMsIChjYXRhbG9nOiBDYXRhbG9nKSA9PlxyXG4gICAgICAgIGNhdGFsb2dTZXJ2aWNlLmxvYWRDYXRhbG9nV01UU0xheWVySXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNhdGFsb2cgPSBuZXcgV01TQ2F0YWxvZyhvcHRpb25zLCAoY2F0YWxvZzogQ2F0YWxvZykgPT5cclxuICAgICAgICBjYXRhbG9nU2VydmljZS5sb2FkQ2F0YWxvZ1dNU0xheWVySXRlbXMoY2F0YWxvZylcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2F0YWxvZztcclxuICB9XHJcbn1cclxuIl19
@@ -72,4 +72,4 @@ export class CompositeCatalog extends Catalog {
72
72
  return this._collectCatlogItems(this);
73
73
  }
74
74
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9jYXRhbG9nL3NoYXJlZC9jYXRhbG9ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsT0FBTyxFQUF5QixNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE3QyxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU87SUFHM0I7SUFGVixZQUNFLE9BQWdCLEVBQ1IsbUJBQTBDO1FBRWxELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFHbEQsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxXQUFZLFNBQVEsT0FBTztJQUc1QjtJQUZWLFlBQ0UsT0FBZ0IsRUFDUixtQkFBMEM7UUFFbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRlAsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQUdsRCxNQUFNLEtBQUssR0FBVyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLE9BQU87SUFHbEM7SUFGVixZQUNFLE9BQWdCLEVBQ1IsbUJBQTBDO1FBRWxELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFHbEQsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxPQUFPO0lBR2xDO0lBRlYsWUFDRSxPQUFnQixFQUNSLG1CQUEwQztRQUVsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBR2xELE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsT0FBTztJQUc5QztJQUZULFlBQ0UsT0FBZ0IsRUFDVCxtQkFBMEMsRUFDakQsV0FBd0I7UUFFeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSFIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQUlqRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxPQUFPO0lBS2pDO0lBRlYsWUFDRSxPQUFnQixFQUNSLG1CQUEwQztRQUVsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBR2xELE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENhdGFsb2csIENvbGxlY3RDYXRhbG9nSXRlbXNGbiB9IGZyb20gJy4vY2F0YWxvZy5hYnN0cmFjdCc7XG5pbXBvcnQgeyBUeXBlQ2F0YWxvZyB9IGZyb20gJy4vY2F0YWxvZy5lbnVtJztcbmltcG9ydCB7XG4gIENhdGFsb2dJdGVtLFxuICBDYXRhbG9nSXRlbUdyb3VwLFxuICBJQ2F0YWxvZyxcbiAgSUNvbXBvc2l0ZUNhdGFsb2dcbn0gZnJvbSAnLi9jYXRhbG9nLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBXTVNDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IENhdGFsb2csXG4gICAgcHJpdmF0ZSBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm5cbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLndtc107XG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xuICB9XG5cbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RDYXRsb2dJdGVtcyh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV01UU0NhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nIHtcbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcbiAgICBwcml2YXRlIF9jb2xsZWN0Q2F0bG9nSXRlbXM6IENvbGxlY3RDYXRhbG9nSXRlbXNGblxuICApIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cud210c107XG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xuICB9XG5cbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RDYXRsb2dJdGVtcyh0aGlzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmFzZWxheWVyc0NhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nIHtcbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcbiAgICBwcml2YXRlIF9jb2xsZWN0Q2F0bG9nSXRlbXM6IENvbGxlY3RDYXRhbG9nSXRlbXNGblxuICApIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuYmFzZWxheWVyc107XG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xuICB9XG5cbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbUdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcmNHSVNSZXN0Q2F0YWxvZyBleHRlbmRzIENhdGFsb2cge1xuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxuICAgIHByaXZhdGUgX2NvbGxlY3RDYXRsb2dJdGVtczogQ29sbGVjdENhdGFsb2dJdGVtc0ZuXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IHNUeXBlOiBzdHJpbmcgPSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy5hcmNnaXNyZXN0XTtcbiAgICB0aGlzLnR5cGUgPSBUeXBlQ2F0YWxvZ1tzVHlwZV07XG4gIH1cblxuICBwdWJsaWMgY29sbGVjdENhdGFsb2dJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUaWxlT3JJbWFnZUFyY0dJU1Jlc3RDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG9wdGlvbnM6IENhdGFsb2csXG4gICAgcHVibGljIF9jb2xsZWN0Q2F0bG9nSXRlbXM6IENvbGxlY3RDYXRhbG9nSXRlbXNGbixcbiAgICB0eXBlQ2F0YWxvZzogVHlwZUNhdGFsb2dcbiAgKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2dbdHlwZUNhdGFsb2ddXTtcbiAgfVxuXG4gIHB1YmxpYyBjb2xsZWN0Q2F0YWxvZ0l0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0Q2F0bG9nSXRlbXModGhpcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvc2l0ZUNhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nIGltcGxlbWVudHMgSUNvbXBvc2l0ZUNhdGFsb2cge1xuICBkZWNsYXJlIGNvbXBvc2l0ZTogSUNhdGFsb2dbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxuICAgIHByaXZhdGUgX2NvbGxlY3RDYXRsb2dJdGVtczogQ29sbGVjdENhdGFsb2dJdGVtc0ZuXG4gICkge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IHNUeXBlOiBzdHJpbmcgPSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy5jb21wb3NpdGVdO1xuICAgIHRoaXMudHlwZSA9IFR5cGVDYXRhbG9nW3NUeXBlXTtcbiAgICB0aGlzLnVybCA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgY29sbGVjdENhdGFsb2dJdGVtcygpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xuICB9XG59XG4iXX0=
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9jYXRhbG9nL3NoYXJlZC9jYXRhbG9ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsT0FBTyxFQUF5QixNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE3QyxNQUFNLE9BQU8sVUFBVyxTQUFRLE9BQU87SUFHM0I7SUFGVixZQUNFLE9BQWdCLEVBQ1IsbUJBQTBDO1FBRWxELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFHbEQsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxXQUFZLFNBQVEsT0FBTztJQUc1QjtJQUZWLFlBQ0UsT0FBZ0IsRUFDUixtQkFBMEM7UUFFbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRlAsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQUdsRCxNQUFNLEtBQUssR0FBVyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGlCQUFrQixTQUFRLE9BQU87SUFHbEM7SUFGVixZQUNFLE9BQWdCLEVBQ1IsbUJBQTBDO1FBRWxELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUZQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBdUI7UUFHbEQsTUFBTSxLQUFLLEdBQVcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxPQUFPO0lBR2xDO0lBRlYsWUFDRSxPQUFnQixFQUNSLG1CQUEwQztRQUVsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBR2xELE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsT0FBTztJQUc5QztJQUZULFlBQ0UsT0FBZ0IsRUFDVCxtQkFBMEMsRUFDakQsV0FBd0I7UUFFeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSFIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF1QjtRQUlqRCxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxPQUFPO0lBS2pDO0lBRlYsWUFDRSxPQUFnQixFQUNSLG1CQUEwQztRQUVsRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXVCO1FBR2xELE1BQU0sS0FBSyxHQUFXLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBDYXRhbG9nLCBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm4gfSBmcm9tICcuL2NhdGFsb2cuYWJzdHJhY3QnO1xyXG5pbXBvcnQgeyBUeXBlQ2F0YWxvZyB9IGZyb20gJy4vY2F0YWxvZy5lbnVtJztcclxuaW1wb3J0IHtcclxuICBDYXRhbG9nSXRlbSxcclxuICBDYXRhbG9nSXRlbUdyb3VwLFxyXG4gIElDYXRhbG9nLFxyXG4gIElDb21wb3NpdGVDYXRhbG9nXHJcbn0gZnJvbSAnLi9jYXRhbG9nLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgY2xhc3MgV01TQ2F0YWxvZyBleHRlbmRzIENhdGFsb2cge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcclxuICAgIHByaXZhdGUgX2NvbGxlY3RDYXRsb2dJdGVtczogQ29sbGVjdENhdGFsb2dJdGVtc0ZuXHJcbiAgKSB7XHJcbiAgICBzdXBlcihvcHRpb25zKTtcclxuICAgIGNvbnN0IHNUeXBlOiBzdHJpbmcgPSBUeXBlQ2F0YWxvZ1tUeXBlQ2F0YWxvZy53bXNdO1xyXG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFdNVFNDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxyXG4gICAgcHJpdmF0ZSBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm5cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLndtdHNdO1xyXG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29sbGVjdENhdGxvZ0l0ZW1zKHRoaXMpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhc2VsYXllcnNDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxyXG4gICAgcHJpdmF0ZSBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm5cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmJhc2VsYXllcnNdO1xyXG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbc1R5cGVdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbGxlY3RDYXRhbG9nSXRlbXMoKTogT2JzZXJ2YWJsZTxDYXRhbG9nSXRlbUdyb3VwW10+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0Q2F0bG9nSXRlbXModGhpcyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQXJjR0lTUmVzdENhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIG9wdGlvbnM6IENhdGFsb2csXHJcbiAgICBwcml2YXRlIF9jb2xsZWN0Q2F0bG9nSXRlbXM6IENvbGxlY3RDYXRhbG9nSXRlbXNGblxyXG4gICkge1xyXG4gICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICBjb25zdCBzVHlwZTogc3RyaW5nID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2cuYXJjZ2lzcmVzdF07XHJcbiAgICB0aGlzLnR5cGUgPSBUeXBlQ2F0YWxvZ1tzVHlwZV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGVjdENhdGFsb2dJdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0Q2F0bG9nSXRlbXModGhpcyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGlsZU9ySW1hZ2VBcmNHSVNSZXN0Q2F0YWxvZyBleHRlbmRzIENhdGFsb2cge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3B0aW9uczogQ2F0YWxvZyxcclxuICAgIHB1YmxpYyBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm4sXHJcbiAgICB0eXBlQ2F0YWxvZzogVHlwZUNhdGFsb2dcclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgdGhpcy50eXBlID0gVHlwZUNhdGFsb2dbVHlwZUNhdGFsb2dbdHlwZUNhdGFsb2ddXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2xsZWN0Q2F0YWxvZ0l0ZW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RDYXRsb2dJdGVtcyh0aGlzKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb21wb3NpdGVDYXRhbG9nIGV4dGVuZHMgQ2F0YWxvZyBpbXBsZW1lbnRzIElDb21wb3NpdGVDYXRhbG9nIHtcclxuICBkZWNsYXJlIGNvbXBvc2l0ZTogSUNhdGFsb2dbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBvcHRpb25zOiBDYXRhbG9nLFxyXG4gICAgcHJpdmF0ZSBfY29sbGVjdENhdGxvZ0l0ZW1zOiBDb2xsZWN0Q2F0YWxvZ0l0ZW1zRm5cclxuICApIHtcclxuICAgIHN1cGVyKG9wdGlvbnMpO1xyXG4gICAgY29uc3Qgc1R5cGU6IHN0cmluZyA9IFR5cGVDYXRhbG9nW1R5cGVDYXRhbG9nLmNvbXBvc2l0ZV07XHJcbiAgICB0aGlzLnR5cGUgPSBUeXBlQ2F0YWxvZ1tzVHlwZV07XHJcbiAgICB0aGlzLnVybCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29sbGVjdENhdGFsb2dJdGVtcygpOiBPYnNlcnZhYmxlPENhdGFsb2dJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLl9jb2xsZWN0Q2F0bG9nSXRlbXModGhpcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -6,4 +6,10 @@ export var TypeCapabilities;
6
6
  TypeCapabilities["imagearcgisrest"] = "esriJSON";
7
7
  TypeCapabilities["tilearcgisrest"] = "esriJSON";
8
8
  })(TypeCapabilities || (TypeCapabilities = {}));
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RhdGFzb3VyY2Uvc2hhcmVkL2NhcGFiaWxpdGllcy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksZ0JBTVg7QUFORCxXQUFZLGdCQUFnQjtJQUMxQiwrQkFBVyxDQUFBO0lBQ1gsaUNBQWEsQ0FBQTtJQUNiLDJDQUF1QixDQUFBO0lBQ3ZCLGdEQUE0QixDQUFBO0lBQzVCLCtDQUEyQixDQUFBO0FBQzdCLENBQUMsRUFOVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTTNCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gVHlwZUNhcGFiaWxpdGllcyB7XG4gIHdtcyA9ICd3bXMnLFxuICB3bXRzID0gJ3dtdHMnLFxuICBhcmNnaXNyZXN0ID0gJ2VzcmlKU09OJyxcbiAgaW1hZ2VhcmNnaXNyZXN0ID0gJ2VzcmlKU09OJyxcbiAgdGlsZWFyY2dpc3Jlc3QgPSAnZXNyaUpTT04nXG59XG5cbmV4cG9ydCB0eXBlIFR5cGVDYXBhYmlsaXRpZXNTdHJpbmdzID0ga2V5b2YgdHlwZW9mIFR5cGVDYXBhYmlsaXRpZXM7XG4iXX0=
9
+ export var ArcGISRestCapabilitiesLayerTypes;
10
+ (function (ArcGISRestCapabilitiesLayerTypes) {
11
+ ArcGISRestCapabilitiesLayerTypes["FeatureLayer"] = "Feature Layer";
12
+ ArcGISRestCapabilitiesLayerTypes["RasterLayer"] = "Raster Layer";
13
+ ArcGISRestCapabilitiesLayerTypes["GroupLayer"] = "Group Layer";
14
+ })(ArcGISRestCapabilitiesLayerTypes || (ArcGISRestCapabilitiesLayerTypes = {}));
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RhdGFzb3VyY2Uvc2hhcmVkL2NhcGFiaWxpdGllcy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksZ0JBTVg7QUFORCxXQUFZLGdCQUFnQjtJQUMxQiwrQkFBVyxDQUFBO0lBQ1gsaUNBQWEsQ0FBQTtJQUNiLDJDQUF1QixDQUFBO0lBQ3ZCLGdEQUE0QixDQUFBO0lBQzVCLCtDQUEyQixDQUFBO0FBQzdCLENBQUMsRUFOVyxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBTTNCO0FBZ0JELE1BQU0sQ0FBTixJQUFZLGdDQUlYO0FBSkQsV0FBWSxnQ0FBZ0M7SUFDMUMsa0VBQThCLENBQUE7SUFDOUIsZ0VBQTRCLENBQUE7SUFDNUIsOERBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQUpXLGdDQUFnQyxLQUFoQyxnQ0FBZ0MsUUFJM0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBUeXBlQ2FwYWJpbGl0aWVzIHtcclxuICB3bXMgPSAnd21zJyxcclxuICB3bXRzID0gJ3dtdHMnLFxyXG4gIGFyY2dpc3Jlc3QgPSAnZXNyaUpTT04nLFxyXG4gIGltYWdlYXJjZ2lzcmVzdCA9ICdlc3JpSlNPTicsXHJcbiAgdGlsZWFyY2dpc3Jlc3QgPSAnZXNyaUpTT04nXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFR5cGVDYXBhYmlsaXRpZXNTdHJpbmdzID0ga2V5b2YgdHlwZW9mIFR5cGVDYXBhYmlsaXRpZXM7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllciB7XHJcbiAgaWQ6IG51bWJlcjtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcGFyZW50TGF5ZXJJZDogbnVtYmVyO1xyXG4gIGRlZmF1bHRWaXNpYmlsaXR5PzogYm9vbGVhbjtcclxuICBzdWJMYXllcklkczogbnVtYmVyW107XHJcbiAgbWluU2NhbGU6IG51bWJlcjtcclxuICBtYXhTY2FsZTogbnVtYmVyO1xyXG4gIHR5cGU6IEFyY0dJU1Jlc3RDYXBhYmlsaXRpZXNMYXllclR5cGVzO1xyXG4gIGdlb21ldHJ5VHlwZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQXJjR0lTUmVzdENhcGFiaWxpdGllc0xheWVyVHlwZXMge1xyXG4gIEZlYXR1cmVMYXllciA9ICdGZWF0dXJlIExheWVyJyxcclxuICBSYXN0ZXJMYXllciA9ICdSYXN0ZXIgTGF5ZXInLFxyXG4gIEdyb3VwTGF5ZXIgPSAnR3JvdXAgTGF5ZXInXHJcbn1cclxuIl19