@igo2/geo 1.9.0 → 1.10.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 (387) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/bundles/igo2-geo.umd.js +3651 -2762
  7. package/bundles/igo2-geo.umd.js.map +1 -1
  8. package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +2 -2
  9. package/esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js +2 -2
  10. package/esm2015/lib/catalog/catalog-browser/catalog-browser.module.js +1 -1
  11. package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +72 -53
  12. package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +2 -1
  13. package/esm2015/lib/catalog/catalog.module.js +1 -1
  14. package/esm2015/lib/catalog/shared/catalog.abstract.js +1 -1
  15. package/esm2015/lib/catalog/shared/catalog.interface.js +1 -1
  16. package/esm2015/lib/catalog/shared/catalog.service.js +13 -3
  17. package/esm2015/lib/catalog/shared/index.js +1 -1
  18. package/esm2015/lib/datasource/datasource.module.js +1 -1
  19. package/esm2015/lib/datasource/index.js +1 -1
  20. package/esm2015/lib/datasource/shared/capabilities.service.js +4 -4
  21. package/esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js +1 -1
  22. package/esm2015/lib/datasource/shared/datasources/carto-datasource.js +2 -2
  23. package/esm2015/lib/datasource/shared/datasources/cluster-datasource.js +1 -1
  24. package/esm2015/lib/datasource/shared/datasources/data.service.js +1 -1
  25. package/esm2015/lib/datasource/shared/datasources/datasource.interface.js +1 -1
  26. package/esm2015/lib/datasource/shared/datasources/datasource.js +1 -1
  27. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js +1 -1
  28. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.js +2 -2
  29. package/esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js +1 -1
  30. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js +1 -1
  31. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.js +1 -1
  32. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js +1 -1
  33. package/esm2015/lib/datasource/shared/datasources/wfs.service.js +1 -1
  34. package/esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js +1 -1
  35. package/esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js +1 -1
  36. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js +1 -1
  37. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.js +1 -1
  38. package/esm2015/lib/datasource/shared/index.js +1 -1
  39. package/esm2015/lib/datasource/shared/options/index.js +1 -1
  40. package/esm2015/lib/datasource/shared/options/options-api.interface.js +1 -1
  41. package/esm2015/lib/datasource/shared/options/options-api.providers.js +1 -1
  42. package/esm2015/lib/datasource/shared/options/options-api.service.js +1 -1
  43. package/esm2015/lib/datasource/shared/options/options.service.js +1 -1
  44. package/esm2015/lib/datasource/utils/esri-style-generator.js +1 -1
  45. package/esm2015/lib/datasource/utils/index.js +1 -1
  46. package/esm2015/lib/datasource/utils/tilegrid.js +1 -1
  47. package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +223 -0
  48. package/esm2015/lib/directions/directions-buttons/index.js +2 -0
  49. package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +300 -0
  50. package/esm2015/lib/directions/directions-inputs/index.js +2 -0
  51. package/esm2015/lib/directions/directions-results/directions-results.component.js +204 -0
  52. package/esm2015/lib/directions/directions-results/index.js +2 -0
  53. package/esm2015/lib/directions/directions-sources/directions-source.interface.js +1 -1
  54. package/esm2015/lib/directions/directions-sources/directions-source.js +1 -1
  55. package/esm2015/lib/directions/directions-sources/directions-source.provider.js +1 -1
  56. package/esm2015/lib/directions/directions-sources/index.js +1 -1
  57. package/esm2015/lib/directions/directions-sources/osrm-directions-source.js +11 -2
  58. package/esm2015/lib/directions/directions.component.js +314 -0
  59. package/esm2015/lib/directions/directions.module.js +31 -10
  60. package/esm2015/lib/directions/index.js +5 -2
  61. package/esm2015/lib/directions/shared/directions-source.service.js +1 -1
  62. package/esm2015/lib/directions/shared/directions.enum.js +20 -3
  63. package/esm2015/lib/directions/shared/directions.interface.js +1 -1
  64. package/esm2015/lib/directions/shared/directions.service.js +1 -1
  65. package/esm2015/lib/directions/shared/directions.utils.js +507 -0
  66. package/esm2015/lib/directions/shared/index.js +3 -1
  67. package/esm2015/lib/directions/shared/store.js +24 -0
  68. package/esm2015/lib/download/download-button/download-button.component.js +1 -1
  69. package/esm2015/lib/download/download-button/index.js +1 -1
  70. package/esm2015/lib/download/download.module.js +1 -1
  71. package/esm2015/lib/download/index.js +1 -1
  72. package/esm2015/lib/download/shared/download.interface.js +1 -1
  73. package/esm2015/lib/download/shared/download.service.js +1 -1
  74. package/esm2015/lib/download/shared/index.js +1 -1
  75. package/esm2015/lib/draw/draw/draw-popup.component.js +6 -5
  76. package/esm2015/lib/draw/draw/draw.component.js +22 -17
  77. package/esm2015/lib/draw/shared/draw.utils.js +1 -1
  78. package/esm2015/lib/feature/feature-details/feature-details.directive.js +1 -1
  79. package/esm2015/lib/feature/feature-details/feature-details.module.js +1 -1
  80. package/esm2015/lib/feature/feature-form/feature-form.component.js +1 -1
  81. package/esm2015/lib/feature/feature-form/feature-form.module.js +1 -1
  82. package/esm2015/lib/feature/feature.module.js +1 -1
  83. package/esm2015/lib/feature/index.js +1 -1
  84. package/esm2015/lib/feature/shared/feature.enums.js +1 -1
  85. package/esm2015/lib/feature/shared/feature.interfaces.js +1 -1
  86. package/esm2015/lib/feature/shared/index.js +1 -1
  87. package/esm2015/lib/feature/shared/strategies/in-map-extent.js +1 -1
  88. package/esm2015/lib/feature/shared/strategies/in-map-resolution.js +1 -1
  89. package/esm2015/lib/feature/shared/strategies/index.js +1 -1
  90. package/esm2015/lib/feature/shared/strategies/loading-layer.js +1 -1
  91. package/esm2015/lib/feature/shared/strategies/loading.js +1 -1
  92. package/esm2015/lib/feature/shared/strategies/selection.js +5 -9
  93. package/esm2015/lib/feature/shared/strategies.utils.js +1 -1
  94. package/esm2015/lib/filter/filter.module.js +7 -4
  95. package/esm2015/lib/filter/ogc-filter-button/index.js +1 -1
  96. package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +1 -1
  97. package/esm2015/lib/filter/ogc-filter-form/index.js +1 -1
  98. package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +3 -3
  99. package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +1 -1
  100. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +240 -121
  101. package/esm2015/lib/filter/ogc-filterable-form/index.js +1 -1
  102. package/esm2015/lib/filter/ogc-filterable-item/index.js +1 -1
  103. package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +2 -2
  104. package/esm2015/lib/filter/ogc-filterable-list/index.js +1 -1
  105. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js +1 -1
  106. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js +1 -1
  107. package/esm2015/lib/filter/shared/filterable-datasource.pipe.js +1 -1
  108. package/esm2015/lib/filter/shared/index.js +1 -1
  109. package/esm2015/lib/filter/shared/ogc-filter.enum.js +1 -1
  110. package/esm2015/lib/filter/shared/ogc-filter.interface.js +1 -1
  111. package/esm2015/lib/filter/shared/ogc-filter.js +1 -1
  112. package/esm2015/lib/filter/shared/ogc-filter.service.js +1 -1
  113. package/esm2015/lib/filter/shared/spatial-filter.enum.js +1 -1
  114. package/esm2015/lib/filter/shared/spatial-filter.interface.js +1 -1
  115. package/esm2015/lib/filter/shared/time-filter.enum.js +1 -1
  116. package/esm2015/lib/filter/shared/time-filter.interface.js +1 -1
  117. package/esm2015/lib/filter/shared/time-filter.service.js +1 -1
  118. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js +1 -1
  119. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +185 -95
  120. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js +1 -1
  121. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js +1 -1
  122. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js +1 -1
  123. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js +1 -1
  124. package/esm2015/lib/filter/time-filter-button/index.js +1 -1
  125. package/esm2015/lib/filter/time-filter-button/time-filter-button.component.js +1 -1
  126. package/esm2015/lib/filter/time-filter-form/index.js +1 -1
  127. package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +1 -1
  128. package/esm2015/lib/filter/time-filter-item/index.js +1 -1
  129. package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +2 -2
  130. package/esm2015/lib/filter/time-filter-list/index.js +1 -1
  131. package/esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js +1 -1
  132. package/esm2015/lib/filter/time-filter-list/time-filter-list.component.js +1 -1
  133. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js +3 -3
  134. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +1 -1
  135. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js +1 -1
  136. package/esm2015/lib/geometry/geometry.module.js +1 -1
  137. package/esm2015/lib/geometry/index.js +1 -1
  138. package/esm2015/lib/geometry/shared/controls/draw.js +1 -1
  139. package/esm2015/lib/geometry/shared/controls/index.js +1 -1
  140. package/esm2015/lib/geometry/shared/geometry.errors.js +3 -3
  141. package/esm2015/lib/geometry/shared/index.js +1 -1
  142. package/esm2015/lib/import-export/export-button/export-button.component.js +1 -1
  143. package/esm2015/lib/import-export/export-button/index.js +1 -1
  144. package/esm2015/lib/import-export/import-export/import-export.component.js +179 -66
  145. package/esm2015/lib/import-export/import-export.module.js +1 -1
  146. package/esm2015/lib/import-export/index.js +1 -1
  147. package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +1 -1
  148. package/esm2015/lib/import-export/shared/export.errors.js +1 -1
  149. package/esm2015/lib/import-export/shared/export.interface.js +1 -1
  150. package/esm2015/lib/import-export/shared/export.type.js +1 -1
  151. package/esm2015/lib/import-export/shared/export.utils.js +1 -1
  152. package/esm2015/lib/import-export/shared/import.interface.js +1 -1
  153. package/esm2015/lib/import-export/shared/import.service.js +1 -1
  154. package/esm2015/lib/import-export/shared/import.utils.js +1 -1
  155. package/esm2015/lib/import-export/shared/index.js +1 -1
  156. package/esm2015/lib/import-export/style-list/index.js +1 -1
  157. package/esm2015/lib/import-export/style-list/style-list.interface.js +1 -1
  158. package/esm2015/lib/import-export/style-list/style-list.module.js +1 -1
  159. package/esm2015/lib/import-export/style-list/style-list.provider.js +1 -1
  160. package/esm2015/lib/import-export/style-list/style-list.service.js +1 -1
  161. package/esm2015/lib/layer/index.js +1 -1
  162. package/esm2015/lib/layer/layer-item/index.js +1 -1
  163. package/esm2015/lib/layer/layer-item/layer-item.component.js +3 -3
  164. package/esm2015/lib/layer/layer-legend/index.js +1 -1
  165. package/esm2015/lib/layer/layer-legend/layer-legend.component.js +23 -16
  166. package/esm2015/lib/layer/layer-legend-item/index.js +1 -1
  167. package/esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js +1 -1
  168. package/esm2015/lib/layer/layer-legend-list/index.js +1 -1
  169. package/esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js +1 -1
  170. package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +5 -5
  171. package/esm2015/lib/layer/layer-list/index.js +1 -1
  172. package/esm2015/lib/layer/layer-list/layer-list-binding.directive.js +1 -1
  173. package/esm2015/lib/layer/layer-list/layer-list.component.js +44 -44
  174. package/esm2015/lib/layer/layer-list/layer-list.enum.js +1 -1
  175. package/esm2015/lib/layer/layer-list-tool/index.js +1 -1
  176. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +2 -2
  177. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js +1 -1
  178. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js +1 -1
  179. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js +1 -1
  180. package/esm2015/lib/layer/layer.module.js +8 -5
  181. package/esm2015/lib/layer/shared/clusterParam.js +1 -1
  182. package/esm2015/lib/layer/shared/index.js +1 -1
  183. package/esm2015/lib/layer/shared/layer.enums.js +1 -1
  184. package/esm2015/lib/layer/shared/layer.service.js +20 -17
  185. package/esm2015/lib/layer/shared/layers/any-layer.interface.js +1 -1
  186. package/esm2015/lib/layer/shared/layers/any-layer.js +1 -1
  187. package/esm2015/lib/layer/shared/layers/image-layer.js +9 -4
  188. package/esm2015/lib/layer/shared/layers/index.js +1 -1
  189. package/esm2015/lib/layer/shared/layers/layer.js +15 -5
  190. package/esm2015/lib/layer/shared/layers/tile-layer.js +23 -3
  191. package/esm2015/lib/layer/shared/layers/vector-layer.interface.js +1 -1
  192. package/esm2015/lib/layer/shared/layers/vector-layer.js +20 -10
  193. package/esm2015/lib/layer/shared/layers/vectortile-layer.interface.js +1 -1
  194. package/esm2015/lib/layer/shared/layers/vectortile-layer.js +13 -3
  195. package/esm2015/lib/layer/shared/style.service.js +21 -16
  196. package/esm2015/lib/layer/shared/vector-style.interface.js +1 -1
  197. package/esm2015/lib/layer/track-feature-button/index.js +1 -1
  198. package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +1 -1
  199. package/esm2015/lib/layer/utils/index.js +2 -1
  200. package/esm2015/lib/layer/utils/layer.utils.js +11 -0
  201. package/esm2015/lib/layer/utils/layerSync-watcher.js +1 -1
  202. package/esm2015/lib/layer/utils/tile-watcher.js +1 -1
  203. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js +1 -1
  204. package/esm2015/lib/map/baselayers-switcher/index.js +1 -1
  205. package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +1 -1
  206. package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +1 -1
  207. package/esm2015/lib/map/geolocate-button/index.js +1 -1
  208. package/esm2015/lib/map/index.js +2 -1
  209. package/esm2015/lib/map/map-browser/index.js +1 -1
  210. package/esm2015/lib/map/map-browser/map-browser.component.js +1 -1
  211. package/esm2015/lib/map/map.module.js +10 -5
  212. package/esm2015/lib/map/menu-button/index.js +2 -0
  213. package/esm2015/lib/map/menu-button/menu-button.component.js +66 -0
  214. package/esm2015/lib/map/offline-button/index.js +1 -1
  215. package/esm2015/lib/map/offline-button/offline-button.component.js +1 -1
  216. package/esm2015/lib/map/rotation-button/index.js +1 -1
  217. package/esm2015/lib/map/rotation-button/rotation-button.component.js +1 -1
  218. package/esm2015/lib/map/shared/controllers/index.js +1 -1
  219. package/esm2015/lib/map/shared/hover-feature.directive.js +231 -80
  220. package/esm2015/lib/map/shared/map-pointer-position.directive.js +3 -1
  221. package/esm2015/lib/map/shared/map.enums.js +1 -1
  222. package/esm2015/lib/map/shared/map.interface.js +1 -1
  223. package/esm2015/lib/map/shared/map.js +38 -16
  224. package/esm2015/lib/map/shared/map.service.js +1 -1
  225. package/esm2015/lib/map/shared/map.utils.js +7 -3
  226. package/esm2015/lib/map/shared/projection.service.js +1 -1
  227. package/esm2015/lib/map/shared/projection.utils.js +1 -1
  228. package/esm2015/lib/map/swipe-control/swipe-control.component.js +1 -1
  229. package/esm2015/lib/map/zoom-button/index.js +1 -1
  230. package/esm2015/lib/map/zoom-button/zoom-button.component.js +1 -1
  231. package/esm2015/lib/measure/index.js +1 -1
  232. package/esm2015/lib/measure/measure.module.js +1 -1
  233. package/esm2015/lib/measure/measurer/measure-format.pipe.js +1 -1
  234. package/esm2015/lib/measure/measurer/measurer-dialog.component.js +188 -176
  235. package/esm2015/lib/measure/measurer/measurer-item.component.js +17 -12
  236. package/esm2015/lib/measure/measurer/measurer.component.js +170 -69
  237. package/esm2015/lib/measure/measurer/measurer.module.js +13 -8
  238. package/esm2015/lib/measure/shared/index.js +1 -1
  239. package/esm2015/lib/measure/shared/measure.enum.js +1 -1
  240. package/esm2015/lib/measure/shared/measure.interfaces.js +1 -1
  241. package/esm2015/lib/measure/shared/measure.utils.js +1 -1
  242. package/esm2015/lib/metadata/index.js +1 -1
  243. package/esm2015/lib/metadata/metadata-button/index.js +1 -1
  244. package/esm2015/lib/metadata/shared/index.js +1 -1
  245. package/esm2015/lib/metadata/shared/metadata.service.js +1 -1
  246. package/esm2015/lib/overlay/index.js +1 -1
  247. package/esm2015/lib/overlay/overlay.module.js +1 -1
  248. package/esm2015/lib/overlay/shared/index.js +1 -1
  249. package/esm2015/lib/overlay/shared/overlay-marker-style.utils.js +2 -2
  250. package/esm2015/lib/overlay/shared/overlay.directive.js +1 -1
  251. package/esm2015/lib/overlay/shared/overlay.enum.js +1 -1
  252. package/esm2015/lib/overlay/shared/overlay.service.js +1 -1
  253. package/esm2015/lib/print/index.js +1 -1
  254. package/esm2015/lib/print/print-form/index.js +1 -1
  255. package/esm2015/lib/print/print.module.js +1 -1
  256. package/esm2015/lib/print/shared/index.js +1 -1
  257. package/esm2015/lib/print/shared/print.service.js +1 -1
  258. package/esm2015/lib/query/index.js +1 -1
  259. package/esm2015/lib/query/query.module.js +1 -1
  260. package/esm2015/lib/query/shared/index.js +1 -1
  261. package/esm2015/lib/query/shared/query-search-source.js +1 -1
  262. package/esm2015/lib/query/shared/query-search-source.providers.js +1 -1
  263. package/esm2015/lib/query/shared/query.directive.js +4 -4
  264. package/esm2015/lib/query/shared/query.enums.js +1 -1
  265. package/esm2015/lib/query/shared/query.interfaces.js +1 -1
  266. package/esm2015/lib/query/shared/query.service.js +24 -3
  267. package/esm2015/lib/query/shared/query.utils.js +19 -1
  268. package/esm2015/lib/search/index.js +1 -1
  269. package/esm2015/lib/search/search-bar/search-bar.component.js +2 -2
  270. package/esm2015/lib/search/search-bar/search-bar.module.js +1 -1
  271. package/esm2015/lib/search/search-bar/search-url-param.directive.js +1 -1
  272. package/esm2015/lib/search/search-results/search-results-add-button.component.js +2 -2
  273. package/esm2015/lib/search/search-results/search-results-item.component.js +1 -1
  274. package/esm2015/lib/search/search-results/search-results.component.js +1 -1
  275. package/esm2015/lib/search/search-results/search-results.module.js +1 -1
  276. package/esm2015/lib/search/search-selector/search-selector.component.js +1 -1
  277. package/esm2015/lib/search/search-selector/search-selector.module.js +1 -1
  278. package/esm2015/lib/search/search-settings/search-settings.module.js +1 -1
  279. package/esm2015/lib/search/shared/index.js +1 -1
  280. package/esm2015/lib/search/shared/search-pointer-summary.directive.js +17 -6
  281. package/esm2015/lib/search/shared/search-source-service.providers.js +1 -1
  282. package/esm2015/lib/search/shared/search-source.service.js +1 -1
  283. package/esm2015/lib/search/shared/search.enums.js +1 -1
  284. package/esm2015/lib/search/shared/search.interfaces.js +1 -1
  285. package/esm2015/lib/search/shared/search.utils.js +1 -1
  286. package/esm2015/lib/search/shared/sources/cadastre.js +9 -2
  287. package/esm2015/lib/search/shared/sources/coordinates.interfaces.js +1 -1
  288. package/esm2015/lib/search/shared/sources/coordinates.js +9 -2
  289. package/esm2015/lib/search/shared/sources/icherche.js +17 -4
  290. package/esm2015/lib/search/shared/sources/ilayer.interfaces.js +1 -1
  291. package/esm2015/lib/search/shared/sources/ilayer.js +9 -2
  292. package/esm2015/lib/search/shared/sources/index.js +1 -1
  293. package/esm2015/lib/search/shared/sources/nominatim.interfaces.js +1 -1
  294. package/esm2015/lib/search/shared/sources/nominatim.js +9 -2
  295. package/esm2015/lib/search/shared/sources/storedqueries.interfaces.js +1 -1
  296. package/esm2015/lib/search/shared/sources/storedqueries.js +20 -12
  297. package/esm2015/lib/toast/index.js +1 -1
  298. package/esm2015/lib/toast/toast.component.js +1 -1
  299. package/esm2015/lib/toast/toast.module.js +1 -1
  300. package/esm2015/lib/utils/commonVectorStyle.interface.js +1 -1
  301. package/esm2015/lib/utils/googleLinks.js +1 -1
  302. package/esm2015/lib/utils/osmLinks.js +1 -1
  303. package/esm2015/lib/wkt/index.js +1 -1
  304. package/esm2015/lib/wkt/shared/index.js +1 -1
  305. package/esm2015/lib/wkt/shared/wkt.service.js +15 -15
  306. package/esm2015/lib/wkt/wkt.module.js +1 -1
  307. package/esm2015/lib/workspace/index.js +1 -1
  308. package/esm2015/lib/workspace/shared/feature-workspace.js +1 -1
  309. package/esm2015/lib/workspace/shared/feature-workspace.service.js +1 -1
  310. package/esm2015/lib/workspace/shared/index.js +1 -1
  311. package/esm2015/lib/workspace/shared/wfs-workspace.js +1 -1
  312. package/esm2015/lib/workspace/shared/wfs-workspace.service.js +1 -1
  313. package/esm2015/lib/workspace/shared/wms-workspace.service.js +1 -1
  314. package/esm2015/lib/workspace/widgets/index.js +1 -1
  315. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js +1 -1
  316. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js +1 -1
  317. package/esm2015/lib/workspace/widgets/widgets.js +1 -1
  318. package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +1 -1
  319. package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +1 -1
  320. package/esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js +1 -1
  321. package/esm2015/lib/workspace/workspace-updator/workspace-updator.module.js +1 -1
  322. package/esm2015/lib/workspace/workspace.module.js +1 -1
  323. package/fesm2015/igo2-geo.js +3221 -2431
  324. package/fesm2015/igo2-geo.js.map +1 -1
  325. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +1 -1
  326. package/lib/datasource/shared/datasources/datasource.interface.d.ts +1 -0
  327. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +29 -0
  328. package/lib/directions/directions-buttons/index.d.ts +1 -0
  329. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +45 -0
  330. package/lib/directions/directions-inputs/index.d.ts +1 -0
  331. package/lib/directions/directions-results/directions-results.component.d.ts +30 -0
  332. package/lib/directions/directions-results/index.d.ts +1 -0
  333. package/lib/directions/directions-sources/directions-source.d.ts +2 -2
  334. package/lib/directions/directions-sources/osrm-directions-source.d.ts +2 -2
  335. package/lib/directions/directions.component.d.ts +55 -0
  336. package/lib/directions/directions.module.d.ts +19 -16
  337. package/lib/directions/index.d.ts +4 -1
  338. package/lib/directions/shared/directions.enum.d.ts +16 -2
  339. package/lib/directions/shared/directions.interface.d.ts +53 -3
  340. package/lib/directions/shared/directions.service.d.ts +3 -3
  341. package/lib/directions/shared/directions.utils.d.ts +42 -0
  342. package/lib/directions/shared/index.d.ts +2 -0
  343. package/lib/directions/shared/store.d.ts +18 -0
  344. package/lib/draw/draw/draw-popup.component.d.ts +6 -2
  345. package/lib/feature/shared/strategies/selection.d.ts +1 -0
  346. package/lib/filter/filter.module.d.ts +1 -1
  347. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +6 -1
  348. package/lib/filter/shared/ogc-filter.interface.d.ts +1 -0
  349. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +7 -2
  350. package/lib/import-export/import-export/import-export.component.d.ts +2 -0
  351. package/lib/import-export/shared/export.interface.d.ts +2 -1
  352. package/lib/layer/layer-legend/layer-legend.component.d.ts +0 -1
  353. package/lib/layer/layer.module.d.ts +1 -1
  354. package/lib/layer/shared/layer.service.d.ts +1 -1
  355. package/lib/layer/shared/layers/layer.d.ts +1 -0
  356. package/lib/layer/shared/layers/tile-layer.d.ts +10 -1
  357. package/lib/layer/shared/layers/vector-layer.interface.d.ts +1 -0
  358. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +1 -0
  359. package/lib/layer/shared/style.service.d.ts +4 -1
  360. package/lib/layer/shared/vector-style.interface.d.ts +9 -5
  361. package/lib/layer/utils/index.d.ts +1 -0
  362. package/lib/layer/utils/layer.utils.d.ts +2 -0
  363. package/lib/map/index.d.ts +1 -0
  364. package/lib/map/map.module.d.ts +8 -7
  365. package/lib/map/menu-button/index.d.ts +1 -0
  366. package/lib/map/menu-button/menu-button.component.d.ts +17 -0
  367. package/lib/map/shared/hover-feature.directive.d.ts +14 -5
  368. package/lib/map/shared/map.d.ts +2 -1
  369. package/lib/map/shared/map.interface.d.ts +1 -0
  370. package/lib/map/shared/map.utils.d.ts +1 -1
  371. package/lib/measure/measurer/measurer.component.d.ts +10 -0
  372. package/lib/measure/measurer/measurer.module.d.ts +4 -3
  373. package/lib/query/shared/query.interfaces.d.ts +2 -0
  374. package/lib/query/shared/query.service.d.ts +9 -1
  375. package/lib/query/shared/query.utils.d.ts +12 -0
  376. package/lib/search/shared/search-pointer-summary.directive.d.ts +6 -0
  377. package/lib/search/shared/search.interfaces.d.ts +1 -0
  378. package/ngcc.config.js +3 -3
  379. package/package.json +14 -13
  380. package/esm2015/lib/directions/directions-form/directions-form-binding.directive.js +0 -99
  381. package/esm2015/lib/directions/directions-form/directions-form.component.js +0 -1537
  382. package/esm2015/lib/directions/directions-form/directions-form.service.js +0 -26
  383. package/esm2015/lib/directions/directions-form/index.js +0 -4
  384. package/lib/directions/directions-form/directions-form-binding.directive.d.ts +0 -18
  385. package/lib/directions/directions-form/directions-form.component.d.ts +0 -137
  386. package/lib/directions/directions-form/directions-form.service.d.ts +0 -11
  387. package/lib/directions/directions-form/index.d.ts +0 -3
@@ -972,4 +972,4 @@ OgcFilterSelectionComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
972
972
  }], currentFilter: [{
973
973
  type: Input
974
974
  }] }); })();
975
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItc2VsZWN0aW9uL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXNlbGVjdGlvbi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFVdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSWpFLE9BQU8sRUFBZSxXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztJQ2QzQixzQ0FDMEI7SUFBQSxZQUMxQjtJQUFBLGlCQUFhOzs7SUFEWCx5Q0FBdUI7SUFBQyxlQUMxQjtJQUQwQix1REFDMUI7Ozs7SUFSTiw4QkFBc0U7SUFDcEUsc0NBQWdCO0lBQ2Qsc0NBR3NDO0lBQXBDLHlQQUFtQzs7SUFDbkMsNkdBRWE7SUFDZixpQkFBYTtJQUNmLGlCQUFpQjtJQUNuQixpQkFBTTs7O0lBUEEsZUFBNkQ7SUFBN0QscUZBQTZELHlDQUFBO0lBRXZCLGVBQXlCO0lBQXpCLHVEQUF5Qjs7OztJQVVqRSw2Q0FJMEI7SUFEVSxrYUFBa0U7SUFDNUUsWUFDMUI7SUFBQSxpQkFBb0I7Ozs7SUFKbEIsa0VB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O1lBRUcsVUFBVTtrQkFBbEIsS0FBSztZQUVHLEdBQUc7a0JBQVgsS0FBSztZQUVHLGVBQWU7a0JBQXZCLEtBQUs7WUFDRyxpQkFBaUI7a0JBQXpCLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBR0YsYUFBYTtrQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZSxcbiAgSWdvT2djRmlsdGVyT2JqZWN0LFxuICBPZ2NQdXNoQnV0dG9uLFxuICBPZ2NTZWxlY3RvckJ1bmRsZSxcbiAgU2VsZWN0b3JHcm91cFxuXG59IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2djRmlsdGVyV3JpdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcCc7XG5pbXBvcnQgeyBPR0NGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXTVNEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvd21zLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uL3NoYXJlZC9vZ2MtZmlsdGVyLmVudW0nO1xuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyLXNlbGVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgT2djRmlsdGVyU2VsZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb24nKSBzZWw6IE1hdFNlbGVjdDtcblxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcblxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcblxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcblxuICBASW5wdXQoKSBjaGVja2JveGVzSW5kZXggPSA1O1xuICBASW5wdXQoKSByYWRpb0J1dHRvbnNJbmRleCA9IDU7XG4gIEBJbnB1dCgpIGJhc2VJbmRleCA9IDU7XG5cbiAgQElucHV0KClcbiAgZ2V0IGN1cnJlbnRGaWx0ZXIoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEZpbHRlcjtcbiAgfVxuICBzZXQgY3VycmVudEZpbHRlcih2YWx1ZSkge1xuICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5fY3VycmVudEZpbHRlcj8uc2xpZGVyT3B0aW9ucykge1xuICAgICAgdGhpcy5fY3VycmVudEZpbHRlci5zbGlkZXJPcHRpb25zLmVuYWJsZWQgPSBmYWxzZTsgLy8gcmVtb3ZlIHNsaWRlciB0b2dnbGUgKGFuaW1hdGlvbiB0ZW1wb3JlbGxlKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9jdXJyZW50RmlsdGVyOiBhbnk7XG5cbiAgcHVibGljIG9nY0ZpbHRlck9wZXJhdG9yID0gT2djRmlsdGVyT3BlcmF0b3I7XG5cbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcbiAgcHJpdmF0ZSBvZ2NGaWx0ZXJXcml0ZXI6IE9nY0ZpbHRlcldyaXRlcjtcbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xuICBwdWJsaWMgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgcHVibGljIHNlbGVjdCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBwdWJsaWMgZW5hYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBlbmFibGVkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblxuICBwdWJsaWMgYXBwbHlGaWx0ZXJzVGltZW91dDtcblxuICBnZXQgb2djRmlsdGVyc1NlbGVjdG9ycygpIHtcbiAgICBjb25zdCBvZ2NTZWxlY3RvciA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnB1c2hCdXR0b25zKSB7XG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucHVzaEJ1dHRvbnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKSB7XG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uY2hlY2tib3hlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucykge1xuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnNlbGVjdCkge1xuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnNlbGVjdCk7XG4gICAgfVxuICAgIG9nY1NlbGVjdG9yLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChhLm9yZGVyIDwgYi5vcmRlcikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoYS5vcmRlciA+IGIub3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgICByZXR1cm4gb2djU2VsZWN0b3I7XG4gIH1cblxuICBnZXQgY3VycmVudFB1c2hCdXR0b25zR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3B1c2hCdXR0b25zR3JvdXAnKS52YWx1ZTtcbiAgfVxuICBzZXQgY3VycmVudFB1c2hCdXR0b25zR3JvdXAodmFsdWUpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHB1c2hCdXR0b25zR3JvdXA6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDaGVja2JveGVzR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2NoZWNrYm94ZXNHcm91cCcpLnZhbHVlO1xuICB9XG4gIHNldCBjdXJyZW50Q2hlY2tib3hlc0dyb3VwKHZhbHVlKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBjaGVja2JveGVzR3JvdXA6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgncmFkaW9CdXR0b25zR3JvdXAnKS52YWx1ZTtcbiAgfVxuICBzZXQgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKHZhbHVlKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyByYWRpb0J1dHRvbnNHcm91cDogdmFsdWUgfSk7XG4gIH1cblxuICBnZXQgY3VycmVudFNlbGVjdEdyb3VwKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzZWxlY3RHcm91cCcpLnZhbHVlO1xuICB9XG4gIHNldCBjdXJyZW50U2VsZWN0R3JvdXAodmFsdWUpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHNlbGVjdEdyb3VwOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQkLnZhbHVlO1xuICB9XG5cbiAgc2V0IGVuYWJsZWQodmFsdWUpIHtcbiAgICB0aGlzLmVuYWJsZWQkLm5leHQodmFsdWUpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goY29tcFNlbGVjdCA9PiB7XG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgICAgdmFsdWUgPT09IHNlbGVjdG9yID8gc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUgOiBzZWxlY3Rvci5lbmFibGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9LCA3NTApO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWRzKCkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWRzJC52YWx1ZTtcbiAgfVxuXG4gIHNldCBlbmFibGVkcyh2YWx1ZSkge1xuICAgIHRoaXMuZW5hYmxlZHMkLm5leHQodmFsdWUpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goY29tcFNlbGVjdCA9PiB7XG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgICAgdmFsdWUuaW5jbHVkZXMoc2VsZWN0b3IpID8gc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUgOiBzZWxlY3Rvci5lbmFibGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9LCA3NTApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvZ2NGaWx0ZXJTZXJ2aWNlOiBPR0NGaWx0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICApIHtcbiAgICB0aGlzLm9nY0ZpbHRlcldyaXRlciA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKTtcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBwdXNoQnV0dG9uczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcmFkaW9CdXR0b25zOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBwdXNoQnV0dG9uc0dyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBjaGVja2JveGVzR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHJhZGlvQnV0dG9uc0dyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBzZWxlY3RHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5wdXNoQnV0dG9ucykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucHVzaEJ1dHRvbnMuZ3JvdXBzO1xuICAgIH1cbiAgfVxuXG4gIGdldENoZWNrYm94ZXNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3VwcztcbiAgICB9XG4gIH1cblxuICBnZXRSYWRpb0J1dHRvbnNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucy5ncm91cHM7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VsZWN0R3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uc2VsZWN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QuZ3JvdXBzO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzKSB7XG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwID1cbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQpIHx8XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHNbMF07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCA9XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQpIHx8XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3Vwc1swXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCA9XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCkgfHxcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucy5ncm91cHNbMF07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAgPVxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0Lmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQpIHx8XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QuZ3JvdXBzWzBdO1xuICAgICAgICB0aGlzLmdldFNlbGVjdEVuYWJsZWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtXG4gICAgLmdldCgncHVzaEJ1dHRvbnNHcm91cCcpXG4gICAgLnZhbHVlQ2hhbmdlc1xuICAgIC5waXBlKGRlYm91bmNlVGltZSg3NTApKVxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5vblB1c2hCdXR0b25zQ2hhbmdlR3JvdXAoKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZvcm1cbiAgICAuZ2V0KCdjaGVja2JveGVzR3JvdXAnKVxuICAgIC52YWx1ZUNoYW5nZXNcbiAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMub25DaGVja2JveGVzQ2hhbmdlR3JvdXAoKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZvcm1cbiAgICAgIC5nZXQoJ3JhZGlvQnV0dG9uc0dyb3VwJylcbiAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg3NTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMub25SYWRpb0J1dHRvbnNDaGFuZ2VHcm91cCgpO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5mb3JtXG4gICAgICAuZ2V0KCdzZWxlY3RHcm91cCcpXG4gICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlR3JvdXAoKTtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybVxuICAgICAgLmdldCgncHVzaEJ1dHRvbnMnKVxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybVxuICAgICAgLmdldCgncmFkaW9CdXR0b25zJylcbiAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg3NTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0RW5hYmxlZCgpIHtcbiAgICBjb25zdCBlbmFibGVkcyA9IFtdO1xuICAgIGxldCBlbmFibGVkO1xuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goY29tcFNlbGVjdCA9PiB7XG4gICAgICBpZiAoY29tcFNlbGVjdC5tdWx0aXBsZSkge1xuICAgICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgICAgICBpZiAoc2VsZWN0b3IuZW5hYmxlZCkge1xuICAgICAgICAgICAgZW5hYmxlZHMucHVzaChzZWxlY3Rvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbmFibGVkcyA9IGVuYWJsZWRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnMuZm9yRWFjaChzZWxlY3RvciA9PiB7XG4gICAgICAgICAgaWYgKHNlbGVjdG9yLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGVuYWJsZWQgPSBzZWxlY3RvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VG9vbFRpcChzZWxlY3Rvcik6IHN0cmluZyAge1xuICAgIGxldCB0b29sVGlwO1xuICAgIGlmIChzZWxlY3Rvci50b29sdGlwKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3Rvci50b29sdGlwKSkge1xuICAgICAgICB0b29sVGlwID0gc2VsZWN0b3IudG9vbHRpcC5qb2luKCdcXG4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvb2xUaXAgPSBzZWxlY3Rvci50b29sdGlwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdG9vbFRpcCB8fCAnJztcbiAgfVxuXG4gIC8vIGdldEJ1dHRvblN0eWxlKHBiOiBPZ2NQdXNoQnV0dG9uKToge30ge1xuXG4gIC8vICAgbGV0IHN0eWxlcztcbiAgLy8gICBpZiAocGIuY29sb3IpIHtcbiAgLy8gICAgIHN0eWxlcyA9IHtcbiAgLy8gICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBwYi5lbmFibGVkID8gYHJnYmEoJHtwYi5jb2xvcn0pYCA6IGByZ2JhKDI1NSwyNTUsMjU1LDApYFxuICAvLyAgICAgfTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgc3R5bGVzID0ge1xuICAvLyAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IHBiLmVuYWJsZWQgPyAnYWNjZW50JzogYHJnYmEoMjU1LDI1NSwyNTUsMClgLFxuICAvLyAgICAgICAnY29sb3InOiBwYi5lbmFibGVkID8gYHJnYmEoMCwwLDAsMC45KWAgOiBgcmdiYSgzMywzMywzMywwLjM4KWBcbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHN0eWxlcztcbiAgLy8gfVxuXG4gIGdldEJ1dHRvbkNvbG9yKHB1c2hCdXR0b246IE9nY1B1c2hCdXR0b24pOiB7fSB7XG4gICAgbGV0IHN0eWxlcztcbiAgICBpZiAocHVzaEJ1dHRvbi5jb2xvciAmJiBwdXNoQnV0dG9uLmVuYWJsZWQpIHtcbiAgICAgIHN0eWxlcyA9IHtcbiAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBgcmdiYSgke3B1c2hCdXR0b24uY29sb3J9KWBcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cblxuICBidW5kbGVJc1ZlcnRpY2FsKGJ1bmRsZTogT2djU2VsZWN0b3JCdW5kbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gYnVuZGxlLnZlcnRpY2FsID8gYnVuZGxlLnZlcnRpY2FsIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIG9uUHVzaEJ1dHRvbnNDaGFuZ2VHcm91cCgpIHtcbiAgICB0aGlzLmdldFB1c2hCdXR0b25zR3JvdXBzKCkubWFwKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQgPSBmYWxzZSk7XG4gICAgdGhpcy5nZXRQdXNoQnV0dG9uc0dyb3VwcygpLmZpbmQoZ3JvdXAgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudFB1c2hCdXR0b25zR3JvdXApLmVuYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkNoZWNrYm94ZXNDaGFuZ2VHcm91cCgpIHtcbiAgICB0aGlzLmdldENoZWNrYm94ZXNHcm91cHMoKS5tYXAoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKTtcbiAgICB0aGlzLmdldENoZWNrYm94ZXNHcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRDaGVja2JveGVzR3JvdXApLmVuYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBvblJhZGlvQnV0dG9uc0NoYW5nZUdyb3VwKCkge1xuICAgIHRoaXMuZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCkubWFwKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQgPSBmYWxzZSk7XG4gICAgdGhpcy5nZXRSYWRpb0J1dHRvbnNHcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwID09PSB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCkuZW5hYmxlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIG9uU2VsZWN0Q2hhbmdlR3JvdXAoKSB7XG4gICAgdGhpcy5nZXRTZWxlY3RHcm91cHMoKS5tYXAoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKTtcbiAgICB0aGlzLmdldFNlbGVjdEdyb3VwcygpLmZpbmQoZ3JvdXAgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudFNlbGVjdEdyb3VwKS5lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGN1cnJlbnRPZ2NTZWxlY3Rpb24/LCBzZWxlY3RvclR5cGU/KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCk7XG4gICAgaWYgKHNlbGVjdG9yVHlwZSA9PT0gJ3JhZGlvQnV0dG9uJykge1xuICAgICAgdGhpcy5lbXB0eVJhZGlvQnV0dG9ucygpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50T2djU2VsZWN0aW9uKSB7XG4gICAgICBjdXJyZW50T2djU2VsZWN0aW9uLmVuYWJsZWQgPSAhY3VycmVudE9nY1NlbGVjdGlvbi5lbmFibGVkO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgfSwgNzUwKTtcbiAgfVxuXG4gIGVtcHR5UmFkaW9CdXR0b25zKCkge1xuICAgIHRoaXMuY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goY29tcFNlbGVjdCA9PiB7XG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5tYXAoc2VsZWN0b3IgPT4gc2VsZWN0b3IuZW5hYmxlZCA9IGZhbHNlKTtcblxuICAgICAgdGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9LCA3NTApO1xuICAgfSk7XG4gIH1cblxuICBlbXB0eVNlbGVjdCgpIHtcbiAgICB0aGlzLmVuYWJsZWQgPSBbXTtcbiAgfVxuXG4gIHRvZ2dsZUFsbFNlbGVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCkge1xuICAgICAgdGhpcy5zZWwub3B0aW9ucy5mb3JFYWNoKChpdGVtOiBNYXRPcHRpb24pID0+IGl0ZW0uc2VsZWN0KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbC5vcHRpb25zLmZvckVhY2goKGl0ZW06IE1hdE9wdGlvbikgPT4gaXRlbS5kZXNlbGVjdCgpKTtcbiAgICB9XG4gIH1cblxuICBvcHRpb25DbGljaygpIHtcbiAgICBsZXQgbmV3U3RhdHVzID0gdHJ1ZTtcbiAgICB0aGlzLnNlbC5vcHRpb25zLmZvckVhY2goKGl0ZW06IE1hdE9wdGlvbikgPT4ge1xuICAgICAgaWYgKCFpdGVtLnNlbGVjdGVkKSB7XG4gICAgICAgIG5ld1N0YXR1cyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSBuZXdTdGF0dXM7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVycygpIHtcbiAgICBsZXQgZmlsdGVyUXVlcnlTdHJpbmcgPSAnJztcbiAgICBjb25zdCBjb25kaXRpb25zID0gW107XG4gICAgY29uc3QgY3VycmVudEdyb3VwcyA9IFt0aGlzLmN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwLCB0aGlzLmN1cnJlbnRDaGVja2JveGVzR3JvdXAsXG4gICAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCwgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXBdO1xuICAgIGZvciAoY29uc3QgY3VycmVudEdyb3VwIG9mIGN1cnJlbnRHcm91cHMpIHtcbiAgICAgIGlmIChjdXJyZW50R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMpIHtcbiAgICAgICAgY3VycmVudEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLm1hcChzZWxlY3RvckJ1bmRsZSA9PiB7XG4gICAgICAgICAgY29uc3QgYnVuZGxlQ29uZGl0aW9uID0gW107XG4gICAgICAgICAgc2VsZWN0b3JCdW5kbGUuc2VsZWN0b3JzXG4gICAgICAgICAgLmZpbHRlcihvZ2NTZWxlY3RvciA9PiBvZ2NTZWxlY3Rvci5lbmFibGVkID09PSB0cnVlKVxuICAgICAgICAgIC5mb3JFYWNoKGVuYWJsZWRTZWxlY3RvciA9PiBidW5kbGVDb25kaXRpb24ucHVzaChlbmFibGVkU2VsZWN0b3IuZmlsdGVycykpO1xuICAgICAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID49IDEgKSB7XG4gICAgICAgICAgICBpZiAoYnVuZGxlQ29uZGl0aW9uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICBjb25kaXRpb25zLnB1c2goYnVuZGxlQ29uZGl0aW9uWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaCh7bG9naWNhbDogc2VsZWN0b3JCdW5kbGUubG9naWNhbCwgZmlsdGVyczogYnVuZGxlQ29uZGl0aW9ufSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaXNUZW1wb3JhbE9wZXJhdG9yKCkpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaCh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnNbMF0pO1xuICAgIH1cbiAgICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPj0gMSkge1xuICAgICAgZmlsdGVyUXVlcnlTdHJpbmcgPSB0aGlzLm9nY0ZpbHRlcldyaXRlclxuICAgICAgICAuYnVpbGRGaWx0ZXIoY29uZGl0aW9ucy5sZW5ndGggPT09IDEgP1xuICAgICAgICAgIGNvbmRpdGlvbnNbMF0gOiB7bG9naWNhbDogJ0FuZCcsIGZpbHRlcnM6IGNvbmRpdGlvbnMgfSBhcyBJZ29PZ2NGaWx0ZXJPYmplY3QpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ3dtcycpIHtcbiAgICAgIHRoaXMub2djRmlsdGVyU2VydmljZS5maWx0ZXJCeU9nYyh0aGlzLmRhdGFzb3VyY2UgYXMgV01TRGF0YVNvdXJjZSwgZmlsdGVyUXVlcnlTdHJpbmcgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLnR5cGUgPT09ICd3ZnMnKSB7XG4gICAgICAvLyBUT0RPOiBDaGVjayBob3cgdG8gcHJldmVudCB3ZnMgdG8gcmVmcmVzaCB3aGVuIGZpbHRlciBpY29uIGlzIHB1c2hlZC4uLlxuICAgICAgdGhpcy5kYXRhc291cmNlLm9sLnJlZnJlc2goKTtcbiAgICB9XG4gICAgdGhpcy5kYXRhc291cmNlLnNldE9nY0ZpbHRlcnModGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycywgdHJ1ZSk7XG4gIH1cblxuICBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgdHlwZSkge1xuICAgIGxldCBzZWxlY3RvcnNMZW5ndGggPSAwO1xuICAgIGZvciAoY29uc3Qgc2VsZWN0b3JzIG9mIGJ1bmRsZS5zZWxlY3RvcnMpIHtcbiAgICAgIHNlbGVjdG9yc0xlbmd0aCsrO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHR5cGUgPT09ICdyYWRpbycgPyB0aGlzLnJhZGlvQnV0dG9uc0luZGV4IDogdGhpcy5jaGVja2JveGVzSW5kZXg7XG4gICAgcmV0dXJuIHNlbGVjdG9yc0xlbmd0aCA+IGluZGV4O1xuICB9XG5cbiAgZGlzcGxheU1vcmVSZXN1bHRzKHR5cGUpIHtcbiAgICB0eXBlID09PSAncmFkaW8nID8gdGhpcy5yYWRpb0J1dHRvbnNJbmRleCArPSA1IDogdGhpcy5jaGVja2JveGVzSW5kZXggKz0gNTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgdHlwZSkge1xuICAgIGxldCBzZWxlY3RvcnNMZW5ndGggPSAwO1xuICAgIGZvciAoY29uc3Qgc2VsZWN0b3JzIG9mIGJ1bmRsZS5zZWxlY3RvcnMpIHtcbiAgICAgIHNlbGVjdG9yc0xlbmd0aCsrO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHR5cGUgPT09ICdyYWRpbycgPyB0aGlzLnJhZGlvQnV0dG9uc0luZGV4IDogdGhpcy5jaGVja2JveGVzSW5kZXg7XG4gICAgcmV0dXJuIHRoaXMuYmFzZUluZGV4ICE9PSBpbmRleCAmJiBzZWxlY3RvcnNMZW5ndGggPiB0aGlzLmJhc2VJbmRleDtcbiAgfVxuXG4gIGRpc3BsYXlMZXNzUmVzdWx0cyh0eXBlKSB7XG4gICAgdHlwZSA9PT0gJ3JhZGlvJyA/IHRoaXMucmFkaW9CdXR0b25zSW5kZXggPSB0aGlzLmJhc2VJbmRleCA6IHRoaXMuY2hlY2tib3hlc0luZGV4ID0gdGhpcy5iYXNlSW5kZXg7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaXNUZW1wb3JhbE9wZXJhdG9yKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXI/Lm9wZXJhdG9yPy50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgdGhpcy5vZ2NGaWx0ZXJPcGVyYXRvci5EdXJpbmcudG9Mb3dlckNhc2UoKVxuICAgICk7XG4gIH1cblxuICBjaGFuZ2VQcm9wZXJ0eSh2YWx1ZTogYW55LCBwb3M/OiBudW1iZXIsIHJlZnJlc2hGaWx0ZXIgPSB0cnVlKSB7XG4gICAgY29uc3QgZGV0ZWN0ZWRQcm9wZXJ0eSA9IHRoaXMuZGV0ZWN0UHJvcGVydHkocG9zKTtcbiAgICBpZiAoZGV0ZWN0ZWRQcm9wZXJ0eSkge1xuICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5pbnRlcmZhY2VPZ2NGaWx0ZXJzLmZpbmQoXG4gICAgICAgIGZpbHRlciA9PiBmaWx0ZXIuZmlsdGVyaWQgPT09IHRoaXMuY3VycmVudEZpbHRlci5maWx0ZXJpZFxuICAgICAgKVtkZXRlY3RlZFByb3BlcnR5XSA9IHZhbHVlO1xuXG4gICAgICBpZiAoIHJlZnJlc2hGaWx0ZXIgKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGV0ZWN0UHJvcGVydHkocG9zPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvcikge1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTm90RXF1YWxUbzpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0VxdWFsVG86XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNHcmVhdGVyVGhhbjpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuT3JFcXVhbFRvOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGVzc1RoYW46XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbk9yRXF1YWxUbzpcbiAgICAgICAgcmV0dXJuICdleHByZXNzaW9uJztcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xpa2U6XG4gICAgICAgIHJldHVybiAncGF0dGVybic7XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNCZXR3ZWVuOlxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxuICAgICAgICAgID8gJ2xvd2VyQm91bmRhcnknXG4gICAgICAgICAgOiBwb3MgJiYgcG9zID09PSAyXG4gICAgICAgICAgPyAndXBwZXJCb3VuZGFyeSdcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuRHVyaW5nOlxuICAgICAgICByZXR1cm4gcG9zICYmIHBvcyA9PT0gMVxuICAgICAgICAgID8gJ2JlZ2luJ1xuICAgICAgICAgIDogcG9zICYmIHBvcyA9PT0gMlxuICAgICAgICAgID8gJ2VuZCdcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWxlY3RvciBvZiBvZ2NGaWx0ZXJzU2VsZWN0b3JzXCI+XG4gICAgPGRpdiBjbGFzcz1cInB1c2hCdXR0b25Hcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ3B1c2hCdXR0b24nXCI+XG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKS5sZW5ndGggPiAxXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHVzaEJ1dHRvbnNHcm91cFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50UHVzaEJ1dHRvbnNHcm91cFwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCI+e3tzZWxlY3Rvckdyb3VwLnRpdGxlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50UHVzaEJ1dHRvbnNHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiPlxuICAgICAgICA8aDQ+e3tidW5kbGUudGl0bGV9fTwvaDQ+XG4gICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInB1c2hCdXR0b25zXCIgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiIGFwcGVhcmFuY2U9XCJsZWdhY3lcIiB2ZXJ0aWNhbD17e2J1bmRsZUlzVmVydGljYWwoYnVuZGxlKX19IG11bHRpcGxlPVwidHJ1ZVwiPlxuICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdGb3I9XCJsZXQgb2djUHVzaEJ1dHRvbiBvZiBidW5kbGUuc2VsZWN0b3JzXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djUHVzaEJ1dHRvbilcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCIgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRCdXR0b25Db2xvcihvZ2NQdXNoQnV0dG9uKVwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvZ2NQdXNoQnV0dG9uLmVuYWJsZWRcIiAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9nY1B1c2hCdXR0b24sIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1B1c2hCdXR0b25cIj57e29nY1B1c2hCdXR0b24udGl0bGV9fVxuICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XG4gICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveEdyb3Vwc1wiICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAnY2hlY2tib3gnXCI+XG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0Q2hlY2tib3hlc0dyb3VwcygpLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjaGVja2JveGVzR3JvdXBcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudENoZWNrYm94ZXNHcm91cFwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0Q2hlY2tib3hlc0dyb3VwcygpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIj57e3NlbGVjdG9yR3JvdXAudGl0bGV9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRDaGVja2JveGVzR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIj5cbiAgICAgICAgPGg0Pnt7YnVuZGxlLnRpdGxlfX08L2g0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hlcyBtYXQtdHlwb2dyYXBoeVwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nRm9yPVwibGV0IG9nY0NoZWNrYm94IG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NDaGVja2JveClcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCIgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwib2djQ2hlY2tib3guZW5hYmxlZFwiIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob2djQ2hlY2tib3gsIHNlbGVjdG9yLnNlbGVjdG9yVHlwZSlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY0NoZWNrYm94XCI+e3tvZ2NDaGVja2JveC50aXRsZX19XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKSB8fCBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ2NoZWNrYm94JylcIj5cbiAgICAgICAgICA8dSAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKVwiXG4gICAgICAgICAgICBjbGFzcz1cImxlc3NSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5TGVzc1Jlc3VsdHMoJ2NoZWNrYm94JylcIj57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheUxlc3NSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvdT5cbiAgICAgICAgICA8dSAqbmdJZj1cImlzTW9yZVJlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKVwiXG4gICAgICAgICAgICBjbGFzcz1cIm1vcmVSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5TW9yZVJlc3VsdHMoJ2NoZWNrYm94JylcIj57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheU1vcmVSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvdT5cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicmFkaW9CdXR0b25Hcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ3JhZGlvQnV0dG9uJ1wiPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFJhZGlvQnV0dG9uc0dyb3VwcygpLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyYWRpb0J1dHRvbnNHcm91cFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50UmFkaW9CdXR0b25zR3JvdXBcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldFJhZGlvQnV0dG9uc0dyb3VwcygpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIj57e3NlbGVjdG9yR3JvdXAudGl0bGV9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiPlxuICAgICAgICA8aDQ+e3tidW5kbGUudGl0bGV9fTwvaDQ+XG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXBcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyYWRpb0J1dHRvbnNcIiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+XG4gICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJidW5kbGUudW5maWx0ZXJlZFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImVtcHR5UmFkaW9CdXR0b25zKClcIj57eyAnaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgb2djUmFkaW9CdXR0b24gb2YgYnVuZGxlLnNlbGVjdG9yc1wiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY1JhZGlvQnV0dG9uKVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvZ2NSYWRpb0J1dHRvbi5lbmFibGVkXCIgKGNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZShvZ2NSYWRpb0J1dHRvbiwgc2VsZWN0b3Iuc2VsZWN0b3JUeXBlKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djUmFkaW9CdXR0b25cIj57e29nY1JhZGlvQnV0dG9uLnRpdGxlfX1cbiAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgPHAgKm5nSWY9XCJpc0xlc3NSZXN1bHRzKGJ1bmRsZSwgJ3JhZGlvJykgfHwgaXNNb3JlUmVzdWx0cyhidW5kbGUsICdyYWRpbycpXCI+XG4gICAgICAgICAgICA8dSAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAncmFkaW8nKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibGVzc1Jlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGlzcGxheUxlc3NSZXN1bHRzKCdyYWRpbycpXCI+e3sgJ2lnby5nZW8uZmlsdGVyLmRpc3BsYXlMZXNzUmVzdWx0cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdT5cbiAgICAgICAgICAgIDx1ICpuZ0lmPVwiaXNNb3JlUmVzdWx0cyhidW5kbGUsICdyYWRpbycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtb3JlUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5TW9yZVJlc3VsdHMoJ3JhZGlvJylcIj57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheU1vcmVSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC91PlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RHcm91cHNcIiAqbmdJZj1cInNlbGVjdG9yLnNlbGVjdG9yVHlwZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCIgKm5nSWY9XCJnZXRTZWxlY3RHcm91cHMoKS5sZW5ndGggPiAxXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0R3JvdXBcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8ubGF5ZXIubGVnZW5kLnNlbGVjdFN0eWxlJyB8IHRyYW5zbGF0ZVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudFNlbGVjdEdyb3VwXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRTZWxlY3RHcm91cHMoKVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWxlY3Rvckdyb3VwXCI+e3tzZWxlY3Rvckdyb3VwLnRpdGxlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1bmRsZSBvZiBjdXJyZW50U2VsZWN0R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnNcIj5cbiAgICAgICAgPGg0Pnt7YnVuZGxlLnRpdGxlfX08L2g0PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIj5cbiAgICAgICAgICA8bWF0LWJ1dHRvbiAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkICYmICFidW5kbGUubXVsdGlwbGVcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5cIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCIgIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImVtcHR5U2VsZWN0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZmlsdGVyLXJlbW92ZVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtYnV0dG9uPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJidW5kbGUubXVsdGlwbGU7IGVsc2Ugbm90TXVsdGlcIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAjc2VsZWN0aW9uIFttdWx0aXBsZV09XCJidW5kbGUubXVsdGlwbGVcIiBbcGxhY2Vob2xkZXJdPVwiYnVuZGxlLnRpdGxlXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VsZWN0XCIgWyhuZ01vZGVsKV09XCJlbmFibGVkc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveGVzIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ICpuZ0lmPVwiYnVuZGxlLm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhbGxTZWxlY3RlZFwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFNlbGVjdGlvbigpXCI+VG91c1xuICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9nY1NlbGVjdCBvZiBidW5kbGUuc2VsZWN0b3JzXCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djU2VsZWN0KVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBEZWxheT1cIjUwMFwiIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIm9wdGlvbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1NlbGVjdFwiPnt7b2djU2VsZWN0LnRpdGxlfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RNdWx0aT5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiYnVuZGxlLnRpdGxlXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VsZWN0XCIgWyhuZ01vZGVsKV09XCJlbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9nY1NlbGVjdCBvZiBidW5kbGUuc2VsZWN0b3JzXCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djU2VsZWN0KVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBEZWxheT1cIjUwMFwiIG1hdFRvb2x0aXBDbGFzcz1cIm1hdGVyaWFsLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9nY1NlbGVjdFwiPnt7b2djU2VsZWN0LnRpdGxlfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG5cbjxkaXYgKm5nSWY9XCJpc1RlbXBvcmFsT3BlcmF0b3IoKVwiPlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGg0Pnt7ICdpZ28uZ2VvLmZpbHRlci5yZXBvcnRpbmdEYXRlJyB8IHRyYW5zbGF0ZSB9fTwvaDQ+XG4gIDxpZ28tb2djLWZpbHRlci10aW1lXG4gICAgWyhkYXRhc291cmNlKV09XCJkYXRhc291cmNlXCJcbiAgICBbKGN1cnJlbnRGaWx0ZXIpXT1cImN1cnJlbnRGaWx0ZXJcIlxuICAgIChjaGFuZ2VQcm9wZXJ0eSk9XCJjaGFuZ2VQcm9wZXJ0eSgkZXZlbnQudmFsdWUsICRldmVudC5wb3MpXCI+XG4gIDwvaWdvLW9nYy1maWx0ZXItdGltZT5cbjwvZGl2PiJdfQ==
975
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci1zZWxlY3Rpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmlsdGVyL29nYy1maWx0ZXItc2VsZWN0aW9uL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXNlbGVjdGlvbi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFVdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSWpFLE9BQU8sRUFBZSxXQUFXLEVBQWEsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztJQ2QzQixzQ0FDMEI7SUFBQSxZQUMxQjtJQUFBLGlCQUFhOzs7SUFEWCx5Q0FBdUI7SUFBQyxlQUMxQjtJQUQwQix1REFDMUI7Ozs7SUFSTiw4QkFBc0U7SUFDcEUsc0NBQWdCO0lBQ2Qsc0NBR3NDO0lBQXBDLHlQQUFtQzs7SUFDbkMsNkdBRWE7SUFDZixpQkFBYTtJQUNmLGlCQUFpQjtJQUNuQixpQkFBTTs7O0lBUEEsZUFBNkQ7SUFBN0QscUZBQTZELHlDQUFBO0lBRXZCLGVBQXlCO0lBQXpCLHVEQUF5Qjs7OztJQVVqRSw2Q0FJMEI7SUFEVSxrYUFBa0U7SUFDNUUsWUFDMUI7SUFBQSxpQkFBb0I7Ozs7SUFKbEIsa0VB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O1lBRUcsVUFBVTtrQkFBbEIsS0FBSztZQUVHLEdBQUc7a0JBQVgsS0FBSztZQUVHLGVBQWU7a0JBQXZCLEtBQUs7WUFDRyxpQkFBaUI7a0JBQXpCLEtBQUs7WUFDRyxTQUFTO2tCQUFqQixLQUFLO1lBR0YsYUFBYTtrQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZSxcbiAgSWdvT2djRmlsdGVyT2JqZWN0LFxuICBPZ2NQdXNoQnV0dG9uLFxuICBPZ2NTZWxlY3RvckJ1bmRsZSxcbiAgU2VsZWN0b3JHcm91cFxuXG59IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgT2djRmlsdGVyV3JpdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVyL3NoYXJlZC9vZ2MtZmlsdGVyJztcbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4uLy4uL21hcCc7XG5pbXBvcnQgeyBPR0NGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXTVNEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvd21zLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uL3NoYXJlZC9vZ2MtZmlsdGVyLmVudW0nO1xuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lnby1vZ2MtZmlsdGVyLXNlbGVjdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vZ2MtZmlsdGVyLXNlbGVjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItc2VsZWN0aW9uLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgT2djRmlsdGVyU2VsZWN0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBAVmlld0NoaWxkKCdzZWxlY3Rpb24nKSBzZWw6IE1hdFNlbGVjdDtcblxuICBASW5wdXQoKSByZWZyZXNoRmlsdGVyczogKCkgPT4gdm9pZDtcblxuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcblxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcblxuICBASW5wdXQoKSBjaGVja2JveGVzSW5kZXggPSA1O1xuICBASW5wdXQoKSByYWRpb0J1dHRvbnNJbmRleCA9IDU7XG4gIEBJbnB1dCgpIGJhc2VJbmRleCA9IDU7XG5cbiAgQElucHV0KClcbiAgZ2V0IGN1cnJlbnRGaWx0ZXIoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudEZpbHRlcjtcbiAgfVxuICBzZXQgY3VycmVudEZpbHRlcih2YWx1ZSkge1xuICAgIHRoaXMuX2N1cnJlbnRGaWx0ZXIgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5fY3VycmVudEZpbHRlcj8uc2xpZGVyT3B0aW9ucykge1xuICAgICAgdGhpcy5fY3VycmVudEZpbHRlci5zbGlkZXJPcHRpb25zLmVuYWJsZWQgPSBmYWxzZTsgLy8gcmVtb3ZlIHNsaWRlciB0b2dnbGUgKGFuaW1hdGlvbiB0ZW1wb3JlbGxlKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9jdXJyZW50RmlsdGVyOiBhbnk7XG5cbiAgcHVibGljIG9nY0ZpbHRlck9wZXJhdG9yID0gT2djRmlsdGVyT3BlcmF0b3I7XG5cbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcbiAgcHJpdmF0ZSBvZ2NGaWx0ZXJXcml0ZXI6IE9nY0ZpbHRlcldyaXRlcjtcbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xuICBwdWJsaWMgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgcHVibGljIHNlbGVjdCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBwdWJsaWMgZW5hYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBlbmFibGVkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcblxuICBwdWJsaWMgYXBwbHlGaWx0ZXJzVGltZW91dDtcblxuICBnZXQgb2djRmlsdGVyc1NlbGVjdG9ycygpIHtcbiAgICBjb25zdCBvZ2NTZWxlY3RvciA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnB1c2hCdXR0b25zKSB7XG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8ucHVzaEJ1dHRvbnMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKSB7XG4gICAgICBvZ2NTZWxlY3Rvci5wdXNoKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uY2hlY2tib3hlcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucykge1xuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnJhZGlvQnV0dG9ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnNlbGVjdCkge1xuICAgICAgb2djU2VsZWN0b3IucHVzaCh0aGlzLmRhdGFzb3VyY2U/Lm9wdGlvbnM/Lm9nY0ZpbHRlcnM/LnNlbGVjdCk7XG4gICAgfVxuICAgIG9nY1NlbGVjdG9yLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGlmIChhLm9yZGVyIDwgYi5vcmRlcikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoYS5vcmRlciA+IGIub3JkZXIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcbiAgICByZXR1cm4gb2djU2VsZWN0b3I7XG4gIH1cblxuICBnZXQgY3VycmVudFB1c2hCdXR0b25zR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3B1c2hCdXR0b25zR3JvdXAnKS52YWx1ZTtcbiAgfVxuICBzZXQgY3VycmVudFB1c2hCdXR0b25zR3JvdXAodmFsdWUpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHB1c2hCdXR0b25zR3JvdXA6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRDaGVja2JveGVzR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2NoZWNrYm94ZXNHcm91cCcpLnZhbHVlO1xuICB9XG4gIHNldCBjdXJyZW50Q2hlY2tib3hlc0dyb3VwKHZhbHVlKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBjaGVja2JveGVzR3JvdXA6IHZhbHVlIH0pO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgncmFkaW9CdXR0b25zR3JvdXAnKS52YWx1ZTtcbiAgfVxuICBzZXQgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKHZhbHVlKSB7XG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyByYWRpb0J1dHRvbnNHcm91cDogdmFsdWUgfSk7XG4gIH1cblxuICBnZXQgY3VycmVudFNlbGVjdEdyb3VwKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdzZWxlY3RHcm91cCcpLnZhbHVlO1xuICB9XG4gIHNldCBjdXJyZW50U2VsZWN0R3JvdXAodmFsdWUpIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHNlbGVjdEdyb3VwOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWQkLnZhbHVlO1xuICB9XG5cbiAgc2V0IGVuYWJsZWQodmFsdWUpIHtcbiAgICB0aGlzLmVuYWJsZWQkLm5leHQodmFsdWUpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goY29tcFNlbGVjdCA9PiB7XG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgICAgdmFsdWUgPT09IHNlbGVjdG9yID8gc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUgOiBzZWxlY3Rvci5lbmFibGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9LCA3NTApO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWRzKCkge1xuICAgIHJldHVybiB0aGlzLmVuYWJsZWRzJC52YWx1ZTtcbiAgfVxuXG4gIHNldCBlbmFibGVkcyh2YWx1ZSkge1xuICAgIHRoaXMuZW5hYmxlZHMkLm5leHQodmFsdWUpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQpO1xuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goY29tcFNlbGVjdCA9PiB7XG4gICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgICAgdmFsdWUuaW5jbHVkZXMoc2VsZWN0b3IpID8gc2VsZWN0b3IuZW5hYmxlZCA9IHRydWUgOiBzZWxlY3Rvci5lbmFibGVkID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9LCA3NTApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvZ2NGaWx0ZXJTZXJ2aWNlOiBPR0NGaWx0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICApIHtcbiAgICB0aGlzLm9nY0ZpbHRlcldyaXRlciA9IG5ldyBPZ2NGaWx0ZXJXcml0ZXIoKTtcbiAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm0oKSB7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBwdXNoQnV0dG9uczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcmFkaW9CdXR0b25zOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBwdXNoQnV0dG9uc0dyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBjaGVja2JveGVzR3JvdXA6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHJhZGlvQnV0dG9uc0dyb3VwOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBzZWxlY3RHcm91cDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5wdXNoQnV0dG9ucykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMucHVzaEJ1dHRvbnMuZ3JvdXBzO1xuICAgIH1cbiAgfVxuXG4gIGdldENoZWNrYm94ZXNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5jaGVja2JveGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3VwcztcbiAgICB9XG4gIH1cblxuICBnZXRSYWRpb0J1dHRvbnNHcm91cHMoKTogU2VsZWN0b3JHcm91cFtdIHtcbiAgICBpZiAodGhpcy5kYXRhc291cmNlPy5vcHRpb25zPy5vZ2NGaWx0ZXJzPy5yYWRpb0J1dHRvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucy5ncm91cHM7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VsZWN0R3JvdXBzKCk6IFNlbGVjdG9yR3JvdXBbXSB7XG4gICAgaWYgKHRoaXMuZGF0YXNvdXJjZT8ub3B0aW9ucz8ub2djRmlsdGVycz8uc2VsZWN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QuZ3JvdXBzO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzKSB7XG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwID1cbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnB1c2hCdXR0b25zLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQpIHx8XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5wdXNoQnV0dG9ucy5ncm91cHNbMF07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCA9XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQpIHx8XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5jaGVja2JveGVzLmdyb3Vwc1swXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucykge1xuICAgICAgICB0aGlzLmN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cCA9XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5yYWRpb0J1dHRvbnMuZ3JvdXBzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCkgfHxcbiAgICAgICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLnJhZGlvQnV0dG9ucy5ncm91cHNbMF07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0R3JvdXAgPVxuICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuc2VsZWN0Lmdyb3Vwcy5maW5kKGdyb3VwID0+IGdyb3VwLmVuYWJsZWQpIHx8XG4gICAgICAgICAgdGhpcy5kYXRhc291cmNlLm9wdGlvbnMub2djRmlsdGVycy5zZWxlY3QuZ3JvdXBzWzBdO1xuICAgICAgICB0aGlzLmdldFNlbGVjdEVuYWJsZWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtXG4gICAgLmdldCgncHVzaEJ1dHRvbnNHcm91cCcpXG4gICAgLnZhbHVlQ2hhbmdlc1xuICAgIC5waXBlKGRlYm91bmNlVGltZSg3NTApKVxuICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5vblB1c2hCdXR0b25zQ2hhbmdlR3JvdXAoKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZvcm1cbiAgICAuZ2V0KCdjaGVja2JveGVzR3JvdXAnKVxuICAgIC52YWx1ZUNoYW5nZXNcbiAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcbiAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMub25DaGVja2JveGVzQ2hhbmdlR3JvdXAoKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZvcm1cbiAgICAgIC5nZXQoJ3JhZGlvQnV0dG9uc0dyb3VwJylcbiAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg3NTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMub25SYWRpb0J1dHRvbnNDaGFuZ2VHcm91cCgpO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5mb3JtXG4gICAgICAuZ2V0KCdzZWxlY3RHcm91cCcpXG4gICAgICAudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNzUwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlR3JvdXAoKTtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybVxuICAgICAgLmdldCgncHVzaEJ1dHRvbnMnKVxuICAgICAgLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDc1MCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZm9ybVxuICAgICAgLmdldCgncmFkaW9CdXR0b25zJylcbiAgICAgIC52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg3NTApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0RW5hYmxlZCgpIHtcbiAgICBjb25zdCBlbmFibGVkcyA9IFtdO1xuICAgIGxldCBlbmFibGVkO1xuICAgIHRoaXMuY3VycmVudFNlbGVjdEdyb3VwLmNvbXB1dGVkU2VsZWN0b3JzLmZvckVhY2goY29tcFNlbGVjdCA9PiB7XG4gICAgICBpZiAoY29tcFNlbGVjdC5tdWx0aXBsZSkge1xuICAgICAgICBjb21wU2VsZWN0LnNlbGVjdG9ycy5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgICAgICBpZiAoc2VsZWN0b3IuZW5hYmxlZCkge1xuICAgICAgICAgICAgZW5hYmxlZHMucHVzaChzZWxlY3Rvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbmFibGVkcyA9IGVuYWJsZWRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcFNlbGVjdC5zZWxlY3RvcnMuZm9yRWFjaChzZWxlY3RvciA9PiB7XG4gICAgICAgICAgaWYgKHNlbGVjdG9yLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGVuYWJsZWQgPSBzZWxlY3RvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VG9vbFRpcChzZWxlY3Rvcik6IHN0cmluZyB7XG4gICAgbGV0IHRvb2xUaXA7XG4gICAgaWYgKHNlbGVjdG9yLnRvb2x0aXApIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdG9yLnRvb2x0aXApKSB7XG4gICAgICAgIHRvb2xUaXAgPSBzZWxlY3Rvci50b29sdGlwLmpvaW4oJ1xcbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vbFRpcCA9IHNlbGVjdG9yLnRvb2x0aXA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b29sVGlwIHx8ICcnO1xuICB9XG5cbiAgLy8gZ2V0QnV0dG9uU3R5bGUocGI6IE9nY1B1c2hCdXR0b24pOiB7fSB7XG5cbiAgLy8gICBsZXQgc3R5bGVzO1xuICAvLyAgIGlmIChwYi5jb2xvcikge1xuICAvLyAgICAgc3R5bGVzID0ge1xuICAvLyAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IHBiLmVuYWJsZWQgPyBgcmdiYSgke3BiLmNvbG9yfSlgIDogYHJnYmEoMjU1LDI1NSwyNTUsMClgXG4gIC8vICAgICB9O1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICBzdHlsZXMgPSB7XG4gIC8vICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogcGIuZW5hYmxlZCA/ICdhY2NlbnQnOiBgcmdiYSgyNTUsMjU1LDI1NSwwKWAsXG4gIC8vICAgICAgICdjb2xvcic6IHBiLmVuYWJsZWQgPyBgcmdiYSgwLDAsMCwwLjkpYCA6IGByZ2JhKDMzLDMzLDMzLDAuMzgpYFxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4gc3R5bGVzO1xuICAvLyB9XG5cbiAgZ2V0QnV0dG9uQ29sb3IocHVzaEJ1dHRvbjogT2djUHVzaEJ1dHRvbik6IHt9IHtcbiAgICBsZXQgc3R5bGVzO1xuICAgIGlmIChwdXNoQnV0dG9uLmNvbG9yICYmIHB1c2hCdXR0b24uZW5hYmxlZCkge1xuICAgICAgc3R5bGVzID0ge1xuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGByZ2JhKCR7cHVzaEJ1dHRvbi5jb2xvcn0pYFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuXG4gIGJ1bmRsZUlzVmVydGljYWwoYnVuZGxlOiBPZ2NTZWxlY3RvckJ1bmRsZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBidW5kbGUudmVydGljYWwgPyBidW5kbGUudmVydGljYWwgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgb25QdXNoQnV0dG9uc0NoYW5nZUdyb3VwKCkge1xuICAgIHRoaXMuZ2V0UHVzaEJ1dHRvbnNHcm91cHMoKS5tYXAoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKTtcbiAgICB0aGlzLmdldFB1c2hCdXR0b25zR3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5jdXJyZW50UHVzaEJ1dHRvbnNHcm91cCkuZW5hYmxlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIG9uQ2hlY2tib3hlc0NoYW5nZUdyb3VwKCkge1xuICAgIHRoaXMuZ2V0Q2hlY2tib3hlc0dyb3VwcygpLm1hcChncm91cCA9PiBncm91cC5lbmFibGVkID0gZmFsc2UpO1xuICAgIHRoaXMuZ2V0Q2hlY2tib3hlc0dyb3VwcygpLmZpbmQoZ3JvdXAgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCkuZW5hYmxlZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIG9uUmFkaW9CdXR0b25zQ2hhbmdlR3JvdXAoKSB7XG4gICAgdGhpcy5nZXRSYWRpb0J1dHRvbnNHcm91cHMoKS5tYXAoZ3JvdXAgPT4gZ3JvdXAuZW5hYmxlZCA9IGZhbHNlKTtcbiAgICB0aGlzLmdldFJhZGlvQnV0dG9uc0dyb3VwcygpLmZpbmQoZ3JvdXAgPT4gZ3JvdXAgPT09IHRoaXMuY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwKS5lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgb25TZWxlY3RDaGFuZ2VHcm91cCgpIHtcbiAgICB0aGlzLmdldFNlbGVjdEdyb3VwcygpLm1hcChncm91cCA9PiBncm91cC5lbmFibGVkID0gZmFsc2UpO1xuICAgIHRoaXMuZ2V0U2VsZWN0R3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5jdXJyZW50U2VsZWN0R3JvdXApLmVuYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2UoY3VycmVudE9nY1NlbGVjdGlvbj8sIHNlbGVjdG9yVHlwZT8pIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5hcHBseUZpbHRlcnNUaW1lb3V0KTtcbiAgICBpZiAoc2VsZWN0b3JUeXBlID09PSAncmFkaW9CdXR0b24nKSB7XG4gICAgICB0aGlzLmVtcHR5UmFkaW9CdXR0b25zKCk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRPZ2NTZWxlY3Rpb24pIHtcbiAgICAgIGN1cnJlbnRPZ2NTZWxlY3Rpb24uZW5hYmxlZCA9ICFjdXJyZW50T2djU2VsZWN0aW9uLmVuYWJsZWQ7XG4gICAgfVxuICAgIHRoaXMuYXBwbHlGaWx0ZXJzVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9LCA3NTApO1xuICB9XG5cbiAgZW1wdHlSYWRpb0J1dHRvbnMoKSB7XG4gICAgdGhpcy5jdXJyZW50UmFkaW9CdXR0b25zR3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMuZm9yRWFjaChjb21wU2VsZWN0ID0+IHtcbiAgICAgIGNvbXBTZWxlY3Quc2VsZWN0b3JzLm1hcChzZWxlY3RvciA9PiBzZWxlY3Rvci5lbmFibGVkID0gZmFsc2UpO1xuXG4gICAgICB0aGlzLmFwcGx5RmlsdGVyc1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH0sIDc1MCk7XG4gICB9KTtcbiAgfVxuXG4gIGVtcHR5U2VsZWN0KCkge1xuICAgIHRoaXMuZW5hYmxlZCA9IFtdO1xuICB9XG5cbiAgdG9nZ2xlQWxsU2VsZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNlbC5vcHRpb25zLmZvckVhY2goKGl0ZW06IE1hdE9wdGlvbikgPT4gaXRlbS5zZWxlY3QoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsLm9wdGlvbnMuZm9yRWFjaCgoaXRlbTogTWF0T3B0aW9uKSA9PiBpdGVtLmRlc2VsZWN0KCkpO1xuICAgIH1cbiAgfVxuXG4gIG9wdGlvbkNsaWNrKCkge1xuICAgIGxldCBuZXdTdGF0dXMgPSB0cnVlO1xuICAgIHRoaXMuc2VsLm9wdGlvbnMuZm9yRWFjaCgoaXRlbTogTWF0T3B0aW9uKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgbmV3U3RhdHVzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9IG5ld1N0YXR1cztcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzKCkge1xuICAgIGxldCBmaWx0ZXJRdWVyeVN0cmluZyA9ICcnO1xuICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbXTtcbiAgICBjb25zdCBjdXJyZW50R3JvdXBzID0gW3RoaXMuY3VycmVudFB1c2hCdXR0b25zR3JvdXAsIHRoaXMuY3VycmVudENoZWNrYm94ZXNHcm91cCxcbiAgICAgIHRoaXMuY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLCB0aGlzLmN1cnJlbnRTZWxlY3RHcm91cF07XG4gICAgZm9yIChjb25zdCBjdXJyZW50R3JvdXAgb2YgY3VycmVudEdyb3Vwcykge1xuICAgICAgaWYgKGN1cnJlbnRHcm91cC5jb21wdXRlZFNlbGVjdG9ycykge1xuICAgICAgICBjdXJyZW50R3JvdXAuY29tcHV0ZWRTZWxlY3RvcnMubWFwKHNlbGVjdG9yQnVuZGxlID0+IHtcbiAgICAgICAgICBjb25zdCBidW5kbGVDb25kaXRpb24gPSBbXTtcbiAgICAgICAgICBzZWxlY3RvckJ1bmRsZS5zZWxlY3RvcnNcbiAgICAgICAgICAuZmlsdGVyKG9nY1NlbGVjdG9yID0+IG9nY1NlbGVjdG9yLmVuYWJsZWQgPT09IHRydWUpXG4gICAgICAgICAgLmZvckVhY2goZW5hYmxlZFNlbGVjdG9yID0+IGJ1bmRsZUNvbmRpdGlvbi5wdXNoKGVuYWJsZWRTZWxlY3Rvci5maWx0ZXJzKSk7XG4gICAgICAgICAgaWYgKGJ1bmRsZUNvbmRpdGlvbi5sZW5ndGggPj0gMSApIHtcbiAgICAgICAgICAgIGlmIChidW5kbGVDb25kaXRpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgIGNvbmRpdGlvbnMucHVzaChidW5kbGVDb25kaXRpb25bMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uZGl0aW9ucy5wdXNoKHtsb2dpY2FsOiBzZWxlY3RvckJ1bmRsZS5sb2dpY2FsLCBmaWx0ZXJzOiBidW5kbGVDb25kaXRpb259KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5pc1RlbXBvcmFsT3BlcmF0b3IoKSkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuaW50ZXJmYWNlT2djRmlsdGVyc1swXSk7XG4gICAgfVxuICAgIGlmIChjb25kaXRpb25zLmxlbmd0aCA+PSAxKSB7XG4gICAgICBmaWx0ZXJRdWVyeVN0cmluZyA9IHRoaXMub2djRmlsdGVyV3JpdGVyXG4gICAgICAgIC5idWlsZEZpbHRlcihjb25kaXRpb25zLmxlbmd0aCA9PT0gMSA/XG4gICAgICAgICAgY29uZGl0aW9uc1swXSA6IHtsb2dpY2FsOiAnQW5kJywgZmlsdGVyczogY29uZGl0aW9ucyB9IGFzIElnb09nY0ZpbHRlck9iamVjdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy50eXBlID09PSAnd21zJykge1xuICAgICAgdGhpcy5vZ2NGaWx0ZXJTZXJ2aWNlLmZpbHRlckJ5T2djKHRoaXMuZGF0YXNvdXJjZSBhcyBXTVNEYXRhU291cmNlLCBmaWx0ZXJRdWVyeVN0cmluZyApO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhc291cmNlLm9wdGlvbnMudHlwZSA9PT0gJ3dmcycpIHtcbiAgICAgIC8vIFRPRE86IENoZWNrIGhvdyB0byBwcmV2ZW50IHdmcyB0byByZWZyZXNoIHdoZW4gZmlsdGVyIGljb24gaXMgcHVzaGVkLi4uXG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub2wucmVmcmVzaCgpO1xuICAgIH1cbiAgICB0aGlzLmRhdGFzb3VyY2Uuc2V0T2djRmlsdGVycyh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLCB0cnVlKTtcbiAgfVxuXG4gIGlzTW9yZVJlc3VsdHMoYnVuZGxlLCB0eXBlKSB7XG4gICAgbGV0IHNlbGVjdG9yc0xlbmd0aCA9IDA7XG4gICAgZm9yIChjb25zdCBzZWxlY3RvcnMgb2YgYnVuZGxlLnNlbGVjdG9ycykge1xuICAgICAgc2VsZWN0b3JzTGVuZ3RoKys7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdHlwZSA9PT0gJ3JhZGlvJyA/IHRoaXMucmFkaW9CdXR0b25zSW5kZXggOiB0aGlzLmNoZWNrYm94ZXNJbmRleDtcbiAgICByZXR1cm4gc2VsZWN0b3JzTGVuZ3RoID4gaW5kZXg7XG4gIH1cblxuICBkaXNwbGF5TW9yZVJlc3VsdHModHlwZSkge1xuICAgIHR5cGUgPT09ICdyYWRpbycgPyB0aGlzLnJhZGlvQnV0dG9uc0luZGV4ICs9IDUgOiB0aGlzLmNoZWNrYm94ZXNJbmRleCArPSA1O1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlzTGVzc1Jlc3VsdHMoYnVuZGxlLCB0eXBlKSB7XG4gICAgbGV0IHNlbGVjdG9yc0xlbmd0aCA9IDA7XG4gICAgZm9yIChjb25zdCBzZWxlY3RvcnMgb2YgYnVuZGxlLnNlbGVjdG9ycykge1xuICAgICAgc2VsZWN0b3JzTGVuZ3RoKys7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdHlwZSA9PT0gJ3JhZGlvJyA/IHRoaXMucmFkaW9CdXR0b25zSW5kZXggOiB0aGlzLmNoZWNrYm94ZXNJbmRleDtcbiAgICByZXR1cm4gdGhpcy5iYXNlSW5kZXggIT09IGluZGV4ICYmIHNlbGVjdG9yc0xlbmd0aCA+IHRoaXMuYmFzZUluZGV4O1xuICB9XG5cbiAgZGlzcGxheUxlc3NSZXN1bHRzKHR5cGUpIHtcbiAgICB0eXBlID09PSAncmFkaW8nID8gdGhpcy5yYWRpb0J1dHRvbnNJbmRleCA9IHRoaXMuYmFzZUluZGV4IDogdGhpcy5jaGVja2JveGVzSW5kZXggPSB0aGlzLmJhc2VJbmRleDtcbiAgICByZXR1cm47XG4gIH1cblxuICBpc1RlbXBvcmFsT3BlcmF0b3IoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcj8ub3BlcmF0b3I/LnRvTG93ZXJDYXNlKCkgPT09XG4gICAgICB0aGlzLm9nY0ZpbHRlck9wZXJhdG9yLkR1cmluZy50b0xvd2VyQ2FzZSgpXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZVByb3BlcnR5KHZhbHVlOiBhbnksIHBvcz86IG51bWJlciwgcmVmcmVzaEZpbHRlciA9IHRydWUpIHtcbiAgICBjb25zdCBkZXRlY3RlZFByb3BlcnR5ID0gdGhpcy5kZXRlY3RQcm9wZXJ0eShwb3MpO1xuICAgIGlmIChkZXRlY3RlZFByb3BlcnR5KSB7XG4gICAgICB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5vZ2NGaWx0ZXJzLmludGVyZmFjZU9nY0ZpbHRlcnMuZmluZChcbiAgICAgICAgZmlsdGVyID0+IGZpbHRlci5maWx0ZXJpZCA9PT0gdGhpcy5jdXJyZW50RmlsdGVyLmZpbHRlcmlkXG4gICAgICApW2RldGVjdGVkUHJvcGVydHldID0gdmFsdWU7XG5cbiAgICAgIGlmICggcmVmcmVzaEZpbHRlciApIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZXRlY3RQcm9wZXJ0eShwb3M/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNOb3RFcXVhbFRvOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzRXF1YWxUbzpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0dyZWF0ZXJUaGFuOlxuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzR3JlYXRlclRoYW5PckVxdWFsVG86XG4gICAgICBjYXNlIE9nY0ZpbHRlck9wZXJhdG9yLlByb3BlcnR5SXNMZXNzVGhhbjpcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0xlc3NUaGFuT3JFcXVhbFRvOlxuICAgICAgICByZXR1cm4gJ2V4cHJlc3Npb24nO1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5Qcm9wZXJ0eUlzTGlrZTpcbiAgICAgICAgcmV0dXJuICdwYXR0ZXJuJztcbiAgICAgIGNhc2UgT2djRmlsdGVyT3BlcmF0b3IuUHJvcGVydHlJc0JldHdlZW46XG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXG4gICAgICAgICAgPyAnbG93ZXJCb3VuZGFyeSdcbiAgICAgICAgICA6IHBvcyAmJiBwb3MgPT09IDJcbiAgICAgICAgICA/ICd1cHBlckJvdW5kYXJ5J1xuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY2FzZSBPZ2NGaWx0ZXJPcGVyYXRvci5EdXJpbmc6XG4gICAgICAgIHJldHVybiBwb3MgJiYgcG9zID09PSAxXG4gICAgICAgICAgPyAnYmVnaW4nXG4gICAgICAgICAgOiBwb3MgJiYgcG9zID09PSAyXG4gICAgICAgICAgPyAnZW5kJ1xuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IHNlbGVjdG9yIG9mIG9nY0ZpbHRlcnNTZWxlY3RvcnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHVzaEJ1dHRvbkdyb3Vwc1wiICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAncHVzaEJ1dHRvbidcIj5cbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCIgKm5nSWY9XCJnZXRQdXNoQnV0dG9uc0dyb3VwcygpLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwdXNoQnV0dG9uc0dyb3VwXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRQdXNoQnV0dG9uc0dyb3VwcygpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIj57e3NlbGVjdG9yR3JvdXAudGl0bGV9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRQdXNoQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCI+XG4gICAgICAgIDxoND57e2J1bmRsZS50aXRsZX19PC9oND5cbiAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHVzaEJ1dHRvbnNcIiBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCIgYXBwZWFyYW5jZT1cImxlZ2FjeVwiIHZlcnRpY2FsPXt7YnVuZGxlSXNWZXJ0aWNhbChidW5kbGUpfX0gbXVsdGlwbGU9XCJ0cnVlXCI+XG4gICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0Zvcj1cImxldCBvZ2NQdXNoQnV0dG9uIG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxuICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NQdXNoQnV0dG9uKVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEJ1dHRvbkNvbG9yKG9nY1B1c2hCdXR0b24pXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY1B1c2hCdXR0b24uZW5hYmxlZFwiIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob2djUHVzaEJ1dHRvbiwgc2VsZWN0b3Iuc2VsZWN0b3JUeXBlKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djUHVzaEJ1dHRvblwiPnt7b2djUHVzaEJ1dHRvbi50aXRsZX19XG4gICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cbiAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNoZWNrYm94R3JvdXBzXCIgKm5nSWY9XCJzZWxlY3Rvci5zZWxlY3RvclR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImdyb3Vwc1NlbGVjdG9yXCIgKm5nSWY9XCJnZXRDaGVja2JveGVzR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoZWNrYm94ZXNHcm91cFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50Q2hlY2tib3hlc0dyb3VwXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2VsZWN0b3JHcm91cCBvZiBnZXRDaGVja2JveGVzR3JvdXBzKClcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiPnt7c2VsZWN0b3JHcm91cC50aXRsZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudENoZWNrYm94ZXNHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiPlxuICAgICAgICA8aDQ+e3tidW5kbGUudGl0bGV9fTwvaDQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveGVzIG1hdC10eXBvZ3JhcGh5XCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdGb3I9XCJsZXQgb2djQ2hlY2tib3ggb2YgYnVuZGxlLnNlbGVjdG9yc1wiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRUb29sVGlwKG9nY0NoZWNrYm94KVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJvZ2NDaGVja2JveC5lbmFibGVkXCIgKGNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZShvZ2NDaGVja2JveCwgc2VsZWN0b3Iuc2VsZWN0b3JUeXBlKVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwib2djQ2hlY2tib3hcIj57e29nY0NoZWNrYm94LnRpdGxlfX1cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwICpuZ0lmPVwiaXNMZXNzUmVzdWx0cyhidW5kbGUsICdjaGVja2JveCcpIHx8IGlzTW9yZVJlc3VsdHMoYnVuZGxlLCAnY2hlY2tib3gnKVwiPlxuICAgICAgICAgIDx1ICpuZ0lmPVwiaXNMZXNzUmVzdWx0cyhidW5kbGUsICdjaGVja2JveCcpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibGVzc1Jlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlMZXNzUmVzdWx0cygnY2hlY2tib3gnKVwiPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TGVzc1Jlc3VsdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC91PlxuICAgICAgICAgIDx1ICpuZ0lmPVwiaXNNb3JlUmVzdWx0cyhidW5kbGUsICdjaGVja2JveCcpXCJcbiAgICAgICAgICAgIGNsYXNzPVwibW9yZVJlc3VsdHMgbWF0LXR5cG9ncmFwaHlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlNb3JlUmVzdWx0cygnY2hlY2tib3gnKVwiPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TW9yZVJlc3VsdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC91PlxuICAgICAgICA8L3A+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyYWRpb0J1dHRvbkdyb3Vwc1wiICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAncmFkaW9CdXR0b24nXCI+XG4gICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiICpuZ0lmPVwiZ2V0UmFkaW9CdXR0b25zR3JvdXBzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhZGlvQnV0dG9uc0dyb3VwXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmxheWVyLmxlZ2VuZC5zZWxlY3RTdHlsZScgfCB0cmFuc2xhdGVcIiB0b29sdGlwLXBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgICAgIFsodmFsdWUpXT1cImN1cnJlbnRSYWRpb0J1dHRvbnNHcm91cFwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlbGVjdG9yR3JvdXAgb2YgZ2V0UmFkaW9CdXR0b25zR3JvdXBzKClcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0b3JHcm91cFwiPnt7c2VsZWN0b3JHcm91cC50aXRsZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidW5kbGUgb2YgY3VycmVudFJhZGlvQnV0dG9uc0dyb3VwLmNvbXB1dGVkU2VsZWN0b3JzXCI+XG4gICAgICAgIDxoND57e2J1bmRsZS50aXRsZX19PC9oND5cbiAgICAgICAgPG1hdC1yYWRpby1ncm91cFxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJhZGlvQnV0dG9uc1wiIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj5cbiAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cImJ1bmRsZS51bmZpbHRlcmVkXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZW1wdHlSYWRpb0J1dHRvbnMoKVwiPnt7ICdpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0Zvcj1cImxldCBvZ2NSYWRpb0J1dHRvbiBvZiBidW5kbGUuc2VsZWN0b3JzXCJcbiAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldFRvb2xUaXAob2djUmFkaW9CdXR0b24pXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiICBtYXRUb29sdGlwQ2xhc3M9XCJtYXRlcmlhbC10b29sdGlwXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cIm9nY1JhZGlvQnV0dG9uLmVuYWJsZWRcIiAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9nY1JhZGlvQnV0dG9uLCBzZWxlY3Rvci5zZWxlY3RvclR5cGUpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvZ2NSYWRpb0J1dHRvblwiPnt7b2djUmFkaW9CdXR0b24udGl0bGV9fVxuICAgICAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICA8cCAqbmdJZj1cImlzTGVzc1Jlc3VsdHMoYnVuZGxlLCAncmFkaW8nKSB8fCBpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ3JhZGlvJylcIj5cbiAgICAgICAgICAgIDx1ICpuZ0lmPVwiaXNMZXNzUmVzdWx0cyhidW5kbGUsICdyYWRpbycpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJsZXNzUmVzdWx0cyBtYXQtdHlwb2dyYXBoeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5TGVzc1Jlc3VsdHMoJ3JhZGlvJylcIj57eyAnaWdvLmdlby5maWx0ZXIuZGlzcGxheUxlc3NSZXN1bHRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC91PlxuICAgICAgICAgICAgPHUgKm5nSWY9XCJpc01vcmVSZXN1bHRzKGJ1bmRsZSwgJ3JhZGlvJylcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1vcmVSZXN1bHRzIG1hdC10eXBvZ3JhcGh5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRpc3BsYXlNb3JlUmVzdWx0cygncmFkaW8nKVwiPnt7ICdpZ28uZ2VvLmZpbHRlci5kaXNwbGF5TW9yZVJlc3VsdHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3U+XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdEdyb3Vwc1wiICpuZ0lmPVwic2VsZWN0b3Iuc2VsZWN0b3JUeXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBzU2VsZWN0b3JcIiAqbmdJZj1cImdldFNlbGVjdEdyb3VwcygpLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RHcm91cFwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5sYXllci5sZWdlbmQuc2VsZWN0U3R5bGUnIHwgdHJhbnNsYXRlXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50U2VsZWN0R3JvdXBcIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZWxlY3Rvckdyb3VwIG9mIGdldFNlbGVjdEdyb3VwcygpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdG9yR3JvdXBcIj57e3NlbGVjdG9yR3JvdXAudGl0bGV9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnVuZGxlIG9mIGN1cnJlbnRTZWxlY3RHcm91cC5jb21wdXRlZFNlbGVjdG9yc1wiPlxuICAgICAgICA8aDQ+e3tidW5kbGUudGl0bGV9fTwvaDQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHNTZWxlY3RvclwiPlxuICAgICAgICAgIDxtYXQtYnV0dG9uICpuZ0lmPVwiYnVuZGxlLnVuZmlsdGVyZWQgJiYgIWJ1bmRsZS5tdWx0aXBsZVwiXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmdlby5maWx0ZXIucmVzZXRGaWx0ZXJzJyB8IHRyYW5zbGF0ZVwiIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIiAgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZW1wdHlTZWxlY3QoKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJmaWx0ZXItcmVtb3ZlXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1idXR0b24+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1bmRsZS5tdWx0aXBsZTsgZWxzZSBub3RNdWx0aVwiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICNzZWxlY3Rpb24gW211bHRpcGxlXT1cImJ1bmRsZS5tdWx0aXBsZVwiIFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWxlY3RcIiBbKG5nTW9kZWwpXT1cImVuYWJsZWRzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94ZXMgbWF0LXR5cG9ncmFwaHlcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nSWY9XCJidW5kbGUubXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFsbFNlbGVjdGVkXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlQWxsU2VsZWN0aW9uKClcIj5Ub3VzXG4gICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb2djU2VsZWN0IG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NTZWxlY3QpXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcERlbGF5PVwiNTAwXCIgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAob25TZWxlY3Rpb25DaGFuZ2UpPVwib3B0aW9uQ2xpY2soKVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2djU2VsZWN0XCI+e3tvZ2NTZWxlY3QudGl0bGV9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vdE11bHRpPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJidW5kbGUudGl0bGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWxlY3RcIiBbKG5nTW9kZWwpXT1cImVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb2djU2VsZWN0IG9mIGJ1bmRsZS5zZWxlY3RvcnNcIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0VG9vbFRpcChvZ2NTZWxlY3QpXCIgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcERlbGF5PVwiNTAwXCIgbWF0VG9vbHRpcENsYXNzPVwibWF0ZXJpYWwtdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib2djU2VsZWN0XCI+e3tvZ2NTZWxlY3QudGl0bGV9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT5cblxuPGRpdiAqbmdJZj1cImlzVGVtcG9yYWxPcGVyYXRvcigpXCI+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8aDQ+e3sgJ2lnby5nZW8uZmlsdGVyLnJlcG9ydGluZ0RhdGUnIHwgdHJhbnNsYXRlIH19PC9oND5cbiAgPGlnby1vZ2MtZmlsdGVyLXRpbWVcbiAgICBbKGRhdGFzb3VyY2UpXT1cImRhdGFzb3VyY2VcIlxuICAgIFsoY3VycmVudEZpbHRlcildPVwiY3VycmVudEZpbHRlclwiXG4gICAgKGNoYW5nZVByb3BlcnR5KT1cImNoYW5nZVByb3BlcnR5KCRldmVudC52YWx1ZSwgJGV2ZW50LnBvcylcIj5cbiAgPC9pZ28tb2djLWZpbHRlci10aW1lPlxuPC9kaXY+Il19