simpo-component-library 3.6.965 → 3.6.968

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 (248) 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/cart/cart.component.mjs +3 -3
  47. package/esm2022/lib/ecommerce/sections/cart/cart.modal.mjs +1 -1
  48. package/esm2022/lib/ecommerce/sections/categories-with-image-background-columns/categories-with-image-background-columns.component.mjs +3 -3
  49. package/esm2022/lib/ecommerce/sections/category-product/category-product.component.mjs +3 -3
  50. package/esm2022/lib/ecommerce/sections/category-product/category-product.model.mjs +1 -1
  51. package/esm2022/lib/ecommerce/sections/checkout/checkout.component.mjs +3 -3
  52. package/esm2022/lib/ecommerce/sections/checkout/checkout.modal.mjs +1 -1
  53. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.component.mjs +3 -3
  54. package/esm2022/lib/ecommerce/sections/customer-review/customer-review.model.mjs +1 -1
  55. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.component.mjs +3 -3
  56. package/esm2022/lib/ecommerce/sections/enrollment-form/enrollment-form.model.mjs +1 -1
  57. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.component.mjs +3 -3
  58. package/esm2022/lib/ecommerce/sections/featured-category/featured-category.modal.mjs +1 -1
  59. package/esm2022/lib/ecommerce/sections/featured-category/featured-collection.component.mjs +3 -3
  60. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +3 -3
  61. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.modal.mjs +1 -1
  62. package/esm2022/lib/ecommerce/sections/item-varient/item-varient.component.mjs +3 -3
  63. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.component.mjs +3 -3
  64. package/esm2022/lib/ecommerce/sections/new-collection/new-collection.modal.mjs +1 -1
  65. package/esm2022/lib/ecommerce/sections/order-details/order-details.component.mjs +3 -3
  66. package/esm2022/lib/ecommerce/sections/pagnination/pagnination.component.mjs +3 -3
  67. package/esm2022/lib/ecommerce/sections/passbook-transactions/passbook-transactions.component.mjs +3 -3
  68. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.component.mjs +3 -3
  69. package/esm2022/lib/ecommerce/sections/product-category-list/product-category-list.model.mjs +1 -1
  70. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +3 -3
  71. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.modal.mjs +1 -1
  72. package/esm2022/lib/ecommerce/sections/product-list/product-list.component.mjs +3 -3
  73. package/esm2022/lib/ecommerce/sections/product-list/product-list.modal.mjs +1 -1
  74. package/esm2022/lib/ecommerce/sections/refer-earn/refer-earn.component.mjs +3 -3
  75. package/esm2022/lib/ecommerce/sections/refer-earn/refer-earn.modal.mjs +1 -1
  76. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.component.mjs +1 -1
  77. package/esm2022/lib/ecommerce/sections/returns-calculator/returns-calculator.model.mjs +1 -1
  78. package/esm2022/lib/ecommerce/sections/scheme-details/scheme-details.component.mjs +3 -3
  79. package/esm2022/lib/ecommerce/sections/scheme-selection/scheme-selection.component.mjs +3 -3
  80. package/esm2022/lib/ecommerce/sections/schemes/schemes.component.mjs +3 -3
  81. package/esm2022/lib/ecommerce/sections/schemes/schemes.component.model.mjs +1 -1
  82. package/esm2022/lib/ecommerce/sections/small-product-listing/small-product-listing.component.mjs +3 -3
  83. package/esm2022/lib/ecommerce/sections/store-list/store-list.component.mjs +3 -3
  84. package/esm2022/lib/ecommerce/sections/store-list/store-list.modal.mjs +1 -1
  85. package/esm2022/lib/ecommerce/sections/store-page/store-page.component.mjs +3 -3
  86. package/esm2022/lib/ecommerce/sections/store-page/store-page.model.mjs +1 -1
  87. package/esm2022/lib/ecommerce/sections/user-basic-info/user-basic-info.component.mjs +3 -3
  88. package/esm2022/lib/ecommerce/sections/user-profile/user-profile.modal.mjs +1 -1
  89. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.component.mjs +3 -3
  90. package/esm2022/lib/ecommerce/sections/verify-payment/verify-payment.model.mjs +1 -1
  91. package/esm2022/lib/ecommerce/sections/whislist/whislist.component.mjs +3 -3
  92. package/esm2022/lib/ecommerce/styles/BaseCollection.modal.mjs +1 -1
  93. package/esm2022/lib/ecommerce/styles/Collection.modal.mjs +1 -1
  94. package/esm2022/lib/ecommerce/styles/OrderedItems.modal.mjs +1 -1
  95. package/esm2022/lib/ecommerce/styles/PincodeLocation.model.mjs +1 -1
  96. package/esm2022/lib/ecommerce/styles/PincodeLocationInter.model.mjs +1 -1
  97. package/esm2022/lib/ecommerce/styles/cart.modal.mjs +1 -1
  98. package/esm2022/lib/ecommerce/styles/category.modal.mjs +1 -1
  99. package/esm2022/lib/ecommerce/styles/order.modal.mjs +1 -1
  100. package/esm2022/lib/ecommerce/styles/product.modal.mjs +1 -1
  101. package/esm2022/lib/ecommerce/styles/review.modal.mjs +1 -1
  102. package/esm2022/lib/ecommerce/styles/user.modal.mjs +1 -1
  103. package/esm2022/lib/elements/add-section/add-section.component.mjs +3 -3
  104. package/esm2022/lib/elements/address-list/address-list.component.mjs +3 -3
  105. package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
  106. package/esm2022/lib/elements/booking-cart-groups/booking-cart-groups.component.mjs +3 -3
  107. package/esm2022/lib/elements/button/button.component.mjs +3 -3
  108. package/esm2022/lib/elements/button/button.model.mjs +1 -1
  109. package/esm2022/lib/elements/card-skeleton-loader/card-skeleton-loader.component.mjs +3 -3
  110. package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
  111. package/esm2022/lib/elements/editor-service.service.mjs +1 -1
  112. package/esm2022/lib/elements/heading-element/heading-element.component.mjs +3 -3
  113. package/esm2022/lib/elements/index.mjs +1 -1
  114. package/esm2022/lib/elements/link-editor/link-editor.component.mjs +3 -3
  115. package/esm2022/lib/elements/list-home-appointment/list-home-appointment.component.mjs +3 -3
  116. package/esm2022/lib/elements/media-selector/media-selector.component.mjs +3 -3
  117. package/esm2022/lib/elements/my-bookings/my-bookings.component.mjs +3 -3
  118. package/esm2022/lib/elements/portfolio/portfolio.component.mjs +3 -3
  119. package/esm2022/lib/elements/pricing-s1/pricing-s1.component.mjs +3 -3
  120. package/esm2022/lib/elements/property/property.component.mjs +3 -3
  121. package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +3 -3
  122. package/esm2022/lib/elements/svg-divider/svg-divider.component.mjs +3 -3
  123. package/esm2022/lib/elements/text/text.component.mjs +3 -3
  124. package/esm2022/lib/elements/text-editor/text-editor.component.mjs +7 -7
  125. package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
  126. package/esm2022/lib/pipes/amount.pipe.mjs +1 -1
  127. package/esm2022/lib/pipes/gender.pipe.mjs +1 -1
  128. package/esm2022/lib/sections/BaseSection.mjs +1 -1
  129. package/esm2022/lib/sections/add-new-section/add-new-section.component.mjs +3 -3
  130. package/esm2022/lib/sections/appointment-form/appointment-booking/appointment-booking/appointment-booking.component.mjs +18 -5
  131. package/esm2022/lib/sections/appointment-form/appointment-form.model.mjs +1 -1
  132. package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +3 -3
  133. package/esm2022/lib/sections/banner-carousel/banner-carousel.model.mjs +1 -1
  134. package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +3 -3
  135. package/esm2022/lib/sections/blog-list/blog-list.component.mjs +3 -3
  136. package/esm2022/lib/sections/blog-list/blog-list.model.mjs +1 -1
  137. package/esm2022/lib/sections/brand-story-section/brand-story-section.component.mjs +3 -3
  138. package/esm2022/lib/sections/brand-story-section/brand-story-section.modal.mjs +1 -1
  139. package/esm2022/lib/sections/button-grid-section/button-grid-section.component.mjs +3 -3
  140. package/esm2022/lib/sections/choose-us-section/choose-us-section.component.mjs +3 -3
  141. package/esm2022/lib/sections/choose-us-section/choose-us-section.model.mjs +1 -1
  142. package/esm2022/lib/sections/condensed-and-gradient/condensed-and-gradient.component.mjs +3 -3
  143. package/esm2022/lib/sections/countdown-banner/countdown-banner.component.mjs +3 -3
  144. package/esm2022/lib/sections/countdown-banner/countdown-banner.component.model.mjs +1 -1
  145. package/esm2022/lib/sections/faq-columns-cards/faq-columns-cards.component.mjs +3 -3
  146. package/esm2022/lib/sections/faq-columns-cards/faq-columns-cards.modal.mjs +1 -1
  147. package/esm2022/lib/sections/faq-section/faq-section.component.mjs +3 -3
  148. package/esm2022/lib/sections/faq-section/faq-section.modal.mjs +1 -1
  149. package/esm2022/lib/sections/feature-experience-section/feature-experience-section.component.mjs +3 -3
  150. package/esm2022/lib/sections/feature-experience-section/feature-experience-section.modal.mjs +1 -1
  151. package/esm2022/lib/sections/features-section/features-section.component.mjs +3 -3
  152. package/esm2022/lib/sections/features-section/features-section.model.mjs +1 -1
  153. package/esm2022/lib/sections/footer/footer.component.mjs +3 -3
  154. package/esm2022/lib/sections/footer/footer.modal.mjs +1 -1
  155. package/esm2022/lib/sections/four-features-centered-image/four-features-centered-image.component.mjs +3 -3
  156. package/esm2022/lib/sections/four-features-centered-image/four-features-centered-image.modal.mjs +1 -1
  157. package/esm2022/lib/sections/header-section/header-section.component.mjs +3 -3
  158. package/esm2022/lib/sections/header-section/header-section.model.mjs +1 -1
  159. package/esm2022/lib/sections/header-text/header-text.component.mjs +3 -3
  160. package/esm2022/lib/sections/header-text/header-text.model.mjs +1 -1
  161. package/esm2022/lib/sections/image-background/image-background/image-background.component.mjs +3 -3
  162. package/esm2022/lib/sections/image-background/image-background/image-background.component.model.mjs +1 -1
  163. package/esm2022/lib/sections/image-carousel-section/image-carousel-section.component.mjs +3 -3
  164. package/esm2022/lib/sections/image-carousel-section/image-carousel.model.mjs +1 -1
  165. package/esm2022/lib/sections/image-grid-hotspot/image-grid-hotspot.component.mjs +3 -3
  166. package/esm2022/lib/sections/image-grid-hotspot/image-grid-hotspot.model.mjs +1 -1
  167. package/esm2022/lib/sections/image-grid-section/image-grid-section.component.mjs +3 -3
  168. package/esm2022/lib/sections/image-grid-section/image-grid-section.model.mjs +1 -1
  169. package/esm2022/lib/sections/image-section/image-section.component.mjs +3 -3
  170. package/esm2022/lib/sections/image-section/image-section.model.mjs +1 -1
  171. package/esm2022/lib/sections/location-section/location-section.component.mjs +3 -3
  172. package/esm2022/lib/sections/location-section/location-section.modal.mjs +1 -1
  173. package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +3 -3
  174. package/esm2022/lib/sections/logo-showcase/logo-showcase.modal.mjs +1 -1
  175. package/esm2022/lib/sections/moving-text/moving-text.component.mjs +3 -3
  176. package/esm2022/lib/sections/moving-text/moving-text.modal.mjs +1 -1
  177. package/esm2022/lib/sections/new-services/new-services.component.mjs +3 -3
  178. package/esm2022/lib/sections/new-services/new-services.model.mjs +1 -1
  179. package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +3 -3
  180. package/esm2022/lib/sections/new-testimonials/new-testimonials.model.mjs +1 -1
  181. package/esm2022/lib/sections/news-letter-component/news-letter-component.component.mjs +3 -3
  182. package/esm2022/lib/sections/news-letter-component/news-letter.modal.mjs +1 -1
  183. package/esm2022/lib/sections/overlapping-image/overlapping-image.component.mjs +3 -3
  184. package/esm2022/lib/sections/overlapping-image/overlapping-image.component.modal.mjs +1 -1
  185. package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +3 -3
  186. package/esm2022/lib/sections/pricing-section/pricing-section.modal.mjs +1 -1
  187. package/esm2022/lib/sections/process-modern/process-modern.component.mjs +3 -3
  188. package/esm2022/lib/sections/process-modern/process-modern.model.mjs +1 -1
  189. package/esm2022/lib/sections/process-section/process-section.component.mjs +3 -3
  190. package/esm2022/lib/sections/process-section/process-section.modal.mjs +1 -1
  191. package/esm2022/lib/sections/product-info-section/product-info-section.component.mjs +3 -3
  192. package/esm2022/lib/sections/product-info-section/product-info-section.component.modal.mjs +1 -1
  193. package/esm2022/lib/sections/property-component/property-component.component.mjs +3 -3
  194. package/esm2022/lib/sections/property-component/property-component.modal.mjs +1 -1
  195. package/esm2022/lib/sections/property-list/property-list.component.mjs +3 -3
  196. package/esm2022/lib/sections/property-list/property-list.modal.mjs +1 -1
  197. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.component.mjs +3 -3
  198. package/esm2022/lib/sections/recent-blog-post-section/recent-blog-post-section.model.mjs +1 -1
  199. package/esm2022/lib/sections/registration-form/registration-form.component.mjs +3 -3
  200. package/esm2022/lib/sections/registration-form/registrationForm.model.mjs +1 -1
  201. package/esm2022/lib/sections/scheme-detail/scheme-detail.component.mjs +3 -3
  202. package/esm2022/lib/sections/scheme-detail/scheme-detail.modal.mjs +1 -1
  203. package/esm2022/lib/sections/service-section/service-section.component.mjs +3 -3
  204. package/esm2022/lib/sections/service-section/service-section.model.mjs +1 -1
  205. package/esm2022/lib/sections/skeleton-loader-section/skeleton-loader-section.component.mjs +3 -3
  206. package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +3 -3
  207. package/esm2022/lib/sections/team-member-section/team-member-section.model.mjs +1 -1
  208. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.component.mjs +3 -3
  209. package/esm2022/lib/sections/testimonial-fullwidth/testimonial-fullwidth.model.mjs +1 -1
  210. package/esm2022/lib/sections/testimonial-masonry/testimonial-masonry.component.mjs +3 -3
  211. package/esm2022/lib/sections/testimonial-masonry/testimonial-masonry.model.mjs +1 -1
  212. package/esm2022/lib/sections/testimonial-section/testimonial-section.component.mjs +3 -3
  213. package/esm2022/lib/sections/testimonial-section/testimonial-section.model.mjs +1 -1
  214. package/esm2022/lib/sections/testimonial-slider/testimonial-slider.component.mjs +3 -3
  215. package/esm2022/lib/sections/testimonial-slider/testimonial-slider.model.mjs +1 -1
  216. package/esm2022/lib/sections/testimonial-video/testimonial-video.component.mjs +3 -3
  217. package/esm2022/lib/sections/testimonial-video/testimonial-video.model.mjs +1 -1
  218. package/esm2022/lib/sections/text-section/text-section.model.mjs +1 -1
  219. package/esm2022/lib/sections/usp-video-section/usp-video-section.component.mjs +3 -3
  220. package/esm2022/lib/sections/usp-video-section/usp-video-section.model.mjs +1 -1
  221. package/esm2022/lib/sections/video-carousel-section/video-carousel-section.component.mjs +3 -3
  222. package/esm2022/lib/sections/video-carousel-section/video-carousel.model.mjs +1 -1
  223. package/esm2022/lib/sections/video-grid-section/video-grid-section.component.mjs +3 -3
  224. package/esm2022/lib/sections/video-grid-section/video-grid-section.model.mjs +1 -1
  225. package/esm2022/lib/sections/video-section/video-section.component.mjs +3 -3
  226. package/esm2022/lib/sections/video-section/video-section.model.mjs +1 -1
  227. package/esm2022/lib/sections/video-showcase/video-showcase.component.mjs +3 -3
  228. package/esm2022/lib/sections/view-blog/view-blog.component.mjs +1 -1
  229. package/esm2022/lib/services/analytics.service.mjs +1 -1
  230. package/esm2022/lib/services/booking-product-cart.service.mjs +1 -1
  231. package/esm2022/lib/services/cart.service.mjs +1 -1
  232. package/esm2022/lib/services/endUser.service.mjs +1 -1
  233. package/esm2022/lib/services/image-upload-service.service.mjs +1 -1
  234. package/esm2022/lib/services/rest.service.mjs +2 -2
  235. package/esm2022/lib/services/sanitizeHtml.mjs +1 -1
  236. package/esm2022/lib/services/storage.service.mjs +1 -1
  237. package/esm2022/lib/styles/gradient-extension.mjs +1 -1
  238. package/esm2022/lib/styles/index.mjs +1 -1
  239. package/esm2022/lib/styles/style.model.mjs +1 -1
  240. package/esm2022/lib/styles/text-size.extension.mjs +1 -1
  241. package/esm2022/lib/styles/types.mjs +1 -1
  242. package/esm2022/lib/tokens/api-token.mjs +1 -1
  243. package/esm2022/public-api.mjs +1 -1
  244. package/fesm2022/simpo-component-library.mjs +230 -217
  245. package/fesm2022/simpo-component-library.mjs.map +1 -1
  246. package/package.json +1 -1
  247. package/simpo-component-library-3.6.968.tgz +0 -0
  248. package/simpo-component-library-3.6.965.tgz +0 -0
@@ -187,11 +187,11 @@ export class MediaSelectorComponent {
187
187
  });
188
188
  }
189
189
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MediaSelectorComponent, deps: [{ token: i1.ImageUplaodService }, { token: i2.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i3.MatSnackBar }, { token: i4.ElementServiceService }], target: i0.ɵɵFactoryTarget.Component }); }
190
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MediaSelectorComponent, isStandalone: true, selector: "simpo-media-selector", viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<section class=\"h-100 d-flex flex-column main_section\">\r\n <div class=\"header d-flex justify-content-between align-items-center\">\r\n <div class=\"heading\">Upload Image</div>\r\n <mat-icon (click)=\"_dialogRef.close()\"\r\n class=\"d-flex align-items-center justify-content-center f-18 cp\">close</mat-icon>\r\n </div>\r\n <div class=\"body_container d-flex flex-column\">\r\n <div class=\"tabs d-flex align-items-center justify-content-between\">\r\n <div *ngFor=\"let tab of tabs\" [ngClass]=\"{'selectedTab': activeTab === tab}\" (click)=\"activeTab = tab\">{{tab}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"inner_part flex-1 h-100\">\r\n <ng-container *ngIf=\"activeTab === 'Unsplash'\">\r\n <ng-container *ngTemplateOutlet=\"unsplashImagesTemplate\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"activeTab === 'Upload'\">\r\n <ng-container *ngTemplateOutlet=\"uploadImageTemplate\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"activeTab === 'Library'\">\r\n <ng-container *ngTemplateOutlet=\"imageLibraryTemplate\"></ng-container>\r\n </ng-container>\r\n\r\n <div class=\"uploadButton d-flex\" *ngIf=\"this.selectedImage.size > 0\">\r\n <button (click)=\"uploadImage()\" [disabled]=\"buttonLoader\">\r\n <span *ngIf=\"buttonLoader\"><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Upload Image</span></button>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<ng-template #unsplashImagesTemplate>\r\n\r\n <div class=\"input-container d-flex align-items-center\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search images\" [formControl]=\"searchControl\">\r\n </div>\r\n <cdk-virtual-scroll-viewport [itemSize]=\"imageSize\" [minBufferPx]=\"800\" [maxBufferPx]=\"1600\" class=\"scroll-container\">\r\n <div class=\"row image-container\">\r\n <div class=\"col-md-3 col-6\" *cdkVirtualFor=\"let image of unsplashImages\">\r\n <img [lazyLoad]=\"image.urls.thumb\" [errorImage]=\"'assets/error.jpg'\" (click)=\"selectUnsplashImage(image)\"\r\n [ngClass]=\"{'selectedImage': selectedImage.has(image.id)}\" alt=\"Image\" class=\"cp\" />\r\n </div>\r\n </div>\r\n </cdk-virtual-scroll-viewport>\r\n\r\n <p *ngIf=\"isLoading\">Loading more results...</p>\r\n\r\n</ng-template>\r\n\r\n<ng-template #uploadImageTemplate>\r\n <div>\r\n <div class=\"image-upload-container\">\r\n <div class=\"upload-img-container d-flex align-items-center justify-content-center\">\r\n <img lazy\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\r\n alt=\"upload-image\" class=\"upload-img\">\r\n </div>\r\n <div class=\"text-container text-center\">\r\n <div class=\"top-text\">Choose a file or drag and drop it here</div>\r\n <div class=\"middle-text\">JPEG, PNG formats up to 50MB</div>\r\n <div class=\"upload-btn d-flex align-items-center justify-content-center\">\r\n <div class=\"uploads cp\" (click)=\"fileInput.click()\">\r\n Upload\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <input type=\"file\" style=\"display: none\" (change)=\"uploadImageFromSystem($event)\" [multiple]=\"multiple\"\r\n accept=\"image/png, image/jpeg, image/jpg, image/gif , video/mp4\" #fileInput />\r\n\r\n <div class=\"row image-container mt-3 h-30-overflow\">\r\n <ng-container *ngFor=\"let image of selectedImage | keyvalue\">\r\n <div class=\"col-md-4 systemImage\" *ngIf=\"image.value.file\">\r\n <img [src]=\"image.value.assets[0].url\" alt=\"Image\"\r\n *ngIf=\"!image.value.assets[0].url?.includes('data:video')\" />\r\n <video [src]=\"image.value.assets[0].url\" class=\"w-100 h-100\"\r\n *ngIf=\"image.value.assets[0].url?.includes('data:video')\" muted loop></video>\r\n <mat-icon (click)=\"deleteSystemImage(image.key)\">delete</mat-icon>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #imageLibraryTemplate>\r\n <div class=\"row image-container mt-3 h-75-overflow\">\r\n <ng-container *ngIf=\"imageLibrary.length > 0; else emptyScreen\">\r\n <ng-container *ngFor=\"let image of imageLibrary\">\r\n <div class=\"col-md-4 col-6\">\r\n <img [src]=\"image.assets[0].url\" alt=\"Image\" (click)=\"selectFromImageLibrary(image)\"\r\n [ngClass]=\"{'selectedImage': selectedImage.has(image.uniqueId)}\"\r\n *ngIf=\"!image.assets[0].url?.includes('.mp4')\" />\r\n <video [src]=\"image.assets[0].url\" class=\"w-100 h-100\" (click)=\"selectFromImageLibrary(image)\"\r\n [ngClass]=\"{'selectedImage': selectedImage.has(image.uniqueId)}\"\r\n *ngIf=\"image.assets[0].url?.includes('.mp4')\" muted loop></video>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-container d-flex justify-content-center align-items-center w-100 flex-column\">\r\n <div class=\"empty-img-container d-flex justify-content-center align-items-center\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/935737c1743411798188image%20%287%29.png\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"empty-main-text\">\r\n Uh-oh!\r\n </div>\r\n <div class=\"sub-text-1\">\r\n No images here\r\n </div>\r\n <div class=\"sub-text-2\">\r\n I looked left, right\u2026 even turned around! Still nothing\r\n </div>\r\n </div>\r\n </ng-template>\r\n</ng-template>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}section{overflow:hidden}img{width:100%;height:150px}.scroll-container{height:90%;width:100%;overflow-y:scroll}.selectedImage{position:relative;border-radius:10px;overflow:hidden;border:3px solid hsl(227,52%,36%)}.uploadButton{position:absolute;bottom:0;padding:10px;background:#fff;width:100%;justify-content:end;box-shadow:0 0 4px #00000040}.uploadButton button{background:var(--primary-bg-color);color:#fff;font-weight:600;border:unset;font-size:15px!important;padding:8px;border-radius:8px;width:15%!important}.systemImage{position:relative}.systemImage mat-icon{display:none}.systemImage:hover mat-icon{display:inline;position:absolute;right:15px;top:5px;color:red;cursor:pointer}.f-18{font-size:18px}.header{padding:10px;box-shadow:0 0 4px #00000040;flex-shrink:0}.header .heading{font-size:15px;font-weight:600;line-height:24px}.header mat-icon{color:#2d264b}.tabs{padding:20px;flex-shrink:0}.tabs div{width:22%;cursor:pointer;text-align:center;padding:8px}.selectedTab{background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-weight:500;color:#fff;box-shadow:0 0 4px #00000040;border-radius:10px;font-weight:600;position:relative}.selectedTab:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.input-container{padding:6px 10px;gap:10px;margin:0 20px 20px;box-shadow:0 0 4px #00000040;border-radius:13px}.input-container input{width:90%;border:unset;appearance:unset;outline:unset}.input-container img{width:20px;height:20px}.image-container{margin:0 20px 20px}.image-container div{margin-bottom:20px}.image-container div img{border-radius:13px}.image-upload-container{margin:0 40px;border-radius:17px;padding:15px;border:3px dashed rgba(44,44,44,.6)}.upload-img{width:12%;height:10%}.cp{cursor:pointer}.middle-text{font-size:15px;color:#686868}.top-text{background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-size:17px;font-weight:600}.uploads{width:20%;padding:8px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-size:17px;font-weight:600;position:relative;margin-top:15px}.uploads:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.h-30-overflow{height:calc(30vh + -0px);overflow-y:scroll}.h-75-overflow{height:calc(75vh + -0px);overflow-y:scroll}.empty-main-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.sub-text-1{font-size:19px;font-weight:600;color:#101010e5}.sub-text-2{font-size:16px;font-weight:600;color:#101010e5}@media screen and (max-width : 475px){.tabs div{width:30%!important}.uploadButton button{width:35%!important}.uploads{width:30%!important}.sub-text-2{text-align:center!important}img{height:150px}}.body_container{flex:1;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: LazyLoadImageModule }, { kind: "directive", type: i7.LazyLoadImageDirective, selector: "[lazyLoad]", inputs: ["lazyLoad", "defaultImage", "errorImage", "scrollTarget", "customObservable", "offset", "useSrcset", "decode", "debug"], outputs: ["onStateChange"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i8.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i8.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
190
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MediaSelectorComponent, isStandalone: true, selector: "simpo-media-selector", viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<section class=\"h-100 d-flex flex-column main_section\">\n <div class=\"header d-flex justify-content-between align-items-center\">\n <div class=\"heading\">Upload Image</div>\n <mat-icon (click)=\"_dialogRef.close()\"\n class=\"d-flex align-items-center justify-content-center f-18 cp\">close</mat-icon>\n </div>\n <div class=\"body_container d-flex flex-column\">\n <div class=\"tabs d-flex align-items-center justify-content-between\">\n <div *ngFor=\"let tab of tabs\" [ngClass]=\"{'selectedTab': activeTab === tab}\" (click)=\"activeTab = tab\">{{tab}}\n </div>\n </div>\n\n <div class=\"inner_part flex-1 h-100\">\n <ng-container *ngIf=\"activeTab === 'Unsplash'\">\n <ng-container *ngTemplateOutlet=\"unsplashImagesTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"activeTab === 'Upload'\">\n <ng-container *ngTemplateOutlet=\"uploadImageTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"activeTab === 'Library'\">\n <ng-container *ngTemplateOutlet=\"imageLibraryTemplate\"></ng-container>\n </ng-container>\n\n <div class=\"uploadButton d-flex\" *ngIf=\"this.selectedImage.size > 0\">\n <button (click)=\"uploadImage()\" [disabled]=\"buttonLoader\">\n <span *ngIf=\"buttonLoader\"><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\n <span *ngIf=\"!buttonLoader\">Upload Image</span></button>\n </div>\n </div>\n </div>\n</section>\n\n<ng-template #unsplashImagesTemplate>\n\n <div class=\"input-container d-flex align-items-center\">\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\n alt=\"search-bar-icon\">\n <input type=\"text\" placeholder=\"Search images\" [formControl]=\"searchControl\">\n </div>\n <cdk-virtual-scroll-viewport [itemSize]=\"imageSize\" [minBufferPx]=\"800\" [maxBufferPx]=\"1600\" class=\"scroll-container\">\n <div class=\"row image-container\">\n <div class=\"col-md-3 col-6\" *cdkVirtualFor=\"let image of unsplashImages\">\n <img [lazyLoad]=\"image.urls.thumb\" [errorImage]=\"'assets/error.jpg'\" (click)=\"selectUnsplashImage(image)\"\n [ngClass]=\"{'selectedImage': selectedImage.has(image.id)}\" alt=\"Image\" class=\"cp\" />\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <p *ngIf=\"isLoading\">Loading more results...</p>\n\n</ng-template>\n\n<ng-template #uploadImageTemplate>\n <div>\n <div class=\"image-upload-container\">\n <div class=\"upload-img-container d-flex align-items-center justify-content-center\">\n <img lazy\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\n alt=\"upload-image\" class=\"upload-img\">\n </div>\n <div class=\"text-container text-center\">\n <div class=\"top-text\">Choose a file or drag and drop it here</div>\n <div class=\"middle-text\">JPEG, PNG formats up to 50MB</div>\n <div class=\"upload-btn d-flex align-items-center justify-content-center\">\n <div class=\"uploads cp\" (click)=\"fileInput.click()\">\n Upload\n </div>\n </div>\n </div>\n </div>\n\n <input type=\"file\" style=\"display: none\" (change)=\"uploadImageFromSystem($event)\" [multiple]=\"multiple\"\n accept=\"image/png, image/jpeg, image/jpg, image/gif , video/mp4\" #fileInput />\n\n <div class=\"row image-container mt-3 h-30-overflow\">\n <ng-container *ngFor=\"let image of selectedImage | keyvalue\">\n <div class=\"col-md-4 systemImage\" *ngIf=\"image.value.file\">\n <img [src]=\"image.value.assets[0].url\" alt=\"Image\"\n *ngIf=\"!image.value.assets[0].url?.includes('data:video')\" />\n <video [src]=\"image.value.assets[0].url\" class=\"w-100 h-100\"\n *ngIf=\"image.value.assets[0].url?.includes('data:video')\" muted loop></video>\n <mat-icon (click)=\"deleteSystemImage(image.key)\">delete</mat-icon>\n </div>\n </ng-container>\n </div>\n\n </div>\n</ng-template>\n\n<ng-template #imageLibraryTemplate>\n <div class=\"row image-container mt-3 h-75-overflow\">\n <ng-container *ngIf=\"imageLibrary.length > 0; else emptyScreen\">\n <ng-container *ngFor=\"let image of imageLibrary\">\n <div class=\"col-md-4 col-6\">\n <img [src]=\"image.assets[0].url\" alt=\"Image\" (click)=\"selectFromImageLibrary(image)\"\n [ngClass]=\"{'selectedImage': selectedImage.has(image.uniqueId)}\"\n *ngIf=\"!image.assets[0].url?.includes('.mp4')\" />\n <video [src]=\"image.assets[0].url\" class=\"w-100 h-100\" (click)=\"selectFromImageLibrary(image)\"\n [ngClass]=\"{'selectedImage': selectedImage.has(image.uniqueId)}\"\n *ngIf=\"image.assets[0].url?.includes('.mp4')\" muted loop></video>\n </div>\n </ng-container>\n </ng-container>\n </div>\n <ng-template #emptyScreen>\n <div class=\"empty-container d-flex justify-content-center align-items-center w-100 flex-column\">\n <div class=\"empty-img-container d-flex justify-content-center align-items-center\">\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/935737c1743411798188image%20%287%29.png\"\n alt=\"\">\n </div>\n <div class=\"empty-main-text\">\n Uh-oh!\n </div>\n <div class=\"sub-text-1\">\n No images here\n </div>\n <div class=\"sub-text-2\">\n I looked left, right\u2026 even turned around! Still nothing\n </div>\n </div>\n </ng-template>\n</ng-template>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}section{overflow:hidden}img{width:100%;height:150px}.scroll-container{height:90%;width:100%;overflow-y:scroll}.selectedImage{position:relative;border-radius:10px;overflow:hidden;border:3px solid hsl(227,52%,36%)}.uploadButton{position:absolute;bottom:0;padding:10px;background:#fff;width:100%;justify-content:end;box-shadow:0 0 4px #00000040}.uploadButton button{background:var(--primary-bg-color);color:#fff;font-weight:600;border:unset;font-size:15px!important;padding:8px;border-radius:8px;width:15%!important}.systemImage{position:relative}.systemImage mat-icon{display:none}.systemImage:hover mat-icon{display:inline;position:absolute;right:15px;top:5px;color:red;cursor:pointer}.f-18{font-size:18px}.header{padding:10px;box-shadow:0 0 4px #00000040;flex-shrink:0}.header .heading{font-size:15px;font-weight:600;line-height:24px}.header mat-icon{color:#2d264b}.tabs{padding:20px;flex-shrink:0}.tabs div{width:22%;cursor:pointer;text-align:center;padding:8px}.selectedTab{background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-weight:500;color:#fff;box-shadow:0 0 4px #00000040;border-radius:10px;font-weight:600;position:relative}.selectedTab:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.input-container{padding:6px 10px;gap:10px;margin:0 20px 20px;box-shadow:0 0 4px #00000040;border-radius:13px}.input-container input{width:90%;border:unset;appearance:unset;outline:unset}.input-container img{width:20px;height:20px}.image-container{margin:0 20px 20px}.image-container div{margin-bottom:20px}.image-container div img{border-radius:13px}.image-upload-container{margin:0 40px;border-radius:17px;padding:15px;border:3px dashed rgba(44,44,44,.6)}.upload-img{width:12%;height:10%}.cp{cursor:pointer}.middle-text{font-size:15px;color:#686868}.top-text{background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-size:17px;font-weight:600}.uploads{width:20%;padding:8px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-size:17px;font-weight:600;position:relative;margin-top:15px}.uploads:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.h-30-overflow{height:calc(30vh + -0px);overflow-y:scroll}.h-75-overflow{height:calc(75vh + -0px);overflow-y:scroll}.empty-main-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.sub-text-1{font-size:19px;font-weight:600;color:#101010e5}.sub-text-2{font-size:16px;font-weight:600;color:#101010e5}@media screen and (max-width : 475px){.tabs div{width:30%!important}.uploadButton button{width:35%!important}.uploads{width:30%!important}.sub-text-2{text-align:center!important}img{height:150px}}.body_container{flex:1;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i5.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "ngmodule", type: LazyLoadImageModule }, { kind: "directive", type: i7.LazyLoadImageDirective, selector: "[lazyLoad]", inputs: ["lazyLoad", "defaultImage", "errorImage", "scrollTarget", "customObservable", "offset", "useSrcset", "decode", "debug"], outputs: ["onStateChange"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i8.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i8.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
191
191
  }
192
192
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MediaSelectorComponent, decorators: [{
193
193
  type: Component,
194
- args: [{ selector: 'simpo-media-selector', standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule, CdkVirtualScrollViewport, LazyLoadImageModule, ScrollingModule, MatIconModule], template: "<section class=\"h-100 d-flex flex-column main_section\">\r\n <div class=\"header d-flex justify-content-between align-items-center\">\r\n <div class=\"heading\">Upload Image</div>\r\n <mat-icon (click)=\"_dialogRef.close()\"\r\n class=\"d-flex align-items-center justify-content-center f-18 cp\">close</mat-icon>\r\n </div>\r\n <div class=\"body_container d-flex flex-column\">\r\n <div class=\"tabs d-flex align-items-center justify-content-between\">\r\n <div *ngFor=\"let tab of tabs\" [ngClass]=\"{'selectedTab': activeTab === tab}\" (click)=\"activeTab = tab\">{{tab}}\r\n </div>\r\n </div>\r\n\r\n <div class=\"inner_part flex-1 h-100\">\r\n <ng-container *ngIf=\"activeTab === 'Unsplash'\">\r\n <ng-container *ngTemplateOutlet=\"unsplashImagesTemplate\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"activeTab === 'Upload'\">\r\n <ng-container *ngTemplateOutlet=\"uploadImageTemplate\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"activeTab === 'Library'\">\r\n <ng-container *ngTemplateOutlet=\"imageLibraryTemplate\"></ng-container>\r\n </ng-container>\r\n\r\n <div class=\"uploadButton d-flex\" *ngIf=\"this.selectedImage.size > 0\">\r\n <button (click)=\"uploadImage()\" [disabled]=\"buttonLoader\">\r\n <span *ngIf=\"buttonLoader\"><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\r\n <span *ngIf=\"!buttonLoader\">Upload Image</span></button>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n\r\n<ng-template #unsplashImagesTemplate>\r\n\r\n <div class=\"input-container d-flex align-items-center\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\r\n alt=\"search-bar-icon\">\r\n <input type=\"text\" placeholder=\"Search images\" [formControl]=\"searchControl\">\r\n </div>\r\n <cdk-virtual-scroll-viewport [itemSize]=\"imageSize\" [minBufferPx]=\"800\" [maxBufferPx]=\"1600\" class=\"scroll-container\">\r\n <div class=\"row image-container\">\r\n <div class=\"col-md-3 col-6\" *cdkVirtualFor=\"let image of unsplashImages\">\r\n <img [lazyLoad]=\"image.urls.thumb\" [errorImage]=\"'assets/error.jpg'\" (click)=\"selectUnsplashImage(image)\"\r\n [ngClass]=\"{'selectedImage': selectedImage.has(image.id)}\" alt=\"Image\" class=\"cp\" />\r\n </div>\r\n </div>\r\n </cdk-virtual-scroll-viewport>\r\n\r\n <p *ngIf=\"isLoading\">Loading more results...</p>\r\n\r\n</ng-template>\r\n\r\n<ng-template #uploadImageTemplate>\r\n <div>\r\n <div class=\"image-upload-container\">\r\n <div class=\"upload-img-container d-flex align-items-center justify-content-center\">\r\n <img lazy\r\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\r\n alt=\"upload-image\" class=\"upload-img\">\r\n </div>\r\n <div class=\"text-container text-center\">\r\n <div class=\"top-text\">Choose a file or drag and drop it here</div>\r\n <div class=\"middle-text\">JPEG, PNG formats up to 50MB</div>\r\n <div class=\"upload-btn d-flex align-items-center justify-content-center\">\r\n <div class=\"uploads cp\" (click)=\"fileInput.click()\">\r\n Upload\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <input type=\"file\" style=\"display: none\" (change)=\"uploadImageFromSystem($event)\" [multiple]=\"multiple\"\r\n accept=\"image/png, image/jpeg, image/jpg, image/gif , video/mp4\" #fileInput />\r\n\r\n <div class=\"row image-container mt-3 h-30-overflow\">\r\n <ng-container *ngFor=\"let image of selectedImage | keyvalue\">\r\n <div class=\"col-md-4 systemImage\" *ngIf=\"image.value.file\">\r\n <img [src]=\"image.value.assets[0].url\" alt=\"Image\"\r\n *ngIf=\"!image.value.assets[0].url?.includes('data:video')\" />\r\n <video [src]=\"image.value.assets[0].url\" class=\"w-100 h-100\"\r\n *ngIf=\"image.value.assets[0].url?.includes('data:video')\" muted loop></video>\r\n <mat-icon (click)=\"deleteSystemImage(image.key)\">delete</mat-icon>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #imageLibraryTemplate>\r\n <div class=\"row image-container mt-3 h-75-overflow\">\r\n <ng-container *ngIf=\"imageLibrary.length > 0; else emptyScreen\">\r\n <ng-container *ngFor=\"let image of imageLibrary\">\r\n <div class=\"col-md-4 col-6\">\r\n <img [src]=\"image.assets[0].url\" alt=\"Image\" (click)=\"selectFromImageLibrary(image)\"\r\n [ngClass]=\"{'selectedImage': selectedImage.has(image.uniqueId)}\"\r\n *ngIf=\"!image.assets[0].url?.includes('.mp4')\" />\r\n <video [src]=\"image.assets[0].url\" class=\"w-100 h-100\" (click)=\"selectFromImageLibrary(image)\"\r\n [ngClass]=\"{'selectedImage': selectedImage.has(image.uniqueId)}\"\r\n *ngIf=\"image.assets[0].url?.includes('.mp4')\" muted loop></video>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-template #emptyScreen>\r\n <div class=\"empty-container d-flex justify-content-center align-items-center w-100 flex-column\">\r\n <div class=\"empty-img-container d-flex justify-content-center align-items-center\">\r\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/935737c1743411798188image%20%287%29.png\"\r\n alt=\"\">\r\n </div>\r\n <div class=\"empty-main-text\">\r\n Uh-oh!\r\n </div>\r\n <div class=\"sub-text-1\">\r\n No images here\r\n </div>\r\n <div class=\"sub-text-2\">\r\n I looked left, right\u2026 even turned around! Still nothing\r\n </div>\r\n </div>\r\n </ng-template>\r\n</ng-template>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}section{overflow:hidden}img{width:100%;height:150px}.scroll-container{height:90%;width:100%;overflow-y:scroll}.selectedImage{position:relative;border-radius:10px;overflow:hidden;border:3px solid hsl(227,52%,36%)}.uploadButton{position:absolute;bottom:0;padding:10px;background:#fff;width:100%;justify-content:end;box-shadow:0 0 4px #00000040}.uploadButton button{background:var(--primary-bg-color);color:#fff;font-weight:600;border:unset;font-size:15px!important;padding:8px;border-radius:8px;width:15%!important}.systemImage{position:relative}.systemImage mat-icon{display:none}.systemImage:hover mat-icon{display:inline;position:absolute;right:15px;top:5px;color:red;cursor:pointer}.f-18{font-size:18px}.header{padding:10px;box-shadow:0 0 4px #00000040;flex-shrink:0}.header .heading{font-size:15px;font-weight:600;line-height:24px}.header mat-icon{color:#2d264b}.tabs{padding:20px;flex-shrink:0}.tabs div{width:22%;cursor:pointer;text-align:center;padding:8px}.selectedTab{background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-weight:500;color:#fff;box-shadow:0 0 4px #00000040;border-radius:10px;font-weight:600;position:relative}.selectedTab:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.input-container{padding:6px 10px;gap:10px;margin:0 20px 20px;box-shadow:0 0 4px #00000040;border-radius:13px}.input-container input{width:90%;border:unset;appearance:unset;outline:unset}.input-container img{width:20px;height:20px}.image-container{margin:0 20px 20px}.image-container div{margin-bottom:20px}.image-container div img{border-radius:13px}.image-upload-container{margin:0 40px;border-radius:17px;padding:15px;border:3px dashed rgba(44,44,44,.6)}.upload-img{width:12%;height:10%}.cp{cursor:pointer}.middle-text{font-size:15px;color:#686868}.top-text{background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-size:17px;font-weight:600}.uploads{width:20%;padding:8px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-size:17px;font-weight:600;position:relative;margin-top:15px}.uploads:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.h-30-overflow{height:calc(30vh + -0px);overflow-y:scroll}.h-75-overflow{height:calc(75vh + -0px);overflow-y:scroll}.empty-main-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.sub-text-1{font-size:19px;font-weight:600;color:#101010e5}.sub-text-2{font-size:16px;font-weight:600;color:#101010e5}@media screen and (max-width : 475px){.tabs div{width:30%!important}.uploadButton button{width:35%!important}.uploads{width:30%!important}.sub-text-2{text-align:center!important}img{height:150px}}.body_container{flex:1;height:100%}\n"] }]
194
+ args: [{ selector: 'simpo-media-selector', standalone: true, imports: [CommonModule, FormsModule, ReactiveFormsModule, CdkVirtualScrollViewport, LazyLoadImageModule, ScrollingModule, MatIconModule], template: "<section class=\"h-100 d-flex flex-column main_section\">\n <div class=\"header d-flex justify-content-between align-items-center\">\n <div class=\"heading\">Upload Image</div>\n <mat-icon (click)=\"_dialogRef.close()\"\n class=\"d-flex align-items-center justify-content-center f-18 cp\">close</mat-icon>\n </div>\n <div class=\"body_container d-flex flex-column\">\n <div class=\"tabs d-flex align-items-center justify-content-between\">\n <div *ngFor=\"let tab of tabs\" [ngClass]=\"{'selectedTab': activeTab === tab}\" (click)=\"activeTab = tab\">{{tab}}\n </div>\n </div>\n\n <div class=\"inner_part flex-1 h-100\">\n <ng-container *ngIf=\"activeTab === 'Unsplash'\">\n <ng-container *ngTemplateOutlet=\"unsplashImagesTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"activeTab === 'Upload'\">\n <ng-container *ngTemplateOutlet=\"uploadImageTemplate\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"activeTab === 'Library'\">\n <ng-container *ngTemplateOutlet=\"imageLibraryTemplate\"></ng-container>\n </ng-container>\n\n <div class=\"uploadButton d-flex\" *ngIf=\"this.selectedImage.size > 0\">\n <button (click)=\"uploadImage()\" [disabled]=\"buttonLoader\">\n <span *ngIf=\"buttonLoader\"><i class=\"fas fa-circle-notch fa-spin\"></i>&nbsp;Loading</span>\n <span *ngIf=\"!buttonLoader\">Upload Image</span></button>\n </div>\n </div>\n </div>\n</section>\n\n<ng-template #unsplashImagesTemplate>\n\n <div class=\"input-container d-flex align-items-center\">\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/314661c1741844234442Vector%20%281%29.png\"\n alt=\"search-bar-icon\">\n <input type=\"text\" placeholder=\"Search images\" [formControl]=\"searchControl\">\n </div>\n <cdk-virtual-scroll-viewport [itemSize]=\"imageSize\" [minBufferPx]=\"800\" [maxBufferPx]=\"1600\" class=\"scroll-container\">\n <div class=\"row image-container\">\n <div class=\"col-md-3 col-6\" *cdkVirtualFor=\"let image of unsplashImages\">\n <img [lazyLoad]=\"image.urls.thumb\" [errorImage]=\"'assets/error.jpg'\" (click)=\"selectUnsplashImage(image)\"\n [ngClass]=\"{'selectedImage': selectedImage.has(image.id)}\" alt=\"Image\" class=\"cp\" />\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n\n <p *ngIf=\"isLoading\">Loading more results...</p>\n\n</ng-template>\n\n<ng-template #uploadImageTemplate>\n <div>\n <div class=\"image-upload-container\">\n <div class=\"upload-img-container d-flex align-items-center justify-content-center\">\n <img lazy\n src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/547500c1744698830343upload-one%20%281%29.png\"\n alt=\"upload-image\" class=\"upload-img\">\n </div>\n <div class=\"text-container text-center\">\n <div class=\"top-text\">Choose a file or drag and drop it here</div>\n <div class=\"middle-text\">JPEG, PNG formats up to 50MB</div>\n <div class=\"upload-btn d-flex align-items-center justify-content-center\">\n <div class=\"uploads cp\" (click)=\"fileInput.click()\">\n Upload\n </div>\n </div>\n </div>\n </div>\n\n <input type=\"file\" style=\"display: none\" (change)=\"uploadImageFromSystem($event)\" [multiple]=\"multiple\"\n accept=\"image/png, image/jpeg, image/jpg, image/gif , video/mp4\" #fileInput />\n\n <div class=\"row image-container mt-3 h-30-overflow\">\n <ng-container *ngFor=\"let image of selectedImage | keyvalue\">\n <div class=\"col-md-4 systemImage\" *ngIf=\"image.value.file\">\n <img [src]=\"image.value.assets[0].url\" alt=\"Image\"\n *ngIf=\"!image.value.assets[0].url?.includes('data:video')\" />\n <video [src]=\"image.value.assets[0].url\" class=\"w-100 h-100\"\n *ngIf=\"image.value.assets[0].url?.includes('data:video')\" muted loop></video>\n <mat-icon (click)=\"deleteSystemImage(image.key)\">delete</mat-icon>\n </div>\n </ng-container>\n </div>\n\n </div>\n</ng-template>\n\n<ng-template #imageLibraryTemplate>\n <div class=\"row image-container mt-3 h-75-overflow\">\n <ng-container *ngIf=\"imageLibrary.length > 0; else emptyScreen\">\n <ng-container *ngFor=\"let image of imageLibrary\">\n <div class=\"col-md-4 col-6\">\n <img [src]=\"image.assets[0].url\" alt=\"Image\" (click)=\"selectFromImageLibrary(image)\"\n [ngClass]=\"{'selectedImage': selectedImage.has(image.uniqueId)}\"\n *ngIf=\"!image.assets[0].url?.includes('.mp4')\" />\n <video [src]=\"image.assets[0].url\" class=\"w-100 h-100\" (click)=\"selectFromImageLibrary(image)\"\n [ngClass]=\"{'selectedImage': selectedImage.has(image.uniqueId)}\"\n *ngIf=\"image.assets[0].url?.includes('.mp4')\" muted loop></video>\n </div>\n </ng-container>\n </ng-container>\n </div>\n <ng-template #emptyScreen>\n <div class=\"empty-container d-flex justify-content-center align-items-center w-100 flex-column\">\n <div class=\"empty-img-container d-flex justify-content-center align-items-center\">\n <img src=\"https://prod-simpo.s3.ap-south-1.amazonaws.com/prod-images/935737c1743411798188image%20%287%29.png\"\n alt=\"\">\n </div>\n <div class=\"empty-main-text\">\n Uh-oh!\n </div>\n <div class=\"sub-text-1\">\n No images here\n </div>\n <div class=\"sub-text-2\">\n I looked left, right\u2026 even turned around! Still nothing\n </div>\n </div>\n </ng-template>\n</ng-template>", styles: ["*{font-family:var(--primary-font-family)}mat-icon{font-family:Material Icons!important}section{overflow:hidden}img{width:100%;height:150px}.scroll-container{height:90%;width:100%;overflow-y:scroll}.selectedImage{position:relative;border-radius:10px;overflow:hidden;border:3px solid hsl(227,52%,36%)}.uploadButton{position:absolute;bottom:0;padding:10px;background:#fff;width:100%;justify-content:end;box-shadow:0 0 4px #00000040}.uploadButton button{background:var(--primary-bg-color);color:#fff;font-weight:600;border:unset;font-size:15px!important;padding:8px;border-radius:8px;width:15%!important}.systemImage{position:relative}.systemImage mat-icon{display:none}.systemImage:hover mat-icon{display:inline;position:absolute;right:15px;top:5px;color:red;cursor:pointer}.f-18{font-size:18px}.header{padding:10px;box-shadow:0 0 4px #00000040;flex-shrink:0}.header .heading{font-size:15px;font-weight:600;line-height:24px}.header mat-icon{color:#2d264b}.tabs{padding:20px;flex-shrink:0}.tabs div{width:22%;cursor:pointer;text-align:center;padding:8px}.selectedTab{background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-weight:500;color:#fff;box-shadow:0 0 4px #00000040;border-radius:10px;font-weight:600;position:relative}.selectedTab:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.input-container{padding:6px 10px;gap:10px;margin:0 20px 20px;box-shadow:0 0 4px #00000040;border-radius:13px}.input-container input{width:90%;border:unset;appearance:unset;outline:unset}.input-container img{width:20px;height:20px}.image-container{margin:0 20px 20px}.image-container div{margin-bottom:20px}.image-container div img{border-radius:13px}.image-upload-container{margin:0 40px;border-radius:17px;padding:15px;border:3px dashed rgba(44,44,44,.6)}.upload-img{width:12%;height:10%}.cp{cursor:pointer}.middle-text{font-size:15px;color:#686868}.top-text{background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-size:17px;font-weight:600}.uploads{width:20%;padding:8px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent;font-size:17px;font-weight:600;position:relative;margin-top:15px}.uploads:before{content:\"\";position:absolute;inset:0;padding:1px;border-radius:10px;background:var(--primary-bg-color);mask:linear-gradient(white 0 0) content-box,linear-gradient(white 0 0);mask-composite:xor;mask-composite:exclude}.h-30-overflow{height:calc(30vh + -0px);overflow-y:scroll}.h-75-overflow{height:calc(75vh + -0px);overflow-y:scroll}.empty-main-text{font-weight:900;font-size:42px;background:var(--primary-bg-color);background-clip:text;-webkit-text-fill-color:transparent}.sub-text-1{font-size:19px;font-weight:600;color:#101010e5}.sub-text-2{font-size:16px;font-weight:600;color:#101010e5}@media screen and (max-width : 475px){.tabs div{width:30%!important}.uploadButton button{width:35%!important}.uploads{width:30%!important}.sub-text-2{text-align:center!important}img{height:150px}}.body_container{flex:1;height:100%}\n"] }]
195
195
  }], ctorParameters: () => [{ type: i1.ImageUplaodService }, { type: i2.MatDialogRef }, { type: undefined, decorators: [{
196
196
  type: Inject,
197
197
  args: [MAT_DIALOG_DATA]
@@ -199,4 +199,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
199
199
  type: ViewChild,
200
200
  args: [CdkVirtualScrollViewport]
201
201
  }] } });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9tZWRpYS1zZWxlY3Rvci9tZWRpYS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL21lZGlhLXNlbGVjdG9yL21lZGlhLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBaUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFXdkQsTUFBTSxPQUFPLHNCQUFzQjtJQWVqQyxZQUFvQixrQkFBc0MsRUFDaEQsVUFBZ0QsRUFDdkIsVUFBZSxFQUN4QyxRQUFxQixFQUNyQixhQUFxQztRQUozQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ2hELGVBQVUsR0FBVixVQUFVLENBQXNDO1FBQ3ZCLGVBQVUsR0FB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ZUFBZTttR0FqQmQsc0JBQXNCLDBIQUN0Qix3QkFBd0IsZ0RDckJyQyxxMkxBMkhjLHdzR0QzR0YsWUFBWSwrakJBQUUsV0FBVyxzWkFBRSxtQkFBbUIsa05BQUUsd0JBQXdCLGdKQUFFLG1CQUFtQiw0UUFBRSxlQUFlLCtZQUFFLGFBQWE7OzRGQUk1SCxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQzs7MEJBcUJySSxNQUFNOzJCQUFDLGVBQWU7dUdBaEJZLFFBQVE7c0JBQTVDLFNBQVM7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEltYWdlVXBsYW9kU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ltYWdlLXVwbG9hZC1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBMYXp5TG9hZEltYWdlTW9kdWxlIH0gZnJvbSAnbmctbGF6eWxvYWQtaW1hZ2UnO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uL2VkaXRvci1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1tZWRpYS1zZWxlY3RvcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBMYXp5TG9hZEltYWdlTW9kdWxlLCBTY3JvbGxpbmdNb2R1bGUsIE1hdEljb25Nb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZWRpYS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL21lZGlhLXNlbGVjdG9yLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZWRpYVNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHZpZXdwb3J0ITogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xyXG5cclxuICB0YWJzOiBzdHJpbmdbXSA9IFsnVW5zcGxhc2gnLCAnVXBsb2FkJywgJ0xpYnJhcnknXTtcclxuICBhY3RpdmVUYWI6IHN0cmluZyA9ICdVbnNwbGFzaCc7XHJcbiAgc2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgcGFnZU5vOiBudW1iZXIgPSAxO1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHVuc3BsYXNoSW1hZ2VzOiBhbnlbXSA9IFtdO1xyXG4gIGltYWdlTGlicmFyeTogYW55W10gPSBbXTtcclxuICBpbWFnZVNpemUgPSA1MDtcclxuICBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkSW1hZ2U6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwPHN0cmluZywgYW55PjtcclxuICBidXR0b25Mb2FkZXI6IGJvb2xlYW49IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGltYWdlVXBsb2FkU2VydmljZTogSW1hZ2VVcGxhb2RTZXJ2aWNlLFxyXG4gICAgcHVibGljICBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8TWVkaWFTZWxlY3RvckNvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBkaWFsb2dEYXRhOiBhbnksXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgZWRpdG9yU2VydmljZSA6IEVsZW1lbnRTZXJ2aWNlU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5tdWx0aXBsZSA9IHRoaXMuZGlhbG9nRGF0YT8ubXVsdGlwbGUgPz8gdHJ1ZTtcclxuICAgIHRoaXMuc2VhcmNoVW5zcGxhc2hJbWFnZXMoKTtcclxuICAgIHRoaXMuZ2V0SW1hZ2VMaWJyYXJ5KCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnNldHVwSW5maW5pdGVTY3JvbGwoKTtcclxuICB9XHJcblxyXG4gIGdldEltYWdlTGlicmFyeSgpIHtcclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5nZXRJbWFnZUxpYnJhcnkoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaW1hZ2VMaWJyYXJ5ID0gcmVzPy5kYXRhPy5jb250ZW50IHx8IFtdO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKiDinIUgU2VhcmNoIEFQSSB3aXRoIGRlYm91bmNlIHRvIHJlZHVjZSB1bm5lY2Vzc2FyeSBjYWxscyAqL1xyXG4gIHNlYXJjaFVuc3BsYXNoSW1hZ2VzKCkge1xyXG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZShcclxuICAgICAgICBzdGFydFdpdGgoJycpLCAvLyBMb2FkIGltYWdlcyBpbml0aWFsbHlcclxuICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSwgLy8gV2FpdCA1MDBtcyBhZnRlciB0eXBpbmcgc3RvcHNcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCAvLyBPbmx5IGNhbGwgQVBJIGlmIHZhbHVlIGNoYW5nZXNcclxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wYWdlTm8gPSAxO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VVcGxvYWRTZXJ2aWNlLnNlYXJjaFBob3Rvc0luVW5zcGxhc2godmFsdWUgfHwgJ1RlY2hub2xvZ3knLCB0aGlzLnBhZ2VObyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHRzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnVuc3BsYXNoSW1hZ2VzID0gcmVzdWx0cy5yZXN1bHRzO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiDinIUgSW5maW5pdGUgU2Nyb2xsICovXHJcbiAgc2V0dXBJbmZpbml0ZVNjcm9sbCgpIHtcclxuICAgIHRoaXMudmlld3BvcnQuZWxlbWVudFNjcm9sbGVkKClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDIwMCksIC8vIOKchSBXYWl0IDIwMG1zIGJlZm9yZSBjaGVja2luZ1xyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgLy8g4pyFIE9ubHkgdHJpZ2dlciBpZiB2YWx1ZSBjaGFuZ2VzXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZW5kID0gdGhpcy52aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCdib3R0b20nKTtcclxuXHJcbiAgICAgICAgaWYgKGVuZCA8IDMwMCAmJiAhdGhpcy5pc0xvYWRpbmcpIHsgLy8g4pyFIFRyaWdnZXIgb25seSB3aGVuIGNsb3NlIHRvIHRoZSBib3R0b21cclxuICAgICAgICAgIHRoaXMubG9hZE1vcmVJbWFnZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIOKchSBMb2FkIE1vcmUgSW1hZ2VzICovXHJcbiAgbG9hZE1vcmVJbWFnZXMoKSB7XHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHJldHVybjsgLy8g4pyFIFByZXZlbnQgbXVsdGlwbGUgcmVxdWVzdHNcclxuXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnBhZ2VObysrO1xyXG5cclxuICAgIHRoaXMuaW1hZ2VVcGxvYWRTZXJ2aWNlLnNlYXJjaFBob3Rvc0luVW5zcGxhc2godGhpcy5zZWFyY2hDb250cm9sLnZhbHVlIHx8ICdUZWNobm9sb2d5JywgdGhpcy5wYWdlTm8pXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudW5zcGxhc2hJbWFnZXMgPSBbLi4udGhpcy51bnNwbGFzaEltYWdlcywgLi4ucmVzdWx0cy5yZXN1bHRzXTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsgLy8g4pyFIEVuc3VyZSBpdCdzIHJlc2V0IGV2ZW4gb24gZmFpbHVyZVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFVuc3BsYXNoSW1hZ2UoaW1hZ2U6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKVxyXG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBuZXcgTWFwPGFueSwgYW55PjtcclxuXHJcbiAgICBsZXQgdXBsb2FkSW1hZ2U6IGFueSA9IHtcclxuICAgICAgYnVzaW5lc3NJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcclxuICAgICAgdW5pcXVlSWQ6IGltYWdlLmlkLFxyXG4gICAgICBhc3NldHM6IFt7XHJcbiAgICAgICAgdXJsOiBpbWFnZS51cmxzLnJhdyxcclxuICAgICAgICB3aWR0aDogaW1hZ2Uud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBpbWFnZS5oZWlnaHRcclxuICAgICAgfV0sXHJcbiAgICAgIGF1dGhvcjoge1xyXG4gICAgICAgIGlkOiBpbWFnZS51c2VyLmlkLFxyXG4gICAgICAgIHVzZXJOYW1lOiBpbWFnZS51c2VyLnVzZXJuYW1lLFxyXG4gICAgICAgIG5hbWU6IGltYWdlLnVzZXIubmFtZSxcclxuICAgICAgICB0d2l0dGVyVXNlck5hbWU6IGltYWdlLnVzZXIudHdpdHRlcl91c2VybmFtZSxcclxuICAgICAgICBwb3J0Rm9saW9Vcmw6IGltYWdlLnVzZXIucG9ydGZvbGlvX3VybCxcclxuICAgICAgICBpbnN0YWdyYW1Vc2VyTmFtZTogaW1hZ2UudXNlci5pbnN0YWdyYW1fdXNlcm5hbWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIG1lZGlhOiBcIlVOU1BMQVNIXCIsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbWFnZS5oYXMoaW1hZ2UuaWQpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5kZWxldGUoaW1hZ2UuaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldChpbWFnZS5pZCwgdXBsb2FkSW1hZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkSW1hZ2VGcm9tU3lzdGVtKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSlcclxuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbmV3IE1hcDxhbnksIGFueT47XHJcblxyXG4gICAgbGV0IGZpbGVzID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xyXG4gICAgY29uc3QgbWF4aW11bUZpbGVTaXplID0gNCAqIDEwMjQgKiAxMDI0OyAvLyBNYXggaXMgNG1iXHJcblxyXG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xyXG4gICAgICBpZiAobWF4aW11bUZpbGVTaXplIDwgZmlsZS5zaXplKSB7XHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdNYXhpbXVtIGZpbGUgc2l6ZSBsaW1pdCBpcyA0TUInLCAnY2xvc2UnLCB7IGR1cmF0aW9uOiAxNTAwIH0pXHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICBjb25zdCBpbWFnZTogYW55ID0ge1xyXG4gICAgICAgIGJ1c2luZXNzSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXHJcbiAgICAgICAgdW5pcXVlSWQ6IGZpbGUubmFtZSArICdfJyArIGZpbGUuc2l6ZSxcclxuICAgICAgICBibHVySGFzaDogbnVsbCxcclxuICAgICAgICBhc3NldHM6IFt7XHJcbiAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgIGhlaWdodDogMCxcclxuICAgICAgICAgIGJsdXJoYXNoOiAnJyxcclxuICAgICAgICAgIHVybDogJycsXHJcbiAgICAgICAgfV0sXHJcbiAgICAgICAgYXV0aG9yOiBudWxsLFxyXG4gICAgICAgIG1lZGlhOiAnREVWSUNFJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogZmlsZS5uYW1lLFxyXG4gICAgICAgIGFsdERlc2NyaXB0aW9uOiBmaWxlLm5hbWUsXHJcbiAgICAgICAgZmlsZTogZmlsZSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGltYWdlLmFzc2V0c1swXS51cmwgPSByZXNwb25zZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEltYWdlLmhhcyhpbWFnZS51bmlxdWVJZCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSW1hZ2Uuc2V0KGltYWdlLnVuaXF1ZUlkLCBpbWFnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZVN5c3RlbUltYWdlKGltYWdlSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWxlY3RlZEltYWdlLmRlbGV0ZShpbWFnZUlkKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEZyb21JbWFnZUxpYnJhcnkoaW1hZ2U6IGFueSkge1xyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKVxyXG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBuZXcgTWFwPGFueSwgYW55PjtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEltYWdlLmhhcyhpbWFnZS51bmlxdWVJZCkpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLmRlbGV0ZShpbWFnZS51bmlxdWVJZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2Uuc2V0KGltYWdlLnVuaXF1ZUlkLCBpbWFnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWRJbWFnZSgpIHtcclxuICAgIHRoaXMuYnV0dG9uTG9hZGVyID10cnVlO1xyXG4gICAgbGV0IHJlcXVlc3Q6IGFueVtdID0gW107XHJcblxyXG4gICAgZm9yKGxldCBpbWFnZSBvZiB0aGlzLnNlbGVjdGVkSW1hZ2UudmFsdWVzKCkpIHtcclxuICAgICAgaWYgKGltYWdlLmZpbGUpIHtcclxuICAgICAgICBjb25zdCBmaWxlVXJsOiBhbnkgPVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5pbWFnZVVwbG9hZFNlcnZpY2UudXBsb2FkRmlsZUluQVdTKFxyXG4gICAgICAgICAgICBpbWFnZS5maWxlLFxyXG4gICAgICAgICAgICAnbGlicmFyeS1tZWRpYSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgaW1hZ2UuYXNzZXRzWzBdLnVybCA9IGZpbGVVcmw7XHJcbiAgICAgIH1cclxuICAgICAgcmVxdWVzdC5wdXNoKGltYWdlKTtcclxuICAgIH1cclxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5zYXZlSW1hZ2VzVG9CdXNpbmVzc0xpYnJhcnkoe2RhdGE6IHJlcXVlc3R9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHJlcXVlc3QpO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlcj1mYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJoLTEwMCBkLWZsZXggZmxleC1jb2x1bW4gbWFpbl9zZWN0aW9uXCI+XHJcbiAgPGRpdiBjbGFzcz1cImhlYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPlVwbG9hZCBJbWFnZTwvZGl2PlxyXG4gICAgPG1hdC1pY29uIChjbGljayk9XCJfZGlhbG9nUmVmLmNsb3NlKClcIlxyXG4gICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmLTE4IGNwXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJib2R5X2NvbnRhaW5lciBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJzIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIiBbbmdDbGFzc109XCJ7J3NlbGVjdGVkVGFiJzogYWN0aXZlVGFiID09PSB0YWJ9XCIgKGNsaWNrKT1cImFjdGl2ZVRhYiA9IHRhYlwiPnt7dGFifX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXJfcGFydCBmbGV4LTEgaC0xMDBcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ1Vuc3BsYXNoJ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1bnNwbGFzaEltYWdlc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ1VwbG9hZCdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXBsb2FkSW1hZ2VUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdMaWJyYXJ5J1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbWFnZUxpYnJhcnlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRCdXR0b24gZC1mbGV4XCIgKm5nSWY9XCJ0aGlzLnNlbGVjdGVkSW1hZ2Uuc2l6ZSA+IDBcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ1cGxvYWRJbWFnZSgpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkxvYWRlclwiPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJidXR0b25Mb2FkZXJcIj48aSBjbGFzcz1cImZhcyBmYS1jaXJjbGUtbm90Y2ggZmEtc3BpblwiPjwvaT4mbmJzcDtMb2FkaW5nPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYnV0dG9uTG9hZGVyXCI+VXBsb2FkIEltYWdlPC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48bmctdGVtcGxhdGUgI3Vuc3BsYXNoSW1hZ2VzVGVtcGxhdGU+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzMxNDY2MWMxNzQxODQ0MjM0NDQyVmVjdG9yJTIwJTI4MSUyOS5wbmdcIlxyXG4gICAgICBhbHQ9XCJzZWFyY2gtYmFyLWljb25cIj5cclxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGltYWdlc1wiIFtmb3JtQ29udHJvbF09XCJzZWFyY2hDb250cm9sXCI+XHJcbiAgPC9kaXY+XHJcbiAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBbaXRlbVNpemVdPVwiaW1hZ2VTaXplXCIgW21pbkJ1ZmZlclB4XT1cIjgwMFwiIFttYXhCdWZmZXJQeF09XCIxNjAwXCIgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IGltYWdlLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLTZcIiAqY2RrVmlydHVhbEZvcj1cImxldCBpbWFnZSBvZiB1bnNwbGFzaEltYWdlc1wiPlxyXG4gICAgICAgIDxpbWcgW2xhenlMb2FkXT1cImltYWdlLnVybHMudGh1bWJcIiBbZXJyb3JJbWFnZV09XCInYXNzZXRzL2Vycm9yLmpwZydcIiAoY2xpY2spPVwic2VsZWN0VW5zcGxhc2hJbWFnZShpbWFnZSlcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZEltYWdlJzogc2VsZWN0ZWRJbWFnZS5oYXMoaW1hZ2UuaWQpfVwiIGFsdD1cIkltYWdlXCIgY2xhc3M9XCJjcFwiIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XHJcblxyXG4gIDxwICpuZ0lmPVwiaXNMb2FkaW5nXCI+TG9hZGluZyBtb3JlIHJlc3VsdHMuLi48L3A+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN1cGxvYWRJbWFnZVRlbXBsYXRlPlxyXG4gIDxkaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW1hZ2UtdXBsb2FkLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkLWltZy1jb250YWluZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgPGltZyBsYXp5XHJcbiAgICAgICAgICBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzU0NzUwMGMxNzQ0Njk4ODMwMzQzdXBsb2FkLW9uZSUyMCUyODElMjkucG5nXCJcclxuICAgICAgICAgIGFsdD1cInVwbG9hZC1pbWFnZVwiIGNsYXNzPVwidXBsb2FkLWltZ1wiPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29udGFpbmVyIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvcC10ZXh0XCI+Q2hvb3NlIGEgZmlsZSBvciBkcmFnIGFuZCBkcm9wIGl0IGhlcmU8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlkZGxlLXRleHRcIj5KUEVHLCBQTkcgZm9ybWF0cyB1cCB0byA1ME1CPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1idG4gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBsb2FkcyBjcFwiIChjbGljayk9XCJmaWxlSW5wdXQuY2xpY2soKVwiPlxyXG4gICAgICAgICAgICBVcGxvYWRcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIChjaGFuZ2UpPVwidXBsb2FkSW1hZ2VGcm9tU3lzdGVtKCRldmVudClcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgICBhY2NlcHQ9XCJpbWFnZS9wbmcsIGltYWdlL2pwZWcsIGltYWdlL2pwZywgaW1hZ2UvZ2lmICwgdmlkZW8vbXA0XCIgI2ZpbGVJbnB1dCAvPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgaW1hZ2UtY29udGFpbmVyIG10LTMgaC0zMC1vdmVyZmxvd1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbWFnZSBvZiBzZWxlY3RlZEltYWdlIHwga2V5dmFsdWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgc3lzdGVtSW1hZ2VcIiAqbmdJZj1cImltYWdlLnZhbHVlLmZpbGVcIj5cclxuICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZS52YWx1ZS5hc3NldHNbMF0udXJsXCIgYWx0PVwiSW1hZ2VcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFpbWFnZS52YWx1ZS5hc3NldHNbMF0udXJsPy5pbmNsdWRlcygnZGF0YTp2aWRlbycpXCIgLz5cclxuICAgICAgICAgIDx2aWRlbyBbc3JjXT1cImltYWdlLnZhbHVlLmFzc2V0c1swXS51cmxcIiBjbGFzcz1cInctMTAwIGgtMTAwXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJpbWFnZS52YWx1ZS5hc3NldHNbMF0udXJsPy5pbmNsdWRlcygnZGF0YTp2aWRlbycpXCIgbXV0ZWQgbG9vcD48L3ZpZGVvPlxyXG4gICAgICAgICAgPG1hdC1pY29uIChjbGljayk9XCJkZWxldGVTeXN0ZW1JbWFnZShpbWFnZS5rZXkpXCI+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2ltYWdlTGlicmFyeVRlbXBsYXRlPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgaW1hZ2UtY29udGFpbmVyIG10LTMgaC03NS1vdmVyZmxvd1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImltYWdlTGlicmFyeS5sZW5ndGggPiAwOyBlbHNlIGVtcHR5U2NyZWVuXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltYWdlIG9mIGltYWdlTGlicmFyeVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBjb2wtNlwiPlxyXG4gICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlLmFzc2V0c1swXS51cmxcIiBhbHQ9XCJJbWFnZVwiIChjbGljayk9XCJzZWxlY3RGcm9tSW1hZ2VMaWJyYXJ5KGltYWdlKVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRJbWFnZSc6IHNlbGVjdGVkSW1hZ2UuaGFzKGltYWdlLnVuaXF1ZUlkKX1cIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFpbWFnZS5hc3NldHNbMF0udXJsPy5pbmNsdWRlcygnLm1wNCcpXCIgLz5cclxuICAgICAgICAgIDx2aWRlbyBbc3JjXT1cImltYWdlLmFzc2V0c1swXS51cmxcIiBjbGFzcz1cInctMTAwIGgtMTAwXCIgKGNsaWNrKT1cInNlbGVjdEZyb21JbWFnZUxpYnJhcnkoaW1hZ2UpXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZEltYWdlJzogc2VsZWN0ZWRJbWFnZS5oYXMoaW1hZ2UudW5pcXVlSWQpfVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaW1hZ2UuYXNzZXRzWzBdLnVybD8uaW5jbHVkZXMoJy5tcDQnKVwiIG11dGVkIGxvb3A+PC92aWRlbz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8bmctdGVtcGxhdGUgI2VtcHR5U2NyZWVuPlxyXG4gICAgPGRpdiBjbGFzcz1cImVtcHR5LWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgZmxleC1jb2x1bW5cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LWltZy1jb250YWluZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzkzNTczN2MxNzQzNDExNzk4MTg4aW1hZ2UlMjAlMjg3JTI5LnBuZ1wiXHJcbiAgICAgICAgICBhbHQ9XCJcIj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1tYWluLXRleHRcIj5cclxuICAgICAgICBVaC1vaCFcclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dC0xXCI+XHJcbiAgICAgICAgTm8gaW1hZ2VzIGhlcmVcclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dC0yXCI+XHJcbiAgICAgICAgSSBsb29rZWQgbGVmdCwgcmlnaHTigKYgZXZlbiB0dXJuZWQgYXJvdW5kISBTdGlsbCBub3RoaW5nXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9tZWRpYS1zZWxlY3Rvci9tZWRpYS1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL21lZGlhLXNlbGVjdG9yL21lZGlhLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBaUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFXdkQsTUFBTSxPQUFPLHNCQUFzQjtJQWVqQyxZQUFvQixrQkFBc0MsRUFDaEQsVUFBZ0QsRUFDdkIsVUFBZSxFQUN4QyxRQUFxQixFQUNyQixhQUFxQztRQUozQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ2hELGVBQVUsR0FBVixVQUFVLENBQXNDO1FBQ3ZCLGVBQVUsR0FB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ZUFBZTttR0FqQmQsc0JBQXNCLDBIQUN0Qix3QkFBd0IsZ0RDckJyQywrbUxBMkhjLHdzR0QzR0YsWUFBWSwrakJBQUUsV0FBVyxzWkFBRSxtQkFBbUIsa05BQUUsd0JBQXdCLGdKQUFFLG1CQUFtQiw0UUFBRSxlQUFlLCtZQUFFLGFBQWE7OzRGQUk1SCxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQzs7MEJBcUJySSxNQUFNOzJCQUFDLGVBQWU7dUdBaEJZLFFBQVE7c0JBQTVDLFNBQVM7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbWFnZVVwbGFvZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbWFnZS11cGxvYWQtc2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMYXp5TG9hZEltYWdlTW9kdWxlIH0gZnJvbSAnbmctbGF6eWxvYWQtaW1hZ2UnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRWxlbWVudFNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vZWRpdG9yLXNlcnZpY2Uuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBvLW1lZGlhLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgTGF6eUxvYWRJbWFnZU1vZHVsZSwgU2Nyb2xsaW5nTW9kdWxlLCBNYXRJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21lZGlhLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL21lZGlhLXNlbGVjdG9yLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIE1lZGlhU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHZpZXdwb3J0ITogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHRhYnM6IHN0cmluZ1tdID0gWydVbnNwbGFzaCcsICdVcGxvYWQnLCAnTGlicmFyeSddO1xuICBhY3RpdmVUYWI6IHN0cmluZyA9ICdVbnNwbGFzaCc7XG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICBwYWdlTm86IG51bWJlciA9IDE7XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICB1bnNwbGFzaEltYWdlczogYW55W10gPSBbXTtcbiAgaW1hZ2VMaWJyYXJ5OiBhbnlbXSA9IFtdO1xuICBpbWFnZVNpemUgPSA1MDtcbiAgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWRJbWFnZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+O1xuICBidXR0b25Mb2FkZXI6IGJvb2xlYW49IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW1hZ2VVcGxvYWRTZXJ2aWNlOiBJbWFnZVVwbGFvZFNlcnZpY2UsXG4gICAgcHVibGljICBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8TWVkaWFTZWxlY3RvckNvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHByaXZhdGUgZGlhbG9nRGF0YTogYW55LFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgZWRpdG9yU2VydmljZSA6IEVsZW1lbnRTZXJ2aWNlU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubXVsdGlwbGUgPSB0aGlzLmRpYWxvZ0RhdGE/Lm11bHRpcGxlID8/IHRydWU7XG4gICAgdGhpcy5zZWFyY2hVbnNwbGFzaEltYWdlcygpO1xuICAgIHRoaXMuZ2V0SW1hZ2VMaWJyYXJ5KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5zZXR1cEluZmluaXRlU2Nyb2xsKCk7XG4gIH1cblxuICBnZXRJbWFnZUxpYnJhcnkoKSB7XG4gICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldEltYWdlTGlicmFyeSgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuaW1hZ2VMaWJyYXJ5ID0gcmVzPy5kYXRhPy5jb250ZW50IHx8IFtdO1xuICAgIH0pXG4gIH1cblxuICAvKiog4pyFIFNlYXJjaCBBUEkgd2l0aCBkZWJvdW5jZSB0byByZWR1Y2UgdW5uZWNlc3NhcnkgY2FsbHMgKi9cbiAgc2VhcmNoVW5zcGxhc2hJbWFnZXMoKSB7XG4gICAgdGhpcy5zZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCgnJyksIC8vIExvYWQgaW1hZ2VzIGluaXRpYWxseVxuICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSwgLy8gV2FpdCA1MDBtcyBhZnRlciB0eXBpbmcgc3RvcHNcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgLy8gT25seSBjYWxsIEFQSSBpZiB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5wYWdlTm8gPSAxO1xuICAgICAgICAgIHJldHVybiB0aGlzLmltYWdlVXBsb2FkU2VydmljZS5zZWFyY2hQaG90b3NJblVuc3BsYXNoKHZhbHVlIHx8ICdUZWNobm9sb2d5JywgdGhpcy5wYWdlTm8pO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudW5zcGxhc2hJbWFnZXMgPSByZXN1bHRzLnJlc3VsdHM7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiDinIUgSW5maW5pdGUgU2Nyb2xsICovXG4gIHNldHVwSW5maW5pdGVTY3JvbGwoKSB7XG4gICAgdGhpcy52aWV3cG9ydC5lbGVtZW50U2Nyb2xsZWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgyMDApLCAvLyDinIUgV2FpdCAyMDBtcyBiZWZvcmUgY2hlY2tpbmdcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSAvLyDinIUgT25seSB0cmlnZ2VyIGlmIHZhbHVlIGNoYW5nZXNcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLnZpZXdwb3J0Lm1lYXN1cmVTY3JvbGxPZmZzZXQoJ2JvdHRvbScpO1xuXG4gICAgICAgIGlmIChlbmQgPCAzMDAgJiYgIXRoaXMuaXNMb2FkaW5nKSB7IC8vIOKchSBUcmlnZ2VyIG9ubHkgd2hlbiBjbG9zZSB0byB0aGUgYm90dG9tXG4gICAgICAgICAgdGhpcy5sb2FkTW9yZUltYWdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiDinIUgTG9hZCBNb3JlIEltYWdlcyAqL1xuICBsb2FkTW9yZUltYWdlcygpIHtcbiAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHJldHVybjsgLy8g4pyFIFByZXZlbnQgbXVsdGlwbGUgcmVxdWVzdHNcblxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBhZ2VObysrO1xuXG4gICAgdGhpcy5pbWFnZVVwbG9hZFNlcnZpY2Uuc2VhcmNoUGhvdG9zSW5VbnNwbGFzaCh0aGlzLnNlYXJjaENvbnRyb2wudmFsdWUgfHwgJ1RlY2hub2xvZ3knLCB0aGlzLnBhZ2VObylcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdHM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnVuc3BsYXNoSW1hZ2VzID0gWy4uLnRoaXMudW5zcGxhc2hJbWFnZXMsIC4uLnJlc3VsdHMucmVzdWx0c107XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7IC8vIOKchSBFbnN1cmUgaXQncyByZXNldCBldmVuIG9uIGZhaWx1cmVcbiAgICAgIH0pO1xuICB9XG5cbiAgc2VsZWN0VW5zcGxhc2hJbWFnZShpbWFnZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKVxuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlID0gbmV3IE1hcDxhbnksIGFueT47XG5cbiAgICBsZXQgdXBsb2FkSW1hZ2U6IGFueSA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXG4gICAgICB1bmlxdWVJZDogaW1hZ2UuaWQsXG4gICAgICBhc3NldHM6IFt7XG4gICAgICAgIHVybDogaW1hZ2UudXJscy5yYXcsXG4gICAgICAgIHdpZHRoOiBpbWFnZS53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBpbWFnZS5oZWlnaHRcbiAgICAgIH1dLFxuICAgICAgYXV0aG9yOiB7XG4gICAgICAgIGlkOiBpbWFnZS51c2VyLmlkLFxuICAgICAgICB1c2VyTmFtZTogaW1hZ2UudXNlci51c2VybmFtZSxcbiAgICAgICAgbmFtZTogaW1hZ2UudXNlci5uYW1lLFxuICAgICAgICB0d2l0dGVyVXNlck5hbWU6IGltYWdlLnVzZXIudHdpdHRlcl91c2VybmFtZSxcbiAgICAgICAgcG9ydEZvbGlvVXJsOiBpbWFnZS51c2VyLnBvcnRmb2xpb191cmwsXG4gICAgICAgIGluc3RhZ3JhbVVzZXJOYW1lOiBpbWFnZS51c2VyLmluc3RhZ3JhbV91c2VybmFtZSxcbiAgICAgIH0sXG4gICAgICBtZWRpYTogXCJVTlNQTEFTSFwiLFxuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW1hZ2UuaGFzKGltYWdlLmlkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLmRlbGV0ZShpbWFnZS5pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQoaW1hZ2UuaWQsIHVwbG9hZEltYWdlKTtcbiAgICB9XG4gIH1cblxuICB1cGxvYWRJbWFnZUZyb21TeXN0ZW0oZXZlbnQ6IGFueSkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSlcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZSA9IG5ldyBNYXA8YW55LCBhbnk+O1xuXG4gICAgbGV0IGZpbGVzID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIGNvbnN0IG1heGltdW1GaWxlU2l6ZSA9IDQgKiAxMDI0ICogMTAyNDsgLy8gTWF4IGlzIDRtYlxuXG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgICAgaWYgKG1heGltdW1GaWxlU2l6ZSA8IGZpbGUuc2l6ZSkge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ01heGltdW0gZmlsZSBzaXplIGxpbWl0IGlzIDRNQicsICdjbG9zZScsIHsgZHVyYXRpb246IDE1MDAgfSlcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgIGNvbnN0IGltYWdlOiBhbnkgPSB7XG4gICAgICAgIGJ1c2luZXNzSWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXG4gICAgICAgIHVuaXF1ZUlkOiBmaWxlLm5hbWUgKyAnXycgKyBmaWxlLnNpemUsXG4gICAgICAgIGJsdXJIYXNoOiBudWxsLFxuICAgICAgICBhc3NldHM6IFt7XG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgIGJsdXJoYXNoOiAnJyxcbiAgICAgICAgICB1cmw6ICcnLFxuICAgICAgICB9XSxcbiAgICAgICAgYXV0aG9yOiBudWxsLFxuICAgICAgICBtZWRpYTogJ0RFVklDRScsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBmaWxlLm5hbWUsXG4gICAgICAgIGFsdERlc2NyaXB0aW9uOiBmaWxlLm5hbWUsXG4gICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICB9O1xuXG4gICAgICByZWFkZXIub25sb2FkID0gKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaW1hZ2UuYXNzZXRzWzBdLnVybCA9IHJlc3BvbnNlLnRhcmdldC5yZXN1bHQ7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG5cbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEltYWdlLmhhcyhpbWFnZS51bmlxdWVJZCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLnNldChpbWFnZS51bmlxdWVJZCwgaW1hZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZVN5c3RlbUltYWdlKGltYWdlSWQ6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5kZWxldGUoaW1hZ2VJZCk7XG4gIH1cblxuICBzZWxlY3RGcm9tSW1hZ2VMaWJyYXJ5KGltYWdlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpXG4gICAgICB0aGlzLnNlbGVjdGVkSW1hZ2UgPSBuZXcgTWFwPGFueSwgYW55PjtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW1hZ2UuaGFzKGltYWdlLnVuaXF1ZUlkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlLmRlbGV0ZShpbWFnZS51bmlxdWVJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZS5zZXQoaW1hZ2UudW5pcXVlSWQsIGltYWdlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGxvYWRJbWFnZSgpIHtcbiAgICB0aGlzLmJ1dHRvbkxvYWRlciA9dHJ1ZTtcbiAgICBsZXQgcmVxdWVzdDogYW55W10gPSBbXTtcblxuICAgIGZvcihsZXQgaW1hZ2Ugb2YgdGhpcy5zZWxlY3RlZEltYWdlLnZhbHVlcygpKSB7XG4gICAgICBpZiAoaW1hZ2UuZmlsZSkge1xuICAgICAgICBjb25zdCBmaWxlVXJsOiBhbnkgPVxuICAgICAgICAgIGF3YWl0IHRoaXMuaW1hZ2VVcGxvYWRTZXJ2aWNlLnVwbG9hZEZpbGVJbkFXUyhcbiAgICAgICAgICAgIGltYWdlLmZpbGUsXG4gICAgICAgICAgICAnbGlicmFyeS1tZWRpYSdcbiAgICAgICAgICApO1xuICAgICAgICBpbWFnZS5hc3NldHNbMF0udXJsID0gZmlsZVVybDtcbiAgICAgIH1cbiAgICAgIHJlcXVlc3QucHVzaChpbWFnZSk7XG4gICAgfVxuICAgIHRoaXMuZWRpdG9yU2VydmljZS5zYXZlSW1hZ2VzVG9CdXNpbmVzc0xpYnJhcnkoe2RhdGE6IHJlcXVlc3R9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UocmVxdWVzdCk7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9hZGVyPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvYWRlcj1mYWxzZTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImgtMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBtYWluX3NlY3Rpb25cIj5cbiAgPGRpdiBjbGFzcz1cImhlYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5VcGxvYWQgSW1hZ2U8L2Rpdj5cbiAgICA8bWF0LWljb24gKGNsaWNrKT1cIl9kaWFsb2dSZWYuY2xvc2UoKVwiXG4gICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBmLTE4IGNwXCI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImJvZHlfY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJzIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCIgW25nQ2xhc3NdPVwieydzZWxlY3RlZFRhYic6IGFjdGl2ZVRhYiA9PT0gdGFifVwiIChjbGljayk9XCJhY3RpdmVUYWIgPSB0YWJcIj57e3RhYn19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpbm5lcl9wYXJ0IGZsZXgtMSBoLTEwMFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ1Vuc3BsYXNoJ1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidW5zcGxhc2hJbWFnZXNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdVcGxvYWQnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1cGxvYWRJbWFnZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ0xpYnJhcnknXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbWFnZUxpYnJhcnlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRCdXR0b24gZC1mbGV4XCIgKm5nSWY9XCJ0aGlzLnNlbGVjdGVkSW1hZ2Uuc2l6ZSA+IDBcIj5cbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidXBsb2FkSW1hZ2UoKVwiIFtkaXNhYmxlZF09XCJidXR0b25Mb2FkZXJcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImJ1dHRvbkxvYWRlclwiPjxpIGNsYXNzPVwiZmFzIGZhLWNpcmNsZS1ub3RjaCBmYS1zcGluXCI+PC9pPiZuYnNwO0xvYWRpbmc8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYnV0dG9uTG9hZGVyXCI+VXBsb2FkIEltYWdlPC9zcGFuPjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuXG48bmctdGVtcGxhdGUgI3Vuc3BsYXNoSW1hZ2VzVGVtcGxhdGU+XG5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzMxNDY2MWMxNzQxODQ0MjM0NDQyVmVjdG9yJTIwJTI4MSUyOS5wbmdcIlxuICAgICAgYWx0PVwic2VhcmNoLWJhci1pY29uXCI+XG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggaW1hZ2VzXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaENvbnRyb2xcIj5cbiAgPC9kaXY+XG4gIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgW2l0ZW1TaXplXT1cImltYWdlU2l6ZVwiIFttaW5CdWZmZXJQeF09XCI4MDBcIiBbbWF4QnVmZmVyUHhdPVwiMTYwMFwiIGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgaW1hZ2UtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLTZcIiAqY2RrVmlydHVhbEZvcj1cImxldCBpbWFnZSBvZiB1bnNwbGFzaEltYWdlc1wiPlxuICAgICAgICA8aW1nIFtsYXp5TG9hZF09XCJpbWFnZS51cmxzLnRodW1iXCIgW2Vycm9ySW1hZ2VdPVwiJ2Fzc2V0cy9lcnJvci5qcGcnXCIgKGNsaWNrKT1cInNlbGVjdFVuc3BsYXNoSW1hZ2UoaW1hZ2UpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkSW1hZ2UnOiBzZWxlY3RlZEltYWdlLmhhcyhpbWFnZS5pZCl9XCIgYWx0PVwiSW1hZ2VcIiBjbGFzcz1cImNwXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cblxuICA8cCAqbmdJZj1cImlzTG9hZGluZ1wiPkxvYWRpbmcgbW9yZSByZXN1bHRzLi4uPC9wPlxuXG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3VwbG9hZEltYWdlVGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPGRpdiBjbGFzcz1cImltYWdlLXVwbG9hZC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtaW1nLWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgPGltZyBsYXp5XG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9wcm9kLWltYWdlcy81NDc1MDBjMTc0NDY5ODgzMDM0M3VwbG9hZC1vbmUlMjAlMjgxJTI5LnBuZ1wiXG4gICAgICAgICAgYWx0PVwidXBsb2FkLWltYWdlXCIgY2xhc3M9XCJ1cGxvYWQtaW1nXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbnRhaW5lciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9wLXRleHRcIj5DaG9vc2UgYSBmaWxlIG9yIGRyYWcgYW5kIGRyb3AgaXQgaGVyZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWlkZGxlLXRleHRcIj5KUEVHLCBQTkcgZm9ybWF0cyB1cCB0byA1ME1CPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtYnRuIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRzIGNwXCIgKGNsaWNrKT1cImZpbGVJbnB1dC5jbGljaygpXCI+XG4gICAgICAgICAgICBVcGxvYWRcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIChjaGFuZ2UpPVwidXBsb2FkSW1hZ2VGcm9tU3lzdGVtKCRldmVudClcIiBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnLCBpbWFnZS9qcGcsIGltYWdlL2dpZiAsIHZpZGVvL21wNFwiICNmaWxlSW5wdXQgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgaW1hZ2UtY29udGFpbmVyIG10LTMgaC0zMC1vdmVyZmxvd1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1hZ2Ugb2Ygc2VsZWN0ZWRJbWFnZSB8IGtleXZhbHVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNCBzeXN0ZW1JbWFnZVwiICpuZ0lmPVwiaW1hZ2UudmFsdWUuZmlsZVwiPlxuICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZS52YWx1ZS5hc3NldHNbMF0udXJsXCIgYWx0PVwiSW1hZ2VcIlxuICAgICAgICAgICAgKm5nSWY9XCIhaW1hZ2UudmFsdWUuYXNzZXRzWzBdLnVybD8uaW5jbHVkZXMoJ2RhdGE6dmlkZW8nKVwiIC8+XG4gICAgICAgICAgPHZpZGVvIFtzcmNdPVwiaW1hZ2UudmFsdWUuYXNzZXRzWzBdLnVybFwiIGNsYXNzPVwidy0xMDAgaC0xMDBcIlxuICAgICAgICAgICAgKm5nSWY9XCJpbWFnZS52YWx1ZS5hc3NldHNbMF0udXJsPy5pbmNsdWRlcygnZGF0YTp2aWRlbycpXCIgbXV0ZWQgbG9vcD48L3ZpZGVvPlxuICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwiZGVsZXRlU3lzdGVtSW1hZ2UoaW1hZ2Uua2V5KVwiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2ltYWdlTGlicmFyeVRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwicm93IGltYWdlLWNvbnRhaW5lciBtdC0zIGgtNzUtb3ZlcmZsb3dcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaW1hZ2VMaWJyYXJ5Lmxlbmd0aCA+IDA7IGVsc2UgZW1wdHlTY3JlZW5cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltYWdlIG9mIGltYWdlTGlicmFyeVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgY29sLTZcIj5cbiAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2UuYXNzZXRzWzBdLnVybFwiIGFsdD1cIkltYWdlXCIgKGNsaWNrKT1cInNlbGVjdEZyb21JbWFnZUxpYnJhcnkoaW1hZ2UpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWRJbWFnZSc6IHNlbGVjdGVkSW1hZ2UuaGFzKGltYWdlLnVuaXF1ZUlkKX1cIlxuICAgICAgICAgICAgKm5nSWY9XCIhaW1hZ2UuYXNzZXRzWzBdLnVybD8uaW5jbHVkZXMoJy5tcDQnKVwiIC8+XG4gICAgICAgICAgPHZpZGVvIFtzcmNdPVwiaW1hZ2UuYXNzZXRzWzBdLnVybFwiIGNsYXNzPVwidy0xMDAgaC0xMDBcIiAoY2xpY2spPVwic2VsZWN0RnJvbUltYWdlTGlicmFyeShpbWFnZSlcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzZWxlY3RlZEltYWdlJzogc2VsZWN0ZWRJbWFnZS5oYXMoaW1hZ2UudW5pcXVlSWQpfVwiXG4gICAgICAgICAgICAqbmdJZj1cImltYWdlLmFzc2V0c1swXS51cmw/LmluY2x1ZGVzKCcubXA0JylcIiBtdXRlZCBsb29wPjwvdmlkZW8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI2VtcHR5U2NyZWVuPlxuICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1jb250YWluZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIGZsZXgtY29sdW1uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZW1wdHktaW1nLWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Byb2Qtc2ltcG8uczMuYXAtc291dGgtMS5hbWF6b25hd3MuY29tL3Byb2QtaW1hZ2VzLzkzNTczN2MxNzQzNDExNzk4MTg4aW1hZ2UlMjAlMjg3JTI5LnBuZ1wiXG4gICAgICAgICAgYWx0PVwiXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1tYWluLXRleHRcIj5cbiAgICAgICAgVWgtb2ghXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dC0xXCI+XG4gICAgICAgIE5vIGltYWdlcyBoZXJlXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdWItdGV4dC0yXCI+XG4gICAgICAgIEkgbG9va2VkIGxlZnQsIHJpZ2h04oCmIGV2ZW4gdHVybmVkIGFyb3VuZCEgU3RpbGwgbm90aGluZ1xuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -170,10 +170,10 @@ export class MyBookingsComponent {
170
170
  });
171
171
  }
172
172
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MyBookingsComponent, deps: [{ token: i1.RestService }, { token: i2.StorageServiceService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Component }); }
173
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MyBookingsComponent, isStandalone: true, selector: "simpo-my-bookings", providers: [MessageService], ngImport: i0, template: "<p-toast position=\"bottom-right\"></p-toast>\r\n\r\n<div class=\"mb-root\">\r\n <ng-container *ngIf=\"currentTab === 'LIST'\">\r\n <div class=\"mb-title\">My Bookings</div>\r\n\r\n <div class=\"mb-tabs\">\r\n <button type=\"button\" class=\"mb-tab\" [class.active]=\"profTab === 'upcoming'\" (click)=\"setProfTab('upcoming')\">Upcoming</button>\r\n <button type=\"button\" class=\"mb-tab\" [class.active]=\"profTab === 'past'\" (click)=\"setProfTab('past')\">Past</button>\r\n </div>\r\n\r\n <div class=\"mb-loading\" *ngIf=\"loading\">Loading your bookings\u2026</div>\r\n\r\n <div class=\"mb-rows\" *ngIf=\"!loading && !isEmpty\">\r\n <button type=\"button\" class=\"mb-row\" *ngFor=\"let b of rows\" (click)=\"viewBookingDetail(b)\">\r\n <div class=\"mb-row-stripe\" [ngClass]=\"b.mode === 'HOME_VISIT' ? 'stripe-home' : b.mode === 'VIDEO_CALL' ? 'stripe-video' : 'stripe-store'\"></div>\r\n <div class=\"mb-row-info\">\r\n <div class=\"mb-row-top\">\r\n <div class=\"mb-row-title\">{{title(b)}}</div>\r\n </div>\r\n <div class=\"mb-row-when\">{{when(b)}}</div>\r\n <div class=\"mb-row-detail\">{{detail(b)}}</div>\r\n </div>\r\n <div class=\"mb-row-end\">\r\n <span class=\"mb-status\" [ngClass]=\"statusClass(b.status)\">{{statusLabel(b.status)}}</span>\r\n </div>\r\n </button>\r\n </div>\r\n\r\n <div class=\"mb-empty\" *ngIf=\"isEmpty\">\r\n <mat-icon class=\"mb-empty-icon\">event_busy</mat-icon>\r\n <div class=\"mb-empty-title\">No {{profTab}} bookings yet.</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentTab === 'DETAIL' && selected\">\r\n <button type=\"button\" class=\"mb-back\" (click)=\"backToList()\">\r\n <mat-icon>arrow_back</mat-icon> Back to My Bookings\r\n </button>\r\n\r\n <div class=\"mb-detail-card\">\r\n <div class=\"mb-detail-header\">\r\n <div class=\"mb-detail-title-row\">\r\n <div class=\"mb-detail-title\">{{title(selected)}}</div>\r\n <span class=\"mb-status\" [ngClass]=\"statusClass(selected.status)\">{{statusLabel(selected.status)}}</span>\r\n </div>\r\n <div class=\"mb-detail-when\">{{when(selected)}}</div>\r\n </div>\r\n\r\n <div class=\"mb-detail-rows\">\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.services?.length\">\r\n <div class=\"mb-detail-k\">Services</div>\r\n <div class=\"mb-detail-v\">{{serviceNames(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.productLines?.length\">\r\n <div class=\"mb-detail-k\">Products</div>\r\n <div class=\"mb-detail-v\">{{productNames(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.customerDetail\">\r\n <div class=\"mb-detail-k\">Contact</div>\r\n <div class=\"mb-detail-v\">{{selected.customerDetail?.name}} \u00B7 {{selected.customerDetail?.phoneNumber}} \u00B7 {{selected.customerDetail?.email}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.mode === 'HOME_VISIT' && selected.addressDetails\">\r\n <div class=\"mb-detail-k\">Address</div>\r\n <div class=\"mb-detail-v\">{{selected.addressDetails?.addressLine1}}, {{selected.addressDetails?.city}}, {{selected.addressDetails?.state}} {{selected.addressDetails?.zipCode}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"servicePriceTotal(selected) > 0\">\r\n <div class=\"mb-detail-k\">Service price</div>\r\n <div class=\"mb-detail-v\">\u20B9{{servicePriceTotal(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.homeVisitCharge\">\r\n <div class=\"mb-detail-k\">Home visit charge</div>\r\n <div class=\"mb-detail-v\">\u20B9{{selected.homeVisitCharge}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\">\r\n <div class=\"mb-detail-k\">Total</div>\r\n <div class=\"mb-detail-v\">\u20B9{{totalDue(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\">\r\n <div class=\"mb-detail-k\">Paid</div>\r\n <div class=\"mb-detail-v\">{{paidLabel(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"pendingAmount(selected) > 0\">\r\n <div class=\"mb-detail-k\">Pending at appointment</div>\r\n <div class=\"mb-detail-v\">\u20B9{{pendingAmount(selected)}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-video-link\" *ngIf=\"selected.mode === 'VIDEO_CALL' && selected.videoCallLink && selected.status !== 'CANCELLED'\">\r\n <mat-icon>videocam</mat-icon>\r\n <a [href]=\"selected.videoCallLink\" target=\"_blank\">{{selected.videoCallLink}}</a>\r\n </div>\r\n\r\n <ng-container *ngIf=\"canCancelSelected\">\r\n <div class=\"mb-policy\" *ngIf=\"cancellationPolicy\">\r\n <div class=\"mb-policy-title\">{{cancellationPolicy.title}}</div>\r\n <div class=\"mb-policy-text\">{{cancellationPolicy.policyDetails}}</div>\r\n </div>\r\n <button type=\"button\" class=\"mb-cancel-btn\" [disabled]=\"cancelling\" (click)=\"cancelBooking()\">\r\n {{cancelling ? 'Cancelling\u2026' : 'Cancel booking'}}\r\n </button>\r\n </ng-container>\r\n\r\n <div class=\"mb-cancelled-note\" *ngIf=\"selected.status === 'CANCELLED'\">This booking has been cancelled.</div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".mb-root{display:flex;flex-direction:column;gap:16px;padding:4px 0 24px}.mb-title{font-size:20px;font-weight:600;color:#1b2436}.mb-tabs{display:flex;background:#f5f2ee;border-radius:8px;padding:4px;gap:4px;width:fit-content}.mb-tab{border:none;background:transparent;border-radius:6px;padding:8px 18px;font-size:13.5px;font-weight:500;color:#8a94a3;cursor:pointer}.mb-tab.active{background:#fff;color:#1b2436;font-weight:600;box-shadow:0 1px 3px #00000012}.mb-loading{font-size:13.5px;color:#8a94a3;padding:20px 0}.mb-rows{display:flex;flex-direction:column;gap:12px}.mb-row{border:1px solid #EEE9E3;border-radius:10px;padding:16px 18px;display:flex;align-items:flex-start;gap:14px;background:#fff;cursor:pointer;text-align:left;width:100%}.mb-row-stripe{width:3px;align-self:stretch;border-radius:999px;flex:none}.stripe-home{background:#16233a}.stripe-video{background:#7c3a11}.stripe-store{background:#8a94a3}.mb-row-info{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.mb-row-title{font-size:14.5px;font-weight:600;color:#1b2436}.mb-row-when{font-size:12.5px;color:#6b7688}.mb-row-detail{font-size:12px;color:#8a94a3}.mb-row-end{flex:none}.mb-status{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:600;border-radius:999px;padding:4px 9px;white-space:nowrap}.status-confirmed{background:#e8f4ee;color:#1e7a4b}.status-completed{background:#f2eee9;color:#8a7c6c}.status-cancelled{background:#fbedec;color:#b4432e}.status-pending{background:#fdf3e3;color:#b36b00}.mb-empty{display:flex;flex-direction:column;align-items:center;gap:10px;padding:50px 20px;text-align:center}.mb-empty-icon{font-size:40px!important;height:40px!important;width:40px!important;color:#c9b7a2!important}.mb-empty-title{font-size:14.5px;color:#8a94a3}.mb-back{display:flex;align-items:center;gap:6px;border:none;background:none;padding:0;cursor:pointer;font-size:12.5px;color:#7c3a11;margin-bottom:6px;width:fit-content}.mb-back mat-icon{font-size:16px!important;height:16px!important;width:16px!important}.mb-detail-card{border:1px solid #EEE9E3;border-radius:12px;padding:20px 22px;display:flex;flex-direction:column;gap:16px;background:#fff}.mb-detail-header{display:flex;flex-direction:column;gap:6px;padding-bottom:14px;border-bottom:1px solid #F0ECE7}.mb-detail-title-row{display:flex;align-items:center;gap:10px}.mb-detail-title{font-size:17px;font-weight:600;color:#1b2436}.mb-detail-when{font-size:13px;color:#6b7688}.mb-detail-rows{display:flex;flex-direction:column;gap:12px}.mb-detail-row{display:flex;justify-content:space-between;gap:16px;font-size:13px}.mb-detail-k{color:#8a94a3;flex:none}.mb-detail-v{color:#1b2436;font-weight:500;text-align:right}.mb-video-link{display:flex;align-items:center;gap:10px;padding:12px 14px;background:#f2f9f5;border-radius:8px;font-size:13px;color:#2c6a4b}.mb-video-link mat-icon{color:#1e7a4b!important;flex:none}.mb-policy{background:#fbfaf8;border:1px solid #EDE8E2;border-radius:8px;padding:12px 14px;display:flex;flex-direction:column;gap:4px}.mb-policy-title{font-size:12px;font-weight:600;color:#a08b72;text-transform:uppercase;letter-spacing:.06em}.mb-policy-text{font-size:12.5px;line-height:1.6;color:#5f6b7c}.mb-cancel-btn{height:46px;border:1.5px solid #E3CFC9;border-radius:8px;background:#fff;color:#b4432e;font-size:13.5px;font-weight:600;cursor:pointer}.mb-cancel-btn:disabled{opacity:.6;cursor:not-allowed}.mb-cancelled-note{font-size:13px;color:#b4432e;font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i6.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }] }); }
173
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MyBookingsComponent, isStandalone: true, selector: "simpo-my-bookings", providers: [MessageService], ngImport: i0, template: "<p-toast position=\"bottom-right\"></p-toast>\n\n<div class=\"mb-root\">\n <ng-container *ngIf=\"currentTab === 'LIST'\">\n <div class=\"mb-title\">My Bookings</div>\n\n <div class=\"mb-tabs\">\n <button type=\"button\" class=\"mb-tab\" [class.active]=\"profTab === 'upcoming'\" (click)=\"setProfTab('upcoming')\">Upcoming</button>\n <button type=\"button\" class=\"mb-tab\" [class.active]=\"profTab === 'past'\" (click)=\"setProfTab('past')\">Past</button>\n </div>\n\n <div class=\"mb-loading\" *ngIf=\"loading\">Loading your bookings\u2026</div>\n\n <div class=\"mb-rows\" *ngIf=\"!loading && !isEmpty\">\n <button type=\"button\" class=\"mb-row\" *ngFor=\"let b of rows\" (click)=\"viewBookingDetail(b)\">\n <div class=\"mb-row-stripe\" [ngClass]=\"b.mode === 'HOME_VISIT' ? 'stripe-home' : b.mode === 'VIDEO_CALL' ? 'stripe-video' : 'stripe-store'\"></div>\n <div class=\"mb-row-info\">\n <div class=\"mb-row-top\">\n <div class=\"mb-row-title\">{{title(b)}}</div>\n </div>\n <div class=\"mb-row-when\">{{when(b)}}</div>\n <div class=\"mb-row-detail\">{{detail(b)}}</div>\n </div>\n <div class=\"mb-row-end\">\n <span class=\"mb-status\" [ngClass]=\"statusClass(b.status)\">{{statusLabel(b.status)}}</span>\n </div>\n </button>\n </div>\n\n <div class=\"mb-empty\" *ngIf=\"isEmpty\">\n <mat-icon class=\"mb-empty-icon\">event_busy</mat-icon>\n <div class=\"mb-empty-title\">No {{profTab}} bookings yet.</div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'DETAIL' && selected\">\n <button type=\"button\" class=\"mb-back\" (click)=\"backToList()\">\n <mat-icon>arrow_back</mat-icon> Back to My Bookings\n </button>\n\n <div class=\"mb-detail-card\">\n <div class=\"mb-detail-header\">\n <div class=\"mb-detail-title-row\">\n <div class=\"mb-detail-title\">{{title(selected)}}</div>\n <span class=\"mb-status\" [ngClass]=\"statusClass(selected.status)\">{{statusLabel(selected.status)}}</span>\n </div>\n <div class=\"mb-detail-when\">{{when(selected)}}</div>\n </div>\n\n <div class=\"mb-detail-rows\">\n <div class=\"mb-detail-row\" *ngIf=\"selected.services?.length\">\n <div class=\"mb-detail-k\">Services</div>\n <div class=\"mb-detail-v\">{{serviceNames(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"selected.productLines?.length\">\n <div class=\"mb-detail-k\">Products</div>\n <div class=\"mb-detail-v\">{{productNames(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"selected.customerDetail\">\n <div class=\"mb-detail-k\">Contact</div>\n <div class=\"mb-detail-v\">{{selected.customerDetail?.name}} \u00B7 {{selected.customerDetail?.phoneNumber}} \u00B7 {{selected.customerDetail?.email}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"selected.mode === 'HOME_VISIT' && selected.addressDetails\">\n <div class=\"mb-detail-k\">Address</div>\n <div class=\"mb-detail-v\">{{selected.addressDetails?.addressLine1}}, {{selected.addressDetails?.city}}, {{selected.addressDetails?.state}} {{selected.addressDetails?.zipCode}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"servicePriceTotal(selected) > 0\">\n <div class=\"mb-detail-k\">Service price</div>\n <div class=\"mb-detail-v\">\u20B9{{servicePriceTotal(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"selected.homeVisitCharge\">\n <div class=\"mb-detail-k\">Home visit charge</div>\n <div class=\"mb-detail-v\">\u20B9{{selected.homeVisitCharge}}</div>\n </div>\n <div class=\"mb-detail-row\">\n <div class=\"mb-detail-k\">Total</div>\n <div class=\"mb-detail-v\">\u20B9{{totalDue(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\">\n <div class=\"mb-detail-k\">Paid</div>\n <div class=\"mb-detail-v\">{{paidLabel(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"pendingAmount(selected) > 0\">\n <div class=\"mb-detail-k\">Pending at appointment</div>\n <div class=\"mb-detail-v\">\u20B9{{pendingAmount(selected)}}</div>\n </div>\n </div>\n\n <div class=\"mb-video-link\" *ngIf=\"selected.mode === 'VIDEO_CALL' && selected.videoCallLink && selected.status !== 'CANCELLED'\">\n <mat-icon>videocam</mat-icon>\n <a [href]=\"selected.videoCallLink\" target=\"_blank\">{{selected.videoCallLink}}</a>\n </div>\n\n <ng-container *ngIf=\"canCancelSelected\">\n <div class=\"mb-policy\" *ngIf=\"cancellationPolicy\">\n <div class=\"mb-policy-title\">{{cancellationPolicy.title}}</div>\n <div class=\"mb-policy-text\">{{cancellationPolicy.policyDetails}}</div>\n </div>\n <button type=\"button\" class=\"mb-cancel-btn\" [disabled]=\"cancelling\" (click)=\"cancelBooking()\">\n {{cancelling ? 'Cancelling\u2026' : 'Cancel booking'}}\n </button>\n </ng-container>\n\n <div class=\"mb-cancelled-note\" *ngIf=\"selected.status === 'CANCELLED'\">This booking has been cancelled.</div>\n </div>\n </ng-container>\n</div>\n", styles: [".mb-root{display:flex;flex-direction:column;gap:16px;padding:4px 0 24px}.mb-title{font-size:20px;font-weight:600;color:#1b2436}.mb-tabs{display:flex;background:#f5f2ee;border-radius:8px;padding:4px;gap:4px;width:fit-content}.mb-tab{border:none;background:transparent;border-radius:6px;padding:8px 18px;font-size:13.5px;font-weight:500;color:#8a94a3;cursor:pointer}.mb-tab.active{background:#fff;color:#1b2436;font-weight:600;box-shadow:0 1px 3px #00000012}.mb-loading{font-size:13.5px;color:#8a94a3;padding:20px 0}.mb-rows{display:flex;flex-direction:column;gap:12px}.mb-row{border:1px solid #EEE9E3;border-radius:10px;padding:16px 18px;display:flex;align-items:flex-start;gap:14px;background:#fff;cursor:pointer;text-align:left;width:100%}.mb-row-stripe{width:3px;align-self:stretch;border-radius:999px;flex:none}.stripe-home{background:#16233a}.stripe-video{background:#7c3a11}.stripe-store{background:#8a94a3}.mb-row-info{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.mb-row-title{font-size:14.5px;font-weight:600;color:#1b2436}.mb-row-when{font-size:12.5px;color:#6b7688}.mb-row-detail{font-size:12px;color:#8a94a3}.mb-row-end{flex:none}.mb-status{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:600;border-radius:999px;padding:4px 9px;white-space:nowrap}.status-confirmed{background:#e8f4ee;color:#1e7a4b}.status-completed{background:#f2eee9;color:#8a7c6c}.status-cancelled{background:#fbedec;color:#b4432e}.status-pending{background:#fdf3e3;color:#b36b00}.mb-empty{display:flex;flex-direction:column;align-items:center;gap:10px;padding:50px 20px;text-align:center}.mb-empty-icon{font-size:40px!important;height:40px!important;width:40px!important;color:#c9b7a2!important}.mb-empty-title{font-size:14.5px;color:#8a94a3}.mb-back{display:flex;align-items:center;gap:6px;border:none;background:none;padding:0;cursor:pointer;font-size:12.5px;color:#7c3a11;margin-bottom:6px;width:fit-content}.mb-back mat-icon{font-size:16px!important;height:16px!important;width:16px!important}.mb-detail-card{border:1px solid #EEE9E3;border-radius:12px;padding:20px 22px;display:flex;flex-direction:column;gap:16px;background:#fff}.mb-detail-header{display:flex;flex-direction:column;gap:6px;padding-bottom:14px;border-bottom:1px solid #F0ECE7}.mb-detail-title-row{display:flex;align-items:center;gap:10px}.mb-detail-title{font-size:17px;font-weight:600;color:#1b2436}.mb-detail-when{font-size:13px;color:#6b7688}.mb-detail-rows{display:flex;flex-direction:column;gap:12px}.mb-detail-row{display:flex;justify-content:space-between;gap:16px;font-size:13px}.mb-detail-k{color:#8a94a3;flex:none}.mb-detail-v{color:#1b2436;font-weight:500;text-align:right}.mb-video-link{display:flex;align-items:center;gap:10px;padding:12px 14px;background:#f2f9f5;border-radius:8px;font-size:13px;color:#2c6a4b}.mb-video-link mat-icon{color:#1e7a4b!important;flex:none}.mb-policy{background:#fbfaf8;border:1px solid #EDE8E2;border-radius:8px;padding:12px 14px;display:flex;flex-direction:column;gap:4px}.mb-policy-title{font-size:12px;font-weight:600;color:#a08b72;text-transform:uppercase;letter-spacing:.06em}.mb-policy-text{font-size:12.5px;line-height:1.6;color:#5f6b7c}.mb-cancel-btn{height:46px;border:1.5px solid #E3CFC9;border-radius:8px;background:#fff;color:#b4432e;font-size:13.5px;font-weight:600;cursor:pointer}.mb-cancel-btn:disabled{opacity:.6;cursor:not-allowed}.mb-cancelled-note{font-size:13px;color:#b4432e;font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ToastModule }, { kind: "component", type: i6.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }] }); }
174
174
  }
175
175
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MyBookingsComponent, decorators: [{
176
176
  type: Component,
177
- args: [{ selector: 'simpo-my-bookings', standalone: true, imports: [CommonModule, MatIconModule, ToastModule], providers: [MessageService], template: "<p-toast position=\"bottom-right\"></p-toast>\r\n\r\n<div class=\"mb-root\">\r\n <ng-container *ngIf=\"currentTab === 'LIST'\">\r\n <div class=\"mb-title\">My Bookings</div>\r\n\r\n <div class=\"mb-tabs\">\r\n <button type=\"button\" class=\"mb-tab\" [class.active]=\"profTab === 'upcoming'\" (click)=\"setProfTab('upcoming')\">Upcoming</button>\r\n <button type=\"button\" class=\"mb-tab\" [class.active]=\"profTab === 'past'\" (click)=\"setProfTab('past')\">Past</button>\r\n </div>\r\n\r\n <div class=\"mb-loading\" *ngIf=\"loading\">Loading your bookings\u2026</div>\r\n\r\n <div class=\"mb-rows\" *ngIf=\"!loading && !isEmpty\">\r\n <button type=\"button\" class=\"mb-row\" *ngFor=\"let b of rows\" (click)=\"viewBookingDetail(b)\">\r\n <div class=\"mb-row-stripe\" [ngClass]=\"b.mode === 'HOME_VISIT' ? 'stripe-home' : b.mode === 'VIDEO_CALL' ? 'stripe-video' : 'stripe-store'\"></div>\r\n <div class=\"mb-row-info\">\r\n <div class=\"mb-row-top\">\r\n <div class=\"mb-row-title\">{{title(b)}}</div>\r\n </div>\r\n <div class=\"mb-row-when\">{{when(b)}}</div>\r\n <div class=\"mb-row-detail\">{{detail(b)}}</div>\r\n </div>\r\n <div class=\"mb-row-end\">\r\n <span class=\"mb-status\" [ngClass]=\"statusClass(b.status)\">{{statusLabel(b.status)}}</span>\r\n </div>\r\n </button>\r\n </div>\r\n\r\n <div class=\"mb-empty\" *ngIf=\"isEmpty\">\r\n <mat-icon class=\"mb-empty-icon\">event_busy</mat-icon>\r\n <div class=\"mb-empty-title\">No {{profTab}} bookings yet.</div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentTab === 'DETAIL' && selected\">\r\n <button type=\"button\" class=\"mb-back\" (click)=\"backToList()\">\r\n <mat-icon>arrow_back</mat-icon> Back to My Bookings\r\n </button>\r\n\r\n <div class=\"mb-detail-card\">\r\n <div class=\"mb-detail-header\">\r\n <div class=\"mb-detail-title-row\">\r\n <div class=\"mb-detail-title\">{{title(selected)}}</div>\r\n <span class=\"mb-status\" [ngClass]=\"statusClass(selected.status)\">{{statusLabel(selected.status)}}</span>\r\n </div>\r\n <div class=\"mb-detail-when\">{{when(selected)}}</div>\r\n </div>\r\n\r\n <div class=\"mb-detail-rows\">\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.services?.length\">\r\n <div class=\"mb-detail-k\">Services</div>\r\n <div class=\"mb-detail-v\">{{serviceNames(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.productLines?.length\">\r\n <div class=\"mb-detail-k\">Products</div>\r\n <div class=\"mb-detail-v\">{{productNames(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.customerDetail\">\r\n <div class=\"mb-detail-k\">Contact</div>\r\n <div class=\"mb-detail-v\">{{selected.customerDetail?.name}} \u00B7 {{selected.customerDetail?.phoneNumber}} \u00B7 {{selected.customerDetail?.email}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.mode === 'HOME_VISIT' && selected.addressDetails\">\r\n <div class=\"mb-detail-k\">Address</div>\r\n <div class=\"mb-detail-v\">{{selected.addressDetails?.addressLine1}}, {{selected.addressDetails?.city}}, {{selected.addressDetails?.state}} {{selected.addressDetails?.zipCode}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"servicePriceTotal(selected) > 0\">\r\n <div class=\"mb-detail-k\">Service price</div>\r\n <div class=\"mb-detail-v\">\u20B9{{servicePriceTotal(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"selected.homeVisitCharge\">\r\n <div class=\"mb-detail-k\">Home visit charge</div>\r\n <div class=\"mb-detail-v\">\u20B9{{selected.homeVisitCharge}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\">\r\n <div class=\"mb-detail-k\">Total</div>\r\n <div class=\"mb-detail-v\">\u20B9{{totalDue(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\">\r\n <div class=\"mb-detail-k\">Paid</div>\r\n <div class=\"mb-detail-v\">{{paidLabel(selected)}}</div>\r\n </div>\r\n <div class=\"mb-detail-row\" *ngIf=\"pendingAmount(selected) > 0\">\r\n <div class=\"mb-detail-k\">Pending at appointment</div>\r\n <div class=\"mb-detail-v\">\u20B9{{pendingAmount(selected)}}</div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mb-video-link\" *ngIf=\"selected.mode === 'VIDEO_CALL' && selected.videoCallLink && selected.status !== 'CANCELLED'\">\r\n <mat-icon>videocam</mat-icon>\r\n <a [href]=\"selected.videoCallLink\" target=\"_blank\">{{selected.videoCallLink}}</a>\r\n </div>\r\n\r\n <ng-container *ngIf=\"canCancelSelected\">\r\n <div class=\"mb-policy\" *ngIf=\"cancellationPolicy\">\r\n <div class=\"mb-policy-title\">{{cancellationPolicy.title}}</div>\r\n <div class=\"mb-policy-text\">{{cancellationPolicy.policyDetails}}</div>\r\n </div>\r\n <button type=\"button\" class=\"mb-cancel-btn\" [disabled]=\"cancelling\" (click)=\"cancelBooking()\">\r\n {{cancelling ? 'Cancelling\u2026' : 'Cancel booking'}}\r\n </button>\r\n </ng-container>\r\n\r\n <div class=\"mb-cancelled-note\" *ngIf=\"selected.status === 'CANCELLED'\">This booking has been cancelled.</div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".mb-root{display:flex;flex-direction:column;gap:16px;padding:4px 0 24px}.mb-title{font-size:20px;font-weight:600;color:#1b2436}.mb-tabs{display:flex;background:#f5f2ee;border-radius:8px;padding:4px;gap:4px;width:fit-content}.mb-tab{border:none;background:transparent;border-radius:6px;padding:8px 18px;font-size:13.5px;font-weight:500;color:#8a94a3;cursor:pointer}.mb-tab.active{background:#fff;color:#1b2436;font-weight:600;box-shadow:0 1px 3px #00000012}.mb-loading{font-size:13.5px;color:#8a94a3;padding:20px 0}.mb-rows{display:flex;flex-direction:column;gap:12px}.mb-row{border:1px solid #EEE9E3;border-radius:10px;padding:16px 18px;display:flex;align-items:flex-start;gap:14px;background:#fff;cursor:pointer;text-align:left;width:100%}.mb-row-stripe{width:3px;align-self:stretch;border-radius:999px;flex:none}.stripe-home{background:#16233a}.stripe-video{background:#7c3a11}.stripe-store{background:#8a94a3}.mb-row-info{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.mb-row-title{font-size:14.5px;font-weight:600;color:#1b2436}.mb-row-when{font-size:12.5px;color:#6b7688}.mb-row-detail{font-size:12px;color:#8a94a3}.mb-row-end{flex:none}.mb-status{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:600;border-radius:999px;padding:4px 9px;white-space:nowrap}.status-confirmed{background:#e8f4ee;color:#1e7a4b}.status-completed{background:#f2eee9;color:#8a7c6c}.status-cancelled{background:#fbedec;color:#b4432e}.status-pending{background:#fdf3e3;color:#b36b00}.mb-empty{display:flex;flex-direction:column;align-items:center;gap:10px;padding:50px 20px;text-align:center}.mb-empty-icon{font-size:40px!important;height:40px!important;width:40px!important;color:#c9b7a2!important}.mb-empty-title{font-size:14.5px;color:#8a94a3}.mb-back{display:flex;align-items:center;gap:6px;border:none;background:none;padding:0;cursor:pointer;font-size:12.5px;color:#7c3a11;margin-bottom:6px;width:fit-content}.mb-back mat-icon{font-size:16px!important;height:16px!important;width:16px!important}.mb-detail-card{border:1px solid #EEE9E3;border-radius:12px;padding:20px 22px;display:flex;flex-direction:column;gap:16px;background:#fff}.mb-detail-header{display:flex;flex-direction:column;gap:6px;padding-bottom:14px;border-bottom:1px solid #F0ECE7}.mb-detail-title-row{display:flex;align-items:center;gap:10px}.mb-detail-title{font-size:17px;font-weight:600;color:#1b2436}.mb-detail-when{font-size:13px;color:#6b7688}.mb-detail-rows{display:flex;flex-direction:column;gap:12px}.mb-detail-row{display:flex;justify-content:space-between;gap:16px;font-size:13px}.mb-detail-k{color:#8a94a3;flex:none}.mb-detail-v{color:#1b2436;font-weight:500;text-align:right}.mb-video-link{display:flex;align-items:center;gap:10px;padding:12px 14px;background:#f2f9f5;border-radius:8px;font-size:13px;color:#2c6a4b}.mb-video-link mat-icon{color:#1e7a4b!important;flex:none}.mb-policy{background:#fbfaf8;border:1px solid #EDE8E2;border-radius:8px;padding:12px 14px;display:flex;flex-direction:column;gap:4px}.mb-policy-title{font-size:12px;font-weight:600;color:#a08b72;text-transform:uppercase;letter-spacing:.06em}.mb-policy-text{font-size:12.5px;line-height:1.6;color:#5f6b7c}.mb-cancel-btn{height:46px;border:1.5px solid #E3CFC9;border-radius:8px;background:#fff;color:#b4432e;font-size:13.5px;font-weight:600;cursor:pointer}.mb-cancel-btn:disabled{opacity:.6;cursor:not-allowed}.mb-cancelled-note{font-size:13px;color:#b4432e;font-weight:600}\n"] }]
177
+ args: [{ selector: 'simpo-my-bookings', standalone: true, imports: [CommonModule, MatIconModule, ToastModule], providers: [MessageService], template: "<p-toast position=\"bottom-right\"></p-toast>\n\n<div class=\"mb-root\">\n <ng-container *ngIf=\"currentTab === 'LIST'\">\n <div class=\"mb-title\">My Bookings</div>\n\n <div class=\"mb-tabs\">\n <button type=\"button\" class=\"mb-tab\" [class.active]=\"profTab === 'upcoming'\" (click)=\"setProfTab('upcoming')\">Upcoming</button>\n <button type=\"button\" class=\"mb-tab\" [class.active]=\"profTab === 'past'\" (click)=\"setProfTab('past')\">Past</button>\n </div>\n\n <div class=\"mb-loading\" *ngIf=\"loading\">Loading your bookings\u2026</div>\n\n <div class=\"mb-rows\" *ngIf=\"!loading && !isEmpty\">\n <button type=\"button\" class=\"mb-row\" *ngFor=\"let b of rows\" (click)=\"viewBookingDetail(b)\">\n <div class=\"mb-row-stripe\" [ngClass]=\"b.mode === 'HOME_VISIT' ? 'stripe-home' : b.mode === 'VIDEO_CALL' ? 'stripe-video' : 'stripe-store'\"></div>\n <div class=\"mb-row-info\">\n <div class=\"mb-row-top\">\n <div class=\"mb-row-title\">{{title(b)}}</div>\n </div>\n <div class=\"mb-row-when\">{{when(b)}}</div>\n <div class=\"mb-row-detail\">{{detail(b)}}</div>\n </div>\n <div class=\"mb-row-end\">\n <span class=\"mb-status\" [ngClass]=\"statusClass(b.status)\">{{statusLabel(b.status)}}</span>\n </div>\n </button>\n </div>\n\n <div class=\"mb-empty\" *ngIf=\"isEmpty\">\n <mat-icon class=\"mb-empty-icon\">event_busy</mat-icon>\n <div class=\"mb-empty-title\">No {{profTab}} bookings yet.</div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"currentTab === 'DETAIL' && selected\">\n <button type=\"button\" class=\"mb-back\" (click)=\"backToList()\">\n <mat-icon>arrow_back</mat-icon> Back to My Bookings\n </button>\n\n <div class=\"mb-detail-card\">\n <div class=\"mb-detail-header\">\n <div class=\"mb-detail-title-row\">\n <div class=\"mb-detail-title\">{{title(selected)}}</div>\n <span class=\"mb-status\" [ngClass]=\"statusClass(selected.status)\">{{statusLabel(selected.status)}}</span>\n </div>\n <div class=\"mb-detail-when\">{{when(selected)}}</div>\n </div>\n\n <div class=\"mb-detail-rows\">\n <div class=\"mb-detail-row\" *ngIf=\"selected.services?.length\">\n <div class=\"mb-detail-k\">Services</div>\n <div class=\"mb-detail-v\">{{serviceNames(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"selected.productLines?.length\">\n <div class=\"mb-detail-k\">Products</div>\n <div class=\"mb-detail-v\">{{productNames(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"selected.customerDetail\">\n <div class=\"mb-detail-k\">Contact</div>\n <div class=\"mb-detail-v\">{{selected.customerDetail?.name}} \u00B7 {{selected.customerDetail?.phoneNumber}} \u00B7 {{selected.customerDetail?.email}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"selected.mode === 'HOME_VISIT' && selected.addressDetails\">\n <div class=\"mb-detail-k\">Address</div>\n <div class=\"mb-detail-v\">{{selected.addressDetails?.addressLine1}}, {{selected.addressDetails?.city}}, {{selected.addressDetails?.state}} {{selected.addressDetails?.zipCode}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"servicePriceTotal(selected) > 0\">\n <div class=\"mb-detail-k\">Service price</div>\n <div class=\"mb-detail-v\">\u20B9{{servicePriceTotal(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"selected.homeVisitCharge\">\n <div class=\"mb-detail-k\">Home visit charge</div>\n <div class=\"mb-detail-v\">\u20B9{{selected.homeVisitCharge}}</div>\n </div>\n <div class=\"mb-detail-row\">\n <div class=\"mb-detail-k\">Total</div>\n <div class=\"mb-detail-v\">\u20B9{{totalDue(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\">\n <div class=\"mb-detail-k\">Paid</div>\n <div class=\"mb-detail-v\">{{paidLabel(selected)}}</div>\n </div>\n <div class=\"mb-detail-row\" *ngIf=\"pendingAmount(selected) > 0\">\n <div class=\"mb-detail-k\">Pending at appointment</div>\n <div class=\"mb-detail-v\">\u20B9{{pendingAmount(selected)}}</div>\n </div>\n </div>\n\n <div class=\"mb-video-link\" *ngIf=\"selected.mode === 'VIDEO_CALL' && selected.videoCallLink && selected.status !== 'CANCELLED'\">\n <mat-icon>videocam</mat-icon>\n <a [href]=\"selected.videoCallLink\" target=\"_blank\">{{selected.videoCallLink}}</a>\n </div>\n\n <ng-container *ngIf=\"canCancelSelected\">\n <div class=\"mb-policy\" *ngIf=\"cancellationPolicy\">\n <div class=\"mb-policy-title\">{{cancellationPolicy.title}}</div>\n <div class=\"mb-policy-text\">{{cancellationPolicy.policyDetails}}</div>\n </div>\n <button type=\"button\" class=\"mb-cancel-btn\" [disabled]=\"cancelling\" (click)=\"cancelBooking()\">\n {{cancelling ? 'Cancelling\u2026' : 'Cancel booking'}}\n </button>\n </ng-container>\n\n <div class=\"mb-cancelled-note\" *ngIf=\"selected.status === 'CANCELLED'\">This booking has been cancelled.</div>\n </div>\n </ng-container>\n</div>\n", styles: [".mb-root{display:flex;flex-direction:column;gap:16px;padding:4px 0 24px}.mb-title{font-size:20px;font-weight:600;color:#1b2436}.mb-tabs{display:flex;background:#f5f2ee;border-radius:8px;padding:4px;gap:4px;width:fit-content}.mb-tab{border:none;background:transparent;border-radius:6px;padding:8px 18px;font-size:13.5px;font-weight:500;color:#8a94a3;cursor:pointer}.mb-tab.active{background:#fff;color:#1b2436;font-weight:600;box-shadow:0 1px 3px #00000012}.mb-loading{font-size:13.5px;color:#8a94a3;padding:20px 0}.mb-rows{display:flex;flex-direction:column;gap:12px}.mb-row{border:1px solid #EEE9E3;border-radius:10px;padding:16px 18px;display:flex;align-items:flex-start;gap:14px;background:#fff;cursor:pointer;text-align:left;width:100%}.mb-row-stripe{width:3px;align-self:stretch;border-radius:999px;flex:none}.stripe-home{background:#16233a}.stripe-video{background:#7c3a11}.stripe-store{background:#8a94a3}.mb-row-info{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.mb-row-title{font-size:14.5px;font-weight:600;color:#1b2436}.mb-row-when{font-size:12.5px;color:#6b7688}.mb-row-detail{font-size:12px;color:#8a94a3}.mb-row-end{flex:none}.mb-status{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;font-weight:600;border-radius:999px;padding:4px 9px;white-space:nowrap}.status-confirmed{background:#e8f4ee;color:#1e7a4b}.status-completed{background:#f2eee9;color:#8a7c6c}.status-cancelled{background:#fbedec;color:#b4432e}.status-pending{background:#fdf3e3;color:#b36b00}.mb-empty{display:flex;flex-direction:column;align-items:center;gap:10px;padding:50px 20px;text-align:center}.mb-empty-icon{font-size:40px!important;height:40px!important;width:40px!important;color:#c9b7a2!important}.mb-empty-title{font-size:14.5px;color:#8a94a3}.mb-back{display:flex;align-items:center;gap:6px;border:none;background:none;padding:0;cursor:pointer;font-size:12.5px;color:#7c3a11;margin-bottom:6px;width:fit-content}.mb-back mat-icon{font-size:16px!important;height:16px!important;width:16px!important}.mb-detail-card{border:1px solid #EEE9E3;border-radius:12px;padding:20px 22px;display:flex;flex-direction:column;gap:16px;background:#fff}.mb-detail-header{display:flex;flex-direction:column;gap:6px;padding-bottom:14px;border-bottom:1px solid #F0ECE7}.mb-detail-title-row{display:flex;align-items:center;gap:10px}.mb-detail-title{font-size:17px;font-weight:600;color:#1b2436}.mb-detail-when{font-size:13px;color:#6b7688}.mb-detail-rows{display:flex;flex-direction:column;gap:12px}.mb-detail-row{display:flex;justify-content:space-between;gap:16px;font-size:13px}.mb-detail-k{color:#8a94a3;flex:none}.mb-detail-v{color:#1b2436;font-weight:500;text-align:right}.mb-video-link{display:flex;align-items:center;gap:10px;padding:12px 14px;background:#f2f9f5;border-radius:8px;font-size:13px;color:#2c6a4b}.mb-video-link mat-icon{color:#1e7a4b!important;flex:none}.mb-policy{background:#fbfaf8;border:1px solid #EDE8E2;border-radius:8px;padding:12px 14px;display:flex;flex-direction:column;gap:4px}.mb-policy-title{font-size:12px;font-weight:600;color:#a08b72;text-transform:uppercase;letter-spacing:.06em}.mb-policy-text{font-size:12.5px;line-height:1.6;color:#5f6b7c}.mb-cancel-btn{height:46px;border:1.5px solid #E3CFC9;border-radius:8px;background:#fff;color:#b4432e;font-size:13.5px;font-weight:600;cursor:pointer}.mb-cancel-btn:disabled{opacity:.6;cursor:not-allowed}.mb-cancelled-note{font-size:13px;color:#b4432e;font-weight:600}\n"] }]
178
178
  }], ctorParameters: () => [{ type: i1.RestService }, { type: i2.StorageServiceService }, { type: i3.MessageService }] });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktYm9va2luZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9teS1ib29raW5ncy9teS1ib29raW5ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL215LWJvb2tpbmdzL215LWJvb2tpbmdzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQTBCNUM7Ozs7O0dBS0c7QUFTSCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQ21CLFdBQXdCLEVBQ3hCLGNBQXFDLEVBQ3JDLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFHakQsZUFBVSxHQUFzQixNQUFNLENBQUM7UUFDdkMsWUFBTyxHQUF3QixVQUFVLENBQUM7UUFDMUMsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFWCxnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFDdkMsYUFBUSxH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bEVZLFlBQVksNlZBQUUsYUFBYSxtTEFBRSxXQUFXOzs0RkFLdkMsbUJBQW1CO2tCQVIvQixTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUN4QyxDQUFDLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWwnO1xyXG5cclxuaW50ZXJmYWNlIEJvb2tpbmdSb3cge1xyXG4gIGdyb3VwSWQ6IHN0cmluZztcclxuICBtb2RlOiAnU1RPUkVfVklTSVQnIHwgJ0hPTUVfVklTSVQnIHwgJ1ZJREVPX0NBTEwnO1xyXG4gIGJvb2tpbmdEYXRlOiBzdHJpbmc7XHJcbiAgc3RhcnRUaW1lPzogc3RyaW5nO1xyXG4gIGVuZFRpbWU/OiBzdHJpbmc7XHJcbiAgc3RhdHVzOiAnUEVORElORycgfCAnQk9PS0VEJyB8ICdIT0xEJyB8ICdDT01QTEVURUQnIHwgJ0NBTkNFTExFRCc7XHJcbiAgc3RvcmVOYW1lPzogc3RyaW5nO1xyXG4gIGN1c3RvbWVyRGV0YWlsPzogeyBuYW1lOiBzdHJpbmc7IHBob25lTnVtYmVyOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfTtcclxuICBhZGRyZXNzRGV0YWlscz86IHsgcmVjZWl2ZXJOYW1lOiBzdHJpbmc7IHJlY2VpdmVyUGhvbmU6IHN0cmluZzsgYWRkcmVzc0xpbmUxOiBzdHJpbmc7IGFkZHJlc3NMaW5lMj86IHN0cmluZzsgY2l0eTogc3RyaW5nOyBzdGF0ZTogc3RyaW5nOyB6aXBDb2RlOiBzdHJpbmcgfTtcclxuICBwcm9kdWN0TGluZXM/OiB7IGl0ZW1OYW1lOiBzdHJpbmc7IHF1YW50aXR5OiBudW1iZXIgfVtdO1xyXG4gIC8qKiBOb3QgcGFydCBvZiB0aGUgR0VUIC9ib29raW5nL2dyb3VwL215IHJlc3BvbnNlIC0gc2VydmljZXMgbGl2ZSBvbiB0aGUgc2VwYXJhdGVcclxuICAgKiBCb29raW5nRGV0YWlsIGNvbGxlY3Rpb24gKEZLJ2QgdmlhIHNlcnZpY2VMaW5lSWRzLCBub3QgZGVub3JtYWxpemVkIG9udG8gQm9va2luZ0dyb3VwKSwgc29cclxuICAgKiB0aGlzIGlzIGZpbGxlZCBpbiBjbGllbnQtc2lkZSBhZnRlciBsb2FkKCkgdmlhIGEgcGVyLXJvdyBHRVQgLi4uL2xpbmVzIGNhbGwuICovXHJcbiAgc2VydmljZXM/OiB7IG5hbWU6IHN0cmluZzsgZHVyYXRpb25NaW51dGVzOiBudW1iZXI7IHByaWNlOiBudW1iZXIgfVtdO1xyXG4gIHZpZGVvQ2FsbExpbms/OiBzdHJpbmc7XHJcbiAgdG90YWxDb2xsZWN0ZWRBdEJvb2tpbmc/OiBudW1iZXI7XHJcbiAgdG90YWxQYXlhYmxlPzogbnVtYmVyO1xyXG4gIGhvbWVWaXNpdENoYXJnZT86IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFwiTXkgQm9va2luZ3NcIiAtIGEgY3VzdG9tZXIncyBvd24gYm9va2luZyBoaXN0b3J5IChVcGNvbWluZy9QYXN0KSwgYSBkZXRhaWwgdmlldyBwZXIgYm9va2luZyxcclxuICogYW5kIGNhbmNlbGxhdGlvbi4gVGhlIGxpc3QgZW5kcG9pbnQgcmV0dXJucyBmdWxsIEJvb2tpbmdHcm91cCByZWNvcmRzIC0gZW5vdWdoIGZvclxyXG4gKiBkYXRlL3N0YXR1cy9hZGRyZXNzL3Byb2R1Y3RzIC0gYnV0IHNlcnZpY2VzIGJvb2tlZCBhcmVuJ3Qgb24gdGhhdCByZWNvcmQgKHNlZSBCb29raW5nUm93LnNlcnZpY2VzXHJcbiAqIGFib3ZlKSwgc28gbG9hZCgpIGlzc3VlcyBvbmUgZXh0cmEgR0VUIC4uLi9saW5lcyBjYWxsIHBlciByb3cgdG8gZmlsbCB0aGVtIGluLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzaW1wby1teS1ib29raW5ncycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRJY29uTW9kdWxlLCBUb2FzdE1vZHVsZV0sXHJcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9teS1ib29raW5ncy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL215LWJvb2tpbmdzLmNvbXBvbmVudC5jc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNeUJvb2tpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcbiAgY3VycmVudFRhYjogJ0xJU1QnIHwgJ0RFVEFJTCcgPSAnTElTVCc7XHJcbiAgcHJvZlRhYjogJ3VwY29taW5nJyB8ICdwYXN0JyA9ICd1cGNvbWluZyc7XHJcbiAgbG9hZGluZyA9IHRydWU7XHJcbiAgY2FuY2VsbGluZyA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGFsbEJvb2tpbmdzOiBCb29raW5nUm93W10gPSBbXTtcclxuICB1cGNvbWluZzogQm9va2luZ1Jvd1tdID0gW107XHJcbiAgcGFzdDogQm9va2luZ1Jvd1tdID0gW107XHJcbiAgc2VsZWN0ZWQ6IEJvb2tpbmdSb3cgfCBudWxsID0gbnVsbDtcclxuICBjYW5jZWxsYXRpb25Qb2xpY3k6IHsgdGl0bGU6IHN0cmluZzsgcG9saWN5RGV0YWlsczogc3RyaW5nIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxvYWQoKTtcclxuICB9XHJcblxyXG4gIGxvYWQoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgYnVzaW5lc3NJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/ICcnO1xyXG4gICAgY29uc3QgdXNlcklkID0gKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpIGFzIFVzZXIpPy51c2VySWQgPz8gJyc7XHJcbiAgICBpZiAoIWJ1c2luZXNzSWQgfHwgIXVzZXJJZCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRNeUJvb2tpbmdzKGJ1c2luZXNzSWQsIHVzZXJJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmFsbEJvb2tpbmdzID0gKHJlcyA/PyBbXSkgYXMgQm9va2luZ1Jvd1tdO1xyXG4gICAgICB0aGlzLnNwbGl0Qm9va2luZ3MoKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubG9hZFNlcnZpY2VMaW5lcygpO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0Q2FuY2VsbGF0aW9uUG9saWN5KGJ1c2luZXNzSWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jYW5jZWxsYXRpb25Qb2xpY3kgPSAocmVzID8/IFtdKVswXSA/PyBudWxsO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICAvLyBOb24tZmF0YWwgLSB0aGUgZGV0YWlsIHZpZXcganVzdCB3b24ndCBzaG93IGEgcG9saWN5IG5vdGUuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNVcGNvbWluZyhiOiBCb29raW5nUm93KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIHJldHVybiAoYi5zdGF0dXMgPT09ICdIT0xEJyB8fCBiLnN0YXR1cyA9PT0gJ0JPT0tFRCcgfHwgYi5zdGF0dXMgPT09ICdQRU5ESU5HJykgJiYgbmV3IERhdGUoYi5ib29raW5nRGF0ZSkgPj0gdG9kYXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNwbGl0Qm9va2luZ3MoKSB7XHJcbiAgICB0aGlzLnVwY29taW5nID0gdGhpcy5hbGxCb29raW5ncy5maWx0ZXIoKGIpID0+IHRoaXMuaXNVcGNvbWluZyhiKSk7XHJcbiAgICB0aGlzLnBhc3QgPSB0aGlzLmFsbEJvb2tpbmdzLmZpbHRlcigoYikgPT4gIXRoaXMuaXNVcGNvbWluZyhiKSk7XHJcbiAgfVxyXG5cclxuICAvKiogT25lIGJvb2tpbmcgaGlzdG9yeSBsb2FkLCBib3VuZGVkIHRvIHRoaXMgY3VzdG9tZXIncyBvd24gYm9va2luZ3MgLSBhIHBlci1yb3cgY2FsbCBoZXJlIGlzXHJcbiAgICogZmluZSwgdW5saWtlIGFuIHVuYm91bmRlZC9wYWdpbmF0ZWQgbGlzdC4gRmFpbHVyZXMgYXJlIHN3YWxsb3dlZCBwZXItcm93IChmYWxscyBiYWNrIHRvIG5vXHJcbiAgICogc2VydmljZSBuYW1lcyBmb3IgdGhhdCByb3cpIHJhdGhlciB0aGFuIGJsb2NraW5nIHRoZSB3aG9sZSBwYWdlIG9uIG9uZSBiYWQgZ3JvdXAuICovXHJcbiAgcHJpdmF0ZSBsb2FkU2VydmljZUxpbmVzKCkge1xyXG4gICAgaWYgKCF0aGlzLmFsbEJvb2tpbmdzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgZm9ya0pvaW4oXHJcbiAgICAgIHRoaXMuYWxsQm9va2luZ3MubWFwKChiKSA9PlxyXG4gICAgICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0R3JvdXBMaW5lcyhiLmdyb3VwSWQpLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihbXSkpKVxyXG4gICAgICApXHJcbiAgICApLnN1YnNjcmliZSgoYWxsTGluZXM6IGFueVtdKSA9PiB7XHJcbiAgICAgIHRoaXMuYWxsQm9va2luZ3MuZm9yRWFjaCgoYiwgaSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxpbmVzID0gYWxsTGluZXNbaV0gPz8gW107XHJcbiAgICAgICAgYi5zZXJ2aWNlcyA9IGxpbmVzLmZsYXRNYXAoKGw6IGFueSkgPT4gKGwuc2VydmljZXMgPz8gW10pLm1hcCgoczogYW55KSA9PiAoe1xyXG4gICAgICAgICAgbmFtZTogcy5uYW1lLCBkdXJhdGlvbk1pbnV0ZXM6IHMuZHVyYXRpb25NaW51dGVzLCBwcmljZTogcy5wcmljZVxyXG4gICAgICAgIH0pKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgcm93cygpOiBCb29raW5nUm93W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZlRhYiA9PT0gJ3VwY29taW5nJyA/IHRoaXMudXBjb21pbmcgOiB0aGlzLnBhc3Q7XHJcbiAgfVxyXG4gIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5yb3dzLmxlbmd0aCA9PT0gMDtcclxuICB9XHJcblxyXG4gIHNldFByb2ZUYWIodGFiOiAndXBjb21pbmcnIHwgJ3Bhc3QnKSB7XHJcbiAgICB0aGlzLnByb2ZUYWIgPSB0YWI7XHJcbiAgfVxyXG5cclxuICBwcm9kdWN0TmFtZXMoYjogQm9va2luZ1Jvdyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKGIucHJvZHVjdExpbmVzID8/IFtdKS5tYXAoKHApID0+IHAuaXRlbU5hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpO1xyXG4gIH1cclxuICBzZXJ2aWNlTmFtZXMoYjogQm9va2luZ1Jvdyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKGIuc2VydmljZXMgPz8gW10pLm1hcCgocykgPT4gcy5uYW1lKS5maWx0ZXIoQm9vbGVhbikuam9pbignLCAnKTtcclxuICB9XHJcbiAgdGl0bGUoYjogQm9va2luZ1Jvdyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBtb2RlTGFiZWwgPSBiLm1vZGUgPT09ICdIT01FX1ZJU0lUJyA/ICdIb21lIFZpc2l0JyA6IGIubW9kZSA9PT0gJ1ZJREVPX0NBTEwnID8gJ1ZpZGVvIENhbGwnIDogJ1N0b3JlIFZpc2l0JztcclxuICAgIGNvbnN0IGl0ZW1zID0gW3RoaXMuc2VydmljZU5hbWVzKGIpLCB0aGlzLnByb2R1Y3ROYW1lcyhiKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJyk7XHJcbiAgICByZXR1cm4gaXRlbXMgPyBgJHttb2RlTGFiZWx9IMK3ICR7aXRlbXN9YCA6IG1vZGVMYWJlbDtcclxuICB9XHJcbiAgd2hlbihiOiBCb29raW5nUm93KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShiLmJvb2tpbmdEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLUlOJywgeyB3ZWVrZGF5OiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJywgbW9udGg6ICdzaG9ydCcsIHllYXI6ICdudW1lcmljJyB9KTtcclxuICAgIHJldHVybiBiLnN0YXJ0VGltZSA/IGAke2RhdGV9IMK3ICR7Yi5zdGFydFRpbWV9YCA6IGRhdGU7XHJcbiAgfVxyXG4gIGRldGFpbChiOiBCb29raW5nUm93KTogc3RyaW5nIHtcclxuICAgIGlmIChiLm1vZGUgPT09ICdIT01FX1ZJU0lUJyAmJiBiLmFkZHJlc3NEZXRhaWxzKSByZXR1cm4gYCR7Yi5hZGRyZXNzRGV0YWlscy5jaXR5fSwgJHtiLmFkZHJlc3NEZXRhaWxzLnN0YXRlfWA7XHJcbiAgICBpZiAoYi5tb2RlID09PSAnU1RPUkVfVklTSVQnICYmIGIuc3RvcmVOYW1lKSByZXR1cm4gYi5zdG9yZU5hbWU7XHJcbiAgICByZXR1cm4gYi5jdXN0b21lckRldGFpbD8ubmFtZSA/PyAnJztcclxuICB9XHJcbiAgc3RhdHVzTGFiZWwoc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHJldHVybiAnQ29tcGxldGVkJztcclxuICAgIGlmIChzdGF0dXMgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gJ0NhbmNlbGxlZCc7XHJcbiAgICBpZiAoc3RhdHVzID09PSAnSE9MRCcgfHwgc3RhdHVzID09PSAnUEVORElORycpIHJldHVybiAnUGF5bWVudCBQZW5kaW5nJztcclxuICAgIHJldHVybiAnQ29uZmlybWVkJztcclxuICB9XHJcbiAgc3RhdHVzQ2xhc3Moc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHN0YXR1cyA9PT0gJ0NPTVBMRVRFRCcpIHJldHVybiAnc3RhdHVzLWNvbXBsZXRlZCc7XHJcbiAgICBpZiAoc3RhdHVzID09PSAnQ0FOQ0VMTEVEJykgcmV0dXJuICdzdGF0dXMtY2FuY2VsbGVkJztcclxuICAgIGlmIChzdGF0dXMgPT09ICdIT0xEJyB8fCBzdGF0dXMgPT09ICdQRU5ESU5HJykgcmV0dXJuICdzdGF0dXMtcGVuZGluZyc7XHJcbiAgICByZXR1cm4gJ3N0YXR1cy1jb25maXJtZWQnO1xyXG4gIH1cclxuICBwYWlkTGFiZWwoYjogQm9va2luZ1Jvdyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYi50b3RhbENvbGxlY3RlZEF0Qm9va2luZyAmJiBiLnRvdGFsQ29sbGVjdGVkQXRCb29raW5nID4gMCA/IGDigrkke2IudG90YWxDb2xsZWN0ZWRBdEJvb2tpbmd9YCA6ICdOb3RoaW5nIOKAlCBmcmVlJztcclxuICB9XHJcbiAgc2VydmljZVByaWNlVG90YWwoYjogQm9va2luZ1Jvdyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKGIuc2VydmljZXMgPz8gW10pLnJlZHVjZSgoc3VtLCBzKSA9PiBzdW0gKyAocy5wcmljZSB8fCAwKSwgMCk7XHJcbiAgfVxyXG4gIHRvdGFsRHVlKGI6IEJvb2tpbmdSb3cpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIChiLnRvdGFsUGF5YWJsZSA/PyAwKSArIChiLmhvbWVWaXNpdENoYXJnZSA/PyAwKTtcclxuICB9XHJcbiAgcGVuZGluZ0Ftb3VudChiOiBCb29raW5nUm93KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLnRvdGFsRHVlKGIpIC0gKGIudG90YWxDb2xsZWN0ZWRBdEJvb2tpbmcgPz8gMCkpO1xyXG4gIH1cclxuICBnZXQgY2FuQ2FuY2VsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkICYmICh0aGlzLnNlbGVjdGVkLnN0YXR1cyA9PT0gJ0hPTEQnIHx8IHRoaXMuc2VsZWN0ZWQuc3RhdHVzID09PSAnQk9PS0VEJyB8fCB0aGlzLnNlbGVjdGVkLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKTtcclxuICB9XHJcblxyXG4gIHZpZXdCb29raW5nRGV0YWlsKGI6IEJvb2tpbmdSb3cpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWQgPSBiO1xyXG4gICAgdGhpcy5jdXJyZW50VGFiID0gJ0RFVEFJTCc7XHJcbiAgfVxyXG4gIGJhY2tUb0xpc3QoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRUYWIgPSAnTElTVCc7XHJcbiAgICB0aGlzLnNlbGVjdGVkID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGNhbmNlbEJvb2tpbmcoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWQgfHwgdGhpcy5jYW5jZWxsaW5nKSByZXR1cm47XHJcbiAgICB0aGlzLmNhbmNlbGxpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5yZXN0U2VydmljZS5jYW5jZWxCb29raW5nR3JvdXAodGhpcy5zZWxlY3RlZC5ncm91cElkLCAnQ2FuY2VsbGVkIGJ5IGN1c3RvbWVyJykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jYW5jZWxsaW5nID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB0aGlzLnNlbGVjdGVkLnN0YXR1cyA9ICdDQU5DRUxMRUQnO1xyXG4gICAgICB0aGlzLnNwbGl0Qm9va2luZ3MoKTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ3N1Y2Nlc3MnLCBzdW1tYXJ5OiAnQm9va2luZyBjYW5jZWxsZWQnIH0pO1xyXG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jYW5jZWxsaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogZXJyb3I/LmVycm9yPy5kZXRhaWwgPz8gJ0NvdWxkIG5vdCBjYW5jZWwgdGhpcyBib29raW5nJyB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiPjwvcC10b2FzdD5cclxuXHJcbjxkaXYgY2xhc3M9XCJtYi1yb290XCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRUYWIgPT09ICdMSVNUJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLXRpdGxlXCI+TXkgQm9va2luZ3M8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItdGFic1wiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1iLXRhYlwiIFtjbGFzcy5hY3RpdmVdPVwicHJvZlRhYiA9PT0gJ3VwY29taW5nJ1wiIChjbGljayk9XCJzZXRQcm9mVGFiKCd1cGNvbWluZycpXCI+VXBjb21pbmc8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYi10YWJcIiBbY2xhc3MuYWN0aXZlXT1cInByb2ZUYWIgPT09ICdwYXN0J1wiIChjbGljayk9XCJzZXRQcm9mVGFiKCdwYXN0JylcIj5QYXN0PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItbG9hZGluZ1wiICpuZ0lmPVwibG9hZGluZ1wiPkxvYWRpbmcgeW91ciBib29raW5nc+KApjwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi1yb3dzXCIgKm5nSWY9XCIhbG9hZGluZyAmJiAhaXNFbXB0eVwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1iLXJvd1wiICpuZ0Zvcj1cImxldCBiIG9mIHJvd3NcIiAoY2xpY2spPVwidmlld0Jvb2tpbmdEZXRhaWwoYilcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItcm93LXN0cmlwZVwiIFtuZ0NsYXNzXT1cImIubW9kZSA9PT0gJ0hPTUVfVklTSVQnID8gJ3N0cmlwZS1ob21lJyA6IGIubW9kZSA9PT0gJ1ZJREVPX0NBTEwnID8gJ3N0cmlwZS12aWRlbycgOiAnc3RyaXBlLXN0b3JlJ1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi1yb3ctaW5mb1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLXJvdy10b3BcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLXJvdy10aXRsZVwiPnt7dGl0bGUoYil9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItcm93LXdoZW5cIj57e3doZW4oYil9fTwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLXJvdy1kZXRhaWxcIj57e2RldGFpbChiKX19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLXJvdy1lbmRcIj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWItc3RhdHVzXCIgW25nQ2xhc3NdPVwic3RhdHVzQ2xhc3MoYi5zdGF0dXMpXCI+e3tzdGF0dXNMYWJlbChiLnN0YXR1cyl9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibWItZW1wdHlcIiAqbmdJZj1cImlzRW1wdHlcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWItZW1wdHktaWNvblwiPmV2ZW50X2J1c3k8L21hdC1pY29uPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItZW1wdHktdGl0bGVcIj5ObyB7e3Byb2ZUYWJ9fSBib29raW5ncyB5ZXQuPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRUYWIgPT09ICdERVRBSUwnICYmIHNlbGVjdGVkXCI+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1iLWJhY2tcIiAoY2xpY2spPVwiYmFja1RvTGlzdCgpXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5hcnJvd19iYWNrPC9tYXQtaWNvbj4gQmFjayB0byBNeSBCb29raW5nc1xyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1jYXJkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtaGVhZGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC10aXRsZS1yb3dcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtdGl0bGVcIj57e3RpdGxlKHNlbGVjdGVkKX19PC9kaXY+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1iLXN0YXR1c1wiIFtuZ0NsYXNzXT1cInN0YXR1c0NsYXNzKHNlbGVjdGVkLnN0YXR1cylcIj57e3N0YXR1c0xhYmVsKHNlbGVjdGVkLnN0YXR1cyl9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXdoZW5cIj57e3doZW4oc2VsZWN0ZWQpfX08L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXJvd3NcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXJvd1wiICpuZ0lmPVwic2VsZWN0ZWQuc2VydmljZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1rXCI+U2VydmljZXM8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtdlwiPnt7c2VydmljZU5hbWVzKHNlbGVjdGVkKX19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1yb3dcIiAqbmdJZj1cInNlbGVjdGVkLnByb2R1Y3RMaW5lcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLWtcIj5Qcm9kdWN0czwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC12XCI+e3twcm9kdWN0TmFtZXMoc2VsZWN0ZWQpfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXJvd1wiICpuZ0lmPVwic2VsZWN0ZWQuY3VzdG9tZXJEZXRhaWxcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwta1wiPkNvbnRhY3Q8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtdlwiPnt7c2VsZWN0ZWQuY3VzdG9tZXJEZXRhaWw/Lm5hbWV9fSDCtyB7e3NlbGVjdGVkLmN1c3RvbWVyRGV0YWlsPy5waG9uZU51bWJlcn19IMK3IHt7c2VsZWN0ZWQuY3VzdG9tZXJEZXRhaWw/LmVtYWlsfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXJvd1wiICpuZ0lmPVwic2VsZWN0ZWQubW9kZSA9PT0gJ0hPTUVfVklTSVQnICYmIHNlbGVjdGVkLmFkZHJlc3NEZXRhaWxzXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLWtcIj5BZGRyZXNzPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXZcIj57e3NlbGVjdGVkLmFkZHJlc3NEZXRhaWxzPy5hZGRyZXNzTGluZTF9fSwge3tzZWxlY3RlZC5hZGRyZXNzRGV0YWlscz8uY2l0eX19LCB7e3NlbGVjdGVkLmFkZHJlc3NEZXRhaWxzPy5zdGF0ZX19IHt7c2VsZWN0ZWQuYWRkcmVzc0RldGFpbHM/LnppcENvZGV9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtcm93XCIgKm5nSWY9XCJzZXJ2aWNlUHJpY2VUb3RhbChzZWxlY3RlZCkgPiAwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLWtcIj5TZXJ2aWNlIHByaWNlPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXZcIj7igrl7e3NlcnZpY2VQcmljZVRvdGFsKHNlbGVjdGVkKX19PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1yb3dcIiAqbmdJZj1cInNlbGVjdGVkLmhvbWVWaXNpdENoYXJnZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1rXCI+SG9tZSB2aXNpdCBjaGFyZ2U8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtdlwiPuKCuXt7c2VsZWN0ZWQuaG9tZVZpc2l0Q2hhcmdlfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1rXCI+VG90YWw8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtdlwiPuKCuXt7dG90YWxEdWUoc2VsZWN0ZWQpfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXJvd1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1rXCI+UGFpZDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC12XCI+e3twYWlkTGFiZWwoc2VsZWN0ZWQpfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXJvd1wiICpuZ0lmPVwicGVuZGluZ0Ftb3VudChzZWxlY3RlZCkgPiAwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLWtcIj5QZW5kaW5nIGF0IGFwcG9pbnRtZW50PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXZcIj7igrl7e3BlbmRpbmdBbW91bnQoc2VsZWN0ZWQpfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItdmlkZW8tbGlua1wiICpuZ0lmPVwic2VsZWN0ZWQubW9kZSA9PT0gJ1ZJREVPX0NBTEwnICYmIHNlbGVjdGVkLnZpZGVvQ2FsbExpbmsgJiYgc2VsZWN0ZWQuc3RhdHVzICE9PSAnQ0FOQ0VMTEVEJ1wiPlxyXG4gICAgICAgIDxtYXQtaWNvbj52aWRlb2NhbTwvbWF0LWljb24+XHJcbiAgICAgICAgPGEgW2hyZWZdPVwic2VsZWN0ZWQudmlkZW9DYWxsTGlua1wiIHRhcmdldD1cIl9ibGFua1wiPnt7c2VsZWN0ZWQudmlkZW9DYWxsTGlua319PC9hPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5DYW5jZWxTZWxlY3RlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi1wb2xpY3lcIiAqbmdJZj1cImNhbmNlbGxhdGlvblBvbGljeVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLXBvbGljeS10aXRsZVwiPnt7Y2FuY2VsbGF0aW9uUG9saWN5LnRpdGxlfX08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1wb2xpY3ktdGV4dFwiPnt7Y2FuY2VsbGF0aW9uUG9saWN5LnBvbGljeURldGFpbHN9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWItY2FuY2VsLWJ0blwiIFtkaXNhYmxlZF09XCJjYW5jZWxsaW5nXCIgKGNsaWNrKT1cImNhbmNlbEJvb2tpbmcoKVwiPlxyXG4gICAgICAgICAge3tjYW5jZWxsaW5nID8gJ0NhbmNlbGxpbmfigKYnIDogJ0NhbmNlbCBib29raW5nJ319XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLWNhbmNlbGxlZC1ub3RlXCIgKm5nSWY9XCJzZWxlY3RlZC5zdGF0dXMgPT09ICdDQU5DRUxMRUQnXCI+VGhpcyBib29raW5nIGhhcyBiZWVuIGNhbmNlbGxlZC48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuIl19
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXktYm9va2luZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lbGVtZW50cy9teS1ib29raW5ncy9teS1ib29raW5ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2VsZW1lbnRzL215LWJvb2tpbmdzL215LWJvb2tpbmdzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQTBCNUM7Ozs7O0dBS0c7QUFTSCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQ21CLFdBQXdCLEVBQ3hCLGNBQXFDLEVBQ3JDLGNBQThCO1FBRjlCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFHakQsZUFBVSxHQUFzQixNQUFNLENBQUM7UUFDdkMsWUFBTyxHQUF3QixVQUFVLENBQUM7UUFDMUMsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFWCxnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFDdkMsYUFBUSxH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bEVZLFlBQVksNlZBQUUsYUFBYSxtTEFBRSxXQUFXOzs0RkFLdkMsbUJBQW1CO2tCQVIvQixTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxhQUN4QyxDQUFDLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBUb2FzdE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9hc3QnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWwnO1xuXG5pbnRlcmZhY2UgQm9va2luZ1JvdyB7XG4gIGdyb3VwSWQ6IHN0cmluZztcbiAgbW9kZTogJ1NUT1JFX1ZJU0lUJyB8ICdIT01FX1ZJU0lUJyB8ICdWSURFT19DQUxMJztcbiAgYm9va2luZ0RhdGU6IHN0cmluZztcbiAgc3RhcnRUaW1lPzogc3RyaW5nO1xuICBlbmRUaW1lPzogc3RyaW5nO1xuICBzdGF0dXM6ICdQRU5ESU5HJyB8ICdCT09LRUQnIHwgJ0hPTEQnIHwgJ0NPTVBMRVRFRCcgfCAnQ0FOQ0VMTEVEJztcbiAgc3RvcmVOYW1lPzogc3RyaW5nO1xuICBjdXN0b21lckRldGFpbD86IHsgbmFtZTogc3RyaW5nOyBwaG9uZU51bWJlcjogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH07XG4gIGFkZHJlc3NEZXRhaWxzPzogeyByZWNlaXZlck5hbWU6IHN0cmluZzsgcmVjZWl2ZXJQaG9uZTogc3RyaW5nOyBhZGRyZXNzTGluZTE6IHN0cmluZzsgYWRkcmVzc0xpbmUyPzogc3RyaW5nOyBjaXR5OiBzdHJpbmc7IHN0YXRlOiBzdHJpbmc7IHppcENvZGU6IHN0cmluZyB9O1xuICBwcm9kdWN0TGluZXM/OiB7IGl0ZW1OYW1lOiBzdHJpbmc7IHF1YW50aXR5OiBudW1iZXIgfVtdO1xuICAvKiogTm90IHBhcnQgb2YgdGhlIEdFVCAvYm9va2luZy9ncm91cC9teSByZXNwb25zZSAtIHNlcnZpY2VzIGxpdmUgb24gdGhlIHNlcGFyYXRlXG4gICAqIEJvb2tpbmdEZXRhaWwgY29sbGVjdGlvbiAoRksnZCB2aWEgc2VydmljZUxpbmVJZHMsIG5vdCBkZW5vcm1hbGl6ZWQgb250byBCb29raW5nR3JvdXApLCBzb1xuICAgKiB0aGlzIGlzIGZpbGxlZCBpbiBjbGllbnQtc2lkZSBhZnRlciBsb2FkKCkgdmlhIGEgcGVyLXJvdyBHRVQgLi4uL2xpbmVzIGNhbGwuICovXG4gIHNlcnZpY2VzPzogeyBuYW1lOiBzdHJpbmc7IGR1cmF0aW9uTWludXRlczogbnVtYmVyOyBwcmljZTogbnVtYmVyIH1bXTtcbiAgdmlkZW9DYWxsTGluaz86IHN0cmluZztcbiAgdG90YWxDb2xsZWN0ZWRBdEJvb2tpbmc/OiBudW1iZXI7XG4gIHRvdGFsUGF5YWJsZT86IG51bWJlcjtcbiAgaG9tZVZpc2l0Q2hhcmdlPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFwiTXkgQm9va2luZ3NcIiAtIGEgY3VzdG9tZXIncyBvd24gYm9va2luZyBoaXN0b3J5IChVcGNvbWluZy9QYXN0KSwgYSBkZXRhaWwgdmlldyBwZXIgYm9va2luZyxcbiAqIGFuZCBjYW5jZWxsYXRpb24uIFRoZSBsaXN0IGVuZHBvaW50IHJldHVybnMgZnVsbCBCb29raW5nR3JvdXAgcmVjb3JkcyAtIGVub3VnaCBmb3JcbiAqIGRhdGUvc3RhdHVzL2FkZHJlc3MvcHJvZHVjdHMgLSBidXQgc2VydmljZXMgYm9va2VkIGFyZW4ndCBvbiB0aGF0IHJlY29yZCAoc2VlIEJvb2tpbmdSb3cuc2VydmljZXNcbiAqIGFib3ZlKSwgc28gbG9hZCgpIGlzc3VlcyBvbmUgZXh0cmEgR0VUIC4uLi9saW5lcyBjYWxsIHBlciByb3cgdG8gZmlsbCB0aGVtIGluLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaW1wby1teS1ib29raW5ncycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEljb25Nb2R1bGUsIFRvYXN0TW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDogJy4vbXktYm9va2luZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbXktYm9va2luZ3MuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTXlCb29raW5nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgKSB7IH1cblxuICBjdXJyZW50VGFiOiAnTElTVCcgfCAnREVUQUlMJyA9ICdMSVNUJztcbiAgcHJvZlRhYjogJ3VwY29taW5nJyB8ICdwYXN0JyA9ICd1cGNvbWluZyc7XG4gIGxvYWRpbmcgPSB0cnVlO1xuICBjYW5jZWxsaW5nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBhbGxCb29raW5nczogQm9va2luZ1Jvd1tdID0gW107XG4gIHVwY29taW5nOiBCb29raW5nUm93W10gPSBbXTtcbiAgcGFzdDogQm9va2luZ1Jvd1tdID0gW107XG4gIHNlbGVjdGVkOiBCb29raW5nUm93IHwgbnVsbCA9IG51bGw7XG4gIGNhbmNlbGxhdGlvblBvbGljeTogeyB0aXRsZTogc3RyaW5nOyBwb2xpY3lEZXRhaWxzOiBzdHJpbmcgfSB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZCgpO1xuICB9XG5cbiAgbG9hZCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyAnJztcbiAgICBjb25zdCB1c2VySWQgPSAodGhpcy5zdG9yYWdlU2VydmljZS5nZXRVc2VyKCkgYXMgVXNlcik/LnVzZXJJZCA/PyAnJztcbiAgICBpZiAoIWJ1c2luZXNzSWQgfHwgIXVzZXJJZCkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0TXlCb29raW5ncyhidXNpbmVzc0lkLCB1c2VySWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWxsQm9va2luZ3MgPSAocmVzID8/IFtdKSBhcyBCb29raW5nUm93W107XG4gICAgICB0aGlzLnNwbGl0Qm9va2luZ3MoKTtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkU2VydmljZUxpbmVzKCk7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldENhbmNlbGxhdGlvblBvbGljeShidXNpbmVzc0lkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLmNhbmNlbGxhdGlvblBvbGljeSA9IChyZXMgPz8gW10pWzBdID8/IG51bGw7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgLy8gTm9uLWZhdGFsIC0gdGhlIGRldGFpbCB2aWV3IGp1c3Qgd29uJ3Qgc2hvdyBhIHBvbGljeSBub3RlLlxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1VwY29taW5nKGI6IEJvb2tpbmdSb3cpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgdG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIChiLnN0YXR1cyA9PT0gJ0hPTEQnIHx8IGIuc3RhdHVzID09PSAnQk9PS0VEJyB8fCBiLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKSAmJiBuZXcgRGF0ZShiLmJvb2tpbmdEYXRlKSA+PSB0b2RheTtcbiAgfVxuXG4gIHByaXZhdGUgc3BsaXRCb29raW5ncygpIHtcbiAgICB0aGlzLnVwY29taW5nID0gdGhpcy5hbGxCb29raW5ncy5maWx0ZXIoKGIpID0+IHRoaXMuaXNVcGNvbWluZyhiKSk7XG4gICAgdGhpcy5wYXN0ID0gdGhpcy5hbGxCb29raW5ncy5maWx0ZXIoKGIpID0+ICF0aGlzLmlzVXBjb21pbmcoYikpO1xuICB9XG5cbiAgLyoqIE9uZSBib29raW5nIGhpc3RvcnkgbG9hZCwgYm91bmRlZCB0byB0aGlzIGN1c3RvbWVyJ3Mgb3duIGJvb2tpbmdzIC0gYSBwZXItcm93IGNhbGwgaGVyZSBpc1xuICAgKiBmaW5lLCB1bmxpa2UgYW4gdW5ib3VuZGVkL3BhZ2luYXRlZCBsaXN0LiBGYWlsdXJlcyBhcmUgc3dhbGxvd2VkIHBlci1yb3cgKGZhbGxzIGJhY2sgdG8gbm9cbiAgICogc2VydmljZSBuYW1lcyBmb3IgdGhhdCByb3cpIHJhdGhlciB0aGFuIGJsb2NraW5nIHRoZSB3aG9sZSBwYWdlIG9uIG9uZSBiYWQgZ3JvdXAuICovXG4gIHByaXZhdGUgbG9hZFNlcnZpY2VMaW5lcygpIHtcbiAgICBpZiAoIXRoaXMuYWxsQm9va2luZ3MubGVuZ3RoKSByZXR1cm47XG4gICAgZm9ya0pvaW4oXG4gICAgICB0aGlzLmFsbEJvb2tpbmdzLm1hcCgoYikgPT5cbiAgICAgICAgdGhpcy5yZXN0U2VydmljZS5nZXRHcm91cExpbmVzKGIuZ3JvdXBJZCkucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKFtdKSkpXG4gICAgICApXG4gICAgKS5zdWJzY3JpYmUoKGFsbExpbmVzOiBhbnlbXSkgPT4ge1xuICAgICAgdGhpcy5hbGxCb29raW5ncy5mb3JFYWNoKChiLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmVzID0gYWxsTGluZXNbaV0gPz8gW107XG4gICAgICAgIGIuc2VydmljZXMgPSBsaW5lcy5mbGF0TWFwKChsOiBhbnkpID0+IChsLnNlcnZpY2VzID8/IFtdKS5tYXAoKHM6IGFueSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzLm5hbWUsIGR1cmF0aW9uTWludXRlczogcy5kdXJhdGlvbk1pbnV0ZXMsIHByaWNlOiBzLnByaWNlXG4gICAgICAgIH0pKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCByb3dzKCk6IEJvb2tpbmdSb3dbXSB7XG4gICAgcmV0dXJuIHRoaXMucHJvZlRhYiA9PT0gJ3VwY29taW5nJyA/IHRoaXMudXBjb21pbmcgOiB0aGlzLnBhc3Q7XG4gIH1cbiAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmxvYWRpbmcgJiYgdGhpcy5yb3dzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHNldFByb2ZUYWIodGFiOiAndXBjb21pbmcnIHwgJ3Bhc3QnKSB7XG4gICAgdGhpcy5wcm9mVGFiID0gdGFiO1xuICB9XG5cbiAgcHJvZHVjdE5hbWVzKGI6IEJvb2tpbmdSb3cpOiBzdHJpbmcge1xuICAgIHJldHVybiAoYi5wcm9kdWN0TGluZXMgPz8gW10pLm1hcCgocCkgPT4gcC5pdGVtTmFtZSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJyk7XG4gIH1cbiAgc2VydmljZU5hbWVzKGI6IEJvb2tpbmdSb3cpOiBzdHJpbmcge1xuICAgIHJldHVybiAoYi5zZXJ2aWNlcyA/PyBbXSkubWFwKChzKSA9PiBzLm5hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpO1xuICB9XG4gIHRpdGxlKGI6IEJvb2tpbmdSb3cpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vZGVMYWJlbCA9IGIubW9kZSA9PT0gJ0hPTUVfVklTSVQnID8gJ0hvbWUgVmlzaXQnIDogYi5tb2RlID09PSAnVklERU9fQ0FMTCcgPyAnVmlkZW8gQ2FsbCcgOiAnU3RvcmUgVmlzaXQnO1xuICAgIGNvbnN0IGl0ZW1zID0gW3RoaXMuc2VydmljZU5hbWVzKGIpLCB0aGlzLnByb2R1Y3ROYW1lcyhiKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywgJyk7XG4gICAgcmV0dXJuIGl0ZW1zID8gYCR7bW9kZUxhYmVsfSDCtyAke2l0ZW1zfWAgOiBtb2RlTGFiZWw7XG4gIH1cbiAgd2hlbihiOiBCb29raW5nUm93KTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYi5ib29raW5nRGF0ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1JTicsIHsgd2Vla2RheTogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycsIG1vbnRoOiAnc2hvcnQnLCB5ZWFyOiAnbnVtZXJpYycgfSk7XG4gICAgcmV0dXJuIGIuc3RhcnRUaW1lID8gYCR7ZGF0ZX0gwrcgJHtiLnN0YXJ0VGltZX1gIDogZGF0ZTtcbiAgfVxuICBkZXRhaWwoYjogQm9va2luZ1Jvdyk6IHN0cmluZyB7XG4gICAgaWYgKGIubW9kZSA9PT0gJ0hPTUVfVklTSVQnICYmIGIuYWRkcmVzc0RldGFpbHMpIHJldHVybiBgJHtiLmFkZHJlc3NEZXRhaWxzLmNpdHl9LCAke2IuYWRkcmVzc0RldGFpbHMuc3RhdGV9YDtcbiAgICBpZiAoYi5tb2RlID09PSAnU1RPUkVfVklTSVQnICYmIGIuc3RvcmVOYW1lKSByZXR1cm4gYi5zdG9yZU5hbWU7XG4gICAgcmV0dXJuIGIuY3VzdG9tZXJEZXRhaWw/Lm5hbWUgPz8gJyc7XG4gIH1cbiAgc3RhdHVzTGFiZWwoc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChzdGF0dXMgPT09ICdDT01QTEVURUQnKSByZXR1cm4gJ0NvbXBsZXRlZCc7XG4gICAgaWYgKHN0YXR1cyA9PT0gJ0NBTkNFTExFRCcpIHJldHVybiAnQ2FuY2VsbGVkJztcbiAgICBpZiAoc3RhdHVzID09PSAnSE9MRCcgfHwgc3RhdHVzID09PSAnUEVORElORycpIHJldHVybiAnUGF5bWVudCBQZW5kaW5nJztcbiAgICByZXR1cm4gJ0NvbmZpcm1lZCc7XG4gIH1cbiAgc3RhdHVzQ2xhc3Moc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChzdGF0dXMgPT09ICdDT01QTEVURUQnKSByZXR1cm4gJ3N0YXR1cy1jb21wbGV0ZWQnO1xuICAgIGlmIChzdGF0dXMgPT09ICdDQU5DRUxMRUQnKSByZXR1cm4gJ3N0YXR1cy1jYW5jZWxsZWQnO1xuICAgIGlmIChzdGF0dXMgPT09ICdIT0xEJyB8fCBzdGF0dXMgPT09ICdQRU5ESU5HJykgcmV0dXJuICdzdGF0dXMtcGVuZGluZyc7XG4gICAgcmV0dXJuICdzdGF0dXMtY29uZmlybWVkJztcbiAgfVxuICBwYWlkTGFiZWwoYjogQm9va2luZ1Jvdyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGIudG90YWxDb2xsZWN0ZWRBdEJvb2tpbmcgJiYgYi50b3RhbENvbGxlY3RlZEF0Qm9va2luZyA+IDAgPyBg4oK5JHtiLnRvdGFsQ29sbGVjdGVkQXRCb29raW5nfWAgOiAnTm90aGluZyDigJQgZnJlZSc7XG4gIH1cbiAgc2VydmljZVByaWNlVG90YWwoYjogQm9va2luZ1Jvdyk6IG51bWJlciB7XG4gICAgcmV0dXJuIChiLnNlcnZpY2VzID8/IFtdKS5yZWR1Y2UoKHN1bSwgcykgPT4gc3VtICsgKHMucHJpY2UgfHwgMCksIDApO1xuICB9XG4gIHRvdGFsRHVlKGI6IEJvb2tpbmdSb3cpOiBudW1iZXIge1xuICAgIHJldHVybiAoYi50b3RhbFBheWFibGUgPz8gMCkgKyAoYi5ob21lVmlzaXRDaGFyZ2UgPz8gMCk7XG4gIH1cbiAgcGVuZGluZ0Ftb3VudChiOiBCb29raW5nUm93KTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgdGhpcy50b3RhbER1ZShiKSAtIChiLnRvdGFsQ29sbGVjdGVkQXRCb29raW5nID8/IDApKTtcbiAgfVxuICBnZXQgY2FuQ2FuY2VsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZCAmJiAodGhpcy5zZWxlY3RlZC5zdGF0dXMgPT09ICdIT0xEJyB8fCB0aGlzLnNlbGVjdGVkLnN0YXR1cyA9PT0gJ0JPT0tFRCcgfHwgdGhpcy5zZWxlY3RlZC5zdGF0dXMgPT09ICdQRU5ESU5HJyk7XG4gIH1cblxuICB2aWV3Qm9va2luZ0RldGFpbChiOiBCb29raW5nUm93KSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IGI7XG4gICAgdGhpcy5jdXJyZW50VGFiID0gJ0RFVEFJTCc7XG4gIH1cbiAgYmFja1RvTGlzdCgpIHtcbiAgICB0aGlzLmN1cnJlbnRUYWIgPSAnTElTVCc7XG4gICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XG4gIH1cblxuICBjYW5jZWxCb29raW5nKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZCB8fCB0aGlzLmNhbmNlbGxpbmcpIHJldHVybjtcbiAgICB0aGlzLmNhbmNlbGxpbmcgPSB0cnVlO1xuICAgIHRoaXMucmVzdFNlcnZpY2UuY2FuY2VsQm9va2luZ0dyb3VwKHRoaXMuc2VsZWN0ZWQuZ3JvdXBJZCwgJ0NhbmNlbGxlZCBieSBjdXN0b21lcicpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNhbmNlbGxpbmcgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB0aGlzLnNlbGVjdGVkLnN0YXR1cyA9ICdDQU5DRUxMRUQnO1xuICAgICAgdGhpcy5zcGxpdEJvb2tpbmdzKCk7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnc3VjY2VzcycsIHN1bW1hcnk6ICdCb29raW5nIGNhbmNlbGxlZCcgfSk7XG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY2FuY2VsbGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm9yJywgZGV0YWlsOiBlcnJvcj8uZXJyb3I/LmRldGFpbCA/PyAnQ291bGQgbm90IGNhbmNlbCB0aGlzIGJvb2tpbmcnIH0pO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiPjwvcC10b2FzdD5cblxuPGRpdiBjbGFzcz1cIm1iLXJvb3RcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRUYWIgPT09ICdMSVNUJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJtYi10aXRsZVwiPk15IEJvb2tpbmdzPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWItdGFic1wiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYi10YWJcIiBbY2xhc3MuYWN0aXZlXT1cInByb2ZUYWIgPT09ICd1cGNvbWluZydcIiAoY2xpY2spPVwic2V0UHJvZlRhYigndXBjb21pbmcnKVwiPlVwY29taW5nPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1iLXRhYlwiIFtjbGFzcy5hY3RpdmVdPVwicHJvZlRhYiA9PT0gJ3Bhc3QnXCIgKGNsaWNrKT1cInNldFByb2ZUYWIoJ3Bhc3QnKVwiPlBhc3Q8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi1sb2FkaW5nXCIgKm5nSWY9XCJsb2FkaW5nXCI+TG9hZGluZyB5b3VyIGJvb2tpbmdz4oCmPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibWItcm93c1wiICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWlzRW1wdHlcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWItcm93XCIgKm5nRm9yPVwibGV0IGIgb2Ygcm93c1wiIChjbGljayk9XCJ2aWV3Qm9va2luZ0RldGFpbChiKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItcm93LXN0cmlwZVwiIFtuZ0NsYXNzXT1cImIubW9kZSA9PT0gJ0hPTUVfVklTSVQnID8gJ3N0cmlwZS1ob21lJyA6IGIubW9kZSA9PT0gJ1ZJREVPX0NBTEwnID8gJ3N0cmlwZS12aWRlbycgOiAnc3RyaXBlLXN0b3JlJ1wiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItcm93LWluZm9cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItcm93LXRvcFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLXJvdy10aXRsZVwiPnt7dGl0bGUoYil9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1yb3ctd2hlblwiPnt7d2hlbihiKX19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLXJvdy1kZXRhaWxcIj57e2RldGFpbChiKX19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItcm93LWVuZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWItc3RhdHVzXCIgW25nQ2xhc3NdPVwic3RhdHVzQ2xhc3MoYi5zdGF0dXMpXCI+e3tzdGF0dXNMYWJlbChiLnN0YXR1cyl9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi1lbXB0eVwiICpuZ0lmPVwiaXNFbXB0eVwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWItZW1wdHktaWNvblwiPmV2ZW50X2J1c3k8L21hdC1pY29uPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLWVtcHR5LXRpdGxlXCI+Tm8ge3twcm9mVGFifX0gYm9va2luZ3MgeWV0LjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFRhYiA9PT0gJ0RFVEFJTCcgJiYgc2VsZWN0ZWRcIj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1iLWJhY2tcIiAoY2xpY2spPVwiYmFja1RvTGlzdCgpXCI+XG4gICAgICA8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+IEJhY2sgdG8gTXkgQm9va2luZ3NcbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtY2FyZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC10aXRsZS1yb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXRpdGxlXCI+e3t0aXRsZShzZWxlY3RlZCl9fTwvZGl2PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWItc3RhdHVzXCIgW25nQ2xhc3NdPVwic3RhdHVzQ2xhc3Moc2VsZWN0ZWQuc3RhdHVzKVwiPnt7c3RhdHVzTGFiZWwoc2VsZWN0ZWQuc3RhdHVzKX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC13aGVuXCI+e3t3aGVuKHNlbGVjdGVkKX19PC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1yb3dzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtcm93XCIgKm5nSWY9XCJzZWxlY3RlZC5zZXJ2aWNlcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1rXCI+U2VydmljZXM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXZcIj57e3NlcnZpY2VOYW1lcyhzZWxlY3RlZCl9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1yb3dcIiAqbmdJZj1cInNlbGVjdGVkLnByb2R1Y3RMaW5lcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1rXCI+UHJvZHVjdHM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXZcIj57e3Byb2R1Y3ROYW1lcyhzZWxlY3RlZCl9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1yb3dcIiAqbmdJZj1cInNlbGVjdGVkLmN1c3RvbWVyRGV0YWlsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1rXCI+Q29udGFjdDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtdlwiPnt7c2VsZWN0ZWQuY3VzdG9tZXJEZXRhaWw/Lm5hbWV9fSDCtyB7e3NlbGVjdGVkLmN1c3RvbWVyRGV0YWlsPy5waG9uZU51bWJlcn19IMK3IHt7c2VsZWN0ZWQuY3VzdG9tZXJEZXRhaWw/LmVtYWlsfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtcm93XCIgKm5nSWY9XCJzZWxlY3RlZC5tb2RlID09PSAnSE9NRV9WSVNJVCcgJiYgc2VsZWN0ZWQuYWRkcmVzc0RldGFpbHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLWtcIj5BZGRyZXNzPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC12XCI+e3tzZWxlY3RlZC5hZGRyZXNzRGV0YWlscz8uYWRkcmVzc0xpbmUxfX0sIHt7c2VsZWN0ZWQuYWRkcmVzc0RldGFpbHM/LmNpdHl9fSwge3tzZWxlY3RlZC5hZGRyZXNzRGV0YWlscz8uc3RhdGV9fSB7e3NlbGVjdGVkLmFkZHJlc3NEZXRhaWxzPy56aXBDb2RlfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtcm93XCIgKm5nSWY9XCJzZXJ2aWNlUHJpY2VUb3RhbChzZWxlY3RlZCkgPiAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1rXCI+U2VydmljZSBwcmljZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtdlwiPuKCuXt7c2VydmljZVByaWNlVG90YWwoc2VsZWN0ZWQpfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtcm93XCIgKm5nSWY9XCJzZWxlY3RlZC5ob21lVmlzaXRDaGFyZ2VcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLWtcIj5Ib21lIHZpc2l0IGNoYXJnZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtdlwiPuKCuXt7c2VsZWN0ZWQuaG9tZVZpc2l0Q2hhcmdlfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwtcm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1rXCI+VG90YWw8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXZcIj7igrl7e3RvdGFsRHVlKHNlbGVjdGVkKX19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwta1wiPlBhaWQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXZcIj57e3BhaWRMYWJlbChzZWxlY3RlZCl9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLWRldGFpbC1yb3dcIiAqbmdJZj1cInBlbmRpbmdBbW91bnQoc2VsZWN0ZWQpID4gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1kZXRhaWwta1wiPlBlbmRpbmcgYXQgYXBwb2ludG1lbnQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItZGV0YWlsLXZcIj7igrl7e3BlbmRpbmdBbW91bnQoc2VsZWN0ZWQpfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm1iLXZpZGVvLWxpbmtcIiAqbmdJZj1cInNlbGVjdGVkLm1vZGUgPT09ICdWSURFT19DQUxMJyAmJiBzZWxlY3RlZC52aWRlb0NhbGxMaW5rICYmIHNlbGVjdGVkLnN0YXR1cyAhPT0gJ0NBTkNFTExFRCdcIj5cbiAgICAgICAgPG1hdC1pY29uPnZpZGVvY2FtPC9tYXQtaWNvbj5cbiAgICAgICAgPGEgW2hyZWZdPVwic2VsZWN0ZWQudmlkZW9DYWxsTGlua1wiIHRhcmdldD1cIl9ibGFua1wiPnt7c2VsZWN0ZWQudmlkZW9DYWxsTGlua319PC9hPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5DYW5jZWxTZWxlY3RlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItcG9saWN5XCIgKm5nSWY9XCJjYW5jZWxsYXRpb25Qb2xpY3lcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItcG9saWN5LXRpdGxlXCI+e3tjYW5jZWxsYXRpb25Qb2xpY3kudGl0bGV9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi1wb2xpY3ktdGV4dFwiPnt7Y2FuY2VsbGF0aW9uUG9saWN5LnBvbGljeURldGFpbHN9fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYi1jYW5jZWwtYnRuXCIgW2Rpc2FibGVkXT1cImNhbmNlbGxpbmdcIiAoY2xpY2spPVwiY2FuY2VsQm9va2luZygpXCI+XG4gICAgICAgICAge3tjYW5jZWxsaW5nID8gJ0NhbmNlbGxpbmfigKYnIDogJ0NhbmNlbCBib29raW5nJ319XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi1jYW5jZWxsZWQtbm90ZVwiICpuZ0lmPVwic2VsZWN0ZWQuc3RhdHVzID09PSAnQ0FOQ0VMTEVEJ1wiPlRoaXMgYm9va2luZyBoYXMgYmVlbiBjYW5jZWxsZWQuPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=