@igo2/geo 1.14.2 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (493) 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/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +13 -11
  7. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +10 -10
  8. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +20 -17
  9. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +1 -1
  10. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +2 -2
  11. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +2 -2
  12. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +7 -12
  13. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +1 -1
  14. package/esm2020/lib/catalog/catalog.module.mjs +1 -1
  15. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
  16. package/esm2020/lib/catalog/shared/catalog.enum.mjs +1 -1
  17. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  18. package/esm2020/lib/catalog/shared/catalog.service.mjs +3 -5
  19. package/esm2020/lib/datasource/datasource.module.mjs +1 -1
  20. package/esm2020/lib/datasource/shared/capabilities.service.mjs +2 -2
  21. package/esm2020/lib/datasource/shared/datasource.service.mjs +27 -31
  22. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  25. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  27. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  29. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +1 -1
  30. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  32. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  34. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  36. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +1 -1
  37. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +1 -1
  39. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +1 -1
  41. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +1 -1
  43. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +1 -1
  45. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +1 -1
  47. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +1 -1
  49. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +1 -1
  50. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +1 -1
  52. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +1 -1
  53. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +1 -1
  55. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +1 -1
  57. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +1 -1
  58. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +1 -1
  59. package/esm2020/lib/datasource/shared/options/options.service.mjs +1 -1
  60. package/esm2020/lib/datasource/utils/index.mjs +1 -2
  61. package/esm2020/lib/datasource/utils/tilegrid.mjs +1 -1
  62. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +4 -10
  63. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +2 -2
  64. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +2 -2
  65. package/esm2020/lib/directions/directions-sources/directions-source.mjs +1 -1
  66. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +1 -1
  67. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +1 -1
  68. package/esm2020/lib/directions/directions.component.mjs +2 -2
  69. package/esm2020/lib/directions/directions.module.mjs +1 -1
  70. package/esm2020/lib/directions/shared/directions-source.service.mjs +1 -1
  71. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  72. package/esm2020/lib/directions/shared/directions.service.mjs +1 -1
  73. package/esm2020/lib/directions/shared/directions.utils.mjs +2 -2
  74. package/esm2020/lib/directions/shared/store.mjs +1 -1
  75. package/esm2020/lib/download/download-button/download-button.component.mjs +2 -2
  76. package/esm2020/lib/download/download.module.mjs +1 -1
  77. package/esm2020/lib/download/shared/download.interface.mjs +1 -1
  78. package/esm2020/lib/download/shared/download.service.mjs +5 -8
  79. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +2 -2
  80. package/esm2020/lib/draw/draw/draw-popup.component.mjs +3 -3
  81. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +2 -2
  82. package/esm2020/lib/draw/draw/draw.component.mjs +11 -10
  83. package/esm2020/lib/draw/draw/draw.module.mjs +1 -1
  84. package/esm2020/lib/draw/drawingTool.module.mjs +1 -1
  85. package/esm2020/lib/draw/shared/draw-icon.service.mjs +1 -1
  86. package/esm2020/lib/draw/shared/draw.enum.mjs +1 -17
  87. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  88. package/esm2020/lib/draw/shared/draw.utils.mjs +1 -1
  89. package/esm2020/lib/draw/shared/index.mjs +1 -2
  90. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +4 -5
  91. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +1 -1
  92. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +1 -1
  93. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +2 -2
  94. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +1 -1
  95. package/esm2020/lib/feature/feature.module.mjs +1 -1
  96. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  97. package/esm2020/lib/feature/shared/feature.utils.mjs +7 -5
  98. package/esm2020/lib/feature/shared/store.mjs +10 -1
  99. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +1 -1
  100. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +1 -1
  101. package/esm2020/lib/feature/shared/strategies/index.mjs +2 -1
  102. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +1 -1
  103. package/esm2020/lib/feature/shared/strategies/loading.mjs +1 -1
  104. package/esm2020/lib/feature/shared/strategies/search.mjs +150 -0
  105. package/esm2020/lib/feature/shared/strategies/selection.mjs +1 -1
  106. package/esm2020/lib/feature/shared/strategies.utils.mjs +1 -1
  107. package/esm2020/lib/filter/filter.module.mjs +1 -1
  108. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +2 -2
  109. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +2 -2
  110. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +2 -2
  111. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +2 -2
  112. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +2 -2
  113. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +2 -2
  114. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +2 -2
  115. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +1 -1
  116. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +2 -2
  117. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +1 -1
  118. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +1 -1
  119. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +1 -1
  120. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  121. package/esm2020/lib/filter/shared/ogc-filter.mjs +1 -1
  122. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +1 -1
  123. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +1 -1
  124. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +1 -1
  125. package/esm2020/lib/filter/shared/time-filter.enum.mjs +1 -1
  126. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  127. package/esm2020/lib/filter/shared/time-filter.service.mjs +1 -1
  128. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +5 -5
  129. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +6 -7
  130. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +2 -2
  131. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +2 -2
  132. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +2 -2
  133. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +2 -2
  134. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +1 -1
  135. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +2 -2
  136. package/esm2020/lib/geo.module.mjs +5 -1
  137. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +13 -12
  138. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +2 -2
  139. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +1 -1
  140. package/esm2020/lib/geometry/geometry.module.mjs +1 -1
  141. package/esm2020/lib/geometry/shared/controls/draw.mjs +1 -1
  142. package/esm2020/lib/geometry/shared/controls/modify.mjs +1 -1
  143. package/esm2020/lib/geometry/shared/controls/slice.mjs +1 -1
  144. package/esm2020/lib/geometry/shared/geometry.errors.mjs +1 -1
  145. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  146. package/esm2020/lib/geometry/shared/geometry.utils.mjs +1 -1
  147. package/esm2020/lib/import-export/export-button/export-button.component.mjs +2 -2
  148. package/esm2020/lib/import-export/import-export/import-export.component.mjs +53 -45
  149. package/esm2020/lib/import-export/import-export.module.mjs +5 -9
  150. package/esm2020/lib/import-export/index.mjs +1 -2
  151. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +31 -14
  152. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  153. package/esm2020/lib/import-export/shared/export.service.mjs +1 -1
  154. package/esm2020/lib/import-export/shared/export.type.mjs +1 -1
  155. package/esm2020/lib/import-export/shared/export.utils.mjs +8 -17
  156. package/esm2020/lib/import-export/shared/import.errors.mjs +1 -1
  157. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  158. package/esm2020/lib/import-export/shared/import.service.mjs +1 -1
  159. package/esm2020/lib/import-export/shared/import.utils.mjs +58 -91
  160. package/esm2020/lib/layer/index.mjs +1 -2
  161. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +2 -2
  162. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
  163. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +2 -2
  164. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +1 -1
  165. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +2 -2
  166. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +1 -1
  167. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +2 -2
  168. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +1 -1
  169. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +2 -2
  170. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  171. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +1 -1
  172. package/esm2020/lib/layer/layer.module.mjs +6 -11
  173. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  174. package/esm2020/lib/layer/shared/index.mjs +1 -3
  175. package/esm2020/lib/layer/shared/layer.service.mjs +80 -29
  176. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  177. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  178. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  179. package/esm2020/lib/layer/shared/layers/image-layer.mjs +6 -7
  180. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
  181. package/esm2020/lib/layer/shared/layers/layer.mjs +5 -3
  182. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  183. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +1 -1
  184. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  185. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +155 -6
  186. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  187. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +1 -1
  188. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +2 -2
  189. package/esm2020/lib/layer/utils/image-watcher.mjs +3 -6
  190. package/esm2020/lib/layer/utils/layer.utils.mjs +2 -2
  191. package/esm2020/lib/layer/utils/outputLegend.mjs +3 -2
  192. package/esm2020/lib/layer/utils/tile-watcher.mjs +1 -1
  193. package/esm2020/lib/layer/utils/vector-watcher.mjs +1 -1
  194. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +1 -1
  195. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +2 -2
  196. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +2 -2
  197. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +2 -2
  198. package/esm2020/lib/map/info-section/info-section.component.mjs +2 -2
  199. package/esm2020/lib/map/map-browser/map-browser.component.mjs +3 -3
  200. package/esm2020/lib/map/map-center/map-center.component.mjs +2 -2
  201. package/esm2020/lib/map/map.module.mjs +1 -1
  202. package/esm2020/lib/map/menu-button/menu-button.component.mjs +3 -3
  203. package/esm2020/lib/map/offline-button/offline-button.component.mjs +34 -57
  204. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +2 -2
  205. package/esm2020/lib/map/shared/controllers/controller.mjs +1 -1
  206. package/esm2020/lib/map/shared/controllers/geolocation.mjs +151 -36
  207. package/esm2020/lib/map/shared/controllers/view.mjs +1 -1
  208. package/esm2020/lib/map/shared/hover-feature.directive.mjs +24 -73
  209. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +3 -3
  210. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +1 -1
  211. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  212. package/esm2020/lib/map/shared/map.mjs +7 -5
  213. package/esm2020/lib/map/shared/map.service.mjs +1 -1
  214. package/esm2020/lib/map/shared/map.utils.mjs +1 -1
  215. package/esm2020/lib/map/shared/mapOffline.directive.mjs +50 -115
  216. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  217. package/esm2020/lib/map/shared/projection.service.mjs +1 -1
  218. package/esm2020/lib/map/shared/projection.utils.mjs +1 -1
  219. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  220. package/esm2020/lib/map/utils/layer-watcher.mjs +1 -1
  221. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +24 -35
  222. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +2 -2
  223. package/esm2020/lib/measure/measure.module.mjs +1 -1
  224. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +1 -1
  225. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +2 -2
  226. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +2 -2
  227. package/esm2020/lib/measure/measurer/measurer.component.mjs +2 -2
  228. package/esm2020/lib/measure/measurer/measurer.module.mjs +1 -1
  229. package/esm2020/lib/measure/shared/measure.enum.mjs +1 -1
  230. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  231. package/esm2020/lib/measure/shared/measure.utils.mjs +1 -1
  232. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +3 -3
  233. package/esm2020/lib/metadata/metadata.module.mjs +1 -1
  234. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  235. package/esm2020/lib/metadata/shared/metadata.service.mjs +1 -1
  236. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +4 -4
  237. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +1 -1
  238. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  239. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +2 -2
  240. package/esm2020/lib/offline/index.mjs +2 -1
  241. package/esm2020/lib/offline/layerDB/index.mjs +3 -0
  242. package/esm2020/lib/offline/layerDB/layerDB.interface.mjs +2 -0
  243. package/esm2020/lib/offline/layerDB/layerDB.service.mjs +76 -0
  244. package/esm2020/lib/offline/shared/geo-network.service.mjs +1 -1
  245. package/esm2020/lib/overlay/overlay.module.mjs +1 -1
  246. package/esm2020/lib/overlay/shared/index.mjs +1 -2
  247. package/esm2020/lib/overlay/shared/overlay.directive.mjs +1 -1
  248. package/esm2020/lib/overlay/shared/overlay.enum.mjs +1 -1
  249. package/esm2020/lib/overlay/shared/overlay.mjs +1 -1
  250. package/esm2020/lib/overlay/shared/overlay.service.mjs +1 -1
  251. package/esm2020/lib/overlay/shared/overlay.utils.mjs +2 -88
  252. package/esm2020/lib/print/print/print.component.mjs +6 -20
  253. package/esm2020/lib/print/print-form/print-form.component.mjs +197 -111
  254. package/esm2020/lib/print/print.module.mjs +1 -1
  255. package/esm2020/lib/print/shared/geopdf.mjs +1 -1
  256. package/esm2020/lib/print/shared/index.mjs +1 -1
  257. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  258. package/esm2020/lib/print/shared/print.service.mjs +85 -35
  259. package/esm2020/lib/print/shared/print.type.mjs +1 -1
  260. package/esm2020/lib/query/query.module.mjs +1 -1
  261. package/esm2020/lib/query/shared/query-search-source.mjs +1 -1
  262. package/esm2020/lib/query/shared/query-search-source.providers.mjs +1 -1
  263. package/esm2020/lib/query/shared/query.directive.mjs +1 -1
  264. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  265. package/esm2020/lib/query/shared/query.service.mjs +3 -5
  266. package/esm2020/lib/query/shared/query.utils.mjs +1 -1
  267. package/esm2020/lib/search/search-bar/search-bar.component.mjs +3 -3
  268. package/esm2020/lib/search/search-bar/search-bar.module.mjs +1 -1
  269. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +1 -1
  270. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +4 -4
  271. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +88 -31
  272. package/esm2020/lib/search/search-results/search-results-item.component.mjs +36 -13
  273. package/esm2020/lib/search/search-results/search-results.component.mjs +172 -58
  274. package/esm2020/lib/search/search-results/search-results.module.mjs +5 -1
  275. package/esm2020/lib/search/search-selector/search-selector.component.mjs +2 -2
  276. package/esm2020/lib/search/search-selector/search-selector.module.mjs +1 -1
  277. package/esm2020/lib/search/search-settings/search-settings.component.mjs +54 -56
  278. package/esm2020/lib/search/search-settings/search-settings.module.mjs +1 -1
  279. package/esm2020/lib/search/search.module.mjs +1 -1
  280. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +3 -30
  281. package/esm2020/lib/search/shared/search-source-service.providers.mjs +1 -1
  282. package/esm2020/lib/search/shared/search-source.service.mjs +9 -1
  283. package/esm2020/lib/search/shared/search.enums.mjs +1 -1
  284. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  285. package/esm2020/lib/search/shared/search.service.mjs +1 -1
  286. package/esm2020/lib/search/shared/search.utils.mjs +3 -3
  287. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  288. package/esm2020/lib/search/shared/sources/coordinates.mjs +1 -1
  289. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +4 -4
  290. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  291. package/esm2020/lib/search/shared/sources/icherche.mjs +1 -1
  292. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +1 -1
  293. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  294. package/esm2020/lib/search/shared/sources/ilayer.mjs +1 -1
  295. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +1 -1
  296. package/esm2020/lib/search/shared/sources/index.mjs +4 -1
  297. package/esm2020/lib/search/shared/sources/nominatim.mjs +2 -2
  298. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +1 -1
  299. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  300. package/esm2020/lib/search/shared/sources/source.mjs +31 -1
  301. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  302. package/esm2020/lib/search/shared/sources/storedqueries.mjs +1 -1
  303. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +1 -1
  304. package/esm2020/lib/search/shared/sources/workspace.interfaces.mjs +2 -0
  305. package/esm2020/lib/search/shared/sources/workspace.mjs +186 -0
  306. package/esm2020/lib/search/shared/sources/workspace.providers.mjs +26 -0
  307. package/esm2020/lib/style/index.mjs +5 -0
  308. package/esm2020/lib/style/shared/datasource/esri-style-generator.mjs +357 -0
  309. package/esm2020/lib/style/shared/datasource/index.mjs +2 -0
  310. package/esm2020/lib/style/shared/feature/feature-style.mjs +141 -0
  311. package/esm2020/lib/style/shared/feature/index.mjs +2 -0
  312. package/esm2020/lib/style/shared/font.enum.mjs +17 -0
  313. package/esm2020/lib/style/shared/index.mjs +5 -0
  314. package/esm2020/lib/style/shared/overlay/index.mjs +3 -0
  315. package/esm2020/lib/style/shared/overlay/overlay-marker-style.utils.mjs +43 -0
  316. package/esm2020/lib/style/shared/overlay/overlay-style.utils.mjs +88 -0
  317. package/esm2020/lib/style/shared/vector/commonVectorStyle.mjs +75 -0
  318. package/esm2020/lib/style/shared/vector/conversion.utils.mjs +27 -0
  319. package/esm2020/lib/style/shared/vector/index.mjs +4 -0
  320. package/esm2020/lib/style/shared/vector/vector-style.interface.mjs +2 -0
  321. package/esm2020/lib/style/style-list/index.mjs +5 -0
  322. package/esm2020/lib/style/style-list/style-list.interface.mjs +2 -0
  323. package/esm2020/lib/style/style-list/style-list.module.mjs +23 -0
  324. package/esm2020/lib/style/style-list/style-list.provider.mjs +21 -0
  325. package/esm2020/lib/style/style-list/style-list.service.mjs +51 -0
  326. package/esm2020/lib/style/style-modal/drawing/index.mjs +2 -0
  327. package/esm2020/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +288 -0
  328. package/esm2020/lib/style/style-modal/index.mjs +5 -0
  329. package/esm2020/lib/style/style-modal/layer/index.mjs +2 -0
  330. package/esm2020/lib/style/style-modal/layer/style-modal-layer.component.mjs +187 -0
  331. package/esm2020/lib/style/style-modal/layer-button/index.mjs +2 -0
  332. package/esm2020/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +44 -0
  333. package/esm2020/lib/style/style-modal/shared/index.mjs +2 -0
  334. package/esm2020/lib/style/style-modal/shared/style-modal.interface.mjs +2 -0
  335. package/esm2020/lib/style/style-service/draw-style.service.mjs +187 -0
  336. package/esm2020/lib/style/style-service/index.mjs +3 -0
  337. package/esm2020/lib/style/style-service/style.service.mjs +356 -0
  338. package/esm2020/lib/style/style.module.mjs +74 -0
  339. package/esm2020/lib/toast/toast.component.mjs +3 -3
  340. package/esm2020/lib/toast/toast.module.mjs +1 -1
  341. package/esm2020/lib/utils/id-generator.mjs +1 -1
  342. package/esm2020/lib/utils/index.mjs +1 -3
  343. package/esm2020/lib/wkt/shared/wkt.service.mjs +15 -15
  344. package/esm2020/lib/wkt/wkt.module.mjs +1 -1
  345. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +2 -2
  346. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +1 -1
  347. package/esm2020/lib/workspace/confirmation-popup/index.mjs +1 -1
  348. package/esm2020/lib/workspace/shared/edition-workspace.mjs +1 -1
  349. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +19 -34
  350. package/esm2020/lib/workspace/shared/feature-workspace.mjs +1 -1
  351. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +10 -3
  352. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +1 -1
  353. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +2 -2
  354. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +3 -3
  355. package/esm2020/lib/workspace/shared/workspace.utils.mjs +1 -1
  356. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +2 -2
  357. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +1 -1
  358. package/esm2020/lib/workspace/widgets/widgets.mjs +1 -1
  359. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +1 -1
  360. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
  361. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +1 -1
  362. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +1 -1
  363. package/esm2020/lib/workspace/workspace.module.mjs +1 -1
  364. package/esm2020/public_api.mjs +3 -1
  365. package/fesm2015/igo2-geo.mjs +6707 -5364
  366. package/fesm2015/igo2-geo.mjs.map +1 -1
  367. package/fesm2020/igo2-geo.mjs +7617 -6346
  368. package/fesm2020/igo2-geo.mjs.map +1 -1
  369. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +5 -14
  370. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +2 -5
  371. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +3 -9
  372. package/lib/catalog/catalog-library/catalog-library.component.d.ts +2 -3
  373. package/lib/catalog/shared/catalog.interface.d.ts +10 -0
  374. package/lib/datasource/shared/datasources/datasource.interface.d.ts +13 -0
  375. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +5 -0
  376. package/lib/datasource/utils/index.d.ts +0 -1
  377. package/lib/download/shared/download.service.d.ts +2 -3
  378. package/lib/draw/draw/draw.component.d.ts +3 -2
  379. package/lib/draw/shared/draw.enum.d.ts +0 -15
  380. package/lib/draw/shared/index.d.ts +0 -1
  381. package/lib/feature/shared/feature.interfaces.d.ts +5 -0
  382. package/lib/feature/shared/feature.utils.d.ts +4 -2
  383. package/lib/feature/shared/store.d.ts +7 -0
  384. package/lib/feature/shared/strategies/index.d.ts +1 -0
  385. package/lib/feature/shared/strategies/search.d.ts +55 -0
  386. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +2 -3
  387. package/lib/geo.module.d.ts +3 -2
  388. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +5 -9
  389. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +3 -3
  390. package/lib/import-export/import-export/import-export.component.d.ts +9 -4
  391. package/lib/import-export/import-export.module.d.ts +1 -2
  392. package/lib/import-export/index.d.ts +0 -1
  393. package/lib/import-export/shared/drop-geo-file.directive.d.ts +10 -7
  394. package/lib/import-export/shared/export.utils.d.ts +4 -4
  395. package/lib/import-export/shared/import.interface.d.ts +2 -0
  396. package/lib/import-export/shared/import.utils.d.ts +14 -12
  397. package/lib/layer/index.d.ts +0 -1
  398. package/lib/layer/layer.module.d.ts +19 -20
  399. package/lib/layer/shared/index.d.ts +0 -2
  400. package/lib/layer/shared/layer.service.d.ts +8 -5
  401. package/lib/layer/shared/layers/image-layer.d.ts +2 -3
  402. package/lib/layer/shared/layers/layer.d.ts +5 -1
  403. package/lib/layer/shared/layers/layer.interface.d.ts +2 -0
  404. package/lib/layer/shared/layers/vector-layer.d.ts +18 -2
  405. package/lib/layer/shared/layers/vector-layer.interface.d.ts +8 -7
  406. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +2 -4
  407. package/lib/layer/utils/image-watcher.d.ts +2 -3
  408. package/lib/map/offline-button/offline-button.component.d.ts +10 -18
  409. package/lib/map/shared/controllers/geolocation.d.ts +17 -2
  410. package/lib/map/shared/hover-feature.directive.d.ts +2 -10
  411. package/lib/map/shared/map.d.ts +2 -2
  412. package/lib/map/shared/mapOffline.directive.d.ts +4 -7
  413. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +3 -6
  414. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  415. package/lib/offline/index.d.ts +1 -0
  416. package/lib/offline/layerDB/index.d.ts +2 -0
  417. package/lib/offline/layerDB/layerDB.interface.d.ts +7 -0
  418. package/lib/offline/layerDB/layerDB.service.d.ts +36 -0
  419. package/lib/overlay/shared/index.d.ts +0 -1
  420. package/lib/overlay/shared/overlay.utils.d.ts +0 -11
  421. package/lib/print/print-form/print-form.component.d.ts +2 -0
  422. package/lib/print/shared/print.service.d.ts +6 -0
  423. package/lib/search/search-results/save-feature-dialog.component.d.ts +1 -1
  424. package/lib/search/search-results/search-results-add-button.component.d.ts +10 -2
  425. package/lib/search/search-results/search-results-item.component.d.ts +5 -0
  426. package/lib/search/search-results/search-results.component.d.ts +5 -1
  427. package/lib/search/search-results/search-results.module.d.ts +11 -10
  428. package/lib/search/shared/search-pointer-summary.directive.d.ts +0 -9
  429. package/lib/search/shared/search-source.service.d.ts +7 -0
  430. package/lib/search/shared/search.interfaces.d.ts +1 -1
  431. package/lib/search/shared/sources/coordinates.providers.d.ts +3 -3
  432. package/lib/search/shared/sources/index.d.ts +3 -0
  433. package/lib/search/shared/sources/source.d.ts +6 -0
  434. package/lib/search/shared/sources/workspace.d.ts +33 -0
  435. package/lib/search/shared/sources/workspace.interfaces.d.ts +9 -0
  436. package/lib/search/shared/sources/workspace.providers.d.ts +17 -0
  437. package/lib/style/index.d.ts +4 -0
  438. package/lib/style/shared/datasource/index.d.ts +1 -0
  439. package/lib/style/shared/feature/feature-style.d.ts +18 -0
  440. package/lib/style/shared/feature/index.d.ts +1 -0
  441. package/lib/style/shared/font.enum.d.ts +15 -0
  442. package/lib/style/shared/index.d.ts +4 -0
  443. package/lib/style/shared/overlay/index.d.ts +2 -0
  444. package/lib/style/shared/overlay/overlay-style.utils.d.ts +19 -0
  445. package/lib/{utils → style/shared/vector}/commonVectorStyle.d.ts +4 -4
  446. package/lib/style/shared/vector/conversion.utils.d.ts +22 -0
  447. package/lib/style/shared/vector/index.d.ts +3 -0
  448. package/lib/style/shared/vector/vector-style.interface.d.ts +69 -0
  449. package/lib/style/style-modal/drawing/index.d.ts +1 -0
  450. package/lib/style/style-modal/drawing/style-modal-drawing.component.d.ts +31 -0
  451. package/lib/style/style-modal/index.d.ts +4 -0
  452. package/lib/style/style-modal/layer/index.d.ts +1 -0
  453. package/lib/style/style-modal/layer/style-modal-layer.component.d.ts +30 -0
  454. package/lib/style/style-modal/layer-button/index.d.ts +1 -0
  455. package/lib/style/style-modal/layer-button/style-modal-layer-button.component.d.ts +14 -0
  456. package/lib/style/style-modal/shared/index.d.ts +1 -0
  457. package/lib/style/style-modal/shared/style-modal.interface.d.ts +17 -0
  458. package/lib/{draw/shared → style/style-service}/draw-style.service.d.ts +3 -4
  459. package/lib/style/style-service/index.d.ts +2 -0
  460. package/lib/{layer/shared → style/style-service}/style.service.d.ts +5 -5
  461. package/lib/style/style.module.d.ts +22 -0
  462. package/lib/utils/index.d.ts +0 -2
  463. package/lib/workspace/shared/edition-workspace.service.d.ts +3 -4
  464. package/lib/workspace/shared/wms-workspace.service.d.ts +1 -1
  465. package/ngcc.config.js +3 -3
  466. package/package.json +17 -11
  467. package/public_api.d.ts +2 -0
  468. package/style/geo.theming.scss +12 -12
  469. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +0 -357
  470. package/esm2020/lib/draw/shared/draw-style.service.mjs +0 -190
  471. package/esm2020/lib/import-export/style-list/index.mjs +0 -5
  472. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +0 -2
  473. package/esm2020/lib/import-export/style-list/style-list.module.mjs +0 -23
  474. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +0 -21
  475. package/esm2020/lib/import-export/style-list/style-list.service.mjs +0 -51
  476. package/esm2020/lib/layer/shared/style.service.mjs +0 -356
  477. package/esm2020/lib/layer/shared/vector-style.interface.mjs +0 -2
  478. package/esm2020/lib/layer/style-modal/index.mjs +0 -2
  479. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +0 -288
  480. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +0 -69
  481. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +0 -2
  482. package/esm2020/lib/utils/commonVectorStyle.mjs +0 -75
  483. package/lib/layer/shared/vector-style.interface.d.ts +0 -38
  484. package/lib/layer/style-modal/index.d.ts +0 -1
  485. package/lib/layer/style-modal/style-modal.component.d.ts +0 -42
  486. package/lib/utils/commonVectorStyle.interface.d.ts +0 -16
  487. /package/lib/{datasource/utils → style/shared/datasource}/esri-style-generator.d.ts +0 -0
  488. /package/lib/{overlay/shared → style/shared/overlay}/overlay-marker-style.utils.d.ts +0 -0
  489. /package/lib/{import-export → style}/style-list/index.d.ts +0 -0
  490. /package/lib/{import-export → style}/style-list/style-list.interface.d.ts +0 -0
  491. /package/lib/{import-export → style}/style-list/style-list.module.d.ts +0 -0
  492. /package/lib/{import-export → style}/style-list/style-list.provider.d.ts +0 -0
  493. /package/lib/{import-export → style}/style-list/style-list.service.d.ts +0 -0
@@ -8,6 +8,7 @@ import * as olinteraction from 'ol/interaction';
8
8
  import { getUid } from 'ol/util';
9
9
  import proj4 from 'proj4';
10
10
  import { BehaviorSubject, skipWhile } from 'rxjs';
11
+ import { VectorLayer } from '../../layer/shared/layers';
11
12
  import { Overlay } from '../../overlay/shared/overlay';
12
13
  import { LayerWatcher } from '../utils/layer-watcher';
13
14
  import { MapViewController } from './controllers/view';
@@ -19,8 +20,9 @@ export class IgoMap {
19
20
  constructor(options, storageService, configService) {
20
21
  this.storageService = storageService;
21
22
  this.configService = configService;
22
- this.offlineButtonToggle$ = new BehaviorSubject(false);
23
+ this.forcedOffline$ = new BehaviorSubject(false);
23
24
  this.layers$ = new BehaviorSubject([]);
25
+ this.layersAddedByClick$ = new BehaviorSubject(undefined);
24
26
  this.swipeEnabled$ = new BehaviorSubject(false);
25
27
  this.mapCenter$ = new BehaviorSubject(false);
26
28
  this.selectedFeatures$ = new BehaviorSubject(null);
@@ -260,6 +262,9 @@ export class IgoMap {
260
262
  const newLayers = this.layers$.value.slice(0);
261
263
  const layersToRemove = [];
262
264
  layers.forEach((layer) => {
265
+ if (layer instanceof VectorLayer) {
266
+ layer.removeLayerFromIDB();
267
+ }
263
268
  const index = newLayers.indexOf(layer);
264
269
  if (index >= 0) {
265
270
  layersToRemove.push(layer);
@@ -400,8 +405,5 @@ export class IgoMap {
400
405
  getLayerIndex(layer) {
401
406
  return this.layers.findIndex((_layer) => _layer === layer);
402
407
  }
403
- onOfflineToggle(offline) {
404
- this.offlineButtonToggle$.next(offline);
405
- }
406
408
  }
407
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbWFwL3NoYXJlZC9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLG9CQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxLQUFLLGFBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBSS9CLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUszRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBU3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3JFLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixpQ0FBaUMsRUFDbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUU5Qiw4RUFBOEU7QUFDOUUsb0NBQW9DO0FBQ3BDLE1BQU0sT0FBTyxNQUFNO0lBZ0NqQixZQUNFLE9BQW9CLEVBQ1osY0FBK0IsRUFDL0IsYUFBNkI7UUFEN0IsbUJBQWMsR0FBZCxjQUFjLENBQWlCO1FBQy9CLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQWpDaEMseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDM0QsWUFBTyxHQUFHLElBQUksZUFBZSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1FBUTNDLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDcEQsZUFBVSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2pELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBT3RELG1CQUFjLEdBQXdCO1lBQzVDLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7U0FDakMsQ0FBQztRQWNBLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQWxCRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQWNELElBQUk7UUFDRixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRTtnQkFDckMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssSUFBSTtvQkFDaEUsQ0FBQyxDQUFDLEVBQUU7b0JBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBMEIsQ0FBQztnQkFDaEUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7YUFDekQ7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtnQkFDbkMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEtBQUssSUFBSTtvQkFDNUQsQ0FBQyxDQUFDLEVBQUU7b0JBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBd0IsQ0FBQztnQkFDNUQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7YUFDckQ7U0FDRjtRQUNELElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUN2QyxZQUFZLEdBQUc7Z0JBQ2Isa0JBQWtCLEVBQUUsS0FBSztnQkFDekIsZUFBZSxFQUFFLEtBQUs7Z0JBQ3RCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLGNBQWMsRUFBRSxLQUFLO2dCQUNyQixhQUFhLEVBQUUsS0FBSztnQkFDcEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLFNBQVMsRUFBRSxLQUFLO2FBQ2pCLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUM7WUFDbEIsWUFBWSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ2xELFFBQVE7U0FDVCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQztZQUMxQyxZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSx3QkFBd0IsQ0FDdkQsSUFBSSxFQUNKO2dCQUNFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRTthQUNsRCxFQUNELElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUMxRTtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ2hDLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFO29CQUMxQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO3dCQUM5QixLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFOzRCQUMvQixpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN2RCxDQUFDLENBQUMsQ0FBQztxQkFDSjtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFHRCxTQUFTLENBQUMsRUFBVTtRQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzlDO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUF1QjtRQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQy9CO1lBQ0UsSUFBSSxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUU7U0FDNUIsRUFDRCxXQUFXLENBQUMsYUFBYSxFQUFFLENBQzVCLENBQUM7UUFFRixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO1lBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7U0FDL0Q7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUNoQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLE9BQXVCO1FBQzdCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQ3pDO1FBRUQsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRSxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0QixJQUFJLE9BQU8sRUFBRTtZQUNYLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFO2dCQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzthQUNyRTtZQUVELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDbEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDeEI7U0FDRjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBeUI7UUFDdEMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLE9BQU87U0FDUjtRQUVELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7WUFDckIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxLQUFLLElBQUk7Z0JBQ2hELENBQUMsQ0FBQyxFQUFFO2dCQUNKLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUEwQixDQUFDO1lBQ2hELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ25CLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJO2dCQUM1QyxDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBd0IsQ0FBQztZQUM1QyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztTQUNyRDtRQUVELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RSxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLENBQUMsVUFBa0M7UUFDMUMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLFVBQWtDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBZ0I7UUFDOUIsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU87U0FDUjtRQUVELEtBQUssTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3JDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO1FBRUQsU0FBUyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNuQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQzFFLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQ25DLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FDMUUsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsWUFBWSxDQUFDLEVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNyQixDQUFDLEtBQVksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FDdkQsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNyQixDQUFDLEtBQVksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FDakUsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUEwQjtRQUMxQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsUUFBUSxDQUFDLEtBQVksRUFBRSxJQUFJLEdBQUcsSUFBSTtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxNQUFlLEVBQUUsSUFBSSxHQUFHLElBQUk7UUFDcEMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sV0FBVyxHQUFHLE1BQU07YUFDdkIsR0FBRyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFBRSxPQUFPO2FBQUU7WUFDdkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU07Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUztvQkFDZixDQUFDLENBQUMscUJBQXFCLEVBQUU7b0JBQ3pCLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsS0FBWTtRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLE1BQWU7UUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDOUIsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7Z0JBQ2QsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ3ZELGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQy9CLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ25ELElBQUksV0FBVyxJQUFJLENBQUMsRUFBRTt3QkFDcEIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ2xDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMEJBQTBCLENBQUMsUUFBZSxFQUFFLGNBQXVCO1FBQ2pFLElBQUksb0JBQW9CLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUN6QixvQkFBb0IsR0FBRyxRQUFRLENBQUM7U0FDakM7UUFDRCxNQUFNLElBQUksR0FBRywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDN0YsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDeEIsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBWTtRQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWU7UUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsS0FBWTtRQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFlO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxLQUFLLE1BQU0sS0FBSyxJQUFJLGFBQWEsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFZLEVBQUUsSUFBWSxFQUFFLEVBQVU7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDeEMsT0FBTztTQUNSO1FBRUQsS0FBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDeEIsT0FBTyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7UUFFNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxVQUFVLENBQUMsS0FBWSxFQUFFLFlBQW9CO1FBQ25ELElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7WUFDL0IsYUFBYSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDN0IsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNwQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztTQUNwQjtRQUVELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDcEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDeEIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ3hCLEdBQUcsSUFBSSxDQUFDLE1BQU07aUJBQ1gsTUFBTSxDQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsOEJBQThCO2FBQ3hGO2lCQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUN4QixDQUFDO1lBQ0YsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztTQUM3QztRQUVELElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQztTQUN0RDtRQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTNCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWEsQ0FBQyxLQUFZO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxTQUFTLENBQUMsTUFBZTtRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxrQkFBa0IsQ0FBQyxNQUFlO1FBQ3hDLDRCQUE0QjtRQUM1QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLENBQUMsTUFBYSxFQUFFLE1BQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNoRSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxhQUFhLENBQUMsS0FBWTtRQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBYSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvbE1hcCBmcm9tICdvbC9NYXAnO1xuaW1wb3J0IG9sVmlldyBmcm9tICdvbC9WaWV3JztcbmltcG9ydCBvbENvbnRyb2xBdHRyaWJ1dGlvbiBmcm9tICdvbC9jb250cm9sL0F0dHJpYnV0aW9uJztcbmltcG9ydCBvbENvbnRyb2xTY2FsZUxpbmUgZnJvbSAnb2wvY29udHJvbC9TY2FsZUxpbmUnO1xuaW1wb3J0ICogYXMgb2xwcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0ICogYXMgb2xwcm9qNCBmcm9tICdvbC9wcm9qL3Byb2o0JztcbmltcG9ydCBPbFByb2plY3Rpb24gZnJvbSAnb2wvcHJvai9Qcm9qZWN0aW9uJztcbmltcG9ydCAqIGFzIG9saW50ZXJhY3Rpb24gZnJvbSAnb2wvaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHtnZXRVaWR9IGZyb20gJ29sL3V0aWwnO1xuaW1wb3J0IG9sTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvTGF5ZXInO1xuaW1wb3J0IG9sU291cmNlIGZyb20gJ29sL3NvdXJjZS9Tb3VyY2UnO1xuXG5pbXBvcnQgcHJvajQgZnJvbSAncHJvajQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBza2lwV2hpbGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU3ViamVjdFN0YXR1cyB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi8uLi9vdmVybGF5L3NoYXJlZC9vdmVybGF5JztcblxuaW1wb3J0IHsgTGF5ZXJXYXRjaGVyIH0gZnJvbSAnLi4vdXRpbHMvbGF5ZXItd2F0Y2hlcic7XG5pbXBvcnQge1xuICBNYXBWaWV3T3B0aW9ucyxcbiAgTWFwT3B0aW9ucyxcbiAgTWFwQXR0cmlidXRpb25PcHRpb25zLFxuICBNYXBTY2FsZUxpbmVPcHRpb25zLFxuICBNYXBFeHRlbnQsXG4gIE1hcENvbnRyb2xzT3B0aW9uc1xufSBmcm9tICcuL21hcC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWFwVmlld0NvbnRyb2xsZXIgfSBmcm9tICcuL2NvbnRyb2xsZXJzL3ZpZXcnO1xuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9mZWF0dXJlLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgTWFwR2VvbG9jYXRpb25Db250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVycy9nZW9sb2NhdGlvbic7XG5pbXBvcnQgeyBTdG9yYWdlU2VydmljZSwgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHsgT2JqZWN0RXZlbnQgfSBmcm9tICdvbC9PYmplY3QnO1xuaW1wb3J0IHtcbiAgZ2V0QWxsQ2hpbGRMYXllcnNCeURlbGV0aW9uLFxuICBnZXRSb290UGFyZW50QnlEZWxldGlvbixcbiAgaGFuZGxlTGF5ZXJQcm9wZXJ0eUNoYW5nZSxcbiAgaW5pdExheWVyU3luY0Zyb21Sb290UGFyZW50TGF5ZXJzXG59IGZyb20gJy4vbGlua2VkTGF5ZXJzLnV0aWxzJztcblxuLy8gVE9ETzogVGhpcyBjbGFzcyBpcyBtZXNzeS4gQ2xlYXJseSBkZWZpbmUgaXQncyBzY29wZSBhbmQgdGhlIG1hcCBicm93c2VyJ3MuXG4vLyBNb3ZlIHNvbWUgc3R1ZmYgaW50byBjb250cm9sbGVycy5cbmV4cG9ydCBjbGFzcyBJZ29NYXAge1xuICBwdWJsaWMgb2w6IG9sTWFwO1xuICBwdWJsaWMgb2ZmbGluZUJ1dHRvblRvZ2dsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxheWVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExheWVyW10+KFtdKTtcbiAgcHVibGljIHN0YXR1cyQ6IFN1YmplY3Q8U3ViamVjdFN0YXR1cz47XG4gIHB1YmxpYyBwcm9wZXJ0eUNoYW5nZSQ6IFN1YmplY3Q8e2V2ZW50Ok9iamVjdEV2ZW50LCBsYXllcjogTGF5ZXJ9PjtcbiAgcHVibGljIG92ZXJsYXk6IE92ZXJsYXk7XG4gIHB1YmxpYyBxdWVyeVJlc3VsdHNPdmVybGF5OiBPdmVybGF5O1xuICBwdWJsaWMgc2VhcmNoUmVzdWx0c092ZXJsYXk6IE92ZXJsYXk7XG4gIHB1YmxpYyB2aWV3Q29udHJvbGxlcjogTWFwVmlld0NvbnRyb2xsZXI7XG4gIHB1YmxpYyBnZW9sb2NhdGlvbkNvbnRyb2xsZXI6IE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlcjtcbiAgcHVibGljIHN3aXBlRW5hYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIG1hcENlbnRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIHNlbGVjdGVkRmVhdHVyZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMYXllcltdPihudWxsKTtcblxuICBwdWJsaWMgYnVmZmVyRGF0YVNvdXJjZTogRmVhdHVyZURhdGFTb3VyY2U7XG5cbiAgcHJpdmF0ZSBsYXllcldhdGNoZXI6IExheWVyV2F0Y2hlcjtcbiAgcHJpdmF0ZSBvcHRpb25zOiBNYXBPcHRpb25zO1xuICBwcml2YXRlIG1hcFZpZXdPcHRpb25zOiBNYXBWaWV3T3B0aW9ucztcbiAgcHJpdmF0ZSBkZWZhdWx0T3B0aW9uczogUGFydGlhbDxNYXBPcHRpb25zPiA9IHtcbiAgICBjb250cm9sczogeyBhdHRyaWJ1dGlvbjogZmFsc2UgfVxuICB9O1xuXG4gIGdldCBsYXllcnMoKTogTGF5ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBwcm9qZWN0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRyb2xsZXIuZ2V0T2xQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9ucz86IE1hcE9wdGlvbnMsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZT86IFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZT86IENvbmZpZ1NlcnZpY2UpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgICB0aGlzLmxheWVyV2F0Y2hlciA9IG5ldyBMYXllcldhdGNoZXIoKTtcbiAgICB0aGlzLnN0YXR1cyQgPSB0aGlzLmxheWVyV2F0Y2hlci5zdGF0dXMkO1xuICAgIHRoaXMucHJvcGVydHlDaGFuZ2UkID0gdGhpcy5sYXllcldhdGNoZXIucHJvcGVydHlDaGFuZ2UkO1xuICAgIG9scHJvajQucmVnaXN0ZXIocHJvajQpO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICBjb25zdCBjb250cm9scyA9IFtdO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuY29udHJvbHMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29udHJvbHMuYXR0cmlidXRpb24pIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRpb25PcHQgPSAodGhpcy5vcHRpb25zLmNvbnRyb2xzLmF0dHJpYnV0aW9uID09PSB0cnVlXG4gICAgICAgICAgPyB7fVxuICAgICAgICAgIDogdGhpcy5vcHRpb25zLmNvbnRyb2xzLmF0dHJpYnV0aW9uKSBhcyBNYXBBdHRyaWJ1dGlvbk9wdGlvbnM7XG4gICAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbEF0dHJpYnV0aW9uKGF0dHJpYnV0aW9uT3B0KSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRyb2xzLnNjYWxlTGluZSkge1xuICAgICAgICBjb25zdCBzY2FsZUxpbmVPcHQgPSAodGhpcy5vcHRpb25zLmNvbnRyb2xzLnNjYWxlTGluZSA9PT0gdHJ1ZVxuICAgICAgICAgID8ge31cbiAgICAgICAgICA6IHRoaXMub3B0aW9ucy5jb250cm9scy5zY2FsZUxpbmUpIGFzIE1hcFNjYWxlTGluZU9wdGlvbnM7XG4gICAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbFNjYWxlTGluZShzY2FsZUxpbmVPcHQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGludGVyYWN0aW9ucyA9IHt9O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuaW50ZXJhY3Rpb25zID09PSBmYWxzZSkge1xuICAgICAgaW50ZXJhY3Rpb25zID0ge1xuICAgICAgICBhbHRTaGlmdERyYWdSb3RhdGU6IGZhbHNlLFxuICAgICAgICBkb3VibGVDbGlja1pvb206IGZhbHNlLFxuICAgICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgICAgIG1vdXNlV2hlZWxab29tOiBmYWxzZSxcbiAgICAgICAgc2hpZnREcmFnWm9vbTogZmFsc2UsXG4gICAgICAgIGRyYWdQYW46IGZhbHNlLFxuICAgICAgICBwaW5jaFJvdGF0ZTogZmFsc2UsXG4gICAgICAgIHBpbmNoWm9vbTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5vbCA9IG5ldyBvbE1hcCh7XG4gICAgICBpbnRlcmFjdGlvbnM6IG9saW50ZXJhY3Rpb24uZGVmYXVsdHMoaW50ZXJhY3Rpb25zKSxcbiAgICAgIGNvbnRyb2xzXG4gICAgfSk7XG5cbiAgICB0aGlzLnNldFZpZXcodGhpcy5vcHRpb25zLnZpZXcgfHwge30pO1xuICAgIHRoaXMudmlld0NvbnRyb2xsZXIgPSBuZXcgTWFwVmlld0NvbnRyb2xsZXIoe1xuICAgICAgc3RhdGVIaXN0b3J5OiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy52aWV3Q29udHJvbGxlci5zZXRPbE1hcCh0aGlzLm9sKTtcbiAgICB0aGlzLm92ZXJsYXkgPSBuZXcgT3ZlcmxheSh0aGlzKTtcbiAgICB0aGlzLnF1ZXJ5UmVzdWx0c092ZXJsYXkgPSBuZXcgT3ZlcmxheSh0aGlzKTtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdHNPdmVybGF5ID0gbmV3IE92ZXJsYXkodGhpcyk7XG4gICAgdGhpcy5vbC5vbmNlKCdyZW5kZXJjb21wbGV0ZScsICgpID0+IHtcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25Db250cm9sbGVyID0gbmV3IE1hcEdlb2xvY2F0aW9uQ29udHJvbGxlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAge1xuICAgICAgICAgIHByb2plY3Rpb246IHRoaXMudmlld0NvbnRyb2xsZXIuZ2V0T2xQcm9qZWN0aW9uKClcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZSxcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlKTtcbiAgICAgIHRoaXMuZ2VvbG9jYXRpb25Db250cm9sbGVyLnNldE9sTWFwKHRoaXMub2wpO1xuICAgICAgaWYgKHRoaXMuZ2VvbG9jYXRpb25Db250cm9sbGVyKSB7XG4gICAgICAgIHRoaXMuZ2VvbG9jYXRpb25Db250cm9sbGVyLnVwZGF0ZUdlb2xvY2F0aW9uT3B0aW9ucyh0aGlzLm1hcFZpZXdPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGF5ZXJzJC5zdWJzY3JpYmUoKGxheWVycykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycykge1xuICAgICAgICAgIGlmIChsYXllci5vcHRpb25zLmxpbmtlZExheWVycykge1xuICAgICAgICAgICAgbGF5ZXIub2wub25jZSgncG9zdHJlbmRlcicsICgpID0+IHtcbiAgICAgICAgICAgICAgaW5pdExheWVyU3luY0Zyb21Sb290UGFyZW50TGF5ZXJzKHRoaXMsIHRoaXMubGF5ZXJzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnZpZXdDb250cm9sbGVyLm1vbml0b3JSb3RhdGlvbigpO1xuICB9KTtcbiAgdGhpcy5wcm9wZXJ0eUNoYW5nZSQucGlwZShza2lwV2hpbGUoKHBjKSA9PiAhcGMpKS5zdWJzY3JpYmUocCA9PiBoYW5kbGVMYXllclByb3BlcnR5Q2hhbmdlKHRoaXMsIHAuZXZlbnQsIHAubGF5ZXIpKTtcbiAgfVxuXG5cbiAgc2V0VGFyZ2V0KGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9sLnNldFRhcmdldChpZCk7XG4gICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubGF5ZXJXYXRjaGVyLnN1YnNjcmliZSgoKSA9PiB7IH0sIG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxheWVyV2F0Y2hlci51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZpZXcob3B0aW9uczogTWFwVmlld09wdGlvbnMpIHtcbiAgICBjb25zdCBjdXJyZW50VmlldyA9IHRoaXMub2wuZ2V0VmlldygpO1xuICAgIGNvbnN0IHZpZXdPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgem9vbTogY3VycmVudFZpZXcuZ2V0Wm9vbSgpXG4gICAgICB9LFxuICAgICAgY3VycmVudFZpZXcuZ2V0UHJvcGVydGllcygpXG4gICAgKTtcblxuICAgIHRoaXMuc2V0VmlldyhPYmplY3QuYXNzaWduKHZpZXdPcHRpb25zLCBvcHRpb25zKSk7XG4gICAgaWYgKG9wdGlvbnMubWF4Wm9vbU9uRXh0ZW50KSB7XG4gICAgICB0aGlzLnZpZXdDb250cm9sbGVyLm1heFpvb21PbkV4dGVudCA9IG9wdGlvbnMubWF4Wm9vbU9uRXh0ZW50O1xuICAgIH1cbiAgICB0aGlzLm1hcFZpZXdPcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG1hcCB2aWV3XG4gICAqIEBwYXJhbSBvcHRpb25zIE1hcCB2aWV3IG9wdGlvbnNcbiAgICovXG4gIHNldFZpZXcob3B0aW9uczogTWFwVmlld09wdGlvbnMpIHtcbiAgICBpZiAodGhpcy52aWV3Q29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnZpZXdDb250cm9sbGVyLmNsZWFyU3RhdGVIaXN0b3J5KCk7XG4gICAgfVxuXG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBjb25zdHJhaW5SZXNvbHV0aW9uOiB0cnVlIH0sIG9wdGlvbnMpO1xuICAgIGNvbnN0IHZpZXcgPSBuZXcgb2xWaWV3KG9wdGlvbnMpO1xuICAgIHRoaXMub2wuc2V0Vmlldyh2aWV3KTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5tYXhMYXllclpvb21FeHRlbnQpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udHJvbGxlci5tYXhMYXllclpvb21FeHRlbnQgPSBvcHRpb25zLm1heExheWVyWm9vbUV4dGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY2VudGVyKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3Rpb24gPSB2aWV3LmdldFByb2plY3Rpb24oKS5nZXRDb2RlKCk7XG4gICAgICAgIGNvbnN0IGNlbnRlciA9IG9scHJvai5mcm9tTG9uTGF0KG9wdGlvbnMuY2VudGVyLCBwcm9qZWN0aW9uKTtcbiAgICAgICAgdmlldy5zZXRDZW50ZXIoY2VudGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb250cm9scyh2YWx1ZTogTWFwQ29udHJvbHNPcHRpb25zKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9scyA9IFtdO1xuICAgIGlmICh2YWx1ZS5hdHRyaWJ1dGlvbikge1xuICAgICAgY29uc3QgYXR0cmlidXRpb25PcHQgPSAodmFsdWUuYXR0cmlidXRpb24gPT09IHRydWVcbiAgICAgICAgPyB7fVxuICAgICAgICA6IHZhbHVlLmF0dHJpYnV0aW9uKSBhcyBNYXBBdHRyaWJ1dGlvbk9wdGlvbnM7XG4gICAgICBjb250cm9scy5wdXNoKG5ldyBvbENvbnRyb2xBdHRyaWJ1dGlvbihhdHRyaWJ1dGlvbk9wdCkpO1xuICAgIH1cbiAgICBpZiAodmFsdWUuc2NhbGVMaW5lKSB7XG4gICAgICBjb25zdCBzY2FsZUxpbmVPcHQgPSAodmFsdWUuc2NhbGVMaW5lID09PSB0cnVlXG4gICAgICAgID8ge31cbiAgICAgICAgOiB2YWx1ZS5zY2FsZUxpbmUpIGFzIE1hcFNjYWxlTGluZU9wdGlvbnM7XG4gICAgICBjb250cm9scy5wdXNoKG5ldyBvbENvbnRyb2xTY2FsZUxpbmUoc2NhbGVMaW5lT3B0KSk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudENvbnRyb2xzID0gT2JqZWN0LmFzc2lnbihbXSwgdGhpcy5vbC5nZXRDb250cm9scygpLmdldEFycmF5KCkpO1xuICAgIGN1cnJlbnRDb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgdGhpcy5vbC5yZW1vdmVDb250cm9sKGNvbnRyb2wpO1xuICAgIH0pO1xuICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICB0aGlzLm9sLmFkZENvbnRyb2woY29udHJvbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVwcmVjYXRlZFxuICAgKiBUT0RPOiBNb3ZlIHRvIFZpZXdDb250cm9sbGVyIGFuZCB1cGRhdGUgZXZlcnkgcGxhY2UgaXQncyB1c2VkXG4gICAqL1xuICBnZXRDZW50ZXIocHJvamVjdGlvbj86IHN0cmluZyB8IE9sUHJvamVjdGlvbik6IFtudW1iZXIsIG51bWJlcl0ge1xuICAgIHJldHVybiB0aGlzLnZpZXdDb250cm9sbGVyLmdldENlbnRlcihwcm9qZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXByZWNhdGVkXG4gICAqIFRPRE86IE1vdmUgdG8gVmlld0NvbnRyb2xsZXIgYW5kIHVwZGF0ZSBldmVyeSBwbGFjZSBpdCdzIHVzZWRcbiAgICovXG4gIGdldEV4dGVudChwcm9qZWN0aW9uPzogc3RyaW5nIHwgT2xQcm9qZWN0aW9uKTogTWFwRXh0ZW50IHtcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udHJvbGxlci5nZXRFeHRlbnQocHJvamVjdGlvbik7XG4gIH1cblxuICAvLyBUT0RPOiBNb3ZlIHRvIFZpZXdDb250cm9sbGVyIGFuZCB1cGRhdGUgZXZlcnkgcGxhY2UgaXQncyB1c2VkXG4gIGdldFpvb20oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy52aWV3Q29udHJvbGxlci5nZXRab29tKCk7XG4gIH1cblxuICBjaGFuZ2VCYXNlTGF5ZXIoYmFzZUxheWVyOiBMYXllcikge1xuICAgIGlmICghYmFzZUxheWVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBibCBvZiB0aGlzLmdldEJhc2VMYXllcnMoKSkge1xuICAgICAgYmwudmlzaWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGJhc2VMYXllci52aXNpYmxlID0gdHJ1ZTtcblxuICAgIHRoaXMudmlld0NvbnRyb2xsZXIub2xWaWV3LnNldE1pblpvb20oXG4gICAgICBiYXNlTGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLm1pblpvb20gfHwgKHRoaXMub3B0aW9ucy52aWV3IHx8IHt9KS5taW5ab29tXG4gICAgKTtcbiAgICB0aGlzLnZpZXdDb250cm9sbGVyLm9sVmlldy5zZXRNYXhab29tKFxuICAgICAgYmFzZUxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5tYXhab29tIHx8ICh0aGlzLm9wdGlvbnMudmlldyB8fCB7fSkubWF4Wm9vbVxuICAgICk7XG4gIH1cblxuICBnZXRCYXNlTGF5ZXJzKCk6IExheWVyW10ge1xuICAgIHJldHVybiB0aGlzLmxheWVycy5maWx0ZXIoKGxheWVyOiBMYXllcikgPT4gbGF5ZXIuYmFzZUxheWVyID09PSB0cnVlKTtcbiAgfVxuXG4gIGdldExheWVyQnlJZChpZDogc3RyaW5nKTogTGF5ZXIge1xuICAgIHJldHVybiB0aGlzLmxheWVycy5maW5kKChsYXllcjogTGF5ZXIpID0+IGxheWVyLmlkICYmIGxheWVyLmlkID09PSBpZCk7XG4gIH1cblxuICBnZXRMYXllckJ5QWxpYXMoYWxpYXM6IHN0cmluZyk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnMuZmluZChcbiAgICAgIChsYXllcjogTGF5ZXIpID0+IGxheWVyLmFsaWFzICYmIGxheWVyLmFsaWFzID09PSBhbGlhc1xuICAgICk7XG4gIH1cblxuICBnZXRMYXllckJ5T2xVSWQob2xVSWQ6IHN0cmluZyk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5sYXllcnMuZmluZChcbiAgICAgIChsYXllcjogTGF5ZXIpID0+IGdldFVpZChsYXllci5vbCkgJiYgZ2V0VWlkKGxheWVyLm9sKSA9PT0gb2xVSWRcbiAgICApO1xuICB9XG5cbiAgZ2V0TGF5ZXJCeU9sTGF5ZXIob2xMYXllcjogb2xMYXllcjxvbFNvdXJjZT4pOiBMYXllciB7XG4gICAgY29uc3Qgb2xVSWQgPSBnZXRVaWQob2xMYXllcik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF5ZXJCeU9sVUlkKG9sVUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgbGF5ZXJcbiAgICogQHBhcmFtIGxheWVyIExheWVyIHRvIGFkZFxuICAgKiBAcGFyYW0gcHVzaCBERVBSRUNBVEVEXG4gICAqL1xuICBhZGRMYXllcihsYXllcjogTGF5ZXIsIHB1c2ggPSB0cnVlKSB7XG4gICAgdGhpcy5hZGRMYXllcnMoW2xheWVyXSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG1hbnkgbGF5ZXJzXG4gICAqIEBwYXJhbSBsYXllcnMgTGF5ZXJzIHRvIGFkZFxuICAgKiBAcGFyYW0gcHVzaCBERVBSRUNBVEVEXG4gICAqL1xuICBhZGRMYXllcnMobGF5ZXJzOiBMYXllcltdLCBwdXNoID0gdHJ1ZSkge1xuICAgIGxldCBvZmZzZXRaSW5kZXggPSAwO1xuICAgIGxldCBvZmZzZXRCYXNlTGF5ZXJaSW5kZXggPSAwO1xuICAgIGNvbnN0IGFkZGVkTGF5ZXJzID0gbGF5ZXJzXG4gICAgICAubWFwKChsYXllcjogTGF5ZXIpID0+IHtcbiAgICAgICAgaWYgKCFsYXllcikgeyByZXR1cm47IH1cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gbGF5ZXIuekluZGV4XG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBsYXllci5iYXNlTGF5ZXJcbiAgICAgICAgICAgID8gb2Zmc2V0QmFzZUxheWVyWkluZGV4KytcbiAgICAgICAgICAgIDogb2Zmc2V0WkluZGV4Kys7XG4gICAgICAgIHJldHVybiB0aGlzLmRvQWRkTGF5ZXIobGF5ZXIsIG9mZnNldCk7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigobGF5ZXI6IExheWVyIHwgdW5kZWZpbmVkKSA9PiBsYXllciAhPT0gdW5kZWZpbmVkKTtcbiAgICB0aGlzLnNldExheWVycyhbXS5jb25jYXQodGhpcy5sYXllcnMsIGFkZGVkTGF5ZXJzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgc2luZ2xlIGxheWVyXG4gICAqIEBwYXJhbSBsYXllciBMYXllciB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZUxheWVyKGxheWVyOiBMYXllcikge1xuICAgIHRoaXMucmVtb3ZlTGF5ZXJzKFtsYXllcl0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBtYW55IGxheWVyc1xuICAgKiBAcGFyYW0gbGF5ZXJzIExheWVycyB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZUxheWVycyhsYXllcnM6IExheWVyW10pIHtcbiAgICBjb25zdCBuZXdMYXllcnMgPSB0aGlzLmxheWVycyQudmFsdWUuc2xpY2UoMCk7XG4gICAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBbXTtcbiAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXI6IExheWVyKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IG5ld0xheWVycy5pbmRleE9mKGxheWVyKTtcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgIGxheWVyc1RvUmVtb3ZlLnB1c2gobGF5ZXIpO1xuICAgICAgICBuZXdMYXllcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5oYW5kbGVMaW5rZWRMYXllcnNEZWxldGlvbihsYXllciwgbGF5ZXJzVG9SZW1vdmUpO1xuICAgICAgICBsYXllcnNUb1JlbW92ZS5tYXAobGlua2VkTGF5ZXIgPT4ge1xuICAgICAgICAgIGNvbnN0IGxpbmtlZEluZGV4ID0gbmV3TGF5ZXJzLmluZGV4T2YobGlua2VkTGF5ZXIpO1xuICAgICAgICAgIGlmIChsaW5rZWRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBuZXdMYXllcnMuc3BsaWNlKGxpbmtlZEluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGF5ZXJzVG9SZW1vdmUuZm9yRWFjaCgobGF5ZXI6IExheWVyKSA9PiB0aGlzLmRvUmVtb3ZlTGF5ZXIobGF5ZXIpKTtcbiAgICB0aGlzLnNldExheWVycyhuZXdMYXllcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgbGlzdCBvZiBsaW5rZWQgbGF5ZXJzIHRvIGRlbGV0ZVxuICAgKiBAcGFyYW0gc3JjTGF5ZXIgTGF5ZXIgdGhhdCBoYXMgdHJpZ2dlcmVkIHRoZSBkZWxldGlvblxuICAgKiBAcGFyYW0gbGF5ZXJzVG9SZW1vdmUgbGlzdCB0byBhcHBlbmQgdGhlIGxheWVyIHRvIGRlbGV0ZSBpbnRvXG4gICAqL1xuICBoYW5kbGVMaW5rZWRMYXllcnNEZWxldGlvbihzcmNMYXllcjogTGF5ZXIsIGxheWVyc1RvUmVtb3ZlOiBMYXllcltdKSB7XG4gICAgbGV0IHJvb3RQYXJlbnRCeURlbGV0aW9uID0gZ2V0Um9vdFBhcmVudEJ5RGVsZXRpb24odGhpcywgc3JjTGF5ZXIpO1xuICAgIGlmICghcm9vdFBhcmVudEJ5RGVsZXRpb24pIHtcbiAgICAgIHJvb3RQYXJlbnRCeURlbGV0aW9uID0gc3JjTGF5ZXI7XG4gICAgfVxuICAgIGNvbnN0IGNsYmQgPSBnZXRBbGxDaGlsZExheWVyc0J5RGVsZXRpb24odGhpcywgcm9vdFBhcmVudEJ5RGVsZXRpb24sIFtyb290UGFyZW50QnlEZWxldGlvbl0pO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgY2xiZCkge1xuICAgICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgbGF5ZXJzXG4gICAqL1xuICByZW1vdmVBbGxMYXllcnMoKSB7XG4gICAgdGhpcy5sYXllcnMuZm9yRWFjaCgobGF5ZXI6IExheWVyKSA9PiB0aGlzLmRvUmVtb3ZlTGF5ZXIobGF5ZXIpKTtcbiAgICB0aGlzLmxheWVycyQubmV4dChbXSk7XG4gIH1cblxuICByYWlzZUxheWVyKGxheWVyOiBMYXllcikge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRMYXllckluZGV4KGxheWVyKTtcbiAgICBpZiAoaW5kZXggPiAxKSB7XG4gICAgICB0aGlzLm1vdmVMYXllcihsYXllciwgaW5kZXgsIGluZGV4IC0gMSk7XG4gICAgfVxuICB9XG5cbiAgcmFpc2VMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnMpIHtcbiAgICAgIHRoaXMucmFpc2VMYXllcihsYXllcik7XG4gICAgfVxuICB9XG5cbiAgbG93ZXJMYXllcihsYXllcjogTGF5ZXIpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0TGF5ZXJJbmRleChsYXllcik7XG4gICAgaWYgKGluZGV4IDwgdGhpcy5sYXllcnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlTGF5ZXIobGF5ZXIsIGluZGV4LCBpbmRleCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGxvd2VyTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xuICAgIGNvbnN0IHJldmVyc2VMYXllcnMgPSBsYXllcnMucmV2ZXJzZSgpO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgcmV2ZXJzZUxheWVycykge1xuICAgICAgdGhpcy5sb3dlckxheWVyKGxheWVyKTtcbiAgICB9XG4gIH1cblxuICBtb3ZlTGF5ZXIobGF5ZXI6IExheWVyLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpIHtcbiAgICBjb25zdCBsYXllclRvID0gdGhpcy5sYXllcnNbdG9dO1xuICAgIGNvbnN0IHpJbmRleFRvID0gbGF5ZXJUby56SW5kZXg7XG4gICAgY29uc3QgekluZGV4RnJvbSA9IGxheWVyLnpJbmRleDtcblxuICAgIGlmIChsYXllclRvLmJhc2VMYXllciB8fCBsYXllci5iYXNlTGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsYXllci56SW5kZXggPSB6SW5kZXhUbztcbiAgICBsYXllclRvLnpJbmRleCA9IHpJbmRleEZyb207XG5cbiAgICB0aGlzLmxheWVyc1t0b10gPSBsYXllcjtcbiAgICB0aGlzLmxheWVyc1tmcm9tXSA9IGxheWVyVG87XG4gICAgdGhpcy5sYXllcnMkLm5leHQodGhpcy5sYXllcnMuc2xpY2UoMCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGxheWVyIHRvIHRoZSBPTCBtYXAgYW5kIHN0YXJ0IHdhdGNoaW5nLiBJZiB0aGUgbGF5ZXIgaXMgYWxyZWFkeVxuICAgKiBhZGRlZCB0byB0aGlzIG1hcCwgbWFrZSBpdCB2aXNpYmxlIGJ1dCBkb24ndCBhZGQgaXQgb25lIGFnYWluLlxuICAgKiBAcGFyYW0gbGF5ZXIgTGF5ZXJcbiAgICogQHJldHVybnMgVGhlIGxheWVyIGFkZGVkLCBpZiBhbnlcbiAgICovXG4gIHByaXZhdGUgZG9BZGRMYXllcihsYXllcjogTGF5ZXIsIG9mZnNldFpJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGxheWVyLmJhc2VMYXllciAmJiBsYXllci52aXNpYmxlKSB7XG4gICAgICB0aGlzLmNoYW5nZUJhc2VMYXllcihsYXllcik7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdMYXllciA9IHRoaXMuZ2V0TGF5ZXJCeUlkKGxheWVyLmlkKTtcbiAgICBpZiAoZXhpc3RpbmdMYXllciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleGlzdGluZ0xheWVyLnZpc2libGUgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghbGF5ZXIuYmFzZUxheWVyICYmIGxheWVyLnpJbmRleCkge1xuICAgICAgbGF5ZXIuekluZGV4ICs9IDEwO1xuICAgIH1cblxuICAgIGlmIChsYXllci56SW5kZXggPT09IHVuZGVmaW5lZCB8fCBsYXllci56SW5kZXggPT09IDApIHtcbiAgICAgIGNvbnN0IG1heFpJbmRleCA9IE1hdGgubWF4KFxuICAgICAgICBsYXllci5iYXNlTGF5ZXIgPyAwIDogMTAsXG4gICAgICAgIC4uLnRoaXMubGF5ZXJzXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChsKSA9PiBsLmJhc2VMYXllciA9PT0gbGF5ZXIuYmFzZUxheWVyICYmIGwuekluZGV4IDwgMjAwIC8vIHpJbmRleCA+IDIwMCA9IHN5c3RlbSBsYXllclxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKChsKSA9PiBsLnpJbmRleClcbiAgICAgICk7XG4gICAgICBsYXllci56SW5kZXggPSBtYXhaSW5kZXggKyAxICsgb2Zmc2V0WkluZGV4O1xuICAgIH1cblxuICAgIGlmIChsYXllci5iYXNlTGF5ZXIgJiYgbGF5ZXIuekluZGV4ID4gOSkge1xuICAgICAgbGF5ZXIuekluZGV4ID0gMTA7IC8vIGJhc2VsYXllciBtdXN0IGhhdmUgekluZGV4IDwgMTBcbiAgICB9XG5cbiAgICBsYXllci5zZXRNYXAodGhpcyk7XG4gICAgdGhpcy5sYXllcldhdGNoZXIud2F0Y2hMYXllcihsYXllcik7XG4gICAgdGhpcy5vbC5hZGRMYXllcihsYXllci5vbCk7XG5cbiAgICByZXR1cm4gbGF5ZXI7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgbGF5ZXIgZnJvbSB0aGUgT0wgbWFwIGFuZCBzdG9wIHdhdGNoaW5nXG4gICAqIEBwYXJhbSBsYXllciBMYXllclxuICAgKi9cbiAgcHJpdmF0ZSBkb1JlbW92ZUxheWVyKGxheWVyOiBMYXllcikge1xuICAgIHRoaXMubGF5ZXJXYXRjaGVyLnVud2F0Y2hMYXllcihsYXllcik7XG4gICAgdGhpcy5vbC5yZW1vdmVMYXllcihsYXllci5vbCk7XG4gICAgbGF5ZXIuc2V0TWFwKHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBsYXllcnMgb2JzZXJ2YWJsZVxuICAgKiBAcGFyYW0gbGF5ZXJzIExheWVyc1xuICAgKi9cbiAgcHJpdmF0ZSBzZXRMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XG4gICAgdGhpcy5sYXllcnMkLm5leHQodGhpcy5zb3J0TGF5ZXJzQnlaSW5kZXgobGF5ZXJzKS5zbGljZSgwKSk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCBsYXllcnMgYnkgZGVzY2VuZGluZyB6SW5kZXhcbiAgICogQHBhcmFtIGxheWVycyBBcnJheSBvZiBsYXllcnNcbiAgICogQHJldHVybnMgVGhlIG9yaWdpbmFsIGFycmF5LCBzb3J0ZWQgYnkgekluZGV4XG4gICAqL1xuICBwcml2YXRlIHNvcnRMYXllcnNCeVpJbmRleChsYXllcnM6IExheWVyW10pIHtcbiAgICAvLyBTb3J0IGJ5IGRlc2NlbmRpbmcgekluZGV4XG4gICAgcmV0dXJuIGxheWVycy5zb3J0KFxuICAgICAgKGxheWVyMTogTGF5ZXIsIGxheWVyMjogTGF5ZXIpID0+IGxheWVyMi56SW5kZXggLSBsYXllcjEuekluZGV4XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGF5ZXIgaW5kZXggaW4gdGhlIG1hcCdzIGluZW5yIGFycmF5IG9mIGxheWVyc1xuICAgKiBAcGFyYW0gbGF5ZXIgTGF5ZXJcbiAgICogQHJldHVybnMgVGhlIGxheWVyIGluZGV4XG4gICAqL1xuICBwcml2YXRlIGdldExheWVySW5kZXgobGF5ZXI6IExheWVyKSB7XG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzLmZpbmRJbmRleCgoX2xheWVyOiBMYXllcikgPT4gX2xheWVyID09PSBsYXllcik7XG4gIH1cblxuICBvbk9mZmxpbmVUb2dnbGUob2ZmbGluZTogYm9vbGVhbikge1xuICAgIHRoaXMub2ZmbGluZUJ1dHRvblRvZ2dsZSQubmV4dChvZmZsaW5lKTtcbiAgfVxufVxuIl19
409
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbWFwL3NoYXJlZC9tYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sUUFBUSxDQUFDO0FBQzNCLE9BQU8sTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUM3QixPQUFPLG9CQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sa0JBQWtCLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFDbEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxLQUFLLGFBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBSS9CLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBVyxNQUFNLE1BQU0sQ0FBQztBQUkzRCxPQUFPLEVBQVMsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdyRSxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsaUNBQWlDLEVBQ2xDLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsOEVBQThFO0FBQzlFLG9DQUFvQztBQUNwQyxNQUFNLE9BQU8sTUFBTTtJQWlDakIsWUFDRSxPQUFvQixFQUNaLGNBQStCLEVBQy9CLGFBQTZCO1FBRDdC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O0lBRUQ7OztPQUdHO0lBQ0ssU0FBUyxDQUFDLE1BQWU7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssa0JBQWtCLENBQUMsTUFBZTtRQUN4Qyw0QkFBNEI7UUFDNUIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixDQUFDLE1BQWEsRUFBRSxNQUFhLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FDaEUsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssYUFBYSxDQUFDLEtBQVk7UUFDaEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvbE1hcCBmcm9tICdvbC9NYXAnO1xyXG5pbXBvcnQgb2xWaWV3IGZyb20gJ29sL1ZpZXcnO1xyXG5pbXBvcnQgb2xDb250cm9sQXR0cmlidXRpb24gZnJvbSAnb2wvY29udHJvbC9BdHRyaWJ1dGlvbic7XHJcbmltcG9ydCBvbENvbnRyb2xTY2FsZUxpbmUgZnJvbSAnb2wvY29udHJvbC9TY2FsZUxpbmUnO1xyXG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XHJcbmltcG9ydCAqIGFzIG9scHJvajQgZnJvbSAnb2wvcHJvai9wcm9qNCc7XHJcbmltcG9ydCBPbFByb2plY3Rpb24gZnJvbSAnb2wvcHJvai9Qcm9qZWN0aW9uJztcclxuaW1wb3J0ICogYXMgb2xpbnRlcmFjdGlvbiBmcm9tICdvbC9pbnRlcmFjdGlvbic7XHJcbmltcG9ydCB7Z2V0VWlkfSBmcm9tICdvbC91dGlsJztcclxuaW1wb3J0IG9sTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvTGF5ZXInO1xyXG5pbXBvcnQgb2xTb3VyY2UgZnJvbSAnb2wvc291cmNlL1NvdXJjZSc7XHJcblxyXG5pbXBvcnQgcHJvajQgZnJvbSAncHJvajQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIHNraXBXaGlsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgU3ViamVjdFN0YXR1cyB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuXHJcbmltcG9ydCB7IExheWVyLCBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMnO1xyXG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnLi4vLi4vb3ZlcmxheS9zaGFyZWQvb3ZlcmxheSc7XHJcblxyXG5pbXBvcnQgeyBMYXllcldhdGNoZXIgfSBmcm9tICcuLi91dGlscy9sYXllci13YXRjaGVyJztcclxuaW1wb3J0IHtcclxuICBNYXBWaWV3T3B0aW9ucyxcclxuICBNYXBPcHRpb25zLFxyXG4gIE1hcEF0dHJpYnV0aW9uT3B0aW9ucyxcclxuICBNYXBTY2FsZUxpbmVPcHRpb25zLFxyXG4gIE1hcEV4dGVudCxcclxuICBNYXBDb250cm9sc09wdGlvbnNcclxufSBmcm9tICcuL21hcC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBNYXBWaWV3Q29udHJvbGxlciB9IGZyb20gJy4vY29udHJvbGxlcnMvdmlldyc7XHJcbmltcG9ydCB7IEZlYXR1cmVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZmVhdHVyZS1kYXRhc291cmNlJztcclxuaW1wb3J0IHsgTWFwR2VvbG9jYXRpb25Db250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVycy9nZW9sb2NhdGlvbic7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlLCBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IE9iamVjdEV2ZW50IH0gZnJvbSAnb2wvT2JqZWN0JztcclxuaW1wb3J0IHtcclxuICBnZXRBbGxDaGlsZExheWVyc0J5RGVsZXRpb24sXHJcbiAgZ2V0Um9vdFBhcmVudEJ5RGVsZXRpb24sXHJcbiAgaGFuZGxlTGF5ZXJQcm9wZXJ0eUNoYW5nZSxcclxuICBpbml0TGF5ZXJTeW5jRnJvbVJvb3RQYXJlbnRMYXllcnNcclxufSBmcm9tICcuL2xpbmtlZExheWVycy51dGlscyc7XHJcblxyXG4vLyBUT0RPOiBUaGlzIGNsYXNzIGlzIG1lc3N5LiBDbGVhcmx5IGRlZmluZSBpdCdzIHNjb3BlIGFuZCB0aGUgbWFwIGJyb3dzZXIncy5cclxuLy8gTW92ZSBzb21lIHN0dWZmIGludG8gY29udHJvbGxlcnMuXHJcbmV4cG9ydCBjbGFzcyBJZ29NYXAge1xyXG4gIHB1YmxpYyBvbDogb2xNYXA7XHJcbiAgcHVibGljIGZvcmNlZE9mZmxpbmUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIGxheWVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExheWVyW10+KFtdKTtcclxuICBwdWJsaWMgbGF5ZXJzQWRkZWRCeUNsaWNrJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGF5ZXJbXT4odW5kZWZpbmVkKTtcclxuICBwdWJsaWMgc3RhdHVzJDogU3ViamVjdDxTdWJqZWN0U3RhdHVzPjtcclxuICBwdWJsaWMgcHJvcGVydHlDaGFuZ2UkOiBTdWJqZWN0PHtldmVudDpPYmplY3RFdmVudCwgbGF5ZXI6IExheWVyfT47XHJcbiAgcHVibGljIG92ZXJsYXk6IE92ZXJsYXk7XHJcbiAgcHVibGljIHF1ZXJ5UmVzdWx0c092ZXJsYXk6IE92ZXJsYXk7XHJcbiAgcHVibGljIHNlYXJjaFJlc3VsdHNPdmVybGF5OiBPdmVybGF5O1xyXG4gIHB1YmxpYyB2aWV3Q29udHJvbGxlcjogTWFwVmlld0NvbnRyb2xsZXI7XHJcbiAgcHVibGljIGdlb2xvY2F0aW9uQ29udHJvbGxlcjogTWFwR2VvbG9jYXRpb25Db250cm9sbGVyO1xyXG4gIHB1YmxpYyBzd2lwZUVuYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIG1hcENlbnRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgc2VsZWN0ZWRGZWF0dXJlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PExheWVyW10+KG51bGwpO1xyXG5cclxuICBwdWJsaWMgYnVmZmVyRGF0YVNvdXJjZTogRmVhdHVyZURhdGFTb3VyY2U7XHJcblxyXG4gIHByaXZhdGUgbGF5ZXJXYXRjaGVyOiBMYXllcldhdGNoZXI7XHJcbiAgcHJpdmF0ZSBvcHRpb25zOiBNYXBPcHRpb25zO1xyXG4gIHByaXZhdGUgbWFwVmlld09wdGlvbnM6IE1hcFZpZXdPcHRpb25zO1xyXG4gIHByaXZhdGUgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8TWFwT3B0aW9ucz4gPSB7XHJcbiAgICBjb250cm9sczogeyBhdHRyaWJ1dGlvbjogZmFsc2UgfVxyXG4gIH07XHJcblxyXG4gIGdldCBsYXllcnMoKTogTGF5ZXJbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllcnMkLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByb2plY3Rpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnZpZXdDb250cm9sbGVyLmdldE9sUHJvamVjdGlvbigpLmdldENvZGUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgb3B0aW9ucz86IE1hcE9wdGlvbnMsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlPzogU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U/OiBDb25maWdTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcclxuICAgIHRoaXMubGF5ZXJXYXRjaGVyID0gbmV3IExheWVyV2F0Y2hlcigpO1xyXG4gICAgdGhpcy5zdGF0dXMkID0gdGhpcy5sYXllcldhdGNoZXIuc3RhdHVzJDtcclxuICAgIHRoaXMucHJvcGVydHlDaGFuZ2UkID0gdGhpcy5sYXllcldhdGNoZXIucHJvcGVydHlDaGFuZ2UkO1xyXG4gICAgb2xwcm9qNC5yZWdpc3Rlcihwcm9qNCk7XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICBjb25zdCBjb250cm9scyA9IFtdO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb250cm9scykge1xyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRyb2xzLmF0dHJpYnV0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgYXR0cmlidXRpb25PcHQgPSAodGhpcy5vcHRpb25zLmNvbnRyb2xzLmF0dHJpYnV0aW9uID09PSB0cnVlXHJcbiAgICAgICAgICA/IHt9XHJcbiAgICAgICAgICA6IHRoaXMub3B0aW9ucy5jb250cm9scy5hdHRyaWJ1dGlvbikgYXMgTWFwQXR0cmlidXRpb25PcHRpb25zO1xyXG4gICAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbEF0dHJpYnV0aW9uKGF0dHJpYnV0aW9uT3B0KSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb250cm9scy5zY2FsZUxpbmUpIHtcclxuICAgICAgICBjb25zdCBzY2FsZUxpbmVPcHQgPSAodGhpcy5vcHRpb25zLmNvbnRyb2xzLnNjYWxlTGluZSA9PT0gdHJ1ZVxyXG4gICAgICAgICAgPyB7fVxyXG4gICAgICAgICAgOiB0aGlzLm9wdGlvbnMuY29udHJvbHMuc2NhbGVMaW5lKSBhcyBNYXBTY2FsZUxpbmVPcHRpb25zO1xyXG4gICAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbFNjYWxlTGluZShzY2FsZUxpbmVPcHQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGludGVyYWN0aW9ucyA9IHt9O1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pbnRlcmFjdGlvbnMgPT09IGZhbHNlKSB7XHJcbiAgICAgIGludGVyYWN0aW9ucyA9IHtcclxuICAgICAgICBhbHRTaGlmdERyYWdSb3RhdGU6IGZhbHNlLFxyXG4gICAgICAgIGRvdWJsZUNsaWNrWm9vbTogZmFsc2UsXHJcbiAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgIG1vdXNlV2hlZWxab29tOiBmYWxzZSxcclxuICAgICAgICBzaGlmdERyYWdab29tOiBmYWxzZSxcclxuICAgICAgICBkcmFnUGFuOiBmYWxzZSxcclxuICAgICAgICBwaW5jaFJvdGF0ZTogZmFsc2UsXHJcbiAgICAgICAgcGluY2hab29tOiBmYWxzZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub2wgPSBuZXcgb2xNYXAoe1xyXG4gICAgICBpbnRlcmFjdGlvbnM6IG9saW50ZXJhY3Rpb24uZGVmYXVsdHMoaW50ZXJhY3Rpb25zKSxcclxuICAgICAgY29udHJvbHNcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0Vmlldyh0aGlzLm9wdGlvbnMudmlldyB8fCB7fSk7XHJcbiAgICB0aGlzLnZpZXdDb250cm9sbGVyID0gbmV3IE1hcFZpZXdDb250cm9sbGVyKHtcclxuICAgICAgc3RhdGVIaXN0b3J5OiB0cnVlXHJcbiAgICB9KTtcclxuICAgIHRoaXMudmlld0NvbnRyb2xsZXIuc2V0T2xNYXAodGhpcy5vbCk7XHJcbiAgICB0aGlzLm92ZXJsYXkgPSBuZXcgT3ZlcmxheSh0aGlzKTtcclxuICAgIHRoaXMucXVlcnlSZXN1bHRzT3ZlcmxheSA9IG5ldyBPdmVybGF5KHRoaXMpO1xyXG4gICAgdGhpcy5zZWFyY2hSZXN1bHRzT3ZlcmxheSA9IG5ldyBPdmVybGF5KHRoaXMpO1xyXG4gICAgdGhpcy5vbC5vbmNlKCdyZW5kZXJjb21wbGV0ZScsICgpID0+IHtcclxuICAgICAgdGhpcy5nZW9sb2NhdGlvbkNvbnRyb2xsZXIgPSBuZXcgTWFwR2VvbG9jYXRpb25Db250cm9sbGVyKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcHJvamVjdGlvbjogdGhpcy52aWV3Q29udHJvbGxlci5nZXRPbFByb2plY3Rpb24oKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZSxcclxuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UpO1xyXG4gICAgICB0aGlzLmdlb2xvY2F0aW9uQ29udHJvbGxlci5zZXRPbE1hcCh0aGlzLm9sKTtcclxuICAgICAgaWYgKHRoaXMuZ2VvbG9jYXRpb25Db250cm9sbGVyKSB7XHJcbiAgICAgICAgdGhpcy5nZW9sb2NhdGlvbkNvbnRyb2xsZXIudXBkYXRlR2VvbG9jYXRpb25PcHRpb25zKHRoaXMubWFwVmlld09wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGF5ZXJzJC5zdWJzY3JpYmUoKGxheWVycykgPT4ge1xyXG4gICAgICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgICAgICBpZiAobGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMpIHtcclxuICAgICAgICAgICAgbGF5ZXIub2wub25jZSgncG9zdHJlbmRlcicsICgpID0+IHtcclxuICAgICAgICAgICAgICBpbml0TGF5ZXJTeW5jRnJvbVJvb3RQYXJlbnRMYXllcnModGhpcywgdGhpcy5sYXllcnMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXdDb250cm9sbGVyLm1vbml0b3JSb3RhdGlvbigpO1xyXG4gIH0pO1xyXG4gIHRoaXMucHJvcGVydHlDaGFuZ2UkLnBpcGUoc2tpcFdoaWxlKChwYykgPT4gIXBjKSkuc3Vic2NyaWJlKHAgPT4gaGFuZGxlTGF5ZXJQcm9wZXJ0eUNoYW5nZSh0aGlzLCBwLmV2ZW50LCBwLmxheWVyKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0VGFyZ2V0KGlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub2wuc2V0VGFyZ2V0KGlkKTtcclxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMubGF5ZXJXYXRjaGVyLnN1YnNjcmliZSgoKSA9PiB7IH0sIG51bGwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sYXllcldhdGNoZXIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVZpZXcob3B0aW9uczogTWFwVmlld09wdGlvbnMpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gdGhpcy5vbC5nZXRWaWV3KCk7XHJcbiAgICBjb25zdCB2aWV3T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHtcclxuICAgICAgICB6b29tOiBjdXJyZW50Vmlldy5nZXRab29tKClcclxuICAgICAgfSxcclxuICAgICAgY3VycmVudFZpZXcuZ2V0UHJvcGVydGllcygpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc2V0VmlldyhPYmplY3QuYXNzaWduKHZpZXdPcHRpb25zLCBvcHRpb25zKSk7XHJcbiAgICBpZiAob3B0aW9ucy5tYXhab29tT25FeHRlbnQpIHtcclxuICAgICAgdGhpcy52aWV3Q29udHJvbGxlci5tYXhab29tT25FeHRlbnQgPSBvcHRpb25zLm1heFpvb21PbkV4dGVudDtcclxuICAgIH1cclxuICAgIHRoaXMubWFwVmlld09wdGlvbnMgPSBvcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBtYXAgdmlld1xyXG4gICAqIEBwYXJhbSBvcHRpb25zIE1hcCB2aWV3IG9wdGlvbnNcclxuICAgKi9cclxuICBzZXRWaWV3KG9wdGlvbnM6IE1hcFZpZXdPcHRpb25zKSB7XHJcbiAgICBpZiAodGhpcy52aWV3Q29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudmlld0NvbnRyb2xsZXIuY2xlYXJTdGF0ZUhpc3RvcnkoKTtcclxuICAgIH1cclxuXHJcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IGNvbnN0cmFpblJlc29sdXRpb246IHRydWUgfSwgb3B0aW9ucyk7XHJcbiAgICBjb25zdCB2aWV3ID0gbmV3IG9sVmlldyhvcHRpb25zKTtcclxuICAgIHRoaXMub2wuc2V0Vmlldyh2aWV3KTtcclxuXHJcbiAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICBpZiAob3B0aW9ucy5tYXhMYXllclpvb21FeHRlbnQpIHtcclxuICAgICAgICB0aGlzLnZpZXdDb250cm9sbGVyLm1heExheWVyWm9vbUV4dGVudCA9IG9wdGlvbnMubWF4TGF5ZXJab29tRXh0ZW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob3B0aW9ucy5jZW50ZXIpIHtcclxuICAgICAgICBjb25zdCBwcm9qZWN0aW9uID0gdmlldy5nZXRQcm9qZWN0aW9uKCkuZ2V0Q29kZSgpO1xyXG4gICAgICAgIGNvbnN0IGNlbnRlciA9IG9scHJvai5mcm9tTG9uTGF0KG9wdGlvbnMuY2VudGVyLCBwcm9qZWN0aW9uKTtcclxuICAgICAgICB2aWV3LnNldENlbnRlcihjZW50ZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDb250cm9scyh2YWx1ZTogTWFwQ29udHJvbHNPcHRpb25zKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udHJvbHMgPSBbXTtcclxuICAgIGlmICh2YWx1ZS5hdHRyaWJ1dGlvbikge1xyXG4gICAgICBjb25zdCBhdHRyaWJ1dGlvbk9wdCA9ICh2YWx1ZS5hdHRyaWJ1dGlvbiA9PT0gdHJ1ZVxyXG4gICAgICAgID8ge31cclxuICAgICAgICA6IHZhbHVlLmF0dHJpYnV0aW9uKSBhcyBNYXBBdHRyaWJ1dGlvbk9wdGlvbnM7XHJcbiAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbEF0dHJpYnV0aW9uKGF0dHJpYnV0aW9uT3B0KSk7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUuc2NhbGVMaW5lKSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlTGluZU9wdCA9ICh2YWx1ZS5zY2FsZUxpbmUgPT09IHRydWVcclxuICAgICAgICA/IHt9XHJcbiAgICAgICAgOiB2YWx1ZS5zY2FsZUxpbmUpIGFzIE1hcFNjYWxlTGluZU9wdGlvbnM7XHJcbiAgICAgIGNvbnRyb2xzLnB1c2gobmV3IG9sQ29udHJvbFNjYWxlTGluZShzY2FsZUxpbmVPcHQpKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50Q29udHJvbHMgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLm9sLmdldENvbnRyb2xzKCkuZ2V0QXJyYXkoKSk7XHJcbiAgICBjdXJyZW50Q29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgdGhpcy5vbC5yZW1vdmVDb250cm9sKGNvbnRyb2wpO1xyXG4gICAgfSk7XHJcbiAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICB0aGlzLm9sLmFkZENvbnRyb2woY29udHJvbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlcHJlY2F0ZWRcclxuICAgKiBUT0RPOiBNb3ZlIHRvIFZpZXdDb250cm9sbGVyIGFuZCB1cGRhdGUgZXZlcnkgcGxhY2UgaXQncyB1c2VkXHJcbiAgICovXHJcbiAgZ2V0Q2VudGVyKHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBbbnVtYmVyLCBudW1iZXJdIHtcclxuICAgIHJldHVybiB0aGlzLnZpZXdDb250cm9sbGVyLmdldENlbnRlcihwcm9qZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlcHJlY2F0ZWRcclxuICAgKiBUT0RPOiBNb3ZlIHRvIFZpZXdDb250cm9sbGVyIGFuZCB1cGRhdGUgZXZlcnkgcGxhY2UgaXQncyB1c2VkXHJcbiAgICovXHJcbiAgZ2V0RXh0ZW50KHByb2plY3Rpb24/OiBzdHJpbmcgfCBPbFByb2plY3Rpb24pOiBNYXBFeHRlbnQge1xyXG4gICAgcmV0dXJuIHRoaXMudmlld0NvbnRyb2xsZXIuZ2V0RXh0ZW50KHByb2plY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzogTW92ZSB0byBWaWV3Q29udHJvbGxlciBhbmQgdXBkYXRlIGV2ZXJ5IHBsYWNlIGl0J3MgdXNlZFxyXG4gIGdldFpvb20oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnZpZXdDb250cm9sbGVyLmdldFpvb20oKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUJhc2VMYXllcihiYXNlTGF5ZXI6IExheWVyKSB7XHJcbiAgICBpZiAoIWJhc2VMYXllcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBibCBvZiB0aGlzLmdldEJhc2VMYXllcnMoKSkge1xyXG4gICAgICBibC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYmFzZUxheWVyLnZpc2libGUgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudmlld0NvbnRyb2xsZXIub2xWaWV3LnNldE1pblpvb20oXHJcbiAgICAgIGJhc2VMYXllci5kYXRhU291cmNlLm9wdGlvbnMubWluWm9vbSB8fCAodGhpcy5vcHRpb25zLnZpZXcgfHwge30pLm1pblpvb21cclxuICAgICk7XHJcbiAgICB0aGlzLnZpZXdDb250cm9sbGVyLm9sVmlldy5zZXRNYXhab29tKFxyXG4gICAgICBiYXNlTGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLm1heFpvb20gfHwgKHRoaXMub3B0aW9ucy52aWV3IHx8IHt9KS5tYXhab29tXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QmFzZUxheWVycygpOiBMYXllcltdIHtcclxuICAgIHJldHVybiB0aGlzLmxheWVycy5maWx0ZXIoKGxheWVyOiBMYXllcikgPT4gbGF5ZXIuYmFzZUxheWVyID09PSB0cnVlKTtcclxuICB9XHJcblxyXG4gIGdldExheWVyQnlJZChpZDogc3RyaW5nKTogTGF5ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzLmZpbmQoKGxheWVyOiBMYXllcikgPT4gbGF5ZXIuaWQgJiYgbGF5ZXIuaWQgPT09IGlkKTtcclxuICB9XHJcblxyXG4gIGdldExheWVyQnlBbGlhcyhhbGlhczogc3RyaW5nKTogTGF5ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzLmZpbmQoXHJcbiAgICAgIChsYXllcjogTGF5ZXIpID0+IGxheWVyLmFsaWFzICYmIGxheWVyLmFsaWFzID09PSBhbGlhc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldExheWVyQnlPbFVJZChvbFVJZDogc3RyaW5nKTogTGF5ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5ZXJzLmZpbmQoXHJcbiAgICAgIChsYXllcjogTGF5ZXIpID0+IGdldFVpZChsYXllci5vbCkgJiYgZ2V0VWlkKGxheWVyLm9sKSA9PT0gb2xVSWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRMYXllckJ5T2xMYXllcihvbExheWVyOiBvbExheWVyPG9sU291cmNlPik6IExheWVyIHtcclxuICAgIGNvbnN0IG9sVUlkID0gZ2V0VWlkKG9sTGF5ZXIpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF5ZXJCeU9sVUlkKG9sVUlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIHNpbmdsZSBsYXllclxyXG4gICAqIEBwYXJhbSBsYXllciBMYXllciB0byBhZGRcclxuICAgKiBAcGFyYW0gcHVzaCBERVBSRUNBVEVEXHJcbiAgICovXHJcbiAgYWRkTGF5ZXIobGF5ZXI6IExheWVyLCBwdXNoID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5hZGRMYXllcnMoW2xheWVyXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgbWFueSBsYXllcnNcclxuICAgKiBAcGFyYW0gbGF5ZXJzIExheWVycyB0byBhZGRcclxuICAgKiBAcGFyYW0gcHVzaCBERVBSRUNBVEVEXHJcbiAgICovXHJcbiAgYWRkTGF5ZXJzKGxheWVyczogTGF5ZXJbXSwgcHVzaCA9IHRydWUpIHtcclxuICAgIGxldCBvZmZzZXRaSW5kZXggPSAwO1xyXG4gICAgbGV0IG9mZnNldEJhc2VMYXllclpJbmRleCA9IDA7XHJcbiAgICBjb25zdCBhZGRlZExheWVycyA9IGxheWVyc1xyXG4gICAgICAubWFwKChsYXllcjogTGF5ZXIpID0+IHtcclxuICAgICAgICBpZiAoIWxheWVyKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGxheWVyLnpJbmRleFxyXG4gICAgICAgICAgPyAwXHJcbiAgICAgICAgICA6IGxheWVyLmJhc2VMYXllclxyXG4gICAgICAgICAgICA/IG9mZnNldEJhc2VMYXllclpJbmRleCsrXHJcbiAgICAgICAgICAgIDogb2Zmc2V0WkluZGV4Kys7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9BZGRMYXllcihsYXllciwgb2Zmc2V0KTtcclxuICAgICAgfSlcclxuICAgICAgLmZpbHRlcigobGF5ZXI6IExheWVyIHwgdW5kZWZpbmVkKSA9PiBsYXllciAhPT0gdW5kZWZpbmVkKTtcclxuICAgIHRoaXMuc2V0TGF5ZXJzKFtdLmNvbmNhdCh0aGlzLmxheWVycywgYWRkZWRMYXllcnMpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIHNpbmdsZSBsYXllclxyXG4gICAqIEBwYXJhbSBsYXllciBMYXllciB0byByZW1vdmVcclxuICAgKi9cclxuICByZW1vdmVMYXllcihsYXllcjogTGF5ZXIpIHtcclxuICAgIHRoaXMucmVtb3ZlTGF5ZXJzKFtsYXllcl0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIG1hbnkgbGF5ZXJzXHJcbiAgICogQHBhcmFtIGxheWVycyBMYXllcnMgdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgcmVtb3ZlTGF5ZXJzKGxheWVyczogTGF5ZXJbXSkge1xyXG4gICAgY29uc3QgbmV3TGF5ZXJzID0gdGhpcy5sYXllcnMkLnZhbHVlLnNsaWNlKDApO1xyXG4gICAgY29uc3QgbGF5ZXJzVG9SZW1vdmUgPSBbXTtcclxuICAgIGxheWVycy5mb3JFYWNoKChsYXllcjogTGF5ZXIpID0+IHtcclxuICAgICAgaWYgKGxheWVyIGluc3RhbmNlb2YgVmVjdG9yTGF5ZXIpIHtcclxuICAgICAgICBsYXllci5yZW1vdmVMYXllckZyb21JREIoKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmRleCA9IG5ld0xheWVycy5pbmRleE9mKGxheWVyKTtcclxuICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICBsYXllcnNUb1JlbW92ZS5wdXNoKGxheWVyKTtcclxuICAgICAgICBuZXdMYXllcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmhhbmRsZUxpbmtlZExheWVyc0RlbGV0aW9uKGxheWVyLCBsYXllcnNUb1JlbW92ZSk7XHJcbiAgICAgICAgbGF5ZXJzVG9SZW1vdmUubWFwKGxpbmtlZExheWVyID0+IHtcclxuICAgICAgICAgIGNvbnN0IGxpbmtlZEluZGV4ID0gbmV3TGF5ZXJzLmluZGV4T2YobGlua2VkTGF5ZXIpO1xyXG4gICAgICAgICAgaWYgKGxpbmtlZEluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgbmV3TGF5ZXJzLnNwbGljZShsaW5rZWRJbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxheWVyc1RvUmVtb3ZlLmZvckVhY2goKGxheWVyOiBMYXllcikgPT4gdGhpcy5kb1JlbW92ZUxheWVyKGxheWVyKSk7XHJcbiAgICB0aGlzLnNldExheWVycyhuZXdMYXllcnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGQgYSBsaXN0IG9mIGxpbmtlZCBsYXllcnMgdG8gZGVsZXRlXHJcbiAgICogQHBhcmFtIHNyY0xheWVyIExheWVyIHRoYXQgaGFzIHRyaWdnZXJlZCB0aGUgZGVsZXRpb25cclxuICAgKiBAcGFyYW0gbGF5ZXJzVG9SZW1vdmUgbGlzdCB0byBhcHBlbmQgdGhlIGxheWVyIHRvIGRlbGV0ZSBpbnRvXHJcbiAgICovXHJcbiAgaGFuZGxlTGlua2VkTGF5ZXJzRGVsZXRpb24oc3JjTGF5ZXI6IExheWVyLCBsYXllcnNUb1JlbW92ZTogTGF5ZXJbXSkge1xyXG4gICAgbGV0IHJvb3RQYXJlbnRCeURlbGV0aW9uID0gZ2V0Um9vdFBhcmVudEJ5RGVsZXRpb24odGhpcywgc3JjTGF5ZXIpO1xyXG4gICAgaWYgKCFyb290UGFyZW50QnlEZWxldGlvbikge1xyXG4gICAgICByb290UGFyZW50QnlEZWxldGlvbiA9IHNyY0xheWVyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2xiZCA9IGdldEFsbENoaWxkTGF5ZXJzQnlEZWxldGlvbih0aGlzLCByb290UGFyZW50QnlEZWxldGlvbiwgW3Jvb3RQYXJlbnRCeURlbGV0aW9uXSk7XHJcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGNsYmQpIHtcclxuICAgICAgbGF5ZXJzVG9SZW1vdmUucHVzaChsYXllcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgYWxsIGxheWVyc1xyXG4gICAqL1xyXG4gIHJlbW92ZUFsbExheWVycygpIHtcclxuICAgIHRoaXMubGF5ZXJzLmZvckVhY2goKGxheWVyOiBMYXllcikgPT4gdGhpcy5kb1JlbW92ZUxheWVyKGxheWVyKSk7XHJcbiAgICB0aGlzLmxheWVycyQubmV4dChbXSk7XHJcbiAgfVxyXG5cclxuICByYWlzZUxheWVyKGxheWVyOiBMYXllcikge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldExheWVySW5kZXgobGF5ZXIpO1xyXG4gICAgaWYgKGluZGV4ID4gMSkge1xyXG4gICAgICB0aGlzLm1vdmVMYXllcihsYXllciwgaW5kZXgsIGluZGV4IC0gMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYWlzZUxheWVycyhsYXllcnM6IExheWVyW10pIHtcclxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzKSB7XHJcbiAgICAgIHRoaXMucmFpc2VMYXllcihsYXllcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb3dlckxheWVyKGxheWVyOiBMYXllcikge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldExheWVySW5kZXgobGF5ZXIpO1xyXG4gICAgaWYgKGluZGV4IDwgdGhpcy5sYXllcnMubGVuZ3RoIC0gMSkge1xyXG4gICAgICB0aGlzLm1vdmVMYXllcihsYXllciwgaW5kZXgsIGluZGV4ICsgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb3dlckxheWVycyhsYXllcnM6IExheWVyW10pIHtcclxuICAgIGNvbnN0IHJldmVyc2VMYXllcnMgPSBsYXllcnMucmV2ZXJzZSgpO1xyXG4gICAgZm9yIChjb25zdCBsYXllciBvZiByZXZlcnNlTGF5ZXJzKSB7XHJcbiAgICAgIHRoaXMubG93ZXJMYXllcihsYXllcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3ZlTGF5ZXIobGF5ZXI6IExheWVyLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGxheWVyVG8gPSB0aGlzLmxheWVyc1t0b107XHJcbiAgICBjb25zdCB6SW5kZXhUbyA9IGxheWVyVG8uekluZGV4O1xyXG4gICAgY29uc3QgekluZGV4RnJvbSA9IGxheWVyLnpJbmRleDtcclxuXHJcbiAgICBpZiAobGF5ZXJUby5iYXNlTGF5ZXIgfHwgbGF5ZXIuYmFzZUxheWVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsYXllci56SW5kZXggPSB6SW5kZXhUbztcclxuICAgIGxheWVyVG8uekluZGV4ID0gekluZGV4RnJvbTtcclxuXHJcbiAgICB0aGlzLmxheWVyc1t0b10gPSBsYXllcjtcclxuICAgIHRoaXMubGF5ZXJzW2Zyb21dID0gbGF5ZXJUbztcclxuICAgIHRoaXMubGF5ZXJzJC5uZXh0KHRoaXMubGF5ZXJzLnNsaWNlKDApKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhIGxheWVyIHRvIHRoZSBPTCBtYXAgYW5kIHN0YXJ0IHdhdGNoaW5nLiBJZiB0aGUgbGF5ZXIgaXMgYWxyZWFkeVxyXG4gICAqIGFkZGVkIHRvIHRoaXMgbWFwLCBtYWtlIGl0IHZpc2libGUgYnV0IGRvbid0IGFkZCBpdCBvbmUgYWdhaW4uXHJcbiAgICogQHBhcmFtIGxheWVyIExheWVyXHJcbiAgICogQHJldHVybnMgVGhlIGxheWVyIGFkZGVkLCBpZiBhbnlcclxuICAgKi9cclxuICBwcml2YXRlIGRvQWRkTGF5ZXIobGF5ZXI6IExheWVyLCBvZmZzZXRaSW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKGxheWVyLmJhc2VMYXllciAmJiBsYXllci52aXNpYmxlKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlQmFzZUxheWVyKGxheWVyKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleGlzdGluZ0xheWVyID0gdGhpcy5nZXRMYXllckJ5SWQobGF5ZXIuaWQpO1xyXG4gICAgaWYgKGV4aXN0aW5nTGF5ZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBleGlzdGluZ0xheWVyLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFsYXllci5iYXNlTGF5ZXIgJiYgbGF5ZXIuekluZGV4KSB7XHJcbiAgICAgIGxheWVyLnpJbmRleCArPSAxMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobGF5ZXIuekluZGV4ID09PSB1bmRlZmluZWQgfHwgbGF5ZXIuekluZGV4ID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IG1heFpJbmRleCA9IE1hdGgubWF4KFxyXG4gICAgICAgIGxheWVyLmJhc2VMYXllciA/IDAgOiAxMCxcclxuICAgICAgICAuLi50aGlzLmxheWVyc1xyXG4gICAgICAgICAgLmZpbHRlcihcclxuICAgICAgICAgICAgKGwpID0+IGwuYmFzZUxheWVyID09PSBsYXllci5iYXNlTGF5ZXIgJiYgbC56SW5kZXggPCAyMDAgLy8gekluZGV4ID4gMjAwID0gc3lzdGVtIGxheWVyXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAubWFwKChsKSA9PiBsLnpJbmRleClcclxuICAgICAgKTtcclxuICAgICAgbGF5ZXIuekluZGV4ID0gbWF4WkluZGV4ICsgMSArIG9mZnNldFpJbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobGF5ZXIuYmFzZUxheWVyICYmIGxheWVyLnpJbmRleCA+IDkpIHtcclxuICAgICAgbGF5ZXIuekluZGV4ID0gMTA7IC8vIGJhc2VsYXllciBtdXN0IGhhdmUgekluZGV4IDwgMTBcclxuICAgIH1cclxuXHJcbiAgICBsYXllci5zZXRNYXAodGhpcyk7XHJcbiAgICB0aGlzLmxheWVyV2F0Y2hlci53YXRjaExheWVyKGxheWVyKTtcclxuICAgIHRoaXMub2wuYWRkTGF5ZXIobGF5ZXIub2wpO1xyXG5cclxuICAgIHJldHVybiBsYXllcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIGxheWVyIGZyb20gdGhlIE9MIG1hcCBhbmQgc3RvcCB3YXRjaGluZ1xyXG4gICAqIEBwYXJhbSBsYXllciBMYXllclxyXG4gICAqL1xyXG4gIHByaXZhdGUgZG9SZW1vdmVMYXllcihsYXllcjogTGF5ZXIpIHtcclxuICAgIHRoaXMubGF5ZXJXYXRjaGVyLnVud2F0Y2hMYXllcihsYXllcik7XHJcbiAgICB0aGlzLm9sLnJlbW92ZUxheWVyKGxheWVyLm9sKTtcclxuICAgIGxheWVyLnNldE1hcCh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBsYXllcnMgb2JzZXJ2YWJsZVxyXG4gICAqIEBwYXJhbSBsYXllcnMgTGF5ZXJzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRMYXllcnMobGF5ZXJzOiBMYXllcltdKSB7XHJcbiAgICB0aGlzLmxheWVycyQubmV4dCh0aGlzLnNvcnRMYXllcnNCeVpJbmRleChsYXllcnMpLnNsaWNlKDApKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNvcnQgbGF5ZXJzIGJ5IGRlc2NlbmRpbmcgekluZGV4XHJcbiAgICogQHBhcmFtIGxheWVycyBBcnJheSBvZiBsYXllcnNcclxuICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgYXJyYXksIHNvcnRlZCBieSB6SW5kZXhcclxuICAgKi9cclxuICBwcml2YXRlIHNvcnRMYXllcnNCeVpJbmRleChsYXllcnM6IExheWVyW10pIHtcclxuICAgIC8vIFNvcnQgYnkgZGVzY2VuZGluZyB6SW5kZXhcclxuICAgIHJldHVybiBsYXllcnMuc29ydChcclxuICAgICAgKGxheWVyMTogTGF5ZXIsIGxheWVyMjogTGF5ZXIpID0+IGxheWVyMi56SW5kZXggLSBsYXllcjEuekluZGV4XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGxheWVyIGluZGV4IGluIHRoZSBtYXAncyBpbmVuciBhcnJheSBvZiBsYXllcnNcclxuICAgKiBAcGFyYW0gbGF5ZXIgTGF5ZXJcclxuICAgKiBAcmV0dXJucyBUaGUgbGF5ZXIgaW5kZXhcclxuICAgKi9cclxuICBwcml2YXRlIGdldExheWVySW5kZXgobGF5ZXI6IExheWVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllcnMuZmluZEluZGV4KChfbGF5ZXI6IExheWVyKSA9PiBfbGF5ZXIgPT09IGxheWVyKTtcclxuICB9XHJcbn1cclxuIl19
@@ -26,4 +26,4 @@ MapService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MapService, f
26
26
  providedIn: 'root'
27
27
  }]
28
28
  }], function () { return []; }, null); })();
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL21hcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLFVBQVU7SUFHckIsZ0JBQWUsQ0FBQztJQUVoQixNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVztRQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDOztvRUFYVSxVQUFVO2dFQUFWLFVBQVUsV0FBVixVQUFVLG1CQUZULE1BQU07dUZBRVAsVUFBVTtjQUh0QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElnb01hcCB9IGZyb20gJy4vbWFwJztcblxuLyoqXG4gKiBNYXBTZXJ2aWNlXG4gKlxuICogVGhpcyBzZXJ2aWNlIHRyYWNrcyB0aGUgSWdvTWFwIGluc3RhbmNlLCBpZiBhbnkuXG4gKiBDdXJyZW50bHksIG9ubHkgb25lIG1hcCBpbnN0YW5jZSBpcyBzdXBwb3J0ZWRcbiAqIGJ1dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBtYXBzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLlxuICogVGhpcyB3aWxsIGltcGFjdCBvdGhlciBzZXJ2aWNlcyBzdWNoIGFzIHRoZSBPdmVybGF5U2VydmljZVxuICogYmVjYXVzZSB0aGVzZSBtYXBzIHdvbid0IGJlIHNoYXJpbmcgb3ZlcmxheWVkIGZlYXR1cmVzLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNYXBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBtYXA6IElnb01hcDtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgZ2V0TWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMubWFwO1xuICB9XG5cbiAgc2V0TWFwKG1hcDogSWdvTWFwKSB7XG4gICAgdGhpcy5tYXAgPSBtYXA7XG4gIH1cbn1cbiJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL21hcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLFVBQVU7SUFHckIsZ0JBQWUsQ0FBQztJQUVoQixNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBVztRQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixDQUFDOztvRUFYVSxVQUFVO2dFQUFWLFVBQVUsV0FBVixVQUFVLG1CQUZULE1BQU07dUZBRVAsVUFBVTtjQUh0QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuL21hcCc7XHJcblxyXG4vKipcclxuICogTWFwU2VydmljZVxyXG4gKlxyXG4gKiBUaGlzIHNlcnZpY2UgdHJhY2tzIHRoZSBJZ29NYXAgaW5zdGFuY2UsIGlmIGFueS5cclxuICogQ3VycmVudGx5LCBvbmx5IG9uZSBtYXAgaW5zdGFuY2UgaXMgc3VwcG9ydGVkXHJcbiAqIGJ1dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBtYXBzIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLlxyXG4gKiBUaGlzIHdpbGwgaW1wYWN0IG90aGVyIHNlcnZpY2VzIHN1Y2ggYXMgdGhlIE92ZXJsYXlTZXJ2aWNlXHJcbiAqIGJlY2F1c2UgdGhlc2UgbWFwcyB3b24ndCBiZSBzaGFyaW5nIG92ZXJsYXllZCBmZWF0dXJlcy5cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hcFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgbWFwOiBJZ29NYXA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgZ2V0TWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXA7XHJcbiAgfVxyXG5cclxuICBzZXRNYXAobWFwOiBJZ29NYXApIHtcclxuICAgIHRoaXMubWFwID0gbWFwO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -460,4 +460,4 @@ export function mtmZoneFromLonLat(lonLat) {
460
460
  }
461
461
  return mtmZone;
462
462
  }
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbWFwL3NoYXJlZC9tYXAudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFFbEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU3QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSzFDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixHQUFXLEVBQ1gsYUFBcUIsRUFDckIsT0FBOEIsRUFBRTtJQU9oQyxJQUFJLE1BQXdCLENBQUM7SUFDN0IsSUFBSSxRQUFnQixDQUFDO0lBQ3JCLElBQUksV0FBbUIsQ0FBQztJQUN4QixJQUFJLFVBQWtCLENBQUM7SUFDdkIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBa0IsQ0FBQztJQUN2QixJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksV0FBbUIsQ0FBQztJQUN4QixJQUFJLFVBQWtCLENBQUM7SUFDdkIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBa0IsQ0FBQztJQUN2QixJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksSUFBWSxDQUFDO0lBQ2pCLElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksSUFBWSxDQUFDO0lBQ2pCLElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxHQUFRLENBQUM7SUFFYixNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDO0lBQ2xELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUM1QixJQUFJLGFBQXFCLENBQUM7SUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxD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QUksQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNsQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUMsRUFBRSxBQUFELEVBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDM0UsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDM0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2xDLE9BQU8sRUFDUCxXQUFXLENBQ1osQ0FBQztLQUNIO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ2xDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQyxFQUFFLEFBQUQsRUFBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsTUFBTSxPQUFPLEdBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDMUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDM0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2xDLE9BQU8sRUFDUCxXQUFXLENBQ1osQ0FBQztLQUNIO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEs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SUFDdkIsSUFBSSxPQUFPLENBQUM7SUFDWixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQzVCLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDYjtJQUNELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ2I7SUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQzVCLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDYjtJQUNELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ2I7SUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQzVCLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDYjtJQUNELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ2I7SUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsT0FBTyxHQUFHLEVBQUUsQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcbmltcG9ydCBNYXBCcm93c2VyUG9pbnRlckV2ZW50IGZyb20gJ29sL01hcEJyb3dzZXJFdmVudCc7XG5pbXBvcnQgeyBNQUMgfSBmcm9tICdvbC9oYXMnO1xuXG5pbXBvcnQgeyBOdW1iZXJVdGlscyB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgTWFwVmlld1N0YXRlIH0gZnJvbSAnLi9tYXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFByb2plY3Rpb24gfSBmcm9tICcuL3Byb2plY3Rpb24uaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZXh0cmFjdHMgYSBjb29yZGluYXRlIHR1cGxlIGZyb20gYSBzdHJpbmcuXG4gKiBAcGFyYW0gc3RyIEFueSBzdHJpbmdcbiAqIEBwYXJhbSBtYXBQcm9qZWN0aW9uIHN0cmluZyBNYXAgUHJvamVjdGlvblxuICogQHBhcmFtIG9wdHMuZm9yY2VOQSBib29sZWFuIEZvcmNlIE5vcnRoIEFtZXJpY2EgWm9uZVxuICogQHJldHVybnMgb2JqZWN0OlxuICogICAgICAgICAgICAgbG9uTGF0OiBDb29yZGluYXRlLFxuICogICAgICAgICAgICAgbWVzc2FnZTogTWVzc2FnZSBvZiBlcnJvcixcbiAqICAgICAgICAgICAgIHJhZGl1czogcmFkaXVzIG9mIHRoZSBjb25maWVuY2Ugb2YgY29vcmRpbmF0ZSxcbiAqICAgICAgICAgICAgIGNvbmY6IGNvbmZpZGVuY2Ugb2YgdGhlIGNvb3JkaW5hdGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb0xvbkxhdChcbiAgc3RyOiBzdHJpbmcsXG4gIG1hcFByb2plY3Rpb246IHN0cmluZyxcbiAgb3B0czogeyBmb3JjZU5BPzogYm9vbGVhbiB9ID0ge31cbik6IHtcbiAgbG9uTGF0OiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHJhZGl1czogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBjb25mOiBudW1iZXIgfCB1bmRlZmluZWQ7XG59IHtcbiAgbGV0IGxvbkxhdDogW251bWJlciwgbnVtYmVyXTtcbiAgbGV0IGNvb3JkU3RyOiBzdHJpbmc7XG4gIGxldCBuZWdhdGl2ZUxvbjogc3RyaW5nO1xuICBsZXQgZGVncmVlc0xvbjogc3RyaW5nO1xuICBsZXQgbWludXRlc0xvbjogc3RyaW5nO1xuICBsZXQgc2Vjb25kc0xvbjogc3RyaW5nO1xuICBsZXQgZGlyZWN0aW9uTG9uOiBzdHJpbmc7XG4gIGxldCBkZWNpbWFsTG9uOiBzdHJpbmc7XG4gIGxldCBuZWdhdGl2ZUxhdDogc3RyaW5nO1xuICBsZXQgZGVncmVlc0xhdDogc3RyaW5nO1xuICBsZXQgbWludXRlc0xhdDogc3RyaW5nO1xuICBsZXQgc2Vjb25kc0xhdDogc3RyaW5nO1xuICBsZXQgZGlyZWN0aW9uTGF0OiBzdHJpbmc7XG4gIGxldCBkZWNpbWFsTGF0OiBzdHJpbmc7XG4gIGxldCB6b25lOiBzdHJpbmc7XG4gIGxldCByYWRpdXM6IHN0cmluZztcbiAgbGV0IGNvbmY6IHN0cmluZztcbiAgbGV0IGxvbjogYW55O1xuICBsZXQgbGF0OiBhbnk7XG5cbiAgY29uc3QgcHJvamVjdGlvblBhdHRlcm4gPSAnKFxcXFxzKjtcXFxccypbXFxcXGRdezQsNn0pJztcbiAgY29uc3QgdG9Qcm9qZWN0aW9uID0gJzQzMjYnO1xuICBsZXQgcHJvamVjdGlvblN0cjogc3RyaW5nO1xuICBjb25zdCBwcm9qZWN0aW9uUmVnZXggPSBuZXcgUmVnRXhwKHByb2plY3Rpb25QYXR0ZXJuLCAnZycpO1xuXG4gIGNvbnN0IGxvbmxhdENvb3JkID0gJyhbLStdKT8oW1xcXFxkXXsxLDN9KShbLC5dKFxcXFxkKykpPyc7XG4gIGNvbnN0IGxvbkxhdFBhdHRlcm4gPSBgJHtsb25sYXRDb29yZH1bXFxcXHMsXSske2xvbmxhdENvb3JkfWA7XG4gIGNvbnN0IGxvbkxhdFJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7bG9uTGF0UGF0dGVybn0kYCwgJ2cnKTtcblxuICBjb25zdCBkbXNDb29yZCA9XG4gICAgJyhbMC05XXsxLDJ9KVs6fMKwXT9cXFxccyooWzAtOV17MSwyfSk/Wzp8XFwnfOKAsnzigJldP1xcXFxzKihbMC05XXsxLDJ9KD86LlswLTldKyl7MCwxfSk/XFxcXHMqW1wifOKAs3zigJ1dP1xcXFxzKic7XG4gIGNvbnN0IGRtc0Nvb3JkUGF0dGVybiA9IGAke2Rtc0Nvb3JkfShbTnxTfEV8V3xPXSksP1xcXFxzKiR7ZG1zQ29vcmR9KFtOfFN8RXxXfE9dKWA7XG4gIGNvbnN0IGRtc1JlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7ZG1zQ29vcmRQYXR0ZXJufSRgLCAnZ2knKTtcblxuICBjb25zdCBwYXR0ZXJuVXRtID1cbiAgICAnKFVUTSktPyhcXFxcZHsxLDJ9KVtcXFxccyxdKihcXFxcZCtbLixdP1xcXFxkKylbXFxcXHMsXSsoXFxcXGQrWy4sXT9cXFxcZCspJztcbiAgY29uc3QgdXRtUmVnZXggPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJuVXRtfWAsICdnaScpO1xuXG4gIGNvbnN0IHBhdHRlcm5NdG0gPVxuICAgICcoTVRNKS0/KFxcXFxkezEsMn0pW1xcXFxzLF0qKFxcXFxkK1suLF0/XFxcXGQrKVtcXFxccyxdKyhcXFxcZCtbLixdP1xcXFxkKyknO1xuICBjb25zdCBtdG1SZWdleCA9IG5ldyBSZWdFeHAoYF4ke3BhdHRlcm5NdG19YCwgJ2dpJyk7XG5cbiAgY29uc3QgZGRDb29yZCA9ICcoWy0rXSk/KFxcXFxkezEsM30pWywuXShcXFxcZCspJztcbiAgY29uc3QgcGF0dGVybkRkID0gYCR7ZGRDb29yZH1cXFxccypbLF0/XFxcXHMqJHtkZENvb3JkfWA7XG4gIGNvbnN0IGRkUmVnZXggPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJuRGR9YCwgJ2cnKTtcblxuICBjb25zdCBkbWRDb29yZCA9XG4gICAgJyhbLStdKT8oXFxcXGR7MSwzfSlbXFxcXHMsLl17MX0oXFxcXGR7MSwyfSlbXFxcXHMsLl17MX0oXFxcXGR7MSwyfSlbLixdPyhcXFxcZHsxLDV9KT8nO1xuICBjb25zdCBwYXR0ZXJuRG1kID0gYCR7ZG1kQ29vcmR9XFxcXHMqWywuXT9cXFxccyoke2RtZENvb3JkfWA7XG4gIGNvbnN0IGRtZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7cGF0dGVybkRtZH1gLCAnZycpO1xuXG4gLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuICBjb25zdCBwYXR0ZXJuQkVMTCA9XG4gICAgJ0xBVFxcXFxzKltcXFxcczpdKlxcXFxzKihbLStdKT8oXFxcXGR7MSwyfSlbXFxcXHMuLF0/KFxcXFxkKyk/W1xcXFxzLixdP1xcXFxzKihcXFxcZHsxLDJ9KFsuLF1cXFxcZCspPyk/XFxcXHMqKE58U3xFfFcpP1xcXFxzKkxPTkdcXFxccypbXFxcXHM6XSpcXFxccyooWy0rXSk/KFxcXFxkezEsM30pW1xcXFxzLixdPyhcXFxcZCspP1tcXFxccy4sXT9cXFxccyooXFxcXGR7MSwyfShbLixdXFxcXGQrKT8pP1xcXFxzKihOfFN8RXxXKT9cXFxccypVTkNcXFxccypbXFxcXHM6XT9cXFxccyooXFxcXGQrKVxcXFxzKkNPTkZcXFxccypbXFxcXHM6XT9cXFxccyooXFxcXGR7MSwzfSknO1xuICBjb25zdCBiZWxsUmVnZXggPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJuQkVMTH0/YCwgJ2dpJyk7XG5cbiAgY29uc3QgbW1Db29yZCA9ICcoWy0rXT9cXFxcZCspWywuXT8oXFxcXGQrKT8nO1xuICBjb25zdCBtbVBhdHRlcm4gPSBgJHttbUNvb3JkfVtcXFxccyxdKyR7bW1Db29yZH1gO1xuICBjb25zdCBtbVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7bW1QYXR0ZXJufSRgLCAnZycpO1xuXG4gIGxldCBpc1hZQ29vcmRzID0gZmFsc2U7XG5cbiAgc3RyID0gc3RyLnRvTG9jYWxlVXBwZXJDYXNlKCkudHJpbSgpO1xuXG4gIC8vIEV4dHJhY3QgcHJvamVjdGlvblxuICBpZiAocHJvamVjdGlvblJlZ2V4LnRlc3Qoc3RyKSkge1xuICAgIFtjb29yZFN0ciwgcHJvamVjdGlvblN0cl0gPSBzdHIuc3BsaXQoJzsnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gIH0gZWxzZSB7XG4gICAgY29vcmRTdHIgPSBzdHI7XG4gIH1cbiAgaWYgKGxvbkxhdFJlZ2V4LnRlc3QoY29vcmRTdHIpKSB7XG4gICAgW1xuICAgICAgLFxuICAgICAgbmVnYXRpdmVMb24sXG4gICAgICBsb24sXG4gICAgICAsXG4gICAgICBkZWNpbWFsTG9uLFxuICAgICAgbmVnYXRpdmVMYXQsXG4gICAgICBsYXQsXG4gICAgICAsXG4gICAgICBkZWNpbWFsTGF0XG4gICAgXSA9IGNvb3JkU3RyLm1hdGNoKGxvbkxhdFBhdHRlcm4pO1xuXG4gICAgbG9uID0gcGFyc2VGbG9hdCgobmVnYXRpdmVMb24gPyBuZWdhdGl2ZUxvbiA6ICcnKSArIGxvbiArICcuJyArIGRlY2ltYWxMb24pO1xuICAgIGxhdCA9IHBhcnNlRmxvYXQoKG5lZ2F0aXZlTGF0ID8gbmVnYXRpdmVMYXQgOiAnJykgKyBsYXQgKyAnLicgKyBkZWNpbWFsTGF0KTtcbiAgfSBlbHNlIGlmIChkbXNSZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIFtcbiAgICAgICxcbiAgICAgIGRlZ3JlZXNMb24sXG4gICAgICBtaW51dGVzTG9uLFxuICAgICAgc2Vjb25kc0xvbixcbiAgICAgIGRpcmVjdGlvbkxvbixcbiAgICAgIGRlZ3JlZXNMYXQsXG4gICAgICBtaW51dGVzTGF0LFxuICAgICAgc2Vjb25kc0xhdCxcbiAgICAgIGRpcmVjdGlvbkxhdFxuICAgIF0gPSBjb29yZFN0ci5tYXRjaChkbXNDb29yZFBhdHRlcm4pO1xuXG4gICAgaWYgKGRpcmVjdGlvbkxvbiA9PT0gJ1MnIHx8IGRpcmVjdGlvbkxvbiA9PT0gJ04nKSB7XG4gICAgICBkZWdyZWVzTG9uID0gW2RlZ3JlZXNMYXQsIChkZWdyZWVzTGF0ID0gZGVncmVlc0xvbildWzBdO1xuICAgICAgbWludXRlc0xvbiA9IFttaW51dGVzTGF0LCAobWludXRlc0xhdCA9IG1pbnV0ZXNMb24pXVswXTtcbiAgICAgIHNlY29uZHNMb24gPSBbc2Vjb25kc0xhdCwgKHNlY29uZHNMYXQgPSBzZWNvbmRzTG9uKV1bMF07XG4gICAgICBkaXJlY3Rpb25Mb24gPSBbZGlyZWN0aW9uTGF0LCAoZGlyZWN0aW9uTGF0ID0gZGlyZWN0aW9uTG9uKV1bMF07XG4gICAgfVxuXG4gICAgbG9uID0gY29udmVydERNU1RvREQoXG4gICAgICBwYXJzZUZsb2F0KGRlZ3JlZXNMb24pLFxuICAgICAgcGFyc2VGbG9hdChtaW51dGVzTG9uKSxcbiAgICAgIHBhcnNlRmxvYXQoc2Vjb25kc0xvbiksXG4gICAgICBkaXJlY3Rpb25Mb25cbiAgICApO1xuICAgIGxhdCA9IGNvbnZlcnRETVNUb0REKFxuICAgICAgcGFyc2VGbG9hdChkZWdyZWVzTGF0KSxcbiAgICAgIHBhcnNlRmxvYXQobWludXRlc0xhdCksXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMYXQpLFxuICAgICAgZGlyZWN0aW9uTGF0XG4gICAgKTtcbiAgfSBlbHNlIGlmICh1dG1SZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIGlzWFlDb29yZHMgPSB0cnVlO1xuICAgIFssICwgem9uZSwgbG9uLCBsYXRdID0gY29vcmRTdHIubWF0Y2gocGF0dGVyblV0bSk7XG4gICAgY29uc3QgZXBzZ1V0bSA9IE51bWJlcih6b25lKSA8IDEwID8gYEVQU0c6MzI2MCR7em9uZX1gIDogYEVQU0c6MzI2JHt6b25lfWA7XG4gICAgW2xvbiwgbGF0XSA9IG9scHJvai50cmFuc2Zvcm0oXG4gICAgICBbcGFyc2VGbG9hdChsb24pLCBwYXJzZUZsb2F0KGxhdCldLFxuICAgICAgZXBzZ1V0bSxcbiAgICAgICdFUFNHOjQzMjYnXG4gICAgKTtcbiAgfSBlbHNlIGlmIChtdG1SZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIGlzWFlDb29yZHMgPSB0cnVlO1xuICAgIFssICwgem9uZSwgbG9uLCBsYXRdID0gY29vcmRTdHIubWF0Y2gocGF0dGVybk10bSk7XG4gICAgY29uc3QgZXBzZ010bSA9XG4gICAgICBOdW1iZXIoem9uZSkgPCAxMCA/IGBFUFNHOjMyMTgke3pvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyBOdW1iZXIoem9uZSl9YDtcbiAgICBbbG9uLCBsYXRdID0gb2xwcm9qLnRyYW5zZm9ybShcbiAgICAgIFtwYXJzZUZsb2F0KGxvbiksIHBhcnNlRmxvYXQobGF0KV0sXG4gICAgICBlcHNnTXRtLFxuICAgICAgJ0VQU0c6NDMyNidcbiAgICApO1xuICB9IGVsc2UgaWYgKGRtZFJlZ2V4LnRlc3QoY29vcmRTdHIpKSB7XG4gICAgW1xuICAgICAgLFxuICAgICAgbmVnYXRpdmVMb24sXG4gICAgICBkZWdyZWVzTG9uLFxuICAgICAgbWludXRlc0xvbixcbiAgICAgIHNlY29uZHNMb24sXG4gICAgICBkZWNpbWFsTG9uLFxuICAgICAgbmVnYXRpdmVMYXQsXG4gICAgICBkZWdyZWVzTGF0LFxuICAgICAgbWludXRlc0xhdCxcbiAgICAgIHNlY29uZHNMYXQsXG4gICAgICBkZWNpbWFsTGF0XG4gICAgXSA9IGNvb3JkU3RyLm1hdGNoKHBhdHRlcm5EbWQpO1xuXG4gICAgbG9uID0gY29udmVydERNU1RvREQoXG4gICAgICBwYXJzZUZsb2F0KChuZWdhdGl2ZUxvbiA/IG5lZ2F0aXZlTG9uIDogJycpICsgZGVncmVlc0xvbiksXG4gICAgICBwYXJzZUZsb2F0KG1pbnV0ZXNMb24pLFxuICAgICAgcGFyc2VGbG9hdChzZWNvbmRzTG9uKSxcbiAgICAgIGRpcmVjdGlvbkxvblxuICAgICk7XG4gICAgbGF0ID0gY29udmVydERNU1RvREQoXG4gICAgICBwYXJzZUZsb2F0KChuZWdhdGl2ZUxhdCA/IG5lZ2F0aXZlTGF0IDogJycpICsgZGVncmVlc0xhdCksXG4gICAgICBwYXJzZUZsb2F0KG1pbnV0ZXNMYXQpLFxuICAgICAgcGFyc2VGbG9hdChzZWNvbmRzTGF0KSxcbiAgICAgIGRpcmVjdGlvbkxhdFxuICAgICk7XG4gIH0gZWxzZSBpZiAoZGRSZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIFtcbiAgICAgICxcbiAgICAgIG5lZ2F0aXZlTG9uLFxuICAgICAgZGVncmVlc0xvbixcbiAgICAgIGRlY2ltYWxMb24sXG4gICAgICBuZWdhdGl2ZUxhdCxcbiAgICAgIGRlZ3JlZXNMYXQsXG4gICAgICBkZWNpbWFsTGF0XG4gICAgXSA9IGNvb3JkU3RyLm1hdGNoKHBhdHRlcm5EZCk7XG5cbiAgICBsb24gPSBjb252ZXJ0RE1TVG9ERChcbiAgICAgIHBhcnNlRmxvYXQoKG5lZ2F0aXZlTG9uID8gbmVnYXRpdmVMb24gOiAnJykgKyBkZWdyZWVzTG9uKSxcbiAgICAgIHBhcnNlRmxvYXQobWludXRlc0xvbiksXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMb24pLFxuICAgICAgZGlyZWN0aW9uTG9uXG4gICAgKTtcbiAgICBsYXQgPSBjb252ZXJ0RE1TVG9ERChcbiAgICAgIHBhcnNlRmxvYXQoKG5lZ2F0aXZlTGF0ID8gbmVnYXRpdmVMYXQgOiAnJykgKyBkZWdyZWVzTGF0KSxcbiAgICAgIHBhcnNlRmxvYXQobWludXRlc0xhdCksXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMYXQpLFxuICAgICAgZGlyZWN0aW9uTGF0XG4gICAgKTtcbiAgfSBlbHNlIGlmIChiZWxsUmVnZXgudGVzdChjb29yZFN0cikpIHtcbiAgICBbXG4gICAgICAsXG4gICAgICBuZWdhdGl2ZUxhdCxcbiAgICAgIGRlZ3JlZXNMYXQsXG4gICAgICBtaW51dGVzTGF0LFxuICAgICAgc2Vjb25kc0xhdCxcbiAgICAgICxcbiAgICAgIGRpcmVjdGlvbkxhdCxcbiAgICAgIG5lZ2F0aXZlTG9uLFxuICAgICAgZGVncmVlc0xvbixcbiAgICAgIG1pbnV0ZXNMb24sXG4gICAgICBzZWNvbmRzTG9uLFxuICAgICAgLFxuICAgICAgZGlyZWN0aW9uTG9uLFxuICAgICAgcmFkaXVzLFxuICAgICAgY29uZlxuICAgIF0gPSBjb29yZFN0ci5tYXRjaChwYXR0ZXJuQkVMTCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgTm9ydGggQW1lcmljYVxuICAgIGlmICghZGlyZWN0aW9uTG9uKSB7XG4gICAgICBkaXJlY3Rpb25Mb24gPSAnVyc7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgcmVhbCBtaW51dGVzIG9yIGRlY2ltYWxzXG4gICAgaWYgKG1pbnV0ZXNMb24gJiYgbWludXRlc0xvbi5sZW5ndGggPiAyKSB7XG4gICAgICBsb24gPSBwYXJzZUZsb2F0KFxuICAgICAgICAobmVnYXRpdmVMb24gPyBuZWdhdGl2ZUxvbiA6ICcnKSArIGRlZ3JlZXNMb24gKyAnLicgKyBtaW51dGVzTG9uXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb24gPSBjb252ZXJ0RE1TVG9ERChcbiAgICAgICAgcGFyc2VGbG9hdChkZWdyZWVzTG9uKSxcbiAgICAgICAgcGFyc2VGbG9hdChtaW51dGVzTG9uKSxcbiAgICAgICAgcGFyc2VGbG9hdChzZWNvbmRzTG9uKSxcbiAgICAgICAgZGlyZWN0aW9uTG9uXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzTGF0ICYmIG1pbnV0ZXNMYXQubGVuZ3RoID4gMikge1xuICAgICAgbGF0ID0gcGFyc2VGbG9hdChcbiAgICAgICAgKG5lZ2F0aXZlTGF0ID8gbmVnYXRpdmVMYXQgOiAnJykgKyBkZWdyZWVzTGF0ICsgJy4nICsgbWludXRlc0xhdFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGF0ID0gY29udmVydERNU1RvREQoXG4gICAgICAgIHBhcnNlRmxvYXQoZGVncmVlc0xhdCksXG4gICAgICAgIHBhcnNlRmxvYXQobWludXRlc0xhdCksXG4gICAgICAgIHBhcnNlRmxvYXQoc2Vjb25kc0xhdCksXG4gICAgICAgIGRpcmVjdGlvbkxhdFxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobW1SZWdleC50ZXN0KGNvb3JkU3RyKSkge1xuICAgIGlzWFlDb29yZHMgPSB0cnVlO1xuICAgIFssIGxvbiwgZGVjaW1hbExvbiwgbGF0LCBkZWNpbWFsTGF0XSA9IGNvb3JkU3RyLm1hdGNoKG1tUGF0dGVybik7XG5cbiAgICBpZiAoZGVjaW1hbExvbikge1xuICAgICAgbG9uID0gcGFyc2VGbG9hdChsb24gKyAnLicgKyBkZWNpbWFsTG9uKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjaW1hbExhdCkge1xuICAgICAgbGF0ID0gcGFyc2VGbG9hdChsYXQgKyAnLicgKyBkZWNpbWFsTGF0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvbkxhdDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZTogJycsXG4gICAgICByYWRpdXM6IHVuZGVmaW5lZCxcbiAgICAgIGNvbmY6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBpZiAob3B0cy5mb3JjZU5BICYmICFpc1hZQ29vcmRzKSB7XG4gICAgLy8gU2V0IGEgbmVnYXRpdmUgY29vcmRpbmF0ZSBmb3IgTm9ydGggQW1lcmljYSB6b25lXG4gICAgaWYgKGxvbiA+IDAgJiYgbGF0ID4gMCkge1xuICAgICAgaWYgKGxvbiA+IGxhdCkge1xuICAgICAgICBsb24gPSAtbG9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGF0ID0gLWxhdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXZlcnNlIGNvb3JkaW5hdGUgdG8gcmVzcGVjdCBsb25MYXQgY29udmVudGlvblxuICAgIGlmIChsb24gPiBsYXQpIHtcbiAgICAgIGxvbiA9IFtsYXQsIChsYXQgPSBsb24pXVswXTtcbiAgICB9XG4gIH1cblxuICBsb25MYXQgPSBbTnVtYmVyKGxvbiksIE51bWJlcihsYXQpXSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuXG4gIC8vIFJlcHJvamVjdCB0aGUgY29vcmRpbmF0ZSBpZiBwcm9qZWN0aW9uIHBhcmFtZXRlciBoYXZlIGJlZW4gc2V0IGFuZCBjb29yZCBpcyBub3QgNDMyNlxuICBpZiAoXG4gICAgKHByb2plY3Rpb25TdHIgIT09IHVuZGVmaW5lZCAmJiBwcm9qZWN0aW9uU3RyICE9PSB0b1Byb2plY3Rpb24pIHx8XG4gICAgKGxvbkxhdFswXSA+IDE4MCB8fCBsb25MYXRbMF0gPCAtMTgwKSB8fFxuICAgIChsb25MYXRbMV0gPiA5MCB8fCBsb25MYXRbMV0gPCAtOTApXG4gICkge1xuICAgIGNvbnN0IHNvdXJjZSA9IHByb2plY3Rpb25TdHIgPyAnRVBTRzonICsgcHJvamVjdGlvblN0ciA6IG1hcFByb2plY3Rpb247XG4gICAgY29uc3QgZGVzdCA9ICdFUFNHOicgKyB0b1Byb2plY3Rpb247XG5cbiAgICB0cnkge1xuICAgICAgbG9uTGF0ID0gb2xwcm9qLnRyYW5zZm9ybShsb25MYXQsIHNvdXJjZSwgZGVzdCkgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsb25MYXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgbWVzc2FnZTogJ1Byb2plY3Rpb24gJyArIHNvdXJjZSArICcgbm90IHN1cHBvcnRlZCcsXG4gICAgICAgIHJhZGl1czogdW5kZWZpbmVkLFxuICAgICAgICBjb25mOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChNYXRoLmFicyhsb25MYXRbMF0pIDw9IDE4MCAmJiBNYXRoLmFicyhsb25MYXRbMV0pIDw9IDkwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvbkxhdCxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgcmFkaXVzOiByYWRpdXMgPyBwYXJzZUludChyYWRpdXMsIDEwKSA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbmY6IGNvbmYgPyBwYXJzZUludChjb25mLCAxMCkgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBsb25MYXQ6IHVuZGVmaW5lZCxcbiAgICAgIG1lc3NhZ2U6ICdDb29yZGluYXRlIG91dCBvZiBMb25naXR1ZGUvTGF0aXR1ZGUgYm91bmRzJyxcbiAgICAgIHJhZGl1czogdW5kZWZpbmVkLFxuICAgICAgY29uZjogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgZGVncmVlcyBtaW51dGVzIHNlY29uZHMgdG8gZGRcbiAqIEBwYXJhbSBkZWdyZWVzIERlZ3JlZXNcbiAqIEBwYXJhbSBtaW51dGVzIE1pbnV0ZXNcbiAqIEBwYXJhbSBzZWNvbmRzIFNlY29uZHNcbiAqIEBwYXJhbSBkaXJlY3Rpb24gRGlyZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRETVNUb0REKFxuICBkZWdyZWVzOiBudW1iZXIsXG4gIG1pbnV0ZXM6IG51bWJlcixcbiAgc2Vjb25kczogbnVtYmVyLFxuICBkaXJlY3Rpb246IHN0cmluZ1xuKSB7XG4gIG1pbnV0ZXMgPSBtaW51dGVzIHx8IDA7XG4gIHNlY29uZHMgPSBzZWNvbmRzIHx8IDA7XG5cbiAgY29uc3QgbmVnID0gZGVncmVlcyA8IDA7XG4gIGxldCBkZCA9IE1hdGguYWJzKGRlZ3JlZXMpICsgbWludXRlcyAvIDYwICsgc2Vjb25kcyAvIDM2MDA7XG5cbiAgaWYgKG5lZyB8fCBkaXJlY3Rpb24gPT09ICdTJyB8fCBkaXJlY3Rpb24gPT09ICdXJykge1xuICAgIGRkID0gLWRkO1xuICB9IC8vIERvbid0IGRvIGFueXRoaW5nIGZvciBOIG9yIEVcbiAgcmV0dXJuIGRkO1xufVxuXG4vKipcbiAqIENvbnZlcnQgZGQgdG8gZGVncmVlcyBtaW51dGVzIHNlY29uZHNcbiAqIEBwYXJhbSBsb25MYXRERCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGluIGRkXG4gKiBAcGFyYW0gZGVjaW1hbCBudW1iZXIgb2YgZGVjaW1hbHMgZm9yIHNlY29uZHNcbiAqIEByZXR1cm5zIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgaW4gZG1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RERUb0RNUyhcbiAgbG9uTGF0REQ6IFtudW1iZXIsIG51bWJlcl0sIGRlY2ltYWw6IG51bWJlciA9IDNcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbG9uTGF0RE1TID0gW107XG5cbiAgbG9uTGF0REQuZm9yRWFjaChkZCA9PiB7XG4gICAgY29uc3QgZGVncmVlcyA9IGRkIDwgMCA/IE1hdGguY2VpbChkZCkgOiBNYXRoLmZsb29yKGRkKTtcbiAgICBjb25zdCBpbnQgPSBkZCA8IDAgPyAoZGVncmVlcyAtIGRkKSAqIDYwIDogKGRkIC0gZGVncmVlcykgKiA2MDtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihpbnQpO1xuICAgIGNvbnN0IHNlY29uZHMgPSAoKGludCAtIG1pbnV0ZXMpICogNjApLnRvRml4ZWQoZGVjaW1hbCk7XG5cbiAgICBsb25MYXRETVMucHVzaChgJHtkZWdyZWVzfcKwICR7bWludXRlc30nICR7c2Vjb25kc31cImApO1xuICB9KTtcbiAgcmV0dXJuIGxvbkxhdERNUztcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBvZiB0d28gdmlldyBzdGF0ZXMgYXJlIGVxdWFsLlxuICogQHBhcmFtIHN0YXRlMSBWaWV3IHN0YXRlXG4gKiBAcGFyYW0gc3RhdGUyIFZpZXcgc3RhdGVcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHZpZXcgc3RhdGVzIGFyZSBlcXVhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmlld1N0YXRlc0FyZUVxdWFsKFxuICBzdGF0ZTE6IE1hcFZpZXdTdGF0ZSxcbiAgc3RhdGUyOiBNYXBWaWV3U3RhdGVcbik6IGJvb2xlYW4ge1xuICBpZiAoc3RhdGUxID09PSB1bmRlZmluZWQgfHwgc3RhdGUyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB0b2xlcmFuY2UgPSAxIC8gMTAwMDA7XG4gIHJldHVybiAoXG4gICAgc3RhdGUxLnpvb20gPT09IHN0YXRlMi56b29tICYmXG4gICAgTWF0aC50cnVuYyhzdGF0ZTEuY2VudGVyWzBdIC8gdG9sZXJhbmNlKSA9PT1cbiAgICAgIE1hdGgudHJ1bmMoc3RhdGUyLmNlbnRlclswXSAvIHRvbGVyYW5jZSkgJiZcbiAgICBNYXRoLnRydW5jKHN0YXRlMS5jZW50ZXJbMV0gLyB0b2xlcmFuY2UpID09PVxuICAgICAgTWF0aC50cnVuYyhzdGF0ZTIuY2VudGVyWzFdIC8gdG9sZXJhbmNlKVxuICApO1xufVxuXG4vKipcbiAqIEZvcm1hdCB0aGUgc2NhbGUgdG8gYSBodW1hbiByZWFkYWJsZSB0ZXh0XG4gKiBAcGFyYW0gU2NhbGUgb2YgdGhlIG1hcFxuICogQHJldHVybnMgSHVtYW4gcmVhZGFibGUgc2NhbGUgdGV4dFxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2NhbGUoc2NhbGUpIHtcbiAgc2NhbGUgPSBNYXRoLnJvdW5kKHNjYWxlKTtcbiAgaWYgKHNjYWxlIDwgMTAwMDApIHtcbiAgICByZXR1cm4gc2NhbGUgKyAnJztcbiAgfVxuXG4gIHNjYWxlID0gTWF0aC5yb3VuZChzY2FsZSAvIDEwMDApO1xuICBpZiAoc2NhbGUgPCAxMDAwKSB7XG4gICAgcmV0dXJuIHNjYWxlICsgJ0snO1xuICB9XG5cbiAgc2NhbGUgPSBNYXRoLnJvdW5kKHNjYWxlIC8gMTAwMCk7XG4gIHJldHVybiBzY2FsZSArICdNJztcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHJlc29sdXRpb24gZnJvbSBhIHNjYWxlIGRlbm9tXG4gKiBAcGFyYW0gc2NhbGUgU2NhbGUgZGVub21cbiAqIEBwYXJhbSBkcGkgRFBJXG4gKiBAcmV0dXJucyBSZXNvbHV0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKFxuICBzY2FsZTogbnVtYmVyLFxuICBkcGk6IG51bWJlciA9IDk2XG4pOiBudW1iZXIge1xuICBjb25zdCBpbmNoZXNQZXJNZXRlciA9IDM5LjM3MDE7XG4gIHJldHVybiBzY2FsZSAvIChpbmNoZXNQZXJNZXRlciAqIGRwaSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSByZXNvbHV0aW9uIGZyb20gYSBzY2FsZSBkZW5vbVxuICogQHBhcmFtIFNjYWxlIGRlbm9tXG4gKiBAcmV0dXJucyBSZXNvbHV0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2FsZUZyb21SZXNvbHV0aW9uKFxuICByZXNvbHV0aW9uOiBudW1iZXIsXG4gIHVuaXQ6IHN0cmluZyA9ICdtJyxcbiAgZHBpOiBudW1iZXIgPSA5NlxuKTogbnVtYmVyIHtcbiAgY29uc3QgaW5jaGVzUGVyTWV0ZXIgPSAzOS4zNzAxO1xuICByZXR1cm4gcmVzb2x1dGlvbiAqIG9scHJvai5NRVRFUlNfUEVSX1VOSVRbdW5pdF0gKiBpbmNoZXNQZXJNZXRlciAqIGRwaTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIENUUkwga2V5IGlzIHB1c2hlZCBkdXJpbmcgYW4gT2wgTWFwQnJvd3NlclBvaW50ZXJFdmVudFxuICogQHBhcmFtIGV2ZW50IE9MIE1hcEJyb3dzZXJQb2ludGVyRXZlbnRcbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIENUUkwga2V5IGlzIHB1c2hlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3RybEtleURvd24oZXZlbnQ6IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQ8YW55Pik6IGJvb2xlYW4ge1xuICBjb25zdCBvcmlnaW5hbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudDtcbiAgcmV0dXJuIChcbiAgICAhb3JpZ2luYWxFdmVudC5hbHRLZXkgJiZcbiAgICAoTUFDID8gb3JpZ2luYWxFdmVudC5tZXRhS2V5IDogb3JpZ2luYWxFdmVudC5jdHJsS2V5KSAmJlxuICAgICFvcmlnaW5hbEV2ZW50LnNoaWZ0S2V5XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZENvb3JkVG8oY29vcmQ6IFtudW1iZXIsIG51bWJlcl0sIGRlY2ltYWw6IG51bWJlciA9IDMpOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgcmV0dXJuIFtcbiAgICBOdW1iZXJVdGlscy5yb3VuZFRvTkRlY2ltYWwoY29vcmRbMF0sIGRlY2ltYWwpLFxuICAgIE51bWJlclV0aWxzLnJvdW5kVG9ORGVjaW1hbChjb29yZFsxXSwgZGVjaW1hbCldIGFzIFtudW1iZXIsIG51bWJlcl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZENvb3JkVG9TdHJpbmcoY29vcmQ6IFtudW1iZXIsIG51bWJlcl0sIGRlY2ltYWw6IG51bWJlciA9IDMpOiBbc3RyaW5nLCBzdHJpbmdde1xuICAgIHJldHVybiByb3VuZENvb3JkVG8oY29vcmQsIGRlY2ltYWwpLm1hcChyID0+IHIudG9TdHJpbmcoKSkgYXMgW3N0cmluZywgc3RyaW5nXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbnZlcnRlZCBjb29yZGluYXRlcy5cbiAqIENvbnZlcnNpb24gaXMgZG9uZSBmb3IgZXZlcnkgY29uZmlndXJlZCBwcm9qZWN0aW9uc1xuICogYW5kIGZvciB0aGUgY3VycmVudCBVVE0gem9uZSBhbmQgTVRNIHpvbmUuXG4gKiBAcGFyYW0gbG9uTGF0IFtudW1iZXIsIG51bWJlcl0gYXJyYXkgb2YgdGhlIGNvb3JkaW5hdGUgdG8gdHJhbnNmb3JtLlxuICogQHBhcmFtIHByb2plY3Rpb25zICBQcm9qZWN0aW9uW10gQXJyYXkgb2YgZGVzdGluYXRpb24gcHJvamVjdGlvbi5cbiAqIEBwYXJhbSByZXZlcnNlQ29vcmRzIFRvIHJldmVyc2UgY29vcmRzIGZyb20gbGF0TG9uIHRvIGxvbkxhdCAoc2VhcmNoIG9wdGlvbilcbiAqIEByZXR1cm5zIFJldHVybnMgYW4gYXJyYXkgb2YgY29udmVydGVkIGNvb3JkaW5hdGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9uTGF0Q29udmVyc2lvbihcbiAgbG9uTGF0OiBbbnVtYmVyLCBudW1iZXJdLFxuICBwcm9qZWN0aW9uczogUHJvamVjdGlvbltdXG4pOiB7XG4gIGNvZGU6IHN0cmluZztcbiAgYWxpYXM6IHN0cmluZztcbiAgY29vcmQ6IFtudW1iZXIsIG51bWJlcl07XG4gIGlnbzJDb29yZEZvcm1hdDogc3RyaW5nO1xufVtdIHtcbiAgY29uc3QgcmF3Q29vcmQzODU3ID0gb2xwcm9qLnRyYW5zZm9ybShsb25MYXQsICdFUFNHOjQzMjYnLCAnRVBTRzozODU3JykgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgY29uc3QgY29udmVydGVkTG9uTGF0ID0gW1xuICAgIHtcbiAgICAgIGNvZGU6ICdFUFNHOjM4NTcnLFxuICAgICAgYWxpYXM6ICdXZWIgTWVyY2F0b3InLFxuICAgICAgY29vcmQ6IHJhd0Nvb3JkMzg1NyxcbiAgICAgIGlnbzJDb29yZEZvcm1hdDogYCR7cm91bmRDb29yZFRvKHJhd0Nvb3JkMzg1Nykuam9pbignLCAnKX0gOyAzODU3YFxuICAgIH1cbiAgXTtcblxuICAvLyBkZXRlY3QgdGhlIGN1cnJlbnQgdXRtIHpvbmUuXG4gIGNvbnN0IHV0bVpvbmUgPSB1dG1ab25lRnJvbUxvbkxhdChsb25MYXQpO1xuICBjb25zdCBlcHNnVXRtID0gdXRtWm9uZSA8IDEwID8gYEVQU0c6MzI2MCR7dXRtWm9uZX1gIDogYEVQU0c6MzI2JHt1dG1ab25lfWA7XG4gIGNvbnN0IHV0bU5hbWUgPSBgVVRNLSR7dXRtWm9uZX1gO1xuICBjb25zdCByYXdDb29yZFV0bSA9IG9scHJvai50cmFuc2Zvcm0obG9uTGF0LCAnRVBTRzo0MzI2JywgZXBzZ1V0bSkgYXMgW251bWJlciwgbnVtYmVyXTtcbiAgY29udmVydGVkTG9uTGF0LnB1c2goe1xuICAgIGNvZGU6IGVwc2dVdG0sXG4gICAgYWxpYXM6ICdVVE0nLFxuICAgIGNvb3JkOiByYXdDb29yZFV0bSxcbiAgICBpZ28yQ29vcmRGb3JtYXQ6IGAke3V0bU5hbWV9ICR7cm91bmRDb29yZFRvKHJhd0Nvb3JkVXRtKS5qb2luKCcsICcpfWBcbiAgfSk7XG5cbiAgLy8gZGV0ZWN0IHRoZSBjdXJyZW50IG10bSB6b25lLlxuICBjb25zdCBtdG1ab25lID0gbXRtWm9uZUZyb21Mb25MYXQobG9uTGF0KTtcbiAgaWYgKG10bVpvbmUpIHtcbiAgICBjb25zdCBlcHNnTXRtID1cbiAgICAgIG10bVpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke210bVpvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyBtdG1ab25lfWA7XG4gICAgY29uc3QgbXRtTmFtZSA9IGBNVE0tJHttdG1ab25lfWA7XG4gICAgY29uc3QgcmF3Q29vcmRNdG0gPSBvbHByb2oudHJhbnNmb3JtKGxvbkxhdCwgJ0VQU0c6NDMyNicsIGVwc2dNdG0pIGFzIFtudW1iZXIsIG51bWJlcl07XG4gICAgY29udmVydGVkTG9uTGF0LnB1c2goe1xuICAgICAgY29kZTogZXBzZ010bSxcbiAgICAgIGFsaWFzOiAnTVRNJyxcbiAgICAgIGNvb3JkOiByYXdDb29yZE10bSxcbiAgICAgIGlnbzJDb29yZEZvcm1hdDogYCR7bXRtTmFtZX0gJHtyb3VuZENvb3JkVG8ocmF3Q29vcmRNdG0pLmpvaW4oJywgJyl9YFxuICAgIH0pO1xuICB9XG5cbiAgcHJvamVjdGlvbnMuZm9yRWFjaChwcm9qZWN0aW9uID0+IHtcbiAgICBjb25zdCByYXdDb29yZCA9IG9scHJvai50cmFuc2Zvcm0obG9uTGF0LCAnRVBTRzo0MzI2JywgcHJvamVjdGlvbi5jb2RlKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGNvbnN0IG51bWVyaWNFcHNnQ29kZSA9IHByb2plY3Rpb24uY29kZS5zcGxpdCgnOicpWzFdO1xuICAgIGNvbnZlcnRlZExvbkxhdC5wdXNoKHtcbiAgICAgIGNvZGU6IHByb2plY3Rpb24uY29kZSxcbiAgICAgIGFsaWFzOiBwcm9qZWN0aW9uLmFsaWFzIHx8IHByb2plY3Rpb24uY29kZSxcbiAgICAgIGNvb3JkOiByYXdDb29yZCxcbiAgICAgIGlnbzJDb29yZEZvcm1hdDogYCR7cm91bmRDb29yZFRvKHJhd0Nvb3JkKS5qb2luKCcsICcpfSA7ICR7bnVtZXJpY0Vwc2dDb2RlfWBcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnZlcnRlZExvbkxhdDtcbn1cblxuLyoqXG4gKiBEZXRlY3QgdGhlIGN1cnJlbnQgdXRtIHpvbmUgb2YgdGhlIGxvbi9sYXQgY29vcmRpbmF0ZS5cbiAqIEBwYXJhbSBsb25MYXQgW251bWJlciwgbnVtYmVyXSBhcnJheSBvZiB0aGUgY29vcmRpbmF0ZSB0byBkZXRlY3QgdGhlIFVUTSB6b25lLlxuICogQHJldHVybnMgbnVtYmVyIFRoZSBVVE0gem9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHV0bVpvbmVGcm9tTG9uTGF0KGxvbkxhdDogW251bWJlciwgbnVtYmVyXSkge1xuICByZXR1cm4gTWF0aC5jZWlsKChsb25MYXRbMF0gKyAxODApIC8gNik7XG59XG5cbi8qKlxuICogRGV0ZWN0IHRoZSBjdXJyZW50IG10bSB6b25lIG9mIHRoZSBsb24vbGF0IGNvb3JkaW5hdGUuXG4gKiBAcGFyYW0gbG9uTGF0IFtudW1iZXIsIG51bWJlcl0gYXJyYXkgb2YgdGhlIGNvb3JkaW5hdGUgdG8gZGV0ZWN0IHRoZSBNVE0gem9uZS5cbiAqIEByZXR1cm5zIG51bWJlciBUaGUgTVRNIHpvbmUuIFVuZGVmaW5lZCBpZiBvdXRzaWRlIG9mIHRoZSBtdG0gYXBwbGljYXRpb24gem9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG10bVpvbmVGcm9tTG9uTGF0KGxvbkxhdDogW251bWJlciwgbnVtYmVyXSkge1xuICBjb25zdCBsb25nID0gbG9uTGF0WzBdO1xuICBsZXQgbXRtWm9uZTtcbiAgaWYgKGxvbmcgPCAtNTEgJiYgbG9uZyA+IC01NCkge1xuICAgIG10bVpvbmUgPSAxO1xuICB9XG4gIGlmIChsb25nIDwgLTU0ICYmIGxvbmcgPiAtNTcpIHtcbiAgICBtdG1ab25lID0gMjtcbiAgfVxuICBpZiAobG9uZyA8IC01NyAmJiBsb25nID4gLTYwKSB7XG4gICAgbXRtWm9uZSA9IDM7XG4gIH1cbiAgaWYgKGxvbmcgPCAtNjAgJiYgbG9uZyA+IC02Mykge1xuICAgIG10bVpvbmUgPSA0O1xuICB9XG4gIGlmIChsb25nIDwgLTYzICYmIGxvbmcgPiAtNjYpIHtcbiAgICBtdG1ab25lID0gNTtcbiAgfVxuICBpZiAobG9uZyA8IC02NiAmJiBsb25nID4gLTY5KSB7XG4gICAgbXRtWm9uZSA9IDY7XG4gIH1cbiAgaWYgKGxvbmcgPCAtNjkgJiYgbG9uZyA+IC03Mikge1xuICAgIG10bVpvbmUgPSA3O1xuICB9XG4gIGlmIChsb25nIDwgLTcyICYmIGxvbmcgPiAtNzUpIHtcbiAgICBtdG1ab25lID0gODtcbiAgfVxuICBpZiAobG9uZyA8IC03NSAmJiBsb25nID4gLTc4KSB7XG4gICAgbXRtWm9uZSA9IDk7XG4gIH1cbiAgaWYgKGxvbmcgPCAtNzggJiYgbG9uZyA+IC04MSkge1xuICAgIG10bVpvbmUgPSAxMDtcbiAgfVxuICByZXR1cm4gbXRtWm9uZTtcbn1cbiJdfQ==
463
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvbWFwL3NoYXJlZC9tYXAudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFFbEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU3QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSzFDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixHQUFXLEVBQ1gsYUFBcUIsRUFDckIsT0FBOEIsRUFBRTtJQU9oQyxJQUFJLE1BQXdCLENBQUM7SUFDN0IsSUFBSSxRQUFnQixDQUFDO0lBQ3JCLElBQUksV0FBbUIsQ0FBQztJQUN4QixJQUFJLFVBQWtCLENBQUM7SUFDdkIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBa0IsQ0FBQztJQUN2QixJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksV0FBbUIsQ0FBQztJQUN4QixJQUFJLFVBQWtCLENBQUM7SUFDdkIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksVUFBa0IsQ0FBQztJQUN2QixJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSxVQUFrQixDQUFDO0lBQ3ZCLElBQUksSUFBWSxDQUFDO0lBQ2pCLElBQUksTUFBYyxDQUFDO0lBQ25CLElBQUksSUFBWSxDQUFDO0lBQ2pCLElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxHQUFRLENBQUM7SUFFYixNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDO0lBQ2xELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQztJQUM1QixJQUFJLGFBQXFCLENBQUM7SUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxD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QUksQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNsQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUMsRUFBRSxBQUFELEVBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDM0UsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDM0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2xDLE9BQU8sRUFDUCxXQUFXLENBQ1osQ0FBQztLQUNIO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ2xDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQyxFQUFFLEFBQUQsRUFBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsTUFBTSxPQUFPLEdBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDMUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FDM0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQ2xDLE9BQU8sRUFDUCxXQUFXLENBQ1osQ0FBQztLQUNIO1NBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEs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SUFDdkIsSUFBSSxPQUFPLENBQUM7SUFDWixJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQzVCLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDYjtJQUNELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ2I7SUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQzVCLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDYjtJQUNELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ2I7SUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBQ0QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFO1FBQzVCLE9BQU8sR0FBRyxDQUFDLENBQUM7S0FDYjtJQUNELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRTtRQUM1QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0tBQ2I7SUFDRCxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUU7UUFDNUIsT0FBTyxHQUFHLEVBQUUsQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9scHJvaiBmcm9tICdvbC9wcm9qJztcclxuaW1wb3J0IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQgZnJvbSAnb2wvTWFwQnJvd3NlckV2ZW50JztcclxuaW1wb3J0IHsgTUFDIH0gZnJvbSAnb2wvaGFzJztcclxuXHJcbmltcG9ydCB7IE51bWJlclV0aWxzIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xyXG5cclxuaW1wb3J0IHsgTWFwVmlld1N0YXRlIH0gZnJvbSAnLi9tYXAuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUHJvamVjdGlvbiB9IGZyb20gJy4vcHJvamVjdGlvbi5pbnRlcmZhY2VzJztcclxuXHJcbi8qKlxyXG4gKiBUaGlzIG1ldGhvZCBleHRyYWN0cyBhIGNvb3JkaW5hdGUgdHVwbGUgZnJvbSBhIHN0cmluZy5cclxuICogQHBhcmFtIHN0ciBBbnkgc3RyaW5nXHJcbiAqIEBwYXJhbSBtYXBQcm9qZWN0aW9uIHN0cmluZyBNYXAgUHJvamVjdGlvblxyXG4gKiBAcGFyYW0gb3B0cy5mb3JjZU5BIGJvb2xlYW4gRm9yY2UgTm9ydGggQW1lcmljYSBab25lXHJcbiAqIEByZXR1cm5zIG9iamVjdDpcclxuICogICAgICAgICAgICAgbG9uTGF0OiBDb29yZGluYXRlLFxyXG4gKiAgICAgICAgICAgICBtZXNzYWdlOiBNZXNzYWdlIG9mIGVycm9yLFxyXG4gKiAgICAgICAgICAgICByYWRpdXM6IHJhZGl1cyBvZiB0aGUgY29uZmllbmNlIG9mIGNvb3JkaW5hdGUsXHJcbiAqICAgICAgICAgICAgIGNvbmY6IGNvbmZpZGVuY2Ugb2YgdGhlIGNvb3JkaW5hdGV9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9Mb25MYXQoXHJcbiAgc3RyOiBzdHJpbmcsXHJcbiAgbWFwUHJvamVjdGlvbjogc3RyaW5nLFxyXG4gIG9wdHM6IHsgZm9yY2VOQT86IGJvb2xlYW4gfSA9IHt9XHJcbik6IHtcclxuICBsb25MYXQ6IFtudW1iZXIsIG51bWJlcl0gfCB1bmRlZmluZWQ7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG4gIHJhZGl1czogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gIGNvbmY6IG51bWJlciB8IHVuZGVmaW5lZDtcclxufSB7XHJcbiAgbGV0IGxvbkxhdDogW251bWJlciwgbnVtYmVyXTtcclxuICBsZXQgY29vcmRTdHI6IHN0cmluZztcclxuICBsZXQgbmVnYXRpdmVMb246IHN0cmluZztcclxuICBsZXQgZGVncmVlc0xvbjogc3RyaW5nO1xyXG4gIGxldCBtaW51dGVzTG9uOiBzdHJpbmc7XHJcbiAgbGV0IHNlY29uZHNMb246IHN0cmluZztcclxuICBsZXQgZGlyZWN0aW9uTG9uOiBzdHJpbmc7XHJcbiAgbGV0IGRlY2ltYWxMb246IHN0cmluZztcclxuICBsZXQgbmVnYXRpdmVMYXQ6IHN0cmluZztcclxuICBsZXQgZGVncmVlc0xhdDogc3RyaW5nO1xyXG4gIGxldCBtaW51dGVzTGF0OiBzdHJpbmc7XHJcbiAgbGV0IHNlY29uZHNMYXQ6IHN0cmluZztcclxuICBsZXQgZGlyZWN0aW9uTGF0OiBzdHJpbmc7XHJcbiAgbGV0IGRlY2ltYWxMYXQ6IHN0cmluZztcclxuICBsZXQgem9uZTogc3RyaW5nO1xyXG4gIGxldCByYWRpdXM6IHN0cmluZztcclxuICBsZXQgY29uZjogc3RyaW5nO1xyXG4gIGxldCBsb246IGFueTtcclxuICBsZXQgbGF0OiBhbnk7XHJcblxyXG4gIGNvbnN0IHByb2plY3Rpb25QYXR0ZXJuID0gJyhcXFxccyo7XFxcXHMqW1xcXFxkXXs0LDZ9KSc7XHJcbiAgY29uc3QgdG9Qcm9qZWN0aW9uID0gJzQzMjYnO1xyXG4gIGxldCBwcm9qZWN0aW9uU3RyOiBzdHJpbmc7XHJcbiAgY29uc3QgcHJvamVjdGlvblJlZ2V4ID0gbmV3IFJlZ0V4cChwcm9qZWN0aW9uUGF0dGVybiwgJ2cnKTtcclxuXHJcbiAgY29uc3QgbG9ubGF0Q29vcmQgPSAnKFstK10pPyhbXFxcXGRdezEsM30pKFssLl0oXFxcXGQrKSk/JztcclxuICBjb25zdCBsb25MYXRQYXR0ZXJuID0gYCR7bG9ubGF0Q29vcmR9W1xcXFxzLF0rJHtsb25sYXRDb29yZH1gO1xyXG4gIGNvbnN0IGxvbkxhdFJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7bG9uTGF0UGF0dGVybn0kYCwgJ2cnKTtcclxuXHJcbiAgY29uc3QgZG1zQ29vcmQgPVxyXG4gICAgJyhbMC05XXsxLDJ9KVs6fMKwXT9cXFxccyooWzAtOV17MSwyfSk/Wzp8XFwnfOKAsnzigJldP1xcXFxzKihbMC05XXsxLDJ9KD86LlswLTldKyl7MCwxfSk/XFxcXHMqW1wifOKAs3zigJ1dP1xcXFxzKic7XHJcbiAgY29uc3QgZG1zQ29vcmRQYXR0ZXJuID0gYCR7ZG1zQ29vcmR9KFtOfFN8RXxXfE9dKSw/XFxcXHMqJHtkbXNDb29yZH0oW058U3xFfFd8T10pYDtcclxuICBjb25zdCBkbXNSZWdleCA9IG5ldyBSZWdFeHAoYF4ke2Rtc0Nvb3JkUGF0dGVybn0kYCwgJ2dpJyk7XHJcblxyXG4gIGNvbnN0IHBhdHRlcm5VdG0gPVxyXG4gICAgJyhVVE0pLT8oXFxcXGR7MSwyfSlbXFxcXHMsXSooXFxcXGQrWy4sXT9cXFxcZCspW1xcXFxzLF0rKFxcXFxkK1suLF0/XFxcXGQrKSc7XHJcbiAgY29uc3QgdXRtUmVnZXggPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJuVXRtfWAsICdnaScpO1xyXG5cclxuICBjb25zdCBwYXR0ZXJuTXRtID1cclxuICAgICcoTVRNKS0/KFxcXFxkezEsMn0pW1xcXFxzLF0qKFxcXFxkK1suLF0/XFxcXGQrKVtcXFxccyxdKyhcXFxcZCtbLixdP1xcXFxkKyknO1xyXG4gIGNvbnN0IG10bVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7cGF0dGVybk10bX1gLCAnZ2knKTtcclxuXHJcbiAgY29uc3QgZGRDb29yZCA9ICcoWy0rXSk/KFxcXFxkezEsM30pWywuXShcXFxcZCspJztcclxuICBjb25zdCBwYXR0ZXJuRGQgPSBgJHtkZENvb3JkfVxcXFxzKlssXT9cXFxccyoke2RkQ29vcmR9YDtcclxuICBjb25zdCBkZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7cGF0dGVybkRkfWAsICdnJyk7XHJcblxyXG4gIGNvbnN0IGRtZENvb3JkID1cclxuICAgICcoWy0rXSk/KFxcXFxkezEsM30pW1xcXFxzLC5dezF9KFxcXFxkezEsMn0pW1xcXFxzLC5dezF9KFxcXFxkezEsMn0pWy4sXT8oXFxcXGR7MSw1fSk/JztcclxuICBjb25zdCBwYXR0ZXJuRG1kID0gYCR7ZG1kQ29vcmR9XFxcXHMqWywuXT9cXFxccyoke2RtZENvb3JkfWA7XHJcbiAgY29uc3QgZG1kUmVnZXggPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJuRG1kfWAsICdnJyk7XHJcblxyXG4gLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xyXG4gIGNvbnN0IHBhdHRlcm5CRUxMID1cclxuICAgICdMQVRcXFxccypbXFxcXHM6XSpcXFxccyooWy0rXSk/KFxcXFxkezEsMn0pW1xcXFxzLixdPyhcXFxcZCspP1tcXFxccy4sXT9cXFxccyooXFxcXGR7MSwyfShbLixdXFxcXGQrKT8pP1xcXFxzKihOfFN8RXxXKT9cXFxccypMT05HXFxcXHMqW1xcXFxzOl0qXFxcXHMqKFstK10pPyhcXFxcZHsxLDN9KVtcXFxccy4sXT8oXFxcXGQrKT9bXFxcXHMuLF0/XFxcXHMqKFxcXFxkezEsMn0oWy4sXVxcXFxkKyk/KT9cXFxccyooTnxTfEV8Vyk/XFxcXHMqVU5DXFxcXHMqW1xcXFxzOl0/XFxcXHMqKFxcXFxkKylcXFxccypDT05GXFxcXHMqW1xcXFxzOl0/XFxcXHMqKFxcXFxkezEsM30pJztcclxuICBjb25zdCBiZWxsUmVnZXggPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJuQkVMTH0/YCwgJ2dpJyk7XHJcblxyXG4gIGNvbnN0IG1tQ29vcmQgPSAnKFstK10/XFxcXGQrKVssLl0/KFxcXFxkKyk/JztcclxuICBjb25zdCBtbVBhdHRlcm4gPSBgJHttbUNvb3JkfVtcXFxccyxdKyR7bW1Db29yZH1gO1xyXG4gIGNvbnN0IG1tUmVnZXggPSBuZXcgUmVnRXhwKGBeJHttbVBhdHRlcm59JGAsICdnJyk7XHJcblxyXG4gIGxldCBpc1hZQ29vcmRzID0gZmFsc2U7XHJcblxyXG4gIHN0ciA9IHN0ci50b0xvY2FsZVVwcGVyQ2FzZSgpLnRyaW0oKTtcclxuXHJcbiAgLy8gRXh0cmFjdCBwcm9qZWN0aW9uXHJcbiAgaWYgKHByb2plY3Rpb25SZWdleC50ZXN0KHN0cikpIHtcclxuICAgIFtjb29yZFN0ciwgcHJvamVjdGlvblN0cl0gPSBzdHIuc3BsaXQoJzsnKS5tYXAocyA9PiBzLnRyaW0oKSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvb3JkU3RyID0gc3RyO1xyXG4gIH1cclxuICBpZiAobG9uTGF0UmVnZXgudGVzdChjb29yZFN0cikpIHtcclxuICAgIFtcclxuICAgICAgLFxyXG4gICAgICBuZWdhdGl2ZUxvbixcclxuICAgICAgbG9uLFxyXG4gICAgICAsXHJcbiAgICAgIGRlY2ltYWxMb24sXHJcbiAgICAgIG5lZ2F0aXZlTGF0LFxyXG4gICAgICBsYXQsXHJcbiAgICAgICxcclxuICAgICAgZGVjaW1hbExhdFxyXG4gICAgXSA9IGNvb3JkU3RyLm1hdGNoKGxvbkxhdFBhdHRlcm4pO1xyXG5cclxuICAgIGxvbiA9IHBhcnNlRmxvYXQoKG5lZ2F0aXZlTG9uID8gbmVnYXRpdmVMb24gOiAnJykgKyBsb24gKyAnLicgKyBkZWNpbWFsTG9uKTtcclxuICAgIGxhdCA9IHBhcnNlRmxvYXQoKG5lZ2F0aXZlTGF0ID8gbmVnYXRpdmVMYXQgOiAnJykgKyBsYXQgKyAnLicgKyBkZWNpbWFsTGF0KTtcclxuICB9IGVsc2UgaWYgKGRtc1JlZ2V4LnRlc3QoY29vcmRTdHIpKSB7XHJcbiAgICBbXHJcbiAgICAgICxcclxuICAgICAgZGVncmVlc0xvbixcclxuICAgICAgbWludXRlc0xvbixcclxuICAgICAgc2Vjb25kc0xvbixcclxuICAgICAgZGlyZWN0aW9uTG9uLFxyXG4gICAgICBkZWdyZWVzTGF0LFxyXG4gICAgICBtaW51dGVzTGF0LFxyXG4gICAgICBzZWNvbmRzTGF0LFxyXG4gICAgICBkaXJlY3Rpb25MYXRcclxuICAgIF0gPSBjb29yZFN0ci5tYXRjaChkbXNDb29yZFBhdHRlcm4pO1xyXG5cclxuICAgIGlmIChkaXJlY3Rpb25Mb24gPT09ICdTJyB8fCBkaXJlY3Rpb25Mb24gPT09ICdOJykge1xyXG4gICAgICBkZWdyZWVzTG9uID0gW2RlZ3JlZXNMYXQsIChkZWdyZWVzTGF0ID0gZGVncmVlc0xvbildWzBdO1xyXG4gICAgICBtaW51dGVzTG9uID0gW21pbnV0ZXNMYXQsIChtaW51dGVzTGF0ID0gbWludXRlc0xvbildWzBdO1xyXG4gICAgICBzZWNvbmRzTG9uID0gW3NlY29uZHNMYXQsIChzZWNvbmRzTGF0ID0gc2Vjb25kc0xvbildWzBdO1xyXG4gICAgICBkaXJlY3Rpb25Mb24gPSBbZGlyZWN0aW9uTGF0LCAoZGlyZWN0aW9uTGF0ID0gZGlyZWN0aW9uTG9uKV1bMF07XHJcbiAgICB9XHJcblxyXG4gICAgbG9uID0gY29udmVydERNU1RvREQoXHJcbiAgICAgIHBhcnNlRmxvYXQoZGVncmVlc0xvbiksXHJcbiAgICAgIHBhcnNlRmxvYXQobWludXRlc0xvbiksXHJcbiAgICAgIHBhcnNlRmxvYXQoc2Vjb25kc0xvbiksXHJcbiAgICAgIGRpcmVjdGlvbkxvblxyXG4gICAgKTtcclxuICAgIGxhdCA9IGNvbnZlcnRETVNUb0REKFxyXG4gICAgICBwYXJzZUZsb2F0KGRlZ3JlZXNMYXQpLFxyXG4gICAgICBwYXJzZUZsb2F0KG1pbnV0ZXNMYXQpLFxyXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMYXQpLFxyXG4gICAgICBkaXJlY3Rpb25MYXRcclxuICAgICk7XHJcbiAgfSBlbHNlIGlmICh1dG1SZWdleC50ZXN0KGNvb3JkU3RyKSkge1xyXG4gICAgaXNYWUNvb3JkcyA9IHRydWU7XHJcbiAgICBbLCAsIHpvbmUsIGxvbiwgbGF0XSA9IGNvb3JkU3RyLm1hdGNoKHBhdHRlcm5VdG0pO1xyXG4gICAgY29uc3QgZXBzZ1V0bSA9IE51bWJlcih6b25lKSA8IDEwID8gYEVQU0c6MzI2MCR7em9uZX1gIDogYEVQU0c6MzI2JHt6b25lfWA7XHJcbiAgICBbbG9uLCBsYXRdID0gb2xwcm9qLnRyYW5zZm9ybShcclxuICAgICAgW3BhcnNlRmxvYXQobG9uKSwgcGFyc2VGbG9hdChsYXQpXSxcclxuICAgICAgZXBzZ1V0bSxcclxuICAgICAgJ0VQU0c6NDMyNidcclxuICAgICk7XHJcbiAgfSBlbHNlIGlmIChtdG1SZWdleC50ZXN0KGNvb3JkU3RyKSkge1xyXG4gICAgaXNYWUNvb3JkcyA9IHRydWU7XHJcbiAgICBbLCAsIHpvbmUsIGxvbiwgbGF0XSA9IGNvb3JkU3RyLm1hdGNoKHBhdHRlcm5NdG0pO1xyXG4gICAgY29uc3QgZXBzZ010bSA9XHJcbiAgICAgIE51bWJlcih6b25lKSA8IDEwID8gYEVQU0c6MzIxOCR7em9uZX1gIDogYEVQU0c6MzIxJHs4MCArIE51bWJlcih6b25lKX1gO1xyXG4gICAgW2xvbiwgbGF0XSA9IG9scHJvai50cmFuc2Zvcm0oXHJcbiAgICAgIFtwYXJzZUZsb2F0KGxvbiksIHBhcnNlRmxvYXQobGF0KV0sXHJcbiAgICAgIGVwc2dNdG0sXHJcbiAgICAgICdFUFNHOjQzMjYnXHJcbiAgICApO1xyXG4gIH0gZWxzZSBpZiAoZG1kUmVnZXgudGVzdChjb29yZFN0cikpIHtcclxuICAgIFtcclxuICAgICAgLFxyXG4gICAgICBuZWdhdGl2ZUxvbixcclxuICAgICAgZGVncmVlc0xvbixcclxuICAgICAgbWludXRlc0xvbixcclxuICAgICAgc2Vjb25kc0xvbixcclxuICAgICAgZGVjaW1hbExvbixcclxuICAgICAgbmVnYXRpdmVMYXQsXHJcbiAgICAgIGRlZ3JlZXNMYXQsXHJcbiAgICAgIG1pbnV0ZXNMYXQsXHJcbiAgICAgIHNlY29uZHNMYXQsXHJcbiAgICAgIGRlY2ltYWxMYXRcclxuICAgIF0gPSBjb29yZFN0ci5tYXRjaChwYXR0ZXJuRG1kKTtcclxuXHJcbiAgICBsb24gPSBjb252ZXJ0RE1TVG9ERChcclxuICAgICAgcGFyc2VGbG9hdCgobmVnYXRpdmVMb24gPyBuZWdhdGl2ZUxvbiA6ICcnKSArIGRlZ3JlZXNMb24pLFxyXG4gICAgICBwYXJzZUZsb2F0KG1pbnV0ZXNMb24pLFxyXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMb24pLFxyXG4gICAgICBkaXJlY3Rpb25Mb25cclxuICAgICk7XHJcbiAgICBsYXQgPSBjb252ZXJ0RE1TVG9ERChcclxuICAgICAgcGFyc2VGbG9hdCgobmVnYXRpdmVMYXQgPyBuZWdhdGl2ZUxhdCA6ICcnKSArIGRlZ3JlZXNMYXQpLFxyXG4gICAgICBwYXJzZUZsb2F0KG1pbnV0ZXNMYXQpLFxyXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMYXQpLFxyXG4gICAgICBkaXJlY3Rpb25MYXRcclxuICAgICk7XHJcbiAgfSBlbHNlIGlmIChkZFJlZ2V4LnRlc3QoY29vcmRTdHIpKSB7XHJcbiAgICBbXHJcbiAgICAgICxcclxuICAgICAgbmVnYXRpdmVMb24sXHJcbiAgICAgIGRlZ3JlZXNMb24sXHJcbiAgICAgIGRlY2ltYWxMb24sXHJcbiAgICAgIG5lZ2F0aXZlTGF0LFxyXG4gICAgICBkZWdyZWVzTGF0LFxyXG4gICAgICBkZWNpbWFsTGF0XHJcbiAgICBdID0gY29vcmRTdHIubWF0Y2gocGF0dGVybkRkKTtcclxuXHJcbiAgICBsb24gPSBjb252ZXJ0RE1TVG9ERChcclxuICAgICAgcGFyc2VGbG9hdCgobmVnYXRpdmVMb24gPyBuZWdhdGl2ZUxvbiA6ICcnKSArIGRlZ3JlZXNMb24pLFxyXG4gICAgICBwYXJzZUZsb2F0KG1pbnV0ZXNMb24pLFxyXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMb24pLFxyXG4gICAgICBkaXJlY3Rpb25Mb25cclxuICAgICk7XHJcbiAgICBsYXQgPSBjb252ZXJ0RE1TVG9ERChcclxuICAgICAgcGFyc2VGbG9hdCgobmVnYXRpdmVMYXQgPyBuZWdhdGl2ZUxhdCA6ICcnKSArIGRlZ3JlZXNMYXQpLFxyXG4gICAgICBwYXJzZUZsb2F0KG1pbnV0ZXNMYXQpLFxyXG4gICAgICBwYXJzZUZsb2F0KHNlY29uZHNMYXQpLFxyXG4gICAgICBkaXJlY3Rpb25MYXRcclxuICAgICk7XHJcbiAgfSBlbHNlIGlmIChiZWxsUmVnZXgudGVzdChjb29yZFN0cikpIHtcclxuICAgIFtcclxuICAgICAgLFxyXG4gICAgICBuZWdhdGl2ZUxhdCxcclxuICAgICAgZGVncmVlc0xhdCxcclxuICAgICAgbWludXRlc0xhdCxcclxuICAgICAgc2Vjb25kc0xhdCxcclxuICAgICAgLFxyXG4gICAgICBkaXJlY3Rpb25MYXQsXHJcbiAgICAgIG5lZ2F0aXZlTG9uLFxyXG4gICAgICBkZWdyZWVzTG9uLFxyXG4gICAgICBtaW51dGVzTG9uLFxyXG4gICAgICBzZWNvbmRzTG9uLFxyXG4gICAgICAsXHJcbiAgICAgIGRpcmVjdGlvbkxvbixcclxuICAgICAgcmFkaXVzLFxyXG4gICAgICBjb25mXHJcbiAgICBdID0gY29vcmRTdHIubWF0Y2gocGF0dGVybkJFTEwpO1xyXG5cclxuICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlIGZvciBOb3J0aCBBbWVyaWNhXHJcbiAgICBpZiAoIWRpcmVjdGlvbkxvbikge1xyXG4gICAgICBkaXJlY3Rpb25Mb24gPSAnVyc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgcmVhbCBtaW51dGVzIG9yIGRlY2ltYWxzXHJcbiAgICBpZiAobWludXRlc0xvbiAmJiBtaW51dGVzTG9uLmxlbmd0aCA+IDIpIHtcclxuICAgICAgbG9uID0gcGFyc2VGbG9hdChcclxuICAgICAgICAobmVnYXRpdmVMb24gPyBuZWdhdGl2ZUxvbiA6ICcnKSArIGRlZ3JlZXNMb24gKyAnLicgKyBtaW51dGVzTG9uXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb24gPSBjb252ZXJ0RE1TVG9ERChcclxuICAgICAgICBwYXJzZUZsb2F0KGRlZ3JlZXNMb24pLFxyXG4gICAgICAgIHBhcnNlRmxvYXQobWludXRlc0xvbiksXHJcbiAgICAgICAgcGFyc2VGbG9hdChzZWNvbmRzTG9uKSxcclxuICAgICAgICBkaXJlY3Rpb25Mb25cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobWludXRlc0xhdCAmJiBtaW51dGVzTGF0Lmxlbmd0aCA+IDIpIHtcclxuICAgICAgbGF0ID0gcGFyc2VGbG9hdChcclxuICAgICAgICAobmVnYXRpdmVMYXQgPyBuZWdhdGl2ZUxhdCA6ICcnKSArIGRlZ3JlZXNMYXQgKyAnLicgKyBtaW51dGVzTGF0XHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsYXQgPSBjb252ZXJ0RE1TVG9ERChcclxuICAgICAgICBwYXJzZUZsb2F0KGRlZ3JlZXNMYXQpLFxyXG4gICAgICAgIHBhcnNlRmxvYXQobWludXRlc0xhdCksXHJcbiAgICAgICAgcGFyc2VGbG9hdChzZWNvbmRzTGF0KSxcclxuICAgICAgICBkaXJlY3Rpb25MYXRcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKG1tUmVnZXgudGVzdChjb29yZFN0cikpIHtcclxuICAgIGlzWFlDb29yZHMgPSB0cnVlO1xyXG4gICAgWywgbG9uLCBkZWNpbWFsTG9uLCBsYXQsIGRlY2ltYWxMYXRdID0gY29vcmRTdHIubWF0Y2gobW1QYXR0ZXJuKTtcclxuXHJcbiAgICBpZiAoZGVjaW1hbExvbikge1xyXG4gICAgICBsb24gPSBwYXJzZUZsb2F0KGxvbiArICcuJyArIGRlY2ltYWxMb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkZWNpbWFsTGF0KSB7XHJcbiAgICAgIGxhdCA9IHBhcnNlRmxvYXQobGF0ICsgJy4nICsgZGVjaW1hbExhdCk7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxvbkxhdDogdW5kZWZpbmVkLFxyXG4gICAgICBtZXNzYWdlOiAnJyxcclxuICAgICAgcmFkaXVzOiB1bmRlZmluZWQsXHJcbiAgICAgIGNvbmY6IHVuZGVmaW5lZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGlmIChvcHRzLmZvcmNlTkEgJiYgIWlzWFlDb29yZHMpIHtcclxuICAgIC8vIFNldCBhIG5lZ2F0aXZlIGNvb3JkaW5hdGUgZm9yIE5vcnRoIEFtZXJpY2Egem9uZVxyXG4gICAgaWYgKGxvbiA+IDAgJiYgbGF0ID4gMCkge1xyXG4gICAgICBpZiAobG9uID4gbGF0KSB7XHJcbiAgICAgICAgbG9uID0gLWxvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsYXQgPSAtbGF0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV2ZXJzZSBjb29yZGluYXRlIHRvIHJlc3BlY3QgbG9uTGF0IGNvbnZlbnRpb25cclxuICAgIGlmIChsb24gPiBsYXQpIHtcclxuICAgICAgbG9uID0gW2xhdCwgKGxhdCA9IGxvbildWzBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9uTGF0ID0gW051bWJlcihsb24pLCBOdW1iZXIobGF0KV0gYXMgW251bWJlciwgbnVtYmVyXTtcclxuXHJcbiAgLy8gUmVwcm9qZWN0IHRoZSBjb29yZGluYXRlIGlmIHByb2plY3Rpb24gcGFyYW1ldGVyIGhhdmUgYmVlbiBzZXQgYW5kIGNvb3JkIGlzIG5vdCA0MzI2XHJcbiAgaWYgKFxyXG4gICAgKHByb2plY3Rpb25TdHIgIT09IHVuZGVmaW5lZCAmJiBwcm9qZWN0aW9uU3RyICE9PSB0b1Byb2plY3Rpb24pIHx8XHJcbiAgICAobG9uTGF0WzBdID4gMTgwIHx8IGxvbkxhdFswXSA8IC0xODApIHx8XHJcbiAgICAobG9uTGF0WzFdID4gOTAgfHwgbG9uTGF0WzFdIDwgLTkwKVxyXG4gICkge1xyXG4gICAgY29uc3Qgc291cmNlID0gcHJvamVjdGlvblN0ciA/ICdFUFNHOicgKyBwcm9qZWN0aW9uU3RyIDogbWFwUHJvamVjdGlvbjtcclxuICAgIGNvbnN0IGRlc3QgPSAnRVBTRzonICsgdG9Qcm9qZWN0aW9uO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGxvbkxhdCA9IG9scHJvai50cmFuc2Zvcm0obG9uTGF0LCBzb3VyY2UsIGRlc3QpIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbG9uTGF0OiB1bmRlZmluZWQsXHJcbiAgICAgICAgbWVzc2FnZTogJ1Byb2plY3Rpb24gJyArIHNvdXJjZSArICcgbm90IHN1cHBvcnRlZCcsXHJcbiAgICAgICAgcmFkaXVzOiB1bmRlZmluZWQsXHJcbiAgICAgICAgY29uZjogdW5kZWZpbmVkXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChNYXRoLmFicyhsb25MYXRbMF0pIDw9IDE4MCAmJiBNYXRoLmFicyhsb25MYXRbMV0pIDw9IDkwKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsb25MYXQsXHJcbiAgICAgIG1lc3NhZ2U6ICcnLFxyXG4gICAgICByYWRpdXM6IHJhZGl1cyA/IHBhcnNlSW50KHJhZGl1cywgMTApIDogdW5kZWZpbmVkLFxyXG4gICAgICBjb25mOiBjb25mID8gcGFyc2VJbnQoY29uZiwgMTApIDogdW5kZWZpbmVkXHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsb25MYXQ6IHVuZGVmaW5lZCxcclxuICAgICAgbWVzc2FnZTogJ0Nvb3JkaW5hdGUgb3V0IG9mIExvbmdpdHVkZS9MYXRpdHVkZSBib3VuZHMnLFxyXG4gICAgICByYWRpdXM6IHVuZGVmaW5lZCxcclxuICAgICAgY29uZjogdW5kZWZpbmVkXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgZGVncmVlcyBtaW51dGVzIHNlY29uZHMgdG8gZGRcclxuICogQHBhcmFtIGRlZ3JlZXMgRGVncmVlc1xyXG4gKiBAcGFyYW0gbWludXRlcyBNaW51dGVzXHJcbiAqIEBwYXJhbSBzZWNvbmRzIFNlY29uZHNcclxuICogQHBhcmFtIGRpcmVjdGlvbiBEaXJlY3Rpb25cclxuICovXHJcbmZ1bmN0aW9uIGNvbnZlcnRETVNUb0REKFxyXG4gIGRlZ3JlZXM6IG51bWJlcixcclxuICBtaW51dGVzOiBudW1iZXIsXHJcbiAgc2Vjb25kczogbnVtYmVyLFxyXG4gIGRpcmVjdGlvbjogc3RyaW5nXHJcbikge1xyXG4gIG1pbnV0ZXMgPSBtaW51dGVzIHx8IDA7XHJcbiAgc2Vjb25kcyA9IHNlY29uZHMgfHwgMDtcclxuXHJcbiAgY29uc3QgbmVnID0gZGVncmVlcyA8IDA7XHJcbiAgbGV0IGRkID0gTWF0aC5hYnMoZGVncmVlcykgKyBtaW51dGVzIC8gNjAgKyBzZWNvbmRzIC8gMzYwMDtcclxuXHJcbiAgaWYgKG5lZyB8fCBkaXJlY3Rpb24gPT09ICdTJyB8fCBkaXJlY3Rpb24gPT09ICdXJykge1xyXG4gICAgZGQgPSAtZGQ7XHJcbiAgfSAvLyBEb24ndCBkbyBhbnl0aGluZyBmb3IgTiBvciBFXHJcbiAgcmV0dXJuIGRkO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBkZCB0byBkZWdyZWVzIG1pbnV0ZXMgc2Vjb25kc1xyXG4gKiBAcGFyYW0gbG9uTGF0REQgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBpbiBkZFxyXG4gKiBAcGFyYW0gZGVjaW1hbCBudW1iZXIgb2YgZGVjaW1hbHMgZm9yIHNlY29uZHNcclxuICogQHJldHVybnMgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBpbiBkbXNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RERUb0RNUyhcclxuICBsb25MYXRERDogW251bWJlciwgbnVtYmVyXSwgZGVjaW1hbDogbnVtYmVyID0gM1xyXG4pOiBzdHJpbmdbXSB7XHJcbiAgY29uc3QgbG9uTGF0RE1TID0gW107XHJcblxyXG4gIGxvbkxhdERELmZvckVhY2goZGQgPT4ge1xyXG4gICAgY29uc3QgZGVncmVlcyA9IGRkIDwgMCA/IE1hdGguY2VpbChkZCkgOiBNYXRoLmZsb29yKGRkKTtcclxuICAgIGNvbnN0IGludCA9IGRkIDwgMCA/IChkZWdyZWVzIC0gZGQpICogNjAgOiAoZGQgLSBkZWdyZWVzKSAqIDYwO1xyXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoaW50KTtcclxuICAgIGNvbnN0IHNlY29uZHMgPSAoKGludCAtIG1pbnV0ZXMpICogNjApLnRvRml4ZWQoZGVjaW1hbCk7XHJcblxyXG4gICAgbG9uTGF0RE1TLnB1c2goYCR7ZGVncmVlc33CsCAke21pbnV0ZXN9JyAke3NlY29uZHN9XCJgKTtcclxuICB9KTtcclxuICByZXR1cm4gbG9uTGF0RE1TO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRydWUgb2YgdHdvIHZpZXcgc3RhdGVzIGFyZSBlcXVhbC5cclxuICogQHBhcmFtIHN0YXRlMSBWaWV3IHN0YXRlXHJcbiAqIEBwYXJhbSBzdGF0ZTIgVmlldyBzdGF0ZVxyXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB2aWV3IHN0YXRlcyBhcmUgZXF1YWxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB2aWV3U3RhdGVzQXJlRXF1YWwoXHJcbiAgc3RhdGUxOiBNYXBWaWV3U3RhdGUsXHJcbiAgc3RhdGUyOiBNYXBWaWV3U3RhdGVcclxuKTogYm9vbGVhbiB7XHJcbiAgaWYgKHN0YXRlMSA9PT0gdW5kZWZpbmVkIHx8IHN0YXRlMiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjb25zdCB0b2xlcmFuY2UgPSAxIC8gMTAwMDA7XHJcbiAgcmV0dXJuIChcclxuICAgIHN0YXRlMS56b29tID09PSBzdGF0ZTIuem9vbSAmJlxyXG4gICAgTWF0aC50cnVuYyhzdGF0ZTEuY2VudGVyWzBdIC8gdG9sZXJhbmNlKSA9PT1cclxuICAgICAgTWF0aC50cnVuYyhzdGF0ZTIuY2VudGVyWzBdIC8gdG9sZXJhbmNlKSAmJlxyXG4gICAgTWF0aC50cnVuYyhzdGF0ZTEuY2VudGVyWzFdIC8gdG9sZXJhbmNlKSA9PT1cclxuICAgICAgTWF0aC50cnVuYyhzdGF0ZTIuY2VudGVyWzFdIC8gdG9sZXJhbmNlKVxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBGb3JtYXQgdGhlIHNjYWxlIHRvIGEgaHVtYW4gcmVhZGFibGUgdGV4dFxyXG4gKiBAcGFyYW0gU2NhbGUgb2YgdGhlIG1hcFxyXG4gKiBAcmV0dXJucyBIdW1hbiByZWFkYWJsZSBzY2FsZSB0ZXh0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2NhbGUoc2NhbGUpIHtcclxuICBzY2FsZSA9IE1hdGgucm91bmQoc2NhbGUpO1xyXG4gIGlmIChzY2FsZSA8IDEwMDAwKSB7XHJcbiAgICByZXR1cm4gc2NhbGUgKyAnJztcclxuICB9XHJcblxyXG4gIHNjYWxlID0gTWF0aC5yb3VuZChzY2FsZSAvIDEwMDApO1xyXG4gIGlmIChzY2FsZSA8IDEwMDApIHtcclxuICAgIHJldHVybiBzY2FsZSArICdLJztcclxuICB9XHJcblxyXG4gIHNjYWxlID0gTWF0aC5yb3VuZChzY2FsZSAvIDEwMDApO1xyXG4gIHJldHVybiBzY2FsZSArICdNJztcclxufVxyXG5cclxuLyoqXHJcbiAqIFJldHVybiB0aGUgcmVzb2x1dGlvbiBmcm9tIGEgc2NhbGUgZGVub21cclxuICogQHBhcmFtIHNjYWxlIFNjYWxlIGRlbm9tXHJcbiAqIEBwYXJhbSBkcGkgRFBJXHJcbiAqIEByZXR1cm5zIFJlc29sdXRpb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvbHV0aW9uRnJvbVNjYWxlKFxyXG4gIHNjYWxlOiBudW1iZXIsXHJcbiAgZHBpOiBudW1iZXIgPSA5NlxyXG4pOiBudW1iZXIge1xyXG4gIGNvbnN0IGluY2hlc1Blck1ldGVyID0gMzkuMzcwMTtcclxuICByZXR1cm4gc2NhbGUgLyAoaW5jaGVzUGVyTWV0ZXIgKiBkcGkpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJuIHRoZSByZXNvbHV0aW9uIGZyb20gYSBzY2FsZSBkZW5vbVxyXG4gKiBAcGFyYW0gU2NhbGUgZGVub21cclxuICogQHJldHVybnMgUmVzb2x1dGlvblxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjYWxlRnJvbVJlc29sdXRpb24oXHJcbiAgcmVzb2x1dGlvbjogbnVtYmVyLFxyXG4gIHVuaXQ6IHN0cmluZyA9ICdtJyxcclxuICBkcGk6IG51bWJlciA9IDk2XHJcbik6IG51bWJlciB7XHJcbiAgY29uc3QgaW5jaGVzUGVyTWV0ZXIgPSAzOS4zNzAxO1xyXG4gIHJldHVybiByZXNvbHV0aW9uICogb2xwcm9qLk1FVEVSU19QRVJfVU5JVFt1bml0XSAqIGluY2hlc1Blck1ldGVyICogZHBpO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBDVFJMIGtleSBpcyBwdXNoZWQgZHVyaW5nIGFuIE9sIE1hcEJyb3dzZXJQb2ludGVyRXZlbnRcclxuICogQHBhcmFtIGV2ZW50IE9MIE1hcEJyb3dzZXJQb2ludGVyRXZlbnRcclxuICogQHJldHVybnMgV2hldGhlciB0aGUgQ1RSTCBrZXkgaXMgcHVzaGVkXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY3RybEtleURvd24oZXZlbnQ6IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQ8YW55Pik6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IG9yaWdpbmFsRXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50O1xyXG4gIHJldHVybiAoXHJcbiAgICAhb3JpZ2luYWxFdmVudC5hbHRLZXkgJiZcclxuICAgIChNQUMgPyBvcmlnaW5hbEV2ZW50Lm1ldGFLZXkgOiBvcmlnaW5hbEV2ZW50LmN0cmxLZXkpICYmXHJcbiAgICAhb3JpZ2luYWxFdmVudC5zaGlmdEtleVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByb3VuZENvb3JkVG8oY29vcmQ6IFtudW1iZXIsIG51bWJlcl0sIGRlY2ltYWw6IG51bWJlciA9IDMpOiBbbnVtYmVyLCBudW1iZXJdIHtcclxuICByZXR1cm4gW1xyXG4gICAgTnVtYmVyVXRpbHMucm91bmRUb05EZWNpbWFsKGNvb3JkWzBdLCBkZWNpbWFsKSxcclxuICAgIE51bWJlclV0aWxzLnJvdW5kVG9ORGVjaW1hbChjb29yZFsxXSwgZGVjaW1hbCldIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByb3VuZENvb3JkVG9TdHJpbmcoY29vcmQ6IFtudW1iZXIsIG51bWJlcl0sIGRlY2ltYWw6IG51bWJlciA9IDMpOiBbc3RyaW5nLCBzdHJpbmdde1xyXG4gICAgcmV0dXJuIHJvdW5kQ29vcmRUbyhjb29yZCwgZGVjaW1hbCkubWFwKHIgPT4gci50b1N0cmluZygpKSBhcyBbc3RyaW5nLCBzdHJpbmddO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyBhbiBhcnJheSBvZiBjb252ZXJ0ZWQgY29vcmRpbmF0ZXMuXHJcbiAqIENvbnZlcnNpb24gaXMgZG9uZSBmb3IgZXZlcnkgY29uZmlndXJlZCBwcm9qZWN0aW9uc1xyXG4gKiBhbmQgZm9yIHRoZSBjdXJyZW50IFVUTSB6b25lIGFuZCBNVE0gem9uZS5cclxuICogQHBhcmFtIGxvbkxhdCBbbnVtYmVyLCBudW1iZXJdIGFycmF5IG9mIHRoZSBjb29yZGluYXRlIHRvIHRyYW5zZm9ybS5cclxuICogQHBhcmFtIHByb2plY3Rpb25zICBQcm9qZWN0aW9uW10gQXJyYXkgb2YgZGVzdGluYXRpb24gcHJvamVjdGlvbi5cclxuICogQHBhcmFtIHJldmVyc2VDb29yZHMgVG8gcmV2ZXJzZSBjb29yZHMgZnJvbSBsYXRMb24gdG8gbG9uTGF0IChzZWFyY2ggb3B0aW9uKVxyXG4gKiBAcmV0dXJucyBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbnZlcnRlZCBjb29yZGluYXRlcy5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsb25MYXRDb252ZXJzaW9uKFxyXG4gIGxvbkxhdDogW251bWJlciwgbnVtYmVyXSxcclxuICBwcm9qZWN0aW9uczogUHJvamVjdGlvbltdXHJcbik6IHtcclxuICBjb2RlOiBzdHJpbmc7XHJcbiAgYWxpYXM6IHN0cmluZztcclxuICBjb29yZDogW251bWJlciwgbnVtYmVyXTtcclxuICBpZ28yQ29vcmRGb3JtYXQ6IHN0cmluZztcclxufVtdIHtcclxuICBjb25zdCByYXdDb29yZDM4NTcgPSBvbHByb2oudHJhbnNmb3JtKGxvbkxhdCwgJ0VQU0c6NDMyNicsICdFUFNHOjM4NTcnKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gIGNvbnN0IGNvbnZlcnRlZExvbkxhdCA9IFtcclxuICAgIHtcclxuICAgICAgY29kZTogJ0VQU0c6Mzg1NycsXHJcbiAgICAgIGFsaWFzOiAnV2ViIE1lcmNhdG9yJyxcclxuICAgICAgY29vcmQ6IHJhd0Nvb3JkMzg1NyxcclxuICAgICAgaWdvMkNvb3JkRm9ybWF0OiBgJHtyb3VuZENvb3JkVG8ocmF3Q29vcmQzODU3KS5qb2luKCcsICcpfSA7IDM4NTdgXHJcbiAgICB9XHJcbiAgXTtcclxuXHJcbiAgLy8gZGV0ZWN0IHRoZSBjdXJyZW50IHV0bSB6b25lLlxyXG4gIGNvbnN0IHV0bVpvbmUgPSB1dG1ab25lRnJvbUxvbkxhdChsb25MYXQpO1xyXG4gIGNvbnN0IGVwc2dVdG0gPSB1dG1ab25lIDwgMTAgPyBgRVBTRzozMjYwJHt1dG1ab25lfWAgOiBgRVBTRzozMjYke3V0bVpvbmV9YDtcclxuICBjb25zdCB1dG1OYW1lID0gYFVUTS0ke3V0bVpvbmV9YDtcclxuICBjb25zdCByYXdDb29yZFV0bSA9IG9scHJvai50cmFuc2Zvcm0obG9uTGF0LCAnRVBTRzo0MzI2JywgZXBzZ1V0bSkgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICBjb252ZXJ0ZWRMb25MYXQucHVzaCh7XHJcbiAgICBjb2RlOiBlcHNnVXRtLFxyXG4gICAgYWxpYXM6ICdVVE0nLFxyXG4gICAgY29vcmQ6IHJhd0Nvb3JkVXRtLFxyXG4gICAgaWdvMkNvb3JkRm9ybWF0OiBgJHt1dG1OYW1lfSAke3JvdW5kQ29vcmRUbyhyYXdDb29yZFV0bSkuam9pbignLCAnKX1gXHJcbiAgfSk7XHJcblxyXG4gIC8vIGRldGVjdCB0aGUgY3VycmVudCBtdG0gem9uZS5cclxuICBjb25zdCBtdG1ab25lID0gbXRtWm9uZUZyb21Mb25MYXQobG9uTGF0KTtcclxuICBpZiAobXRtWm9uZSkge1xyXG4gICAgY29uc3QgZXBzZ010bSA9XHJcbiAgICAgIG10bVpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke210bVpvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyBtdG1ab25lfWA7XHJcbiAgICBjb25zdCBtdG1OYW1lID0gYE1UTS0ke210bVpvbmV9YDtcclxuICAgIGNvbnN0IHJhd0Nvb3JkTXRtID0gb2xwcm9qLnRyYW5zZm9ybShsb25MYXQsICdFUFNHOjQzMjYnLCBlcHNnTXRtKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgY29udmVydGVkTG9uTGF0LnB1c2goe1xyXG4gICAgICBjb2RlOiBlcHNnTXRtLFxyXG4gICAgICBhbGlhczogJ01UTScsXHJcbiAgICAgIGNvb3JkOiByYXdDb29yZE10bSxcclxuICAgICAgaWdvMkNvb3JkRm9ybWF0OiBgJHttdG1OYW1lfSAke3JvdW5kQ29vcmRUbyhyYXdDb29yZE10bSkuam9pbignLCAnKX1gXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByb2plY3Rpb25zLmZvckVhY2gocHJvamVjdGlvbiA9PiB7XHJcbiAgICBjb25zdCByYXdDb29yZCA9IG9scHJvai50cmFuc2Zvcm0obG9uTGF0LCAnRVBTRzo0MzI2JywgcHJvamVjdGlvbi5jb2RlKSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgY29uc3QgbnVtZXJpY0Vwc2dDb2RlID0gcHJvamVjdGlvbi5jb2RlLnNwbGl0KCc6JylbMV07XHJcbiAgICBjb252ZXJ0ZWRMb25MYXQucHVzaCh7XHJcbiAgICAgIGNvZGU6IHByb2plY3Rpb24uY29kZSxcclxuICAgICAgYWxpYXM6IHByb2plY3Rpb24uYWxpYXMgfHwgcHJvamVjdGlvbi5jb2RlLFxyXG4gICAgICBjb29yZDogcmF3Q29vcmQsXHJcbiAgICAgIGlnbzJDb29yZEZvcm1hdDogYCR7cm91bmRDb29yZFRvKHJhd0Nvb3JkKS5qb2luKCcsICcpfSA7ICR7bnVtZXJpY0Vwc2dDb2RlfWBcclxuICAgIH0pO1xyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gY29udmVydGVkTG9uTGF0O1xyXG59XHJcblxyXG4vKipcclxuICogRGV0ZWN0IHRoZSBjdXJyZW50IHV0bSB6b25lIG9mIHRoZSBsb24vbGF0IGNvb3JkaW5hdGUuXHJcbiAqIEBwYXJhbSBsb25MYXQgW251bWJlciwgbnVtYmVyXSBhcnJheSBvZiB0aGUgY29vcmRpbmF0ZSB0byBkZXRlY3QgdGhlIFVUTSB6b25lLlxyXG4gKiBAcmV0dXJucyBudW1iZXIgVGhlIFVUTSB6b25lLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHV0bVpvbmVGcm9tTG9uTGF0KGxvbkxhdDogW251bWJlciwgbnVtYmVyXSkge1xyXG4gIHJldHVybiBNYXRoLmNlaWwoKGxvbkxhdFswXSArIDE4MCkgLyA2KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIERldGVjdCB0aGUgY3VycmVudCBtdG0gem9uZSBvZiB0aGUgbG9uL2xhdCBjb29yZGluYXRlLlxyXG4gKiBAcGFyYW0gbG9uTGF0IFtudW1iZXIsIG51bWJlcl0gYXJyYXkgb2YgdGhlIGNvb3JkaW5hdGUgdG8gZGV0ZWN0IHRoZSBNVE0gem9uZS5cclxuICogQHJldHVybnMgbnVtYmVyIFRoZSBNVE0gem9uZS4gVW5kZWZpbmVkIGlmIG91dHNpZGUgb2YgdGhlIG10bSBhcHBsaWNhdGlvbiB6b25lLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG10bVpvbmVGcm9tTG9uTGF0KGxvbkxhdDogW251bWJlciwgbnVtYmVyXSkge1xyXG4gIGNvbnN0IGxvbmcgPSBsb25MYXRbMF07XHJcbiAgbGV0IG10bVpvbmU7XHJcbiAgaWYgKGxvbmcgPCAtNTEgJiYgbG9uZyA+IC01NCkge1xyXG4gICAgbXRtWm9uZSA9IDE7XHJcbiAgfVxyXG4gIGlmIChsb25nIDwgLTU0ICYmIGxvbmcgPiAtNTcpIHtcclxuICAgIG10bVpvbmUgPSAyO1xyXG4gIH1cclxuICBpZiAobG9uZyA8IC01NyAmJiBsb25nID4gLTYwKSB7XHJcbiAgICBtdG1ab25lID0gMztcclxuICB9XHJcbiAgaWYgKGxvbmcgPCAtNjAgJiYgbG9uZyA+IC02Mykge1xyXG4gICAgbXRtWm9uZSA9IDQ7XHJcbiAgfVxyXG4gIGlmIChsb25nIDwgLTYzICYmIGxvbmcgPiAtNjYpIHtcclxuICAgIG10bVpvbmUgPSA1O1xyXG4gIH1cclxuICBpZiAobG9uZyA8IC02NiAmJiBsb25nID4gLTY5KSB7XHJcbiAgICBtdG1ab25lID0gNjtcclxuICB9XHJcbiAgaWYgKGxvbmcgPCAtNjkgJiYgbG9uZyA+IC03Mikge1xyXG4gICAgbXRtWm9uZSA9IDc7XHJcbiAgfVxyXG4gIGlmIChsb25nIDwgLTcyICYmIGxvbmcgPiAtNzUpIHtcclxuICAgIG10bVpvbmUgPSA4O1xyXG4gIH1cclxuICBpZiAobG9uZyA8IC03NSAmJiBsb25nID4gLTc4KSB7XHJcbiAgICBtdG1ab25lID0gOTtcclxuICB9XHJcbiAgaWYgKGxvbmcgPCAtNzggJiYgbG9uZyA+IC04MSkge1xyXG4gICAgbXRtWm9uZSA9IDEwO1xyXG4gIH1cclxuICByZXR1cm4gbXRtWm9uZTtcclxufVxyXG4iXX0=