@snabcentr/client-ui 4.14.8 → 4.14.9

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 (590) hide show
  1. package/fesm2022/snabcentr-client-ui.mjs +3439 -4483
  2. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  3. package/icons/svg-pack/application.svg +1 -1
  4. package/icons/svg-pack/back.svg +1 -1
  5. package/icons/svg-pack/bag.svg +1 -1
  6. package/icons/svg-pack/banknote-arrow-in-top.svg +1 -1
  7. package/icons/svg-pack/catalog/aluminum-systems.svg +1 -1
  8. package/icons/svg-pack/catalog/arm-profile.svg +1 -1
  9. package/icons/svg-pack/catalog/batten.svg +1 -1
  10. package/icons/svg-pack/catalog/brusbox.svg +1 -1
  11. package/icons/svg-pack/catalog/canopy.svg +1 -1
  12. package/icons/svg-pack/catalog/configurator.svg +1 -1
  13. package/icons/svg-pack/catalog/covering-material.svg +1 -1
  14. package/icons/svg-pack/catalog/door-accessories.svg +1 -1
  15. package/icons/svg-pack/catalog/drainage-system.svg +1 -1
  16. package/icons/svg-pack/catalog/fastener.svg +1 -1
  17. package/icons/svg-pack/catalog/finishing-materials.svg +1 -1
  18. package/icons/svg-pack/catalog/fixing-impost.svg +1 -1
  19. package/icons/svg-pack/catalog/flask.svg +1 -1
  20. package/icons/svg-pack/catalog/foam-balloon.svg +1 -1
  21. package/icons/svg-pack/catalog/foam.svg +1 -1
  22. package/icons/svg-pack/catalog/glue.svg +1 -1
  23. package/icons/svg-pack/catalog/handle.svg +1 -1
  24. package/icons/svg-pack/catalog/instrument.svg +1 -1
  25. package/icons/svg-pack/catalog/kve-profile.svg +1 -1
  26. package/icons/svg-pack/catalog/lubricants.svg +1 -1
  27. package/icons/svg-pack/catalog/mosquito-net.svg +1 -1
  28. package/icons/svg-pack/catalog/mounting-accessories.svg +1 -1
  29. package/icons/svg-pack/catalog/net-order.svg +1 -1
  30. package/icons/svg-pack/catalog/panel-1.svg +1 -1
  31. package/icons/svg-pack/catalog/panel.svg +1 -1
  32. package/icons/svg-pack/catalog/polyethylene-film.svg +1 -1
  33. package/icons/svg-pack/catalog/profile-plastic.svg +1 -1
  34. package/icons/svg-pack/catalog/promo-materials.svg +1 -1
  35. package/icons/svg-pack/catalog/psul.svg +1 -1
  36. package/icons/svg-pack/catalog/rehau-profile.svg +1 -1
  37. package/icons/svg-pack/catalog/sandwich-plastic.svg +1 -1
  38. package/icons/svg-pack/catalog/sealer.svg +1 -1
  39. package/icons/svg-pack/catalog/siding-2.svg +1 -1
  40. package/icons/svg-pack/catalog/siding.svg +1 -1
  41. package/icons/svg-pack/catalog/start-finish-profile.svg +1 -1
  42. package/icons/svg-pack/catalog/steam-waterproofing.svg +1 -1
  43. package/icons/svg-pack/catalog/stiz.svg +1 -1
  44. package/icons/svg-pack/catalog/thermometer.svg +1 -1
  45. package/icons/svg-pack/catalog/windowsill.svg +1 -1
  46. package/icons/svg-pack/chart-column-plus.svg +1 -1
  47. package/icons/svg-pack/circle-arrow-in-right.svg +1 -1
  48. package/icons/svg-pack/contacts.svg +1 -1
  49. package/icons/svg-pack/deadline.svg +1 -1
  50. package/icons/svg-pack/file-p.svg +1 -1
  51. package/icons/svg-pack/file-search.svg +1 -1
  52. package/icons/svg-pack/file-w.svg +1 -1
  53. package/icons/svg-pack/file-x.svg +1 -1
  54. package/icons/svg-pack/grid-height-arrow.svg +1 -1
  55. package/icons/svg-pack/grid-width-arrow.svg +1 -1
  56. package/icons/svg-pack/layout-list-tree.svg +1 -1
  57. package/icons/svg-pack/list.svg +1 -1
  58. package/icons/svg-pack/puzzle.svg +1 -1
  59. package/icons/svg-pack/reclamation.svg +1 -1
  60. package/icons/svg-pack/retail-store.svg +1 -1
  61. package/icons/svg-pack/send.svg +1 -1
  62. package/package.json +35 -36
  63. package/release_notes.tmp +16 -2
  64. package/styles/taiga/variables.less +35 -17
  65. package/styles/tailwind/tailwind.scss +12 -12
  66. package/types/snabcentr-client-ui.d.ts +6787 -0
  67. package/accordion/index.d.ts +0 -3
  68. package/accordion/sc-accordion-content.directive.d.ts +0 -9
  69. package/accordion/sc-accordion.component.d.ts +0 -56
  70. package/accordion/sc-accordion.module.d.ts +0 -15
  71. package/auth/enums/auth-method.d.ts +0 -13
  72. package/auth/index.d.ts +0 -8
  73. package/auth/interfaces/index.d.ts +0 -2
  74. package/auth/interfaces/sc-bank-account-form-group.d.ts +0 -11
  75. package/auth/interfaces/sc-contact-form-group.d.ts +0 -10
  76. package/auth/sc-auth.module.d.ts +0 -27
  77. package/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.d.ts +0 -55
  78. package/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.d.ts +0 -45
  79. package/auth/sc-sign-in-form/sc-sign-in-form.component.d.ts +0 -53
  80. package/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.d.ts +0 -113
  81. package/auth/sign-up-form/sc-sign-up-form.component.d.ts +0 -172
  82. package/banner/index.d.ts +0 -2
  83. package/banner/sc-banner.component.d.ts +0 -108
  84. package/banner/sc-banner.module.d.ts +0 -17
  85. package/brands-list/index.d.ts +0 -3
  86. package/brands-list/sc-brand-list-item.d.ts +0 -25
  87. package/brands-list/sc-brands-list.component.d.ts +0 -13
  88. package/brands-list/sc-brands-list.module.d.ts +0 -12
  89. package/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.d.ts +0 -106
  90. package/cart/add-or-editing-cart-item-dialog/index.d.ts +0 -2
  91. package/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.d.ts +0 -49
  92. package/cart/index.d.ts +0 -2
  93. package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +0 -62
  94. package/catalog/catalog-filters/collapsible/sc-catalog-filter-collapsible.component.d.ts +0 -47
  95. package/catalog/catalog-filters/index.d.ts +0 -4
  96. package/catalog/catalog-filters/sc-catalog-filters.component.d.ts +0 -199
  97. package/catalog/catalog-filters/tokens/sc-catalog-products-filters.d.ts +0 -7
  98. package/catalog/catalog-filters/tokens/sc-catalog-show-products-recursively.d.ts +0 -5
  99. package/catalog/category-card/sc-category-card.component.d.ts +0 -76
  100. package/catalog/cost-with-discount/cost-with-discount.component.d.ts +0 -23
  101. package/catalog/download-price-list/sc-download-price-list.component.d.ts +0 -38
  102. package/catalog/hover-image-carousel/sc-hover-image-carousel.component.d.ts +0 -48
  103. package/catalog/index.d.ts +0 -15
  104. package/catalog/input-quantity/sc-input-quantity.component.d.ts +0 -82
  105. package/catalog/notify-when-in-stock-dialog/index.d.ts +0 -2
  106. package/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.d.ts +0 -90
  107. package/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.d.ts +0 -22
  108. package/catalog/price-card/sc-price-card.component.d.ts +0 -18
  109. package/catalog/price-card-inline/sc-price-card-inline.component.d.ts +0 -10
  110. package/catalog/price-history/sc-price-history.component.d.ts +0 -92
  111. package/catalog/price-list-pagination/sc-price-list-pagination.component.d.ts +0 -40
  112. package/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.d.ts +0 -47
  113. package/catalog/sc-catalog.module.d.ts +0 -29
  114. package/catalog/sc-favorite-button/sc-favorite-button.component.d.ts +0 -25
  115. package/catalog/seo-tags/sc-seo-tags.component.d.ts +0 -20
  116. package/configurators/index.d.ts +0 -3
  117. package/configurators/models/index.d.ts +0 -3
  118. package/configurators/models/sandwich/sc-i-configurator-search-product-sandwich.d.ts +0 -22
  119. package/configurators/models/sandwich/sc-i-sandwich-settings.d.ts +0 -18
  120. package/configurators/models/sandwich_m2/sc-i-sandwich-m2-settings.d.ts +0 -18
  121. package/configurators/sandwich/index.d.ts +0 -3
  122. package/configurators/sandwich/sandwich-skeleton/sc-sandwich-skeleton.component.d.ts +0 -8
  123. package/configurators/sandwich/sc-i-new-cart-item-sandwich.d.ts +0 -14
  124. package/configurators/sandwich/sc-sandwich.component.d.ts +0 -186
  125. package/configurators/sandwich_m2/index.d.ts +0 -4
  126. package/configurators/sandwich_m2/sandwich-m2-skeleton/sc-sandwich-m2-skeleton.component.d.ts +0 -8
  127. package/configurators/sandwich_m2/sc-i-new-cart-item-sandwich-m2.d.ts +0 -23
  128. package/configurators/sandwich_m2/sc-sandwich-m2-item-submit-state.d.ts +0 -13
  129. package/configurators/sandwich_m2/sc-sandwich-m2.component.d.ts +0 -275
  130. package/contacts/add-contact-dialog/sc-add-contact-dialog.component.d.ts +0 -49
  131. package/contacts/contacts-accordion/sc-contacts-accordion.component.d.ts +0 -23
  132. package/contacts/index.d.ts +0 -7
  133. package/contacts/manager-card/sc-manager-card.component.d.ts +0 -22
  134. package/contacts/manager-card-push/sc-manager-card-push.component.d.ts +0 -18
  135. package/contacts/new-contact-form/sc-new-contact-form.component.d.ts +0 -28
  136. package/contacts/sc-contacts.module.d.ts +0 -27
  137. package/contacts/tokens/index.d.ts +0 -2
  138. package/contacts/tokens/sc-manager-qr-handler.token.d.ts +0 -6
  139. package/contacts/tokens/sc-show-help-notification-in-phone-input.token.d.ts +0 -5
  140. package/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.d.ts +0 -49
  141. package/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.d.ts +0 -158
  142. package/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.d.ts +0 -62
  143. package/contragents/contragents-accordion/sc-contragents-accordion.component.d.ts +0 -49
  144. package/contragents/index.d.ts +0 -7
  145. package/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.d.ts +0 -64
  146. package/contragents/new-contragent-form/sc-new-contragent-form.component.d.ts +0 -123
  147. package/contragents/sc-contragents.module.d.ts +0 -27
  148. package/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.d.ts +0 -148
  149. package/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.d.ts +0 -50
  150. package/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.d.ts +0 -49
  151. package/delivery-address/index.d.ts +0 -4
  152. package/delivery-address/sc-delivery-address.module.d.ts +0 -25
  153. package/dialogs/index.d.ts +0 -1
  154. package/dialogs/sc-resource-preview/sc-resource-preview.component.d.ts +0 -42
  155. package/directives/abstract-price-card/abstract-sc-price-card.directive.d.ts +0 -136
  156. package/directives/address-quality/sc-address-quality.directive.d.ts +0 -23
  157. package/directives/address-quality/sc-address-quality.service.d.ts +0 -122
  158. package/directives/address-quality/sc-i-address-quality-state.d.ts +0 -14
  159. package/directives/index.d.ts +0 -11
  160. package/directives/links/index.d.ts +0 -4
  161. package/directives/links/sc-email-link.directive.d.ts +0 -25
  162. package/directives/links/sc-link-location.d.ts +0 -5
  163. package/directives/links/sc-links.d.ts +0 -7
  164. package/directives/links/sc-tel-link.directive.d.ts +0 -40
  165. package/directives/next-input-focus/sc-next-input-focus.directive.d.ts +0 -27
  166. package/directives/next-input-focus/sc-next-input-focus.module.d.ts +0 -10
  167. package/directives/print/sc-print.directive.d.ts +0 -21
  168. package/directives/sc-date-value-transformer.directive.d.ts +0 -8
  169. package/directives/sc-focus-first-invalid-field.directive.d.ts +0 -30
  170. package/directives/select-on-focusin/sc-select-on-focusin.directive.d.ts +0 -14
  171. package/directives/terminal-link/sc-terminal-link.directive.d.ts +0 -34
  172. package/error-handler/consts/error-change-handler.providers.d.ts +0 -6
  173. package/error-handler/error-block-status/error-block-status.component.d.ts +0 -55
  174. package/error-handler/index.d.ts +0 -4
  175. package/error-handler/interfaces/i-block-error.d.ts +0 -17
  176. package/error-handler/sc-error-handler.component.d.ts +0 -40
  177. package/esm2022/accordion/index.mjs +0 -4
  178. package/esm2022/accordion/sc-accordion-content.directive.mjs +0 -17
  179. package/esm2022/accordion/sc-accordion.component.mjs +0 -92
  180. package/esm2022/accordion/sc-accordion.module.mjs +0 -26
  181. package/esm2022/auth/enums/auth-method.mjs +0 -15
  182. package/esm2022/auth/index.mjs +0 -9
  183. package/esm2022/auth/interfaces/index.mjs +0 -3
  184. package/esm2022/auth/interfaces/sc-bank-account-form-group.mjs +0 -2
  185. package/esm2022/auth/interfaces/sc-contact-form-group.mjs +0 -2
  186. package/esm2022/auth/sc-auth.module.mjs +0 -103
  187. package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-email/sc-sign-in-form-by-email.component.mjs +0 -100
  188. package/esm2022/auth/sc-sign-in-form/sc-sign-in-form-by-phone/sc-sign-in-form-by-phone.component.mjs +0 -81
  189. package/esm2022/auth/sc-sign-in-form/sc-sign-in-form.component.mjs +0 -89
  190. package/esm2022/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.mjs +0 -203
  191. package/esm2022/auth/sign-up-form/sc-sign-up-form.component.mjs +0 -344
  192. package/esm2022/banner/index.mjs +0 -3
  193. package/esm2022/banner/sc-banner.component.mjs +0 -176
  194. package/esm2022/banner/sc-banner.module.mjs +0 -29
  195. package/esm2022/brands-list/index.mjs +0 -4
  196. package/esm2022/brands-list/sc-brand-list-item.mjs +0 -2
  197. package/esm2022/brands-list/sc-brands-list.component.mjs +0 -24
  198. package/esm2022/brands-list/sc-brands-list.module.mjs +0 -22
  199. package/esm2022/cart/add-or-editing-cart-item-dialog/add-or-editing-cart-item-form/sc-add-or-editing-cart-item-form.component.mjs +0 -233
  200. package/esm2022/cart/add-or-editing-cart-item-dialog/index.mjs +0 -3
  201. package/esm2022/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.mjs +0 -75
  202. package/esm2022/cart/index.mjs +0 -3
  203. package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +0 -110
  204. package/esm2022/catalog/catalog-filters/collapsible/sc-catalog-filter-collapsible.component.mjs +0 -59
  205. package/esm2022/catalog/catalog-filters/index.mjs +0 -5
  206. package/esm2022/catalog/catalog-filters/sc-catalog-filters.component.mjs +0 -451
  207. package/esm2022/catalog/catalog-filters/tokens/sc-catalog-products-filters.mjs +0 -10
  208. package/esm2022/catalog/catalog-filters/tokens/sc-catalog-show-products-recursively.mjs +0 -6
  209. package/esm2022/catalog/category-card/sc-category-card.component.mjs +0 -102
  210. package/esm2022/catalog/cost-with-discount/cost-with-discount.component.mjs +0 -38
  211. package/esm2022/catalog/download-price-list/sc-download-price-list.component.mjs +0 -56
  212. package/esm2022/catalog/hover-image-carousel/sc-hover-image-carousel.component.mjs +0 -76
  213. package/esm2022/catalog/index.mjs +0 -16
  214. package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +0 -190
  215. package/esm2022/catalog/notify-when-in-stock-dialog/index.mjs +0 -3
  216. package/esm2022/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.mjs +0 -173
  217. package/esm2022/catalog/notify-when-in-stock-dialog/sc-product-in-all-warehouses.pipe.mjs +0 -35
  218. package/esm2022/catalog/price-card/sc-price-card.component.mjs +0 -71
  219. package/esm2022/catalog/price-card-inline/sc-price-card-inline.component.mjs +0 -54
  220. package/esm2022/catalog/price-history/sc-price-history.component.mjs +0 -144
  221. package/esm2022/catalog/price-list-pagination/sc-price-list-pagination.component.mjs +0 -65
  222. package/esm2022/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.mjs +0 -61
  223. package/esm2022/catalog/sc-catalog.module.mjs +0 -128
  224. package/esm2022/catalog/sc-favorite-button/sc-favorite-button.component.mjs +0 -42
  225. package/esm2022/catalog/seo-tags/sc-seo-tags.component.mjs +0 -25
  226. package/esm2022/configurators/index.mjs +0 -4
  227. package/esm2022/configurators/models/index.mjs +0 -4
  228. package/esm2022/configurators/models/sandwich/sc-i-configurator-search-product-sandwich.mjs +0 -2
  229. package/esm2022/configurators/models/sandwich/sc-i-sandwich-settings.mjs +0 -2
  230. package/esm2022/configurators/models/sandwich_m2/sc-i-sandwich-m2-settings.mjs +0 -2
  231. package/esm2022/configurators/sandwich/index.mjs +0 -4
  232. package/esm2022/configurators/sandwich/sandwich-skeleton/sc-sandwich-skeleton.component.mjs +0 -14
  233. package/esm2022/configurators/sandwich/sc-i-new-cart-item-sandwich.mjs +0 -2
  234. package/esm2022/configurators/sandwich/sc-sandwich.component.mjs +0 -387
  235. package/esm2022/configurators/sandwich_m2/index.mjs +0 -5
  236. package/esm2022/configurators/sandwich_m2/sandwich-m2-skeleton/sc-sandwich-m2-skeleton.component.mjs +0 -14
  237. package/esm2022/configurators/sandwich_m2/sc-i-new-cart-item-sandwich-m2.mjs +0 -2
  238. package/esm2022/configurators/sandwich_m2/sc-sandwich-m2-item-submit-state.mjs +0 -5
  239. package/esm2022/configurators/sandwich_m2/sc-sandwich-m2.component.mjs +0 -569
  240. package/esm2022/contacts/add-contact-dialog/sc-add-contact-dialog.component.mjs +0 -91
  241. package/esm2022/contacts/contacts-accordion/sc-contacts-accordion.component.mjs +0 -37
  242. package/esm2022/contacts/index.mjs +0 -8
  243. package/esm2022/contacts/manager-card/sc-manager-card.component.mjs +0 -58
  244. package/esm2022/contacts/manager-card-push/sc-manager-card-push.component.mjs +0 -28
  245. package/esm2022/contacts/new-contact-form/sc-new-contact-form.component.mjs +0 -37
  246. package/esm2022/contacts/sc-contacts.module.mjs +0 -89
  247. package/esm2022/contacts/tokens/index.mjs +0 -3
  248. package/esm2022/contacts/tokens/sc-manager-qr-handler.token.mjs +0 -25
  249. package/esm2022/contacts/tokens/sc-show-help-notification-in-phone-input.token.mjs +0 -9
  250. package/esm2022/contragents/add-contragent-bank-account-dialog/sc-add-contragent-bank-account-dialog.component.mjs +0 -81
  251. package/esm2022/contragents/add-contragent-dialog/sc-add-contragent-dialog.component.mjs +0 -266
  252. package/esm2022/contragents/contragents-accordion/contragents-accordion-item/sc-contragents-accordion-item.component.mjs +0 -74
  253. package/esm2022/contragents/contragents-accordion/sc-contragents-accordion.component.mjs +0 -68
  254. package/esm2022/contragents/index.mjs +0 -8
  255. package/esm2022/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.mjs +0 -72
  256. package/esm2022/contragents/new-contragent-form/sc-new-contragent-form.component.mjs +0 -230
  257. package/esm2022/contragents/sc-contragents.module.mjs +0 -118
  258. package/esm2022/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +0 -261
  259. package/esm2022/delivery-address/delivery-address-accordion/delivery-address-accordion-item/sc-delivery-address-accordion-item.component.mjs +0 -60
  260. package/esm2022/delivery-address/delivery-address-accordion/sc-delivery-address-accordion.component.mjs +0 -68
  261. package/esm2022/delivery-address/index.mjs +0 -5
  262. package/esm2022/delivery-address/sc-delivery-address.module.mjs +0 -96
  263. package/esm2022/dialogs/index.mjs +0 -2
  264. package/esm2022/dialogs/sc-resource-preview/sc-resource-preview.component.mjs +0 -73
  265. package/esm2022/directives/abstract-price-card/abstract-sc-price-card.directive.mjs +0 -170
  266. package/esm2022/directives/address-quality/sc-address-quality.directive.mjs +0 -40
  267. package/esm2022/directives/address-quality/sc-address-quality.service.mjs +0 -214
  268. package/esm2022/directives/address-quality/sc-i-address-quality-state.mjs +0 -2
  269. package/esm2022/directives/index.mjs +0 -12
  270. package/esm2022/directives/links/index.mjs +0 -5
  271. package/esm2022/directives/links/sc-email-link.directive.mjs +0 -49
  272. package/esm2022/directives/links/sc-link-location.mjs +0 -2
  273. package/esm2022/directives/links/sc-links.mjs +0 -8
  274. package/esm2022/directives/links/sc-tel-link.directive.mjs +0 -79
  275. package/esm2022/directives/next-input-focus/sc-next-input-focus.directive.mjs +0 -70
  276. package/esm2022/directives/next-input-focus/sc-next-input-focus.module.mjs +0 -19
  277. package/esm2022/directives/print/sc-print.directive.mjs +0 -36
  278. package/esm2022/directives/sc-date-value-transformer.directive.mjs +0 -30
  279. package/esm2022/directives/sc-focus-first-invalid-field.directive.mjs +0 -85
  280. package/esm2022/directives/select-on-focusin/sc-select-on-focusin.directive.mjs +0 -36
  281. package/esm2022/directives/terminal-link/sc-terminal-link.directive.mjs +0 -69
  282. package/esm2022/error-handler/consts/error-change-handler.providers.mjs +0 -10
  283. package/esm2022/error-handler/error-block-status/error-block-status.component.mjs +0 -101
  284. package/esm2022/error-handler/index.mjs +0 -5
  285. package/esm2022/error-handler/interfaces/i-block-error.mjs +0 -2
  286. package/esm2022/error-handler/sc-error-handler.component.mjs +0 -58
  287. package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +0 -334
  288. package/esm2022/feedback/gratitude/sc-gratitude.component.mjs +0 -32
  289. package/esm2022/feedback/index.mjs +0 -4
  290. package/esm2022/feedback/interfaces/index.mjs +0 -2
  291. package/esm2022/feedback/interfaces/sc-feedback-form-config.mjs +0 -2
  292. package/esm2022/files/directives/index.mjs +0 -3
  293. package/esm2022/files/directives/tree-top.directive.mjs +0 -63
  294. package/esm2022/files/directives/tree.directive.mjs +0 -47
  295. package/esm2022/files/file-tree-item/file-tree-item.component.mjs +0 -18
  296. package/esm2022/files/files-and-documents/files-and-documents.component.mjs +0 -61
  297. package/esm2022/files/files-and-documents.module.mjs +0 -28
  298. package/esm2022/files/index.mjs +0 -6
  299. package/esm2022/files/interfaces/tree-node.mjs +0 -2
  300. package/esm2022/files/services/index.mjs +0 -3
  301. package/esm2022/files/services/tree-icon.service.mjs +0 -49
  302. package/esm2022/files/services/tree-loader.service.mjs +0 -62
  303. package/esm2022/form-fields/addresses-selection-field/sc-addresses-selection-field.component.mjs +0 -155
  304. package/esm2022/form-fields/form-fields.module.mjs +0 -66
  305. package/esm2022/form-fields/index.mjs +0 -4
  306. package/esm2022/form-fields/suggestion-field/sc-suggestion-field.component.mjs +0 -234
  307. package/esm2022/icons/index.mjs +0 -2
  308. package/esm2022/icons/sc-client-ui-icons-name.mjs +0 -99
  309. package/esm2022/loader/index.mjs +0 -2
  310. package/esm2022/loader/sc-i-loader.mjs +0 -2
  311. package/esm2022/masks/index.mjs +0 -8
  312. package/esm2022/masks/sc-account-number-mask.mjs +0 -7
  313. package/esm2022/masks/sc-bic-mask.mjs +0 -7
  314. package/esm2022/masks/sc-correspondent-account-mask.mjs +0 -7
  315. package/esm2022/masks/sc-inn-mask.mjs +0 -13
  316. package/esm2022/masks/sc-kpp-mask.mjs +0 -7
  317. package/esm2022/masks/sc-okpo-mask.mjs +0 -13
  318. package/esm2022/masks/sc-phone-verification-code-mask.mjs +0 -7
  319. package/esm2022/methods/index.mjs +0 -2
  320. package/esm2022/methods/sc-get-current-route.mjs +0 -14
  321. package/esm2022/models/i-sc-image.mjs +0 -2
  322. package/esm2022/models/index.mjs +0 -2
  323. package/esm2022/news/index.mjs +0 -4
  324. package/esm2022/news/news-card/sc-news-card.component.mjs +0 -34
  325. package/esm2022/news/news-card-skeleton/sc-news-card-skeleton.component.mjs +0 -31
  326. package/esm2022/news/sc-news.module.mjs +0 -25
  327. package/esm2022/noindex-wrapper/directives/index.mjs +0 -2
  328. package/esm2022/noindex-wrapper/directives/sc-noindex.directive.mjs +0 -58
  329. package/esm2022/noindex-wrapper/index.mjs +0 -3
  330. package/esm2022/noindex-wrapper/sc-noindex-wrapper.component.mjs +0 -18
  331. package/esm2022/order/directives/index.mjs +0 -3
  332. package/esm2022/order/directives/sc-order-accessor.directive.mjs +0 -28
  333. package/esm2022/order/directives/sc-order-options.mjs +0 -11
  334. package/esm2022/order/draft/sc-draft.component.mjs +0 -115
  335. package/esm2022/order/index.mjs +0 -13
  336. package/esm2022/order/models/i-new-order-form.mjs +0 -2
  337. package/esm2022/order/new-order-items/sc-new-order-items.component.mjs +0 -39
  338. package/esm2022/order/order-form/sc-order-form.component.mjs +0 -553
  339. package/esm2022/order/order-form/sc-order-form.config.mjs +0 -7
  340. package/esm2022/order/order-item/sc-order-item.component.mjs +0 -112
  341. package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +0 -211
  342. package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +0 -75
  343. package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs +0 -53
  344. package/esm2022/order/sc-order.module.mjs +0 -52
  345. package/esm2022/order/sc-payment-status/sc-payment-status.component.mjs +0 -35
  346. package/esm2022/pages/frequently-asked-questions/sc-faq-query-params.mjs +0 -5
  347. package/esm2022/pages/frequently-asked-questions/sc-faq-question-anchor.mjs +0 -23
  348. package/esm2022/pages/frequently-asked-questions/sc-frequently-asked-questions.component.mjs +0 -167
  349. package/esm2022/pages/frequently-asked-questions/sc-get-faq-group-query-params.mjs +0 -14
  350. package/esm2022/pages/frequently-asked-questions/sc-page-size-options.mjs +0 -8
  351. package/esm2022/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.mjs +0 -88
  352. package/esm2022/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.mjs +0 -123
  353. package/esm2022/pages/index.mjs +0 -11
  354. package/esm2022/pages/news-list/sc-news-list.component.mjs +0 -90
  355. package/esm2022/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.mjs +0 -46
  356. package/esm2022/pages/privacy-policy/sc-privacy-policy.component.mjs +0 -30
  357. package/esm2022/pages/public-offer/sc-public-offer.component.mjs +0 -50
  358. package/esm2022/pagination/index.mjs +0 -2
  359. package/esm2022/pagination/sc-pagination-links/sc-pagination-links.component.mjs +0 -99
  360. package/esm2022/pipes/index.mjs +0 -3
  361. package/esm2022/pipes/sc-format-date.mjs +0 -33
  362. package/esm2022/pipes/sc-phone-format.mjs +0 -44
  363. package/esm2022/profile/index.mjs +0 -3
  364. package/esm2022/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.mjs +0 -174
  365. package/esm2022/profile/sc-profile.module.mjs +0 -73
  366. package/esm2022/providers/date-value-transformer/index.mjs +0 -4
  367. package/esm2022/providers/date-value-transformer/sc-date-value-transformer-types.mjs +0 -2
  368. package/esm2022/providers/date-value-transformer/sc-date-value-transformer-with-end-time.mjs +0 -26
  369. package/esm2022/providers/date-value-transformer/sc-date-value-transformer-with-start-time.mjs +0 -37
  370. package/esm2022/providers/index.mjs +0 -17
  371. package/esm2022/providers/sc-allow-select-terminated.mjs +0 -8
  372. package/esm2022/providers/sc-banner-duration.mjs +0 -8
  373. package/esm2022/providers/sc-block-incomplete-address.mjs +0 -8
  374. package/esm2022/providers/sc-country-ids.mjs +0 -8
  375. package/esm2022/providers/sc-date-formatter.mjs +0 -15
  376. package/esm2022/providers/sc-date-value-transformer.mjs +0 -12
  377. package/esm2022/providers/sc-debounce-time-default.mjs +0 -9
  378. package/esm2022/providers/sc-dialog-service.providers.mjs +0 -6
  379. package/esm2022/providers/sc-help-notification-close.mjs +0 -9
  380. package/esm2022/providers/sc-help-notification-limit.mjs +0 -8
  381. package/esm2022/providers/sc-hidden-print-elements.token.mjs +0 -10
  382. package/esm2022/providers/sc-max-files-in-form-input.mjs +0 -8
  383. package/esm2022/providers/sc-notify-when-in-stock-required-fields.mjs +0 -8
  384. package/esm2022/providers/sc-page-size-options.mjs +0 -8
  385. package/esm2022/providers/sc-user-providers.mjs +0 -38
  386. package/esm2022/providers/sc-verification-code-timeout.mjs +0 -8
  387. package/esm2022/public-api.mjs +0 -37
  388. package/esm2022/qrcode/index.mjs +0 -3
  389. package/esm2022/qrcode/qrcode-dialog/sc-qrcode-dialog.component.mjs +0 -58
  390. package/esm2022/qrcode/sc-qrcode.module.mjs +0 -25
  391. package/esm2022/samples/index.mjs +0 -5
  392. package/esm2022/samples/interfaces/index.mjs +0 -3
  393. package/esm2022/samples/interfaces/sc-i-preview-sample.mjs +0 -2
  394. package/esm2022/samples/interfaces/sc-preview-mosquito-config.mjs +0 -2
  395. package/esm2022/samples/preview-sample/sc-preview-sample.component.mjs +0 -42
  396. package/esm2022/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.component.mjs +0 -63
  397. package/esm2022/samples/sc-sample.module.mjs +0 -59
  398. package/esm2022/services/index.mjs +0 -4
  399. package/esm2022/services/print.service.mjs +0 -49
  400. package/esm2022/services/sc-help-notification.service.mjs +0 -100
  401. package/esm2022/services/sc-scripts.service.mjs +0 -106
  402. package/esm2022/share/index.mjs +0 -6
  403. package/esm2022/share/sc-share-dialog-data.mjs +0 -2
  404. package/esm2022/share/sc-share.service.mjs +0 -40
  405. package/esm2022/share/share-button/sc-share-button.component.mjs +0 -99
  406. package/esm2022/share/share-dialog/sc-share-dialog.component.mjs +0 -139
  407. package/esm2022/share/share-messengers-links/sc-share-messengers-links.component.mjs +0 -84
  408. package/esm2022/smart-captcha/index.mjs +0 -5
  409. package/esm2022/smart-captcha/interfaces/index.mjs +0 -6
  410. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-api.mjs +0 -2
  411. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-event.mjs +0 -2
  412. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-language.mjs +0 -2
  413. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-render-params.mjs +0 -2
  414. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-settings.mjs +0 -2
  415. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-window.mjs +0 -2
  416. package/esm2022/smart-captcha/sc-smart-captcha.component.mjs +0 -167
  417. package/esm2022/smart-captcha/services/index.mjs +0 -2
  418. package/esm2022/smart-captcha/services/sc-smart-captcha-loader.service.mjs +0 -87
  419. package/esm2022/smart-captcha/tokens/index.mjs +0 -3
  420. package/esm2022/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.mjs +0 -8
  421. package/esm2022/smart-captcha/tokens/sc-smart-captcha-settings.token.mjs +0 -6
  422. package/esm2022/snabcentr-client-ui.mjs +0 -5
  423. package/esm2022/user/index.mjs +0 -6
  424. package/esm2022/user/reset-user-password/sc-reset-user-password.component.mjs +0 -74
  425. package/esm2022/user/sc-user.module.mjs +0 -86
  426. package/esm2022/user/update-user-info-dialog/sc-update-user-info-dialog.component.mjs +0 -121
  427. package/esm2022/user/user-managers/sc-user-managers.component.mjs +0 -40
  428. package/esm2022/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.mjs +0 -105
  429. package/esm2022/validators/index.mjs +0 -7
  430. package/esm2022/validators/sc-at-least-one-required-validator.mjs +0 -25
  431. package/esm2022/validators/sc-bic-validator.mjs +0 -10
  432. package/esm2022/validators/sc-correspondent-account-validator.mjs +0 -10
  433. package/esm2022/validators/sc-password-confirm-matching-validator.mjs +0 -17
  434. package/esm2022/validators/sc-phone-validator.mjs +0 -14
  435. package/esm2022/validators/step-validator.mjs +0 -18
  436. package/esm2022/verification/index.mjs +0 -3
  437. package/esm2022/verification/sc-verification.module.mjs +0 -86
  438. package/esm2022/verification/verification-phone-check-form/sc-verification-phone-check-form.component.mjs +0 -259
  439. package/feedback/feedback-form/sc-feedback-form.component.d.ts +0 -163
  440. package/feedback/gratitude/sc-gratitude.component.d.ts +0 -20
  441. package/feedback/index.d.ts +0 -3
  442. package/feedback/interfaces/index.d.ts +0 -1
  443. package/feedback/interfaces/sc-feedback-form-config.d.ts +0 -23
  444. package/files/directives/index.d.ts +0 -2
  445. package/files/directives/tree-top.directive.d.ts +0 -33
  446. package/files/directives/tree.directive.d.ts +0 -35
  447. package/files/file-tree-item/file-tree-item.component.d.ts +0 -9
  448. package/files/files-and-documents/files-and-documents.component.d.ts +0 -27
  449. package/files/files-and-documents.module.d.ts +0 -17
  450. package/files/index.d.ts +0 -5
  451. package/files/interfaces/tree-node.d.ts +0 -29
  452. package/files/services/index.d.ts +0 -2
  453. package/files/services/tree-icon.service.d.ts +0 -23
  454. package/files/services/tree-loader.service.d.ts +0 -43
  455. package/form-fields/addresses-selection-field/sc-addresses-selection-field.component.d.ts +0 -80
  456. package/form-fields/form-fields.module.d.ts +0 -18
  457. package/form-fields/index.d.ts +0 -3
  458. package/form-fields/suggestion-field/sc-suggestion-field.component.d.ts +0 -107
  459. package/icons/index.d.ts +0 -1
  460. package/icons/sc-client-ui-icons-name.d.ts +0 -4
  461. package/index.d.ts +0 -5
  462. package/loader/index.d.ts +0 -1
  463. package/loader/sc-i-loader.d.ts +0 -9
  464. package/masks/index.d.ts +0 -7
  465. package/masks/sc-account-number-mask.d.ts +0 -5
  466. package/masks/sc-bic-mask.d.ts +0 -5
  467. package/masks/sc-correspondent-account-mask.d.ts +0 -5
  468. package/masks/sc-inn-mask.d.ts +0 -9
  469. package/masks/sc-kpp-mask.d.ts +0 -5
  470. package/masks/sc-okpo-mask.d.ts +0 -9
  471. package/masks/sc-phone-verification-code-mask.d.ts +0 -5
  472. package/methods/index.d.ts +0 -1
  473. package/methods/sc-get-current-route.d.ts +0 -8
  474. package/models/i-sc-image.d.ts +0 -17
  475. package/models/index.d.ts +0 -1
  476. package/news/index.d.ts +0 -3
  477. package/news/news-card/sc-news-card.component.d.ts +0 -22
  478. package/news/news-card-skeleton/sc-news-card-skeleton.component.d.ts +0 -16
  479. package/news/sc-news.module.d.ts +0 -15
  480. package/noindex-wrapper/directives/index.d.ts +0 -1
  481. package/noindex-wrapper/directives/sc-noindex.directive.d.ts +0 -29
  482. package/noindex-wrapper/index.d.ts +0 -2
  483. package/noindex-wrapper/sc-noindex-wrapper.component.d.ts +0 -9
  484. package/order/directives/index.d.ts +0 -2
  485. package/order/directives/sc-order-accessor.directive.d.ts +0 -13
  486. package/order/directives/sc-order-options.d.ts +0 -14
  487. package/order/draft/sc-draft.component.d.ts +0 -60
  488. package/order/index.d.ts +0 -12
  489. package/order/models/i-new-order-form.d.ts +0 -39
  490. package/order/new-order-items/sc-new-order-items.component.d.ts +0 -29
  491. package/order/order-form/sc-order-form.component.d.ts +0 -274
  492. package/order/order-form/sc-order-form.config.d.ts +0 -20
  493. package/order/order-item/sc-order-item.component.d.ts +0 -43
  494. package/order/order-items-list/sc-order-items-list.component.d.ts +0 -112
  495. package/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.d.ts +0 -55
  496. package/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.d.ts +0 -37
  497. package/order/sc-order.module.d.ts +0 -18
  498. package/order/sc-payment-status/sc-payment-status.component.d.ts +0 -25
  499. package/pages/frequently-asked-questions/sc-faq-query-params.d.ts +0 -4
  500. package/pages/frequently-asked-questions/sc-faq-question-anchor.d.ts +0 -16
  501. package/pages/frequently-asked-questions/sc-frequently-asked-questions.component.d.ts +0 -84
  502. package/pages/frequently-asked-questions/sc-get-faq-group-query-params.d.ts +0 -10
  503. package/pages/frequently-asked-questions/sc-page-size-options.d.ts +0 -5
  504. package/pages/frequently-asked-questions-group-selector/sc-frequently-asked-questions-group-selector.component.d.ts +0 -47
  505. package/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.d.ts +0 -89
  506. package/pages/index.d.ts +0 -10
  507. package/pages/news-list/sc-news-list.component.d.ts +0 -57
  508. package/pages/personal-data-processing-policy/sc-personal-data-processing-policy.component.d.ts +0 -17
  509. package/pages/privacy-policy/sc-privacy-policy.component.d.ts +0 -17
  510. package/pages/public-offer/sc-public-offer.component.d.ts +0 -22
  511. package/pagination/index.d.ts +0 -1
  512. package/pagination/sc-pagination-links/sc-pagination-links.component.d.ts +0 -60
  513. package/pipes/index.d.ts +0 -2
  514. package/pipes/sc-format-date.d.ts +0 -20
  515. package/pipes/sc-phone-format.d.ts +0 -21
  516. package/profile/index.d.ts +0 -2
  517. package/profile/sc-profile-accordions-content/sc-profile-accordions-content.component.d.ts +0 -126
  518. package/profile/sc-profile.module.d.ts +0 -23
  519. package/providers/date-value-transformer/index.d.ts +0 -3
  520. package/providers/date-value-transformer/sc-date-value-transformer-types.d.ts +0 -9
  521. package/providers/date-value-transformer/sc-date-value-transformer-with-end-time.d.ts +0 -16
  522. package/providers/date-value-transformer/sc-date-value-transformer-with-start-time.d.ts +0 -22
  523. package/providers/index.d.ts +0 -16
  524. package/providers/sc-allow-select-terminated.d.ts +0 -5
  525. package/providers/sc-banner-duration.d.ts +0 -5
  526. package/providers/sc-block-incomplete-address.d.ts +0 -5
  527. package/providers/sc-country-ids.d.ts +0 -5
  528. package/providers/sc-date-formatter.d.ts +0 -6
  529. package/providers/sc-date-value-transformer.d.ts +0 -5
  530. package/providers/sc-debounce-time-default.d.ts +0 -5
  531. package/providers/sc-dialog-service.providers.d.ts +0 -45
  532. package/providers/sc-help-notification-close.d.ts +0 -6
  533. package/providers/sc-help-notification-limit.d.ts +0 -5
  534. package/providers/sc-hidden-print-elements.token.d.ts +0 -6
  535. package/providers/sc-max-files-in-form-input.d.ts +0 -5
  536. package/providers/sc-notify-when-in-stock-required-fields.d.ts +0 -5
  537. package/providers/sc-page-size-options.d.ts +0 -5
  538. package/providers/sc-user-providers.d.ts +0 -21
  539. package/providers/sc-verification-code-timeout.d.ts +0 -5
  540. package/public-api.d.ts +0 -36
  541. package/qrcode/index.d.ts +0 -2
  542. package/qrcode/qrcode-dialog/sc-qrcode-dialog.component.d.ts +0 -37
  543. package/qrcode/sc-qrcode.module.d.ts +0 -14
  544. package/samples/index.d.ts +0 -4
  545. package/samples/interfaces/index.d.ts +0 -2
  546. package/samples/interfaces/sc-i-preview-sample.d.ts +0 -56
  547. package/samples/interfaces/sc-preview-mosquito-config.d.ts +0 -62
  548. package/samples/preview-sample/sc-preview-sample.component.d.ts +0 -30
  549. package/samples/sc-preview-samples-mosquito/sc-preview-samples-mosquito.component.d.ts +0 -50
  550. package/samples/sc-sample.module.d.ts +0 -18
  551. package/services/index.d.ts +0 -3
  552. package/services/print.service.d.ts +0 -31
  553. package/services/sc-help-notification.service.d.ts +0 -70
  554. package/services/sc-scripts.service.d.ts +0 -51
  555. package/share/index.d.ts +0 -5
  556. package/share/sc-share-dialog-data.d.ts +0 -13
  557. package/share/sc-share.service.d.ts +0 -19
  558. package/share/share-button/sc-share-button.component.d.ts +0 -78
  559. package/share/share-dialog/sc-share-dialog.component.d.ts +0 -87
  560. package/share/share-messengers-links/sc-share-messengers-links.component.d.ts +0 -49
  561. package/smart-captcha/index.d.ts +0 -4
  562. package/smart-captcha/interfaces/index.d.ts +0 -5
  563. package/smart-captcha/interfaces/sc-smart-captcha-api.d.ts +0 -36
  564. package/smart-captcha/interfaces/sc-smart-captcha-event.d.ts +0 -4
  565. package/smart-captcha/interfaces/sc-smart-captcha-language.d.ts +0 -4
  566. package/smart-captcha/interfaces/sc-smart-captcha-render-params.d.ts +0 -16
  567. package/smart-captcha/interfaces/sc-smart-captcha-settings.d.ts +0 -16
  568. package/smart-captcha/interfaces/sc-smart-captcha-window.d.ts +0 -14
  569. package/smart-captcha/sc-smart-captcha.component.d.ts +0 -92
  570. package/smart-captcha/services/index.d.ts +0 -1
  571. package/smart-captcha/services/sc-smart-captcha-loader.service.d.ts +0 -50
  572. package/smart-captcha/tokens/index.d.ts +0 -2
  573. package/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.d.ts +0 -5
  574. package/smart-captcha/tokens/sc-smart-captcha-settings.token.d.ts +0 -6
  575. package/user/index.d.ts +0 -5
  576. package/user/reset-user-password/sc-reset-user-password.component.d.ts +0 -46
  577. package/user/sc-user.module.d.ts +0 -24
  578. package/user/update-user-info-dialog/sc-update-user-info-dialog.component.d.ts +0 -63
  579. package/user/user-managers/sc-user-managers.component.d.ts +0 -23
  580. package/user/user-phone-approve-dialog/sc-user-phone-approve-dialog.component.d.ts +0 -53
  581. package/validators/index.d.ts +0 -6
  582. package/validators/sc-at-least-one-required-validator.d.ts +0 -10
  583. package/validators/sc-bic-validator.d.ts +0 -8
  584. package/validators/sc-correspondent-account-validator.d.ts +0 -8
  585. package/validators/sc-password-confirm-matching-validator.d.ts +0 -8
  586. package/validators/sc-phone-validator.d.ts +0 -5
  587. package/validators/step-validator.d.ts +0 -7
  588. package/verification/index.d.ts +0 -2
  589. package/verification/sc-verification.module.d.ts +0 -21
  590. package/verification/verification-phone-check-form/sc-verification-phone-check-form.component.d.ts +0 -145
@@ -1,344 +0,0 @@
1
- /* eslint-disable lodash/prefer-lodash-method,@typescript-eslint/no-unnecessary-condition,class-methods-use-this,@typescript-eslint/no-explicit-any,@typescript-eslint/unbound-method,no-restricted-syntax */
2
- import { HttpErrorResponse } from '@angular/common/http';
3
- import { ChangeDetectionStrategy, Component, inject, output } from '@angular/core';
4
- import { outputFromObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { FormControl, FormGroup, Validators } from '@angular/forms';
6
- import { ScConvertersService, ScISuggestionType, ScOpfList, ScReferencesService, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, } from '@snabcentr/client-core';
7
- import { tuiIsFalsy } from '@taiga-ui/cdk';
8
- import { tuiDropdownOptionsProvider } from '@taiga-ui/core';
9
- import { catchError, filter, map, of, pairwise, share, startWith, Subject, switchMap, tap } from 'rxjs';
10
- import { ScAddressQualityService } from '../../directives/address-quality/sc-address-quality.service';
11
- import { scBicValidator, scCorrespondentAccountValidator, scPasswordConfirmMatchingValidator } from '../../validators';
12
- import { phoneValidator } from '../../validators/sc-phone-validator';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/common";
15
- import * as i2 from "@angular/forms";
16
- import * as i3 from "@taiga-ui/legacy";
17
- import * as i4 from "@taiga-ui/legacy/components/primitive-textfield";
18
- import * as i5 from "@taiga-ui/core";
19
- import * as i6 from "../../verification/verification-phone-check-form/sc-verification-phone-check-form.component";
20
- import * as i7 from "../../form-fields/addresses-selection-field/sc-addresses-selection-field.component";
21
- import * as i8 from "../../form-fields/suggestion-field/sc-suggestion-field.component";
22
- import * as i9 from "@taiga-ui/core/components/data-list";
23
- import * as i10 from "@taiga-ui/kit";
24
- import * as i11 from "../../contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component";
25
- import * as i12 from "../../contragents/new-contragent-form/sc-new-contragent-form.component";
26
- import * as i13 from "../../contacts/new-contact-form/sc-new-contact-form.component";
27
- import * as i14 from "@taiga-ui/cdk";
28
- /**
29
- * Компонент формы регистрация пользователя.
30
- */
31
- export class ScSignUpFormComponent {
32
- /**
33
- * Инициализирует экземпляр класса {@link ScSignUpFormComponent}.
34
- * Название сбрасывается только при переходе между физическим лицом и организацией: у физического лица в поле Ф.И.О.,
35
- * у остальных форм название организации, поэтому прежнее значение по смыслу не подходит.
36
- */
37
- constructor() {
38
- /**
39
- * Сервис данных о пользователе.
40
- */
41
- this.userService = inject(ScUserService);
42
- /**
43
- * Сервис справочников.
44
- */
45
- this.referencesService = inject(ScReferencesService);
46
- /**
47
- * Сервис конвертации данных.
48
- */
49
- this.convertersService = inject(ScConvertersService);
50
- /**
51
- * Сервис для сбора метрик о действиях пользователей.
52
- */
53
- this.userMetrikaService = inject(ScUserMetrikaService);
54
- /**
55
- * Сервис-реестр качества адресов, выбранных из подсказок.
56
- */
57
- this.addressQualityService = inject(ScAddressQualityService);
58
- /**
59
- * Поле ввода организационно-правовых форм.
60
- */
61
- this.opfControl = new FormControl('individual', Validators.required);
62
- /**
63
- * Группа полей ввода для формы регистрации.
64
- */
65
- this.form = new FormGroup({
66
- name: new FormControl(null, [Validators.required, Validators.minLength(3)]),
67
- email: new FormControl(null, [Validators.required, Validators.email]),
68
- phone: new FormControl(null, [Validators.required, phoneValidator()]),
69
- verificationCode: new FormControl(null, [Validators.required, Validators.minLength(6)]),
70
- cityId: new FormControl(null, Validators.required),
71
- password: new FormControl(null, [Validators.required, Validators.minLength(8)]),
72
- passwordConfirm: new FormControl(null, [Validators.required, Validators.minLength(8)]),
73
- getNews: new FormControl(false),
74
- acceptRules: new FormControl(false, Validators.requiredTrue),
75
- contragent: new FormGroup({}),
76
- }, {
77
- validators: scPasswordConfirmMatchingValidator('password', 'passwordConfirm'),
78
- });
79
- /**
80
- * Перечисление типов подсказок.
81
- */
82
- this.suggestionType = ScISuggestionType;
83
- /**
84
- * Перечисление организационно-правовых форм.
85
- */
86
- this.opfListEnum = ScOpfList;
87
- /**
88
- * {@link Subject} события отправки формы.
89
- */
90
- this.onSubmit = new Subject();
91
- /**
92
- * {@link Observable} запроса данных регистрации.
93
- */
94
- this.request$ = this.onSubmit.pipe(filter(() => this.form.valid), map(() => this.form.value), tap((value) => {
95
- this.createBaseContragent(value);
96
- }), switchMap((value) => this.userService.signUp$(this.convertersService.removeNullRecursive(value)).pipe(catchError((error) => {
97
- if (error instanceof HttpErrorResponse) {
98
- const { errors, message } = error.error;
99
- for (const key in errors) {
100
- if (Object.hasOwn(errors, key)) {
101
- // eslint-disable-next-line security/detect-object-injection
102
- this.form.get(key)?.setErrors({ serverResponse: errors[key] });
103
- }
104
- }
105
- if (!errors && message) {
106
- this.form.setErrors({ serverResponse: [message] });
107
- }
108
- this.stepIndex = this.steps.findIndex((_, index) => !this.canNextStep(index));
109
- }
110
- return of({});
111
- }), startWith(null))), share());
112
- /**
113
- * Индекс этапа.
114
- */
115
- this.stepIndex = 0;
116
- /**
117
- * {@link Observable} изменения состояния загрузки данных.
118
- */
119
- this.loading$ = this.request$.pipe(map(tuiIsFalsy));
120
- /**
121
- * Сигнал события аутентификации после успешной регистрации.
122
- */
123
- this.successAuth = outputFromObservable(this.userService.getUserChange$().pipe(filter((user) => !user.isGuest)));
124
- /**
125
- * Сигнал нажатия на "Договор оферты".
126
- */
127
- this.clickOfferEvent = output();
128
- /**
129
- * Список этапов регистрации.
130
- */
131
- this.steps = ['Данные о клиенте', 'Общие данные контрагента', 'Контакты пользователя', 'Банковские реквизиты пользователя'];
132
- this.opfControl.valueChanges
133
- .pipe(startWith(this.opfControl.value), pairwise(), filter(([previousOpf, opf]) => (previousOpf === 'individual') !== (opf === 'individual')), takeUntilDestroyed())
134
- .subscribe(() => {
135
- this.form.patchValue({ name: null });
136
- });
137
- }
138
- /**
139
- * Список групп полей банковских реквизитов.
140
- */
141
- get bankAccounts() {
142
- return this.form.controls.contragent.get('bankAccounts');
143
- }
144
- /**
145
- * Список групп полей контактных лиц.
146
- */
147
- get contacts() {
148
- return this.form.controls.contragent.get('contacts');
149
- }
150
- /** @inheritDoc */
151
- ngOnInit() {
152
- this.form.removeControl('contragent');
153
- this.userMetrikaService.emitUserMetrikaEvent({
154
- target: ScUserMetrikaGoalsEnum.signUpShow,
155
- });
156
- }
157
- /**
158
- * Проверяет, может ли пользователь перейти к следующему шагу регистрации.
159
- * При проверке каждого этапа регистрации последовательно проверяется корректность заполнения данных на предыдущих этапах.
160
- *
161
- * @param index Индекс этапа для которого нужно проверить валидность.
162
- * @returns Выводит значение `boolean` на основании {@link index}.
163
- */
164
- // eslint-disable-next-line sonarjs/cognitive-complexity
165
- canNextStep(index) {
166
- const { controls } = this.form;
167
- // Проверяем валидность данных пользователя.
168
- for (const key in controls) {
169
- if (Object.prototype.hasOwnProperty.call(controls, key) && key !== 'contragent' && controls[key].invalid) {
170
- return false;
171
- }
172
- }
173
- // Для этапа 0 просто возвращаем true, так как данные пользователя проверены.
174
- if (index === 0) {
175
- return true;
176
- }
177
- // Проверяем валидность полей контрагента.
178
- const contragentControls = controls.contragent.controls;
179
- if (contragentControls) {
180
- for (const key in contragentControls) {
181
- if (Object.prototype.hasOwnProperty.call(contragentControls, key) && key !== 'bankAccounts' && key !== 'contacts') {
182
- // eslint-disable-next-line security/detect-object-injection
183
- const control = contragentControls[key];
184
- if (!Array.isArray(control.value) && control.invalid) {
185
- return false;
186
- }
187
- }
188
- }
189
- }
190
- // Для этапа 1 возвращаем true, если все поля контрагента валидны.
191
- if (index === 1) {
192
- return true;
193
- }
194
- // Проверяем список контактов внутри контрагента.
195
- if (contragentControls['contacts'].invalid) {
196
- return false;
197
- }
198
- // Для этапа 2 возвращаем true, если список контактов внутри контрагента валидный.
199
- if (index === 2) {
200
- return true;
201
- }
202
- // Проверяем список банковских реквизитов внутри контрагента.
203
- return contragentControls['bankAccounts'].valid ?? false;
204
- }
205
- /**
206
- * Выполняет навигацию по форме регистрации.
207
- *
208
- * @param delta Значение, на которое необходимо выполнить навигацию.
209
- */
210
- navigate(delta) {
211
- this.stepIndex = (this.stepIndex + delta) % 4;
212
- }
213
- /**
214
- * Создаёт базового контрагента для клиента физического лица.
215
- *
216
- * @param formValue Значение формы при регистрации
217
- */
218
- createBaseContragent(formValue) {
219
- if (this.form.invalid || this.opfControl.value !== 'individual') {
220
- return;
221
- }
222
- // eslint-disable-next-line no-param-reassign
223
- formValue.contragent = {
224
- name: this.form.controls.name.value,
225
- opf: 'individual',
226
- contacts: [
227
- {
228
- name: this.form.controls.name.value,
229
- phone: this.form.controls.phone.value,
230
- email: this.form.controls.email.value,
231
- },
232
- ],
233
- };
234
- }
235
- /**
236
- * Возвращает {@link Observable} список организационно-правовых форм.
237
- */
238
- getOpf$() {
239
- return this.referencesService.opf$;
240
- }
241
- /**
242
- * Возвращает {@link Observable} организационно-правовой формы, соответствующий символьному обозначению (slug) на входе.
243
- *
244
- * @param slug Символьное обозначение (slug).
245
- */
246
- getOpfBySlug$(slug) {
247
- return this.referencesService.getOpfBySlug$(slug);
248
- }
249
- /**
250
- * Создаёт группу полей банковских реквизитов.
251
- */
252
- createBankAccountGroup() {
253
- return new FormGroup({
254
- bankName: new FormControl(null, Validators.required),
255
- bic: new FormControl(null, [Validators.required, Validators.minLength(9), scBicValidator]),
256
- accountNumber: new FormControl(null, [Validators.required, Validators.minLength(20)]),
257
- correspondentAccount: new FormControl(null, [Validators.required, Validators.minLength(20), scCorrespondentAccountValidator]),
258
- currencyId: new FormControl(null, Validators.required),
259
- });
260
- }
261
- /**
262
- * Добавляет Банковские реквизиты.
263
- */
264
- addBankAccountGroup() {
265
- this.bankAccounts.push(this.createBankAccountGroup());
266
- }
267
- /**
268
- * Удаляет банковские реквизиты.
269
- *
270
- * @param index Индекс банковских реквизитов.
271
- */
272
- removeBankAccountGroup(index) {
273
- this.bankAccounts.removeAt(index);
274
- }
275
- /**
276
- * Создаёт группу полей контактного лица.
277
- */
278
- createContactGroup() {
279
- return new FormGroup({
280
- name: new FormControl(null, Validators.required),
281
- phone: new FormControl(null, [Validators.required, phoneValidator()]),
282
- email: new FormControl(null, Validators.email),
283
- position: new FormControl(null, Validators.required),
284
- });
285
- }
286
- /**
287
- * Обработчик выбора адреса доставки.
288
- *
289
- * @param suggestion Объект подсказки ареса.
290
- */
291
- onSelectedOrganization(suggestion) {
292
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
293
- if (this.form.controls.contragent && 'inn' in suggestion && !('bic' in suggestion)) {
294
- if (suggestion.opf && suggestion.opf.slug !== this.opfControl.value) {
295
- this.opfControl.patchValue(suggestion.opf.slug, { emitEvent: false });
296
- this.form.controls.contragent.patchValue({
297
- opf: suggestion.opf.slug,
298
- });
299
- }
300
- this.form.controls.contragent.patchValue({
301
- name: suggestion.name,
302
- inn: suggestion.inn,
303
- kpp: suggestion.kpp ?? null,
304
- okpo: suggestion.okpo ?? null,
305
- directorName: suggestion.directorName ?? null,
306
- directorPosition: suggestion.directorPosition ?? null,
307
- legalAddress: suggestion.legalAddress ?? null,
308
- postalAddress: suggestion.postalAddress ?? null,
309
- actualAddress: suggestion.actualAddress ?? null,
310
- });
311
- this.form.controls.contragent.markAllAsTouched();
312
- this.form.get(['contragent', 'contacts'])?.markAsUntouched();
313
- this.form.get(['contragent', 'bankAccounts'])?.markAsUntouched();
314
- this.addressQualityService.setOrganizationAddressQualities(this.form.controls.contragent, suggestion);
315
- }
316
- }
317
- /**
318
- * Добавляет контактное лицо контрагента.
319
- */
320
- addContactGroup() {
321
- this.contacts.push(this.createContactGroup());
322
- }
323
- /**
324
- * Удаляет контактное лицо контрагента.
325
- *
326
- * @param index Индекс контактного лица.
327
- */
328
- removeContactGroup(index) {
329
- this.contacts.removeAt(index);
330
- }
331
- /**
332
- * Обрабатывает событие нажатия на "Договор оферты".
333
- */
334
- onClickOffer() {
335
- this.clickOfferEvent.emit();
336
- }
337
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSignUpFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
338
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScSignUpFormComponent, selector: "sc-sign-up-form", outputs: { successAuth: "successAuth", clickOfferEvent: "clickOfferEvent" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })], ngImport: i0, template: "<form\n *ngIf=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n @let isIndividual = opfListEnum[selectOpf] === opfListEnum.individual;\n <tui-stepper\n *ngIf=\"!isIndividual && form.controls.contragent\"\n [(activeItemIndex)]=\"stepIndex\"\n >\n <button\n *tuiRepeatTimes=\"let index of 4\"\n [stepState]=\"index && !canNextStep(index) ? 'error' : 'pass'\"\n [attr.disabled]=\"index && !canNextStep(index - 1) ? '' : null\"\n type=\"button\"\n tuiStep\n >\n {{ steps[index] }}\n </button>\n </tui-stepper>\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel>\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-select\n [formControl]=\"opfControl\"\n [valueContent]=\"opfContent\"\n >\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n </label>\n\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-input formControlName=\"name\">\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n {{ nameLabel }}\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n />\n } @else {\n \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n />\n }\n }\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <sc-verification-phone-check-form [shouldBeBusy]=\"false\" />\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n </div>\n\n <sc-addresses-selection-field [canSelectCountry]=\"opfListEnum[selectOpf] === opfListEnum.non_resident_legal\" />\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <label tuiLabel>\n \u041F\u0430\u0440\u043E\u043B\u044C\n <tui-input-password formControlName=\"password\">\n \u041F\u0430\u0440\u043E\u043B\u044C\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <tui-input-password formControlName=\"passwordConfirm\">\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n />\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n />\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </label>\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n required=\"true\"\n formControlName=\"acceptRules\"\n />\n <div>\n <span>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"$event.preventDefault(); onClickOffer()\"\n >\n \u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </div>\n </label>\n </div>\n </div>\n @if (!isIndividual) {\n <sc-new-contragent-form\n [opfControl]=\"opfControl\"\n [class.!hidden]=\"stepIndex !== 1\"\n />\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\" />\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 3\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form\n *ngIf=\"opfControl.value as selectOpf\"\n [opf]=\"selectOpf\"\n [form]=\"bankAccount\"\n />\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n </button>\n </div>\n </div>\n }\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n \u041D\u0430\u0437\u0430\u0434\n </button>\n <button\n *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep(stepIndex)\"\n (click)=\"navigate(1)\"\n >\n \u0414\u0430\u043B\u0435\u0435\n </button>\n </ng-template>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.CheckboxRequiredValidator, selector: "input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.TuiInputPasswordComponent, selector: "tui-input-password" }, { kind: "directive", type: i3.TuiInputPasswordDirective, selector: "tui-input-password" }, { kind: "component", type: i4.TuiTextfieldComponent, selector: "input[tuiTextfieldLegacy], textarea[tuiTextfieldLegacy]" }, { kind: "component", type: i3.TuiInputComponent, selector: "tui-input" }, { kind: "directive", type: i3.TuiInputDirective, selector: "tui-input" }, { kind: "directive", type: i5.TuiLink, selector: "a[tuiLink], button[tuiLink]", inputs: ["pseudo"] }, { kind: "directive", type: i5.TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "directive", type: i5.TuiLabel, selector: "label[tuiLabel]" }, { kind: "component", type: i5.TuiError, selector: "tui-error", inputs: ["error"] }, { kind: "component", type: i6.ScVerificationPhoneCheckFormComponent, selector: "sc-verification-phone-check-form", inputs: ["showCodeFields", "readOnly", "pseudoInvalid", "required", "subtitle", "shouldBeBusy", "shouldBeConfirmed", "haveCode"], outputs: ["haveCodeChange", "isBusyChange", "isConfirmedChange"] }, { kind: "component", type: i7.ScAddressesSelectionFieldComponent, selector: "sc-addresses-selection-field", inputs: ["canSelectCountry"], outputs: ["canSelectCountryChange"] }, { kind: "component", type: i8.ScSuggestionFieldComponent, selector: "sc-suggestion-field", inputs: ["type", "showAddressQuality"], outputs: ["selectedClick"] }, { kind: "component", type: i9.TuiDataListComponent, selector: "tui-data-list", inputs: ["emptyContent", "size"] }, { kind: "directive", type: i9.TuiDataListDirective, selector: "ng-template[tuiDataList]" }, { kind: "component", type: i9.TuiOption, selector: "button[tuiOption]:not([new]), a[tuiOption]:not([new]), label[tuiOption]:not([new])", inputs: ["disabled", "value"] }, { kind: "component", type: i10.TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]", inputs: ["size"] }, { kind: "component", type: i3.TuiSelectComponent, selector: "tui-select", inputs: ["stringify", "identityMatcher", "valueContent"] }, { kind: "directive", type: i3.TuiSelectDirective, selector: "tui-select" }, { kind: "component", type: i11.ScNewContragentBankAccountsFormComponent, selector: "sc-new-contragent-bank-account-form", inputs: ["form", "opf"] }, { kind: "component", type: i12.ScNewContragentFormComponent, selector: "sc-new-contragent-form", inputs: ["opfControl"] }, { kind: "component", type: i13.ScNewContactFormComponent, selector: "sc-new-contact-form", inputs: ["form"] }, { kind: "component", type: i10.TuiStepperComponent, selector: "tui-stepper, nav[tuiStepper]", inputs: ["activeItemIndex", "orientation"], outputs: ["activeItemIndexChange"] }, { kind: "component", type: i10.TuiStep, selector: "button[tuiStep], a[tuiStep]:not([routerLink]), a[tuiStep][routerLink][routerLinkActive]", inputs: ["stepState", "icon"] }, { kind: "directive", type: i14.TuiRepeatTimes, selector: "[tuiRepeatTimes][tuiRepeatTimesOf]", inputs: ["tuiRepeatTimesOf"] }, { kind: "component", type: i10.TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i10.TuiFieldErrorPipe, name: "tuiFieldError" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
339
- }
340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScSignUpFormComponent, decorators: [{
341
- type: Component,
342
- args: [{ selector: 'sc-sign-up-form', providers: [tuiDropdownOptionsProvider({ limitWidth: 'fixed' })], host: { ngSkipHydration: 'true' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<form\n *ngIf=\"opfControl.value as selectOpf\"\n [formGroup]=\"form\"\n (ngSubmit)=\"onSubmit.next()\"\n class=\"flex flex-col gap-5\"\n>\n @let isIndividual = opfListEnum[selectOpf] === opfListEnum.individual;\n <tui-stepper\n *ngIf=\"!isIndividual && form.controls.contragent\"\n [(activeItemIndex)]=\"stepIndex\"\n >\n <button\n *tuiRepeatTimes=\"let index of 4\"\n [stepState]=\"index && !canNextStep(index) ? 'error' : 'pass'\"\n [attr.disabled]=\"index && !canNextStep(index - 1) ? '' : null\"\n type=\"button\"\n tuiStep\n >\n {{ steps[index] }}\n </button>\n </tui-stepper>\n <div\n [class.!hidden]=\"stepIndex !== 0\"\n class=\"flex flex-col gap-3\"\n >\n <label tuiLabel>\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-select\n [formControl]=\"opfControl\"\n [valueContent]=\"opfContent\"\n >\n \u0422\u0438\u043F \u043A\u043B\u0438\u0435\u043D\u0442\u0430\n <tui-data-list *tuiDataList>\n <button\n *ngFor=\"let item of getOpf$() | async; let index = index\"\n tuiOption\n [value]=\"item.slug\"\n >\n {{ item.name }}\n </button>\n </tui-data-list>\n </tui-select>\n <ng-template\n #opfContent\n let-data\n >\n <div>{{ (getOpfBySlug$(data) | async)?.name }}</div>\n </ng-template>\n </label>\n\n @let nameLabel = opfListEnum[selectOpf] === opfListEnum.individual ? '\u0424.\u0418.\u041E.' : '\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438';\n <label tuiLabel>\n {{ nameLabel }}\n <tui-input formControlName=\"name\">\n @if (opfListEnum[selectOpf] === opfListEnum.individual) {\n {{ nameLabel }}\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.fio\"\n />\n } @else {\n \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\n @if (opfListEnum[selectOpf] !== opfListEnum.non_resident_legal) {\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.organization\"\n (selectedClick)=\"onSelectedOrganization($event)\"\n />\n }\n }\n </tui-input>\n <tui-error\n formControlName=\"name\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <sc-verification-phone-check-form [shouldBeBusy]=\"false\" />\n <label tuiLabel>\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <tui-input formControlName=\"email\">\n \u0410\u0434\u0440\u0435\u0441 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u044B\n <sc-suggestion-field\n *tuiDataList\n [type]=\"suggestionType.email\"\n />\n </tui-input>\n <tui-error\n formControlName=\"email\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n </div>\n\n <sc-addresses-selection-field [canSelectCountry]=\"opfListEnum[selectOpf] === opfListEnum.non_resident_legal\" />\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <label tuiLabel>\n \u041F\u0430\u0440\u043E\u043B\u044C\n <tui-input-password formControlName=\"password\">\n \u041F\u0430\u0440\u043E\u043B\u044C\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"password\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n <label tuiLabel>\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <tui-input-password formControlName=\"passwordConfirm\">\n \u041F\u043E\u0432\u0442\u043E\u0440 \u043F\u0430\u0440\u043E\u043B\u044F\n <input\n tuiTextfieldLegacy\n autocomplete=\"new-password\"\n />\n </tui-input-password>\n <tui-error\n formControlName=\"passwordConfirm\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </label>\n </div>\n <tui-error\n [error]=\"[] | tuiFieldError | async\"\n class=\"self-center\"\n />\n\n <div class=\"grid items-start gap-5 sm:grid-cols-2\">\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n formControlName=\"getNews\"\n />\n \u042F \u0445\u043E\u0447\u0443 \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u0440\u0430\u0441\u0441\u044B\u043B\u043A\u0443 \u0421\u043D\u0430\u0431\u0446\u0435\u043D\u0442\u0440 \u043E \u0441\u043A\u0438\u0434\u043A\u0430\u0445 \u0438 \u043D\u043E\u0432\u043E\u0441\u0442\u044F\u0445 \u043F\u043E \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u043F\u043E\u0447\u0442\u0435.\n </label>\n <label tuiLabel>\n <input\n tuiCheckbox\n type=\"checkbox\"\n required=\"true\"\n formControlName=\"acceptRules\"\n />\n <div>\n <span>\n \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044F\u0441\u044C \u043D\u0430 \u0441\u0430\u0439\u0442\u0435, \u044F \u0441\u043E\u0433\u043B\u0430\u0448\u0430\u044E\u0441\u044C \u0441\n <a\n tuiLink\n [pseudo]=\"true\"\n (click)=\"$event.preventDefault(); onClickOffer()\"\n >\n \u0414\u043E\u0433\u043E\u0432\u043E\u0440\u043E\u043C \u043E\u0444\u0435\u0440\u0442\u044B\n </a>\n .\n </span>\n <span class=\"text-tui-negative\">*</span>\n <tui-error\n formControlName=\"acceptRules\"\n [error]=\"[] | tuiFieldError | async\"\n />\n </div>\n </label>\n </div>\n </div>\n @if (!isIndividual) {\n <sc-new-contragent-form\n [opfControl]=\"opfControl\"\n [class.!hidden]=\"stepIndex !== 1\"\n />\n\n <div [class.!hidden]=\"stepIndex !== 2\">\n <div\n *ngIf=\"contacts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B</p>\n <div\n *ngFor=\"let contact of contacts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-10 items-center justify-between\">\n <p class=\"font-bold\">\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u043D\u043E\u0435 \u043B\u0438\u0446\u043E \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeContactGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contact-form [form]=\"contact\" />\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addContactGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0430\u043A\u0442\n </button>\n </div>\n </div>\n\n <div [class.!hidden]=\"stepIndex !== 3\">\n <div\n *ngIf=\"bankAccounts\"\n class=\"flex flex-col gap-5 pb-1\"\n >\n <p class=\"text-lg font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B</p>\n <div\n *ngFor=\"let bankAccount of bankAccounts.controls; let index = index; let count = count; let last = last\"\n class=\"flex flex-col gap-3\"\n >\n <div class=\"flex h-12 items-center justify-between\">\n <p class=\"font-bold\">\u0411\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B \u2116{{ index + 1 }}:</p>\n <button\n *ngIf=\"count - 1\"\n tuiIconButton\n appearance=\"secondary\"\n (click)=\"removeBankAccountGroup(index)\"\n iconStart=\"@tui.trash-2\"\n ></button>\n </div>\n <sc-new-contragent-bank-account-form\n *ngIf=\"opfControl.value as selectOpf\"\n [opf]=\"selectOpf\"\n [form]=\"bankAccount\"\n />\n <hr\n *ngIf=\"!last\"\n class=\"h-px w-full bg-tui-base-04\"\n />\n </div>\n <button\n tuiButton\n iconStart=\"@tui.plus\"\n appearance=\"secondary\"\n (click)=\"addBankAccountGroup()\"\n type=\"button\"\n class=\"self-center\"\n >\n \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0430\u043D\u043A\u043E\u0432\u0441\u043A\u0438\u0435 \u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u044B\n </button>\n </div>\n </div>\n }\n <div class=\"flex justify-center gap-2\">\n <button\n *ngIf=\"stepIndex > 0\"\n tuiButton\n appearance=\"secondary\"\n type=\"button\"\n (click)=\"navigate(-1)\"\n >\n \u041D\u0430\u0437\u0430\u0434\n </button>\n <button\n *ngIf=\"isIndividual || (stepIndex === 2 && !form.controls.contragent.controls['bankAccounts']) || stepIndex === 3; else nextIndexBtn\"\n tuiButton\n [disabled]=\"form.invalid\"\n [loading]=\"!!(loading$ | async)\"\n class=\"self-center\"\n >\n \u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u044F\n </button>\n <ng-template #nextIndexBtn>\n <button\n tuiButton\n type=\"button\"\n [disabled]=\"!canNextStep(stepIndex)\"\n (click)=\"navigate(1)\"\n >\n \u0414\u0430\u043B\u0435\u0435\n </button>\n </ng-template>\n </div>\n</form>\n" }]
343
- }], ctorParameters: () => [] });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2lnbi11cC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9hdXRoL3NpZ24tdXAtZm9ybS9zYy1zaWduLXVwLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2F1dGgvc2lnbi11cC1mb3JtL3NjLXNpZ24tdXAtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw2TUFBNk07QUFFN00sT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQWEsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBRUgsbUJBQW1CLEVBR25CLGlCQUFpQixFQUVqQixTQUFTLEVBQ1QsbUJBQW1CLEVBR25CLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsYUFBYSxHQUNoQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2REFBNkQsQ0FB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QUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztZQUVqRSxJQUFJLENBQUMscUJBQXFCLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFHLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxrQkFBa0IsQ0FBQyxLQUFhO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7K0dBcFhRLHFCQUFxQjttR0FBckIscUJBQXFCLDRLQUpuQixDQUFDLDBCQUEwQixDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsMEJDcENwRSwyOVlBZ1NBOzs0RkR4UGEscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNJLGlCQUFpQixhQUVoQixDQUFDLDBCQUEwQixDQUFDLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFDMUQsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLG1CQUNoQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbG9kYXNoL3ByZWZlci1sb2Rhc2gtbWV0aG9kLEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24sY2xhc3MtbWV0aG9kcy11c2UtdGhpcyxAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCxuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgT25Jbml0LCBvdXRwdXQsIE91dHB1dEVtaXR0ZXJSZWYsIE91dHB1dFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3V0cHV0RnJvbU9ic2VydmFibGUsIHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgSUF1dGhUb2tlbixcbiAgICBTY0NvbnZlcnRlcnNTZXJ2aWNlLFxuICAgIFNjSUFwaUVycm9yUmVzcG9uc2UsXG4gICAgU2NJUmVmZXJlbmNlc1R5cGVzLFxuICAgIFNjSVN1Z2dlc3Rpb25UeXBlLFxuICAgIFNjSVVzZXJPbkRhdGFDcmVhdGUsXG4gICAgU2NPcGZMaXN0LFxuICAgIFNjUmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgU2NTdWdnZXN0aW9uLFxuICAgIFNjVXNlcixcbiAgICBTY1VzZXJNZXRyaWthR29hbHNFbnVtLFxuICAgIFNjVXNlck1ldHJpa2FTZXJ2aWNlLFxuICAgIFNjVXNlclNlcnZpY2UsXG59IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgdHVpSXNGYWxzeSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgdHVpRHJvcGRvd25PcHRpb25zUHJvdmlkZXIgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHBhaXJ3aXNlLCBzaGFyZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY0FkZHJlc3NRdWFsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYWRkcmVzcy1xdWFsaXR5L3NjLWFkZHJlc3MtcXVhbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IHNjQmljVmFsaWRhdG9yLCBzY0NvcnJlc3BvbmRlbnRBY2NvdW50VmFsaWRhdG9yLCBzY1Bhc3N3b3JkQ29uZmlybU1hdGNoaW5nVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBwaG9uZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvcnMvc2MtcGhvbmUtdmFsaWRhdG9yJztcbmltcG9ydCB7IFNjQmFua0FjY291bnRGb3JtR3JvdXAsIFNjQ29udGFjdEZvcm1Hcm91cCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDRhNC+0YDQvNGLINGA0LXQs9C40YHRgtGA0LDRhtC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NjLXNpZ24tdXAtZm9ybScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLXNpZ24tdXAtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbdHVpRHJvcGRvd25PcHRpb25zUHJvdmlkZXIoeyBsaW1pdFdpZHRoOiAnZml4ZWQnIH0pXSxcbiAgICBob3N0OiB7IG5nU2tpcEh5ZHJhdGlvbjogJ3RydWUnIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjU2lnblVwRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LDQvdC90YvRhSDQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyU2VydmljZTogU2NVc2VyU2VydmljZSA9IGluamVjdChTY1VzZXJTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDRgdC/0YDQsNCy0L7Rh9C90LjQutC+0LIuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWZlcmVuY2VzU2VydmljZTogU2NSZWZlcmVuY2VzU2VydmljZSA9IGluamVjdChTY1JlZmVyZW5jZXNTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQutC+0L3QstC10YDRgtCw0YbQuNC4INC00LDQvdC90YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnRlcnNTZXJ2aWNlOiBTY0NvbnZlcnRlcnNTZXJ2aWNlID0gaW5qZWN0KFNjQ29udmVydGVyc1NlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgdCx0L7RgNCwINC80LXRgtGA0LjQuiDQviDQtNC10LnRgdGC0LLQuNGP0YUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9C10LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWV0cmlrYVNlcnZpY2U6IFNjVXNlck1ldHJpa2FTZXJ2aWNlID0gaW5qZWN0KFNjVXNlck1ldHJpa2FTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgS3RgNC10LXRgdGC0YAg0LrQsNGH0LXRgdGC0LLQsCDQsNC00YDQtdGB0L7Qsiwg0LLRi9Cx0YDQsNC90L3Ri9GFINC40Lcg0L/QvtC00YHQutCw0LfQvtC6LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWRkcmVzc1F1YWxpdHlTZXJ2aWNlID0gaW5qZWN0KFNjQWRkcmVzc1F1YWxpdHlTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0L7Qu9C1INCy0LLQvtC00LAg0L7RgNCz0LDQvdC40LfQsNGG0LjQvtC90L3Qvi3Qv9GA0LDQstC+0LLRi9GFINGE0L7RgNC8LlxuICAgICAqL1xuICAgIHB1YmxpYyBvcGZDb250cm9sOiBGb3JtQ29udHJvbDxrZXlvZiB0eXBlb2YgU2NPcGZMaXN0IHwgbnVsbD4gPSBuZXcgRm9ybUNvbnRyb2w8a2V5b2YgdHlwZW9mIFNjT3BmTGlzdD4oJ2luZGl2aWR1YWwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcblxuICAgIC8qKlxuICAgICAqINCT0YDRg9C/0L/QsCDQv9C+0LvQtdC5INCy0LLQvtC00LAg0LTQu9GPINGE0L7RgNC80Ysg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZm9ybSA9IG5ldyBGb3JtR3JvdXAoXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyldKSxcbiAgICAgICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdKSxcbiAgICAgICAgICAgIHBob25lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHBob25lVmFsaWRhdG9yKCldKSxcbiAgICAgICAgICAgIHZlcmlmaWNhdGlvbkNvZGU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildKSxcbiAgICAgICAgICAgIGNpdHlJZDogbmV3IEZvcm1Db250cm9sPG51bWJlciB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCldKSxcbiAgICAgICAgICAgIHBhc3N3b3JkQ29uZmlybTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0pLFxuICAgICAgICAgICAgZ2V0TmV3czogbmV3IEZvcm1Db250cm9sPGJvb2xlYW4+KGZhbHNlKSxcbiAgICAgICAgICAgIGFjY2VwdFJ1bGVzOiBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oZmFsc2UsIFZhbGlkYXRvcnMucmVxdWlyZWRUcnVlKSxcbiAgICAgICAgICAgIGNvbnRyYWdlbnQ6IG5ldyBGb3JtR3JvdXA8YW55Pih7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHNjUGFzc3dvcmRDb25maXJtTWF0Y2hpbmdWYWxpZGF0b3IoJ3Bhc3N3b3JkJywgJ3Bhc3N3b3JkQ29uZmlybScpLFxuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCf0LXRgNC10YfQuNGB0LvQtdC90LjQtSDRgtC40L/QvtCyINC/0L7QtNGB0LrQsNC30L7Qui5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VnZ2VzdGlvblR5cGU6IHR5cGVvZiBTY0lTdWdnZXN0aW9uVHlwZSA9IFNjSVN1Z2dlc3Rpb25UeXBlO1xuXG4gICAgLyoqXG4gICAgICog0J/QtdGA0LXRh9C40YHQu9C10L3QuNC1INC+0YDQs9Cw0L3QuNC30LDRhtC40L7QvdC90L4t0L/RgNCw0LLQvtCy0YvRhSDRhNC+0YDQvC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgb3BmTGlzdEVudW06IHR5cGVvZiBTY09wZkxpc3QgPSBTY09wZkxpc3Q7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU3ViamVjdH0g0YHQvtCx0YvRgtC40Y8g0L7RgtC/0YDQsNCy0LrQuCDRhNC+0YDQvNGLLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvblN1Ym1pdDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgT2JzZXJ2YWJsZX0g0LfQsNC/0YDQvtGB0LAg0LTQsNC90L3Ri9GFINGA0LXQs9C40YHRgtGA0LDRhtC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0JCA9IHRoaXMub25TdWJtaXQucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuZm9ybS52YWxpZCksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLmZvcm0udmFsdWUgYXMgU2NJVXNlck9uRGF0YUNyZWF0ZSksXG4gICAgICAgIHRhcCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQmFzZUNvbnRyYWdlbnQodmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCh2YWx1ZSkgPT5cbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2Uuc2lnblVwJCh0aGlzLmNvbnZlcnRlcnNTZXJ2aWNlLnJlbW92ZU51bGxSZWN1cnNpdmUodmFsdWUpKS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycywgbWVzc2FnZSB9ID0gZXJyb3IuZXJyb3IgYXMgU2NJQXBpRXJyb3JSZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd24oZXJyb3JzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzZWN1cml0eS9kZXRlY3Qtb2JqZWN0LWluamVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSk/LnNldEVycm9ycyh7IHNlcnZlclJlc3BvbnNlOiBlcnJvcnNba2V5XSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXJyb3JzICYmIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uc2V0RXJyb3JzKHsgc2VydmVyUmVzcG9uc2U6IFttZXNzYWdlXSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwSW5kZXggPSB0aGlzLnN0ZXBzLmZpbmRJbmRleCgoXywgaW5kZXgpID0+ICF0aGlzLmNhbk5leHRTdGVwKGluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe30gYXMgSUF1dGhUb2tlbik7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKG51bGwpXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlKClcbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC00LXQutGBINGN0YLQsNC/0LAuXG4gICAgICovXG4gICAgcHVibGljIHN0ZXBJbmRleDogbnVtYmVyID0gMDtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQuNC30LzQtdC90LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC30LDQs9GA0YPQt9C60Lgg0LTQsNC90L3Ri9GFLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBsb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMucmVxdWVzdCQucGlwZShtYXAodHVpSXNGYWxzeSkpO1xuXG4gICAgLyoqXG4gICAgICog0KHQuNCz0L3QsNC7INGB0L7QsdGL0YLQuNGPINCw0YPRgtC10L3RgtC40YTQuNC60LDRhtC40Lgg0L/QvtGB0LvQtSDRg9GB0L/QtdGI0L3QvtC5INGA0LXQs9C40YHRgtGA0LDRhtC40LguXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1Y2Nlc3NBdXRoOiBPdXRwdXRSZWY8U2NVc2VyPiA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckNoYW5nZSQoKS5waXBlKGZpbHRlcigodXNlcikgPT4gIXVzZXIuaXNHdWVzdCkpKTtcblxuICAgIC8qKlxuICAgICAqINCh0LjQs9C90LDQuyDQvdCw0LbQsNGC0LjRjyDQvdCwIFwi0JTQvtCz0L7QstC+0YAg0L7RhNC10YDRgtGLXCIuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGNsaWNrT2ZmZXJFdmVudDogT3V0cHV0RW1pdHRlclJlZjx2b2lkPiA9IG91dHB1dCgpO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGN0YLQsNC/0L7QsiDRgNC10LPQuNGB0YLRgNCw0YbQuNC4LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHN0ZXBzOiBzdHJpbmdbXSA9IFsn0JTQsNC90L3Ri9C1INC+INC60LvQuNC10L3RgtC1JywgJ9Ce0LHRidC40LUg0LTQsNC90L3Ri9C1INC60L7QvdGC0YDQsNCz0LXQvdGC0LAnLCAn0JrQvtC90YLQsNC60YLRiyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8nLCAn0JHQsNC90LrQvtCy0YHQutC40LUg0YDQtdC60LLQuNC30LjRgtGLINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjyddO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY1NpZ25VcEZvcm1Db21wb25lbnR9LlxuICAgICAqINCd0LDQt9Cy0LDQvdC40LUg0YHQsdGA0LDRgdGL0LLQsNC10YLRgdGPINGC0L7Qu9GM0LrQviDQv9GA0Lgg0L/QtdGA0LXRhdC+0LTQtSDQvNC10LbQtNGDINGE0LjQt9C40YfQtdGB0LrQuNC8INC70LjRhtC+0Lwg0Lgg0L7RgNCz0LDQvdC40LfQsNGG0LjQtdC5OiDRgyDRhNC40LfQuNGH0LXRgdC60L7Qs9C+INC70LjRhtCwINCyINC/0L7Qu9C1INCkLtCYLtCeLixcbiAgICAgKiDRgyDQvtGB0YLQsNC70YzQvdGL0YUg0YTQvtGA0Lwg0L3QsNC30LLQsNC90LjQtSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC4LCDQv9C+0Y3RgtC+0LzRgyDQv9GA0LXQttC90LXQtSDQt9C90LDRh9C10L3QuNC1INC/0L4g0YHQvNGL0YHQu9GDINC90LUg0L/QvtC00YXQvtC00LjRgi5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub3BmQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLm9wZkNvbnRyb2wudmFsdWUpLFxuICAgICAgICAgICAgICAgIHBhaXJ3aXNlKCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChbcHJldmlvdXNPcGYsIG9wZl0pID0+IChwcmV2aW91c09wZiA9PT0gJ2luZGl2aWR1YWwnKSAhPT0gKG9wZiA9PT0gJ2luZGl2aWR1YWwnKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgbmFtZTogbnVsbCB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDQs9GA0YPQv9C/INC/0L7Qu9C10Lkg0LHQsNC90LrQvtCy0YHQutC40YUg0YDQtdC60LLQuNC30LjRgtC+0LIuXG4gICAgICovXG4gICAgcHVibGljIGdldCBiYW5rQWNjb3VudHMoKTogRm9ybUFycmF5PFJldHVyblR5cGU8U2NTaWduVXBGb3JtQ29tcG9uZW50WydjcmVhdGVCYW5rQWNjb3VudEdyb3VwJ10+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5nZXQoJ2JhbmtBY2NvdW50cycpIGFzIEZvcm1BcnJheTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0LPRgNGD0L/QvyDQv9C+0LvQtdC5INC60L7QvdGC0LDQutGC0L3Ri9GFINC70LjRhi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRhY3RzKCk6IEZvcm1BcnJheTxSZXR1cm5UeXBlPFNjU2lnblVwRm9ybUNvbXBvbmVudFsnY3JlYXRlQ29udGFjdEdyb3VwJ10+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5nZXQoJ2NvbnRhY3RzJykgYXMgRm9ybUFycmF5O1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgKHRoaXMuZm9ybSBhcyBGb3JtR3JvdXApLnJlbW92ZUNvbnRyb2woJ2NvbnRyYWdlbnQnKTtcbiAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLnNpZ25VcFNob3csXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQvtCy0LXRgNGP0LXRgiwg0LzQvtC20LXRgiDQu9C4INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDQv9C10YDQtdC50YLQuCDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDRiNCw0LPRgyDRgNC10LPQuNGB0YLRgNCw0YbQuNC4LlxuICAgICAqINCf0YDQuCDQv9GA0L7QstC10YDQutC1INC60LDQttC00L7Qs9C+INGN0YLQsNC/0LAg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L4g0L/RgNC+0LLQtdGA0Y/QtdGC0YHRjyDQutC+0YDRgNC10LrRgtC90L7RgdGC0Ywg0LfQsNC/0L7Qu9C90LXQvdC40Y8g0LTQsNC90L3Ri9GFINC90LAg0L/RgNC10LTRi9C00YPRidC40YUg0Y3RgtCw0L/QsNGFLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4INCY0L3QtNC10LrRgSDRjdGC0LDQv9CwINC00LvRjyDQutC+0YLQvtGA0L7Qs9C+INC90YPQttC90L4g0L/RgNC+0LLQtdGA0LjRgtGMINCy0LDQu9C40LTQvdC+0YHRgtGMLlxuICAgICAqIEByZXR1cm5zINCS0YvQstC+0LTQuNGCINC30L3QsNGH0LXQvdC40LUgYGJvb2xlYW5gINC90LAg0L7RgdC90L7QstCw0L3QuNC4IHtAbGluayBpbmRleH0uXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvY29nbml0aXZlLWNvbXBsZXhpdHlcbiAgICBwdWJsaWMgY2FuTmV4dFN0ZXAoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB7IGNvbnRyb2xzIH0gPSB0aGlzLmZvcm07XG5cbiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0Y/QtdC8INCy0LDQu9C40LTQvdC+0YHRgtGMINC00LDQvdC90YvRhSDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8uXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRyb2xzKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbnRyb2xzLCBrZXkpICYmIGtleSAhPT0gJ2NvbnRyYWdlbnQnICYmIGNvbnRyb2xzW2tleSBhcyBrZXlvZiB0eXBlb2YgdGhpcy5mb3JtLmNvbnRyb2xzXS5pbnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8g0JTQu9GPINGN0YLQsNC/0LAgMCDQv9GA0L7RgdGC0L4g0LLQvtC30LLRgNCw0YnQsNC10LwgdHJ1ZSwg0YLQsNC6INC60LDQuiDQtNCw0L3QvdGL0LUg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC/0YDQvtCy0LXRgNC10L3Riy5cbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCf0YDQvtCy0LXRgNGP0LXQvCDQstCw0LvQuNC00L3QvtGB0YLRjCDQv9C+0LvQtdC5INC60L7QvdGC0YDQsNCz0LXQvdGC0LAuXG4gICAgICAgIGNvbnN0IGNvbnRyYWdlbnRDb250cm9scyA9IGNvbnRyb2xzLmNvbnRyYWdlbnQuY29udHJvbHM7XG5cbiAgICAgICAgaWYgKGNvbnRyYWdlbnRDb250cm9scykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29udHJhZ2VudENvbnRyb2xzKSB7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb250cmFnZW50Q29udHJvbHMsIGtleSkgJiYga2V5ICE9PSAnYmFua0FjY291bnRzJyAmJiBrZXkgIT09ICdjb250YWN0cycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNlY3VyaXR5L2RldGVjdC1vYmplY3QtaW5qZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBjb250cmFnZW50Q29udHJvbHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRyb2wudmFsdWUpICYmIGNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8g0JTQu9GPINGN0YLQsNC/0LAgMSDQstC+0LfQstGA0LDRidCw0LXQvCB0cnVlLCDQtdGB0LvQuCDQstGB0LUg0L/QvtC70Y8g0LrQvtC90YLRgNCw0LPQtdC90YLQsCDQstCw0LvQuNC00L3Riy5cbiAgICAgICAgaWYgKGluZGV4ID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCf0YDQvtCy0LXRgNGP0LXQvCDRgdC/0LjRgdC+0Log0LrQvtC90YLQsNC60YLQvtCyINCy0L3Rg9GC0YDQuCDQutC+0L3RgtGA0LDQs9C10L3RgtCwLlxuICAgICAgICBpZiAoY29udHJhZ2VudENvbnRyb2xzWydjb250YWN0cyddLmludmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vINCU0LvRjyDRjdGC0LDQv9CwIDIg0LLQvtC30LLRgNCw0YnQsNC10LwgdHJ1ZSwg0LXRgdC70Lgg0YHQv9C40YHQvtC6INC60L7QvdGC0LDQutGC0L7QsiDQstC90YPRgtGA0Lgg0LrQvtC90YLRgNCw0LPQtdC90YLQsCDQstCw0LvQuNC00L3Ri9C5LlxuICAgICAgICBpZiAoaW5kZXggPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g0J/RgNC+0LLQtdGA0Y/QtdC8INGB0L/QuNGB0L7QuiDQsdCw0L3QutC+0LLRgdC60LjRhSDRgNC10LrQstC40LfQuNGC0L7QsiDQstC90YPRgtGA0Lgg0LrQvtC90YLRgNCw0LPQtdC90YLQsC5cbiAgICAgICAgcmV0dXJuIGNvbnRyYWdlbnRDb250cm9sc1snYmFua0FjY291bnRzJ10udmFsaWQgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9C/0L7Qu9C90Y/QtdGCINC90LDQstC40LPQsNGG0LjRjiDQv9C+INGE0L7RgNC80LUg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkZWx0YSDQl9C90LDRh9C10L3QuNC1LCDQvdCwINC60L7RgtC+0YDQvtC1INC90LXQvtCx0YXQvtC00LjQvNC+INCy0YvQv9C+0LvQvdC40YLRjCDQvdCw0LLQuNCz0LDRhtC40Y4uXG4gICAgICovXG4gICAgcHVibGljIG5hdmlnYXRlKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGVwSW5kZXggPSAodGhpcy5zdGVwSW5kZXggKyBkZWx0YSkgJSA0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINCx0LDQt9C+0LLQvtCz0L4g0LrQvtC90YLRgNCw0LPQtdC90YLQsCDQtNC70Y8g0LrQu9C40LXQvdGC0LAg0YTQuNC30LjRh9C10YHQutC+0LPQviDQu9C40YbQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb3JtVmFsdWUg0JfQvdCw0YfQtdC90LjQtSDRhNC+0YDQvNGLINC/0YDQuCDRgNC10LPQuNGB0YLRgNCw0YbQuNC4XG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXNlQ29udHJhZ2VudChmb3JtVmFsdWU6IFNjU2lnblVwRm9ybUNvbXBvbmVudFsnZm9ybSddWyd2YWx1ZSddKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCB8fCB0aGlzLm9wZkNvbnRyb2wudmFsdWUgIT09ICdpbmRpdmlkdWFsJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGZvcm1WYWx1ZS5jb250cmFnZW50ID0ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtLmNvbnRyb2xzLm5hbWUudmFsdWUsXG4gICAgICAgICAgICBvcGY6ICdpbmRpdmlkdWFsJyxcbiAgICAgICAgICAgIGNvbnRhY3RzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmZvcm0uY29udHJvbHMubmFtZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHRoaXMuZm9ybS5jb250cm9scy5waG9uZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IHRoaXMuZm9ybS5jb250cm9scy5lbWFpbC52YWx1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0g0YHQv9C40YHQvtC6INC+0YDQs9Cw0L3QuNC30LDRhtC40L7QvdC90L4t0L/RgNCw0LLQvtCy0YvRhSDRhNC+0YDQvC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0T3BmJCgpOiBPYnNlcnZhYmxlPEFycmF5PFNjSVJlZmVyZW5jZXNUeXBlczxTY09wZkxpc3QsIGtleW9mIHR5cGVvZiBTY09wZkxpc3Q+Pj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VzU2VydmljZS5vcGYkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC+0L3QvdC+LdC/0YDQsNCy0L7QstC+0Lkg0YTQvtGA0LzRiywg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC5INGB0LjQvNCy0L7Qu9GM0L3QvtC80YMg0L7QsdC+0LfQvdCw0YfQtdC90LjRjiAoc2x1Zykg0L3QsCDQstGF0L7QtNC1LlxuICAgICAqXG4gICAgICogQHBhcmFtIHNsdWcg0KHQuNC80LLQvtC70YzQvdC+0LUg0L7QsdC+0LfQvdCw0YfQtdC90LjQtSAoc2x1ZykuXG4gICAgICovXG4gICAgcHVibGljIGdldE9wZkJ5U2x1ZyQoc2x1Zzoga2V5b2YgdHlwZW9mIFNjT3BmTGlzdCk6IE9ic2VydmFibGU8U2NJUmVmZXJlbmNlc1R5cGVzPFNjT3BmTGlzdCwga2V5b2YgdHlwZW9mIFNjT3BmTGlzdD4gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlc1NlcnZpY2UuZ2V0T3BmQnlTbHVnJChzbHVnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDQs9GA0YPQv9C/0YMg0L/QvtC70LXQuSDQsdCw0L3QutC+0LLRgdC60LjRhSDRgNC10LrQstC40LfQuNGC0L7Qsi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUJhbmtBY2NvdW50R3JvdXAoKTogU2NCYW5rQWNjb3VudEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgIGJhbmtOYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgICAgICBiaWM6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOSksIHNjQmljVmFsaWRhdG9yXSksXG4gICAgICAgICAgICBhY2NvdW50TnVtYmVyOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIwKV0pLFxuICAgICAgICAgICAgY29ycmVzcG9uZGVudEFjY291bnQ6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMjApLCBzY0NvcnJlc3BvbmRlbnRBY2NvdW50VmFsaWRhdG9yXSksXG4gICAgICAgICAgICBjdXJyZW5jeUlkOiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCU0L7QsdCw0LLQu9GP0LXRgiDQkdCw0L3QutC+0LLRgdC60LjQtSDRgNC10LrQstC40LfQuNGC0YsuXG4gICAgICovXG4gICAgcHVibGljIGFkZEJhbmtBY2NvdW50R3JvdXAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYmFua0FjY291bnRzLnB1c2godGhpcy5jcmVhdGVCYW5rQWNjb3VudEdyb3VwKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINCx0LDQvdC60L7QstGB0LrQuNC1INGA0LXQutCy0LjQt9C40YLRiy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCDQmNC90LTQtdC60YEg0LHQsNC90LrQvtCy0YHQutC40YUg0YDQtdC60LLQuNC30LjRgtC+0LIuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUJhbmtBY2NvdW50R3JvdXAoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLmJhbmtBY2NvdW50cy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0LPRgNGD0L/Qv9GDINC/0L7Qu9C10Lkg0LrQvtC90YLQsNC60YLQvdC+0LPQviDQu9C40YbQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlQ29udGFjdEdyb3VwKCk6IFNjQ29udGFjdEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAgICAgICAgIHBob25lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIHBob25lVmFsaWRhdG9yKCldKSxcbiAgICAgICAgICAgIGVtYWlsOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5lbWFpbCksXG4gICAgICAgICAgICBwb3NpdGlvbjogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDQstGL0LHQvtGA0LAg0LDQtNGA0LXRgdCwINC00L7RgdGC0LDQstC60LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3VnZ2VzdGlvbiDQntCx0YrQtdC60YIg0L/QvtC00YHQutCw0LfQutC4INCw0YDQtdGB0LAuXG4gICAgICovXG4gICAgcHVibGljIG9uU2VsZWN0ZWRPcmdhbml6YXRpb24oc3VnZ2VzdGlvbjogU2NTdWdnZXN0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudCAmJiAnaW5uJyBpbiBzdWdnZXN0aW9uICYmICEoJ2JpYycgaW4gc3VnZ2VzdGlvbikpIHtcbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uLm9wZiAmJiBzdWdnZXN0aW9uLm9wZi5zbHVnICE9PSB0aGlzLm9wZkNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZkNvbnRyb2wucGF0Y2hWYWx1ZShzdWdnZXN0aW9uLm9wZi5zbHVnIGFzIGtleW9mIHR5cGVvZiBTY09wZkxpc3QsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHMuY29udHJhZ2VudC5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgb3BmOiBzdWdnZXN0aW9uLm9wZi5zbHVnIGFzIGtleW9mIHR5cGVvZiBTY09wZkxpc3QsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50LnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIG5hbWU6IHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICBpbm46IHN1Z2dlc3Rpb24uaW5uLFxuICAgICAgICAgICAgICAgIGtwcDogc3VnZ2VzdGlvbi5rcHAgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBva3BvOiBzdWdnZXN0aW9uLm9rcG8gPz8gbnVsbCxcbiAgICAgICAgICAgICAgICBkaXJlY3Rvck5hbWU6IHN1Z2dlc3Rpb24uZGlyZWN0b3JOYW1lID8/IG51bGwsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3JQb3NpdGlvbjogc3VnZ2VzdGlvbi5kaXJlY3RvclBvc2l0aW9uID8/IG51bGwsXG4gICAgICAgICAgICAgICAgbGVnYWxBZGRyZXNzOiBzdWdnZXN0aW9uLmxlZ2FsQWRkcmVzcyA/PyBudWxsLFxuICAgICAgICAgICAgICAgIHBvc3RhbEFkZHJlc3M6IHN1Z2dlc3Rpb24ucG9zdGFsQWRkcmVzcyA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGFjdHVhbEFkZHJlc3M6IHN1Z2dlc3Rpb24uYWN0dWFsQWRkcmVzcyA/PyBudWxsLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9scy5jb250cmFnZW50Lm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoWydjb250cmFnZW50JywgJ2NvbnRhY3RzJ10pPy5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoWydjb250cmFnZW50JywgJ2JhbmtBY2NvdW50cyddKT8ubWFya0FzVW50b3VjaGVkKCk7XG5cbiAgICAgICAgICAgIHRoaXMuYWRkcmVzc1F1YWxpdHlTZXJ2aWNlLnNldE9yZ2FuaXphdGlvbkFkZHJlc3NRdWFsaXRpZXModGhpcy5mb3JtLmNvbnRyb2xzLmNvbnRyYWdlbnQsIHN1Z2dlc3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JTQvtCx0LDQstC70Y/QtdGCINC60L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+INC60L7QvdGC0YDQsNCz0LXQvdGC0LAuXG4gICAgICovXG4gICAgcHVibGljIGFkZENvbnRhY3RHcm91cCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWN0cy5wdXNoKHRoaXMuY3JlYXRlQ29udGFjdEdyb3VwKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINC60L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+INC60L7QvdGC0YDQsNCz0LXQvdGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXgg0JjQvdC00LXQutGBINC60L7QvdGC0LDQutGC0L3QvtCz0L4g0LvQuNGG0LAuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUNvbnRhY3RHcm91cChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFjdHMucmVtb3ZlQXQoaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQsNGC0YvQstCw0LXRgiDRgdC+0LHRi9GC0LjQtSDQvdCw0LbQsNGC0LjRjyDQvdCwIFwi0JTQvtCz0L7QstC+0YAg0L7RhNC10YDRgtGLXCIuXG4gICAgICovXG4gICAgcHVibGljIG9uQ2xpY2tPZmZlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGlja09mZmVyRXZlbnQuZW1pdCgpO1xuICAgIH1cbn1cbiIsIjxmb3JtXG4gICAgKm5nSWY9XCJvcGZDb250cm9sLnZhbHVlIGFzIHNlbGVjdE9wZlwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TdWJtaXQubmV4dCgpXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTVcIlxuPlxuICAgIEBsZXQgaXNJbmRpdmlkdWFsID0gb3BmTGlzdEVudW1bc2VsZWN0T3BmXSA9PT0gb3BmTGlzdEVudW0uaW5kaXZpZHVhbDtcbiAgICA8dHVpLXN0ZXBwZXJcbiAgICAgICAgKm5nSWY9XCIhaXNJbmRpdmlkdWFsICYmIGZvcm0uY29udHJvbHMuY29udHJhZ2VudFwiXG4gICAgICAgIFsoYWN0aXZlSXRlbUluZGV4KV09XCJzdGVwSW5kZXhcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKnR1aVJlcGVhdFRpbWVzPVwibGV0IGluZGV4IG9mIDRcIlxuICAgICAgICAgICAgW3N0ZXBTdGF0ZV09XCJpbmRleCAmJiAhY2FuTmV4dFN0ZXAoaW5kZXgpID8gJ2Vycm9yJyA6ICdwYXNzJ1wiXG4gICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpbmRleCAmJiAhY2FuTmV4dFN0ZXAoaW5kZXggLSAxKSA/ICcnIDogbnVsbFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHR1aVN0ZXBcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgc3RlcHNbaW5kZXhdIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvdHVpLXN0ZXBwZXI+XG4gICAgPGRpdlxuICAgICAgICBbY2xhc3MuIWhpZGRlbl09XCJzdGVwSW5kZXggIT09IDBcIlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIlxuICAgID5cbiAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAg0KLQuNC/INC60LvQuNC10L3RgtCwXG4gICAgICAgICAgICA8dHVpLXNlbGVjdFxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJvcGZDb250cm9sXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVDb250ZW50XT1cIm9wZkNvbnRlbnRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCi0LjQvyDQutC70LjQtdC90YLQsFxuICAgICAgICAgICAgICAgIDx0dWktZGF0YS1saXN0ICp0dWlEYXRhTGlzdD5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0T3BmJCgpIHwgYXN5bmM7IGxldCBpbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aU9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0uc2x1Z1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3R1aS1kYXRhLWxpc3Q+XG4gICAgICAgICAgICA8L3R1aS1zZWxlY3Q+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAjb3BmQ29udGVudFxuICAgICAgICAgICAgICAgIGxldC1kYXRhXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdj57eyAoZ2V0T3BmQnlTbHVnJChkYXRhKSB8IGFzeW5jKT8ubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICBAbGV0IG5hbWVMYWJlbCA9IG9wZkxpc3RFbnVtW3NlbGVjdE9wZl0gPT09IG9wZkxpc3RFbnVtLmluZGl2aWR1YWwgPyAn0KQu0Jgu0J4uJyA6ICfQndCw0LfQstCw0L3QuNC1INC+0YDQs9Cw0L3QuNC30LDRhtC40LgnO1xuICAgICAgICA8bGFiZWwgdHVpTGFiZWw+XG4gICAgICAgICAgICB7eyBuYW1lTGFiZWwgfX1cbiAgICAgICAgICAgIDx0dWktaW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiPlxuICAgICAgICAgICAgICAgIEBpZiAob3BmTGlzdEVudW1bc2VsZWN0T3BmXSA9PT0gb3BmTGlzdEVudW0uaW5kaXZpZHVhbCkge1xuICAgICAgICAgICAgICAgICAgICB7eyBuYW1lTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgPHNjLXN1Z2dlc3Rpb24tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwic3VnZ2VzdGlvblR5cGUuZmlvXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAg0J3QsNC30LLQsNC90LjQtSDQvtGA0LPQsNC90LjQt9Cw0YbQuNC4XG4gICAgICAgICAgICAgICAgICAgIEBpZiAob3BmTGlzdEVudW1bc2VsZWN0T3BmXSAhPT0gb3BmTGlzdEVudW0ubm9uX3Jlc2lkZW50X2xlZ2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0dWlEYXRhTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInN1Z2dlc3Rpb25UeXBlLm9yZ2FuaXphdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2xpY2spPVwib25TZWxlY3RlZE9yZ2FuaXphdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3R1aS1pbnB1dD5cbiAgICAgICAgICAgIDx0dWktZXJyb3JcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBpdGVtcy1zdGFydCBnYXAtNSBzbTpncmlkLWNvbHMtMlwiPlxuICAgICAgICAgICAgPHNjLXZlcmlmaWNhdGlvbi1waG9uZS1jaGVjay1mb3JtIFtzaG91bGRCZUJ1c3ldPVwiZmFsc2VcIiAvPlxuICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgINCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLXG4gICAgICAgICAgICAgICAgPHR1aS1pbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgICDQkNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRi1xuICAgICAgICAgICAgICAgICAgICA8c2Mtc3VnZ2VzdGlvbi1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgKnR1aURhdGFMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJzdWdnZXN0aW9uVHlwZS5lbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC90dWktaW5wdXQ+XG4gICAgICAgICAgICAgICAgPHR1aS1lcnJvclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxzYy1hZGRyZXNzZXMtc2VsZWN0aW9uLWZpZWxkIFtjYW5TZWxlY3RDb3VudHJ5XT1cIm9wZkxpc3RFbnVtW3NlbGVjdE9wZl0gPT09IG9wZkxpc3RFbnVtLm5vbl9yZXNpZGVudF9sZWdhbFwiIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgaXRlbXMtc3RhcnQgZ2FwLTUgc206Z3JpZC1jb2xzLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICDQn9Cw0YDQvtC70YxcbiAgICAgICAgICAgICAgICA8dHVpLWlucHV0LXBhc3N3b3JkIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCI+XG4gICAgICAgICAgICAgICAgICAgINCf0LDRgNC+0LvRjFxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZExlZ2FjeVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dC1wYXNzd29yZD5cbiAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cIltdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICDQn9C+0LLRgtC+0YAg0L/QsNGA0L7Qu9GPXG4gICAgICAgICAgICAgICAgPHR1aS1pbnB1dC1wYXNzd29yZCBmb3JtQ29udHJvbE5hbWU9XCJwYXNzd29yZENvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICAgICAg0J/QvtCy0YLQvtGAINC/0LDRgNC+0LvRj1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1aVRleHRmaWVsZExlZ2FjeVxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwibmV3LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L3R1aS1pbnB1dC1wYXNzd29yZD5cbiAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBhc3N3b3JkQ29uZmlybVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJbXSB8IHR1aUZpZWxkRXJyb3IgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgaXRlbXMtc3RhcnQgZ2FwLTUgc206Z3JpZC1jb2xzLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCB0dWlMYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ2V0TmV3c1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICDQryDRhdC+0YfRgyDQv9C+0LvRg9GH0LDRgtGMINGA0LDRgdGB0YvQu9C60YMg0KHQvdCw0LHRhtC10L3RgtGAINC+INGB0LrQuNC00LrQsNGFINC4INC90L7QstC+0YHRgtGP0YUg0L/QviDRjdC70LXQutGC0YDQvtC90L3QvtC5INC/0L7Rh9GC0LUuXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGxhYmVsIHR1aUxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0dWlDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhY2NlcHRSdWxlc1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgINCg0LXQs9C40YHRgtGA0LjRgNGD0Y/RgdGMINC90LAg0YHQsNC50YLQtSwg0Y8g0YHQvtCz0LvQsNGI0LDRjtGB0Ywg0YFcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwc2V1ZG9dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyBvbkNsaWNrT2ZmZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAg0JTQvtCz0L7QstC+0YDQvtC8INC+0YTQtdGA0YLRi1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10dWktbmVnYXRpdmVcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8dHVpLWVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhY2NlcHRSdWxlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwiW10gfCB0dWlGaWVsZEVycm9yIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmICghaXNJbmRpdmlkdWFsKSB7XG4gICAgICAgIDxzYy1uZXctY29udHJhZ2VudC1mb3JtXG4gICAgICAgICAgICBbb3BmQ29udHJvbF09XCJvcGZDb250cm9sXCJcbiAgICAgICAgICAgIFtjbGFzcy4haGlkZGVuXT1cInN0ZXBJbmRleCAhPT0gMVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPGRpdiBbY2xhc3MuIWhpZGRlbl09XCJzdGVwSW5kZXggIT09IDJcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRhY3RzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTUgcGItMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPtCa0L7QvdGC0LDQutGC0Ys8L3A+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29udGFjdCBvZiBjb250YWN0cy5jb250cm9sczsgbGV0IGluZGV4ID0gaW5kZXg7IGxldCBjb3VudCA9IGNvdW50OyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC0xMCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtYm9sZFwiPtCa0L7QvdGC0LDQutGC0L3QvtC1INC70LjRhtC+IOKElnt7IGluZGV4ICsgMSB9fTo8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb3VudCAtIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ29udGFjdEdyb3VwKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS50cmFzaC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzYy1uZXctY29udGFjdC1mb3JtIFtmb3JtXT1cImNvbnRhY3RcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8aHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoLXB4IHctZnVsbCBiZy10dWktYmFzZS0wNFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS5wbHVzXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRDb250YWN0R3JvdXAoKVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0Ywg0LrQvtC90YLQsNC60YJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IFtjbGFzcy4haGlkZGVuXT1cInN0ZXBJbmRleCAhPT0gM1wiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYmFua0FjY291bnRzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTUgcGItMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtYm9sZFwiPtCR0LDQvdC60L7QstGB0LrQuNC1INGA0LXQutCy0LjQt9C40YLRizwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBiYW5rQWNjb3VudCBvZiBiYW5rQWNjb3VudHMuY29udHJvbHM7IGxldCBpbmRleCA9IGluZGV4OyBsZXQgY291bnQgPSBjb3VudDsgbGV0IGxhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtMTIgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LWJvbGRcIj7QkdCw0L3QutC+0LLRgdC60LjQtSDRgNC10LrQstC40LfQuNGC0Ysg4oSWe3sgaW5kZXggKyAxIH19OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvdW50IC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVCYW5rQWNjb3VudEdyb3VwKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS50cmFzaC0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzYy1uZXctY29udHJhZ2VudC1iYW5rLWFjY291bnQtZm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJvcGZDb250cm9sLnZhbHVlIGFzIHNlbGVjdE9wZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3BmXT1cInNlbGVjdE9wZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJiYW5rQWNjb3VudFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxoclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImgtcHggdy1mdWxsIGJnLXR1aS1iYXNlLTA0XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnBsdXNcIlxuICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEJhbmtBY2NvdW50R3JvdXAoKVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgINCU0L7QsdCw0LLQuNGC0Ywg0LHQsNC90LrQvtCy0YHQutC40LUg0YDQtdC60LLQuNC30LjRgtGLXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGdhcC0yXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic3RlcEluZGV4ID4gMFwiXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGUoLTEpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0J3QsNC30LDQtFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJpc0luZGl2aWR1YWwgfHwgKHN0ZXBJbmRleCA9PT0gMiAmJiAhZm9ybS5jb250cm9scy5jb250cmFnZW50LmNvbnRyb2xzWydiYW5rQWNjb3VudHMnXSkgfHwgc3RlcEluZGV4ID09PSAzOyBlbHNlIG5leHRJbmRleEJ0blwiXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiISEobG9hZGluZyQgfCBhc3luYylcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCX0LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDRgtGM0YHRj1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNuZXh0SW5kZXhCdG4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5OZXh0U3RlcChzdGVwSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGUoMSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCU0LDQu9C10LVcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuPC9mb3JtPlxuIl19
@@ -1,3 +0,0 @@
1
- export * from './sc-banner.component';
2
- export * from './sc-banner.module';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvYmFubmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2MtYmFubmVyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWJhbm5lci5tb2R1bGUnO1xuIl19