@eui/ecl 17.0.0-next.4 → 17.0.0-next.5

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 (684) hide show
  1. package/esm2022/lib/components/ecl-accordion/ecl-accordion-item.component.mjs +6 -8
  2. package/esm2022/lib/components/ecl-accordion/ecl-accordion.component.mjs +5 -7
  3. package/esm2022/lib/components/ecl-accordion/ecl-accordion.module.mjs +8 -24
  4. package/esm2022/lib/components/ecl-app/deprecated/common/ecl-app.component.mjs +7 -6
  5. package/esm2022/lib/components/ecl-app/deprecated/ecl-app-core/ecl-app-core.component.mjs +5 -5
  6. package/esm2022/lib/components/ecl-app/deprecated/ecl-app-core/ecl-app-core.module.mjs +8 -20
  7. package/esm2022/lib/components/ecl-app/deprecated/ecl-app-harmonised/ecl-app-harmonised.component.mjs +5 -5
  8. package/esm2022/lib/components/ecl-app/deprecated/ecl-app-harmonised/ecl-app-harmonised.module.mjs +8 -20
  9. package/esm2022/lib/components/ecl-app/deprecated/ecl-app-standardised/ecl-app-standardised.component.mjs +5 -5
  10. package/esm2022/lib/components/ecl-app/deprecated/ecl-app-standardised/ecl-app-standardised.module.mjs +8 -20
  11. package/esm2022/lib/components/ecl-app/ecl-app.component.mjs +10 -8
  12. package/esm2022/lib/components/ecl-app/ecl-app.module.mjs +8 -20
  13. package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner-credit.directive.mjs +5 -5
  14. package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner-cta-link.directive.mjs +5 -5
  15. package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner-description.directive.mjs +5 -5
  16. package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner-title.directive.mjs +5 -5
  17. package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner.component.mjs +9 -7
  18. package/esm2022/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner.module.mjs +9 -18
  19. package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner-credit.directive.mjs +5 -5
  20. package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner-cta-link.directive.mjs +5 -5
  21. package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner-description.directive.mjs +5 -5
  22. package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner-title.directive.mjs +5 -5
  23. package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner.component.mjs +9 -7
  24. package/esm2022/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner.module.mjs +9 -18
  25. package/esm2022/lib/components/ecl-banner/ecl-banner-credit.directive.mjs +5 -5
  26. package/esm2022/lib/components/ecl-banner/ecl-banner-description.directive.mjs +9 -9
  27. package/esm2022/lib/components/ecl-banner/ecl-banner-picture.directive.mjs +12 -14
  28. package/esm2022/lib/components/ecl-banner/ecl-banner-title.directive.mjs +9 -9
  29. package/esm2022/lib/components/ecl-banner/ecl-banner.component.mjs +9 -7
  30. package/esm2022/lib/components/ecl-banner/ecl-banner.module.mjs +9 -18
  31. package/esm2022/lib/components/ecl-banner/index.mjs +1 -1
  32. package/esm2022/lib/components/ecl-base.directive.mjs +8 -9
  33. package/esm2022/lib/components/ecl-blockquote/ecl-blockquote-picture.directive.mjs +11 -15
  34. package/esm2022/lib/components/ecl-blockquote/ecl-blockquote.component.mjs +6 -8
  35. package/esm2022/lib/components/ecl-blockquote/ecl-blockquote.module.mjs +8 -22
  36. package/esm2022/lib/components/ecl-breadcrumb/deprecated/common/ecl-breadcrumb-segment.component.mjs +5 -4
  37. package/esm2022/lib/components/ecl-breadcrumb/deprecated/common/ecl-breadcrumb.component.mjs +11 -10
  38. package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-core/ecl-breadcrumb-core-segment.component.mjs +8 -9
  39. package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-core/ecl-breadcrumb-core.component.mjs +8 -10
  40. package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-core/ecl-breadcrumb-core.module.mjs +8 -30
  41. package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-harmonised/ecl-breadcrumb-harmonised-segment.component.mjs +9 -7
  42. package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-harmonised/ecl-breadcrumb-harmonised.component.mjs +8 -10
  43. package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-harmonised/ecl-breadcrumb-harmonised.module.mjs +8 -30
  44. package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-standardised/ecl-breadcrumb-standardised-segment.component.mjs +9 -7
  45. package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-standardised/ecl-breadcrumb-standardised.component.mjs +8 -10
  46. package/esm2022/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-standardised/ecl-breadcrumb-standardised.module.mjs +8 -30
  47. package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb-segment.component.mjs +6 -9
  48. package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.mjs +12 -17
  49. package/esm2022/lib/components/ecl-breadcrumb/ecl-breadcrumb.module.mjs +7 -26
  50. package/esm2022/lib/components/ecl-breadcrumb/index.mjs +1 -1
  51. package/esm2022/lib/components/ecl-button/ecl-button-label.directive.mjs +6 -8
  52. package/esm2022/lib/components/ecl-button/ecl-button.component.mjs +13 -15
  53. package/esm2022/lib/components/ecl-button/ecl-button.module.mjs +8 -21
  54. package/esm2022/lib/components/ecl-button/index.mjs +1 -1
  55. package/esm2022/lib/components/ecl-card/ecl-card-body.component.mjs +6 -8
  56. package/esm2022/lib/components/ecl-card/ecl-card-image/ecl-card-image.component.mjs +6 -8
  57. package/esm2022/lib/components/ecl-card/ecl-card-picture.directive.mjs +11 -15
  58. package/esm2022/lib/components/ecl-card/ecl-card.component.mjs +5 -7
  59. package/esm2022/lib/components/ecl-card/ecl-card.module.mjs +9 -38
  60. package/esm2022/lib/components/ecl-carousel/ecl-carousel-item.component.mjs +6 -8
  61. package/esm2022/lib/components/ecl-carousel/ecl-carousel.component.mjs +20 -20
  62. package/esm2022/lib/components/ecl-carousel/ecl-carousel.module.mjs +9 -26
  63. package/esm2022/lib/components/ecl-carousel/index.mjs +1 -1
  64. package/esm2022/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.mjs +19 -21
  65. package/esm2022/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.mjs +12 -10
  66. package/esm2022/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.mjs +12 -10
  67. package/esm2022/lib/components/ecl-category-filter/ecl-category-filter.module.mjs +8 -34
  68. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-help.component.mjs +5 -7
  69. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-input.directive.mjs +5 -7
  70. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox-label.component.mjs +6 -8
  71. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox.directive.mjs +7 -9
  72. package/esm2022/lib/components/ecl-checkbox/ecl-checkbox.module.mjs +7 -23
  73. package/esm2022/lib/components/ecl-content-block/ecl-content-block-elements.directive.mjs +86 -120
  74. package/esm2022/lib/components/ecl-content-block/ecl-content-block.component.mjs +6 -8
  75. package/esm2022/lib/components/ecl-content-block/ecl-content-block.module.mjs +9 -15
  76. package/esm2022/lib/components/ecl-content-block/index.mjs +1 -1
  77. package/esm2022/lib/components/ecl-content-item/ecl-content-item-image.directive.mjs +14 -14
  78. package/esm2022/lib/components/ecl-content-item/ecl-content-item.component.mjs +6 -9
  79. package/esm2022/lib/components/ecl-content-item/ecl-content-item.module.mjs +9 -26
  80. package/esm2022/lib/components/ecl-content-item/index.mjs +1 -1
  81. package/esm2022/lib/components/ecl-date-block/ecl-date-block.component.mjs +14 -11
  82. package/esm2022/lib/components/ecl-date-block/ecl-date-block.module.mjs +31 -7
  83. package/esm2022/lib/components/ecl-date-block/index.mjs +1 -1
  84. package/esm2022/lib/components/ecl-date-picker/ecl-date-picker.directive.mjs +11 -15
  85. package/esm2022/lib/components/ecl-date-picker/ecl-date-picker.module.mjs +7 -12
  86. package/esm2022/lib/components/ecl-expandable/ecl-expandable.component.mjs +6 -8
  87. package/esm2022/lib/components/ecl-expandable/ecl-expandable.module.mjs +6 -6
  88. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-description.component.mjs +6 -8
  89. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-item.component.mjs +7 -9
  90. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-title.component.mjs +6 -8
  91. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-value.component.mjs +6 -8
  92. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures-view-all.component.mjs +7 -12
  93. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures.component.mjs +6 -9
  94. package/esm2022/lib/components/ecl-fact-figures/ecl-fact-figures.module.mjs +8 -13
  95. package/esm2022/lib/components/ecl-featured/ecl-featured-item-description.component.mjs +4 -4
  96. package/esm2022/lib/components/ecl-featured/ecl-featured-item-link.directive.mjs +5 -5
  97. package/esm2022/lib/components/ecl-featured/ecl-featured-item.component.mjs +4 -4
  98. package/esm2022/lib/components/ecl-featured/ecl-featured.component.mjs +5 -8
  99. package/esm2022/lib/components/ecl-featured/ecl-featured.module.mjs +8 -32
  100. package/esm2022/lib/components/ecl-feedback-message/ecl-feedback-message.directive.mjs +7 -9
  101. package/esm2022/lib/components/ecl-feedback-message/ecl-feedback-message.module.mjs +6 -6
  102. package/esm2022/lib/components/ecl-feedback-message/index.mjs +1 -1
  103. package/esm2022/lib/components/ecl-file/ecl-file-item/ecl-file-download.event.mjs +1 -1
  104. package/esm2022/lib/components/ecl-file/ecl-file-item/ecl-file-item.component.mjs +8 -9
  105. package/esm2022/lib/components/ecl-file/ecl-file-items/ecl-file-items.component.mjs +7 -9
  106. package/esm2022/lib/components/ecl-file/ecl-file-picture.directive.mjs +12 -14
  107. package/esm2022/lib/components/ecl-file/ecl-file-taxonomy/ecl-file-taxonomy.component.mjs +6 -8
  108. package/esm2022/lib/components/ecl-file/ecl-file.component.mjs +6 -9
  109. package/esm2022/lib/components/ecl-file/ecl-file.module.mjs +9 -13
  110. package/esm2022/lib/components/ecl-file/index.mjs +1 -1
  111. package/esm2022/lib/components/ecl-file-upload/ecl-file-upload.directive.mjs +11 -12
  112. package/esm2022/lib/components/ecl-file-upload/ecl-file-upload.module.mjs +6 -6
  113. package/esm2022/lib/components/ecl-form-group/ecl-form-group.component.mjs +6 -8
  114. package/esm2022/lib/components/ecl-form-group/ecl-form-group.module.mjs +7 -15
  115. package/esm2022/lib/components/ecl-form-label/ecl-form-label.component.mjs +7 -5
  116. package/esm2022/lib/components/ecl-form-label/ecl-form-label.module.mjs +6 -6
  117. package/esm2022/lib/components/ecl-gallery/ecl-gallery-footer.component.mjs +5 -5
  118. package/esm2022/lib/components/ecl-gallery/ecl-gallery-item.component.mjs +6 -9
  119. package/esm2022/lib/components/ecl-gallery/ecl-gallery-media.directive.mjs +11 -15
  120. package/esm2022/lib/components/ecl-gallery/ecl-gallery.component.mjs +22 -28
  121. package/esm2022/lib/components/ecl-gallery/ecl-gallery.module.mjs +10 -28
  122. package/esm2022/lib/components/ecl-help-block/ecl-help-block.directive.mjs +6 -9
  123. package/esm2022/lib/components/ecl-help-block/ecl-help-block.module.mjs +5 -5
  124. package/esm2022/lib/components/ecl-icon/ecl-icon.component.mjs +7 -7
  125. package/esm2022/lib/components/ecl-icon/ecl-icon.module.mjs +6 -6
  126. package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation-item.component.mjs +5 -5
  127. package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.component.mjs +19 -17
  128. package/esm2022/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.module.mjs +8 -30
  129. package/esm2022/lib/components/ecl-label/ecl-label.directive.mjs +6 -9
  130. package/esm2022/lib/components/ecl-label/ecl-label.module.mjs +6 -6
  131. package/esm2022/lib/components/ecl-label/index.mjs +1 -1
  132. package/esm2022/lib/components/ecl-language-list/ecl-language-list-item.component.mjs +7 -10
  133. package/esm2022/lib/components/ecl-language-list/ecl-language-list.component.mjs +15 -19
  134. package/esm2022/lib/components/ecl-language-list/ecl-language-list.module.mjs +8 -33
  135. package/esm2022/lib/components/ecl-link/ecl-link-label.directive.mjs +6 -8
  136. package/esm2022/lib/components/ecl-link/ecl-link.directive.mjs +9 -12
  137. package/esm2022/lib/components/ecl-link/ecl-link.module.mjs +6 -6
  138. package/esm2022/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.mjs +11 -11
  139. package/esm2022/lib/components/ecl-list/ecl-description-list-definition-item.directive.mjs +29 -0
  140. package/esm2022/lib/components/ecl-list/ecl-list.directive.mjs +29 -55
  141. package/esm2022/lib/components/ecl-list/ecl-list.module.mjs +11 -22
  142. package/esm2022/lib/components/ecl-list/index.mjs +2 -1
  143. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-icon.directive.mjs +3 -3
  144. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-image/ecl-list-illustration-image.component.mjs +9 -9
  145. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-item.component.mjs +5 -5
  146. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration-picture.directive.mjs +15 -15
  147. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration.component.mjs +7 -5
  148. package/esm2022/lib/components/ecl-list-illustration/ecl-list-illustration.module.mjs +9 -18
  149. package/esm2022/lib/components/ecl-media-container/ecl-media-container-iframe.directive.mjs +5 -5
  150. package/esm2022/lib/components/ecl-media-container/ecl-media-container-item.directive.mjs +8 -9
  151. package/esm2022/lib/components/ecl-media-container/ecl-media-container-picture.directive.mjs +4 -4
  152. package/esm2022/lib/components/ecl-media-container/ecl-media-container.component.mjs +6 -9
  153. package/esm2022/lib/components/ecl-media-container/ecl-media-container.module.mjs +7 -7
  154. package/esm2022/lib/components/ecl-menu/common/ecl-menu-item.event.mjs +1 -1
  155. package/esm2022/lib/components/ecl-menu/ecl-menu/ecl-menu-item.component.mjs +82 -31
  156. package/esm2022/lib/components/ecl-menu/ecl-menu/ecl-menu.component.mjs +258 -56
  157. package/esm2022/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega-item.component.mjs +7 -7
  158. package/esm2022/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega.component.mjs +19 -16
  159. package/esm2022/lib/components/ecl-menu/ecl-menu.module.mjs +10 -25
  160. package/esm2022/lib/components/ecl-message/ecl-message-title.directive.mjs +6 -8
  161. package/esm2022/lib/components/ecl-message/ecl-message.component.mjs +6 -9
  162. package/esm2022/lib/components/ecl-message/ecl-message.module.mjs +7 -18
  163. package/esm2022/lib/components/ecl-modal/ecl-modal-body.component.mjs +6 -8
  164. package/esm2022/lib/components/ecl-modal/ecl-modal-close.directive.mjs +5 -5
  165. package/esm2022/lib/components/ecl-modal/ecl-modal-footer.component.mjs +7 -9
  166. package/esm2022/lib/components/ecl-modal/ecl-modal-header.component.mjs +6 -8
  167. package/esm2022/lib/components/ecl-modal/ecl-modal-trigger.directive.mjs +5 -5
  168. package/esm2022/lib/components/ecl-modal/ecl-modal.component.mjs +10 -13
  169. package/esm2022/lib/components/ecl-modal/ecl-modal.module.mjs +9 -21
  170. package/esm2022/lib/components/ecl-modal/index.mjs +1 -1
  171. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect-option.directive.mjs +12 -10
  172. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect.component.mjs +40 -43
  173. package/esm2022/lib/components/ecl-multiselect/ecl-multiselect.module.mjs +6 -9
  174. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-image/ecl-navigation-list-image.component.mjs +6 -8
  175. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-item.component.mjs +6 -9
  176. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list-picture.directive.mjs +11 -15
  177. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list.component.mjs +6 -9
  178. package/esm2022/lib/components/ecl-navigation-list/ecl-navigation-list.module.mjs +9 -15
  179. package/esm2022/lib/components/ecl-navigation-list/index.mjs +1 -1
  180. package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker-item.component.mjs +8 -8
  181. package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker.component.mjs +19 -16
  182. package/esm2022/lib/components/ecl-news-ticker/ecl-news-ticker.module.mjs +8 -30
  183. package/esm2022/lib/components/ecl-page-header/deprecated/common/ecl-page-header.component.mjs +5 -4
  184. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core-description.directive.mjs +13 -13
  185. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core-meta.directive.mjs +9 -9
  186. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core-title.directive.mjs +5 -5
  187. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core.component.mjs +9 -7
  188. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core.module.mjs +9 -9
  189. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised-description.directive.mjs +13 -13
  190. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised-meta.directive.mjs +9 -9
  191. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised-title.directive.mjs +5 -5
  192. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised.component.mjs +6 -9
  193. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised.module.mjs +10 -10
  194. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised-description.directive.mjs +13 -13
  195. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised-meta.directive.mjs +9 -9
  196. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised-title.directive.mjs +5 -5
  197. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised.component.mjs +9 -7
  198. package/esm2022/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised.module.mjs +10 -10
  199. package/esm2022/lib/components/ecl-page-header/ecl-page-header-background.directive.mjs +11 -11
  200. package/esm2022/lib/components/ecl-page-header/ecl-page-header-description/ecl-page-header-description.component.mjs +8 -8
  201. package/esm2022/lib/components/ecl-page-header/ecl-page-header-description.directive.mjs +13 -13
  202. package/esm2022/lib/components/ecl-page-header/ecl-page-header-meta.directive.mjs +9 -9
  203. package/esm2022/lib/components/ecl-page-header/ecl-page-header-title.directive.mjs +5 -5
  204. package/esm2022/lib/components/ecl-page-header/ecl-page-header.component.mjs +8 -9
  205. package/esm2022/lib/components/ecl-page-header/ecl-page-header.module.mjs +7 -7
  206. package/esm2022/lib/components/ecl-pagination/ecl-pagination-item.component.mjs +8 -6
  207. package/esm2022/lib/components/ecl-pagination/ecl-pagination.component.mjs +7 -7
  208. package/esm2022/lib/components/ecl-pagination/ecl-pagination.module.mjs +6 -6
  209. package/esm2022/lib/components/ecl-popover/ecl-popover-content.directive.mjs +6 -8
  210. package/esm2022/lib/components/ecl-popover/ecl-popover-list.directive.mjs +16 -22
  211. package/esm2022/lib/components/ecl-popover/ecl-popover-toggle.directive.mjs +6 -8
  212. package/esm2022/lib/components/ecl-popover/ecl-popover.component.mjs +14 -11
  213. package/esm2022/lib/components/ecl-popover/ecl-popover.module.mjs +10 -22
  214. package/esm2022/lib/components/ecl-popover/index.mjs +1 -1
  215. package/esm2022/lib/components/ecl-radio/ecl-radio-help.component.mjs +5 -7
  216. package/esm2022/lib/components/ecl-radio/ecl-radio-input.directive.mjs +6 -10
  217. package/esm2022/lib/components/ecl-radio/ecl-radio-label.component.mjs +6 -8
  218. package/esm2022/lib/components/ecl-radio/ecl-radio.directive.mjs +6 -9
  219. package/esm2022/lib/components/ecl-radio/ecl-radio.module.mjs +7 -23
  220. package/esm2022/lib/components/ecl-range/ecl-range-value.component.mjs +6 -8
  221. package/esm2022/lib/components/ecl-range/ecl-range.directive.mjs +12 -17
  222. package/esm2022/lib/components/ecl-range/ecl-range.module.mjs +7 -12
  223. package/esm2022/lib/components/ecl-rating-field/ecl-rating-field.component.mjs +7 -10
  224. package/esm2022/lib/components/ecl-rating-field/ecl-rating-field.module.mjs +7 -9
  225. package/esm2022/lib/components/ecl-rating-field/index.mjs +1 -1
  226. package/esm2022/lib/components/ecl-search-form/ecl-search-form.component.mjs +6 -8
  227. package/esm2022/lib/components/ecl-search-form/ecl-search-form.module.mjs +7 -7
  228. package/esm2022/lib/components/ecl-select/ecl-select-container.component.mjs +8 -6
  229. package/esm2022/lib/components/ecl-select/ecl-select.directive.mjs +5 -7
  230. package/esm2022/lib/components/ecl-select/ecl-select.module.mjs +8 -18
  231. package/esm2022/lib/components/ecl-site-footer/deprecated/common/ecl-footer.component.mjs +5 -4
  232. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-core.component.mjs +6 -8
  233. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-core.module.mjs +7 -18
  234. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-column.directive.mjs +5 -5
  235. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-description.directive.mjs +5 -5
  236. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-link.directive.mjs +3 -3
  237. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-list.directive.mjs +9 -9
  238. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-section.directive.mjs +6 -9
  239. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-title.directive.mjs +9 -9
  240. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-column.directive.mjs +13 -13
  241. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-description.directive.mjs +5 -5
  242. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-link.directive.mjs +9 -9
  243. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-list.directive.mjs +21 -21
  244. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-section.directive.mjs +5 -5
  245. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-title.directive.mjs +9 -9
  246. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-harmonised.component.mjs +6 -9
  247. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-harmonised.module.mjs +11 -22
  248. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-column.directive.mjs +13 -13
  249. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-description.directive.mjs +5 -5
  250. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-link.directive.mjs +9 -9
  251. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-list.directive.mjs +9 -9
  252. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-section.directive.mjs +5 -5
  253. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-title.directive.mjs +9 -9
  254. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-standardised.component.mjs +6 -8
  255. package/esm2022/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-standardised.module.mjs +11 -22
  256. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ec/ecl-site-footer-fixed-content.mjs +5 -5
  257. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ec/index.mjs +1 -1
  258. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-column.directive.mjs +13 -13
  259. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-description.directive.mjs +5 -5
  260. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-link.directive.mjs +15 -15
  261. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-list.directive.mjs +21 -21
  262. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-section.directive.mjs +5 -5
  263. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-title.directive.mjs +9 -9
  264. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/eu/ecl-site-footer-fixed-content.mjs +5 -5
  265. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/eu/index.mjs +1 -1
  266. package/esm2022/lib/components/ecl-site-footer/ecl-footer-elements/index.mjs +1 -1
  267. package/esm2022/lib/components/ecl-site-footer/ecl-site-footer.component.mjs +6 -9
  268. package/esm2022/lib/components/ecl-site-footer/ecl-site-footer.module.mjs +12 -27
  269. package/esm2022/lib/components/ecl-site-footer/index.mjs +1 -1
  270. package/esm2022/lib/components/ecl-site-header/action/ecl-site-header-action.component.mjs +5 -5
  271. package/esm2022/lib/components/ecl-site-header/banner-top/ecl-site-header-banner-top.component.mjs +5 -5
  272. package/esm2022/lib/components/ecl-site-header/cta/ecl-site-header-cta.directive.mjs +3 -3
  273. package/esm2022/lib/components/ecl-site-header/cta/index.mjs +1 -1
  274. package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-action.component.mjs +6 -5
  275. package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-banner-top.component.mjs +6 -5
  276. package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-language.component.mjs +5 -4
  277. package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-login.component.mjs +6 -5
  278. package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header-search.component.mjs +5 -4
  279. package/esm2022/lib/components/ecl-site-header/deprecated/common/ecl-site-header.component.mjs +9 -19
  280. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/action/ecl-site-header-core-action.component.mjs +5 -5
  281. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/ecl-site-header-core.component.mjs +5 -5
  282. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/ecl-site-header-core.module.mjs +7 -7
  283. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/language/ecl-site-header-core-language.component.mjs +5 -5
  284. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/login/ecl-site-header-core-login-details.directive.mjs +9 -9
  285. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/login/ecl-site-header-core-login.component.mjs +6 -9
  286. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-core/search/ecl-site-header-core-search.component.mjs +6 -9
  287. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/action/ecl-site-header-harmonised-action.component.mjs +5 -5
  288. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/banner-top/ecl-site-header-harmonised-banner-top.component.mjs +5 -5
  289. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/ecl-site-header-harmonised.component.mjs +6 -9
  290. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/ecl-site-header-harmonised.module.mjs +9 -9
  291. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/language/ecl-site-header-harmonised-language.component.mjs +5 -5
  292. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/login/ecl-site-header-harmonised-login-details.directive.mjs +9 -9
  293. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/login/ecl-site-header-harmonised-login.component.mjs +6 -9
  294. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/search/ecl-site-header-harmonised-search.component.mjs +6 -9
  295. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/action/ecl-site-header-standardised-action.component.mjs +5 -5
  296. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/banner-top/ecl-site-header-standardised-banner-top.component.mjs +5 -5
  297. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/cta/ecl-site-header-standardised-cta.directive.mjs +3 -3
  298. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/ecl-site-header-standardised.component.mjs +6 -9
  299. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/ecl-site-header-standardised.module.mjs +7 -7
  300. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/language/ecl-site-header-standardised-language.component.mjs +5 -5
  301. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/login/ecl-site-header-standardised-login-details.directive.mjs +9 -9
  302. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/login/ecl-site-header-standardised-login.component.mjs +6 -6
  303. package/esm2022/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/search/ecl-site-header-standardised-search.component.mjs +6 -9
  304. package/esm2022/lib/components/ecl-site-header/ecl-site-header-environment/ecl-site-header-environment.component.mjs +5 -8
  305. package/esm2022/lib/components/ecl-site-header/ecl-site-header.component.mjs +10 -24
  306. package/esm2022/lib/components/ecl-site-header/ecl-site-header.module.mjs +10 -14
  307. package/esm2022/lib/components/ecl-site-header/index.mjs +1 -1
  308. package/esm2022/lib/components/ecl-site-header/language/ecl-site-header-language-popover.component.mjs +8 -6
  309. package/esm2022/lib/components/ecl-site-header/language/ecl-site-header-language.component.mjs +12 -12
  310. package/esm2022/lib/components/ecl-site-header/login/ecl-site-header-login-details.directive.mjs +9 -9
  311. package/esm2022/lib/components/ecl-site-header/login/ecl-site-header-login.component.mjs +7 -10
  312. package/esm2022/lib/components/ecl-site-header/message/ecl-site-header-message.component.mjs +6 -8
  313. package/esm2022/lib/components/ecl-site-header/search/ecl-site-header-search.component.mjs +6 -9
  314. package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow-item.component.mjs +6 -8
  315. package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow-link.directive.mjs +7 -9
  316. package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow.component.mjs +8 -9
  317. package/esm2022/lib/components/ecl-social-media-follow/ecl-social-media-follow.module.mjs +7 -15
  318. package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share-item.component.mjs +6 -8
  319. package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share-link.directive.mjs +7 -9
  320. package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share.component.mjs +6 -9
  321. package/esm2022/lib/components/ecl-social-media-share/ecl-social-media-share.module.mjs +7 -15
  322. package/esm2022/lib/components/ecl-spinner/ecl-spinner-label.directive.mjs +7 -7
  323. package/esm2022/lib/components/ecl-spinner/ecl-spinner.component.mjs +8 -6
  324. package/esm2022/lib/components/ecl-spinner/ecl-spinner.module.mjs +7 -12
  325. package/esm2022/lib/components/ecl-sticky-container/ecl-sticky-container.component.mjs +7 -10
  326. package/esm2022/lib/components/ecl-sticky-container/ecl-sticky-container.module.mjs +8 -12
  327. package/esm2022/lib/components/ecl-table/ecl-table-sort-button.component.mjs +6 -8
  328. package/esm2022/lib/components/ecl-table/ecl-table.directive.mjs +41 -59
  329. package/esm2022/lib/components/ecl-table/ecl-table.module.mjs +7 -11
  330. package/esm2022/lib/components/ecl-tabs/ecl-tab-label.component.mjs +5 -5
  331. package/esm2022/lib/components/ecl-tabs/ecl-tab-more.component.mjs +6 -8
  332. package/esm2022/lib/components/ecl-tabs/ecl-tab.component.mjs +6 -8
  333. package/esm2022/lib/components/ecl-tabs/ecl-tabs.component.mjs +16 -21
  334. package/esm2022/lib/components/ecl-tabs/ecl-tabs.module.mjs +9 -38
  335. package/esm2022/lib/components/ecl-tabs/index.mjs +1 -1
  336. package/esm2022/lib/components/ecl-tag/ecl-tag.component.mjs +6 -9
  337. package/esm2022/lib/components/ecl-tag/ecl-tag.module.mjs +6 -6
  338. package/esm2022/lib/components/ecl-text-area/ecl-text-area.directive.mjs +7 -10
  339. package/esm2022/lib/components/ecl-text-area/ecl-text-area.module.mjs +6 -6
  340. package/esm2022/lib/components/ecl-text-input/ecl-text-input.directive.mjs +6 -9
  341. package/esm2022/lib/components/ecl-text-input/ecl-text-input.module.mjs +6 -6
  342. package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-label.directive.mjs +6 -8
  343. package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-title.directive.mjs +6 -8
  344. package/esm2022/lib/components/ecl-timeline/ecl-timeline-item-toggler.component.mjs +5 -5
  345. package/esm2022/lib/components/ecl-timeline/ecl-timeline-item.component.mjs +7 -11
  346. package/esm2022/lib/components/ecl-timeline/ecl-timeline.component.mjs +10 -13
  347. package/esm2022/lib/components/ecl-timeline/ecl-timeline.module.mjs +8 -19
  348. package/esm2022/lib/components/index.mjs +1 -1
  349. package/esm2022/lib/model/ecl-breadcrumb.model.mjs +1 -1
  350. package/esm2022/lib/model/ecl-menu-item.model.mjs +1 -1
  351. package/esm2022/lib/services/ecl-default-language.service.mjs +36 -12
  352. package/esm2022/lib/services/ecl-language.service.mjs +1 -1
  353. package/esm2022/lib/services/ecl-theme.service.mjs +6 -6
  354. package/esm2022/lib/shared/ecl-all.module.mjs +11 -16
  355. package/esm2022/lib/utils/directives/ecl-click-outside/ecl-click-outside.directive.mjs +5 -5
  356. package/esm2022/lib/utils/directives/ecl-click-outside/index.mjs +1 -1
  357. package/esm2022/lib/utils/directives/ecl-hidden/ecl-hidden.directive.mjs +4 -4
  358. package/esm2022/lib/utils/directives/ecl-hidden/ecl-hidden.module.mjs +6 -6
  359. package/esm2022/lib/utils/directives/ecl-hidden/index.mjs +1 -1
  360. package/esm2022/lib/utils/dom/dom-helpers.mjs +1 -1
  361. package/fesm2022/eui-ecl.mjs +2707 -3408
  362. package/fesm2022/eui-ecl.mjs.map +1 -1
  363. package/lib/components/ecl-accordion/ecl-accordion-item.component.d.ts.map +1 -1
  364. package/lib/components/ecl-accordion/ecl-accordion.component.d.ts.map +1 -1
  365. package/lib/components/ecl-accordion/ecl-accordion.module.d.ts.map +1 -1
  366. package/lib/components/ecl-app/deprecated/common/ecl-app.component.d.ts.map +1 -1
  367. package/lib/components/ecl-app/deprecated/ecl-app-core/ecl-app-core.component.d.ts.map +1 -1
  368. package/lib/components/ecl-app/deprecated/ecl-app-core/ecl-app-core.module.d.ts.map +1 -1
  369. package/lib/components/ecl-app/deprecated/ecl-app-harmonised/ecl-app-harmonised.component.d.ts.map +1 -1
  370. package/lib/components/ecl-app/deprecated/ecl-app-harmonised/ecl-app-harmonised.module.d.ts.map +1 -1
  371. package/lib/components/ecl-app/deprecated/ecl-app-standardised/ecl-app-standardised.component.d.ts.map +1 -1
  372. package/lib/components/ecl-app/deprecated/ecl-app-standardised/ecl-app-standardised.module.d.ts.map +1 -1
  373. package/lib/components/ecl-app/ecl-app.component.d.ts +2 -2
  374. package/lib/components/ecl-app/ecl-app.component.d.ts.map +1 -1
  375. package/lib/components/ecl-app/ecl-app.module.d.ts.map +1 -1
  376. package/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner.component.d.ts.map +1 -1
  377. package/lib/components/ecl-banner/deprecated/ecl-hero-banner/ecl-hero-banner.module.d.ts.map +1 -1
  378. package/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner.component.d.ts.map +1 -1
  379. package/lib/components/ecl-banner/deprecated/ecl-page-banner/ecl-page-banner.module.d.ts.map +1 -1
  380. package/lib/components/ecl-banner/ecl-banner-picture.directive.d.ts +1 -1
  381. package/lib/components/ecl-banner/ecl-banner-picture.directive.d.ts.map +1 -1
  382. package/lib/components/ecl-banner/ecl-banner.component.d.ts +2 -2
  383. package/lib/components/ecl-banner/ecl-banner.component.d.ts.map +1 -1
  384. package/lib/components/ecl-banner/ecl-banner.module.d.ts.map +1 -1
  385. package/lib/components/ecl-base.directive.d.ts.map +1 -1
  386. package/lib/components/ecl-blockquote/ecl-blockquote-picture.directive.d.ts.map +1 -1
  387. package/lib/components/ecl-blockquote/ecl-blockquote.component.d.ts.map +1 -1
  388. package/lib/components/ecl-blockquote/ecl-blockquote.module.d.ts.map +1 -1
  389. package/lib/components/ecl-breadcrumb/deprecated/common/ecl-breadcrumb-segment.component.d.ts.map +1 -1
  390. package/lib/components/ecl-breadcrumb/deprecated/common/ecl-breadcrumb.component.d.ts.map +1 -1
  391. package/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-core/ecl-breadcrumb-core-segment.component.d.ts.map +1 -1
  392. package/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-core/ecl-breadcrumb-core.component.d.ts.map +1 -1
  393. package/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-core/ecl-breadcrumb-core.module.d.ts.map +1 -1
  394. package/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-harmonised/ecl-breadcrumb-harmonised-segment.component.d.ts.map +1 -1
  395. package/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-harmonised/ecl-breadcrumb-harmonised.component.d.ts.map +1 -1
  396. package/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-harmonised/ecl-breadcrumb-harmonised.module.d.ts.map +1 -1
  397. package/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-standardised/ecl-breadcrumb-standardised-segment.component.d.ts.map +1 -1
  398. package/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-standardised/ecl-breadcrumb-standardised.component.d.ts.map +1 -1
  399. package/lib/components/ecl-breadcrumb/deprecated/ecl-breadcrumb-standardised/ecl-breadcrumb-standardised.module.d.ts.map +1 -1
  400. package/lib/components/ecl-breadcrumb/ecl-breadcrumb-segment.component.d.ts.map +1 -1
  401. package/lib/components/ecl-breadcrumb/ecl-breadcrumb.component.d.ts.map +1 -1
  402. package/lib/components/ecl-breadcrumb/ecl-breadcrumb.module.d.ts.map +1 -1
  403. package/lib/components/ecl-button/ecl-button-label.directive.d.ts.map +1 -1
  404. package/lib/components/ecl-button/ecl-button.component.d.ts +3 -1
  405. package/lib/components/ecl-button/ecl-button.component.d.ts.map +1 -1
  406. package/lib/components/ecl-button/ecl-button.module.d.ts.map +1 -1
  407. package/lib/components/ecl-card/ecl-card-body.component.d.ts.map +1 -1
  408. package/lib/components/ecl-card/ecl-card-image/ecl-card-image.component.d.ts.map +1 -1
  409. package/lib/components/ecl-card/ecl-card-picture.directive.d.ts.map +1 -1
  410. package/lib/components/ecl-card/ecl-card.component.d.ts.map +1 -1
  411. package/lib/components/ecl-card/ecl-card.module.d.ts.map +1 -1
  412. package/lib/components/ecl-carousel/ecl-carousel-item.component.d.ts.map +1 -1
  413. package/lib/components/ecl-carousel/ecl-carousel.component.d.ts +3 -3
  414. package/lib/components/ecl-carousel/ecl-carousel.component.d.ts.map +1 -1
  415. package/lib/components/ecl-carousel/ecl-carousel.module.d.ts.map +1 -1
  416. package/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.d.ts +5 -5
  417. package/lib/components/ecl-category-filter/ecl-category-filter/ecl-category-filter.component.d.ts.map +1 -1
  418. package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.d.ts +5 -5
  419. package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-item.component.d.ts.map +1 -1
  420. package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.d.ts +3 -3
  421. package/lib/components/ecl-category-filter/ecl-category-filter-list/ecl-category-filter-list.component.d.ts.map +1 -1
  422. package/lib/components/ecl-category-filter/ecl-category-filter.module.d.ts.map +1 -1
  423. package/lib/components/ecl-checkbox/ecl-checkbox-help.component.d.ts.map +1 -1
  424. package/lib/components/ecl-checkbox/ecl-checkbox-input.directive.d.ts.map +1 -1
  425. package/lib/components/ecl-checkbox/ecl-checkbox-label.component.d.ts.map +1 -1
  426. package/lib/components/ecl-checkbox/ecl-checkbox.directive.d.ts.map +1 -1
  427. package/lib/components/ecl-checkbox/ecl-checkbox.module.d.ts.map +1 -1
  428. package/lib/components/ecl-content-block/ecl-content-block-elements.directive.d.ts.map +1 -1
  429. package/lib/components/ecl-content-block/ecl-content-block.component.d.ts.map +1 -1
  430. package/lib/components/ecl-content-block/ecl-content-block.module.d.ts.map +1 -1
  431. package/lib/components/ecl-content-item/ecl-content-item-image.directive.d.ts.map +1 -1
  432. package/lib/components/ecl-content-item/ecl-content-item.component.d.ts.map +1 -1
  433. package/lib/components/ecl-content-item/ecl-content-item.module.d.ts.map +1 -1
  434. package/lib/components/ecl-content-item/index.d.ts.map +1 -1
  435. package/lib/components/ecl-date-block/ecl-date-block.component.d.ts +1 -0
  436. package/lib/components/ecl-date-block/ecl-date-block.component.d.ts.map +1 -1
  437. package/lib/components/ecl-date-block/ecl-date-block.module.d.ts +24 -0
  438. package/lib/components/ecl-date-block/ecl-date-block.module.d.ts.map +1 -1
  439. package/lib/components/ecl-date-picker/ecl-date-picker.directive.d.ts +1 -1
  440. package/lib/components/ecl-date-picker/ecl-date-picker.directive.d.ts.map +1 -1
  441. package/lib/components/ecl-date-picker/ecl-date-picker.module.d.ts.map +1 -1
  442. package/lib/components/ecl-expandable/ecl-expandable.component.d.ts.map +1 -1
  443. package/lib/components/ecl-expandable/ecl-expandable.module.d.ts.map +1 -1
  444. package/lib/components/ecl-fact-figures/ecl-fact-figures-description.component.d.ts.map +1 -1
  445. package/lib/components/ecl-fact-figures/ecl-fact-figures-item.component.d.ts.map +1 -1
  446. package/lib/components/ecl-fact-figures/ecl-fact-figures-title.component.d.ts.map +1 -1
  447. package/lib/components/ecl-fact-figures/ecl-fact-figures-value.component.d.ts.map +1 -1
  448. package/lib/components/ecl-fact-figures/ecl-fact-figures-view-all.component.d.ts.map +1 -1
  449. package/lib/components/ecl-fact-figures/ecl-fact-figures.component.d.ts.map +1 -1
  450. package/lib/components/ecl-fact-figures/ecl-fact-figures.module.d.ts.map +1 -1
  451. package/lib/components/ecl-featured/ecl-featured-item-description.component.d.ts.map +1 -1
  452. package/lib/components/ecl-featured/ecl-featured-item.component.d.ts.map +1 -1
  453. package/lib/components/ecl-featured/ecl-featured.component.d.ts.map +1 -1
  454. package/lib/components/ecl-featured/ecl-featured.module.d.ts.map +1 -1
  455. package/lib/components/ecl-feedback-message/ecl-feedback-message.directive.d.ts.map +1 -1
  456. package/lib/components/ecl-feedback-message/ecl-feedback-message.module.d.ts.map +1 -1
  457. package/lib/components/ecl-file/ecl-file-item/ecl-file-download.event.d.ts.map +1 -1
  458. package/lib/components/ecl-file/ecl-file-item/ecl-file-item.component.d.ts.map +1 -1
  459. package/lib/components/ecl-file/ecl-file-items/ecl-file-items.component.d.ts.map +1 -1
  460. package/lib/components/ecl-file/ecl-file-picture.directive.d.ts +1 -1
  461. package/lib/components/ecl-file/ecl-file-picture.directive.d.ts.map +1 -1
  462. package/lib/components/ecl-file/ecl-file-taxonomy/ecl-file-taxonomy.component.d.ts.map +1 -1
  463. package/lib/components/ecl-file/ecl-file.component.d.ts +3 -3
  464. package/lib/components/ecl-file/ecl-file.component.d.ts.map +1 -1
  465. package/lib/components/ecl-file/ecl-file.module.d.ts.map +1 -1
  466. package/lib/components/ecl-file/index.d.ts.map +1 -1
  467. package/lib/components/ecl-file-upload/ecl-file-upload.directive.d.ts.map +1 -1
  468. package/lib/components/ecl-file-upload/ecl-file-upload.module.d.ts.map +1 -1
  469. package/lib/components/ecl-form-group/ecl-form-group.component.d.ts.map +1 -1
  470. package/lib/components/ecl-form-group/ecl-form-group.module.d.ts.map +1 -1
  471. package/lib/components/ecl-form-label/ecl-form-label.component.d.ts.map +1 -1
  472. package/lib/components/ecl-form-label/ecl-form-label.module.d.ts.map +1 -1
  473. package/lib/components/ecl-gallery/ecl-gallery-footer.component.d.ts.map +1 -1
  474. package/lib/components/ecl-gallery/ecl-gallery-item.component.d.ts.map +1 -1
  475. package/lib/components/ecl-gallery/ecl-gallery-media.directive.d.ts.map +1 -1
  476. package/lib/components/ecl-gallery/ecl-gallery.component.d.ts.map +1 -1
  477. package/lib/components/ecl-gallery/ecl-gallery.module.d.ts.map +1 -1
  478. package/lib/components/ecl-help-block/ecl-help-block.directive.d.ts.map +1 -1
  479. package/lib/components/ecl-help-block/ecl-help-block.module.d.ts.map +1 -1
  480. package/lib/components/ecl-icon/ecl-icon.component.d.ts.map +1 -1
  481. package/lib/components/ecl-icon/ecl-icon.module.d.ts.map +1 -1
  482. package/lib/components/ecl-inpage-navigation/ecl-inpage-navigation-item.component.d.ts.map +1 -1
  483. package/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.component.d.ts.map +1 -1
  484. package/lib/components/ecl-inpage-navigation/ecl-inpage-navigation.module.d.ts.map +1 -1
  485. package/lib/components/ecl-label/ecl-label.directive.d.ts.map +1 -1
  486. package/lib/components/ecl-label/ecl-label.module.d.ts.map +1 -1
  487. package/lib/components/ecl-language-list/ecl-language-list-item.component.d.ts.map +1 -1
  488. package/lib/components/ecl-language-list/ecl-language-list.component.d.ts.map +1 -1
  489. package/lib/components/ecl-language-list/ecl-language-list.module.d.ts.map +1 -1
  490. package/lib/components/ecl-link/ecl-link-label.directive.d.ts.map +1 -1
  491. package/lib/components/ecl-link/ecl-link.directive.d.ts.map +1 -1
  492. package/lib/components/ecl-link/ecl-link.module.d.ts.map +1 -1
  493. package/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.d.ts +3 -3
  494. package/lib/components/ecl-list/ecl-description-list-definition/ecl-description-list-definition.component.d.ts.map +1 -1
  495. package/lib/components/ecl-list/ecl-description-list-definition-item.directive.d.ts +10 -0
  496. package/lib/components/ecl-list/ecl-description-list-definition-item.directive.d.ts.map +1 -0
  497. package/lib/components/ecl-list/ecl-list.directive.d.ts +0 -7
  498. package/lib/components/ecl-list/ecl-list.directive.d.ts.map +1 -1
  499. package/lib/components/ecl-list/ecl-list.module.d.ts +5 -4
  500. package/lib/components/ecl-list/ecl-list.module.d.ts.map +1 -1
  501. package/lib/components/ecl-list/index.d.ts +1 -0
  502. package/lib/components/ecl-list/index.d.ts.map +1 -1
  503. package/lib/components/ecl-list-illustration/ecl-list-illustration-image/ecl-list-illustration-image.component.d.ts.map +1 -1
  504. package/lib/components/ecl-list-illustration/ecl-list-illustration-picture.directive.d.ts +1 -1
  505. package/lib/components/ecl-list-illustration/ecl-list-illustration-picture.directive.d.ts.map +1 -1
  506. package/lib/components/ecl-list-illustration/ecl-list-illustration.component.d.ts.map +1 -1
  507. package/lib/components/ecl-list-illustration/ecl-list-illustration.module.d.ts.map +1 -1
  508. package/lib/components/ecl-media-container/ecl-media-container-iframe.directive.d.ts.map +1 -1
  509. package/lib/components/ecl-media-container/ecl-media-container-item.directive.d.ts.map +1 -1
  510. package/lib/components/ecl-media-container/ecl-media-container.component.d.ts.map +1 -1
  511. package/lib/components/ecl-media-container/ecl-media-container.module.d.ts.map +1 -1
  512. package/lib/components/ecl-menu/common/ecl-menu-item.event.d.ts.map +1 -1
  513. package/lib/components/ecl-menu/ecl-menu/ecl-menu-item.component.d.ts +11 -1
  514. package/lib/components/ecl-menu/ecl-menu/ecl-menu-item.component.d.ts.map +1 -1
  515. package/lib/components/ecl-menu/ecl-menu/ecl-menu.component.d.ts +44 -9
  516. package/lib/components/ecl-menu/ecl-menu/ecl-menu.component.d.ts.map +1 -1
  517. package/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega-item.component.d.ts.map +1 -1
  518. package/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega.component.d.ts +5 -2
  519. package/lib/components/ecl-menu/ecl-menu-mega/ecl-menu-mega.component.d.ts.map +1 -1
  520. package/lib/components/ecl-menu/ecl-menu.module.d.ts.map +1 -1
  521. package/lib/components/ecl-message/ecl-message-title.directive.d.ts.map +1 -1
  522. package/lib/components/ecl-message/ecl-message.component.d.ts.map +1 -1
  523. package/lib/components/ecl-message/ecl-message.module.d.ts.map +1 -1
  524. package/lib/components/ecl-modal/ecl-modal-body.component.d.ts.map +1 -1
  525. package/lib/components/ecl-modal/ecl-modal-footer.component.d.ts.map +1 -1
  526. package/lib/components/ecl-modal/ecl-modal-header.component.d.ts.map +1 -1
  527. package/lib/components/ecl-modal/ecl-modal.component.d.ts.map +1 -1
  528. package/lib/components/ecl-modal/ecl-modal.module.d.ts.map +1 -1
  529. package/lib/components/ecl-multiselect/ecl-multiselect-option.directive.d.ts.map +1 -1
  530. package/lib/components/ecl-multiselect/ecl-multiselect.component.d.ts.map +1 -1
  531. package/lib/components/ecl-multiselect/ecl-multiselect.module.d.ts.map +1 -1
  532. package/lib/components/ecl-navigation-list/ecl-navigation-list-image/ecl-navigation-list-image.component.d.ts.map +1 -1
  533. package/lib/components/ecl-navigation-list/ecl-navigation-list-item.component.d.ts.map +1 -1
  534. package/lib/components/ecl-navigation-list/ecl-navigation-list-picture.directive.d.ts.map +1 -1
  535. package/lib/components/ecl-navigation-list/ecl-navigation-list.component.d.ts.map +1 -1
  536. package/lib/components/ecl-navigation-list/ecl-navigation-list.module.d.ts.map +1 -1
  537. package/lib/components/ecl-news-ticker/ecl-news-ticker-item.component.d.ts.map +1 -1
  538. package/lib/components/ecl-news-ticker/ecl-news-ticker.component.d.ts.map +1 -1
  539. package/lib/components/ecl-news-ticker/ecl-news-ticker.module.d.ts.map +1 -1
  540. package/lib/components/ecl-page-header/deprecated/common/ecl-page-header.component.d.ts.map +1 -1
  541. package/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core.component.d.ts.map +1 -1
  542. package/lib/components/ecl-page-header/deprecated/ecl-page-header-core/ecl-page-header-core.module.d.ts.map +1 -1
  543. package/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised.component.d.ts.map +1 -1
  544. package/lib/components/ecl-page-header/deprecated/ecl-page-header-harmonised/ecl-page-header-harmonised.module.d.ts.map +1 -1
  545. package/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised.component.d.ts.map +1 -1
  546. package/lib/components/ecl-page-header/deprecated/ecl-page-header-standardised/ecl-page-header-standardised.module.d.ts.map +1 -1
  547. package/lib/components/ecl-page-header/ecl-page-header-background.directive.d.ts +1 -1
  548. package/lib/components/ecl-page-header/ecl-page-header-description/ecl-page-header-description.component.d.ts +2 -2
  549. package/lib/components/ecl-page-header/ecl-page-header-description/ecl-page-header-description.component.d.ts.map +1 -1
  550. package/lib/components/ecl-page-header/ecl-page-header.component.d.ts.map +1 -1
  551. package/lib/components/ecl-page-header/ecl-page-header.module.d.ts.map +1 -1
  552. package/lib/components/ecl-pagination/ecl-pagination-item.component.d.ts.map +1 -1
  553. package/lib/components/ecl-pagination/ecl-pagination.component.d.ts.map +1 -1
  554. package/lib/components/ecl-pagination/ecl-pagination.module.d.ts.map +1 -1
  555. package/lib/components/ecl-popover/ecl-popover-content.directive.d.ts.map +1 -1
  556. package/lib/components/ecl-popover/ecl-popover-list.directive.d.ts.map +1 -1
  557. package/lib/components/ecl-popover/ecl-popover-toggle.directive.d.ts.map +1 -1
  558. package/lib/components/ecl-popover/ecl-popover.component.d.ts.map +1 -1
  559. package/lib/components/ecl-popover/ecl-popover.module.d.ts.map +1 -1
  560. package/lib/components/ecl-radio/ecl-radio-help.component.d.ts.map +1 -1
  561. package/lib/components/ecl-radio/ecl-radio-input.directive.d.ts +2 -3
  562. package/lib/components/ecl-radio/ecl-radio-input.directive.d.ts.map +1 -1
  563. package/lib/components/ecl-radio/ecl-radio-label.component.d.ts.map +1 -1
  564. package/lib/components/ecl-radio/ecl-radio.directive.d.ts.map +1 -1
  565. package/lib/components/ecl-radio/ecl-radio.module.d.ts.map +1 -1
  566. package/lib/components/ecl-range/ecl-range-value.component.d.ts.map +1 -1
  567. package/lib/components/ecl-range/ecl-range.directive.d.ts +1 -1
  568. package/lib/components/ecl-range/ecl-range.directive.d.ts.map +1 -1
  569. package/lib/components/ecl-range/ecl-range.module.d.ts.map +1 -1
  570. package/lib/components/ecl-rating-field/ecl-rating-field.component.d.ts +1 -1
  571. package/lib/components/ecl-rating-field/ecl-rating-field.component.d.ts.map +1 -1
  572. package/lib/components/ecl-rating-field/ecl-rating-field.module.d.ts.map +1 -1
  573. package/lib/components/ecl-search-form/ecl-search-form.component.d.ts.map +1 -1
  574. package/lib/components/ecl-search-form/ecl-search-form.module.d.ts.map +1 -1
  575. package/lib/components/ecl-select/ecl-select-container.component.d.ts.map +1 -1
  576. package/lib/components/ecl-select/ecl-select.directive.d.ts.map +1 -1
  577. package/lib/components/ecl-select/ecl-select.module.d.ts.map +1 -1
  578. package/lib/components/ecl-site-footer/deprecated/common/ecl-footer.component.d.ts.map +1 -1
  579. package/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-core.component.d.ts.map +1 -1
  580. package/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-core.module.d.ts.map +1 -1
  581. package/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-list.directive.d.ts.map +1 -1
  582. package/lib/components/ecl-site-footer/deprecated/ecl-footer-core/ecl-footer-elements/ecl-footer-core-section.directive.d.ts.map +1 -1
  583. package/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-list.directive.d.ts.map +1 -1
  584. package/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-elements/ecl-footer-harmonised-title.directive.d.ts.map +1 -1
  585. package/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-harmonised.component.d.ts.map +1 -1
  586. package/lib/components/ecl-site-footer/deprecated/ecl-footer-harmonised/ecl-footer-harmonised.module.d.ts.map +1 -1
  587. package/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-list.directive.d.ts.map +1 -1
  588. package/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-section.directive.d.ts.map +1 -1
  589. package/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-elements/ecl-footer-standardised-title.directive.d.ts.map +1 -1
  590. package/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-standardised.component.d.ts.map +1 -1
  591. package/lib/components/ecl-site-footer/deprecated/ecl-footer-standardised/ecl-footer-standardised.module.d.ts.map +1 -1
  592. package/lib/components/ecl-site-footer/ecl-footer-elements/ec/ecl-site-footer-fixed-content.d.ts.map +1 -1
  593. package/lib/components/ecl-site-footer/ecl-footer-elements/ec/index.d.ts.map +1 -1
  594. package/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-list.directive.d.ts.map +1 -1
  595. package/lib/components/ecl-site-footer/ecl-footer-elements/ecl-site-footer-section.directive.d.ts.map +1 -1
  596. package/lib/components/ecl-site-footer/ecl-footer-elements/eu/ecl-site-footer-fixed-content.d.ts.map +1 -1
  597. package/lib/components/ecl-site-footer/ecl-footer-elements/eu/index.d.ts.map +1 -1
  598. package/lib/components/ecl-site-footer/ecl-footer-elements/index.d.ts.map +1 -1
  599. package/lib/components/ecl-site-footer/ecl-site-footer.component.d.ts.map +1 -1
  600. package/lib/components/ecl-site-footer/ecl-site-footer.module.d.ts.map +1 -1
  601. package/lib/components/ecl-site-header/banner-top/ecl-site-header-banner-top.component.d.ts.map +1 -1
  602. package/lib/components/ecl-site-header/deprecated/common/ecl-site-header-action.component.d.ts.map +1 -1
  603. package/lib/components/ecl-site-header/deprecated/common/ecl-site-header-banner-top.component.d.ts.map +1 -1
  604. package/lib/components/ecl-site-header/deprecated/common/ecl-site-header-language.component.d.ts.map +1 -1
  605. package/lib/components/ecl-site-header/deprecated/common/ecl-site-header-login.component.d.ts.map +1 -1
  606. package/lib/components/ecl-site-header/deprecated/common/ecl-site-header-search.component.d.ts.map +1 -1
  607. package/lib/components/ecl-site-header/deprecated/common/ecl-site-header.component.d.ts +2 -2
  608. package/lib/components/ecl-site-header/deprecated/common/ecl-site-header.component.d.ts.map +1 -1
  609. package/lib/components/ecl-site-header/deprecated/ecl-site-header-core/ecl-site-header-core.component.d.ts +1 -1
  610. package/lib/components/ecl-site-header/deprecated/ecl-site-header-core/ecl-site-header-core.component.d.ts.map +1 -1
  611. package/lib/components/ecl-site-header/deprecated/ecl-site-header-core/ecl-site-header-core.module.d.ts.map +1 -1
  612. package/lib/components/ecl-site-header/deprecated/ecl-site-header-core/language/ecl-site-header-core-language.component.d.ts.map +1 -1
  613. package/lib/components/ecl-site-header/deprecated/ecl-site-header-core/login/ecl-site-header-core-login.component.d.ts.map +1 -1
  614. package/lib/components/ecl-site-header/deprecated/ecl-site-header-core/search/ecl-site-header-core-search.component.d.ts.map +1 -1
  615. package/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/banner-top/ecl-site-header-harmonised-banner-top.component.d.ts.map +1 -1
  616. package/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/ecl-site-header-harmonised.component.d.ts +1 -1
  617. package/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/ecl-site-header-harmonised.component.d.ts.map +1 -1
  618. package/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/ecl-site-header-harmonised.module.d.ts.map +1 -1
  619. package/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/language/ecl-site-header-harmonised-language.component.d.ts.map +1 -1
  620. package/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/login/ecl-site-header-harmonised-login.component.d.ts.map +1 -1
  621. package/lib/components/ecl-site-header/deprecated/ecl-site-header-harmonised/search/ecl-site-header-harmonised-search.component.d.ts.map +1 -1
  622. package/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/banner-top/ecl-site-header-standardised-banner-top.component.d.ts.map +1 -1
  623. package/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/ecl-site-header-standardised.component.d.ts +1 -1
  624. package/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/ecl-site-header-standardised.component.d.ts.map +1 -1
  625. package/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/ecl-site-header-standardised.module.d.ts.map +1 -1
  626. package/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/language/ecl-site-header-standardised-language.component.d.ts.map +1 -1
  627. package/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/login/ecl-site-header-standardised-login.component.d.ts.map +1 -1
  628. package/lib/components/ecl-site-header/deprecated/ecl-site-header-standardised/search/ecl-site-header-standardised-search.component.d.ts.map +1 -1
  629. package/lib/components/ecl-site-header/ecl-site-header-environment/ecl-site-header-environment.component.d.ts.map +1 -1
  630. package/lib/components/ecl-site-header/ecl-site-header.component.d.ts.map +1 -1
  631. package/lib/components/ecl-site-header/ecl-site-header.module.d.ts.map +1 -1
  632. package/lib/components/ecl-site-header/index.d.ts.map +1 -1
  633. package/lib/components/ecl-site-header/language/ecl-site-header-language-popover.component.d.ts.map +1 -1
  634. package/lib/components/ecl-site-header/language/ecl-site-header-language.component.d.ts.map +1 -1
  635. package/lib/components/ecl-site-header/login/ecl-site-header-login.component.d.ts.map +1 -1
  636. package/lib/components/ecl-site-header/message/ecl-site-header-message.component.d.ts.map +1 -1
  637. package/lib/components/ecl-site-header/search/ecl-site-header-search.component.d.ts.map +1 -1
  638. package/lib/components/ecl-social-media-follow/ecl-social-media-follow-item.component.d.ts.map +1 -1
  639. package/lib/components/ecl-social-media-follow/ecl-social-media-follow-link.directive.d.ts.map +1 -1
  640. package/lib/components/ecl-social-media-follow/ecl-social-media-follow.component.d.ts.map +1 -1
  641. package/lib/components/ecl-social-media-follow/ecl-social-media-follow.module.d.ts.map +1 -1
  642. package/lib/components/ecl-social-media-share/ecl-social-media-share-item.component.d.ts.map +1 -1
  643. package/lib/components/ecl-social-media-share/ecl-social-media-share-link.directive.d.ts.map +1 -1
  644. package/lib/components/ecl-social-media-share/ecl-social-media-share.component.d.ts.map +1 -1
  645. package/lib/components/ecl-social-media-share/ecl-social-media-share.module.d.ts.map +1 -1
  646. package/lib/components/ecl-spinner/ecl-spinner-label.directive.d.ts +1 -1
  647. package/lib/components/ecl-spinner/ecl-spinner.component.d.ts.map +1 -1
  648. package/lib/components/ecl-spinner/ecl-spinner.module.d.ts.map +1 -1
  649. package/lib/components/ecl-sticky-container/ecl-sticky-container.component.d.ts.map +1 -1
  650. package/lib/components/ecl-sticky-container/ecl-sticky-container.module.d.ts.map +1 -1
  651. package/lib/components/ecl-table/ecl-table-sort-button.component.d.ts.map +1 -1
  652. package/lib/components/ecl-table/ecl-table.directive.d.ts +1 -1
  653. package/lib/components/ecl-table/ecl-table.directive.d.ts.map +1 -1
  654. package/lib/components/ecl-table/ecl-table.module.d.ts.map +1 -1
  655. package/lib/components/ecl-tabs/ecl-tab-label.component.d.ts.map +1 -1
  656. package/lib/components/ecl-tabs/ecl-tab-more.component.d.ts.map +1 -1
  657. package/lib/components/ecl-tabs/ecl-tab.component.d.ts.map +1 -1
  658. package/lib/components/ecl-tabs/ecl-tabs.component.d.ts +3 -3
  659. package/lib/components/ecl-tabs/ecl-tabs.component.d.ts.map +1 -1
  660. package/lib/components/ecl-tabs/ecl-tabs.module.d.ts.map +1 -1
  661. package/lib/components/ecl-tag/ecl-tag.component.d.ts.map +1 -1
  662. package/lib/components/ecl-tag/ecl-tag.module.d.ts.map +1 -1
  663. package/lib/components/ecl-text-area/ecl-text-area.directive.d.ts.map +1 -1
  664. package/lib/components/ecl-text-area/ecl-text-area.module.d.ts.map +1 -1
  665. package/lib/components/ecl-text-input/ecl-text-input.directive.d.ts.map +1 -1
  666. package/lib/components/ecl-text-input/ecl-text-input.module.d.ts.map +1 -1
  667. package/lib/components/ecl-timeline/ecl-timeline-item-label.directive.d.ts.map +1 -1
  668. package/lib/components/ecl-timeline/ecl-timeline-item-title.directive.d.ts.map +1 -1
  669. package/lib/components/ecl-timeline/ecl-timeline-item.component.d.ts.map +1 -1
  670. package/lib/components/ecl-timeline/ecl-timeline.component.d.ts +2 -3
  671. package/lib/components/ecl-timeline/ecl-timeline.component.d.ts.map +1 -1
  672. package/lib/components/ecl-timeline/ecl-timeline.module.d.ts.map +1 -1
  673. package/lib/components/index.d.ts.map +1 -1
  674. package/lib/model/ecl-menu-item.model.d.ts +3 -2
  675. package/lib/model/ecl-menu-item.model.d.ts.map +1 -1
  676. package/lib/services/ecl-default-language.service.d.ts.map +1 -1
  677. package/lib/services/ecl-theme.service.d.ts.map +1 -1
  678. package/lib/shared/ecl-all.module.d.ts.map +1 -1
  679. package/lib/utils/directives/ecl-click-outside/ecl-click-outside.directive.d.ts.map +1 -1
  680. package/lib/utils/directives/ecl-click-outside/index.d.ts.map +1 -1
  681. package/lib/utils/directives/ecl-hidden/ecl-hidden.module.d.ts.map +1 -1
  682. package/lib/utils/directives/ecl-hidden/index.d.ts.map +1 -1
  683. package/lib/utils/dom/dom-helpers.d.ts.map +1 -1
  684. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
- import { Component, ContentChildren, EventEmitter, HostBinding, HostListener, Input, Optional, Output, Self, ViewEncapsulation } from '@angular/core';
3
+ import { Component, ContentChildren, EventEmitter, HostBinding, HostListener, Input, Optional, Output, Self, ViewEncapsulation, } from '@angular/core';
4
4
  import { v4 as uuidgen } from 'uuid';
5
5
  import { coerceBoolean } from '@eui/base';
6
6
  import { Subject, takeUntil } from 'rxjs';
@@ -23,9 +23,7 @@ var KeyCode;
23
23
  })(KeyCode || (KeyCode = {}));
24
24
  export class EclMultiselectComponent extends ECLBaseDirective {
25
25
  get cssClasses() {
26
- return [
27
- super.getCssClasses('ecl-select'),
28
- ].join(' ').trim();
26
+ return [super.getCssClasses('ecl-select')].join(' ').trim();
29
27
  }
30
28
  set eclPlaceholder(value) {
31
29
  this._eclPlaceholder = value;
@@ -41,7 +39,9 @@ export class EclMultiselectComponent extends ECLBaseDirective {
41
39
  return this._disabled || null;
42
40
  }
43
41
  }
44
- set disabled(value) { this._disabled = coerceBooleanProperty(value); }
42
+ set disabled(value) {
43
+ this._disabled = coerceBooleanProperty(value);
44
+ }
45
45
  constructor(ngControl, el, viewContainerRef, differs, translate) {
46
46
  super();
47
47
  this.ngControl = ngControl;
@@ -61,10 +61,8 @@ export class EclMultiselectComponent extends ECLBaseDirective {
61
61
  this.selectAllLabelText = 'Select all';
62
62
  this.closeText = 'Close';
63
63
  this.clearAllText = 'Clear all';
64
- this.propagateChange = (_) => {
65
- };
66
- this.propagateTouched = () => {
67
- };
64
+ this.propagateChange = (_) => { };
65
+ this.propagateTouched = () => { };
68
66
  this.differ = this.differs.find([]).create();
69
67
  if (this.ngControl) {
70
68
  this.ngControl.valueAccessor = this;
@@ -94,7 +92,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
94
92
  if (diff) {
95
93
  this.removeAllOptions();
96
94
  this.multiSelectOptions = [];
97
- diff.forEachItem(item => {
95
+ diff.forEachItem((item) => {
98
96
  this.optionsWrapper.appendChild(this.createOption(item.item));
99
97
  });
100
98
  this.onOptionsChange();
@@ -146,7 +144,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
146
144
  h5.classList.add('ecl-select__multiple-group__title');
147
145
  h5.innerText = el.label;
148
146
  div.appendChild(h5);
149
- el.eclOptionItems.forEach(item => div.appendChild(this.createOptionWithCheckbox(item)));
147
+ el.eclOptionItems.forEach((item) => div.appendChild(this.createOptionWithCheckbox(item)));
150
148
  return div;
151
149
  }
152
150
  removeAllOptions() {
@@ -155,7 +153,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
155
153
  }
156
154
  }
157
155
  onOptionsChange() {
158
- this.eclOptionItems.forEach(i => i.changes.pipe(takeUntil(this.destroy$)).subscribe(e => {
156
+ this.eclOptionItems.forEach((i) => i.changes.pipe(takeUntil(this.destroy$)).subscribe((e) => {
159
157
  setTimeout(() => {
160
158
  this.multiselectWrapper.removeChild(this.multiDropdown);
161
159
  this.multiDropdown.remove();
@@ -278,7 +276,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
278
276
  const id = uuidgen();
279
277
  const checkboxDiv = document.createElement('div');
280
278
  if (el.cssClasses) {
281
- el.cssClasses.split(' ').forEach(cl => {
279
+ el.cssClasses.split(' ').forEach((cl) => {
282
280
  checkboxDiv.classList.add(cl);
283
281
  });
284
282
  }
@@ -290,10 +288,9 @@ export class EclMultiselectComponent extends ECLBaseDirective {
290
288
  else {
291
289
  checkboxInput.addEventListener('click', this.handleClickOnOption);
292
290
  }
293
- if (el.selected || (this.selectedValues.indexOf(el.value) > -1)) {
291
+ if (el.selected || this.selectedValues.indexOf(el.value) > -1) {
294
292
  checkboxInput.checked = true;
295
- this.multiSelectInput.value = this.multiSelectInput.value === '' ? el.label :
296
- this.multiSelectInput.value + ',' + el.label;
293
+ this.multiSelectInput.value = this.multiSelectInput.value === '' ? el.label : this.multiSelectInput.value + ',' + el.label;
297
294
  }
298
295
  checkboxInput.addEventListener('keydown', this.handleKeydownOnOption);
299
296
  checkboxDiv.appendChild(checkboxInput);
@@ -357,7 +354,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
357
354
  }
358
355
  handleClickOnClear() {
359
356
  this.checkboxSelectAll.checked = false;
360
- this.multiSelectOptions.forEach(el => {
357
+ this.multiSelectOptions.forEach((el) => {
361
358
  const input = el.childNodes[0];
362
359
  if (!input.disabled) {
363
360
  input.checked = false;
@@ -419,7 +416,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
419
416
  const selectedElementsArray = [];
420
417
  const selectedElementsValuesArray = [];
421
418
  this.checkboxSelectAll.checked = false;
422
- this.multiSelectOptions.forEach(el => {
419
+ this.multiSelectOptions.forEach((el) => {
423
420
  const input = el.childNodes[0];
424
421
  if (input.checked) {
425
422
  selectedElementsValuesArray.push(el.childNodes[0].value);
@@ -468,7 +465,9 @@ export class EclMultiselectComponent extends ECLBaseDirective {
468
465
  const selectedElementsArray = [];
469
466
  const selectedElementsValuesArray = [];
470
467
  // Select all the elements, that are not disabled
471
- this.multiSelectOptions.filter(elem => elem.style.display !== 'none').forEach(el => {
468
+ this.multiSelectOptions
469
+ .filter((elem) => elem.style.display !== 'none')
470
+ .forEach((el) => {
472
471
  const input = el.childNodes[0];
473
472
  if (this.checkboxSelectAll.checked) {
474
473
  if (!input.disabled) {
@@ -505,7 +504,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
505
504
  const keyword = evt.target.value;
506
505
  if (keyword === '') {
507
506
  this.setSelectAllDisableStatus(false);
508
- this.multiSelectOptions.forEach(item => {
507
+ this.multiSelectOptions.forEach((item) => {
509
508
  item.style.display = 'flex';
510
509
  const labelNode = item.children[1].children[1];
511
510
  labelNode.innerHTML = item.textContent;
@@ -522,7 +521,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
522
521
  if (keyword === '') {
523
522
  this.setSelectAllDisableStatus(false);
524
523
  isMatchFound = true;
525
- this.multiSelectOptions.forEach(item => {
524
+ this.multiSelectOptions.forEach((item) => {
526
525
  item.style.display = 'flex';
527
526
  const labelNode = item.children[1].children[1];
528
527
  labelNode.innerHTML = item.textContent;
@@ -530,7 +529,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
530
529
  }
531
530
  else {
532
531
  this.setSelectAllDisableStatus(true);
533
- this.multiSelectOptions.forEach(item => {
532
+ this.multiSelectOptions.forEach((item) => {
534
533
  if (item.textContent.toLowerCase().indexOf(keyword.toLowerCase()) < 0) {
535
534
  item.style.display = 'none';
536
535
  }
@@ -561,7 +560,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
561
560
  this.selectAllEll.classList.toggle('ecl-checkbox--disabled', this.checkboxSelectAll.disabled);
562
561
  }
563
562
  resetComponent() {
564
- this.multiSelectOptions.forEach(el => {
563
+ this.multiSelectOptions.forEach((el) => {
565
564
  const input = el.childNodes[0];
566
565
  if (input.checked) {
567
566
  input.checked = false;
@@ -582,9 +581,10 @@ export class EclMultiselectComponent extends ECLBaseDirective {
582
581
  if (values) {
583
582
  const selectedElementsArray = [];
584
583
  if (this.multiSelectOptions && this.multiSelectOptions.length > 0) {
585
- this.multiSelectOptions.filter(elem => values.includes(elem.childNodes[0].value) &&
584
+ this.multiSelectOptions
585
+ .filter((elem) => values.includes(elem.childNodes[0].value) &&
586
586
  !elem.childNodes[0].disabled)
587
- .forEach(el => {
587
+ .forEach((el) => {
588
588
  const input = el.childNodes[0];
589
589
  input.checked = true;
590
590
  selectedElementsArray.push(el.childNodes[1].textContent);
@@ -595,7 +595,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
595
595
  }
596
596
  }
597
597
  else {
598
- values.forEach(val => {
598
+ values.forEach((val) => {
599
599
  this.selectedValues.push(val);
600
600
  });
601
601
  }
@@ -619,7 +619,8 @@ export class EclMultiselectComponent extends ECLBaseDirective {
619
619
  const SEARCH_KEY = 'ecl.common.SEARCH';
620
620
  this.translate
621
621
  .stream([SELECT_ALL_KEY, NO_RESULTS_FOUND_KEY, CLOSE_KEY, CLEAR_ALL_KEY, SEARCH_KEY])
622
- .pipe(takeUntil(this.destroy$)).subscribe((translation) => {
622
+ .pipe(takeUntil(this.destroy$))
623
+ .subscribe((translation) => {
623
624
  this.noResultsFoundText = translation[NO_RESULTS_FOUND_KEY];
624
625
  this.closeText = translation[CLOSE_KEY];
625
626
  this.clearAllText = translation[CLEAR_ALL_KEY];
@@ -640,7 +641,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
640
641
  this.multiDropdown.style.display = 'block';
641
642
  }
642
643
  getOptionIndexByIdFromActiveOptions(id) {
643
- return this.getActiveOptions().findIndex(option => option.firstElementChild.id === id);
644
+ return this.getActiveOptions().findIndex((option) => option.firstElementChild.id === id);
644
645
  }
645
646
  handleClickOnMainInput(evt) {
646
647
  evt.preventDefault();
@@ -703,7 +704,6 @@ export class EclMultiselectComponent extends ECLBaseDirective {
703
704
  const firstOption = currentOptions[0].firstElementChild;
704
705
  firstOption.focus();
705
706
  }
706
- ;
707
707
  }
708
708
  onSearchArrowUp(evt) {
709
709
  evt.preventDefault();
@@ -757,12 +757,10 @@ export class EclMultiselectComponent extends ECLBaseDirective {
757
757
  }
758
758
  handleKeydownOnOption(evt) {
759
759
  switch (evt.key) {
760
- case KeyCode.ARROW_DOWN:
761
- {
762
- this.onOptionArrowDown(evt);
763
- break;
764
- }
765
- ;
760
+ case KeyCode.ARROW_DOWN: {
761
+ this.onOptionArrowDown(evt);
762
+ break;
763
+ }
766
764
  case KeyCode.ARROW_UP: {
767
765
  this.onOptionArrowUp(evt);
768
766
  break;
@@ -819,8 +817,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
819
817
  }
820
818
  }
821
819
  getActiveOptions() {
822
- return this.multiSelectOptions.filter(item => item.style.display !== 'none' &&
823
- !item.classList.contains('ecl-checkbox--disabled'));
820
+ return this.multiSelectOptions.filter((item) => item.style.display !== 'none' && !item.classList.contains('ecl-checkbox--disabled'));
824
821
  }
825
822
  removeAllListeners() {
826
823
  this.multiSelectInput.removeEventListener('keydown', this.handleKeydownOnMainInput);
@@ -834,7 +831,7 @@ export class EclMultiselectComponent extends ECLBaseDirective {
834
831
  this.clearBtn.removeEventListener('click', this.handleClickOnClear);
835
832
  this.closeBtn.removeEventListener('keydown', this.handleKeydownOnClose);
836
833
  this.closeBtn.removeEventListener('click', this.handleClickOnClose);
837
- this.multiSelectOptions.forEach(el => {
834
+ this.multiSelectOptions.forEach((el) => {
838
835
  const checboxEl = el.firstElementChild;
839
836
  checboxEl.removeEventListener('keydown', this.handleKeydownOnOption);
840
837
  checboxEl.removeEventListener('click', this.handleClickOnOption);
@@ -855,15 +852,15 @@ export class EclMultiselectComponent extends ECLBaseDirective {
855
852
  this.handleKeydownOnClose = this.handleKeydownOnClose.bind(this);
856
853
  this.handleClickOnClose = this.handleClickOnClose.bind(this);
857
854
  }
858
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.3", ngImport: i0, type: EclMultiselectComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.IterableDiffers }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
859
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-next.3", type: EclMultiselectComponent, selector: "select[eclMultiselect]", inputs: { isInvalid: "isInvalid", eclPlaceholder: "eclPlaceholder", eclSize: "eclSize", disabled: "disabled" }, outputs: { eclChange: "eclChange" }, host: { listeners: { "document:keyup.escape": "onEscapeKey($event)", "document:click": "onKeyUp($event)" }, properties: { "class": "this.cssClasses", "attr.disabled": "this.disabled" } }, queries: [{ propertyName: "eclOptionItems", predicate: EclMultiselectOptionDirective }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>", encapsulation: i0.ViewEncapsulation.None }); }
855
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.0-next.4", ngImport: i0, type: EclMultiselectComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i0.IterableDiffers }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
856
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.0-next.4", type: EclMultiselectComponent, selector: "select[eclMultiselect]", inputs: { isInvalid: "isInvalid", eclPlaceholder: "eclPlaceholder", eclSize: "eclSize", disabled: "disabled" }, outputs: { eclChange: "eclChange" }, host: { listeners: { "document:keyup.escape": "onEscapeKey($event)", "document:click": "onKeyUp($event)" }, properties: { "class": "this.cssClasses", "attr.disabled": "this.disabled" } }, queries: [{ propertyName: "eclOptionItems", predicate: EclMultiselectOptionDirective }], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\n", encapsulation: i0.ViewEncapsulation.None }); }
860
857
  }
861
858
  __decorate([
862
859
  coerceBoolean
863
860
  ], EclMultiselectComponent.prototype, "isInvalid", void 0);
864
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.3", ngImport: i0, type: EclMultiselectComponent, decorators: [{
861
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.4", ngImport: i0, type: EclMultiselectComponent, decorators: [{
865
862
  type: Component,
866
- args: [{ selector: 'select[eclMultiselect]', encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>" }]
863
+ args: [{ selector: 'select[eclMultiselect]', encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\n" }]
867
864
  }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
868
865
  type: Optional
869
866
  }, {
@@ -894,4 +891,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.0-next.3",
894
891
  type: HostListener,
895
892
  args: ['document:click', ['$event']]
896
893
  }] } });
897
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtbXVsdGlzZWxlY3QvZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtbXVsdGlzZWxlY3QvZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFHZixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBS0wsUUFBUSxFQUNSLE1BQU0sRUFFTixJQUFJLEVBRUosaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxFQUFFLElBQUksT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7QUFFbkYsSUFBSyxPQVFKO0FBUkQsV0FBSyxPQUFPO0lBQ1YsK0JBQW9CLENBQUE7SUFDcEIsbUNBQXdCLENBQUE7SUFDeEIsbUNBQXdCLENBQUE7SUFDeEIscUNBQTBCLENBQUE7SUFDMUIsNEJBQWlCLENBQUE7SUFDakIsMEJB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LHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDSSx3QkFBd0IsaUJBRW5CLGlCQUFpQixDQUFDLElBQUk7OzBCQWtFaEMsUUFBUTs7MEJBQUksSUFBSTtpS0E3RDJCLGNBQWM7c0JBQTdELGVBQWU7dUJBQUMsNkJBQTZCO2dCQUN0QixTQUFTO3NCQUFqQixLQUFLO2dCQUVqQixVQUFVO3NCQURiLFdBQVc7dUJBQUMsT0FBTztnQkFPVixTQUFTO3NCQUFsQixNQUFNO2dCQUNNLGNBQWM7c0JBQTFCLEtBQUs7Z0JBTUcsT0FBTztzQkFBZixLQUFLO2dCQUdGLFFBQVE7c0JBRFgsS0FBSzs7c0JBQUksV0FBVzt1QkFBQyxlQUFlO2dCQXdIYyxXQUFXO3NCQUE3RCxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUtqRCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTZWxmLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZGdlbiB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhbiB9IGZyb20gJ0BldWkvYmFzZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVDTEJhc2VEaXJlY3RpdmUgfSBmcm9tICcuLi9lY2wtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWNsQ2hlY2tib3hMYWJlbENvbXBvbmVudCB9IGZyb20gJy4uL2VjbC1jaGVja2JveC9lY2wtY2hlY2tib3gtbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7IEVjbEljb25Db21wb25lbnQgfSBmcm9tICcuLi9lY2wtaWNvbi9lY2wtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWNsTXVsdGlzZWxlY3RPcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuL2VjbC1tdWx0aXNlbGVjdC1vcHRpb24uZGlyZWN0aXZlJztcblxuZW51bSBLZXlDb2RlIHtcbiAgQVJST1dfVVAgPSAnQXJyb3dVcCcsXG4gIEFSUk9XX0RPV04gPSAnQXJyb3dEb3duJyxcbiAgQVJST1dfTEVGVCA9ICdBcnJvd0xlZnQnLFxuICBBUlJPV19SSUdIVCA9ICdBcnJvd1JpZ2h0JyxcbiAgRVNDQVBFID0gJ0VzY2FwZScsXG4gIEVOVEVSID0gJ0VudGVyJyxcbiAgVEFCID0gJ1RhYidcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzZWxlY3RbZWNsTXVsdGlzZWxlY3RdJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2VjbC1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRWNsTXVsdGlzZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBFQ0xCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrLCBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihFY2xNdWx0aXNlbGVjdE9wdGlvbkRpcmVjdGl2ZSkgZWNsT3B0aW9uSXRlbXM6IFF1ZXJ5TGlzdDxFY2xNdWx0aXNlbGVjdE9wdGlvbkRpcmVjdGl2ZT47XG4gICAgQGNvZXJjZUJvb2xlYW4gQElucHV0KCkgaXNJbnZhbGlkOiBib29sZWFuIHwgYW55ICA9IGZhbHNlO1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBzdXBlci5nZXRDc3NDbGFzc2VzKCdlY2wtc2VsZWN0JyksXG4gICAgICAgIF0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgZWNsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQElucHV0KCkgc2V0IGVjbFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZWNsUGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3RJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB0aGlzLl9lY2xQbGFjZWhvbGRlciB8fCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KCkgZWNsU2l6ZTogc3RyaW5nID0gJ20nO1xuXG4gICAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdhdHRyLmRpc2FibGVkJylcbiAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdDb250cm9sLmRpc2FibGVkIHx8IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4gfCBhbnkpIHsgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2VjbFBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBkaWZmZXI6IEl0ZXJhYmxlRGlmZmVyPEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlPjtcbiAgICBwcml2YXRlIGhvc3RFbDogSFRNTFNlbGVjdEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBob3N0UGFyZW50RWw6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgaG9zdFdyYXBwZXJFbDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBzZWxlY3RJY29uQ29udGFpbmVyRWw6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgbXVsdGlzZWxlY3RXcmFwcGVyOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG11bHRpc2VsZWN0Q29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG11bHRpRHJvcGRvd246IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgb3B0aW9uc1dyYXBwZXI6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgbXVsdGlTZWxlY3RPcHRpb25zOiBIVE1MRWxlbWVudFtdID0gW107XG4gICAgcHJpdmF0ZSBtdWx0aVNlbGVjdElucHV0OiBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHByaXZhdGUgbXVsdGlTZWFyY2g6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBub1Jlc3VsdHNGb3VuZDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBjaGVja2JveFNlbGVjdEFsbDogSFRNTElucHV0RWxlbWVudDtcbiAgICBwcml2YXRlIHNlbGVjdEFsbEVsbDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBzZWxlY3RlZFZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIHNlYXJjaEVsOiBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHByaXZhdGUgc2VsZWN0QWxsTGFiZWw6IEhUTUxMYWJlbEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25Db3VudDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBtdWx0aXNlbGVjdFRvb2xiYXI6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByaXZhdGUgY2xlYXJCdG46IEhUTUxCdXR0b25FbGVtZW50O1xuICAgIHByaXZhdGUgY2xvc2VCdG46IEhUTUxCdXR0b25FbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBub1Jlc3VsdHNGb3VuZFRleHQgPSAnTm8gcmVzdWx0cyBmb3VuZCc7XG4gICAgcHJpdmF0ZSBDTEFTU19OT19SRVNVTFRTX0ZPVU5EID0gJ2VjbC1zZWxlY3RfX211bHRpcGxlLW5vLXJlc3VsdHMnO1xuICAgIHByaXZhdGUgc2VsZWN0QWxsTGFiZWxUZXh0ID0gJ1NlbGVjdCBhbGwnO1xuICAgIHByaXZhdGUgY2xvc2VUZXh0ID0gJ0Nsb3NlJztcbiAgICBwcml2YXRlIGNsZWFyQWxsVGV4dCA9ICdDbGVhciBhbGwnO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHJvdGVjdGVkIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmRpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGUoKTtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJpbmRDYWxsYmFja3MoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3N0RWwgPSB0aGlzLmdldEhvc3RFbGVtZW50KCk7XG4gICAgICAgIHRoaXMuaG9zdFBhcmVudEVsID0gdGhpcy5nZXRIb3N0UGFyZW50RWxlbWVudCh0aGlzLmhvc3RFbCk7XG4gICAgICAgIHRoaXMuaG9zdFdyYXBwZXJFbCA9IHRoaXMuY3JlYXRlSG9zdFdyYXBwZXJDb250YWluZXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RJY29uQ29udGFpbmVyRWwgPSB0aGlzLmNyZWF0ZUljb25Db250YWluZXIoKTtcblxuICAgICAgICB0aGlzLm11bHRpc2VsZWN0V3JhcHBlciA9IHRoaXMuY3JlYXRlV3JhcHBlck11bHRpc2VsZWN0KCk7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RDb250YWluZXIgPSB0aGlzLmNyZWF0ZVNlbGVjdENvbnRhaW5lck11bHRpc2VsZWN0KCk7XG4gICAgICAgIHRoaXMubm9SZXN1bHRzRm91bmQgPSB0aGlzLmNyZWF0ZU5vUmVzdWx0c0ZvdW5kKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaG9zdFBhcmVudEVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU9yaWdpbmFsU2VsZWN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUh0bWxFbGVtZW50cygpO1xuICAgICAgICAgICAgdGhpcy5idWlsZE11bHRpc2VsZWN0RHJvcGRvd24oZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVUcmFuc2xhdGlvbnMoKTtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKTogdm9pZCB7XG5cbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdENvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKCdlY2wtc2VsZWN0X19jb250YWluZXItLWRpc2FibGVkJywgdGhpcy5kaXNhYmxlZCk7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RDb250YWluZXIuY2xhc3NMaXN0LnRvZ2dsZSgnZWNsLXNlbGVjdF9fY29udGFpbmVyLS1pbnZhbGlkJywgdGhpcy5pc0ludmFsaWQpO1xuXG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG5cbiAgICAgICAgY29uc3QgZGlmZiA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5lY2xPcHRpb25JdGVtcyk7XG5cbiAgICAgICAgaWYgKGRpZmYpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQWxsT3B0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGRpZmYuZm9yRWFjaEl0ZW0oaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zV3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZU9wdGlvbihpdGVtLml0ZW0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vbk9wdGlvbnNDaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbExhYmVsVGV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uT3B0aW9uc0NoYW5nZSgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlczogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzZXRDb21wb25lbnQoKTtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlcyh2YWx1ZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXl1cC5lc2NhcGUnLCBbJyRldmVudCddKSBvbkVzY2FwZUtleShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlTXVsdGlzZWxlY3REcm9wZG93bigpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgICBvbktleVVwKGV2OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzQ2xpY2tJbnNpZGUgPSB0aGlzLm11bHRpRHJvcGRvd24uY29udGFpbnMoPEVsZW1lbnQ+ZXYudGFyZ2V0KSB8fCB0aGlzLm11bHRpU2VsZWN0SW5wdXQuY29udGFpbnMoPEVsZW1lbnQ+ZXYudGFyZ2V0KTtcbiAgICAgICAgaWYgKCFpc0NsaWNrSW5zaWRlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTXVsdGlzZWxlY3REcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVPcHRpb24oZWw6IEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlKTogSFRNTEVsZW1lbnQge1xuXG4gICAgICAgIGlmIChlbC5pc09wdEdyb3VwKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9wdEdyb3VwKGVsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU9wdGlvbldpdGhDaGVja2JveChlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU9wdEdyb3VwKGVsOiBFY2xNdWx0aXNlbGVjdE9wdGlvbkRpcmVjdGl2ZSk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkZ2VuKCk7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuaWQgPSBpZDtcbiAgICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX211bHRpcGxlLWdyb3VwJyk7XG4gICAgICAgIGNvbnN0IGg1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDUnKTtcbiAgICAgICAgaDUuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fbXVsdGlwbGUtZ3JvdXBfX3RpdGxlJyk7XG4gICAgICAgIGg1LmlubmVyVGV4dCA9IGVsLmxhYmVsO1xuICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoaDUpO1xuICAgICAgICBlbC5lY2xPcHRpb25JdGVtcy5mb3JFYWNoKGl0ZW0gPT4gZGl2LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlT3B0aW9uV2l0aENoZWNrYm94KGl0ZW0pKSk7XG4gICAgICAgIHJldHVybiBkaXY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVBbGxPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB3aGlsZSAodGhpcy5vcHRpb25zV3JhcHBlci5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNXcmFwcGVyLmZpcnN0Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3B0aW9uc0NoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lY2xPcHRpb25JdGVtcy5mb3JFYWNoKGkgPT4gaS5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgKS5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm11bHRpc2VsZWN0V3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLm11bHRpRHJvcGRvd24pO1xuICAgICAgICAgICAgICAgIHRoaXMubXVsdGlEcm9wZG93bi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZE11bHRpc2VsZWN0RHJvcGRvd24odHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTm9SZXN1bHRzRm91bmQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBub1Jlc3VsdHNEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbm9SZXN1bHRzRGl2LmNsYXNzTGlzdC5hZGQodGhpcy5DTEFTU19OT19SRVNVTFRTX0ZPVU5EKTtcbiAgICAgICAgY29uc3QgdGV4dFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHRleHRTcGFuLmlubmVySFRNTCA9IHRoaXMubm9SZXN1bHRzRm91bmRUZXh0O1xuICAgICAgICBub1Jlc3VsdHNEaXYuYXBwZW5kQ2hpbGQodGV4dFNwYW4pO1xuICAgICAgICByZXR1cm4gbm9SZXN1bHRzRGl2O1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZU9yaWdpbmFsU2VsZWN0Q29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvc3RQYXJlbnRFbC5yZXBsYWNlQ2hpbGQodGhpcy5ob3N0V3JhcHBlckVsLCB0aGlzLmhvc3RFbCk7XG4gICAgICAgIHRoaXMuaG9zdFdyYXBwZXJFbC5hcHBlbmRDaGlsZCh0aGlzLmhvc3RFbCk7XG4gICAgICAgIHRoaXMuaG9zdFdyYXBwZXJFbC5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19jb250YWluZXItLWhpZGRlbicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlSHRtbEVsZW1lbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvc3RQYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLm11bHRpc2VsZWN0V3JhcHBlcik7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RXcmFwcGVyLmFwcGVuZENoaWxkKHRoaXMubXVsdGlzZWxlY3RDb250YWluZXIpO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0SWNvbkNvbnRhaW5lckVsKTtcbiAgICAgICAgdGhpcy5zZWxlY3RJY29uQ29udGFpbmVyRWwuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uQ29tcG9uZW50KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xuICAgIH07XG5cbiAgICBwcml2YXRlIHByb3BhZ2F0ZVRvdWNoZWQgPSAoKSA9PiB7XG4gICAgfTtcblxuICAgIHByaXZhdGUgYnVpbGRNdWx0aXNlbGVjdERyb3Bkb3duKHdpdGhPcHRpb25zOiBib29sZWFuKTogdm9pZCB7XG5cbiAgICAgICAgdGhpcy5tdWx0aURyb3Bkb3duID0gdGhpcy5jcmVhdGVEcm9wZG93bkZvck11bHRpc2VsZWN0KCk7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RXcmFwcGVyLmFwcGVuZENoaWxkKHRoaXMubXVsdGlEcm9wZG93bik7XG4gICAgICAgIHRoaXMubXVsdGlEcm9wZG93bi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVNlYXJjaEZvck11bHRpc2VsZWN0KCkpO1xuICAgICAgICB0aGlzLm11bHRpRHJvcGRvd24uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVNdWx0aVNlbGVjdEFsbCgpKTtcbiAgICAgICAgdGhpcy5vcHRpb25zV3JhcHBlciA9IHRoaXMuY3JlYXRlT3B0aW9uc1dyYXBwZXIoKTtcbiAgICAgICAgdGhpcy5tdWx0aURyb3Bkb3duLmFwcGVuZENoaWxkKHRoaXMub3B0aW9uc1dyYXBwZXIpO1xuXG4gICAgICAgIGlmICh3aXRoT3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5lY2xPcHRpb25JdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zV3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZU9wdGlvbldpdGhDaGVja2JveChpdGVtKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubXVsdGlEcm9wZG93bi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZU11bHRpc2VsZWN0VG9vbGJhcigpKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdEFsbExhYmVsVGV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SG9zdEVsZW1lbnQoKTogSFRNTFNlbGVjdEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SG9zdFBhcmVudEVsZW1lbnQoaG9zdEVsOiBIVE1MU2VsZWN0RWxlbWVudCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIGhvc3RFbC5wYXJlbnRFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlSG9zdFdyYXBwZXJDb250YWluZXIoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCB3cmFwcGVyQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHdyYXBwZXJDb250YWluZXIuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fY29udGFpbmVyJyk7XG4gICAgICAgIHdyYXBwZXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChgZWNsLXNlbGVjdF9fY29udGFpbmVyLS0ke3RoaXMuZWNsU2l6ZX1gKTtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXJDb250YWluZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVXcmFwcGVyTXVsdGlzZWxlY3QoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCB3cmFwcGVyQ29udGFpbmVyTXVsdGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgd3JhcHBlckNvbnRhaW5lck11bHRpLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX211bHRpcGxlJyk7XG4gICAgICAgIHJldHVybiB3cmFwcGVyQ29udGFpbmVyTXVsdGk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTZWxlY3RDb250YWluZXJNdWx0aXNlbGVjdCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdENvbnRhaW5lck11bHRpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHNlbGVjdENvbnRhaW5lck11bHRpLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lcicpO1xuICAgICAgICBzZWxlY3RDb250YWluZXJNdWx0aS5jbGFzc0xpc3QuYWRkKGBlY2wtc2VsZWN0X19jb250YWluZXItLSR7dGhpcy5lY2xTaXplfWApO1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgc2VsZWN0Q29udGFpbmVyTXVsdGkuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fY29udGFpbmVyLS1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdENvbnRhaW5lck11bHRpLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlTXVsdGlzZWxlY3RDb3VudGVyKCkpO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQuc2V0QXR0cmlidXRlKCdwbGFjZWhvbGRlcicsIHRoaXMuX2VjbFBsYWNlaG9sZGVyIHx8ICcnKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0Jyk7XG4gICAgICAgIGlmICh0aGlzLmhvc3RFbC5oYXNBdHRyaWJ1dGUoJ2Zvcm1Db250cm9sTmFtZScpKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQuc2V0QXR0cmlidXRlKCdmb3JtQ29udHJvbE5hbWUnLCB0aGlzLmhvc3RFbC5nZXRBdHRyaWJ1dGUoJ2Zvcm1Db250cm9sTmFtZScpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT25NYWluSW5wdXQpO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdCcpO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fbXVsdGlwbGUtdG9nZ2xlJyk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duT25NYWluSW5wdXQpO1xuXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZWN0Q29udGFpbmVyTXVsdGkuYXBwZW5kQ2hpbGQodGhpcy5tdWx0aVNlbGVjdElucHV0KTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0Q29udGFpbmVyTXVsdGk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVNdWx0aXNlbGVjdENvdW50ZXIoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNvdW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ291bnQuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdC1tdWx0aXBsZS1zZWxlY3Rpb25zLWNvdW50ZXInKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ291bnRUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNvdW50LmFwcGVuZENoaWxkKHNlbGVjdGlvbkNvdW50VGV4dCk7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkNvdW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd011bHRpc2VsZWN0Q291bnRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db3VudC5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0LW11bHRpcGxlLXNlbGVjdGlvbnMtY291bnRlci0tdmlzaWJsZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZU11bHRpc2VsZWN0Q291bnRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db3VudC5jbGFzc0xpc3QucmVtb3ZlKCdlY2wtc2VsZWN0LW11bHRpcGxlLXNlbGVjdGlvbnMtY291bnRlci0tdmlzaWJsZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRHJvcGRvd25Gb3JNdWx0aXNlbGVjdCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRyb3Bkb3duRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRyb3Bkb3duRGl2LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX211bHRpcGxlLWRyb3Bkb3duJyk7XG4gICAgICAgIGRyb3Bkb3duRGl2LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lcicpO1xuICAgICAgICBkcm9wZG93bkRpdi5jbGFzc0xpc3QuYWRkKGBlY2wtc2VsZWN0X19jb250YWluZXItLSR7dGhpcy5lY2xTaXplfWApO1xuICAgICAgICBkcm9wZG93bkRpdi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICByZXR1cm4gZHJvcGRvd25EaXY7XG4gICAgfVxuXG4gICAgLy8gc2VhcmNoIGJveCB0byBzZWFyY2ggYW1vbmcgb3B0aW9uc1xuICAgIHByaXZhdGUgY3JlYXRlU2VhcmNoRm9yTXVsdGlzZWxlY3QoKTogSFRNTElucHV0RWxlbWVudCB7XG4gICAgICAgIHRoaXMubXVsdGlTZWFyY2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICB0aGlzLm11bHRpU2VhcmNoLnR5cGUgPSAnc2VhcmNoJztcbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5jbGFzc0xpc3QuYWRkKCdlY2wtdGV4dC1pbnB1dCcpO1xuICAgICAgICB0aGlzLm11bHRpU2VhcmNoLnBsYWNlaG9sZGVyID0gJ1NlYXJjaCc7XG5cbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duT25TZWFyY2gpO1xuICAgICAgICB0aGlzLm11bHRpU2VhcmNoLmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vblNlYXJjaE9wdGlvbnMpO1xuICAgICAgICB0aGlzLm11bHRpU2VhcmNoLmFkZEV2ZW50TGlzdGVuZXIoJ3NlYXJjaCcsIHRoaXMuaGFuZGxlWEJ0bk9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hFbCA9IHRoaXMubXVsdGlTZWFyY2g7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpU2VhcmNoO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlT3B0aW9uV2l0aENoZWNrYm94KGVsOiBFY2xNdWx0aXNlbGVjdE9wdGlvbkRpcmVjdGl2ZSk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkZ2VuKCk7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgaWYgKGVsLmNzc0NsYXNzZXMpIHtcbiAgICAgICAgICAgIGVsLmNzc0NsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGNsID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja2JveERpdi5jbGFzc0xpc3QuYWRkKGNsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hlY2tib3hJbnB1dCA9IHRoaXMuY3JlYXRlQ2hlY2tib3hJbnB1dChpZCwgZWwudmFsdWUpO1xuICAgICAgICBpZiAoZWwuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGNoZWNrYm94RGl2LmNsYXNzTGlzdC5hZGQoJ2VjbC1jaGVja2JveC0tZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGNoZWNrYm94SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hlY2tib3hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbk9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsLnNlbGVjdGVkIHx8ICh0aGlzLnNlbGVjdGVkVmFsdWVzLmluZGV4T2YoZWwudmFsdWUpID4gLTEpKSB7XG4gICAgICAgICAgICBjaGVja2JveElucHV0LmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID0gdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID09PSAnJyA/IGVsLmxhYmVsIDpcbiAgICAgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQudmFsdWUgKyAnLCcgKyBlbC5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoZWNrYm94SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uT3B0aW9uKTtcbiAgICAgICAgY2hlY2tib3hEaXYuYXBwZW5kQ2hpbGQoY2hlY2tib3hJbnB1dCk7XG5cbiAgICAgICAgY29uc3QgY2hlY2tib3hMYWJlbCA9IHRoaXMuY3JlYXRlQ2hlY2tib3hMYWJlbChlbC5sYWJlbCwgaWQpO1xuICAgICAgICBjaGVja2JveERpdi5hcHBlbmRDaGlsZChjaGVja2JveExhYmVsKTtcblxuICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5wdXNoKGNoZWNrYm94RGl2KTtcbiAgICAgICAgcmV0dXJuIGNoZWNrYm94RGl2O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ2hlY2tib3hMYWJlbCh0ZXh0OiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBIVE1MTGFiZWxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hMYWJlbCA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoRWNsQ2hlY2tib3hMYWJlbENvbXBvbmVudCk7XG4gICAgICAgIGNoZWNrYm94TGFiZWwubG9jYXRpb24ubmF0aXZlRWxlbWVudC5odG1sRm9yID0gaWQ7XG5cbiAgICAgICAgY29uc3QgdGV4dFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHRleHRTcGFuLmNsYXNzTGlzdC5hZGQoJ2VjbC1jaGVja2JveF9fbGFiZWwtdGV4dCcpO1xuICAgICAgICB0ZXh0U3Bhbi5pbm5lckhUTUwgPSB0ZXh0O1xuXG4gICAgICAgIGNoZWNrYm94TGFiZWwubG9jYXRpb24ubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0U3Bhbik7XG4gICAgICAgIHJldHVybiBjaGVja2JveExhYmVsLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGVja2JveElucHV0KGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBIVE1MSW5wdXRFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgIGNoZWNrYm94SW5wdXQudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICAgIGNoZWNrYm94SW5wdXQuY2xhc3NMaXN0LmFkZCgnZWNsLWNoZWNrYm94X19pbnB1dCcpO1xuICAgICAgICBjaGVja2JveElucHV0LmlkID0gaWQ7XG4gICAgICAgIGNoZWNrYm94SW5wdXQudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGNoZWNrYm94SW5wdXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVNdWx0aXNlbGVjdFRvb2xiYXIoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0VG9vbGJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0VG9vbGJhci5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0LW11bHRpcGxlLXRvb2xiYXInKTtcbiAgICAgICAgdGhpcy5jbGVhckJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLmNsYXNzTGlzdC5hZGQoJ2VjbC1idXR0b24nKTtcbiAgICAgICAgdGhpcy5jbGVhckJ0bi5jbGFzc0xpc3QuYWRkKCdlY2wtYnV0dG9uLS1naG9zdCcpO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLnR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgdGhpcy5jbGVhckJ0bi50ZXh0Q29udGVudCA9IHRoaXMuY2xlYXJBbGxUZXh0O1xuXG4gICAgICAgIHRoaXMuY2xvc2VCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi5jbGFzc0xpc3QuYWRkKCdlY2wtYnV0dG9uJyk7XG4gICAgICAgIHRoaXMuY2xvc2VCdG4uY2xhc3NMaXN0LmFkZCgnZWNsLWJ1dHRvbi0tcHJpbWFyeScpO1xuICAgICAgICB0aGlzLmNsb3NlQnRuLnRleHRDb250ZW50ID0gdGhpcy5jbG9zZVRleHQ7XG4gICAgICAgIHRoaXMuY2xvc2VCdG4udHlwZSA9ICdidXR0b24nO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0VG9vbGJhci5hcHBlbmRDaGlsZCh0aGlzLmNsZWFyQnRuKTtcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdFRvb2xiYXIuYXBwZW5kQ2hpbGQodGhpcy5jbG9zZUJ0bik7XG5cbiAgICAgICAgdGhpcy5jbGVhckJ0bi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duT25DbGVhcik7XG4gICAgICAgIHRoaXMuY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT25DbGVhcik7XG5cbiAgICAgICAgdGhpcy5jbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duT25DbG9zZSk7XG4gICAgICAgIHRoaXMuY2xvc2VCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT25DbG9zZSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVUb29sYmFyRGlzcGxheSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpc2VsZWN0VG9vbGJhcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRvb2xiYXJEaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dNdWx0aXNlbGVjdFRvb2xiYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU11bHRpc2VsZWN0VG9vbGJhcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93TXVsdGlzZWxlY3RUb29sYmFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0VG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZU11bHRpc2VsZWN0VG9vbGJhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdFRvb2xiYXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNsaWNrT25DbGVhcigpOiB2b2lkIHtcblxuICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PmVsLmNoaWxkTm9kZXNbMF07XG4gICAgICAgICAgICBpZiAoIWlucHV0LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy51cGRhdGVNdWx0aXNlbGVjdENvdW50ZXIoMCk7XG4gICAgICAgIHRoaXMuaGlkZU11bHRpc2VsZWN0VG9vbGJhcigpO1xuICAgICAgICB0aGlzLmVjbENoYW5nZS5lbWl0KFt0aGlzLnNlbGVjdGVkVmFsdWVzXSk7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xpY2tPbkNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlTXVsdGlzZWxlY3REcm9wZG93bigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlS2V5ZG93bk9uQ2xvc2UoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkFSUk9XX1VQOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlQ2xlYXJBcnJvd1VwKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfTEVGVDoge1xuICAgICAgICAgICAgICAgIHRoaXMub25DbG9zZUFycm93TGVmdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNsb3NlQ2xlYXJBcnJvd1VwKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0QWN0aXZlT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IGN1cnJlbnRPcHRpb25zW2N1cnJlbnRPcHRpb25zLmxlbmd0aCAtIDFdLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBmaXJzdE9wdGlvbi5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25DbG9zZUFycm93TGVmdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckJ0bi5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlS2V5ZG93bk9uQ2xlYXIoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkFSUk9XX1VQOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlQ2xlYXJBcnJvd1VwKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfUklHSFQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXJBcnJvd1JpZ2h0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2xlYXJBcnJvd1JpZ2h0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlQnRuLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLy8gQWRkL3JlbW92ZSB2YWx1ZXMgZnJvbSB0aGUgc2VsZWN0IGlucHV0XG4gICAgcHJpdmF0ZSB1cGRhdGVDdXJyZW50VmFsdWUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHNBcnJheSA9IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzVmFsdWVzQXJyYXkgPSBbXTtcbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSA8SFRNTElucHV0RWxlbWVudD5lbC5jaGlsZE5vZGVzWzBdO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzVmFsdWVzQXJyYXkucHVzaCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZWwuY2hpbGROb2Rlc1swXSkudmFsdWUpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNBcnJheS5wdXNoKGVsLmNoaWxkTm9kZXNbMV0udGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHNlbGVjdGVkRWxlbWVudHNWYWx1ZXNBcnJheTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID0gc2VsZWN0ZWRFbGVtZW50c0FycmF5LmpvaW4oJywnKTtcbiAgICAgICAgdGhpcy51cGRhdGVUb29sYmFyRGlzcGxheSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZU11bHRpc2VsZWN0Q291bnRlcihzZWxlY3RlZEVsZW1lbnRzQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVNdWx0aXNlbGVjdENvdW50ZXIoY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvdW50LnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKS50ZXh0Q29udGVudCA9ICcnICsgY291bnQ7XG4gICAgICAgICAgICB0aGlzLnNob3dNdWx0aXNlbGVjdENvdW50ZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZU11bHRpc2VsZWN0Q291bnRlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2tib3ggdG8gc2VsZWN0IGFsbCB0aGUgZWxlbWVudHNcbiAgICBwcml2YXRlIGNyZWF0ZU11bHRpU2VsZWN0QWxsKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkZ2VuKCk7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGNoZWNrYm94RGl2LmNsYXNzTGlzdC5hZGQoJ2VjbC1jaGVja2JveCcpO1xuICAgICAgICBjaGVja2JveERpdi5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19tdWx0aXBsZS1hbGwnKTtcblxuICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsID0gdGhpcy5jcmVhdGVDaGVja2JveElucHV0KGlkLCAnYWxsJyk7XG5cbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duT25TZWxlY3RBbGwpO1xuICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja09uU2VsZWN0QWxsKTtcblxuICAgICAgICBjaGVja2JveERpdi5hcHBlbmRDaGlsZCh0aGlzLmNoZWNrYm94U2VsZWN0QWxsKTtcblxuICAgICAgICB0aGlzLnNlbGVjdEFsbExhYmVsID0gdGhpcy5jcmVhdGVDaGVja2JveExhYmVsKHRoaXMuZ2V0U2VsZWN0QWxsTGFiZWxUZXh0KCksIGlkKTtcbiAgICAgICAgY2hlY2tib3hEaXYuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3RBbGxMYWJlbCk7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsRWxsID0gY2hlY2tib3hEaXY7XG4gICAgICAgIHJldHVybiBjaGVja2JveERpdjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdEFsbExhYmVsVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3RBbGxMYWJlbFRleHR9ICgke3RoaXMuZ2V0QWN0aXZlT3B0aW9ucygpLmxlbmd0aH0pYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU9wdGlvbnNXcmFwcGVyKCk6IEhUTUxFbGVtZW50IHtcblxuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX211bHRpcGxlLW9wdGlvbnMnKTtcbiAgICAgICAgcmV0dXJuIGRpdjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzQXJyYXkgPSBbXTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50c1ZhbHVlc0FycmF5ID0gW107XG4gICAgICAgIC8vIFNlbGVjdCBhbGwgdGhlIGVsZW1lbnRzLCB0aGF0IGFyZSBub3QgZGlzYWJsZWRcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZmlsdGVyKGVsZW0gPT4gZWxlbS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSA8SFRNTElucHV0RWxlbWVudD5lbC5jaGlsZE5vZGVzWzBdO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tib3hTZWxlY3RBbGwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNWYWx1ZXNBcnJheS5wdXNoKGlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c0FycmF5LnB1c2goZWwuY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gc2VsZWN0ZWRFbGVtZW50c1ZhbHVlc0FycmF5O1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQudmFsdWUgPSBzZWxlY3RlZEVsZW1lbnRzQXJyYXkuam9pbignLCcpO1xuICAgICAgICB0aGlzLnVwZGF0ZU11bHRpc2VsZWN0Q291bnRlcihzZWxlY3RlZEVsZW1lbnRzQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgdGhpcy51cGRhdGVUb29sYmFyRGlzcGxheSgpO1xuICAgICAgICB0aGlzLmVjbENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUljb25Db21wb25lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlY2xJY29uQ29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChFY2xJY29uQ29tcG9uZW50KTtcbiAgICAgICAgZWNsSWNvbkNvbXBvbmVudC5pbnN0YW5jZS5zaXplID0gJ3MnO1xuICAgICAgICBlY2xJY29uQ29tcG9uZW50Lmluc3RhbmNlLmljb24gPSAnY29ybmVyLWFycm93JztcbiAgICAgICAgZWNsSWNvbkNvbXBvbmVudC5pbnN0YW5jZS50cmFuc2Zvcm0gPSAncm90YXRlLTE4MCc7XG4gICAgICAgIGVjbEljb25Db21wb25lbnQuaW5zdGFuY2UuY2xhc3MgPSAnZWNsLXNlbGVjdF9faWNvbi1zaGFwZSc7XG4gICAgICAgIHJldHVybiBlY2xJY29uQ29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVJY29uQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SWNvbkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxlY3RJY29uQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2ljb24nKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdEljb25Db250YWluZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVYQnRuT25TZWFyY2goZXZ0OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXl3b3JkID0gKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIGlmIChrZXl3b3JkID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RBbGxEaXNhYmxlU3RhdHVzKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsTm9kZSA9IGl0ZW0uY2hpbGRyZW5bMV0uY2hpbGRyZW5bMV07XG4gICAgICAgICAgICAgICAgbGFiZWxOb2RlLmlubmVySFRNTCA9IGl0ZW0udGV4dENvbnRlbnQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG5vUmVzdWx0c0ZvdW5kRXhpc3RzID0gKHRoaXMub3B0aW9uc1dyYXBwZXIubGFzdENoaWxkIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnModGhpcy5DTEFTU19OT19SRVNVTFRTX0ZPVU5EKTtcbiAgICAgICAgICAgIGlmIChub1Jlc3VsdHNGb3VuZEV4aXN0cykge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub1Jlc3VsdHNGb3VuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VhcmNoT3B0aW9ucyhldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2V5d29yZCA9IChldnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICBsZXQgaXNNYXRjaEZvdW5kID0gZmFsc2U7XG4gICAgICAgIGlmIChrZXl3b3JkID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RBbGxEaXNhYmxlU3RhdHVzKGZhbHNlKTtcbiAgICAgICAgICAgIGlzTWF0Y2hGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0uc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbE5vZGUgPSBpdGVtLmNoaWxkcmVuWzFdLmNoaWxkcmVuWzFdO1xuICAgICAgICAgICAgICAgIGxhYmVsTm9kZS5pbm5lckhUTUwgPSBpdGVtLnRleHRDb250ZW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdEFsbERpc2FibGVTdGF0dXModHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRleHRDb250ZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihrZXl3b3JkLnRvTG93ZXJDYXNlKCkpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXNNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodFNlYXJjaFRleHQoaXRlbSwga2V5d29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9SZXN1bHRzRm91bmRFeGlzdHMgPSAodGhpcy5vcHRpb25zV3JhcHBlci5sYXN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLkNMQVNTX05PX1JFU1VMVFNfRk9VTkQpO1xuICAgICAgICBpZiAoIWlzTWF0Y2hGb3VuZCAmJiAhbm9SZXN1bHRzRm91bmRFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub1Jlc3VsdHNGb3VuZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaEZvdW5kICYmIG5vUmVzdWx0c0ZvdW5kRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNXcmFwcGVyLnJlbW92ZUNoaWxkKHRoaXMubm9SZXN1bHRzRm91bmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWdobGlnaHRTZWFyY2hUZXh0KGl0ZW06IEhUTUxFbGVtZW50LCBrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGFiZWxOb2RlID0gaXRlbS5jaGlsZHJlblsxXS5jaGlsZHJlblsxXTtcbiAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGtleXdvcmQsICdnaScpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gaXRlbS50ZXh0Q29udGVudDtcbiAgICAgICAgY29uc3QgcmVzID0gdGV4dC5yZXBsYWNlKHJlLCAnPGI+JCY8L2I+Jyk7XG4gICAgICAgIGxhYmVsTm9kZS5pbm5lckhUTUwgPSByZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3RBbGxEaXNhYmxlU3RhdHVzKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsRWxsLmNsYXNzTGlzdC50b2dnbGUoJ2VjbC1jaGVja2JveC0tZGlzYWJsZWQnLCB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0Q29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZWwuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tib3hTZWxlY3RBbGwpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tib3hTZWxlY3RBbGwuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0SW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db3VudCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNdWx0aXNlbGVjdENvdW50ZXIoMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHdyaXRlVmFsdWVzKHZhbHVlczogQXJyYXk8c3RyaW5nPik6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0T3B0aW9ucyAmJiB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZmlsdGVyKGVsZW0gPT4gdmFsdWVzLmluY2x1ZGVzKCg8SFRNTElucHV0RWxlbWVudD5lbGVtLmNoaWxkTm9kZXNbMF0pLnZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAhKDxIVE1MSW5wdXRFbGVtZW50PmVsZW0uY2hpbGROb2Rlc1swXSkuZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZWwuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c0FycmF5LnB1c2goZWwuY2hpbGROb2Rlc1sxXS50ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2goaW5wdXQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3RJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID0gc2VsZWN0ZWRFbGVtZW50c0FycmF5LmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkNvdW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNdWx0aXNlbGVjdENvdW50ZXIodmFsdWVzLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdEFsbExhYmVsVGV4dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxMYWJlbC5sYXN0RWxlbWVudENoaWxkLnRleHRDb250ZW50ID0gYCR7dGhpcy5zZWxlY3RBbGxMYWJlbFRleHR9ICgke3RoaXMuZ2V0QWN0aXZlT3B0aW9ucygpLmxlbmd0aH0pYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ1dHRvbnNMYWJlbFRleHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VCdG4udGV4dENvbnRlbnQgPSBgJHt0aGlzLmNsb3NlVGV4dH1gO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLnRleHRDb250ZW50ID0gYCR7dGhpcy5jbGVhckFsbFRleHR9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVRyYW5zbGF0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgU0VMRUNUX0FMTF9LRVkgPSAnZWNsLm11bHRpc2VsZWN0LlNFTEVDVC1BTEwnO1xuICAgICAgICBjb25zdCBOT19SRVNVTFRTX0ZPVU5EX0tFWSA9ICdlY2wubXVsdGlzZWxlY3QuTk8tUkVTVUxUUy1GT1VORCc7XG4gICAgICAgIGNvbnN0IENMT1NFX0tFWSA9ICdlY2wuY29tbW9uLkNMT1NFJztcbiAgICAgICAgY29uc3QgQ0xFQVJfQUxMX0tFWSA9ICdlY2wubXVsdGlzZWxlY3QuQ0xFQVItQUxMJztcbiAgICAgICAgY29uc3QgU0VBUkNIX0tFWSA9ICdlY2wuY29tbW9uLlNFQVJDSCc7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlXG4gICAgICAgICAgICAuc3RyZWFtKFtTRUxFQ1RfQUxMX0tFWSwgTk9fUkVTVUxUU19GT1VORF9LRVksIENMT1NFX0tFWSwgQ0xFQVJfQUxMX0tFWSwgU0VBUkNIX0tFWV0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCh0cmFuc2xhdGlvbjogSlNPTikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubm9SZXN1bHRzRm91bmRUZXh0ID0gdHJhbnNsYXRpb25bTk9fUkVTVUxUU19GT1VORF9LRVldO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VUZXh0ID0gdHJhbnNsYXRpb25bQ0xPU0VfS0VZXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQWxsVGV4dCA9IHRyYW5zbGF0aW9uW0NMRUFSX0FMTF9LRVldO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnV0dG9uc0xhYmVsVGV4dCgpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0QWxsTGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxMYWJlbFRleHQgPSB0cmFuc2xhdGlvbltTRUxFQ1RfQUxMX0tFWV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0QWxsTGFiZWxUZXh0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHRoaXMubXVsdGlTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5wbGFjZWhvbGRlciA9IHRyYW5zbGF0aW9uW1NFQVJDSF9LRVldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpRHJvcGRvd24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5NdWx0aXNlbGVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tdWx0aURyb3Bkb3duLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9uSW5kZXhCeUlkRnJvbUFjdGl2ZU9wdGlvbnMoaWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKS5maW5kSW5kZXgob3B0aW9uID0+IG9wdGlvbi5maXJzdEVsZW1lbnRDaGlsZC5pZCA9PT0gaWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xpY2tPbk1haW5JbnB1dChldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZURyb3Bkb3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpRHJvcGRvd24uc3R5bGUuZGlzcGxheSA9IHRoaXMubXVsdGlEcm9wZG93bi5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScgPyAnYmxvY2snIDogJ25vbmUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlS2V5ZG93bk9uTWFpbklucHV0KGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FTlRFUjoge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkFSUk9XX0RPV046IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTWFpbklucHV0QXJyb3dEb3duKGV2dCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uTWFpbklucHV0QXJyb3dEb3duKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5vcGVuTXVsdGlzZWxlY3QoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hFbC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlS2V5ZG93bk9uU2VhcmNoKGV2dCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FTlRFUjoge1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlRBQjpcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19ET1dOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaEFycm93RG93bk9yVGFiKCk7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfVVA6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoQXJyb3dVcChldnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVTQ0FQRToge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VhcmNoQXJyb3dEb3duT3JUYWIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja2JveFNlbGVjdEFsbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gY3VycmVudE9wdGlvbnNbMF0uZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBmaXJzdE9wdGlvbi5mb2N1cygpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWFyY2hBcnJvd1VwKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5jbG9zZU11bHRpc2VsZWN0RHJvcGRvd24oKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGlja09uU2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdEFsbCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlS2V5ZG93bk9uU2VsZWN0QWxsKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5UQUI6XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfRE9XTjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3RBbGxBcnJvd0Rvd25PclRhYihldnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkFSUk9XX1VQOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdEFsbEFycm93VXAoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FTlRFUjoge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tib3hTZWxlY3RBbGwuY2xpY2soKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FU0NBUEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTXVsdGlzZWxlY3REcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlbGVjdEFsbEFycm93RG93bk9yVGFiKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKGN1cnJlbnRPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTaWJsaW5nQ2hlY2tib3ggPSBjdXJyZW50T3B0aW9uc1swXS5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIG5leHRTaWJsaW5nQ2hlY2tib3guZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWxlY3RBbGxBcnJvd1VwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaEVsLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGlja09uT3B0aW9uKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZSgpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5lY2xDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUtleWRvd25Pbk9wdGlvbihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfRE9XTjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25PcHRpb25BcnJvd0Rvd24oZXZ0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfVVA6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uQXJyb3dVcChldnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVTQ0FQRToge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRU5URVI6IHtcbiAgICAgICAgICAgICAgICAoZXZ0LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jbGljaygpO1xuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVEFCOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvblRhYihldnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk9wdGlvbkFycm93RG93bihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRPcHRpb25JbmRleEJ5SWRGcm9tQWN0aXZlT3B0aW9ucygoZXZ0LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5pZCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRBY3RpdmVPcHRpb25zKCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gY3VycmVudE9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdDaGVja2JveCA9IGN1cnJlbnRPcHRpb25zW2luZGV4ICsgMV0uZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBuZXh0U2libGluZ0NoZWNrYm94LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQnRuLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3B0aW9uQXJyb3dVcChldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRPcHRpb25JbmRleEJ5SWRGcm9tQWN0aXZlT3B0aW9ucygoZXZ0LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5pZCk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgcHJldlNpYmxpbmdDaGVja2JveCA9IHRoaXMuZ2V0QWN0aXZlT3B0aW9ucygpW2luZGV4IC0gMV0uZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBwcmV2U2libGluZ0NoZWNrYm94LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja2JveFNlbGVjdEFsbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hFbC5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk9wdGlvblRhYihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE9wdGlvbkluZGV4QnlJZEZyb21BY3RpdmVPcHRpb25zKChldnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmlkKTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQuZm9jdXMoKTsgLy8gVHJhcCB0YWJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBY3RpdmVPcHRpb25zKCk6IEhUTUxFbGVtZW50W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiZcbiAgICAgICAgICAgICFpdGVtLmNsYXNzTGlzdC5jb250YWlucygnZWNsLWNoZWNrYm94LS1kaXNhYmxlZCcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUFsbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25Pbk1haW5JbnB1dCk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbk1haW5JbnB1dCk7XG4gICAgICAgIHRoaXMuc2VhcmNoRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25TZWFyY2hPcHRpb25zKTtcbiAgICAgICAgdGhpcy5zZWFyY2hFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzZWFyY2gnLCB0aGlzLmhhbmRsZVhCdG5PblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2hlY2tib3hTZWxlY3RBbGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VsZWN0QWxsKTtcbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPblNlbGVjdEFsbCk7XG4gICAgICAgIHRoaXMuY2xlYXJCdG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uQ2xlYXIpO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja09uQ2xlYXIpO1xuICAgICAgICB0aGlzLmNsb3NlQnRuLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25PbkNsb3NlKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbkNsb3NlKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGVjYm94RWwgPSBlbC5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgY2hlY2JveEVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25Pbk9wdGlvbik7XG4gICAgICAgICAgICBjaGVjYm94RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrT25PcHRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRDYWxsYmFja3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlS2V5ZG93bk9uTWFpbklucHV0ID0gdGhpcy5oYW5kbGVLZXlkb3duT25NYWluSW5wdXQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duT25TZWFyY2ggPSB0aGlzLmhhbmRsZUtleWRvd25PblNlYXJjaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLm9uU2VhcmNoT3B0aW9ucyA9IHRoaXMub25TZWFyY2hPcHRpb25zLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlWEJ0bk9uU2VhcmNoID0gdGhpcy5oYW5kbGVYQnRuT25TZWFyY2guYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duT25TZWxlY3RBbGwgPSB0aGlzLmhhbmRsZUtleWRvd25PblNlbGVjdEFsbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd25Pbk9wdGlvbiA9IHRoaXMuaGFuZGxlS2V5ZG93bk9uT3B0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPbk1haW5JbnB1dCA9IHRoaXMuaGFuZGxlQ2xpY2tPbk1haW5JbnB1dC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrT25TZWxlY3RBbGwgPSB0aGlzLmhhbmRsZUNsaWNrT25TZWxlY3RBbGwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGlja09uT3B0aW9uID0gdGhpcy5oYW5kbGVDbGlja09uT3B0aW9uLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPbkNsZWFyID0gdGhpcy5oYW5kbGVDbGlja09uQ2xlYXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duT25DbGVhciA9IHRoaXMuaGFuZGxlS2V5ZG93bk9uQ2xlYXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duT25DbG9zZSA9IHRoaXMuaGFuZGxlS2V5ZG93bk9uQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGlja09uQ2xvc2UgPSB0aGlzLmhhbmRsZUNsaWNrT25DbG9zZS5iaW5kKHRoaXMpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD4iXX0=
894
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtbXVsdGlzZWxlY3QvZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9lY2wtbXVsdGlzZWxlY3QvZWNsLW11bHRpc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFHZixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBS0wsUUFBUSxFQUNSLE1BQU0sRUFFTixJQUFJLEVBRUosaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxFQUFFLElBQUksT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7QUFFbkYsSUFBSyxPQVFKO0FBUkQsV0FBSyxPQUFPO0lBQ1IsK0JBQW9CLENBQUE7SUFDcEIsbUNBQXdCLENBQUE7SUFDeEIsbUNBQXdCLENBQUE7SUFDeEIscUNBQTBCLENBQUE7SUFDMUIsNEJBQWlCLENBQUE7SUFDakIsMEJB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Qix1QkFBdUIsOGFBQ2YsNkJBQTZCLG9EQ2pEbEQsNkJBQ0E7O0FEaUQ0QjtJQUF2QixhQUFhOzBEQUEyQztrR0FGaEQsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUVJLHdCQUF3QixpQkFFbkIsaUJBQWlCLENBQUMsSUFBSTs7MEJBaUVoQyxRQUFROzswQkFBSSxJQUFJO2lLQTlEMkIsY0FBYztzQkFBN0QsZUFBZTt1QkFBQyw2QkFBNkI7Z0JBQ3RCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRWpCLFVBQVU7c0JBRGIsV0FBVzt1QkFBQyxPQUFPO2dCQUtWLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ00sY0FBYztzQkFBMUIsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUYsUUFBUTtzQkFGWCxLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGVBQWU7Z0JBMEh1QixXQUFXO3NCQUE3RCxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUtqRCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXIsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTZWxmLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHY0IGFzIHV1aWRnZW4gfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW4gfSBmcm9tICdAZXVpL2Jhc2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFQ0xCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZWNsLWJhc2UuZGlyZWN0aXZlJztcbmltcG9ydCB7IEVjbENoZWNrYm94TGFiZWxDb21wb25lbnQgfSBmcm9tICcuLi9lY2wtY2hlY2tib3gvZWNsLWNoZWNrYm94LWxhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFY2xJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vZWNsLWljb24vZWNsLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9lY2wtbXVsdGlzZWxlY3Qtb3B0aW9uLmRpcmVjdGl2ZSc7XG5cbmVudW0gS2V5Q29kZSB7XG4gICAgQVJST1dfVVAgPSAnQXJyb3dVcCcsXG4gICAgQVJST1dfRE9XTiA9ICdBcnJvd0Rvd24nLFxuICAgIEFSUk9XX0xFRlQgPSAnQXJyb3dMZWZ0JyxcbiAgICBBUlJPV19SSUdIVCA9ICdBcnJvd1JpZ2h0JyxcbiAgICBFU0NBUEUgPSAnRXNjYXBlJyxcbiAgICBFTlRFUiA9ICdFbnRlcicsXG4gICAgVEFCID0gJ1RhYicsXG59XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdzZWxlY3RbZWNsTXVsdGlzZWxlY3RdJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2VjbC1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRWNsTXVsdGlzZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBFQ0xCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBAQ29udGVudENoaWxkcmVuKEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlKSBlY2xPcHRpb25JdGVtczogUXVlcnlMaXN0PEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlPjtcbiAgICBAY29lcmNlQm9vbGVhbiBASW5wdXQoKSBpc0ludmFsaWQ6IGJvb2xlYW4gfCBhbnkgPSBmYWxzZTtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW3N1cGVyLmdldENzc0NsYXNzZXMoJ2VjbC1zZWxlY3QnKV0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgZWNsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQElucHV0KCkgc2V0IGVjbFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZWNsUGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3RJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB0aGlzLl9lY2xQbGFjZWhvbGRlciB8fCAnJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KCkgZWNsU2l6ZTogc3RyaW5nID0gJ20nO1xuXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGlzYWJsZWQnKVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgfHwgbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCB8fCBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IGFueSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9lY2xQbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIHByaXZhdGUgZGlmZmVyOiBJdGVyYWJsZURpZmZlcjxFY2xNdWx0aXNlbGVjdE9wdGlvbkRpcmVjdGl2ZT47XG4gICAgcHJpdmF0ZSBob3N0RWw6IEhUTUxTZWxlY3RFbGVtZW50O1xuICAgIHByaXZhdGUgaG9zdFBhcmVudEVsOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGhvc3RXcmFwcGVyRWw6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgc2VsZWN0SWNvbkNvbnRhaW5lckVsOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG11bHRpc2VsZWN0V3JhcHBlcjogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBtdWx0aXNlbGVjdENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBtdWx0aURyb3Bkb3duOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG9wdGlvbnNXcmFwcGVyOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIG11bHRpU2VsZWN0T3B0aW9uczogSFRNTEVsZW1lbnRbXSA9IFtdO1xuICAgIHByaXZhdGUgbXVsdGlTZWxlY3RJbnB1dDogSFRNTElucHV0RWxlbWVudDtcbiAgICBwcml2YXRlIG11bHRpU2VhcmNoOiBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHByaXZhdGUgbm9SZXN1bHRzRm91bmQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgY2hlY2tib3hTZWxlY3RBbGw6IEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxFbGw6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBzZWFyY2hFbDogSFRNTElucHV0RWxlbWVudDtcbiAgICBwcml2YXRlIHNlbGVjdEFsbExhYmVsOiBIVE1MTGFiZWxFbGVtZW50O1xuICAgIHByaXZhdGUgc2VsZWN0aW9uQ291bnQ6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgbXVsdGlzZWxlY3RUb29sYmFyOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIGNsZWFyQnRuOiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBwcml2YXRlIGNsb3NlQnRuOiBIVE1MQnV0dG9uRWxlbWVudDtcblxuICAgIHByaXZhdGUgbm9SZXN1bHRzRm91bmRUZXh0ID0gJ05vIHJlc3VsdHMgZm91bmQnO1xuICAgIHByaXZhdGUgQ0xBU1NfTk9fUkVTVUxUU19GT1VORCA9ICdlY2wtc2VsZWN0X19tdWx0aXBsZS1uby1yZXN1bHRzJztcbiAgICBwcml2YXRlIHNlbGVjdEFsbExhYmVsVGV4dCA9ICdTZWxlY3QgYWxsJztcbiAgICBwcml2YXRlIGNsb3NlVGV4dCA9ICdDbG9zZSc7XG4gICAgcHJpdmF0ZSBjbGVhckFsbFRleHQgPSAnQ2xlYXIgYWxsJztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHByb3RlY3RlZCBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5kaWZmZXIgPSB0aGlzLmRpZmZlcnMuZmluZChbXSkuY3JlYXRlKCk7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iaW5kQ2FsbGJhY2tzKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG9zdEVsID0gdGhpcy5nZXRIb3N0RWxlbWVudCgpO1xuICAgICAgICB0aGlzLmhvc3RQYXJlbnRFbCA9IHRoaXMuZ2V0SG9zdFBhcmVudEVsZW1lbnQodGhpcy5ob3N0RWwpO1xuICAgICAgICB0aGlzLmhvc3RXcmFwcGVyRWwgPSB0aGlzLmNyZWF0ZUhvc3RXcmFwcGVyQ29udGFpbmVyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0SWNvbkNvbnRhaW5lckVsID0gdGhpcy5jcmVhdGVJY29uQ29udGFpbmVyKCk7XG5cbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdFdyYXBwZXIgPSB0aGlzLmNyZWF0ZVdyYXBwZXJNdWx0aXNlbGVjdCgpO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29udGFpbmVyID0gdGhpcy5jcmVhdGVTZWxlY3RDb250YWluZXJNdWx0aXNlbGVjdCgpO1xuICAgICAgICB0aGlzLm5vUmVzdWx0c0ZvdW5kID0gdGhpcy5jcmVhdGVOb1Jlc3VsdHNGb3VuZCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmhvc3RQYXJlbnRFbCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVPcmlnaW5hbFNlbGVjdENvbXBvbmVudCgpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVIdG1sRWxlbWVudHMoKTtcbiAgICAgICAgICAgIHRoaXMuYnVpbGRNdWx0aXNlbGVjdERyb3Bkb3duKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlVHJhbnNsYXRpb25zKCk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29udGFpbmVyLmNsYXNzTGlzdC50b2dnbGUoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lci0tZGlzYWJsZWQnLCB0aGlzLmRpc2FibGVkKTtcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdENvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKCdlY2wtc2VsZWN0X19jb250YWluZXItLWludmFsaWQnLCB0aGlzLmlzSW52YWxpZCk7XG5cbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcblxuICAgICAgICBjb25zdCBkaWZmID0gdGhpcy5kaWZmZXIuZGlmZih0aGlzLmVjbE9wdGlvbkl0ZW1zKTtcblxuICAgICAgICBpZiAoZGlmZikge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxPcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgZGlmZi5mb3JFYWNoSXRlbSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVPcHRpb24oaXRlbS5pdGVtKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMub25PcHRpb25zQ2hhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxMYWJlbFRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbk9wdGlvbnNDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZXM6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2V0Q29tcG9uZW50KCk7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZXModmFsdWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZXNjYXBlJywgWyckZXZlbnQnXSkgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZU11bHRpc2VsZWN0RHJvcGRvd24oKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gICAgb25LZXlVcChldjogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0NsaWNrSW5zaWRlID0gdGhpcy5tdWx0aURyb3Bkb3duLmNvbnRhaW5zKDxFbGVtZW50PmV2LnRhcmdldCkgfHwgdGhpcy5tdWx0aVNlbGVjdElucHV0LmNvbnRhaW5zKDxFbGVtZW50PmV2LnRhcmdldCk7XG4gICAgICAgIGlmICghaXNDbGlja0luc2lkZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU11bHRpc2VsZWN0RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlT3B0aW9uKGVsOiBFY2xNdWx0aXNlbGVjdE9wdGlvbkRpcmVjdGl2ZSk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgaWYgKGVsLmlzT3B0R3JvdXAoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3B0R3JvdXAoZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3B0aW9uV2l0aENoZWNrYm94KGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlT3B0R3JvdXAoZWw6IEVjbE11bHRpc2VsZWN0T3B0aW9uRGlyZWN0aXZlKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWRnZW4oKTtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRpdi5pZCA9IGlkO1xuICAgICAgICBkaXYuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fbXVsdGlwbGUtZ3JvdXAnKTtcbiAgICAgICAgY29uc3QgaDUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoNScpO1xuICAgICAgICBoNS5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19tdWx0aXBsZS1ncm91cF9fdGl0bGUnKTtcbiAgICAgICAgaDUuaW5uZXJUZXh0ID0gZWwubGFiZWw7XG4gICAgICAgIGRpdi5hcHBlbmRDaGlsZChoNSk7XG4gICAgICAgIGVsLmVjbE9wdGlvbkl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IGRpdi5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZU9wdGlvbldpdGhDaGVja2JveChpdGVtKSkpO1xuICAgICAgICByZXR1cm4gZGl2O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlQWxsT3B0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgd2hpbGUgKHRoaXMub3B0aW9uc1dyYXBwZXIuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zV3JhcHBlci5maXJzdENoaWxkLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk9wdGlvbnNDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWNsT3B0aW9uSXRlbXMuZm9yRWFjaCgoaSkgPT5cbiAgICAgICAgICAgIGkuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXVsdGlzZWxlY3RXcmFwcGVyLnJlbW92ZUNoaWxkKHRoaXMubXVsdGlEcm9wZG93bik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXVsdGlEcm9wZG93bi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZE11bHRpc2VsZWN0RHJvcGRvd24odHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTm9SZXN1bHRzRm91bmQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBub1Jlc3VsdHNEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgbm9SZXN1bHRzRGl2LmNsYXNzTGlzdC5hZGQodGhpcy5DTEFTU19OT19SRVNVTFRTX0ZPVU5EKTtcbiAgICAgICAgY29uc3QgdGV4dFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIHRleHRTcGFuLmlubmVySFRNTCA9IHRoaXMubm9SZXN1bHRzRm91bmRUZXh0O1xuICAgICAgICBub1Jlc3VsdHNEaXYuYXBwZW5kQ2hpbGQodGV4dFNwYW4pO1xuICAgICAgICByZXR1cm4gbm9SZXN1bHRzRGl2O1xuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZU9yaWdpbmFsU2VsZWN0Q29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvc3RQYXJlbnRFbC5yZXBsYWNlQ2hpbGQodGhpcy5ob3N0V3JhcHBlckVsLCB0aGlzLmhvc3RFbCk7XG4gICAgICAgIHRoaXMuaG9zdFdyYXBwZXJFbC5hcHBlbmRDaGlsZCh0aGlzLmhvc3RFbCk7XG4gICAgICAgIHRoaXMuaG9zdFdyYXBwZXJFbC5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19jb250YWluZXItLWhpZGRlbicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlSHRtbEVsZW1lbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvc3RQYXJlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLm11bHRpc2VsZWN0V3JhcHBlcik7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RXcmFwcGVyLmFwcGVuZENoaWxkKHRoaXMubXVsdGlzZWxlY3RDb250YWluZXIpO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0Q29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0SWNvbkNvbnRhaW5lckVsKTtcbiAgICAgICAgdGhpcy5zZWxlY3RJY29uQ29udGFpbmVyRWwuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVJY29uQ29tcG9uZW50KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgICBwcml2YXRlIHByb3BhZ2F0ZVRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICAgIHByaXZhdGUgYnVpbGRNdWx0aXNlbGVjdERyb3Bkb3duKHdpdGhPcHRpb25zOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlEcm9wZG93biA9IHRoaXMuY3JlYXRlRHJvcGRvd25Gb3JNdWx0aXNlbGVjdCgpO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0V3JhcHBlci5hcHBlbmRDaGlsZCh0aGlzLm11bHRpRHJvcGRvd24pO1xuICAgICAgICB0aGlzLm11bHRpRHJvcGRvd24uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVTZWFyY2hGb3JNdWx0aXNlbGVjdCgpKTtcbiAgICAgICAgdGhpcy5tdWx0aURyb3Bkb3duLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlTXVsdGlTZWxlY3RBbGwoKSk7XG4gICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIgPSB0aGlzLmNyZWF0ZU9wdGlvbnNXcmFwcGVyKCk7XG4gICAgICAgIHRoaXMubXVsdGlEcm9wZG93bi5hcHBlbmRDaGlsZCh0aGlzLm9wdGlvbnNXcmFwcGVyKTtcblxuICAgICAgICBpZiAod2l0aE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZWNsT3B0aW9uSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVPcHRpb25XaXRoQ2hlY2tib3goaXRlbSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm11bHRpRHJvcGRvd24uYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVNdWx0aXNlbGVjdFRvb2xiYXIoKSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxMYWJlbFRleHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhvc3RFbGVtZW50KCk6IEhUTUxTZWxlY3RFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhvc3RQYXJlbnRFbGVtZW50KGhvc3RFbDogSFRNTFNlbGVjdEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiBob3N0RWwucGFyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUhvc3RXcmFwcGVyQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlckNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB3cmFwcGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lcicpO1xuICAgICAgICB3cmFwcGVyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoYGVjbC1zZWxlY3RfX2NvbnRhaW5lci0tJHt0aGlzLmVjbFNpemV9YCk7XG4gICAgICAgIHJldHVybiB3cmFwcGVyQ29udGFpbmVyO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlV3JhcHBlck11bHRpc2VsZWN0KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgd3JhcHBlckNvbnRhaW5lck11bHRpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHdyYXBwZXJDb250YWluZXJNdWx0aS5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19tdWx0aXBsZScpO1xuICAgICAgICByZXR1cm4gd3JhcHBlckNvbnRhaW5lck11bHRpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU2VsZWN0Q29udGFpbmVyTXVsdGlzZWxlY3QoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBzZWxlY3RDb250YWluZXJNdWx0aSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxlY3RDb250YWluZXJNdWx0aS5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19jb250YWluZXInKTtcbiAgICAgICAgc2VsZWN0Q29udGFpbmVyTXVsdGkuY2xhc3NMaXN0LmFkZChgZWNsLXNlbGVjdF9fY29udGFpbmVyLS0ke3RoaXMuZWNsU2l6ZX1gKTtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdENvbnRhaW5lck11bHRpLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2NvbnRhaW5lci0tZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RDb250YWluZXJNdWx0aS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZU11bHRpc2VsZWN0Q291bnRlcigpKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnNldEF0dHJpYnV0ZSgncGxhY2Vob2xkZXInLCB0aGlzLl9lY2xQbGFjZWhvbGRlciB8fCAnJyk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5yZWFkT25seSA9IHRydWU7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dCcpO1xuICAgICAgICBpZiAodGhpcy5ob3N0RWwuaGFzQXR0cmlidXRlKCdmb3JtQ29udHJvbE5hbWUnKSkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnNldEF0dHJpYnV0ZSgnZm9ybUNvbnRyb2xOYW1lJywgdGhpcy5ob3N0RWwuZ2V0QXR0cmlidXRlKCdmb3JtQ29udHJvbE5hbWUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja09uTWFpbklucHV0KTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3QnKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX211bHRpcGxlLXRvZ2dsZScpO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uTWFpbklucHV0KTtcblxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGVjdENvbnRhaW5lck11bHRpLmFwcGVuZENoaWxkKHRoaXMubXVsdGlTZWxlY3RJbnB1dCk7XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdENvbnRhaW5lck11bHRpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlTXVsdGlzZWxlY3RDb3VudGVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db3VudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNvdW50LmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0aW9ucy1jb3VudGVyJyk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvdW50VGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db3VudC5hcHBlbmRDaGlsZChzZWxlY3Rpb25Db3VudFRleHQpO1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Db3VudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dNdWx0aXNlbGVjdENvdW50ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ291bnQuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdC1tdWx0aXBsZS1zZWxlY3Rpb25zLWNvdW50ZXItLXZpc2libGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVNdWx0aXNlbGVjdENvdW50ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ291bnQuY2xhc3NMaXN0LnJlbW92ZSgnZWNsLXNlbGVjdC1tdWx0aXBsZS1zZWxlY3Rpb25zLWNvdW50ZXItLXZpc2libGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duRm9yTXVsdGlzZWxlY3QoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBkcm9wZG93bkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkcm9wZG93bkRpdi5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19tdWx0aXBsZS1kcm9wZG93bicpO1xuICAgICAgICBkcm9wZG93bkRpdi5jbGFzc0xpc3QuYWRkKCdlY2wtc2VsZWN0X19jb250YWluZXInKTtcbiAgICAgICAgZHJvcGRvd25EaXYuY2xhc3NMaXN0LmFkZChgZWNsLXNlbGVjdF9fY29udGFpbmVyLS0ke3RoaXMuZWNsU2l6ZX1gKTtcbiAgICAgICAgZHJvcGRvd25EaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgcmV0dXJuIGRyb3Bkb3duRGl2O1xuICAgIH1cblxuICAgIC8vIHNlYXJjaCBib3ggdG8gc2VhcmNoIGFtb25nIG9wdGlvbnNcbiAgICBwcml2YXRlIGNyZWF0ZVNlYXJjaEZvck11bHRpc2VsZWN0KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICB0aGlzLm11bHRpU2VhcmNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC50eXBlID0gJ3NlYXJjaCc7XG4gICAgICAgIHRoaXMubXVsdGlTZWFyY2guY2xhc3NMaXN0LmFkZCgnZWNsLXRleHQtaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5wbGFjZWhvbGRlciA9ICdTZWFyY2gnO1xuXG4gICAgICAgIHRoaXMubXVsdGlTZWFyY2guYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25TZWFyY2hPcHRpb25zKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5hZGRFdmVudExpc3RlbmVyKCdzZWFyY2gnLCB0aGlzLmhhbmRsZVhCdG5PblNlYXJjaCk7XG4gICAgICAgIHRoaXMuc2VhcmNoRWwgPSB0aGlzLm11bHRpU2VhcmNoO1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aVNlYXJjaDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU9wdGlvbldpdGhDaGVja2JveChlbDogRWNsTXVsdGlzZWxlY3RPcHRpb25EaXJlY3RpdmUpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZGdlbigpO1xuICAgICAgICBjb25zdCBjaGVja2JveERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICAgIGlmIChlbC5jc3NDbGFzc2VzKSB7XG4gICAgICAgICAgICBlbC5jc3NDbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaCgoY2wpID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja2JveERpdi5jbGFzc0xpc3QuYWRkKGNsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hlY2tib3hJbnB1dCA9IHRoaXMuY3JlYXRlQ2hlY2tib3hJbnB1dChpZCwgZWwudmFsdWUpO1xuICAgICAgICBpZiAoZWwuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGNoZWNrYm94RGl2LmNsYXNzTGlzdC5hZGQoJ2VjbC1jaGVja2JveC0tZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGNoZWNrYm94SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hlY2tib3hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbk9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsLnNlbGVjdGVkIHx8IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuaW5kZXhPZihlbC52YWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgY2hlY2tib3hJbnB1dC5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9IHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9PT0gJycgPyBlbC5sYWJlbCA6IHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSArICcsJyArIGVsLmxhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tib3hJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duT25PcHRpb24pO1xuICAgICAgICBjaGVja2JveERpdi5hcHBlbmRDaGlsZChjaGVja2JveElucHV0KTtcblxuICAgICAgICBjb25zdCBjaGVja2JveExhYmVsID0gdGhpcy5jcmVhdGVDaGVja2JveExhYmVsKGVsLmxhYmVsLCBpZCk7XG4gICAgICAgIGNoZWNrYm94RGl2LmFwcGVuZENoaWxkKGNoZWNrYm94TGFiZWwpO1xuXG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLnB1c2goY2hlY2tib3hEaXYpO1xuICAgICAgICByZXR1cm4gY2hlY2tib3hEaXY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGVja2JveExhYmVsKHRleHQ6IHN0cmluZywgaWQ6IHN0cmluZyk6IEhUTUxMYWJlbEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjaGVja2JveExhYmVsID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChFY2xDaGVja2JveExhYmVsQ29tcG9uZW50KTtcbiAgICAgICAgY2hlY2tib3hMYWJlbC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50Lmh0bWxGb3IgPSBpZDtcblxuICAgICAgICBjb25zdCB0ZXh0U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGV4dFNwYW4uY2xhc3NMaXN0LmFkZCgnZWNsLWNoZWNrYm94X19sYWJlbC10ZXh0Jyk7XG4gICAgICAgIHRleHRTcGFuLmlubmVySFRNTCA9IHRleHQ7XG5cbiAgICAgICAgY2hlY2tib3hMYWJlbC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKHRleHRTcGFuKTtcbiAgICAgICAgcmV0dXJuIGNoZWNrYm94TGFiZWwubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNoZWNrYm94SW5wdXQoaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjaGVja2JveElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgY2hlY2tib3hJbnB1dC50eXBlID0gJ2NoZWNrYm94JztcbiAgICAgICAgY2hlY2tib3hJbnB1dC5jbGFzc0xpc3QuYWRkKCdlY2wtY2hlY2tib3hfX2lucHV0Jyk7XG4gICAgICAgIGNoZWNrYm94SW5wdXQuaWQgPSBpZDtcbiAgICAgICAgY2hlY2tib3hJbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gY2hlY2tib3hJbnB1dDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU11bHRpc2VsZWN0VG9vbGJhcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3QtbXVsdGlwbGUtdG9vbGJhcicpO1xuICAgICAgICB0aGlzLmNsZWFyQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIHRoaXMuY2xlYXJCdG4uY2xhc3NMaXN0LmFkZCgnZWNsLWJ1dHRvbicpO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLmNsYXNzTGlzdC5hZGQoJ2VjbC1idXR0b24tLWdob3N0Jyk7XG4gICAgICAgIHRoaXMuY2xlYXJCdG4udHlwZSA9ICdidXR0b24nO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLnRleHRDb250ZW50ID0gdGhpcy5jbGVhckFsbFRleHQ7XG5cbiAgICAgICAgdGhpcy5jbG9zZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICB0aGlzLmNsb3NlQnRuLmNsYXNzTGlzdC5hZGQoJ2VjbC1idXR0b24nKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi5jbGFzc0xpc3QuYWRkKCdlY2wtYnV0dG9uLS1wcmltYXJ5Jyk7XG4gICAgICAgIHRoaXMuY2xvc2VCdG4udGV4dENvbnRlbnQgPSB0aGlzLmNsb3NlVGV4dDtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi50eXBlID0gJ2J1dHRvbic7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyLmFwcGVuZENoaWxkKHRoaXMuY2xlYXJCdG4pO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0VG9vbGJhci5hcHBlbmRDaGlsZCh0aGlzLmNsb3NlQnRuKTtcblxuICAgICAgICB0aGlzLmNsZWFyQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25PbkNsZWFyKTtcbiAgICAgICAgdGhpcy5jbGVhckJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbkNsZWFyKTtcblxuICAgICAgICB0aGlzLmNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25PbkNsb3NlKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbkNsb3NlKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVRvb2xiYXJEaXNwbGF5KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVG9vbGJhckRpc3BsYXkoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd011bHRpc2VsZWN0VG9vbGJhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oaWRlTXVsdGlzZWxlY3RUb29sYmFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dNdWx0aXNlbGVjdFRvb2xiYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RUb29sYmFyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlTXVsdGlzZWxlY3RUb29sYmFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0VG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xpY2tPbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZWwuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICAgIGlmICghaW5wdXQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICB0aGlzLnVwZGF0ZU11bHRpc2VsZWN0Q291bnRlcigwKTtcbiAgICAgICAgdGhpcy5oaWRlTXVsdGlzZWxlY3RUb29sYmFyKCk7XG4gICAgICAgIHRoaXMuZWNsQ2hhbmdlLmVtaXQoW3RoaXMuc2VsZWN0ZWRWYWx1ZXNdKTtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5zZWxlY3RlZFZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGlja09uQ2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duT25DbG9zZShldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfVVA6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2VDbGVhckFycm93VXAoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19MRUZUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlQXJyb3dMZWZ0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2xvc2VDbGVhckFycm93VXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy5nZXRBY3RpdmVPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gY3VycmVudE9wdGlvbnNbY3VycmVudE9wdGlvbnMubGVuZ3RoIC0gMV0uZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGZpcnN0T3B0aW9uLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNsb3NlQXJyb3dMZWZ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyQnRuLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duT25DbGVhcihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfVVA6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2VDbGVhckFycm93VXAoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19SSUdIVDoge1xuICAgICAgICAgICAgICAgIHRoaXMub25DbGVhckFycm93UmlnaHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25DbGVhckFycm93UmlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2VCdG4uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBBZGQvcmVtb3ZlIHZhbHVlcyBmcm9tIHRoZSBzZWxlY3QgaW5wdXRcbiAgICBwcml2YXRlIHVwZGF0ZUN1cnJlbnRWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50c0FycmF5ID0gW107XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHNWYWx1ZXNBcnJheSA9IFtdO1xuICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZWwuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICAgIGlmIChpbnB1dC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50c1ZhbHVlc0FycmF5LnB1c2goKDxIVE1MSW5wdXRFbGVtZW50PmVsLmNoaWxkTm9kZXNbMF0pLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzQXJyYXkucHVzaChlbC5jaGlsZE5vZGVzWzFdLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBzZWxlY3RlZEVsZW1lbnRzVmFsdWVzQXJyYXk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC52YWx1ZSA9IHNlbGVjdGVkRWxlbWVudHNBcnJheS5qb2luKCcsJyk7XG4gICAgICAgIHRoaXMudXBkYXRlVG9vbGJhckRpc3BsYXkoKTtcbiAgICAgICAgdGhpcy51cGRhdGVNdWx0aXNlbGVjdENvdW50ZXIoc2VsZWN0ZWRFbGVtZW50c0FycmF5Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTXVsdGlzZWxlY3RDb3VudGVyKGNvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db3VudC5xdWVyeVNlbGVjdG9yKCdzcGFuJykudGV4dENvbnRlbnQgPSAnJyArIGNvdW50O1xuICAgICAgICAgICAgdGhpcy5zaG93TXVsdGlzZWxlY3RDb3VudGVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVNdWx0aXNlbGVjdENvdW50ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrYm94IHRvIHNlbGVjdCBhbGwgdGhlIGVsZW1lbnRzXG4gICAgcHJpdmF0ZSBjcmVhdGVNdWx0aVNlbGVjdEFsbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZGdlbigpO1xuICAgICAgICBjb25zdCBjaGVja2JveERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBjaGVja2JveERpdi5jbGFzc0xpc3QuYWRkKCdlY2wtY2hlY2tib3gnKTtcbiAgICAgICAgY2hlY2tib3hEaXYuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fbXVsdGlwbGUtYWxsJyk7XG5cbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbCA9IHRoaXMuY3JlYXRlQ2hlY2tib3hJbnB1dChpZCwgJ2FsbCcpO1xuXG4gICAgICAgIHRoaXMuY2hlY2tib3hTZWxlY3RBbGwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VsZWN0QWxsKTtcbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPblNlbGVjdEFsbCk7XG5cbiAgICAgICAgY2hlY2tib3hEaXYuYXBwZW5kQ2hpbGQodGhpcy5jaGVja2JveFNlbGVjdEFsbCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RBbGxMYWJlbCA9IHRoaXMuY3JlYXRlQ2hlY2tib3hMYWJlbCh0aGlzLmdldFNlbGVjdEFsbExhYmVsVGV4dCgpLCBpZCk7XG4gICAgICAgIGNoZWNrYm94RGl2LmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0QWxsTGFiZWwpO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbEVsbCA9IGNoZWNrYm94RGl2O1xuICAgICAgICByZXR1cm4gY2hlY2tib3hEaXY7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RBbGxMYWJlbFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0QWxsTGFiZWxUZXh0fSAoJHt0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKS5sZW5ndGh9KWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVPcHRpb25zV3JhcHBlcigpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXYuY2xhc3NMaXN0LmFkZCgnZWNsLXNlbGVjdF9fbXVsdGlwbGUtb3B0aW9ucycpO1xuICAgICAgICByZXR1cm4gZGl2O1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHNBcnJheSA9IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzVmFsdWVzQXJyYXkgPSBbXTtcbiAgICAgICAgLy8gU2VsZWN0IGFsbCB0aGUgZWxlbWVudHMsIHRoYXQgYXJlIG5vdCBkaXNhYmxlZFxuICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1xuICAgICAgICAgICAgLmZpbHRlcigoZWxlbSkgPT4gZWxlbS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScpXG4gICAgICAgICAgICAuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IDxIVE1MSW5wdXRFbGVtZW50PmVsLmNoaWxkTm9kZXNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tib3hTZWxlY3RBbGwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNWYWx1ZXNBcnJheS5wdXNoKGlucHV0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRWxlbWVudHNBcnJheS5wdXNoKGVsLmNoaWxkTm9kZXNbMV0udGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gc2VsZWN0ZWRFbGVtZW50c1ZhbHVlc0FycmF5O1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0SW5wdXQudmFsdWUgPSBzZWxlY3RlZEVsZW1lbnRzQXJyYXkuam9pbignLCcpO1xuICAgICAgICB0aGlzLnVwZGF0ZU11bHRpc2VsZWN0Q291bnRlcihzZWxlY3RlZEVsZW1lbnRzQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgdGhpcy51cGRhdGVUb29sYmFyRGlzcGxheSgpO1xuICAgICAgICB0aGlzLmVjbENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUljb25Db21wb25lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBlY2xJY29uQ29tcG9uZW50ID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChFY2xJY29uQ29tcG9uZW50KTtcbiAgICAgICAgZWNsSWNvbkNvbXBvbmVudC5pbnN0YW5jZS5zaXplID0gJ3MnO1xuICAgICAgICBlY2xJY29uQ29tcG9uZW50Lmluc3RhbmNlLmljb24gPSAnY29ybmVyLWFycm93JztcbiAgICAgICAgZWNsSWNvbkNvbXBvbmVudC5pbnN0YW5jZS50cmFuc2Zvcm0gPSAncm90YXRlLTE4MCc7XG4gICAgICAgIGVjbEljb25Db21wb25lbnQuaW5zdGFuY2UuY2xhc3MgPSAnZWNsLXNlbGVjdF9faWNvbi1zaGFwZSc7XG4gICAgICAgIHJldHVybiBlY2xJY29uQ29tcG9uZW50LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVJY29uQ29udGFpbmVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SWNvbkNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzZWxlY3RJY29uQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2VjbC1zZWxlY3RfX2ljb24nKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdEljb25Db250YWluZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVYQnRuT25TZWFyY2goZXZ0OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXl3b3JkID0gKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIGlmIChrZXl3b3JkID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RBbGxEaXNhYmxlU3RhdHVzKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWxOb2RlID0gaXRlbS5jaGlsZHJlblsxXS5jaGlsZHJlblsxXTtcbiAgICAgICAgICAgICAgICBsYWJlbE5vZGUuaW5uZXJIVE1MID0gaXRlbS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgbm9SZXN1bHRzRm91bmRFeGlzdHMgPSAodGhpcy5vcHRpb25zV3JhcHBlci5sYXN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLkNMQVNTX05PX1JFU1VMVFNfRk9VTkQpO1xuICAgICAgICAgICAgaWYgKG5vUmVzdWx0c0ZvdW5kRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zV3JhcHBlci5yZW1vdmVDaGlsZCh0aGlzLm5vUmVzdWx0c0ZvdW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWFyY2hPcHRpb25zKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXl3b3JkID0gKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAgIGxldCBpc01hdGNoRm91bmQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGtleXdvcmQgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdEFsbERpc2FibGVTdGF0dXMoZmFsc2UpO1xuICAgICAgICAgICAgaXNNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWxOb2RlID0gaXRlbS5jaGlsZHJlblsxXS5jaGlsZHJlblsxXTtcbiAgICAgICAgICAgICAgICBsYWJlbE5vZGUuaW5uZXJIVE1MID0gaXRlbS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RBbGxEaXNhYmxlU3RhdHVzKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRleHRDb250ZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihrZXl3b3JkLnRvTG93ZXJDYXNlKCkpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXNNYXRjaEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodFNlYXJjaFRleHQoaXRlbSwga2V5d29yZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm9SZXN1bHRzRm91bmRFeGlzdHMgPSAodGhpcy5vcHRpb25zV3JhcHBlci5sYXN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyh0aGlzLkNMQVNTX05PX1JFU1VMVFNfRk9VTkQpO1xuICAgICAgICBpZiAoIWlzTWF0Y2hGb3VuZCAmJiAhbm9SZXN1bHRzRm91bmRFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9uc1dyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5ub1Jlc3VsdHNGb3VuZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaEZvdW5kICYmIG5vUmVzdWx0c0ZvdW5kRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNXcmFwcGVyLnJlbW92ZUNoaWxkKHRoaXMubm9SZXN1bHRzRm91bmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWdobGlnaHRTZWFyY2hUZXh0KGl0ZW06IEhUTUxFbGVtZW50LCBrZXl3b3JkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGFiZWxOb2RlID0gaXRlbS5jaGlsZHJlblsxXS5jaGlsZHJlblsxXTtcbiAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGtleXdvcmQsICdnaScpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gaXRlbS50ZXh0Q29udGVudDtcbiAgICAgICAgY29uc3QgcmVzID0gdGV4dC5yZXBsYWNlKHJlLCAnPGI+JCY8L2I+Jyk7XG4gICAgICAgIGxhYmVsTm9kZS5pbm5lckhUTUwgPSByZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3RBbGxEaXNhYmxlU3RhdHVzKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsRWxsLmNsYXNzTGlzdC50b2dnbGUoJ2VjbC1jaGVja2JveC0tZGlzYWJsZWQnLCB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0Q29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSA8SFRNTElucHV0RWxlbWVudD5lbC5jaGlsZE5vZGVzWzBdO1xuICAgICAgICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jaGVja2JveFNlbGVjdEFsbCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3RJbnB1dCkge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzID0gW107XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkNvdW50KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU11bHRpc2VsZWN0Q291bnRlcigwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgd3JpdGVWYWx1ZXModmFsdWVzOiBBcnJheTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHNBcnJheSA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3RPcHRpb25zICYmIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGVsZW0pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmluY2x1ZGVzKCg8SFRNTElucHV0RWxlbWVudD5lbGVtLmNoaWxkTm9kZXNbMF0pLnZhbHVlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoPEhUTUxJbnB1dEVsZW1lbnQ+ZWxlbS5jaGlsZE5vZGVzWzBdKS5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSA8SFRNTElucHV0RWxlbWVudD5lbC5jaGlsZE5vZGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQuY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRzQXJyYXkucHVzaChlbC5jaGlsZE5vZGVzWzFdLnRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHVzaChpbnB1dC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnZhbHVlID0gc2VsZWN0ZWRFbGVtZW50c0FycmF5LmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTXVsdGlzZWxlY3RDb3VudGVyKHZhbHVlcy5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RBbGxMYWJlbFRleHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsTGFiZWwubGFzdEVsZW1lbnRDaGlsZC50ZXh0Q29udGVudCA9IGAke3RoaXMuc2VsZWN0QWxsTGFiZWxUZXh0fSAoJHt0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKS5sZW5ndGh9KWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCdXR0b25zTGFiZWxUZXh0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlQnRuLnRleHRDb250ZW50ID0gYCR7dGhpcy5jbG9zZVRleHR9YDtcbiAgICAgICAgdGhpcy5jbGVhckJ0bi50ZXh0Q29udGVudCA9IGAke3RoaXMuY2xlYXJBbGxUZXh0fWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVUcmFuc2xhdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IFNFTEVDVF9BTExfS0VZID0gJ2VjbC5tdWx0aXNlbGVjdC5TRUxFQ1QtQUxMJztcbiAgICAgICAgY29uc3QgTk9fUkVTVUxUU19GT1VORF9LRVkgPSAnZWNsLm11bHRpc2VsZWN0Lk5PLVJFU1VMVFMtRk9VTkQnO1xuICAgICAgICBjb25zdCBDTE9TRV9LRVkgPSAnZWNsLmNvbW1vbi5DTE9TRSc7XG4gICAgICAgIGNvbnN0IENMRUFSX0FMTF9LRVkgPSAnZWNsLm11bHRpc2VsZWN0LkNMRUFSLUFMTCc7XG4gICAgICAgIGNvbnN0IFNFQVJDSF9LRVkgPSAnZWNsLmNvbW1vbi5TRUFSQ0gnO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZVxuICAgICAgICAgICAgLnN0cmVhbShbU0VMRUNUX0FMTF9LRVksIE5PX1JFU1VMVFNfRk9VTkRfS0VZLCBDTE9TRV9LRVksIENMRUFSX0FMTF9LRVksIFNFQVJDSF9LRVldKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodHJhbnNsYXRpb246IEpTT04pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vUmVzdWx0c0ZvdW5kVGV4dCA9IHRyYW5zbGF0aW9uW05PX1JFU1VMVFNfRk9VTkRfS0VZXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlVGV4dCA9IHRyYW5zbGF0aW9uW0NMT1NFX0tFWV07XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckFsbFRleHQgPSB0cmFuc2xhdGlvbltDTEVBUl9BTExfS0VZXTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvbnNMYWJlbFRleHQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RBbGxMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEFsbExhYmVsVGV4dCA9IHRyYW5zbGF0aW9uW1NFTEVDVF9BTExfS0VZXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RBbGxMYWJlbFRleHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubXVsdGlTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlYXJjaC5wbGFjZWhvbGRlciA9IHRyYW5zbGF0aW9uW1NFQVJDSF9LRVldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm11bHRpRHJvcGRvd24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5NdWx0aXNlbGVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tdWx0aURyb3Bkb3duLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9uSW5kZXhCeUlkRnJvbUFjdGl2ZU9wdGlvbnMoaWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKS5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uLmZpcnN0RWxlbWVudENoaWxkLmlkID09PSBpZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGlja09uTWFpbklucHV0KGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy50b2dnbGVEcm9wZG93bigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubXVsdGlEcm9wZG93bi5zdHlsZS5kaXNwbGF5ID0gdGhpcy5tdWx0aURyb3Bkb3duLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJyA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duT25NYWluSW5wdXQoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVOVEVSOiB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfRE9XTjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25NYWluSW5wdXRBcnJvd0Rvd24oZXZ0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25NYWluSW5wdXRBcnJvd0Rvd24oZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9wZW5NdWx0aXNlbGVjdCgpO1xuICAgICAgICB0aGlzLnNlYXJjaEVsLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVLZXlkb3duT25TZWFyY2goZXZ0KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVOVEVSOiB7XG4gICAgICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuVEFCOlxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkFSUk9XX0RPV046IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoQXJyb3dEb3duT3JUYWIoKTtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19VUDoge1xuICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2hBcnJvd1VwKGV2dCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuRVNDQVBFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZU11bHRpc2VsZWN0RHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWFyY2hBcnJvd0Rvd25PclRhYigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0QWN0aXZlT3B0aW9ucygpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RPcHRpb24gPSBjdXJyZW50T3B0aW9uc1swXS5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGZpcnN0T3B0aW9uLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VhcmNoQXJyb3dVcChldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xpY2tPblNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMub25TZWxlY3RBbGwoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUtleWRvd25PblNlbGVjdEFsbChldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHN3aXRjaCAoZXZ0LmtleSkge1xuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLlRBQjpcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19ET1dOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdEFsbEFycm93RG93bk9yVGFiKGV2dCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleUNvZGUuQVJST1dfVVA6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0QWxsQXJyb3dVcCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVOVEVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5jbGljaygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVTQ0FQRToge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VNdWx0aXNlbGVjdERyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VsZWN0QWxsQXJyb3dEb3duT3JUYWIoZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IHRoaXMuZ2V0QWN0aXZlT3B0aW9ucygpO1xuICAgICAgICBpZiAoY3VycmVudE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFNpYmxpbmdDaGVja2JveCA9IGN1cnJlbnRPcHRpb25zWzBdLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgbmV4dFNpYmxpbmdDaGVja2JveC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlbGVjdEFsbEFycm93VXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoRWwuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNsaWNrT25PcHRpb24oZXZ0OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlQ3VycmVudFZhbHVlKCk7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLmVjbENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlS2V5ZG93bk9uT3B0aW9uKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5BUlJPV19ET1dOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvbkFycm93RG93bihldnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkFSUk9XX1VQOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvbkFycm93VXAoZXZ0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5FU0NBUEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlTXVsdGlzZWxlY3REcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBLZXlDb2RlLkVOVEVSOiB7XG4gICAgICAgICAgICAgICAgKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5Q29kZS5UQUI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uVGFiKGV2dCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3B0aW9uQXJyb3dEb3duKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE9wdGlvbkluZGV4QnlJZEZyb21BY3RpdmVPcHRpb25zKChldnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmlkKTtcbiAgICAgICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLmdldEFjdGl2ZU9wdGlvbnMoKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSBjdXJyZW50T3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0U2libGluZ0NoZWNrYm94ID0gY3VycmVudE9wdGlvbnNbaW5kZXggKyAxXS5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIG5leHRTaWJsaW5nQ2hlY2tib3guZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJCdG4uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25PcHRpb25BcnJvd1VwKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE9wdGlvbkluZGV4QnlJZEZyb21BY3RpdmVPcHRpb25zKChldnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmlkKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2U2libGluZ0NoZWNrYm94ID0gdGhpcy5nZXRBY3RpdmVPcHRpb25zKClbaW5kZXggLSAxXS5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIHByZXZTaWJsaW5nQ2hlY2tib3guZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEVsLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrYm94U2VsZWN0QWxsLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3B0aW9uVGFiKGV2dDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0T3B0aW9uSW5kZXhCeUlkRnJvbUFjdGl2ZU9wdGlvbnMoKGV2dC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuaWQpO1xuICAgICAgICBpZiAoaW5kZXggPT09IHRoaXMuZ2V0QWN0aXZlT3B0aW9ucygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5mb2N1cygpOyAvLyBUcmFwIHRhYlxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFjdGl2ZU9wdGlvbnMoKTogSFRNTEVsZW1lbnRbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpU2VsZWN0T3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgJiYgIWl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdlY2wtY2hlY2tib3gtLWRpc2FibGVkJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUFsbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdElucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25Pbk1haW5JbnB1dCk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RJbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbk1haW5JbnB1dCk7XG4gICAgICAgIHRoaXMuc2VhcmNoRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VhcmNoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25TZWFyY2hPcHRpb25zKTtcbiAgICAgICAgdGhpcy5zZWFyY2hFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdzZWFyY2gnLCB0aGlzLmhhbmRsZVhCdG5PblNlYXJjaCk7XG4gICAgICAgIHRoaXMuY2hlY2tib3hTZWxlY3RBbGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VsZWN0QWxsKTtcbiAgICAgICAgdGhpcy5jaGVja2JveFNlbGVjdEFsbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPblNlbGVjdEFsbCk7XG4gICAgICAgIHRoaXMuY2xlYXJCdG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uQ2xlYXIpO1xuICAgICAgICB0aGlzLmNsZWFyQnRuLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGlja09uQ2xlYXIpO1xuICAgICAgICB0aGlzLmNsb3NlQnRuLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd25PbkNsb3NlKTtcbiAgICAgICAgdGhpcy5jbG9zZUJ0bi5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbkNsb3NlKTtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNib3hFbCA9IGVsLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgICAgICBjaGVjYm94RWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bk9uT3B0aW9uKTtcbiAgICAgICAgICAgIGNoZWNib3hFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2tPbk9wdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZENhbGxiYWNrcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlkb3duT25NYWluSW5wdXQgPSB0aGlzLmhhbmRsZUtleWRvd25Pbk1haW5JbnB1dC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd25PblNlYXJjaCA9IHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VhcmNoLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub25TZWFyY2hPcHRpb25zID0gdGhpcy5vblNlYXJjaE9wdGlvbnMuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVYQnRuT25TZWFyY2ggPSB0aGlzLmhhbmRsZVhCdG5PblNlYXJjaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd25PblNlbGVjdEFsbCA9IHRoaXMuaGFuZGxlS2V5ZG93bk9uU2VsZWN0QWxsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlS2V5ZG93bk9uT3B0aW9uID0gdGhpcy5oYW5kbGVLZXlkb3duT25PcHRpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGlja09uTWFpbklucHV0ID0gdGhpcy5oYW5kbGVDbGlja09uTWFpbklucHV0LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPblNlbGVjdEFsbCA9IHRoaXMuaGFuZGxlQ2xpY2tPblNlbGVjdEFsbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrT25PcHRpb24gPSB0aGlzLmhhbmRsZUNsaWNrT25PcHRpb24uYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDbGlja09uQ2xlYXIgPSB0aGlzLmhhbmRsZUNsaWNrT25DbGVhci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd25PbkNsZWFyID0gdGhpcy5oYW5kbGVLZXlkb3duT25DbGVhci5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWRvd25PbkNsb3NlID0gdGhpcy5oYW5kbGVLZXlkb3duT25DbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrT25DbG9zZSA9IHRoaXMuaGFuZGxlQ2xpY2tPbkNsb3NlLmJpbmQodGhpcyk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19