simpo-component-library 3.6.999 → 3.7.3

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 (267) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/components/delete-hover-element/delete-hover-element.component.mjs +3 -3
  3. package/esm2022/lib/components/deprecated-section/deprecated-section.component.mjs +1 -1
  4. package/esm2022/lib/components/document/document.component.mjs +3 -3
  5. package/esm2022/lib/components/image-loading/image-loading.component.mjs +3 -3
  6. package/esm2022/lib/components/payment-details/payment-details.component.mjs +3 -3
  7. package/esm2022/lib/constants/business.constant.mjs +1 -1
  8. package/esm2022/lib/directive/alignment.directive.mjs +1 -1
  9. package/esm2022/lib/directive/blur-content.directive.mjs +1 -1
  10. package/esm2022/lib/directive/borderlessImage.directive.mjs +1 -1
  11. package/esm2022/lib/directive/button-directive.directive.mjs +1 -1
  12. package/esm2022/lib/directive/button-editor.directive.mjs +1 -1
  13. package/esm2022/lib/directive/color.directive.mjs +1 -1
  14. package/esm2022/lib/directive/column-directive.directive.mjs +1 -1
  15. package/esm2022/lib/directive/container-alignment.directive.mjs +1 -1
  16. package/esm2022/lib/directive/container-fir.directive.mjs +1 -1
  17. package/esm2022/lib/directive/content-title-spacing.directive.mjs +1 -1
  18. package/esm2022/lib/directive/contenteditable.directive.mjs +1 -1
  19. package/esm2022/lib/directive/corner-directive.mjs +1 -1
  20. package/esm2022/lib/directive/height.directive.mjs +1 -1
  21. package/esm2022/lib/directive/hover-animation.directive.mjs +1 -1
  22. package/esm2022/lib/directive/hoverborder.directive.mjs +1 -1
  23. package/esm2022/lib/directive/icon-directive.directive.mjs +1 -1
  24. package/esm2022/lib/directive/image-container.directive.mjs +1 -1
  25. package/esm2022/lib/directive/image-directive.directive.mjs +1 -1
  26. package/esm2022/lib/directive/image-editor.directive.mjs +1 -1
  27. package/esm2022/lib/directive/image-position.directive.mjs +1 -1
  28. package/esm2022/lib/directive/letters-only.directive.mjs +1 -1
  29. package/esm2022/lib/directive/merge-header.directive.mjs +1 -1
  30. package/esm2022/lib/directive/numbers-only.directive.mjs +1 -1
  31. package/esm2022/lib/directive/position-layout-directive.directive.mjs +1 -1
  32. package/esm2022/lib/directive/set-dynamic-background.directive.mjs +1 -1
  33. package/esm2022/lib/directive/spacing-around.directive.mjs +1 -1
  34. package/esm2022/lib/directive/spacing-horizontal.directive.mjs +1 -1
  35. package/esm2022/lib/directive/spacing.directive.mjs +1 -1
  36. package/esm2022/lib/directive/text-background-directive.directive.mjs +1 -1
  37. package/esm2022/lib/directive/text-size.directive.mjs +1 -1
  38. package/esm2022/lib/directive/translate-onhover.directive.mjs +1 -1
  39. package/esm2022/lib/directive/video-directive.directive.mjs +1 -1
  40. package/esm2022/lib/directive/wrap-containers.directive.mjs +1 -1
  41. package/esm2022/lib/ecommerce/sections/address/address.component.mjs +3 -3
  42. package/esm2022/lib/ecommerce/sections/authenticate-user/authenticate-user.component.mjs +3 -3
  43. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.component.mjs +3 -3
  44. package/esm2022/lib/ecommerce/sections/authentication-required/authentication-required.model.mjs +1 -1
  45. package/esm2022/lib/ecommerce/sections/book-appointment/book-appointment.component.mjs +3 -3
  46. package/esm2022/lib/ecommerce/sections/brands-with-image-background-columns/brands-with-image-background-columns.component.mjs +3 -3
  47. package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +3 -3
  48. package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
  49. package/esm2022/lib/ecommerce/sections/categories-with-image-background-columns/categories-with-image-background-columns.component.mjs +7 -5
  50. package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
  51. package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
  52. package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +3 -3
  53. package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
  54. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +3 -3
  55. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
  56. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.component.mjs +3 -3
  57. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.model.mjs +1 -1
  58. package/esm2022/lib/ecommerce/sections/featured-brand/featured-brand.component.mjs +3 -3
  59. package/esm2022/lib/ecommerce/sections/featured-brand/featured-brand.modal.mjs +1 -1
  60. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +5 -5
  61. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
  62. package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +5 -5
  63. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +3 -3
  64. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
  65. package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +3 -3
  66. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.component.mjs +5 -5
  67. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.modal.mjs +1 -1
  68. package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +3 -3
  69. package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +3 -3
  70. package/esm2022/lib/ecommerce/sections/passbook-transactions/passbook-transactions.component.mjs +3 -3
  71. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +3 -3
  72. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.model.mjs +1 -1
  73. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +19 -5
  74. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
  75. package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +268 -15
  76. package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
  77. package/esm2022/lib/ecommerce/sections/refer-earn/refer-earn.component.mjs +3 -3
  78. package/esm2022/lib/ecommerce/sections/refer-earn/refer-earn.modal.mjs +1 -1
  79. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.component.mjs +1 -1
  80. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.model.mjs +1 -1
  81. package/esm2022/lib/ecommerce/sections/scheme-details/scheme-details.component.mjs +3 -3
  82. package/esm2022/lib/ecommerce/sections/scheme-selection/scheme-selection.component.mjs +3 -3
  83. package/esm2022/lib/ecommerce/sections/schemes/schemes.component.mjs +3 -3
  84. package/esm2022/lib/ecommerce/sections/schemes/schemes.component.model.mjs +1 -1
  85. package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +3 -3
  86. package/esm2022/lib/ecommerce/sections/store-list/store-list.component.mjs +3 -3
  87. package/esm2022/lib/ecommerce/sections/store-list/store-list.modal.mjs +1 -1
  88. package/esm2022/lib/ecommerce/sections/store-page/store-page.component.mjs +3 -3
  89. package/esm2022/lib/ecommerce/sections/store-page/store-page.model.mjs +1 -1
  90. package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +3 -3
  91. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
  92. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +3 -3
  93. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
  94. package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +3 -3
  95. package/esm2022/lib/ecommerce/styles/BaseCollection.modal.mjs +1 -1
  96. package/esm2022/lib/ecommerce/styles/Brand.modal.mjs +1 -1
  97. package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +2 -1
  98. package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
  99. package/esm2022/lib/ecommerce/styles/PincodeLocation.model.mjs +1 -1
  100. package/esm2022/lib/ecommerce/styles/PincodeLocationInter.model.mjs +1 -1
  101. package/esm2022/lib/ecommerce/styles/cart.modal.mjs +1 -1
  102. package/esm2022/lib/ecommerce/styles/category.modal.mjs +2 -1
  103. package/esm2022/lib/ecommerce/styles/order.modal.mjs +1 -1
  104. package/esm2022/lib/ecommerce/styles/product.modal.mjs +11 -1
  105. package/esm2022/lib/ecommerce/styles/review.modal.mjs +1 -1
  106. package/esm2022/lib/ecommerce/styles/user.modal.mjs +1 -1
  107. package/esm2022/lib/elements/add-section/add-section.component.mjs +3 -3
  108. package/esm2022/lib/elements/address-list/address-list.component.mjs +3 -3
  109. package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
  110. package/esm2022/lib/elements/booking-cart-groups/booking-cart-groups.component.mjs +3 -3
  111. package/esm2022/lib/elements/button/button.component.mjs +3 -3
  112. package/esm2022/lib/elements/button/button.model.mjs +1 -1
  113. package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +3 -3
  114. package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
  115. package/esm2022/lib/elements/editor-service.service.mjs +1 -1
  116. package/esm2022/lib/elements/heading-element/heading-element.component.mjs +3 -3
  117. package/esm2022/lib/elements/index.mjs +1 -1
  118. package/esm2022/lib/elements/link-editor/link-editor.component.mjs +3 -3
  119. package/esm2022/lib/elements/list-home-appointment/list-home-appointment.component.mjs +3 -3
  120. package/esm2022/lib/elements/media-selector/media-selector.component.mjs +3 -3
  121. package/esm2022/lib/elements/my-bookings/my-bookings.component.mjs +13 -3
  122. package/esm2022/lib/elements/portfolio/portfolio.component.mjs +3 -3
  123. package/esm2022/lib/elements/pricing-s1/pricing-s1.component.mjs +3 -3
  124. package/esm2022/lib/elements/property/property.component.mjs +3 -3
  125. package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +3 -3
  126. package/esm2022/lib/elements/svg-divider/svg-divider.component.mjs +3 -3
  127. package/esm2022/lib/elements/text/text.component.mjs +3 -3
  128. package/esm2022/lib/elements/text-editor/text-editor.component.mjs +7 -7
  129. package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
  130. package/esm2022/lib/pipes/amount.pipe.mjs +1 -1
  131. package/esm2022/lib/pipes/gender.pipe.mjs +1 -1
  132. package/esm2022/lib/sections/BaseSection.mjs +1 -1
  133. package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +3 -3
  134. package/esm2022/lib/sections/appointment-form/appointment-booking/appointment-booking/appointment-booking.component.mjs +8 -5
  135. package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
  136. package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +3 -3
  137. package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
  138. package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +3 -3
  139. package/esm2022/lib/sections/blog-list/blog-list.component.mjs +3 -3
  140. package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
  141. package/esm2022/lib/sections/brand-story-section/brand-story-section.component.mjs +3 -3
  142. package/esm2022/lib/sections/brand-story-section/brand-story-section.modal.mjs +1 -1
  143. package/esm2022/lib/sections/button-grid-section/button-grid-section.component.mjs +3 -3
  144. package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +3 -3
  145. package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
  146. package/esm2022/lib/sections/condensed-and-gradient/condensed-and-gradient.component.mjs +3 -3
  147. package/esm2022/lib/sections/countdown-banner/countdown-banner.component.mjs +3 -3
  148. package/esm2022/lib/sections/countdown-banner/countdown-banner.component.model.mjs +1 -1
  149. package/esm2022/lib/sections/faq-columns-cards/faq-columns-cards.component.mjs +3 -3
  150. package/esm2022/lib/sections/faq-columns-cards/faq-columns-cards.modal.mjs +1 -1
  151. package/esm2022/lib/sections/faq-section/faq-section.component.mjs +3 -3
  152. package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
  153. package/esm2022/lib/sections/feature-experience-section/feature-experience-section.component.mjs +3 -3
  154. package/esm2022/lib/sections/feature-experience-section/feature-experience-section.modal.mjs +1 -1
  155. package/esm2022/lib/sections/features-section/features-section.component.mjs +3 -3
  156. package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
  157. package/esm2022/lib/sections/footer/footer.component.mjs +10 -7
  158. package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
  159. package/esm2022/lib/sections/four-features-centered-image/four-features-centered-image.component.mjs +3 -3
  160. package/esm2022/lib/sections/four-features-centered-image/four-features-centered-image.modal.mjs +1 -1
  161. package/esm2022/lib/sections/header-section/header-section.component.mjs +12 -7
  162. package/esm2022/lib/sections/header-section/header-section.model.mjs +1 -1
  163. package/esm2022/lib/sections/header-text/header-text.component.mjs +3 -3
  164. package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
  165. package/esm2022/lib/sections/image-background/image-background/image-background.component.mjs +3 -3
  166. package/esm2022/lib/sections/image-background/image-background/image-background.component.model.mjs +1 -1
  167. package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +3 -3
  168. package/esm2022/lib/sections/image-carousel-section/image-carousel.model.mjs +1 -1
  169. package/esm2022/lib/sections/image-grid-hotspot/image-grid-hotspot.component.mjs +3 -3
  170. package/esm2022/lib/sections/image-grid-hotspot/image-grid-hotspot.model.mjs +1 -1
  171. package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +3 -3
  172. package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
  173. package/esm2022/lib/sections/image-section/image-section.component.mjs +3 -3
  174. package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
  175. package/esm2022/lib/sections/location-section/location-section.component.mjs +3 -3
  176. package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
  177. package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +3 -3
  178. package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
  179. package/esm2022/lib/sections/moving-text/moving-text.component.mjs +3 -3
  180. package/esm2022/lib/sections/moving-text/moving-text.modal.mjs +1 -1
  181. package/esm2022/lib/sections/new-services/new-services.component.mjs +3 -3
  182. package/esm2022/lib/sections/new-services/new-services.model.mjs +1 -1
  183. package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +3 -3
  184. package/esm2022/lib/sections/new-testimonials/new-testimonials.model.mjs +1 -1
  185. package/esm2022/lib/sections/news-letter-component/news-letter-component.component.mjs +3 -3
  186. package/esm2022/lib/sections/news-letter-component/news-letter.modal.mjs +1 -1
  187. package/esm2022/lib/sections/overlapping-image/overlapping-image.component.mjs +3 -3
  188. package/esm2022/lib/sections/overlapping-image/overlapping-image.component.modal.mjs +1 -1
  189. package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +3 -3
  190. package/esm2022/lib/sections/pricing-section/pricing-section.modal.mjs +1 -1
  191. package/esm2022/lib/sections/process-modern/process-modern.component.mjs +3 -3
  192. package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
  193. package/esm2022/lib/sections/process-section/process-section.component.mjs +3 -3
  194. package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
  195. package/esm2022/lib/sections/product-info-section/product-info-section.component.mjs +3 -3
  196. package/esm2022/lib/sections/product-info-section/product-info-section.component.modal.mjs +1 -1
  197. package/esm2022/lib/sections/property-component/property-component.component.mjs +3 -3
  198. package/esm2022/lib/sections/property-component/property-component.modal.mjs +1 -1
  199. package/esm2022/lib/sections/property-list/property-list.component.mjs +3 -3
  200. package/esm2022/lib/sections/property-list/property-list.modal.mjs +1 -1
  201. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +3 -3
  202. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.model.mjs +1 -1
  203. package/esm2022/lib/sections/registration-form/registration-form.component.mjs +3 -3
  204. package/esm2022/lib/sections/registration-form/registrationForm.model.mjs +1 -1
  205. package/esm2022/lib/sections/scheme-detail/scheme-detail.component.mjs +3 -3
  206. package/esm2022/lib/sections/scheme-detail/scheme-detail.modal.mjs +1 -1
  207. package/esm2022/lib/sections/service-section/service-section.component.mjs +3 -3
  208. package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
  209. package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +3 -3
  210. package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +3 -3
  211. package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
  212. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +3 -3
  213. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
  214. package/esm2022/lib/sections/testimonial-masonry/testimonial-masonry.component.mjs +3 -3
  215. package/esm2022/lib/sections/testimonial-masonry/testimonial-masonry.model.mjs +1 -1
  216. package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +3 -3
  217. package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
  218. package/esm2022/lib/sections/testimonial-slider/testimonial-slider.component.mjs +3 -3
  219. package/esm2022/lib/sections/testimonial-slider/testimonial-slider.model.mjs +1 -1
  220. package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +3 -3
  221. package/esm2022/lib/sections/testimonial-video/testimonial-video.model.mjs +1 -1
  222. package/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
  223. package/esm2022/lib/sections/usp-video-section/usp-video-section.component.mjs +3 -3
  224. package/esm2022/lib/sections/usp-video-section/usp-video-section.model.mjs +1 -1
  225. package/esm2022/lib/sections/video-carousel-section/video-carousel-section.component.mjs +3 -3
  226. package/esm2022/lib/sections/video-carousel-section/video-carousel.model.mjs +1 -1
  227. package/esm2022/lib/sections/video-grid-section/video-grid-section.component.mjs +3 -3
  228. package/esm2022/lib/sections/video-grid-section/video-grid-section.model.mjs +1 -1
  229. package/esm2022/lib/sections/video-section/video-section.component.mjs +3 -3
  230. package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
  231. package/esm2022/lib/sections/video-showcase/video-showcase.component.mjs +3 -3
  232. package/esm2022/lib/sections/view-blog/view-blog.component.mjs +1 -1
  233. package/esm2022/lib/services/analytics.service.mjs +1 -1
  234. package/esm2022/lib/services/booking-product-cart.service.mjs +1 -1
  235. package/esm2022/lib/services/cart.service.mjs +1 -1
  236. package/esm2022/lib/services/endUser.service.mjs +1 -1
  237. package/esm2022/lib/services/image-upload-service.service.mjs +1 -1
  238. package/esm2022/lib/services/rest.service.mjs +38 -3
  239. package/esm2022/lib/services/sanitizeHtml.mjs +1 -1
  240. package/esm2022/lib/services/storage.service.mjs +1 -1
  241. package/esm2022/lib/styles/gradient-extension.mjs +1 -1
  242. package/esm2022/lib/styles/index.mjs +1 -1
  243. package/esm2022/lib/styles/style.model.mjs +1 -1
  244. package/esm2022/lib/styles/text-size.extension.mjs +1 -1
  245. package/esm2022/lib/styles/types.mjs +1 -1
  246. package/esm2022/lib/tokens/api-token.mjs +1 -1
  247. package/esm2022/lib/utils/list-route.util.mjs +56 -0
  248. package/esm2022/public-api.mjs +1 -1
  249. package/fesm2022/simpo-component-library.mjs +637 -253
  250. package/fesm2022/simpo-component-library.mjs.map +1 -1
  251. package/lib/components/input-fields/input-fields.component.d.ts +1 -1
  252. package/lib/ecommerce/sections/authentication-required/authentication-required.component.d.ts +1 -1
  253. package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +5 -1
  254. package/lib/ecommerce/sections/product-list/product-list.component.d.ts +46 -1
  255. package/lib/ecommerce/sections/schemes/schemes.component.d.ts +1 -1
  256. package/lib/ecommerce/styles/Collection.modal.d.ts +1 -0
  257. package/lib/ecommerce/styles/category.modal.d.ts +1 -0
  258. package/lib/ecommerce/styles/product.modal.d.ts +42 -0
  259. package/lib/elements/my-bookings/my-bookings.component.d.ts +3 -0
  260. package/lib/sections/banner-carousel/banner-carousel.component.d.ts +1 -1
  261. package/lib/sections/footer/footer.component.d.ts +2 -2
  262. package/lib/sections/pricing-section/pricing-section.component.d.ts +1 -1
  263. package/lib/services/rest.service.d.ts +13 -2
  264. package/lib/utils/list-route.util.d.ts +21 -0
  265. package/package.json +1 -1
  266. package/simpo-component-library-3.7.003.tgz +0 -0
  267. package/simpo-component-library-3.6.999.tgz +0 -0
@@ -181,7 +181,32 @@ export class RestService {
181
181
  .get(this.BASE_URL + `ecommerce/inventory/${businessId}/brand`)
182
182
  .pipe(map((response) => (response.data ?? response)?.map((brand) => new Brand(brand))));
183
183
  }
184
- getFilteredProduct(collectionIds, categoryIds, searchText, minPrice, maxPrice, minRating, maxRating, sortBy, pageNo, size, brandIds = []) {
184
+ // PUT product/custom-field/query-options. Returns sorts + filter groups for the sidebar.
185
+ // Ids and slugs are arrays in the JSON body and are combined: a product in any listed category
186
+ // matches, and in any listed collection. When both lists are sent a product must match one of each.
187
+ // An unseeded business returns four sorts and `groups: []`; callers keep the legacy sidebar then.
188
+ getFilterOptions(scope = {}) {
189
+ const businessId = this.storage.getItem('bId') ?? this.storage.getItem('businessId') ?? '';
190
+ const body = {
191
+ businessId,
192
+ categoryIds: scope.categoryIds ?? [],
193
+ collectionIds: scope.collectionIds ?? [],
194
+ categorySlugNames: scope.categorySlugNames ?? [],
195
+ collectionSlugNames: scope.collectionSlugNames ?? [],
196
+ };
197
+ return this.http
198
+ .put(this.BASE_URL + 'ecommerce/product/custom-field/query-options', body)
199
+ .pipe(map((response) => {
200
+ // Wrapped as { data: {...} }; tolerate an unwrapped body too.
201
+ const body = response?.data ?? response ?? {};
202
+ return {
203
+ sorts: body.sorts ?? [],
204
+ groups: body.groups ?? [],
205
+ filters: body.filters ?? [],
206
+ };
207
+ }));
208
+ }
209
+ getFilteredProduct(collectionIds, categoryIds, searchText, minPrice, maxPrice, minRating, maxRating, sortBy, pageNo, size, brandIds = [], extra = {}) {
185
210
  this.getBusinessDetails();
186
211
  let payload = {
187
212
  businessId: this.storage.getItem('bId') ?? this.storage.getItem('businessId'),
@@ -204,6 +229,16 @@ export class RestService {
204
229
  payload['minRating'] = minRating;
205
230
  if (maxRating > 0)
206
231
  payload['maxRating'] = maxRating;
232
+ // Sent on jewellery listings too: the backend applies them there as well.
233
+ if (extra.customFieldFilters?.length)
234
+ payload['customFieldFilters'] = extra.customFieldFilters;
235
+ if (extra.sortDirection)
236
+ payload['sortDirection'] = extra.sortDirection;
237
+ // Slugs are combined (OR) with the id arrays and are accepted on jewellery search as well.
238
+ if (extra.categorySlugName?.length)
239
+ payload['categorySlugName'] = extra.categorySlugName;
240
+ if (extra.collectionSlugName?.length)
241
+ payload['collectionSlugName'] = extra.collectionSlugName;
207
242
  return this.http
208
243
  .put(this.BASE_URL +
209
244
  `ecommerce/product/itemV2/search?isJewellery=${this.isJewellery}`, payload)
@@ -518,7 +553,7 @@ export class RestService {
518
553
  return this.http.post(this.BASE_URL + `ecommerce/user/try-home`, request);
519
554
  }
520
555
  createEnrollmentScheme(enrollement) {
521
- return this.http.post(` https://stageapi-orra.letsmobility.com/enrollment/create/new/temp?manualPay=true&isWebRequest=true
556
+ return this.http.post(` https://stageapi-orra.letsmobility.com/enrollment/create/new/temp?manualPay=true&isWebRequest=true
522
557
  `, enrollement);
523
558
  }
524
559
  getHomeAppointmentList(userId) {
@@ -750,4 +785,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
750
785
  type: Inject,
751
786
  args: [APPOINTMENT_URL]
752
787
  }] }] });
753
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBS2pFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUVMLE9BQU8sR0FFUixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBTWhFLE1BQU0sT0FBTyxXQUFXO0lBV3RCLFlBQ21CLElBQWdCLEVBQ1IsUUFBZ0IsRUFDVixhQUFxQixFQUMxQixRQUFnQixFQUN6QixhQUE0QixFQUNkLE9BQW9CLEVBQ3JCLFlBQW9CLEVBQ2pCLGVBQXVCO0lBQ3hELGlFQUFpRTs7UUFSaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNSLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFl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QVc7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGtCQUFrQixNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7K0dBL21DVSxXQUFXLDRDQWFaLE9BQU8sYUFDUCxhQUFhLGFBQ2IsUUFBUSwwQ0FFUixhQUFhLGFBQ2IsWUFBWSxhQUNaLGVBQWU7bUhBbkJkLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBY0ksTUFBTTsyQkFBQyxPQUFPOzswQkFDZCxNQUFNOzJCQUFDLGFBQWE7OzBCQUNwQixNQUFNOzJCQUFDLFFBQVE7OzBCQUVmLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSwgU3Vic2NyaWJlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXZpZXcgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL3Jldmlldy5tb2RhbCc7XG5pbXBvcnQgeyBEZXZpY2VJbmZvLCBVc2VyIH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy91c2VyLm1vZGFsJztcbmltcG9ydCB7IFBpbkNvZGVMb2NhdGlvbkludGVyIH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9QaW5jb2RlTG9jYXRpb25JbnRlci5tb2RlbCc7XG5pbXBvcnQgeyBQaW5jb2RlTG9jYXRpb24gfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL1BpbmNvZGVMb2NhdGlvbi5tb2RlbCc7XG5pbXBvcnQge1xuICBBUElfVVJMLFxuICBDTUlTX1VSTCxcbiAgRUNPTU1FUkNFX1VSTCxcbiAgUEFTU0JPT0tfVVJMLFxuICBBUFBPSU5UTUVOVF9VUkwsXG59IGZyb20gJy4uL3Rva2Vucy9hcGktdG9rZW4nO1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL2NhdGVnb3J5Lm1vZGFsJztcbmltcG9ydCB7IEJsb2dDYXRlZ29yeSB9IGZyb20gJy4uL3NlY3Rpb25zL2Jsb2ctbGlzdC9ibG9nLWNhdGVnb3J5Lm1vZGVsJztcbmltcG9ydCB7XG4gIGNoZWNrSXRlbUFscmVhZHlBZGRlZCxcbiAgUHJvZHVjdCxcbiAgc3luY0l0ZW1Ub1NlcnZlckRCUmVxdWVzdCxcbn0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL0NvbGxlY3Rpb24ubW9kYWwnO1xuaW1wb3J0IHsgQnJhbmQgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL0JyYW5kLm1vZGFsJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xuaW1wb3J0IHsgTE9DQUxfU1RPUkFHRSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UudG9rZW4nO1xuaW1wb3J0IHsgU3RvcmFnZUxpa2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLWxpa2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVzdFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyBwcml2YXRlIEJBU0VfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWFwaS5zaW1wby5haS9cIjtcbiAgLy8gcHJpdmF0ZSBFQ09NTUVSQ0VfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWVjb21tZXJjZS5zaW1wby5haS9cIjtcbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL2FwaS1jbWlzLnRlanNvZnQuY29tL1wiOyAvL3Byb2R1Y3Rpb25cbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL2Rldi1hcGkuc2ltcG8uYWkvXCI7IC8vZGV2XG4gIC8vIHByaXZhdGUgQ01JU19VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9zdGFnZWFwaS1jbWlzLnRlanNvZnQuY29tL1wiOyAvL3N0YWdlXG4gIHByaXZhdGUgZW52aXJvbm1lbnRUeXBlU3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGJ1c2luZXNzRGV0YWlsczogYW55O1xuICBzdWJJbmR1c3RyeU5hbWU6IGFueTtcbiAgaXNKZXdlbGxlcnk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdChBUElfVVJMKSBwcml2YXRlIEJBU0VfVVJMOiBzdHJpbmcsXG4gICAgQEluamVjdChFQ09NTUVSQ0VfVVJMKSBwcml2YXRlIEVDT01NRVJDRV9VUkw6IHN0cmluZyxcbiAgICBASW5qZWN0KENNSVNfVVJMKSBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxuICAgIEBJbmplY3QoTE9DQUxfU1RPUkFHRSkgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlTGlrZSxcbiAgICBASW5qZWN0KFBBU1NCT09LX1VSTCkgcHJpdmF0ZSBQQVNTQk9PS19VUkw6IHN0cmluZyxcbiAgICBASW5qZWN0KEFQUE9JTlRNRU5UX1VSTCkgcHJpdmF0ZSBBUFBPSU5UTUVOVF9VUkw6IHN0cmluZ1xuICAgIC8vIEBJbmplY3QoUkVDT01NRU5EQVRJT05fVVJMKSBwcml2YXRlIFJFQ09NTUVOREFUSU9OX1VSTDogc3RyaW5nXG4gICkgeyB9XG4gIG9ycmFCYXNlVXJsOiBzdHJpbmcgPSAnaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vJztcbiAgLy8gcGFzc0Jvb2tVcmw6IHN0cmluZyA9IFwiaHR0cHM6Ly9wcm9kLXBhc3Nib29rLnNpbXBvLmFpL1wiO1xuICBnZXRCdXNpbmVzc0RldGFpbHMoKSB7XG4gICAgdGhpcy5pc0pld2VsbGVyeSA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnaXNNYXRlcmlhbEJhc2VkUHJpY2luZycpID09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudFR5cGVTdWJzY3JpYmVyKVxuICAgICAgdGhpcy5lbnZpcm9ubWVudFR5cGVTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0RmVhdHVyZWRQcm9kdWN0KGNvbGxlY3Rpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgbGV0IHN1YkluZHVzdHJ5SWQ6IHN0cmluZyB8IG51bGwgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpO1xuICAgIGlmICghc3ViSW5kdXN0cnlJZCkgc3ViSW5kdXN0cnlJZCA9ICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvY29sbGVjdGlvbi9pZD9jb2xsZWN0aW9uSWQ9JHtjb2xsZWN0aW9uSWR9JmlzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIHJlc3BvbnNlLmRhdGE/Lm1hcCgocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuICBnZXRDYXRlZ29yaWVzQnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9pbnZlbnRvcnkvY2F0ZWdvcnkvY29sbGVjdGlvbklkP2NvbGxlY3Rpb25JZD0ke2NvbGxlY3Rpb25JZH1gXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIHJlc3BvbnNlLmRhdGE/Lm1hcCgoY2F0ZWdvcnk6IGFueSkgPT4gbmV3IENhdGVnb3J5KGNhdGVnb3J5KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuICAvLyBodHRwczovL25ld2Rldi1hcGkuc2ltcG8uYWkvXG4gIGdldEFsbENhdGVnb3JpZXNCeUJ1c2luZXNzSWQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9pbnZlbnRvcnkvZ2V0L2NhdGVnb3J5YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG4gIC8vIEdFVCBibG9nL2dldEFsbC9jYXRlZ29yaWVzL3tidXNpbmVzc0lkfSDigJQgYmFja2VuZCB0aHJvd3MgXCJObyBDYXRlZ29yaWVzIEZvdW5kXCIgd2hlbiBlbXB0eTtcbiAgLy8gY2FsbGVycyBzaG91bGQgdHJlYXQgdGhhdCBhcyBhbiBlbXB0eSBsaXN0LCBub3QgYW4gZXJyb3Igc3RhdGUuXG4gIGdldEJsb2dDYXRlZ29yaWVzKGJ1c2luZXNzSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9ibG9nL2dldEFsbC9jYXRlZ29yaWVzLyR7YnVzaW5lc3NJZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChcbiAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGE/Lm1hcCgoY2F0ZWdvcnk6IGFueSkgPT4gbmV3IEJsb2dDYXRlZ29yeShjYXRlZ29yeSkpID8/XG4gICAgICAgICAgICBbXVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIC8vIEdFVCBibG9nL3tidXNpbmVzc0lkfS9ibG9nLWxpc3Q/YnVzaW5lc3NJZD17YnVzaW5lc3NJZH0mY2F0ZWdvcnlJZD17Y2F0ZWdvcnlJZH1cbiAgLy8gTm90ZTogdGhlIHBhdGgge2J1c2luZXNzSWR9IHNlZ21lbnQgaXMgdW51c2VkIHNlcnZlci1zaWRlIHBlciB0aGUgQVBJIGRvYywgYnV0IG11c3Qgc3RpbGwgYmVcbiAgLy8gcG9wdWxhdGVkIGlkZW50aWNhbGx5IHRvIHRoZSBxdWVyeSBwYXJhbSDigJQgdGhpcyBpcyB0aGUgZG9jdW1lbnRlZCBVUkwgc2hhcGUsIG5vdCBhIHR5cG8uXG4gIGdldEJsb2dzQnlDYXRlZ29yeShidXNpbmVzc0lkOiBzdHJpbmcsIGNhdGVnb3J5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgYnVzaW5lc3MvYmxvZy8ke2J1c2luZXNzSWR9L2Jsb2ctbGlzdD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mY2F0ZWdvcnlJZD0ke2NhdGVnb3J5SWR9YFxuICAgICk7XG4gIH1cbiAgLy8gR0VUIGJ1c2luZXNzL2Jsb2cvcG9wdWxhcj9idXNpbmVzc0lkPSZzaXplPSZjYXRlZ29yeUlkPSZjYXRlZ29yeU5hbWU9XG4gIC8vIFJldHVybnMgeyBkYXRhOiBCbG9nW10gfSDigJQgYW4gZW1wdHkgYXJyYXkgaXMgYSB2YWxpZCBcIm5vIHBvcHVsYXIgcG9zdHMgeWV0XCIgcmVzdWx0LCBub3QgYW4gZXJyb3IuXG4gIGdldFBvcHVsYXJCbG9ncyhcbiAgICBidXNpbmVzc0lkOiBzdHJpbmcsXG4gICAgc2l6ZT86IG51bWJlcixcbiAgICBjYXRlZ29yeUlkPzogc3RyaW5nLFxuICAgIGNhdGVnb3J5TmFtZT86IHN0cmluZ1xuICApIHtcbiAgICBsZXQgdXJsID0gdGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9ibG9nL3BvcHVsYXI/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YDtcbiAgICBpZiAoc2l6ZSkgdXJsICs9IGAmc2l6ZT0ke3NpemV9YDtcbiAgICBpZiAoY2F0ZWdvcnlJZCkgdXJsICs9IGAmY2F0ZWdvcnlJZD0ke2NhdGVnb3J5SWR9YDtcbiAgICBlbHNlIGlmIChjYXRlZ29yeU5hbWUpIHVybCArPSBgJmNhdGVnb3J5TmFtZT0ke2NhdGVnb3J5TmFtZX1gO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCk7XG4gIH1cbiAgLy8gUFVUIGJ1c2luZXNzL2Jsb2cvdXBkYXRlL3tibG9nSWR9IOKAlCBpbmNyZW1lbnRzIHRvdGFsVmlzaXRzIGJ5IDEuIE5vIHJlcXVlc3QgYm9keSwgbm8gcXVlcnkgcGFyYW1zLlxuICAvLyBOT1QgdGhlIHNhbWUgYXMgdGhlIGZ1bGwtYmxvZy1lZGl0IFBVVCBidXNpbmVzcy9ibG9nL3VwZGF0ZSAobm8ge2Jsb2dJZH0gaW4gdGhhdCBwYXRoKSDigJQgbmV2ZXIgY29uZnVzZSB0aGUgdHdvLlxuICBpbmNyZW1lbnRCbG9nVmlzaXQoYmxvZ0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvJHtibG9nSWR9L3Zpc2l0LWNvdW50YCwgbnVsbCk7XG4gIH1cbiAgZ2V0UGFzc2Jvb2tPcmRlclN0YXR1cyhvcmRlcklkOiBhbnkpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBwYXNzYm9vay9tYW51YWwvcGF5bWVudC9zdGF0dXM/cGF5bWVudE9yZGVySWQ9JHtvcmRlcklkfWAsXG4gICAgICB7fSxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBnZXRQcm9kdWN0QnlTZWxlY3RlZENhdGVnb3J5KGNhdGVnb3J5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3Byb2R1Y3QvJHtjYXRlZ29yeUlkfWApO1xuICB9XG4gIGdldEFsbFNjaGVtZXModXNlcklkPzogYW55LCBzdG9yZUlkPzogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBleHQvY29ubmVjdC9zaW1wby91c2VyP3VzZXJJZD0ke3VzZXJJZH0mc3RvcmVJZD0ke3N0b3JlSWR9YFxuICAgICk7XG4gIH1cbiAgZ2V0QWxsUmVkZW1wdGlvblNjaGVtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLm9ycmFCYXNlVXJsICsgYHBhc3NCb29rL3JlZGVtcHRpb24vYW1vdW50L2NoZWNrP3VzZXJDb2RlPUNfMDAwMzEzODg1YFxuICAgICk7XG4gIH1cbiAgZ2V0QWxsUHJvZHVjdHMocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG4gIGdldFByb2R1Y3REZXRhaWxzKHByb2R1Y3RJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIHBhZ2VObzogMCxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgaXRlbUlkOiBwcm9kdWN0SWQsXG4gICAgICBzdWJJbmR1c3RyeUlkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpLFxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgncGVySWQnKSA/PyBudWxsLFxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgICAgcGF5bG9hZFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmRhdGEubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0UHJvZHVjdERldGFpbHNWMihzbHVnTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIHBhZ2VObzogMCxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgc2x1Z2lmaWVkTmFtZTogc2x1Z05hbWUsXG4gICAgICBzdWJJbmR1c3RyeUlkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpLFxuICAgICAgYnVzaW5lc3NJZDpcbiAgICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW1WMi9zZWFyY2g/aXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWAsXG4gICAgICAgIHBheWxvYWRcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5kYXRhLm1hcCgocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldENvbGxlY3Rpb25CeUlkcyhjb2xsZWN0aW9uSWRzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBpZHM6IGNvbGxlY3Rpb25JZHMsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9jb2xsZWN0aW9uL2xpc3QvYWxsYCwgcGF5bG9hZClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjb2xsZWN0aW9uOiBhbnkpID0+IG5ldyBDb2xsZWN0aW9uKGNvbGxlY3Rpb24pKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0QWxsQ2F0ZWdvcmllcygpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgY29uc3Qgc3ViSW5kdXN0cnlJZDogc3RyaW5nID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJykgPz9cbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJykgPz9cbiAgICAgICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL2ludmVudG9yeS9mZWF0dXJlZD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc3ViSWQ9JHtzdWJJbmR1c3RyeUlkfWBcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjYXRlZ29yeTogYW55KSA9PiBuZXcgQ2F0ZWdvcnkoY2F0ZWdvcnkpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIGdldEFsbENvbGxlY3Rpb25zKCkge1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIHBhZ2VObzogMCxcbiAgICAgIHBhZ2VTaXplOiAxMDAsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQodGhpcy5CQVNFX1VSTCArICdlY29tbWVyY2UvaW52ZW50b3J5L2dldC9jb2xsZWN0aW9uJywgcGF5bG9hZClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoXG4gICAgICAgICAgICAoY29sbGVjdGlvbjogYW55KSA9PiBuZXcgQ29sbGVjdGlvbihjb2xsZWN0aW9uKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldEFsbEJyYW5kcygpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9pbnZlbnRvcnkvJHtidXNpbmVzc0lkfS9icmFuZGApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIChyZXNwb25zZS5kYXRhID8/IHJlc3BvbnNlKT8ubWFwKChicmFuZDogYW55KSA9PiBuZXcgQnJhbmQoYnJhbmQpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRQcm9kdWN0KFxuICAgIGNvbGxlY3Rpb25JZHM6IHN0cmluZ1tdLFxuICAgIGNhdGVnb3J5SWRzOiBzdHJpbmdbXSxcbiAgICBzZWFyY2hUZXh0OiBzdHJpbmcsXG4gICAgbWluUHJpY2U6IG51bWJlcixcbiAgICBtYXhQcmljZTogbnVtYmVyLFxuICAgIG1pblJhdGluZzogbnVtYmVyLFxuICAgIG1heFJhdGluZzogbnVtYmVyLFxuICAgIHNvcnRCeTogc3RyaW5nLFxuICAgIHBhZ2VObzogbnVtYmVyLFxuICAgIHNpemU6IG51bWJlcixcbiAgICBicmFuZElkczogc3RyaW5nW10gPSBbXVxuICApIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBjb2xsZWN0aW9uSWQ6IGNvbGxlY3Rpb25JZHMsXG4gICAgICBjYXRlZ29yeUlkOiBjYXRlZ29yeUlkcyxcbiAgICAgIGJyYW5kSWQ6IGJyYW5kSWRzLFxuICAgICAgc2VhcmNoVGV4dDogc2VhcmNoVGV4dCxcbiAgICAgIHNvcnRCeTogc29ydEJ5LFxuICAgICAgcGFnZU5vOiBwYWdlTm8sXG4gICAgICBwYWdlU2l6ZTogc2l6ZSxcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICB9O1xuICAgIGlmIChtaW5QcmljZSA+IDApIHBheWxvYWRbJ21pblByaWNlJ10gPSBtaW5QcmljZTtcbiAgICBpZiAobWF4UHJpY2UgPiAwKSBwYXlsb2FkWydtYXhQcmljZSddID0gbWF4UHJpY2U7XG4gICAgaWYgKG1pblJhdGluZyA+IDApIHBheWxvYWRbJ21pblJhdGluZyddID0gbWluUmF0aW5nO1xuICAgIGlmIChtYXhSYXRpbmcgPiAwKSBwYXlsb2FkWydtYXhSYXRpbmcnXSA9IG1heFJhdGluZztcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW1WMi9zZWFyY2g/aXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWAsXG4gICAgICAgIHBheWxvYWRcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY291bnQ6IHJlc3BvbnNlLmRhdGEuY291bnQsXG4gICAgICAgICAgICBtaW5QcmljZTogcmVzcG9uc2UuZGF0YS5taW5QcmljZSxcbiAgICAgICAgICAgIG1heFByaWNlOiByZXNwb25zZS5kYXRhLm1heFByaWNlLFxuICAgICAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoXG4gICAgICAgICAgICAgIChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG4gIGdldFByb2R1Y3RCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICAgIGNhdGVnb3J5SWQ6IFtjYXRlZ29yeUlkXSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBwYWdlTm86IDAsXG4gICAgICBwYWdlU2l6ZTogMTAsXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdW50OiByZXNwb25zZS5jb3VudCxcbiAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEuZGF0YT8ubWFwKFxuICAgICAgICAgICAgICAocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuICBnZXRQcm9kdWN0QnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgICAgY29sbGVjdGlvbklkOiBbY29sbGVjdGlvbklkXSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBwYWdlTm86IDAsXG4gICAgICBwYWdlU2l6ZTogMTAsXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdW50OiByZXNwb25zZS5jb3VudCxcbiAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEuZGF0YT8ubWFwKFxuICAgICAgICAgICAgICAocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGFkZFJldmlldyhwYXlsb2FkOiBSZXZpZXcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hZGQvcmV2aWV3YCwgcGF5bG9hZCk7XG4gIH1cbiAgZ2V0QWxsUmV2aWV3cyhwcm9kdWN0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9YCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgZ2VuZXJhdGVPVFAobW9iaWxlOiBzdHJpbmcsIGNvdW50cnlDb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3VzZXIvb3RwL3RyaWdnZXI/bW9iaWxlPSR7bW9iaWxlfSZjb3VudHJ5Q29kZT0ke2NvdW50cnlDb2RlfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgdmVyaWZ5T1RQKG1vYmlsZTogc3RyaW5nLCBvdHA6IHN0cmluZywgZGV2aWNlSW5mbzogRGV2aWNlSW5mbykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZT9tb2JpbGU9JHttb2JpbGV9Jm90cD0ke290cH0mYnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YCxcbiAgICAgIGRldmljZUluZm9cbiAgICApO1xuICB9XG4gIHJlc2VuZE9UUChtb2JpbGU6IHN0cmluZywgY291bnRyeUNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci9yZXNlbmQ/bW9iaWxlPSR7bW9iaWxlfSZjb3VudHJ5Q29kZT0ke2NvdW50cnlDb2RlfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgYXBwbGljYWJsZURpc2NvdW50TGlzdChjYXJ0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2Rpc2NvdW50LWNvdXBvbi8ke2NhcnRJZH0vYXBwbGljYWJpbGl0eS9saXN0YFxuICAgICk7XG4gIH1cblxuICBhZGRJdGVtVG9EQih1c2VyQ2FydDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnRgLCB1c2VyQ2FydCk7XG4gIH1cbiAgZ2V0VXNlckl0ZW1zKHVzZXJJZDogc3RyaW5nLCBjYXJ0VHlwZTogJ0NBUlQnIHwgJ1dJU0hMSVNUJyB8ICdUUklBTF9DQVJUJykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT0ke2NhcnRUeXBlfWBcbiAgICApO1xuICB9XG4gIGdldFVzZXJJbmZvKHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2dldC91c2VyP3VzZXJJZD0ke3VzZXJJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgYWRkVXNlckFkZHJlc3ModXNlcjogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHVzZXIpO1xuICB9XG4gIHVwZGF0ZVByb2ZpbGUocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHBheWxvYWQpO1xuICB9XG4gIGdldFVzZXJPcmRlcnMocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvdXNlci9vcmRlcmAsIHBheWxvYWQpO1xuICB9XG4gIGdldFVzZXJXaXNobGlzdCh1c2VySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydD91c2VySWQ9JHt1c2VySWR9JmNhcnRUeXBlPVdJU0hMSVNUYFxuICAgICk7XG4gIH1cbiAgbW92ZUl0ZW1Ub0NhcnQodXNlcklkOiBzdHJpbmcsIHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvdXBkYXRlL2NhcnQ/dXNlcklkPSR7dXNlcklkfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBheW1lbnRcbiAgY3JlYXRlUGF5bWVudFRva2VuKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkVDT01NRVJDRV9VUkwgKyBgcGF5bWVudC9vcmRlcmAsIHBheWxvYWQpO1xuICB9XG4gIGNoZWNrUGF5bWVudFN0YXR1cyhwYXlsb2FkOiBhbnkpIHtcbiAgICBsZXQgaXNKZXdlbGxlcnkgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2lzTWF0ZXJpYWxCYXNlZFByaWNpbmcnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgbGV0IHBheWxvYWRXaXRoSmV3ZWxsZXJ5ID0geyAuLi5wYXlsb2FkLCBpc0pld2VsbGVyeTogaXNKZXdlbGxlcnkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkVDT01NRVJDRV9VUkwgKyBgcGF5bWVudC9zdGF0dXNgLFxuICAgICAgcGF5bG9hZFdpdGhKZXdlbGxlcnlcbiAgICApO1xuICB9XG4gIGdldFJlY2VudFZpZXdQcm9kdWN0KHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9yZWNlbnRWaWV3P3VzZXJJZD0ke3VzZXJJZH1gLCBudWxsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBzZW5kU2lnbnVwT1RQKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvc2lnbnVwL290cC90cmlnZ2VyYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgdmVyaWZ5U2lnbnVwT1RQKHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICAvLyBwYXlsb2FkW1wiYnVzaW5lc3NJZFwiXSA9IGJ1c2luZXNzSWQ7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZS9zaWdudXBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBzaWduaW5QYXNzd29yZChwYXNzRGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZS9sb2dpbmAsXG4gICAgICBwYXNzRGF0YVxuICAgICk7XG4gIH1cblxuICBlbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHVzZXJJZDogYW55LCByZWZlcnJhbFVuaXF1ZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvYXBpL2VuZC11c2VyL3JlZmVycmFsRGV0YWlscz91c2VySWQ9JHt1c2VySWR9JnJlZmVycmFsVW5pcXVlSWQ9JHtyZWZlcnJhbFVuaXF1ZUlkfWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVBcHBvaW50bWVudChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvYWRkYCwgZGF0YSk7XG4gIH1cblxuICBnZXRBbGxMb2NhdGlvbihidXNpbmVzc0lkOiBhbnksIHNpemU6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL2xvY2F0aW9uP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9YFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxUaW1lU2xvdHMobG9jYXRpb25JZDogYW55LCBkYXRlOiBEYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3RpbWVzbG90cz9sb2NhdGlvbklkPSR7bG9jYXRpb25JZH0mZGF0ZT0ke2RhdGV9YFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxTZXJ2aWNlKGJ1c2luZXNzSWQ6IGFueSwgc2l6ZTogYW55LCBwYWdlOiBhbnksIGxvY2F0aW9uSWQ/OiBhbnkpIHtcbiAgICBpZiAoIWxvY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc2VydmljZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc2VydmljZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEFsbFN0YWZmQnlMb2NhdGlvbihcbiAgICBidXNpbmVzc0lkOiBhbnksXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBsb2NhdGlvbklkOiBzdHJpbmcsXG4gICAgc2VydmljZUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKCFzZXJ2aWNlSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc3RhZmY/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnNpemU9JHtzaXplfSZwYWdlPSR7cGFnZX0mbG9jYXRpb25JZD0ke2xvY2F0aW9uSWR9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zdGFmZj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH0mc2VydmljZUlkPSR7c2VydmljZUlkfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXZhaWxhYmxlU2xvdHMoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGNybS9hcHBvaW50bWVudC9jb25maWcvYXZhaWxhYmxlL3RpbWVzbG90c2AsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkTGlzdEZpZWxkcyhiSWQ6IGFueSwgc2hvd0luRXJwOiBhbnksIGZvcm1OYW1lOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQ01JU19VUkwgK1xuICAgICAgYGNybS9maWVsZHM/YnVzaW5lc3NJZD0ke2JJZH0mc3RhdHVzPXRydWUmc2hvd0luRm9ybT0ke3Nob3dJbkVycH0maXNQYWdpbmF0aW9uPWZhbHNlJmZpZWxkQ2F0ZWdvcnk9JHtmb3JtTmFtZX1gXG4gICAgKTtcbiAgfVxuXG4gIGdldEFjdGl2ZVN1YnNjcmlwdGlvbkZvckZlZVN0cnVjdHVyZShidXNpbmVzc0lkOiBhbnksIGdyYWRlSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArXG4gICAgICBgY3JtL3N1YnNjcmlwdGlvbi9wbGFuL2xpc3Q/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JmdyYWRlSWQ9JHtncmFkZUlkfSZzdGF0dXM9dHJ1ZSZpc0RlbGV0ZWQ9ZmFsc2VgXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUFkbWlzc2lvbihwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkNNSVNfVVJMICtcbiAgICAgIGBjcm0vcmVnaXN0cmF0aW9uL2FkbWlzc2lvbj9yZWdpc3RyYXRpb25JZD0ke3BheWxvYWQ/LnJlZ2lzdHJhdGlvbklkIHx8ICcnfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVBheW1lbnRMaW5rKGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9hZG1pc3Npb24vdjIvcGF5bWVudD9pc0Zyb21XZWI9dHJ1ZWAsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVJlZ2lzdHJhdGlvbkZvclBheW1lbnQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArIGBjcm0vcmVnaXN0cmF0aW9uL3JlZ2lzdHJhdGlvbi9wYXltZW50YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgZ2V0U3Vic2NyaXB0aW9uRm9yRmVlU3RydWN0dXJlKGdyYWRlSWQ6IGFueSkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkNNSVNfVVJMICtcbiAgICAgIGBjcm0vc3Vic2NyaXB0aW9uL3BsYW4vbGlzdD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mZ3JhZGVJZD0ke2dyYWRlSWR9YFxuICAgICk7XG4gIH1cblxuICBnZXRGZWVTdHJ1Y3R1cmUocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5DTUlTX1VSTCArIGBjcm0vZmVlL3N0cnVjdHVyZWAsIHBheWxvYWQpO1xuICB9XG5cbiAgbmV3RmVlU3RydWN0dXJlR2V0TGlzdChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkNNSVNfVVJMICsgYGNybS9mZWUvc3RydWN0dXJlL3YyL2ZpbHRlcmAsIGRhdGEpO1xuICB9XG5cbiAgZ2V0QWxsRG9jdW1lbnQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9tYXN0ZXIvZG9jdW1lbnRUeXBlL2ZpbHRlcmAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldExlYWRCeUlkKGxlYWRJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5DTUlTX1VSTCArIGBjcm0vbGVhZHMvZ2V0LW9uZT9sZWFkSWQ9JHtsZWFkSWR9YCk7XG4gIH1cblxuICBnZXRSZWdpc3RyYXRpb25MaXN0KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9nZXRBbGxgLCBwYXlsb2FkKTtcbiAgfVxuXG4gIGdldEFsbENvbXBvbmVudENhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBhZG1pbi9tYXN0ZXIvdGVtcGxhdGUvY2F0ZWdvcnkvYWxsYCk7XG4gIH1cblxuICBwcml2YXRlIHNhZmVQYXJzZTxUPihyYXc6IHN0cmluZyB8IG51bGwpOiBUIHwgbnVsbCB7XG4gICAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRUZW1wbGF0ZSgpIHtcbiAgICBjb25zdCBiRGV0YWlsc1JhdyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiRGV0YWlscycpO1xuICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLnNhZmVQYXJzZTx7IHRlbXBsYXRlSWQ/OiBzdHJpbmcgfT4oYkRldGFpbHNSYXcpO1xuXG4gICAgLy8gZmFsbGJhY2sgc291cmNlXG4gICAgY29uc3Qgd2Vic2l0ZURhdGFSYXcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZURhdGEnKTtcbiAgICBjb25zdCB3ZWJzaXRlRGF0YSA9IHRoaXMuc2FmZVBhcnNlPHsgaG9tZVBhZ2VJZD86IHN0cmluZyB9Pih3ZWJzaXRlRGF0YVJhdyk7XG5cbiAgICAvLyBwcmVmZXIgdGVtcGxhdGVJZCBmcm9tIGJEZXRhaWxzOyBlbHNlIGZhbGxiYWNrIHRvIHdlYnNpdGVEYXRhLmhvbWVQYWdlSWRcbiAgICBjb25zdCB0ZW1wbGF0ZUlkID0gKFxuICAgICAgZGV0YWlscz8udGVtcGxhdGVJZCA/P1xuICAgICAgd2Vic2l0ZURhdGE/LmhvbWVQYWdlSWQgPz9cbiAgICAgICcnXG4gICAgKS50b1N0cmluZygpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL3YzL3dlYnNpdGUvJHt0ZW1wbGF0ZUlkfS9wYWdlcy9saXN0YFxuICAgICk7XG4gIH1cblxuICBnZXRFY29tbWVyY2VDb25maWdzKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/P1xuICAgICAgJzFmMTA2NTFmLTkyNTgtNmI2My05ZDIzLWEzZDY5MWFjZWI4OCc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9lY29tbWVyY2UvY29uZmlnL2FsbD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RWaWRlb0NhbGxEZXRhaWxzKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvdmlkZW8tY2FsbGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0b3JlTG9jYXRvckRldGFpbHMocGluY29kZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2Uvc3RvcmUvbmVhcmJ5P3BpbmNvZGU9JHtwaW5jb2RlfSZidXNpbmVzc0lkPSR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX1gXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVJbWFnZXNUb0J1c2luZXNzTGlicmFyeShtZWRpYVJlcXVlc3Q6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vbGlicmFyeS9pbWFnZS9saWJyYXJ5L3NhdmVgLFxuICAgICAgbWVkaWFSZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIHJlZ2VuZXJhdGVUZXh0KHJlcXVlc3Q6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vY29udGVudC9zdWdnZXN0L3YyL3dlYnNpdGUvaW5kaXZpZHVhbGAsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuICBnZXRDYXRlZ29yaWVzSGVhZGVyRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9wcm9kdWN0LyR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX0vaGVhZGVyc2BcbiAgICApO1xuICB9XG4gIGdldEFsbFN0b3JlcyhwYXlsb2FkOiBhbnkpIHtcbiAgICBsZXQgdXJsID0gJyc7XG4gICAgaWYgKHBheWxvYWQ/LnBpbmNvZGUgJiYgcGF5bG9hZC5waW5jb2RlLnRvU3RyaW5nKCkubGVuZ3RoID09IDYpIHtcbiAgICAgIHVybCA9IHVybCArIGAgJnBpbmNvZGU9JHtwYXlsb2FkLnBpbmNvZGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2Uvc3RvcmUvZ2V0L3YyP2J1c2luZXNzSWQ9JHtwYXlsb2FkLmJ1c2luZXNzSWR9JHt1cmx9YCxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbEFwcG9pbnRtZW50U2VydmljZShwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdzZXJ2aWNlL2xpc3QnLCBwYXlsb2FkKTtcbiAgfVxuXG4gIGdldEFsbFN0YWZmKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgc3RhZmYvc3RhZmYvc3RvcmUtc3RhZmYtbGlzdD9zZXJ2aWNlSWQ9JHtwYXlsb2FkLnNlcnZpY2VJZH0mc3RvcmVJZD0ke3BheWxvYWQuc3RvcmVJZH0mYnVzaW5lc3NJZD0ke3BheWxvYWQuYnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0b3JlQnlJZChzdG9yZUlkOiBzdHJpbmcpIHtcbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgIHN0b3JlSWQ6IHN0b3JlSWQsXG4gICAgICBidXNpbmVzc0lkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnLFxuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEwMDAsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9zdG9yZS9nZXRgLCBwYXlsb2FkKTtcbiAgfVxuICBwb3N0TmV3c0xldHRlcihlbWFpbDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvcmVnaXN0ZXJlZC9uZXdzbGV0dGVyP2VtYWlsPSR7ZW1haWx9JmJ1c2luZXNzSWQ9JHt0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpfWAsXG4gICAgICAnJ1xuICAgICk7XG4gIH1cbiAgYWRkUmV2aWV3VG9Qcm9kdWN0KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYWRkL3Jldmlldz9vcmRlcklkPSR7cGF5bG9hZC5vcmRlcklkfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFN0b3Jlc09ycmEocGFnZU5vOiBhbnksIHNpemU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3N0b3JlP3BhZ2VObz0ke3BhZ2VOb30mc2l6ZT0ke3NpemV9YFxuICAgICk7XG4gIH1cblxuICBnZXRzdGFmZkJ5U3RvcmVJZChzdG9yZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdGFmZi9nZXQvJHtzdG9yZUlkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsU2NoZW1lKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3NjaGVtZS9nZXRBbGxTY2hlbWVzL2Rhc2hib2FyZGBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3N0YXRlL2dldEFsbGApO1xuICB9XG5cbiAgZ2V0Q2l0eUJ5U3RhdGVCeXBhZ2luYXRlZChzdGF0ZUlkOiBhbnksIHBhZ2VObzogYW55LCBzaXplOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9jaXR5L2dldEJ5U3RhdGU/c3RhdGVJZD0ke3N0YXRlSWR9JnBhZ2VObz0ke3BhZ2VOb30mc2l6ZT0ke3NpemV9YFxuICAgICk7XG4gIH1cblxuICBnZXRTdG9yZUJ5U2xhYihkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdG9yZS9nZXRTbGFiYCxcbiAgICAgIGRhdGFcbiAgICApO1xuICB9XG5cbiAgYWRkVHJpYWxJdGVtKHJlcXVlc3Q6IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L3YyYCwgcmVxdWVzdCk7XG4gIH1cblxuICBjaGVja0l0ZW1BbHJlYWR5QWRkZWQocmVxdWVzdDogY2hlY2tJdGVtQWxyZWFkeUFkZGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L2NoZWNrL2l0ZW1gLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICBkZWxldGVJdGVtRnJvbUNhcnQocmVxdWVzdDogc3luY0l0ZW1Ub1NlcnZlckRCUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9yZW1vdmVgLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICBib29rQXBwb2ludG1lbnQocmVxdWVzdDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvdHJ5LWhvbWVgLCByZXF1ZXN0KTtcbiAgfVxuXG4gIGNyZWF0ZUVucm9sbG1lbnRTY2hlbWUoZW5yb2xsZW1lbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIGAgIGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL2Vucm9sbG1lbnQvY3JlYXRlL25ldy90ZW1wP21hbnVhbFBheT10cnVlJmlzV2ViUmVxdWVzdD10cnVlXG5gLFxuICAgICAgZW5yb2xsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgZ2V0SG9tZUFwcG9pbnRtZW50TGlzdCh1c2VySWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci90cnktaG9tZT91c2VySWQ9JHt1c2VySWR9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsT3JyYVNjaGVtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgICdodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9wYXNzQm9vay9yZWRlbXB0aW9uL2Ftb3VudC9jaGVjaz91c2VyQ29kZT1DXzAwMDMxMzg4NSdcbiAgICApO1xuICB9XG5cbiAgcmVkZWVtU2NoZW1lKHNjaGVtZTogc3RyaW5nLCBjYXJ0SWQ6IGFueSwgYWN0aW9uOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2NhcnQvcmVkZW1wdGlvbj9jYXJ0SWQ9JHtjYXJ0SWR9JnJlbW92ZVNjaGVtZT0ke2FjdGlvbn1gLFxuICAgICAgc2NoZW1lXG4gICAgKTtcbiAgfVxuXG4gIGdldFJldmlld3NCeVByb2R1Y3RJZChwcm9kdWN0SWQ6IHN0cmluZywgcGFnZU51bWJlcjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9JnBhZ2VOdW1iZXI9JHtwYWdlTnVtYmVyfSZwYWdlU2l6ZT0zYCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBnZXRGaWVsZHNUb0Rpc3BsYXkoZmllbGRzTGlzdDogYW55W10pIHtcbiAgICBsZXQgbWFwOiBhbnkgPSB7fTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkc0xpc3QpIHtcbiAgICAgIGZvciAobGV0IGZpZWxkR3JvdXAgb2YgZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICBpZiAoIWZpZWxkR3JvdXAuZmllbGRTdGVwSWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCBzdGVwTmFtZSA9IGZpZWxkR3JvdXAuZmllbGRTdGVwTmFtZVxuICAgICAgICAgID8gZmllbGRHcm91cC5maWVsZFN0ZXBOYW1lXG4gICAgICAgICAgOiAndW5kZWZpbmVkJztcbiAgICAgICAgbGV0IGdyb3VwTmFtZSA9IGZpZWxkR3JvdXAuZmllbGRHcm91cE5hbWU7XG5cbiAgICAgICAgaWYgKCFtYXBbc3RlcE5hbWVdKSB7XG4gICAgICAgICAgbWFwW3N0ZXBOYW1lXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdKSB7XG4gICAgICAgICAgbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZmllbGRbJ2ZpZWxkU3RlcElkJ10gPSBmaWVsZEdyb3VwLmZpZWxkU3RlcElkO1xuICAgICAgICBmaWVsZFsnZmllbGRHcm91cElkJ10gPSBmaWVsZEdyb3VwLmZpZWxkR3JvdXBJZDtcblxuICAgICAgICBjb25zdCBuZXdGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcbiAgICAgICAgbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdLnB1c2gobmV3RmllbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBnZXRCb29raW5nU2xvdHMocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdib29raW5nL2F2YWlsYWJsZS1zbG90cycsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuICBnZXRCdXNpbmVzc0FwcG9pbnRtZW50U2V0dGluZ3MoYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBzZXJ2aWNlL3NldHRpbmdzLyR7YnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIHJlc29sdmVDYXJ0KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnYm9va2luZy9ncm91cC9yZXNvbHZlLWNhcnQnLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgaG9sZEJvb2tpbmcocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvZ3JvdXAvaG9sZCcsIHBheWxvYWQpO1xuICB9XG4gIGdldEJvb2tpbmdHcm91cChncm91cElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH1gKTtcbiAgfVxuICBnZW5lcmF0ZVBheW1lbnRUb2tlbihncm91cElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBwYXltZW50L3Rva2VuP2dyb3VwSWQ9JHtncm91cElkfWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgY29tcGxldGVCb29raW5nR3JvdXAoZ3JvdXBJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwL2NvbXBsZXRlLyR7Z3JvdXBJZH1gLFxuICAgICAge31cbiAgICApO1xuICB9XG4gIGdldE15Qm9va2luZ3MoYnVzaW5lc3NJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgK1xuICAgICAgYGJvb2tpbmcvZ3JvdXAvbXk/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnVzZXJJZD0ke3VzZXJJZH1gXG4gICAgKTtcbiAgfVxuICBnZXRHcm91cExpbmVzKGdyb3VwSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L2xpbmVzYFxuICAgICk7XG4gIH1cbiAgY2FuY2VsQm9va2luZ0dyb3VwKGdyb3VwSWQ6IHN0cmluZywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcXVlcnkgPSByZWFzb24gPyBgP3JlYXNvbj0ke2VuY29kZVVSSUNvbXBvbmVudChyZWFzb24pfWAgOiAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9jYW5jZWwke3F1ZXJ5fWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0Q2FuY2VsbGF0aW9uUG9saWN5KGJ1c2luZXNzSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgK1xuICAgICAgYHBvbGljeS1tYXN0ZXJzLyR7YnVzaW5lc3NJZH0/cG9saWN5VHlwZT1DQU5DRUxMQVRJT05gXG4gICAgKTtcbiAgfVxuICBnZXRSZXNjaGVkdWxlU2xvdHMoZ3JvdXBJZDogc3RyaW5nLCBkYXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9yZXNjaGVkdWxlLXNsb3RzYCxcbiAgICAgIHsgZGF0ZSB9XG4gICAgKTtcbiAgfVxuICByZXNjaGVkdWxlQm9va2luZyhncm91cElkOiBzdHJpbmcsIG5ld0RhdGU6IHN0cmluZywgbmV3U3RhcnRUaW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9yZXNjaGVkdWxlYCxcbiAgICAgIHsgbmV3RGF0ZSwgbmV3U3RhcnRUaW1lLCByZXNjaGVkdWxlZEJ5OiAnQ1VTVE9NRVInIH1cbiAgICApO1xuICB9XG4gIGdlbmVyYXRlVG9rZW4oYklkOiBhbnksIHVzZXJJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYGV4dC9jb25uZWN0L3NpbXBvL3Rva2VuP2J1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH0mdXNlclR5cGU9RVhURVJOQUxfVVNFUmAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0QWxsRW5yb2xsZWRTY2hlbWVzKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgKyAnZXh0L2Nvbm5lY3Qvc2ltcG8vc2NoZW1lL2xpc3QnLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgZW5yb2xsU2NoZW1lKHBheWxvYWQ6IGFueSwgY2hlY2tDaGFyZ2VzOiBib29sZWFuKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICB9KTtcbiAgICBpZiAoY2hlY2tDaGFyZ2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgJ3Bhc3Nib29rL2NhcnQvaW5pdGlhdGUvcGF5bWVudD9tYW51YWxQYXk9dHJ1ZScsXG4gICAgICAgIHBheWxvYWQsXG4gICAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgJ3Bhc3Nib29rL2luaXRpYXRlL3BheW1lbnQ/bWFudWFsUGF5PXRydWUnLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnM6IGhlYWRlcnMgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgZ2V0QmVuZWZpdFNsYWIocGFzc2Jvb2tJZD86IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYHBhc3Nib29rL2JlbmVmaXQvcGVyY2VudGFnZXM/cGFzc2Jvb2tJZD0ke3Bhc3Nib29rSWR9YCxcbiAgICAgIHt9LFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldEFsbFN0YWZmTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYHN0YWZmL3N0YWZmL2xpc3QvJHt0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpfT9pc1BhZ2luYXRpb249ZmFsc2VgXG4gICAgKTtcbiAgfVxuICByZXF1ZXN0UmVkZWVtcHRpb24ocGFzc2Jvb2tJZDogYW55KSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBwYXNzYm9vay9yZXF1ZXN0L3JlZGVtcHRpb24/cGFzc0Jvb2tJZD0ke3Bhc3Nib29rSWR9YCxcbiAgICAgIHt9LFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIFBhc3Nib29rQXBwU3RhdHVzKGJJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGFwcC9hcHAvY2hlY2stYXBwP2J1c2luZXNzSWQ9JHtiSWR9JmFwcE5hbWU9UGFzc2Jvb2tgXG4gICAgKTtcbiAgfVxuICBjaGVja0FwcEluc3RhbGxlZChiSWQ6IGFueSwgYXBwTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGFwcC9hcHAvY2hlY2stYXBwP2J1c2luZXNzSWQ9JHtiSWR9JmFwcE5hbWU9JHthcHBOYW1lfWBcbiAgICApO1xuICB9XG4gIGdldFJlZGVlbVBvaW50cyhcbiAgICBiSWQ6IGFueSxcbiAgICB1c2VySWQ6IGFueSxcbiAgICBldmV0VHlwZTogc3RyaW5nLFxuICAgIG9yZGVyVmFsdWU6IGFueSxcbiAgICByZXdhcmRQb2ludHM6IGJvb2xlYW5cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvYXBpL3JlZmVycmFscy9hdmFpbGFibGUtYW1vdW50P2J1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH0mZXZlbnRUeXBlPSR7ZXZldFR5cGV9Jm9yZGVyVmFsdWU9JHtvcmRlclZhbHVlfSZyZXdhcmRQb2ludHM9JHtyZXdhcmRQb2ludHN9YFxuICAgICk7XG4gIH1cbiAgcGF5bWVudFdpdGhDb21wbGV0ZVBvaW50cyhjYXJ0SWQ6IGFueSwgZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvb3JkZXIvcmV3YXJkcz9jYXJ0SWQ9JHtjYXJ0SWR9YCxcbiAgICAgIGRhdGFcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsUGFzc2Jvb2tEdWVzKGJJZDogYW55LCB1c2VySWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArXG4gICAgICBgcGFzc2Jvb2svcGF5bWVudC9kdWVzP3BhZ2U9MCZzaXplPTEwMDAmYnVzaW5lc3NJZD0ke2JJZH0mdXNlcklkPSR7dXNlcklkfWAsXG4gICAgICB7IGhlYWRlcnM6IGhlYWRlcnMgfVxuICAgICk7XG4gIH1cbiAgZ2V0VG9rZW4oKSB7XG4gICAgbGV0IHRva2VuID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldCgncGFzc0Jvb2tUb2tlbicpO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuICBnZXRBbGxUcmFuc2FjdGlvbnMocGF5bG9hZDogYW55KSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgYGRhc2hib2FyZC92My90cmFuc2FjdGlvbnMvcGFnZWAsXG4gICAgICBwYXlsb2FkLFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldFNjaGVtZURldGFpbHMoc2NoZW1lSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgYGV4dC9jb25uZWN0L3NpbXBvL2dldC9zY2hlbWU/aWQ9JHtzY2hlbWVJZH1gLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgZ2V0TWV0YWxQcmljZShzdG9yZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgYGV4dC9jb25uZWN0L3NpbXBvL21ldGFsL3ByaWNlcz9pZD0ke3N0b3JlSWR9YFxuICAgICk7XG4gIH1cblxuICBjcmVhdGVMZWFkKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2NvbnRhY3RgLCBwYXlsb2FkKTtcbiAgfVxuICBnZXRBcHBvaW50bWVudFBheW1lbnRTdGF0dXMob3JkZXJJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBwYXltZW50L3ZlcmlmeS9zdGF0dXM/b3JkZXJJZD0ke29yZGVySWR9YFxuICAgICk7XG4gIH1cbiAgZ2V0T3RwRm9yTG9naW4ocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2dlbmVyYXRlLW90cGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBOZXcgT1RQIEFQSTogUFVUIC9lY29tbWVyY2UvdXNlci9hdXRoL3NlbmQtb3RwXG4gICAqICBCb2R5OiB7IGlkZW50aWZpZXIsIGJ1c2luZXNzSWQgfVxuICAgKiAgUmVzcG9uc2U6IHsgZGF0YTogeyBpc0V4aXN0aW5nVXNlcjogYm9vbGVhbiwgbWVzc2FnZTogc3RyaW5nIH0gfVxuICAgKi9cbiAgc2VuZE90cFYyKGlkZW50aWZpZXI6IHN0cmluZywgYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoL3NlbmQtb3RwYCwge1xuICAgICAgaWRlbnRpZmllcixcbiAgICAgIGJ1c2luZXNzSWQsXG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlPdHBWMihwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC92ZXJpZnktb3RwYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgY29tcGxldGVTaWdudXBWMihwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC9jb21wbGV0ZS1zaWdudXBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBsb2dpbldpdGhQYXNzd29yZE5ldyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC9sb2dpbi1wYXNzd29yZGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGZsdXNoKGV2ZW50c1RvU2VuZDogYW55KSB7XG4gICAgdGhpcy5odHRwXG4gICAgICAucG9zdCh0aGlzLkJBU0VfVVJMICsgJ2Vjb21tZXJjZS9hbmFseXRpY3MvYmF0Y2gnLCBldmVudHNUb1NlbmQpXG4gICAgICAuc3Vic2NyaWJlKHsgZXJyb3I6ICgpID0+IHsgfSB9KTtcbiAgfVxuXG4gIGdldFBvcHVsYXJTZWFyY2hlcygpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/P1xuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/P1xuICAgICAgJzFmMTIxMDgxLWRiZWEtNjVjNi1hZDg5LTFkZmU4Y2RkYTkwMic7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvaW52ZW50b3J5L3BvcHVsYXItc2VhcmNoZXM/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YFxuICAgICk7XG4gIH1cblxuICBnZXRNZW51SXRlbXMobWVudUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9tZW51LyR7bWVudUlkfWApO1xuICB9XG5cbiAgLy8gZ2V0SG9tZVJlY29tbWVuZGF0aW9ucyhidXNpbmVzc0lkOiBhbnksIFVzZXJJZDogYW55KSB7XG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5SRUNPTU1FTkRBVElPTl9VUkwgKyBgYXBpL3YxL3JlY29tbWVuZGF0aW9ucy8ke1VzZXJJZH0vaG9tZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mcGFnZT0xJnBhZ2VTaXplPTIwYClcbiAgLy8gfVxuXG4gIC8vIGdldENhcnRSZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L2NhcnQ/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0xNWApXG4gIC8vIH1cblxuICAvLyBnZXRQcm9kdWN0RGVzY3JpcHRpb25SZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L3BkcD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mcGFnZT0xJnBhZ2VTaXplPTEwYClcbiAgLy8gfVxufVxuIl19
788
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBS2pFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUlMLE9BQU8sR0FFUixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBTWhFLE1BQU0sT0FBTyxXQUFXO0lBV3RCLFlBQ21CLElBQWdCLEVBQ1IsUUFBZ0IsRUFDVixhQUFxQixFQUMxQixRQUFnQixFQUN6QixhQUE0QixFQUNkLE9BQW9CLEVBQ3JCLFlBQW9CLEVBQ2pCLGVBQXVCO0lBQ3hELGlFQUFpRTs7UUFSaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNSLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFl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LEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sVUFBVSxHQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDbEMsc0NBQXNDLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsSUFBSSxDQUFDLFFBQVE7WUFDYixtREFBbUQsVUFBVSxFQUFFLENBQ2hFLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQVc7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGtCQUFrQixNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7K0dBOXBDVSxXQUFXLDRDQWFaLE9BQU8sYUFDUCxhQUFhLGFBQ2IsUUFBUSwwQ0FFUixhQUFhLGFBQ2IsWUFBWSxhQUNaLGVBQWU7bUhBbkJkLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBY0ksTUFBTTsyQkFBQyxPQUFPOzswQkFDZCxNQUFNOzJCQUFDLGFBQWE7OzBCQUNwQixNQUFNOzJCQUFDLFFBQVE7OzBCQUVmLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsWUFBWTs7MEJBQ25CLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIFN1YnNjcmliZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBSZXZpZXcgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL3Jldmlldy5tb2RhbCc7XHJcbmltcG9ydCB7IERldmljZUluZm8sIFVzZXIgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWwnO1xyXG5pbXBvcnQgeyBQaW5Db2RlTG9jYXRpb25JbnRlciB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvUGluY29kZUxvY2F0aW9uSW50ZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBQaW5jb2RlTG9jYXRpb24gfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL1BpbmNvZGVMb2NhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgQVBJX1VSTCxcclxuICBDTUlTX1VSTCxcclxuICBFQ09NTUVSQ0VfVVJMLFxyXG4gIFBBU1NCT09LX1VSTCxcclxuICBBUFBPSU5UTUVOVF9VUkwsXHJcbn0gZnJvbSAnLi4vdG9rZW5zL2FwaS10b2tlbic7XHJcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9jYXRlZ29yeS5tb2RhbCc7XHJcbmltcG9ydCB7IEJsb2dDYXRlZ29yeSB9IGZyb20gJy4uL3NlY3Rpb25zL2Jsb2ctbGlzdC9ibG9nLWNhdGVnb3J5Lm1vZGVsJztcclxuaW1wb3J0IHtcclxuICBjaGVja0l0ZW1BbHJlYWR5QWRkZWQsXHJcbiAgQ3VzdG9tRmllbGRGaWx0ZXIsXHJcbiAgRmlsdGVyT3B0aW9ucyxcclxuICBQcm9kdWN0LFxyXG4gIHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QsXHJcbn0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvbiB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvQ29sbGVjdGlvbi5tb2RhbCc7XHJcbmltcG9ydCB7IEJyYW5kIH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9CcmFuZC5tb2RhbCc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XHJcbmltcG9ydCB7IExPQ0FMX1NUT1JBR0UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnRva2VuJztcclxuaW1wb3J0IHsgU3RvcmFnZUxpa2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLWxpa2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3RTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAvLyBwcml2YXRlIEJBU0VfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWFwaS5zaW1wby5haS9cIjtcclxuICAvLyBwcml2YXRlIEVDT01NRVJDRV9VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9kZXYtZWNvbW1lcmNlLnNpbXBvLmFpL1wiO1xyXG4gIC8vIHByaXZhdGUgQ01JU19VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9hcGktY21pcy50ZWpzb2Z0LmNvbS9cIjsgLy9wcm9kdWN0aW9uXHJcbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL2Rldi1hcGkuc2ltcG8uYWkvXCI7IC8vZGV2XHJcbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL3N0YWdlYXBpLWNtaXMudGVqc29mdC5jb20vXCI7IC8vc3RhZ2VcclxuICBwcml2YXRlIGVudmlyb25tZW50VHlwZVN1YnNjcmliZXI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIGJ1c2luZXNzRGV0YWlsczogYW55O1xyXG4gIHN1YkluZHVzdHJ5TmFtZTogYW55O1xyXG4gIGlzSmV3ZWxsZXJ5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgQEluamVjdChBUElfVVJMKSBwcml2YXRlIEJBU0VfVVJMOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KEVDT01NRVJDRV9VUkwpIHByaXZhdGUgRUNPTU1FUkNFX1VSTDogc3RyaW5nLFxyXG4gICAgQEluamVjdChDTUlTX1VSTCkgcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxyXG4gICAgQEluamVjdChMT0NBTF9TVE9SQUdFKSBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2VMaWtlLFxyXG4gICAgQEluamVjdChQQVNTQk9PS19VUkwpIHByaXZhdGUgUEFTU0JPT0tfVVJMOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KEFQUE9JTlRNRU5UX1VSTCkgcHJpdmF0ZSBBUFBPSU5UTUVOVF9VUkw6IHN0cmluZ1xyXG4gICAgLy8gQEluamVjdChSRUNPTU1FTkRBVElPTl9VUkwpIHByaXZhdGUgUkVDT01NRU5EQVRJT05fVVJMOiBzdHJpbmdcclxuICApIHsgfVxyXG4gIG9ycmFCYXNlVXJsOiBzdHJpbmcgPSAnaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vJztcclxuICAvLyBwYXNzQm9va1VybDogc3RyaW5nID0gXCJodHRwczovL3Byb2QtcGFzc2Jvb2suc2ltcG8uYWkvXCI7XHJcbiAgZ2V0QnVzaW5lc3NEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5pc0pld2VsbGVyeSA9XHJcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdpc01hdGVyaWFsQmFzZWRQcmljaW5nJykgPT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVudmlyb25tZW50VHlwZVN1YnNjcmliZXIpXHJcbiAgICAgIHRoaXMuZW52aXJvbm1lbnRUeXBlU3Vic2NyaWJlcj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGdldEZlYXR1cmVkUHJvZHVjdChjb2xsZWN0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XHJcbiAgICBsZXQgc3ViSW5kdXN0cnlJZDogc3RyaW5nIHwgbnVsbCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyk7XHJcbiAgICBpZiAoIXN1YkluZHVzdHJ5SWQpIHN1YkluZHVzdHJ5SWQgPSAnJztcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldChcclxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvY29sbGVjdGlvbi9pZD9jb2xsZWN0aW9uSWQ9JHtjb2xsZWN0aW9uSWR9JmlzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxyXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICB9XHJcbiAgZ2V0Q2F0ZWdvcmllc0J5Q29sbGVjdGlvbklkKGNvbGxlY3Rpb25JZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQoXHJcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgICAgYGVjb21tZXJjZS9pbnZlbnRvcnkvY2F0ZWdvcnkvY29sbGVjdGlvbklkP2NvbGxlY3Rpb25JZD0ke2NvbGxlY3Rpb25JZH1gXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxyXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjYXRlZ29yeTogYW55KSA9PiBuZXcgQ2F0ZWdvcnkoY2F0ZWdvcnkpKVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICB9XHJcbiAgLy8gaHR0cHM6Ly9uZXdkZXYtYXBpLnNpbXBvLmFpL1xyXG4gIGdldEFsbENhdGVnb3JpZXNCeUJ1c2luZXNzSWQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvaW52ZW50b3J5L2dldC9jYXRlZ29yeWAsXHJcbiAgICAgIHBheWxvYWRcclxuICAgICk7XHJcbiAgfVxyXG4gIC8vIEdFVCBibG9nL2dldEFsbC9jYXRlZ29yaWVzL3tidXNpbmVzc0lkfSDigJQgYmFja2VuZCB0aHJvd3MgXCJObyBDYXRlZ29yaWVzIEZvdW5kXCIgd2hlbiBlbXB0eTtcclxuICAvLyBjYWxsZXJzIHNob3VsZCB0cmVhdCB0aGF0IGFzIGFuIGVtcHR5IGxpc3QsIG5vdCBhbiBlcnJvciBzdGF0ZS5cclxuICBnZXRCbG9nQ2F0ZWdvcmllcyhidXNpbmVzc0lkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvZ2V0QWxsL2NhdGVnb3JpZXMvJHtidXNpbmVzc0lkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcChcclxuICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PlxyXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IG5ldyBCbG9nQ2F0ZWdvcnkoY2F0ZWdvcnkpKSA/P1xyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICB9XHJcbiAgLy8gR0VUIGJsb2cve2J1c2luZXNzSWR9L2Jsb2ctbGlzdD9idXNpbmVzc0lkPXtidXNpbmVzc0lkfSZjYXRlZ29yeUlkPXtjYXRlZ29yeUlkfVxyXG4gIC8vIE5vdGU6IHRoZSBwYXRoIHtidXNpbmVzc0lkfSBzZWdtZW50IGlzIHVudXNlZCBzZXJ2ZXItc2lkZSBwZXIgdGhlIEFQSSBkb2MsIGJ1dCBtdXN0IHN0aWxsIGJlXHJcbiAgLy8gcG9wdWxhdGVkIGlkZW50aWNhbGx5IHRvIHRoZSBxdWVyeSBwYXJhbSDigJQgdGhpcyBpcyB0aGUgZG9jdW1lbnRlZCBVUkwgc2hhcGUsIG5vdCBhIHR5cG8uXHJcbiAgZ2V0QmxvZ3NCeUNhdGVnb3J5KGJ1c2luZXNzSWQ6IHN0cmluZywgY2F0ZWdvcnlJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBidXNpbmVzcy9ibG9nLyR7YnVzaW5lc3NJZH0vYmxvZy1saXN0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZjYXRlZ29yeUlkPSR7Y2F0ZWdvcnlJZH1gXHJcbiAgICApO1xyXG4gIH1cclxuICAvLyBHRVQgYnVzaW5lc3MvYmxvZy9wb3B1bGFyP2J1c2luZXNzSWQ9JnNpemU9JmNhdGVnb3J5SWQ9JmNhdGVnb3J5TmFtZT1cclxuICAvLyBSZXR1cm5zIHsgZGF0YTogQmxvZ1tdIH0g4oCUIGFuIGVtcHR5IGFycmF5IGlzIGEgdmFsaWQgXCJubyBwb3B1bGFyIHBvc3RzIHlldFwiIHJlc3VsdCwgbm90IGFuIGVycm9yLlxyXG4gIGdldFBvcHVsYXJCbG9ncyhcclxuICAgIGJ1c2luZXNzSWQ6IHN0cmluZyxcclxuICAgIHNpemU/OiBudW1iZXIsXHJcbiAgICBjYXRlZ29yeUlkPzogc3RyaW5nLFxyXG4gICAgY2F0ZWdvcnlOYW1lPzogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9ibG9nL3BvcHVsYXI/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YDtcclxuICAgIGlmIChzaXplKSB1cmwgKz0gYCZzaXplPSR7c2l6ZX1gO1xyXG4gICAgaWYgKGNhdGVnb3J5SWQpIHVybCArPSBgJmNhdGVnb3J5SWQ9JHtjYXRlZ29yeUlkfWA7XHJcbiAgICBlbHNlIGlmIChjYXRlZ29yeU5hbWUpIHVybCArPSBgJmNhdGVnb3J5TmFtZT0ke2NhdGVnb3J5TmFtZX1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKTtcclxuICB9XHJcbiAgLy8gUFVUIGJ1c2luZXNzL2Jsb2cvdXBkYXRlL3tibG9nSWR9IOKAlCBpbmNyZW1lbnRzIHRvdGFsVmlzaXRzIGJ5IDEuIE5vIHJlcXVlc3QgYm9keSwgbm8gcXVlcnkgcGFyYW1zLlxyXG4gIC8vIE5PVCB0aGUgc2FtZSBhcyB0aGUgZnVsbC1ibG9nLWVkaXQgUFVUIGJ1c2luZXNzL2Jsb2cvdXBkYXRlIChubyB7YmxvZ0lkfSBpbiB0aGF0IHBhdGgpIOKAlCBuZXZlciBjb25mdXNlIHRoZSB0d28uXHJcbiAgaW5jcmVtZW50QmxvZ1Zpc2l0KGJsb2dJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvJHtibG9nSWR9L3Zpc2l0LWNvdW50YCwgbnVsbCk7XHJcbiAgfVxyXG4gIGdldFBhc3Nib29rT3JkZXJTdGF0dXMob3JkZXJJZDogYW55KSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArXHJcbiAgICAgIGBwYXNzYm9vay9tYW51YWwvcGF5bWVudC9zdGF0dXM/cGF5bWVudE9yZGVySWQ9JHtvcmRlcklkfWAsXHJcbiAgICAgIHt9LFxyXG4gICAgICB7IGhlYWRlcnM6IGhlYWRlcnMgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0UHJvZHVjdEJ5U2VsZWN0ZWRDYXRlZ29yeShjYXRlZ29yeUlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3Byb2R1Y3QvJHtjYXRlZ29yeUlkfWApO1xyXG4gIH1cclxuICBnZXRBbGxTY2hlbWVzKHVzZXJJZD86IGFueSwgc3RvcmVJZD86IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xyXG4gICAgICBgZXh0L2Nvbm5lY3Qvc2ltcG8vdXNlcj91c2VySWQ9JHt1c2VySWR9JnN0b3JlSWQ9JHtzdG9yZUlkfWBcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldEFsbFJlZGVtcHRpb25TY2hlbWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMub3JyYUJhc2VVcmwgKyBgcGFzc0Jvb2svcmVkZW1wdGlvbi9hbW91bnQvY2hlY2s/dXNlckNvZGU9Q18wMDAzMTM4ODVgXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRBbGxQcm9kdWN0cyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxyXG4gICAgICBwYXlsb2FkXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRQcm9kdWN0RGV0YWlscyhwcm9kdWN0SWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBwYWdlTm86IDAsXHJcbiAgICAgIHBhZ2VTaXplOiAxLFxyXG4gICAgICBpdGVtSWQ6IHByb2R1Y3RJZCxcclxuICAgICAgc3ViSW5kdXN0cnlJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSxcclxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgncGVySWQnKSA/PyBudWxsLFxyXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucHV0KFxyXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xyXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcclxuICAgICAgICBwYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxyXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5kYXRhLm1hcCgocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9kdWN0RGV0YWlsc1YyKHNsdWdOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgcGFnZU5vOiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMSxcclxuICAgICAgc2x1Z2lmaWVkTmFtZTogc2x1Z05hbWUsXHJcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXHJcbiAgICAgIGJ1c2luZXNzSWQ6XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXHJcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcclxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnB1dChcclxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcclxuICAgICAgICBwYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxyXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5kYXRhLm1hcCgocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xsZWN0aW9uQnlJZHMoY29sbGVjdGlvbklkczogc3RyaW5nW10pIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGlkczogY29sbGVjdGlvbklkcyxcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvaW52ZW50b3J5L2NvbGxlY3Rpb24vbGlzdC9hbGxgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XHJcbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKGNvbGxlY3Rpb246IGFueSkgPT4gbmV3IENvbGxlY3Rpb24oY29sbGVjdGlvbikpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQ2F0ZWdvcmllcygpIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XHJcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnO1xyXG4gICAgY29uc3Qgc3ViSW5kdXN0cnlJZDogc3RyaW5nID1cclxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSA/P1xyXG4gICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpID8/XHJcbiAgICAgICcnO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KFxyXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xyXG4gICAgICAgIGBlY29tbWVyY2UvaW52ZW50b3J5L2ZlYXR1cmVkP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzdWJJZD0ke3N1YkluZHVzdHJ5SWR9YFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cclxuICAgICAgICAgIHJlc3BvbnNlLmRhdGE/Lm1hcCgoY2F0ZWdvcnk6IGFueSkgPT4gbmV3IENhdGVnb3J5KGNhdGVnb3J5KSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIGdldEFsbENvbGxlY3Rpb25zKCkge1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBwYWdlTm86IDAsXHJcbiAgICAgIHBhZ2VTaXplOiAxMDAsXHJcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcclxuICAgICAgYnVzaW5lc3NJZDpcclxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wdXQodGhpcy5CQVNFX1VSTCArICdlY29tbWVyY2UvaW52ZW50b3J5L2dldC9jb2xsZWN0aW9uJywgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxyXG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoXHJcbiAgICAgICAgICAgIChjb2xsZWN0aW9uOiBhbnkpID0+IG5ldyBDb2xsZWN0aW9uKGNvbGxlY3Rpb24pXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsQnJhbmRzKCkge1xyXG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID1cclxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvaW52ZW50b3J5LyR7YnVzaW5lc3NJZH0vYnJhbmRgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XHJcbiAgICAgICAgICAocmVzcG9uc2UuZGF0YSA/PyByZXNwb25zZSk/Lm1hcCgoYnJhbmQ6IGFueSkgPT4gbmV3IEJyYW5kKGJyYW5kKSlcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBQVVQgcHJvZHVjdC9jdXN0b20tZmllbGQvcXVlcnktb3B0aW9ucy4gUmV0dXJucyBzb3J0cyArIGZpbHRlciBncm91cHMgZm9yIHRoZSBzaWRlYmFyLlxyXG4gIC8vIElkcyBhbmQgc2x1Z3MgYXJlIGFycmF5cyBpbiB0aGUgSlNPTiBib2R5IGFuZCBhcmUgY29tYmluZWQ6IGEgcHJvZHVjdCBpbiBhbnkgbGlzdGVkIGNhdGVnb3J5XHJcbiAgLy8gbWF0Y2hlcywgYW5kIGluIGFueSBsaXN0ZWQgY29sbGVjdGlvbi4gV2hlbiBib3RoIGxpc3RzIGFyZSBzZW50IGEgcHJvZHVjdCBtdXN0IG1hdGNoIG9uZSBvZiBlYWNoLlxyXG4gIC8vIEFuIHVuc2VlZGVkIGJ1c2luZXNzIHJldHVybnMgZm91ciBzb3J0cyBhbmQgYGdyb3VwczogW11gOyBjYWxsZXJzIGtlZXAgdGhlIGxlZ2FjeSBzaWRlYmFyIHRoZW4uXHJcbiAgZ2V0RmlsdGVyT3B0aW9ucyhzY29wZToge1xyXG4gICAgY2F0ZWdvcnlJZHM/OiBzdHJpbmdbXTtcclxuICAgIGNvbGxlY3Rpb25JZHM/OiBzdHJpbmdbXTtcclxuICAgIGNhdGVnb3J5U2x1Z05hbWVzPzogc3RyaW5nW107XHJcbiAgICBjb2xsZWN0aW9uU2x1Z05hbWVzPzogc3RyaW5nW107XHJcbiAgfSA9IHt9KSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxyXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcclxuICAgIGNvbnN0IGJvZHkgPSB7XHJcbiAgICAgIGJ1c2luZXNzSWQsXHJcbiAgICAgIGNhdGVnb3J5SWRzOiBzY29wZS5jYXRlZ29yeUlkcyA/PyBbXSxcclxuICAgICAgY29sbGVjdGlvbklkczogc2NvcGUuY29sbGVjdGlvbklkcyA/PyBbXSxcclxuICAgICAgY2F0ZWdvcnlTbHVnTmFtZXM6IHNjb3BlLmNhdGVnb3J5U2x1Z05hbWVzID8/IFtdLFxyXG4gICAgICBjb2xsZWN0aW9uU2x1Z05hbWVzOiBzY29wZS5jb2xsZWN0aW9uU2x1Z05hbWVzID8/IFtdLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnB1dCh0aGlzLkJBU0VfVVJMICsgJ2Vjb21tZXJjZS9wcm9kdWN0L2N1c3RvbS1maWVsZC9xdWVyeS1vcHRpb25zJywgYm9keSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KTogRmlsdGVyT3B0aW9ucyA9PiB7XHJcbiAgICAgICAgICAvLyBXcmFwcGVkIGFzIHsgZGF0YTogey4uLn0gfTsgdG9sZXJhdGUgYW4gdW53cmFwcGVkIGJvZHkgdG9vLlxyXG4gICAgICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlPy5kYXRhID8/IHJlc3BvbnNlID8/IHt9O1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc29ydHM6IGJvZHkuc29ydHMgPz8gW10sXHJcbiAgICAgICAgICAgIGdyb3VwczogYm9keS5ncm91cHMgPz8gW10sXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IGJvZHkuZmlsdGVycyA/PyBbXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGdldEZpbHRlcmVkUHJvZHVjdChcclxuICAgIGNvbGxlY3Rpb25JZHM6IHN0cmluZ1tdLFxyXG4gICAgY2F0ZWdvcnlJZHM6IHN0cmluZ1tdLFxyXG4gICAgc2VhcmNoVGV4dDogc3RyaW5nLFxyXG4gICAgbWluUHJpY2U6IG51bWJlcixcclxuICAgIG1heFByaWNlOiBudW1iZXIsXHJcbiAgICBtaW5SYXRpbmc6IG51bWJlcixcclxuICAgIG1heFJhdGluZzogbnVtYmVyLFxyXG4gICAgc29ydEJ5OiBzdHJpbmcsXHJcbiAgICBwYWdlTm86IG51bWJlcixcclxuICAgIHNpemU6IG51bWJlcixcclxuICAgIGJyYW5kSWRzOiBzdHJpbmdbXSA9IFtdLFxyXG4gICAgZXh0cmE6IHtcclxuICAgICAgY3VzdG9tRmllbGRGaWx0ZXJzPzogQ3VzdG9tRmllbGRGaWx0ZXJbXTtcclxuICAgICAgc29ydERpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xyXG4gICAgICBjYXRlZ29yeVNsdWdOYW1lPzogc3RyaW5nW107XHJcbiAgICAgIGNvbGxlY3Rpb25TbHVnTmFtZT86IHN0cmluZ1tdO1xyXG4gICAgfSA9IHt9XHJcbiAgKSB7XHJcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xyXG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgYnVzaW5lc3NJZDpcclxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcclxuICAgICAgc3ViSW5kdXN0cnlJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSxcclxuICAgICAgY29sbGVjdGlvbklkOiBjb2xsZWN0aW9uSWRzLFxyXG4gICAgICBjYXRlZ29yeUlkOiBjYXRlZ29yeUlkcyxcclxuICAgICAgYnJhbmRJZDogYnJhbmRJZHMsXHJcbiAgICAgIHNlYXJjaFRleHQ6IHNlYXJjaFRleHQsXHJcbiAgICAgIHNvcnRCeTogc29ydEJ5LFxyXG4gICAgICBwYWdlTm86IHBhZ2VObyxcclxuICAgICAgcGFnZVNpemU6IHNpemUsXHJcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcclxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxyXG4gICAgfTtcclxuICAgIGlmIChtaW5QcmljZSA+IDApIHBheWxvYWRbJ21pblByaWNlJ10gPSBtaW5QcmljZTtcclxuICAgIGlmIChtYXhQcmljZSA+IDApIHBheWxvYWRbJ21heFByaWNlJ10gPSBtYXhQcmljZTtcclxuICAgIGlmIChtaW5SYXRpbmcgPiAwKSBwYXlsb2FkWydtaW5SYXRpbmcnXSA9IG1pblJhdGluZztcclxuICAgIGlmIChtYXhSYXRpbmcgPiAwKSBwYXlsb2FkWydtYXhSYXRpbmcnXSA9IG1heFJhdGluZztcclxuICAgIC8vIFNlbnQgb24gamV3ZWxsZXJ5IGxpc3RpbmdzIHRvbzogdGhlIGJhY2tlbmQgYXBwbGllcyB0aGVtIHRoZXJlIGFzIHdlbGwuXHJcbiAgICBpZiAoZXh0cmEuY3VzdG9tRmllbGRGaWx0ZXJzPy5sZW5ndGgpXHJcbiAgICAgIHBheWxvYWRbJ2N1c3RvbUZpZWxkRmlsdGVycyddID0gZXh0cmEuY3VzdG9tRmllbGRGaWx0ZXJzO1xyXG4gICAgaWYgKGV4dHJhLnNvcnREaXJlY3Rpb24pIHBheWxvYWRbJ3NvcnREaXJlY3Rpb24nXSA9IGV4dHJhLnNvcnREaXJlY3Rpb247XHJcbiAgICAvLyBTbHVncyBhcmUgY29tYmluZWQgKE9SKSB3aXRoIHRoZSBpZCBhcnJheXMgYW5kIGFyZSBhY2NlcHRlZCBvbiBqZXdlbGxlcnkgc2VhcmNoIGFzIHdlbGwuXHJcbiAgICBpZiAoZXh0cmEuY2F0ZWdvcnlTbHVnTmFtZT8ubGVuZ3RoKSBwYXlsb2FkWydjYXRlZ29yeVNsdWdOYW1lJ10gPSBleHRyYS5jYXRlZ29yeVNsdWdOYW1lO1xyXG4gICAgaWYgKGV4dHJhLmNvbGxlY3Rpb25TbHVnTmFtZT8ubGVuZ3RoKSBwYXlsb2FkWydjb2xsZWN0aW9uU2x1Z05hbWUnXSA9IGV4dHJhLmNvbGxlY3Rpb25TbHVnTmFtZTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnB1dChcclxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcclxuICAgICAgICBwYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb3VudDogcmVzcG9uc2UuZGF0YS5jb3VudCxcclxuICAgICAgICAgICAgbWluUHJpY2U6IHJlc3BvbnNlLmRhdGEubWluUHJpY2UsXHJcbiAgICAgICAgICAgIG1heFByaWNlOiByZXNwb25zZS5kYXRhLm1heFByaWNlLFxyXG4gICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcChcclxuICAgICAgICAgICAgICAocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICBnZXRQcm9kdWN0QnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgYnVzaW5lc3NJZDpcclxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcclxuICAgICAgY2F0ZWdvcnlJZDogW2NhdGVnb3J5SWRdLFxyXG4gICAgICBzdWJJbmR1c3RyeUlkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpLFxyXG4gICAgICBwYWdlTm86IDAsXHJcbiAgICAgIHBhZ2VTaXplOiAxMCxcclxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgncGVySWQnKSA/PyBudWxsLFxyXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucHV0KFxyXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xyXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcclxuICAgICAgICBwYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb3VudDogcmVzcG9uc2UuY291bnQsXHJcbiAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEuZGF0YT8ubWFwKFxyXG4gICAgICAgICAgICAgIChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIGdldFByb2R1Y3RCeUNvbGxlY3Rpb25JZChjb2xsZWN0aW9uSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgYnVzaW5lc3NJZDpcclxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcclxuICAgICAgY29sbGVjdGlvbklkOiBbY29sbGVjdGlvbklkXSxcclxuICAgICAgc3ViSW5kdXN0cnlJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSxcclxuICAgICAgcGFnZU5vOiAwLFxyXG4gICAgICBwYWdlU2l6ZTogMTAsXHJcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcclxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnB1dChcclxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbS9zZWFyY2g/aXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWAsXHJcbiAgICAgICAgcGF5bG9hZFxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY291bnQ6IHJlc3BvbnNlLmNvdW50LFxyXG4gICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcChcclxuICAgICAgICAgICAgICAocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgYWRkUmV2aWV3KHBheWxvYWQ6IFJldmlldykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYWRkL3Jldmlld2AsIHBheWxvYWQpO1xyXG4gIH1cclxuICBnZXRBbGxSZXZpZXdzKHByb2R1Y3RJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9YCxcclxuICAgICAgbnVsbFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlT1RQKG1vYmlsZTogc3RyaW5nLCBjb3VudHJ5Q29kZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxyXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBlY29tbWVyY2UvdXNlci9vdHAvdHJpZ2dlcj9tb2JpbGU9JHttb2JpbGV9JmNvdW50cnlDb2RlPSR7Y291bnRyeUNvZGV9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWAsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcbiAgfVxyXG4gIHZlcmlmeU9UUChtb2JpbGU6IHN0cmluZywgb3RwOiBzdHJpbmcsIGRldmljZUluZm86IERldmljZUluZm8pIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XHJcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xyXG4gICAgICBgZWNvbW1lcmNlL3VzZXIvYXV0aGVudGljYXRlP21vYmlsZT0ke21vYmlsZX0mb3RwPSR7b3RwfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLFxyXG4gICAgICBkZXZpY2VJbmZvXHJcbiAgICApO1xyXG4gIH1cclxuICByZXNlbmRPVFAobW9iaWxlOiBzdHJpbmcsIGNvdW50cnlDb2RlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XHJcbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgYGVjb21tZXJjZS91c2VyL3Jlc2VuZD9tb2JpbGU9JHttb2JpbGV9JmNvdW50cnlDb2RlPSR7Y291bnRyeUNvZGV9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWAsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcbiAgfVxyXG4gIGFwcGxpY2FibGVEaXNjb3VudExpc3QoY2FydElkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgYGVjb21tZXJjZS9vcmRlci9kaXNjb3VudC1jb3Vwb24vJHtjYXJ0SWR9L2FwcGxpY2FiaWxpdHkvbGlzdGBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhZGRJdGVtVG9EQih1c2VyQ2FydDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydGAsIHVzZXJDYXJ0KTtcclxuICB9XHJcbiAgZ2V0VXNlckl0ZW1zKHVzZXJJZDogc3RyaW5nLCBjYXJ0VHlwZTogJ0NBUlQnIHwgJ1dJU0hMSVNUJyB8ICdUUklBTF9DQVJUJykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xyXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT0ke2NhcnRUeXBlfWBcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldFVzZXJJbmZvKHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9nZXQvdXNlcj91c2VySWQ9JHt1c2VySWR9YCxcclxuICAgICAgbnVsbFxyXG4gICAgKTtcclxuICB9XHJcbiAgYWRkVXNlckFkZHJlc3ModXNlcjogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3VwZGF0ZS91c2VyYCwgdXNlcik7XHJcbiAgfVxyXG4gIHVwZGF0ZVByb2ZpbGUocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3VwZGF0ZS91c2VyYCwgcGF5bG9hZCk7XHJcbiAgfVxyXG4gIGdldFVzZXJPcmRlcnMocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci91c2VyL29yZGVyYCwgcGF5bG9hZCk7XHJcbiAgfVxyXG4gIGdldFVzZXJXaXNobGlzdCh1c2VySWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT1XSVNITElTVGBcclxuICAgICk7XHJcbiAgfVxyXG4gIG1vdmVJdGVtVG9DYXJ0KHVzZXJJZDogc3RyaW5nLCBwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci91cGRhdGUvY2FydD91c2VySWQ9JHt1c2VySWR9YCxcclxuICAgICAgcGF5bG9hZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIFBheW1lbnRcclxuICBjcmVhdGVQYXltZW50VG9rZW4ocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5FQ09NTUVSQ0VfVVJMICsgYHBheW1lbnQvb3JkZXJgLCBwYXlsb2FkKTtcclxuICB9XHJcbiAgY2hlY2tQYXltZW50U3RhdHVzKHBheWxvYWQ6IGFueSkge1xyXG4gICAgbGV0IGlzSmV3ZWxsZXJ5ID1cclxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2lzTWF0ZXJpYWxCYXNlZFByaWNpbmcnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBsZXQgcGF5bG9hZFdpdGhKZXdlbGxlcnkgPSB7IC4uLnBheWxvYWQsIGlzSmV3ZWxsZXJ5OiBpc0pld2VsbGVyeSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkVDT01NRVJDRV9VUkwgKyBgcGF5bWVudC9zdGF0dXNgLFxyXG4gICAgICBwYXlsb2FkV2l0aEpld2VsbGVyeVxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0UmVjZW50Vmlld1Byb2R1Y3QodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9yZWNlbnRWaWV3P3VzZXJJZD0ke3VzZXJJZH1gLCBudWxsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XHJcbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgc2VuZFNpZ251cE9UUChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9zaWdudXAvb3RwL3RyaWdnZXJgLFxyXG4gICAgICBwYXlsb2FkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZ5U2lnbnVwT1RQKHBheWxvYWQ6IGFueSkge1xyXG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID1cclxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XHJcbiAgICAvLyBwYXlsb2FkW1wiYnVzaW5lc3NJZFwiXSA9IGJ1c2luZXNzSWQ7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoZW50aWNhdGUvc2lnbnVwYCxcclxuICAgICAgcGF5bG9hZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNpZ25pblBhc3N3b3JkKHBhc3NEYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZS9sb2dpbmAsXHJcbiAgICAgIHBhc3NEYXRhXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZW5kVXNlclJlZmZlcmFsRGV0YWlscyh1c2VySWQ6IGFueSwgcmVmZXJyYWxVbmlxdWVJZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xyXG4gICAgICBgZWNvbW1lcmNlL2FwaS9lbmQtdXNlci9yZWZlcnJhbERldGFpbHM/dXNlcklkPSR7dXNlcklkfSZyZWZlcnJhbFVuaXF1ZUlkPSR7cmVmZXJyYWxVbmlxdWVJZH1gLFxyXG4gICAgICB7fVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUFwcG9pbnRtZW50KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2FkZGAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTG9jYXRpb24oYnVzaW5lc3NJZDogYW55LCBzaXplOiBudW1iZXIsIHBhZ2U6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xyXG4gICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9sb2NhdGlvbj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxUaW1lU2xvdHMobG9jYXRpb25JZDogYW55LCBkYXRlOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3RpbWVzbG90cz9sb2NhdGlvbklkPSR7bG9jYXRpb25JZH0mZGF0ZT0ke2RhdGV9YFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEFsbFNlcnZpY2UoYnVzaW5lc3NJZDogYW55LCBzaXplOiBhbnksIHBhZ2U6IGFueSwgbG9jYXRpb25JZD86IGFueSkge1xyXG4gICAgaWYgKCFsb2NhdGlvbklkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xyXG4gICAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3NlcnZpY2U/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnNpemU9JHtzaXplfSZwYWdlPSR7cGFnZX1gXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zZXJ2aWNlP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9JmxvY2F0aW9uSWQ9JHtsb2NhdGlvbklkfWBcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFsbFN0YWZmQnlMb2NhdGlvbihcclxuICAgIGJ1c2luZXNzSWQ6IGFueSxcclxuICAgIHNpemU6IG51bWJlcixcclxuICAgIHBhZ2U6IG51bWJlcixcclxuICAgIGxvY2F0aW9uSWQ6IHN0cmluZyxcclxuICAgIHNlcnZpY2VJZDogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBpZiAoIXNlcnZpY2VJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zdGFmZj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH1gXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zdGFmZj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH0mc2VydmljZUlkPSR7c2VydmljZUlkfWBcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEF2YWlsYWJsZVNsb3RzKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9hdmFpbGFibGUvdGltZXNsb3RzYCxcclxuICAgICAgZGF0YVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkTGlzdEZpZWxkcyhiSWQ6IGFueSwgc2hvd0luRXJwOiBhbnksIGZvcm1OYW1lOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICtcclxuICAgICAgYGNybS9maWVsZHM/YnVzaW5lc3NJZD0ke2JJZH0mc3RhdHVzPXRydWUmc2hvd0luRm9ybT0ke3Nob3dJbkVycH0maXNQYWdpbmF0aW9uPWZhbHNlJmZpZWxkQ2F0ZWdvcnk9JHtmb3JtTmFtZX1gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZlU3Vic2NyaXB0aW9uRm9yRmVlU3RydWN0dXJlKGJ1c2luZXNzSWQ6IGFueSwgZ3JhZGVJZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5DTUlTX1VSTCArXHJcbiAgICAgIGBjcm0vc3Vic2NyaXB0aW9uL3BsYW4vbGlzdD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mZ3JhZGVJZD0ke2dyYWRlSWR9JnN0YXR1cz10cnVlJmlzRGVsZXRlZD1mYWxzZWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVBZG1pc3Npb24ocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgK1xyXG4gICAgICBgY3JtL3JlZ2lzdHJhdGlvbi9hZG1pc3Npb24/cmVnaXN0cmF0aW9uSWQ9JHtwYXlsb2FkPy5yZWdpc3RyYXRpb25JZCB8fCAnJ31gLFxyXG4gICAgICBwYXlsb2FkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlUGF5bWVudExpbmsoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9hZG1pc3Npb24vdjIvcGF5bWVudD9pc0Zyb21XZWI9dHJ1ZWAsXHJcbiAgICAgIGRhdGFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVSZWdpc3RyYXRpb25Gb3JQYXltZW50KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9yZWdpc3RyYXRpb24vcmVnaXN0cmF0aW9uL3BheW1lbnRgLFxyXG4gICAgICBwYXlsb2FkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3Vic2NyaXB0aW9uRm9yRmVlU3RydWN0dXJlKGdyYWRlSWQ6IGFueSkge1xyXG4gICAgY29uc3QgYnVzaW5lc3NJZCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgK1xyXG4gICAgICBgY3JtL3N1YnNjcmlwdGlvbi9wbGFuL2xpc3Q/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JmdyYWRlSWQ9JHtncmFkZUlkfWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRGZWVTdHJ1Y3R1cmUocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkNNSVNfVVJMICsgYGNybS9mZWUvc3RydWN0dXJlYCwgcGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICBuZXdGZWVTdHJ1Y3R1cmVHZXRMaXN0KGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5DTUlTX1VSTCArIGBjcm0vZmVlL3N0cnVjdHVyZS92Mi9maWx0ZXJgLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGdldEFsbERvY3VtZW50KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL21hc3Rlci9kb2N1bWVudFR5cGUvZmlsdGVyYCxcclxuICAgICAgcGF5bG9hZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldExlYWRCeUlkKGxlYWRJZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkNNSVNfVVJMICsgYGNybS9sZWFkcy9nZXQtb25lP2xlYWRJZD0ke2xlYWRJZH1gKTtcclxuICB9XHJcblxyXG4gIGdldFJlZ2lzdHJhdGlvbkxpc3QocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkNNSVNfVVJMICsgYGNybS9yZWdpc3RyYXRpb24vZ2V0QWxsYCwgcGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxDb21wb25lbnRDYXRlZ29yaWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBhZG1pbi9tYXN0ZXIvdGVtcGxhdGUvY2F0ZWdvcnkvYWxsYCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNhZmVQYXJzZTxUPihyYXc6IHN0cmluZyB8IG51bGwpOiBUIHwgbnVsbCB7XHJcbiAgICBpZiAoIXJhdykgcmV0dXJuIG51bGw7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFQ7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSgpIHtcclxuICAgIGNvbnN0IGJEZXRhaWxzUmF3ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JEZXRhaWxzJyk7XHJcbiAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5zYWZlUGFyc2U8eyB0ZW1wbGF0ZUlkPzogc3RyaW5nIH0+KGJEZXRhaWxzUmF3KTtcclxuXHJcbiAgICAvLyBmYWxsYmFjayBzb3VyY2VcclxuICAgIGNvbnN0IHdlYnNpdGVEYXRhUmF3ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVEYXRhJyk7XHJcbiAgICBjb25zdCB3ZWJzaXRlRGF0YSA9IHRoaXMuc2FmZVBhcnNlPHsgaG9tZVBhZ2VJZD86IHN0cmluZyB9Pih3ZWJzaXRlRGF0YVJhdyk7XHJcblxyXG4gICAgLy8gcHJlZmVyIHRlbXBsYXRlSWQgZnJvbSBiRGV0YWlsczsgZWxzZSBmYWxsYmFjayB0byB3ZWJzaXRlRGF0YS5ob21lUGFnZUlkXHJcbiAgICBjb25zdCB0ZW1wbGF0ZUlkID0gKFxyXG4gICAgICBkZXRhaWxzPy50ZW1wbGF0ZUlkID8/XHJcbiAgICAgIHdlYnNpdGVEYXRhPy5ob21lUGFnZUlkID8/XHJcbiAgICAgICcnXHJcbiAgICApLnRvU3RyaW5nKCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYnVzaW5lc3MvdjMvd2Vic2l0ZS8ke3RlbXBsYXRlSWR9L3BhZ2VzL2xpc3RgXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWNvbW1lcmNlQ29uZmlncygpIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzSWQgPVxyXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/XHJcbiAgICAgICcxZjEwNjUxZi05MjU4LTZiNjMtOWQyMy1hM2Q2OTFhY2ViODgnO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvYWxsP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwb3N0VmlkZW9DYWxsRGV0YWlscyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvZWNvbW1lcmNlL2NvbmZpZy92aWRlby1jYWxsYCxcclxuICAgICAgcGF5bG9hZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFN0b3JlTG9jYXRvckRldGFpbHMocGluY29kZTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBlY29tbWVyY2Uvc3RvcmUvbmVhcmJ5P3BpbmNvZGU9JHtwaW5jb2RlfSZidXNpbmVzc0lkPSR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX1gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUltYWdlc1RvQnVzaW5lc3NMaWJyYXJ5KG1lZGlhUmVxdWVzdDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vbGlicmFyeS9pbWFnZS9saWJyYXJ5L3NhdmVgLFxyXG4gICAgICBtZWRpYVJlcXVlc3RcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZWdlbmVyYXRlVGV4dChyZXF1ZXN0OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBhZG1pbi9jb250ZW50L3N1Z2dlc3QvdjIvd2Vic2l0ZS9pbmRpdmlkdWFsYCxcclxuICAgICAgcmVxdWVzdFxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0Q2F0ZWdvcmllc0hlYWRlckRhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC8ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9L2hlYWRlcnNgXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRBbGxTdG9yZXMocGF5bG9hZDogYW55KSB7XHJcbiAgICBsZXQgdXJsID0gJyc7XHJcbiAgICBpZiAocGF5bG9hZD8ucGluY29kZSAmJiBwYXlsb2FkLnBpbmNvZGUudG9TdHJpbmcoKS5sZW5ndGggPT0gNikge1xyXG4gICAgICB1cmwgPSB1cmwgKyBgICZwaW5jb2RlPSR7cGF5bG9hZC5waW5jb2RlfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBlY29tbWVyY2Uvc3RvcmUvZ2V0L3YyP2J1c2luZXNzSWQ9JHtwYXlsb2FkLmJ1c2luZXNzSWR9JHt1cmx9YCxcclxuICAgICAgJydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxBcHBvaW50bWVudFNlcnZpY2UocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdzZXJ2aWNlL2xpc3QnLCBwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIGdldEFsbFN0YWZmKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xyXG4gICAgICBgc3RhZmYvc3RhZmYvc3RvcmUtc3RhZmYtbGlzdD9zZXJ2aWNlSWQ9JHtwYXlsb2FkLnNlcnZpY2VJZH0mc3RvcmVJZD0ke3BheWxvYWQuc3RvcmVJZH0mYnVzaW5lc3NJZD0ke3BheWxvYWQuYnVzaW5lc3NJZH1gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmVCeUlkKHN0b3JlSWQ6IHN0cmluZykge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIHN0b3JlSWQ6IHN0b3JlSWQsXHJcbiAgICAgIGJ1c2luZXNzSWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJycsXHJcbiAgICAgIHBhZ2VObzogMCxcclxuICAgICAgcGFnZVNpemU6IDEwMDAsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvc3RvcmUvZ2V0YCwgcGF5bG9hZCk7XHJcbiAgfVxyXG4gIHBvc3ROZXdzTGV0dGVyKGVtYWlsOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBlY29tbWVyY2UvZWNvbW1lcmNlL2NvbmZpZy9yZWdpc3RlcmVkL25ld3NsZXR0ZXI/ZW1haWw9JHtlbWFpbH0mYnVzaW5lc3NJZD0ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9YCxcclxuICAgICAgJydcclxuICAgICk7XHJcbiAgfVxyXG4gIGFkZFJldmlld1RvUHJvZHVjdChwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hZGQvcmV2aWV3P29yZGVySWQ9JHtwYXlsb2FkLm9yZGVySWR9YCxcclxuICAgICAgcGF5bG9hZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEFsbFN0b3Jlc09ycmEocGFnZU5vOiBhbnksIHNpemU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdG9yZT9wYWdlTm89JHtwYWdlTm99JnNpemU9JHtzaXplfWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRzdGFmZkJ5U3RvcmVJZChzdG9yZUlkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RhZmYvZ2V0LyR7c3RvcmVJZH1gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU2NoZW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zY2hlbWUvZ2V0QWxsU2NoZW1lcy9kYXNoYm9hcmRgXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsU3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RhdGUvZ2V0QWxsYCk7XHJcbiAgfVxyXG5cclxuICBnZXRDaXR5QnlTdGF0ZUJ5cGFnaW5hdGVkKHN0YXRlSWQ6IGFueSwgcGFnZU5vOiBhbnksIHNpemU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9jaXR5L2dldEJ5U3RhdGU/c3RhdGVJZD0ke3N0YXRlSWR9JnBhZ2VObz0ke3BhZ2VOb30mc2l6ZT0ke3NpemV9YFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFN0b3JlQnlTbGFiKGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdG9yZS9nZXRTbGFiYCxcclxuICAgICAgZGF0YVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFkZFRyaWFsSXRlbShyZXF1ZXN0OiBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L3YyYCwgcmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0l0ZW1BbHJlYWR5QWRkZWQocmVxdWVzdDogY2hlY2tJdGVtQWxyZWFkeUFkZGVkKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9jaGVjay9pdGVtYCxcclxuICAgICAgcmVxdWVzdFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUl0ZW1Gcm9tQ2FydChyZXF1ZXN0OiBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9yZW1vdmVgLFxyXG4gICAgICByZXF1ZXN0XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYm9va0FwcG9pbnRtZW50KHJlcXVlc3Q6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvdHJ5LWhvbWVgLCByZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUVucm9sbG1lbnRTY2hlbWUoZW5yb2xsZW1lbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICBgICBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9lbnJvbGxtZW50L2NyZWF0ZS9uZXcvdGVtcD9tYW51YWxQYXk9dHJ1ZSZpc1dlYlJlcXVlc3Q9dHJ1ZVxyXG5gLFxyXG4gICAgICBlbnJvbGxlbWVudFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEhvbWVBcHBvaW50bWVudExpc3QodXNlcklkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJyk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBlY29tbWVyY2UvdXNlci90cnktaG9tZT91c2VySWQ9JHt1c2VySWR9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxPcnJhU2NoZW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgICdodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9wYXNzQm9vay9yZWRlbXB0aW9uL2Ftb3VudC9jaGVjaz91c2VyQ29kZT1DXzAwMDMxMzg4NSdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByZWRlZW1TY2hlbWUoc2NoZW1lOiBzdHJpbmcsIGNhcnRJZDogYW55LCBhY3Rpb246IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9yZWRlbXB0aW9uP2NhcnRJZD0ke2NhcnRJZH0mcmVtb3ZlU2NoZW1lPSR7YWN0aW9ufWAsXHJcbiAgICAgIHNjaGVtZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFJldmlld3NCeVByb2R1Y3RJZChwcm9kdWN0SWQ6IHN0cmluZywgcGFnZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9JnBhZ2VOdW1iZXI9JHtwYWdlTnVtYmVyfSZwYWdlU2l6ZT0zYCxcclxuICAgICAge31cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldEZpZWxkc1RvRGlzcGxheShmaWVsZHNMaXN0OiBhbnlbXSkge1xyXG4gICAgbGV0IG1hcDogYW55ID0ge307XHJcblxyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgZmllbGRzTGlzdCkge1xyXG4gICAgICBmb3IgKGxldCBmaWVsZEdyb3VwIG9mIGZpZWxkLmZpZWxkR3JvdXApIHtcclxuICAgICAgICBpZiAoIWZpZWxkR3JvdXAuZmllbGRTdGVwSWQpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBsZXQgc3RlcE5hbWUgPSBmaWVsZEdyb3VwLmZpZWxkU3RlcE5hbWVcclxuICAgICAgICAgID8gZmllbGRHcm91cC5maWVsZFN0ZXBOYW1lXHJcbiAgICAgICAgICA6ICd1bmRlZmluZWQnO1xyXG4gICAgICAgIGxldCBncm91cE5hbWUgPSBmaWVsZEdyb3VwLmZpZWxkR3JvdXBOYW1lO1xyXG5cclxuICAgICAgICBpZiAoIW1hcFtzdGVwTmFtZV0pIHtcclxuICAgICAgICAgIG1hcFtzdGVwTmFtZV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFtYXBbc3RlcE5hbWVdW2dyb3VwTmFtZV0pIHtcclxuICAgICAgICAgIG1hcFtzdGVwTmFtZV1bZ3JvdXBOYW1lXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWVsZFsnZmllbGRTdGVwSWQnXSA9IGZpZWxkR3JvdXAuZmllbGRTdGVwSWQ7XHJcbiAgICAgICAgZmllbGRbJ2ZpZWxkR3JvdXBJZCddID0gZmllbGRHcm91cC5maWVsZEdyb3VwSWQ7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0ZpZWxkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWVsZCkpO1xyXG4gICAgICAgIG1hcFtzdGVwTmFtZV1bZ3JvdXBOYW1lXS5wdXNoKG5ld0ZpZWxkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtYXA7XHJcbiAgfVxyXG5cclxuICBnZXRCb29raW5nU2xvdHMocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnYm9va2luZy9hdmFpbGFibGUtc2xvdHMnLFxyXG4gICAgICBwYXlsb2FkXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRCdXNpbmVzc0FwcG9pbnRtZW50U2V0dGluZ3MoYnVzaW5lc3NJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgc2VydmljZS9zZXR0aW5ncy8ke2J1c2luZXNzSWR9YFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlc29sdmVDYXJ0KHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvZ3JvdXAvcmVzb2x2ZS1jYXJ0JyxcclxuICAgICAgcGF5bG9hZFxyXG4gICAgKTtcclxuICB9XHJcbiAgaG9sZEJvb2tpbmcocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnYm9va2luZy9ncm91cC9ob2xkJywgcGF5bG9hZCk7XHJcbiAgfVxyXG4gIGdldEJvb2tpbmdHcm91cChncm91cElkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfWApO1xyXG4gIH1cclxuICBnZW5lcmF0ZVBheW1lbnRUb2tlbihncm91cElkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC90b2tlbj9ncm91cElkPSR7Z3JvdXBJZH1gLFxyXG4gICAgICB7fVxyXG4gICAgKTtcclxuICB9XHJcbiAgY29tcGxldGVCb29raW5nR3JvdXAoZ3JvdXBJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC9jb21wbGV0ZS8ke2dyb3VwSWR9YCxcclxuICAgICAge31cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldE15Qm9va2luZ3MoYnVzaW5lc3NJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICtcclxuICAgICAgYGJvb2tpbmcvZ3JvdXAvbXk/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnVzZXJJZD0ke3VzZXJJZH1gXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRHcm91cExpbmVzKGdyb3VwSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9saW5lc2BcclxuICAgICk7XHJcbiAgfVxyXG4gIGNhbmNlbEJvb2tpbmdHcm91cChncm91cElkOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZykge1xyXG4gICAgY29uc3QgcXVlcnkgPSByZWFzb24gPyBgP3JlYXNvbj0ke2VuY29kZVVSSUNvbXBvbmVudChyZWFzb24pfWAgOiAnJztcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vY2FuY2VsJHtxdWVyeX1gLFxyXG4gICAgICB7fVxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0Q2FuY2VsbGF0aW9uUG9saWN5KGJ1c2luZXNzSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICtcclxuICAgICAgYHBvbGljeS1tYXN0ZXJzLyR7YnVzaW5lc3NJZH0/cG9saWN5VHlwZT1DQU5DRUxMQVRJT05gXHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRSZXNjaGVkdWxlU2xvdHMoZ3JvdXBJZDogc3RyaW5nLCBkYXRlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vcmVzY2hlZHVsZS1zbG90c2AsXHJcbiAgICAgIHsgZGF0ZSB9XHJcbiAgICApO1xyXG4gIH1cclxuICByZXNjaGVkdWxlQm9va2luZyhncm91cElkOiBzdHJpbmcsIG5ld0RhdGU6IHN0cmluZywgbmV3U3RhcnRUaW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vcmVzY2hlZHVsZWAsXHJcbiAgICAgIHsgbmV3RGF0ZSwgbmV3U3RhcnRUaW1lLCByZXNjaGVkdWxlZEJ5OiAnQ1VTVE9NRVInIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGdlbmVyYXRlVG9rZW4oYklkOiBhbnksIHVzZXJJZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcclxuICAgICAgYGV4dC9jb25uZWN0L3NpbXBvL3Rva2VuP2J1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH0mdXNlclR5cGU9RVhURVJOQUxfVVNFUmAsXHJcbiAgICAgIHt9XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRBbGxFbnJvbGxlZFNjaGVtZXMocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgKyAnZXh0L2Nvbm5lY3Qvc2ltcG8vc2NoZW1lL2xpc3QnLFxyXG4gICAgICBwYXlsb2FkXHJcbiAgICApO1xyXG4gIH1cclxuICBlbnJvbGxTY2hlbWUocGF5bG9hZDogYW55LCBjaGVja0NoYXJnZXM6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxyXG4gICAgfSk7XHJcbiAgICBpZiAoY2hlY2tDaGFyZ2VzKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgICB0aGlzLlBBU1NCT09LX1VSTCArICdwYXNzYm9vay9jYXJ0L2luaXRpYXRlL3BheW1lbnQ/bWFudWFsUGF5PXRydWUnLFxyXG4gICAgICAgIHBheWxvYWQsXHJcbiAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcclxuICAgICAgICB0aGlzLlBBU1NCT09LX1VSTCArICdwYXNzYm9vay9pbml0aWF0ZS9wYXltZW50P21hbnVhbFBheT10cnVlJyxcclxuICAgICAgICBwYXlsb2FkLFxyXG4gICAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEJlbmVmaXRTbGFiKHBhc3Nib29rSWQ/OiBhbnkpIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcclxuICAgICAgYHBhc3Nib29rL2JlbmVmaXQvcGVyY2VudGFnZXM/cGFzc2Jvb2tJZD0ke3Bhc3Nib29rSWR9YCxcclxuICAgICAge30sXHJcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRBbGxTdGFmZkxpc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBzdGFmZi9zdGFmZi9saXN0LyR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX0/aXNQYWdpbmF0aW9uPWZhbHNlYFxyXG4gICAgKTtcclxuICB9XHJcbiAgcmVxdWVzdFJlZGVlbXB0aW9uKHBhc3Nib29rSWQ6IGFueSkge1xyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArXHJcbiAgICAgIGBwYXNzYm9vay9yZXF1ZXN0L3JlZGVtcHRpb24/cGFzc0Jvb2tJZD0ke3Bhc3Nib29rSWR9YCxcclxuICAgICAge30sXHJcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XHJcbiAgICApO1xyXG4gIH1cclxuICBQYXNzYm9va0FwcFN0YXR1cyhiSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYXBwL2FwcC9jaGVjay1hcHA/YnVzaW5lc3NJZD0ke2JJZH0mYXBwTmFtZT1QYXNzYm9va2BcclxuICAgICk7XHJcbiAgfVxyXG4gIGNoZWNrQXBwSW5zdGFsbGVkKGJJZDogYW55LCBhcHBOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGFwcC9hcHAvY2hlY2stYXBwP2J1c2luZXNzSWQ9JHtiSWR9JmFwcE5hbWU9JHthcHBOYW1lfWBcclxuICAgICk7XHJcbiAgfVxyXG4gIGdldFJlZGVlbVBvaW50cyhcclxuICAgIGJJZDogYW55LFxyXG4gICAgdXNlcklkOiBhbnksXHJcbiAgICBldmV0VHlwZTogc3RyaW5nLFxyXG4gICAgb3JkZXJWYWx1ZTogYW55LFxyXG4gICAgcmV3YXJkUG9pbnRzOiBib29sZWFuXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArXHJcbiAgICAgIGBlY29tbWVyY2UvYXBpL3JlZmVycmFscy9hdmFpbGFibGUtYW1vdW50P2J1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH0mZXZlbnRUeXBlPSR7ZXZldFR5cGV9Jm9yZGVyVmFsdWU9JHtvcmRlclZhbHVlfSZyZXdhcmRQb2ludHM9JHtyZXdhcmRQb2ludHN9YFxyXG4gICAgKTtcclxuICB9XHJcbiAgcGF5bWVudFdpdGhDb21wbGV0ZVBvaW50cyhjYXJ0SWQ6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL29yZGVyL3Jld2FyZHM/Y2FydElkPSR7Y2FydElkfWAsXHJcbiAgICAgIGRhdGFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxQYXNzYm9va0R1ZXMoYklkOiBhbnksIHVzZXJJZDogYW55KSB7XHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcclxuICAgICAgYHBhc3Nib29rL3BheW1lbnQvZHVlcz9wYWdlPTAmc2l6ZT0xMDAwJmJ1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH1gLFxyXG4gICAgICB7IGhlYWRlcnM6IGhlYWRlcnMgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0VG9rZW4oKSB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KCdwYXNzQm9va1Rva2VuJyk7XHJcbiAgICByZXR1cm4gdG9rZW47XHJcbiAgfVxyXG4gIGdldEFsbFRyYW5zYWN0aW9ucyhwYXlsb2FkOiBhbnkpIHtcclxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgKyBgZGFzaGJvYXJkL3YzL3RyYW5zYWN0aW9ucy9wYWdlYCxcclxuICAgICAgcGF5bG9hZCxcclxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIGdldFNjaGVtZURldGFpbHMoc2NoZW1lSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxyXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBleHQvY29ubmVjdC9zaW1wby9nZXQvc2NoZW1lP2lkPSR7c2NoZW1lSWR9YCxcclxuICAgICAge31cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRNZXRhbFByaWNlKHN0b3JlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXHJcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgYGV4dC9jb25uZWN0L3NpbXBvL21ldGFsL3ByaWNlcz9pZD0ke3N0b3JlSWR9YFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUxlYWQocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9jb250YWN0YCwgcGF5bG9hZCk7XHJcbiAgfVxyXG4gIGdldEFwcG9pbnRtZW50UGF5bWVudFN0YXR1cyhvcmRlcklkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBwYXltZW50L3ZlcmlmeS9zdGF0dXM/b3JkZXJJZD0ke29yZGVySWR9YFxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0T3RwRm9yTG9naW4ocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9nZW5lcmF0ZS1vdHBgLFxyXG4gICAgICBwYXlsb2FkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqIE5ldyBPVFAgQVBJOiBQVVQgL2Vjb21tZXJjZS91c2VyL2F1dGgvc2VuZC1vdHBcclxuICAgKiAgQm9keTogeyBpZGVudGlmaWVyLCBidXNpbmVzc0lkIH1cclxuICAgKiAgUmVzcG9uc2U6IHsgZGF0YTogeyBpc0V4aXN0aW5nVXNlcjogYm9vbGVhbiwgbWVzc2FnZTogc3RyaW5nIH0gfVxyXG4gICAqL1xyXG4gIHNlbmRPdHBWMihpZGVudGlmaWVyOiBzdHJpbmcsIGJ1c2luZXNzSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoL3NlbmQtb3RwYCwge1xyXG4gICAgICBpZGVudGlmaWVyLFxyXG4gICAgICBidXNpbmVzc0lkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB2ZXJpZnlPdHBWMihwYXlsb2FkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvdmVyaWZ5LW90cGAsXHJcbiAgICAgIHBheWxvYWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjb21wbGV0ZVNpZ251cFYyKHBheWxvYWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXHJcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC9jb21wbGV0ZS1zaWdudXBgLFxyXG4gICAgICBwYXlsb2FkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbG9naW5XaXRoUGFzc3dvcmROZXcocGF5bG9hZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcclxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoL2xvZ2luLXBhc3N3b3JkYCxcclxuICAgICAgcGF5bG9hZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZsdXNoKGV2ZW50c1RvU2VuZDogYW55KSB7XHJcbiAgICB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QodGhpcy5CQVNFX1VSTCArICdlY29tbWVyY2UvYW5hbHl0aWNzL2JhdGNoJywgZXZlbnRzVG9TZW5kKVxyXG4gICAgICAuc3Vic2NyaWJlKHsgZXJyb3I6ICgpID0+IHsgfSB9KTtcclxuICB9XHJcblxyXG4gIGdldFBvcHVsYXJTZWFyY2hlcygpIHtcclxuICAgIGNvbnN0IGJ1c2luZXNzSWQgPVxyXG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz9cclxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/P1xyXG4gICAgICAnMWYxMjEwODEtZGJlYS02NWM2LWFkODktMWRmZThjZGRhOTAyJztcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxyXG4gICAgICB0aGlzLkJBU0VfVVJMICtcclxuICAgICAgYGVjb21tZXJjZS9pbnZlbnRvcnkvcG9wdWxhci1zZWFyY2hlcz9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWVudUl0ZW1zKG1lbnVJZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9tZW51LyR7bWVudUlkfWApO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0SG9tZVJlY29tbWVuZGF0aW9ucyhidXNpbmVzc0lkOiBhbnksIFVzZXJJZDogYW55KSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLlJFQ09NTUVOREFUSU9OX1VSTCArIGBhcGkvdjEvcmVjb21tZW5kYXRpb25zLyR7VXNlcklkfS9ob21lP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZwYWdlPTEmcGFnZVNpemU9MjBgKVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0Q2FydFJlY29tbWVuZGF0aW9ucyhidXNpbmVzc0lkOiBhbnksIFVzZXJJZDogYW55KSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLlJFQ09NTUVOREFUSU9OX1VSTCArIGBhcGkvdjEvcmVjb21tZW5kYXRpb25zLyR7VXNlcklkfS9jYXJ0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZwYWdlPTEmcGFnZVNpemU9MTVgKVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gZ2V0UHJvZHVjdERlc2NyaXB0aW9uUmVjb21tZW5kYXRpb25zKGJ1c2luZXNzSWQ6IGFueSwgVXNlcklkOiBhbnkpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L3BkcD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mcGFnZT0xJnBhZ2VTaXplPTEwYClcclxuICAvLyB9XHJcbn1cclxuIl19
@@ -29,4 +29,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29
29
  standalone: true
30
30
  }]
31
31
  }], ctorParameters: () => [{ type: i1.DomSanitizer }] });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRpemVIdG1sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9zYW5pdGl6ZUh0bWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQU9wRCxNQUFNLE9BQU8sZ0JBQWdCO0lBRTNCLFlBQW9CLFVBQXVCO1FBQXZCLGVBQVUsR0FBVixVQUFVLENBQWE7SUFDM0MsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUE0QjtRQUNwQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxPQUFPLEVBQUUsQ0FBQyxDQUFFLCtEQUErRDtRQUM3RSxDQUFDO1FBQ0QsMkRBQTJEO1FBQzNELE1BQU0sU0FBUyxHQUFHLENBQUM7YUFDaEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7YUFDckIsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7YUFDckIsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7YUFDdEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7YUFDdkIsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7YUFDdEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUzQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsQ0FBQzsrR0FuQlUsZ0JBQWdCOzZHQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBSjVCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdzYW5pdGl6ZUh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFNhbml0aXplSHRtbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zYW5pdGl6ZXI6RG9tU2FuaXRpemVyKSB7XG4gIH1cblxuICB0cmFuc2Zvcm0odjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFNhZmVIdG1sIHtcbiAgICBpZiAoIXYpIHtcbiAgICAgIHJldHVybiAnJzsgIC8vIFJldHVybiBhbiBlbXB0eSBzdHJpbmcgaWYgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkLCBvciBlbXB0eVxuICAgIH1cbiAgICAvLyBVbmVzY2FwZSBjb21tb24gSFRNTCBlbnRpdGllcyB0byBhbGxvdyByZW5kZXJpbmcgb2YgdGFnc1xuICAgIGNvbnN0IHVuZXNjYXBlZCA9IHZcbiAgICAgIC5yZXBsYWNlKC8mbHQ7L2csICc8JylcbiAgICAgIC5yZXBsYWNlKC8mZ3Q7L2csICc+JylcbiAgICAgIC5yZXBsYWNlKC8mYW1wOy9nLCAnJicpXG4gICAgICAucmVwbGFjZSgvJnF1b3Q7L2csICdcIicpXG4gICAgICAucmVwbGFjZSgvJiMzOTsvZywgXCInXCIpXG4gICAgICAucmVwbGFjZSgvJm5ic3A7L2csICcgJyk7XG5cbiAgICByZXR1cm4gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHVuZXNjYXBlZCk7XG4gIH1cbn1cbiJdfQ==
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FuaXRpemVIdG1sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9zYW5pdGl6ZUh0bWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQU9wRCxNQUFNLE9BQU8sZ0JBQWdCO0lBRTNCLFlBQW9CLFVBQXVCO1FBQXZCLGVBQVUsR0FBVixVQUFVLENBQWE7SUFDM0MsQ0FBQztJQUVELFNBQVMsQ0FBQyxDQUE0QjtRQUNwQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxPQUFPLEVBQUUsQ0FBQyxDQUFFLCtEQUErRDtRQUM3RSxDQUFDO1FBQ0QsMkRBQTJEO1FBQzNELE1BQU0sU0FBUyxHQUFHLENBQUM7YUFDaEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7YUFDckIsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUM7YUFDckIsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7YUFDdEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7YUFDdkIsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7YUFDdEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUUzQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsQ0FBQzsrR0FuQlUsZ0JBQWdCOzZHQUFoQixnQkFBZ0I7OzRGQUFoQixnQkFBZ0I7a0JBSjVCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcblxyXG5AUGlwZSh7XHJcbiAgbmFtZTogJ3Nhbml0aXplSHRtbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2FuaXRpemVIdG1sUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zYW5pdGl6ZXI6RG9tU2FuaXRpemVyKSB7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0odjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFNhZmVIdG1sIHtcclxuICAgIGlmICghdikge1xyXG4gICAgICByZXR1cm4gJyc7ICAvLyBSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGlmIHZhbHVlIGlzIG51bGwsIHVuZGVmaW5lZCwgb3IgZW1wdHlcclxuICAgIH1cclxuICAgIC8vIFVuZXNjYXBlIGNvbW1vbiBIVE1MIGVudGl0aWVzIHRvIGFsbG93IHJlbmRlcmluZyBvZiB0YWdzXHJcbiAgICBjb25zdCB1bmVzY2FwZWQgPSB2XHJcbiAgICAgIC5yZXBsYWNlKC8mbHQ7L2csICc8JylcclxuICAgICAgLnJlcGxhY2UoLyZndDsvZywgJz4nKVxyXG4gICAgICAucmVwbGFjZSgvJmFtcDsvZywgJyYnKVxyXG4gICAgICAucmVwbGFjZSgvJnF1b3Q7L2csICdcIicpXHJcbiAgICAgIC5yZXBsYWNlKC8mIzM5Oy9nLCBcIidcIilcclxuICAgICAgLnJlcGxhY2UoLyZuYnNwOy9nLCAnICcpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodW5lc2NhcGVkKTtcclxuICB9XHJcbn1cclxuIl19