@seniorsistemas/angular-components 19.0.5 → 19.0.6

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 (439) hide show
  1. package/accordion/lib/accordion/accordion.component.d.ts +25 -0
  2. package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +60 -0
  3. package/alert/lib/alert/alert.component.d.ts +40 -0
  4. package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +51 -0
  5. package/badge/lib/badge/badge.component.d.ts +20 -0
  6. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +46 -1
  7. package/breadcrumb/lib/breadcrumb/breadcrumb.component.d.ts +12 -0
  8. package/button/lib/button/button.component.d.ts +101 -0
  9. package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +24 -0
  10. package/card/lib/card/card.component.d.ts +18 -0
  11. package/chat/lib/chat/chat.component.d.ts +20 -2
  12. package/chat/lib/chat/components/chat-message/chat-message.component.d.ts +18 -2
  13. package/checkbox/lib/checkbox/checkbox.component.d.ts +23 -3
  14. package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +20 -0
  15. package/chips/lib/chips/chip-item/chip-item.component.d.ts +15 -0
  16. package/chips/lib/chips/chips/chips.component.d.ts +41 -0
  17. package/code-editor/lib/code-editor/code-editor.component.d.ts +40 -0
  18. package/collapse-link/lib/collapse-link/collapse-link.component.d.ts +18 -0
  19. package/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.d.ts +5 -0
  20. package/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.d.ts +19 -0
  21. package/content-generator/lib/content-generator/content-generator.component.d.ts +30 -0
  22. package/control-errors/lib/control-errors/control-errors.component.d.ts +36 -0
  23. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +36 -0
  24. package/currency/lib/currency.service.d.ts +15 -2
  25. package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +31 -0
  26. package/dialog/lib/src/dialog/dialog.component.d.ts +51 -0
  27. package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -2
  28. package/dialog/lib/src/dialog/services/internal-dialog.service.d.ts +1 -1
  29. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +6 -5
  30. package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +5 -0
  31. package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +14 -0
  32. package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +67 -0
  33. package/dynamic-form/dynamic-form/configurations/structure/section.d.ts +8 -0
  34. package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +19 -0
  35. package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +21 -1
  36. package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +45 -0
  37. package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +59 -0
  38. package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +55 -0
  39. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +35 -0
  40. package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +17 -0
  41. package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +23 -0
  42. package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +66 -0
  43. package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +15 -0
  44. package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +30 -0
  45. package/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.d.ts +47 -2
  46. package/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.d.ts +26 -0
  47. package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +18 -1
  48. package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +44 -0
  49. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +112 -4
  50. package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +42 -3
  51. package/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.d.ts +48 -0
  52. package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +62 -0
  53. package/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.d.ts +34 -0
  54. package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +63 -0
  55. package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +47 -1
  56. package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +23 -0
  57. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +37 -1
  58. package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +65 -2
  59. package/dynamic-form/public-api.d.ts +1 -0
  60. package/editable-overlay/lib/editable-overlay/editable-overlay.directive.d.ts +16 -0
  61. package/empty-state/lib/empty-state/empty-state.component.d.ts +59 -0
  62. package/esm2022/accordion/lib/accordion/accordion.component.mjs +26 -1
  63. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +61 -1
  64. package/esm2022/alert/lib/alert/alert.component.mjs +41 -1
  65. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +52 -1
  66. package/esm2022/badge/lib/badge/badge.component.mjs +21 -1
  67. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +47 -2
  68. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +13 -1
  69. package/esm2022/button/lib/button/button.component.mjs +102 -1
  70. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +72 -47
  71. package/esm2022/card/lib/card/card.component.mjs +21 -6
  72. package/esm2022/chat/lib/chat/chat.component.mjs +23 -5
  73. package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +20 -4
  74. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +24 -4
  75. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +22 -2
  76. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +17 -2
  77. package/esm2022/chips/lib/chips/chips/chips.component.mjs +42 -1
  78. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +41 -1
  79. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +19 -1
  80. package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +6 -1
  81. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +20 -1
  82. package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +31 -1
  83. package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +37 -1
  84. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +37 -1
  85. package/esm2022/currency/lib/currency.service.mjs +21 -8
  86. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +32 -1
  87. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +66 -11
  88. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -10
  89. package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +3 -3
  90. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
  91. package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +2 -0
  92. package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +1 -1
  93. package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +1 -1
  94. package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +1 -1
  95. package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +1 -1
  96. package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +22 -2
  97. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +1 -1
  98. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +1 -1
  99. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +1 -1
  100. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +1 -1
  101. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +1 -1
  102. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +1 -1
  103. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
  104. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +1 -1
  105. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +1 -1
  106. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.mjs +1 -1
  107. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +1 -1
  108. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
  109. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -2
  110. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  111. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
  112. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +1 -1
  113. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +1 -1
  114. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +6 -1
  115. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +1 -1
  116. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +1 -1
  117. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +1 -1
  118. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +1 -1
  119. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
  120. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +3 -3
  121. package/esm2022/dynamic-form/public-api.mjs +2 -2
  122. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +17 -1
  123. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +60 -1
  124. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +25 -5
  125. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +48 -1
  126. package/esm2022/gantt/lib/gantt/gantt.component.mjs +32 -1
  127. package/esm2022/global-search/lib/global-search/global-search.component.mjs +30 -1
  128. package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +40 -1
  129. package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +83 -27
  130. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +40 -3
  131. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +18 -2
  132. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +33 -4
  133. package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +16 -1
  134. package/esm2022/insights/lib/insights/insights.component.mjs +23 -1
  135. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +21 -1
  136. package/esm2022/kanban/lib/kanban/kanban.component.mjs +34 -16
  137. package/esm2022/label-value/lib/label-value/label-value.component.mjs +14 -1
  138. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +37 -1
  139. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +24 -1
  140. package/esm2022/locale/lib/locale/locale.service.mjs +8 -1
  141. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +17 -1
  142. package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +13 -1
  143. package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +16 -3
  144. package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +24 -10
  145. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +20 -1
  146. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +32 -12
  147. package/esm2022/numeric/lib/numeric.pipe.mjs +16 -1
  148. package/esm2022/numeric/lib/numeric.service.mjs +21 -1
  149. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +9 -6
  150. package/esm2022/object-card/lib/object-card/object-card.component.mjs +24 -1
  151. package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
  152. package/esm2022/paginator/lib/paginator/paginator.component.mjs +20 -1
  153. package/esm2022/panel/lib/panel/panel.component.mjs +44 -23
  154. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +25 -1
  155. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +54 -1
  156. package/esm2022/picklist/lib/picklist/picklist.component.mjs +33 -2
  157. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +29 -34
  158. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +86 -2
  159. package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +53 -3
  160. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +28 -1
  161. package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +27 -1
  162. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +39 -7
  163. package/esm2022/select/lib/select/select.component.mjs +35 -1
  164. package/esm2022/select-button/lib/select-button/select-button.component.mjs +35 -1
  165. package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +11 -3
  166. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +54 -1
  167. package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +76 -36
  168. package/esm2022/slider/lib/slider/slider.component.mjs +90 -9
  169. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +25 -4
  170. package/esm2022/split-button/lib/split-button/split-button.component.mjs +24 -2
  171. package/esm2022/star-rating/star-rating/star-rating.component.mjs +17 -1
  172. package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +32 -10
  173. package/esm2022/stepper/lib/stepper/stepper.component.mjs +20 -1
  174. package/esm2022/structure/lib/structure/footer.component.mjs +11 -1
  175. package/esm2022/switch/lib/switch/switch.component.mjs +22 -2
  176. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +16 -1
  177. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +29 -3
  178. package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +33 -2
  179. package/esm2022/tabs/lib/tabs/tabs.component.mjs +35 -3
  180. package/esm2022/template/lib/template/template.directive.mjs +14 -2
  181. package/esm2022/text-area/lib/text-area/text-area.component.mjs +28 -1
  182. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +25 -1
  183. package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +28 -3
  184. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +30 -1
  185. package/esm2022/tile/lib/tile/tile.component.mjs +26 -1
  186. package/esm2022/timeline/lib/timeline/timeline.component.mjs +26 -3
  187. package/esm2022/toast/lib/toast/toast.component.mjs +24 -4
  188. package/esm2022/token-list/lib/token-list/token-list.component.mjs +22 -1
  189. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +66 -1
  190. package/esm2022/topbar/lib/topbar/topbar.component.mjs +18 -1
  191. package/esm2022/tree/lib/tree/tree.component.mjs +28 -1
  192. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +47 -1
  193. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +85 -0
  194. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  195. package/fesm2022/seniorsistemas-angular-components-alert.mjs +40 -0
  196. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  197. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +51 -0
  198. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  199. package/fesm2022/seniorsistemas-angular-components-badge.mjs +20 -0
  200. package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
  201. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +46 -1
  202. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  203. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +12 -0
  204. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  205. package/fesm2022/seniorsistemas-angular-components-button.mjs +101 -0
  206. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  207. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +71 -46
  208. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
  209. package/fesm2022/seniorsistemas-angular-components-card.mjs +19 -4
  210. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  211. package/fesm2022/seniorsistemas-angular-components-chat.mjs +39 -5
  212. package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
  213. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +21 -1
  214. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  215. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +23 -3
  216. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  217. package/fesm2022/seniorsistemas-angular-components-chips.mjs +57 -1
  218. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  219. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +40 -0
  220. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  221. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +18 -0
  222. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  223. package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -0
  224. package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
  225. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +19 -0
  226. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
  227. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +30 -0
  228. package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
  229. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +36 -0
  230. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
  231. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +36 -0
  232. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  233. package/fesm2022/seniorsistemas-angular-components-currency.mjs +19 -6
  234. package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
  235. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +31 -0
  236. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
  237. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +74 -16
  238. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  239. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +29 -4
  240. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  241. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +16 -0
  242. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
  243. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +59 -0
  244. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
  245. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +21 -1
  246. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  247. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +47 -0
  248. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  249. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +31 -0
  250. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  251. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +29 -0
  252. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  253. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +39 -0
  254. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  255. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +80 -24
  256. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
  257. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +38 -1
  258. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
  259. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +17 -1
  260. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
  261. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +30 -1
  262. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  263. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +15 -0
  264. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  265. package/fesm2022/seniorsistemas-angular-components-insights.mjs +22 -0
  266. package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
  267. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +20 -0
  268. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  269. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +28 -10
  270. package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
  271. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +13 -0
  272. package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
  273. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +59 -0
  274. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
  275. package/fesm2022/seniorsistemas-angular-components-locale.mjs +7 -0
  276. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  277. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +16 -0
  278. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
  279. package/fesm2022/seniorsistemas-angular-components-mask.mjs +12 -0
  280. package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
  281. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +35 -8
  282. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
  283. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +19 -0
  284. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  285. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +31 -11
  286. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  287. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +8 -5
  288. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  289. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +35 -0
  290. package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
  291. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +23 -0
  292. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  293. package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
  294. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +19 -0
  295. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  296. package/fesm2022/seniorsistemas-angular-components-panel.mjs +39 -18
  297. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  298. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +77 -0
  299. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
  300. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +32 -1
  301. package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
  302. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +28 -33
  303. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  304. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +85 -1
  305. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
  306. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +52 -2
  307. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
  308. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +53 -0
  309. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
  310. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +36 -4
  311. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  312. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +34 -0
  313. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  314. package/fesm2022/seniorsistemas-angular-components-select.mjs +34 -0
  315. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  316. package/fesm2022/seniorsistemas-angular-components-shared.mjs +9 -1
  317. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  318. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +53 -0
  319. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  320. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +71 -31
  321. package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
  322. package/fesm2022/seniorsistemas-angular-components-slider.mjs +89 -8
  323. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  324. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +24 -3
  325. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
  326. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +22 -0
  327. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  328. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +16 -0
  329. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  330. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +30 -8
  331. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  332. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +19 -0
  333. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  334. package/fesm2022/seniorsistemas-angular-components-structure.mjs +10 -0
  335. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  336. package/fesm2022/seniorsistemas-angular-components-switch.mjs +20 -0
  337. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  338. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +28 -2
  339. package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
  340. package/fesm2022/seniorsistemas-angular-components-table.mjs +15 -0
  341. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  342. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +65 -2
  343. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  344. package/fesm2022/seniorsistemas-angular-components-template.mjs +13 -1
  345. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  346. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +27 -0
  347. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  348. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +24 -0
  349. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  350. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +26 -1
  351. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  352. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +29 -0
  353. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  354. package/fesm2022/seniorsistemas-angular-components-tile.mjs +25 -0
  355. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  356. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +25 -2
  357. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  358. package/fesm2022/seniorsistemas-angular-components-toast.mjs +22 -2
  359. package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
  360. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +21 -0
  361. package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
  362. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +65 -0
  363. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  364. package/fesm2022/seniorsistemas-angular-components-topbar.mjs +17 -0
  365. package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
  366. package/fesm2022/seniorsistemas-angular-components-tree.mjs +27 -0
  367. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  368. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +46 -0
  369. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  370. package/fieldset/lib/fieldset/fieldset.component.d.ts +23 -3
  371. package/file-picker/lib/file-picker/file-picker.component.d.ts +47 -0
  372. package/gantt/lib/gantt/gantt.component.d.ts +31 -0
  373. package/global-search/lib/global-search/global-search.component.d.ts +29 -0
  374. package/grid-menu/lib/grid-menu/grid-menu.component.d.ts +39 -0
  375. package/help-popover/lib/help-popover/help-popover.directive.d.ts +67 -17
  376. package/image-cropper/lib/image-cropper/image-cropper.component.d.ts +38 -0
  377. package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +15 -0
  378. package/info-sign/lib/info-sign/info-sign.directive.d.ts +30 -1
  379. package/inline-edit/lib/inline-edit/inline-edit.component.d.ts +15 -0
  380. package/insights/lib/insights/insights.component.d.ts +22 -0
  381. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +20 -0
  382. package/kanban/lib/kanban/kanban.component.d.ts +25 -5
  383. package/label-value/lib/label-value/label-value.component.d.ts +13 -0
  384. package/loading-state/lib/loading-state/loading-state.component.d.ts +36 -0
  385. package/loading-state/lib/loading-state/loading-state.directive.d.ts +23 -0
  386. package/locale/lib/locale/locale.service.d.ts +7 -0
  387. package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +16 -0
  388. package/mask/lib/mask/mask-formatter.pipe.d.ts +12 -0
  389. package/mouse-events/lib/mouse-events/double-click.directive.d.ts +13 -0
  390. package/mouse-events/lib/mouse-events/long-press.directive.d.ts +16 -2
  391. package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +19 -0
  392. package/number-input/lib/number-input/number-input.directive.d.ts +19 -1
  393. package/numeric/lib/numeric.pipe.d.ts +15 -0
  394. package/numeric/lib/numeric.service.d.ts +20 -0
  395. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +5 -4
  396. package/object-card/lib/object-card/object-card.component.d.ts +23 -0
  397. package/optional-fields/editor/editor-field.d.ts +19 -0
  398. package/package.json +12 -12
  399. package/paginator/lib/paginator/paginator.component.d.ts +19 -0
  400. package/panel/lib/panel/panel.component.d.ts +24 -3
  401. package/password-strength/lib/password-strength/password-strength.component.d.ts +24 -0
  402. package/password-strength/lib/password-strength/password-strength.directive.d.ts +53 -0
  403. package/picklist/lib/picklist/picklist.component.d.ts +29 -0
  404. package/pin-code-field/lib/pin-code-field/pin-code-field.component.d.ts +28 -33
  405. package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +85 -1
  406. package/progressbar/lib/progressbar/progressbar.component.d.ts +50 -0
  407. package/radio-button/lib/radio-button/radio-button.component.d.ts +27 -0
  408. package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +26 -0
  409. package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +30 -2
  410. package/select/lib/select/select.component.d.ts +34 -0
  411. package/select-button/lib/select-button/select-button.component.d.ts +34 -0
  412. package/shared/lib/shared/border-button/border-button.component.d.ts +10 -2
  413. package/sidebar/lib/sidebar/sidebar.component.d.ts +53 -0
  414. package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +53 -2
  415. package/slider/lib/slider/slider.component.d.ts +72 -0
  416. package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +18 -0
  417. package/split-button/lib/split-button/split-button.component.d.ts +22 -0
  418. package/star-rating/star-rating/star-rating.component.d.ts +16 -0
  419. package/stats-card/lib/stats-card/stats-card.component.d.ts +28 -0
  420. package/stepper/lib/stepper/stepper.component.d.ts +19 -0
  421. package/structure/lib/structure/footer.component.d.ts +10 -0
  422. package/switch/lib/switch/switch.component.d.ts +20 -0
  423. package/table/lib/table/table-column/table-columns.component.d.ts +15 -0
  424. package/table-header/lib/table-header/table-header-checkbox.component.d.ts +18 -0
  425. package/tabs/lib/tab-item/tab-item.component.d.ts +31 -0
  426. package/tabs/lib/tabs/tabs.component.d.ts +28 -0
  427. package/template/lib/template/template.directive.d.ts +12 -0
  428. package/text-area/lib/text-area/text-area.component.d.ts +27 -0
  429. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +24 -0
  430. package/thumbnails/lib/thumbnails/thumbnails.component.d.ts +27 -2
  431. package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +29 -0
  432. package/tile/lib/tile/tile.component.d.ts +25 -0
  433. package/timeline/lib/timeline/timeline.component.d.ts +24 -0
  434. package/toast/lib/toast/toast.component.d.ts +22 -2
  435. package/token-list/lib/token-list/token-list.component.d.ts +21 -0
  436. package/tooltip/lib/tooltip/tooltip.directive.d.ts +65 -0
  437. package/topbar/lib/topbar/topbar.component.d.ts +17 -0
  438. package/tree/lib/tree/tree.component.d.ts +27 -0
  439. package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +46 -0
@@ -6,19 +6,18 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "@angular/common";
7
7
  import * as i2 from "@ngx-translate/core";
8
8
  /**
9
- * Pin Code Field Component
9
+ * @description Componente de entrada de código PIN/OTP com campos individuais para cada dígito.
10
+ * Implementa {@link ControlValueAccessor} para integração nativa com Reactive Forms
11
+ * e Template-driven Forms do Angular.
10
12
  *
11
- * A flexible, accessible PIN code input component that implements {@link ControlValueAccessor}
12
- * for seamless integration with Angular Reactive Forms and Template-driven Forms.
13
- *
14
- * Features:
15
- * - Multiple input fields for PIN/OTP code entry
16
- * - Configurable code length and character validation
17
- * - Keyboard navigation (arrow keys, backspace)
18
- * - Paste support with automatic truncation
19
- * - Error state display via the `invalid` input
20
- * - Full accessibility support (ARIA labels, semantic roles)
21
- * - Signal-based state management
13
+ * Funcionalidades:
14
+ * - Campos separados e navegáveis para cada dígito do código
15
+ * - Comprimento configurável via input `length`
16
+ * - Suporte a entrada numérica ou alfanumérica
17
+ * - Navegação por teclado (setas, backspace)
18
+ * - Suporte a colar (paste) com truncamento automático ao tamanho definido
19
+ * - Estado de erro via input `invalid`
20
+ * - Acessibilidade completa com ARIA labels e roles semânticos
22
21
  *
23
22
  * @example
24
23
  * ```html
@@ -28,46 +27,42 @@ import * as i2 from "@ngx-translate/core";
28
27
  * [length]="6"
29
28
  * [alphanumeric]="false"
30
29
  * [invalid]="(form.get('code')?.invalid && form.get('code')?.dirty) || false"
31
- * helpText="Enter your 6-digit code"
30
+ * helpText="Digite seu código de 6 dígitos"
32
31
  * (codeFilled)="onCodeFilled($event)">
33
32
  * </s-pin-code-field>
34
33
  * </form>
35
34
  * ```
36
35
  *
37
- * @example
38
- * ```typescript
39
- * form = this.fb.group({
40
- * code: ['', [Validators.required]],
41
- * });
42
- * ```
36
+ * @category Inputs
43
37
  */
44
38
  export class PinCodeFieldComponent {
45
39
  static LAST_INDEX_OFFSET = 1;
46
40
  static EMPTY_VALUE = '';
47
41
  /**
48
- * Number of input fields (PIN code length).
49
- * Must be at least 1.
42
+ * @description Número de campos de entrada (comprimento do código PIN).
43
+ * Deve ser ao menos 1.
50
44
  *
51
45
  * @default 6
52
46
  */
53
47
  length = input(6);
54
48
  /**
55
- * Allows alphanumeric and special characters input.
56
- * When false, only numeric input (0-9) is accepted.
49
+ * @description Permite entrada alfanumérica e de caracteres especiais.
50
+ * Quando `false`, aceita apenas dígitos numéricos (09).
57
51
  *
58
52
  * @default false
59
53
  */
60
54
  alphanumeric = input(false);
61
55
  /**
62
- * Help text displayed below the input fields.
56
+ * @description Texto de ajuda exibido abaixo dos campos de entrada,
57
+ * fornecendo instruções adicionais ao usuário.
63
58
  *
64
59
  * @default ''
65
60
  */
66
61
  helpText = input('');
67
62
  /**
68
- * Controls the error state visualization of the component.
69
- * When true, displays red border on input fields.
70
- * Typically bound to FormControl's invalid and dirty state.
63
+ * @description Controla a visualização do estado de erro do componente.
64
+ * Quando `true`, exibe borda vermelha nos campos de entrada.
65
+ * Normalmente vinculado ao estado `invalid && dirty` do `FormControl`.
71
66
  *
72
67
  * @example
73
68
  * ```html
@@ -77,15 +72,15 @@ export class PinCodeFieldComponent {
77
72
  */
78
73
  invalid = input(false);
79
74
  /**
80
- * Two-way binding for the disabled state of the component.
81
- * Disables all input fields and prevents user interaction.
75
+ * @description Controla o estado desabilitado do componente via two-way binding.
76
+ * Quando `true`, todos os campos ficam desabilitados e a interação do usuário é bloqueada.
82
77
  *
83
78
  * @default false
84
79
  */
85
80
  disabled = model(false);
86
81
  /**
87
- * Emitted when all PIN code fields are filled.
88
- * Emits the complete PIN code as a string.
82
+ * @description Emitido quando todos os campos do código PIN são preenchidos.
83
+ * Emite o código completo como string.
89
84
  *
90
85
  * @example
91
86
  * ```html
@@ -94,8 +89,8 @@ export class PinCodeFieldComponent {
94
89
  */
95
90
  codeFilled = output();
96
91
  /**
97
- * Signal containing the current values of each input field.
98
- * Array length matches the `length` input value.
92
+ * @description Signal com os valores atuais de cada campo de entrada.
93
+ * O comprimento do array corresponde ao valor do input `length`.
99
94
  */
100
95
  inputs = signal([]);
101
96
  /**
@@ -456,4 +451,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
456
451
  },
457
452
  ], template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-all duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus:ring-criticality-red': hasError(),\n 'border-grayscale-30 focus:border-primary focus:ring-primary': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100 focus:outline-none': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"\n alphanumeric()\n ? ('platform.angular_components.pin_code_character_index_of_total'\n | translate: { index: i + 1, length: length() })\n : ('platform.angular_components.pin_code_digit_index_of_total'\n | translate: { index: i + 1, length: length() })\n \"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n" }]
458
453
  }], ctorParameters: () => [] });
459
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBRXREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQWNILE1BQU0sT0FBTyxxQkFBcUI7SUFDdEIsTUFBTSxDQUFVLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLENBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUV6Qzs7Ozs7T0FLRztJQUNJLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekI7Ozs7O09BS0c7SUFDSSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5DOzs7O09BSUc7SUFDSSxRQUFRLEdBQUcsS0FBSyxDQUFD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VUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIHZpZXdDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIHNpZ25hbCxcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgZWZmZWN0LFxuICAgIGNvbXB1dGVkLFxuICAgIG1vZGVsLFxuICAgIGluamVjdCxcbiAgICBEZXN0cm95UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuLyoqXG4gKiBQaW4gQ29kZSBGaWVsZCBDb21wb25lbnRcbiAqXG4gKiBBIGZsZXhpYmxlLCBhY2Nlc3NpYmxlIFBJTiBjb2RlIGlucHV0IGNvbXBvbmVudCB0aGF0IGltcGxlbWVudHMge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfVxuICogZm9yIHNlYW1sZXNzIGludGVncmF0aW9uIHdpdGggQW5ndWxhciBSZWFjdGl2ZSBGb3JtcyBhbmQgVGVtcGxhdGUtZHJpdmVuIEZvcm1zLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBNdWx0aXBsZSBpbnB1dCBmaWVsZHMgZm9yIFBJTi9PVFAgY29kZSBlbnRyeVxuICogLSBDb25maWd1cmFibGUgY29kZSBsZW5ndGggYW5kIGNoYXJhY3RlciB2YWxpZGF0aW9uXG4gKiAtIEtleWJvYXJkIG5hdmlnYXRpb24gKGFycm93IGtleXMsIGJhY2tzcGFjZSlcbiAqIC0gUGFzdGUgc3VwcG9ydCB3aXRoIGF1dG9tYXRpYyB0cnVuY2F0aW9uXG4gKiAtIEVycm9yIHN0YXRlIGRpc3BsYXkgdmlhIHRoZSBgaW52YWxpZGAgaW5wdXRcbiAqIC0gRnVsbCBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgKEFSSUEgbGFiZWxzLCBzZW1hbnRpYyByb2xlcylcbiAqIC0gU2lnbmFsLWJhc2VkIHN0YXRlIG1hbmFnZW1lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gKiAgIDxzLXBpbi1jb2RlLWZpZWxkXG4gKiAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29kZVwiXG4gKiAgICAgW2xlbmd0aF09XCI2XCJcbiAqICAgICBbYWxwaGFudW1lcmljXT1cImZhbHNlXCJcbiAqICAgICBbaW52YWxpZF09XCIoZm9ybS5nZXQoJ2NvZGUnKT8uaW52YWxpZCAmJiBmb3JtLmdldCgnY29kZScpPy5kaXJ0eSkgfHwgZmFsc2VcIlxuICogICAgIGhlbHBUZXh0PVwiRW50ZXIgeW91ciA2LWRpZ2l0IGNvZGVcIlxuICogICAgIChjb2RlRmlsbGVkKT1cIm9uQ29kZUZpbGxlZCgkZXZlbnQpXCI+XG4gKiAgIDwvcy1waW4tY29kZS1maWVsZD5cbiAqIDwvZm9ybT5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBmb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gKiAgIGNvZGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1waW4tY29kZS1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZV0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGluQ29kZUZpZWxkQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBpbkNvZGVGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMQVNUX0lOREVYX09GRlNFVCA9IDE7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU1QVFlfVkFMVUUgPSAnJztcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBpbnB1dCBmaWVsZHMgKFBJTiBjb2RlIGxlbmd0aCkuXG4gICAgICogTXVzdCBiZSBhdCBsZWFzdCAxLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGggPSBpbnB1dCg2KTtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyBhbHBoYW51bWVyaWMgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyBpbnB1dC5cbiAgICAgKiBXaGVuIGZhbHNlLCBvbmx5IG51bWVyaWMgaW5wdXQgKDAtOSkgaXMgYWNjZXB0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBhbHBoYW51bWVyaWMgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBIZWxwIHRleHQgZGlzcGxheWVkIGJlbG93IHRoZSBpbnB1dCBmaWVsZHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBoZWxwVGV4dCA9IGlucHV0KCcnKTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBlcnJvciBzdGF0ZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogV2hlbiB0cnVlLCBkaXNwbGF5cyByZWQgYm9yZGVyIG9uIGlucHV0IGZpZWxkcy5cbiAgICAgKiBUeXBpY2FsbHkgYm91bmQgdG8gRm9ybUNvbnRyb2wncyBpbnZhbGlkIGFuZCBkaXJ0eSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIFtpbnZhbGlkXT1cIihjb250cm9sPy5pbnZhbGlkICYmIGNvbnRyb2w/LmRpcnR5KSB8fCBmYWxzZVwiXG4gICAgICogYGBgXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaW52YWxpZCA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFR3by13YXkgYmluZGluZyBmb3IgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogRGlzYWJsZXMgYWxsIGlucHV0IGZpZWxkcyBhbmQgcHJldmVudHMgdXNlciBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGFsbCBQSU4gY29kZSBmaWVsZHMgYXJlIGZpbGxlZC5cbiAgICAgKiBFbWl0cyB0aGUgY29tcGxldGUgUElOIGNvZGUgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAoY29kZUZpbGxlZCk9XCJvbkNvZGVGaWxsZWQoJGV2ZW50KVwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvZGVGaWxsZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIGVhY2ggaW5wdXQgZmllbGQuXG4gICAgICogQXJyYXkgbGVuZ3RoIG1hdGNoZXMgdGhlIGBsZW5ndGhgIGlucHV0IHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnB1dHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIFNpZ25hbCB0cmFja2luZyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdG91Y2hlZCBieSB0aGUgdXNlci5cbiAgICAgKiBTZXQgdG8gdHJ1ZSB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzIChibHVyIGV2ZW50KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG91Y2hlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIGFsbCBQSU4gY29kZSBmaWVsZHMgYXJlIGZpbGxlZC5cbiAgICAgKiBUcnVlIG9ubHkgd2hlbiBldmVyeSBmaWVsZCBjb250YWlucyBhIG5vbi1lbXB0eSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb21wbGV0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXRzKCkuZXZlcnkoKGlucHV0KSA9PiBpbnB1dCAhPT0gJycpKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBjb250YWluaW5nIHRoZSBjb21wbGV0ZSBQSU4gY29kZSBhcyBhIGpvaW5lZCBzdHJpbmcuXG4gICAgICogUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgbm8gaW5wdXRzIGFyZSBmaWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIGN1cnJlbnRWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXRzKCkuam9pbignJykpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIGlmIHRoZSBjb21wb25lbnQgaG9zdCBoYXMgdGhlIG5nLWludmFsaWQgY2xhc3MgZnJvbSBGb3JtQ29udHJvbCB2YWxpZGF0b3JzLlxuICAgICAqIFVwZGF0ZWQgcmVhY3RpdmVseSB3aGVuZXZlciB0aGUgaW52YWxpZCBzdGF0ZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgaGFzTmdJbnZhbGlkQ2xhc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIGlmIHRoZSBGb3JtQ29udHJvbCBpcyBkaXJ0eS5cbiAgICAgKiBVcGRhdGVkIHJlYWN0aXZlbHkgd2hlbmV2ZXIgdGhlIGRpcnR5IHN0YXRlIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0NvbnRyb2xEaXJ0eSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBzaWduYWwgaW5kaWNhdGluZyBpZiB0aGUgY29tcG9uZW50IHNob3VsZCBzaG93IGVycm9yIHN0YXRlLlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZjpcbiAgICAgKiAtIFRoZSBgaW52YWxpZGAgaW5wdXQgaXMgdHJ1ZSwgT1JcbiAgICAgKiAtIFRoZSBjb21wb25lbnQgaGFzIHRoZSBgbmctaW52YWxpZGAgY2xhc3MgQU5EIHRoZSBGb3JtQ29udHJvbCBpcyBkaXJ0eSAodG91Y2hlZC9tb2RpZmllZClcbiAgICAgKiBUaGlzIGVuc3VyZXMgZXJyb3JzIGFyZSBvbmx5IHNob3duIHRvIHRoZSB1c2VyIGFmdGVyIHRoZXkndmUgaW50ZXJhY3RlZCB3aXRoIHRoZSBmaWVsZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzRXJyb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmludmFsaWQoKSB8fCAodGhpcy5oYXNOZ0ludmFsaWRDbGFzcygpICYmIHRoaXMuaXNDb250cm9sRGlydHkoKSkpO1xuXG4gICAgLyoqXG4gICAgICogVmlld0NoaWxkcmVuIHJlZmVyZW5jZSB0byBhbGwgaW5wdXQgRE9NIGVsZW1lbnRzLlxuICAgICAqIFVzZWQgZm9yIERPTSBtYW5pcHVsYXRpb24gKGZvY3VzLCBzZWxlY3Rpb24pLlxuICAgICAqL1xuICAgIHB1YmxpYyBwaW5JbnB1dHMgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ3BpbklucHV0Jyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdMZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUElOIGNvZGUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgMScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0cygpLmxlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiBuZXdMZW5ndGggfSwgKCkgPT4gJycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1vbml0b3IgbmctaW52YWxpZCBhbmQgbmctZGlydHkgY2xhc3NlcyBvbiB0aGUgaG9zdCBlbGVtZW50IGZvciByZWFjdGl2ZSBlcnJvciBzdGF0ZVxuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQWNjZXNzIGlucHV0cyB0byBjcmVhdGUgZGVwZW5kZW5jeSBvbiBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGRlZmVyIHRoZSBjaGVjayB0byBuZXh0IHRpY2sgdG8gZW5zdXJlIEFuZ3VsYXIgaGFzIHVwZGF0ZWQgRE9NIGNsYXNzZXNcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc05nSW52YWxpZCA9IGhvc3RFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0RpcnR5ID0gaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzTmdJbnZhbGlkQ2xhc3Muc2V0KGhhc05nSW52YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250cm9sRGlydHkuc2V0KGlzRGlydHkpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xlYW51cCB0aW1lb3V0IG9uIGNvbXBvbmVudCBkZXN0cm95XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGlucHV0IGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBWYWxpZGF0ZXMgY2hhcmFjdGVyIGlucHV0LCBwcmV2ZW50cyBtdWx0aXBsZSBjaGFyYWN0ZXJzIHBlciBmaWVsZCxcbiAgICAgKiBhdXRvLWFkdmFuY2VzIHRvIG5leHQgZmllbGQgd2hlbiBjaGFyYWN0ZXIgaXMgZW50ZXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgaW5wdXQgZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dChpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMSB8fCAodmFsdWUgJiYgIXRoaXMuaXNWYWxpZENoYXJhY3Rlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySW5wdXQodGFyZ2V0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4LCB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmIGluZGV4IDwgdGhpcy5sZW5ndGgoKSAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCArIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGVGaWxsZWQuZW1pdCh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBTdXBwb3J0cyBhcnJvdyBuYXZpZ2F0aW9uIChsZWZ0L3JpZ2h0KSBhbmQgYmFja3NwYWNlIGtleS5cbiAgICAgKlxuICAgICAqIEtleWJvYXJkIGJlaGF2aW9yOlxuICAgICAqIC0gQXJyb3dSaWdodDogTW92ZSBmb2N1cyB0byBuZXh0IGZpZWxkXG4gICAgICogLSBBcnJvd0xlZnQ6IE1vdmUgZm9jdXMgdG8gcHJldmlvdXMgZmllbGRcbiAgICAgKiAtIEJhY2tzcGFjZTogQ2xlYXIgY3VycmVudCBvciBwcmV2aW91cyBmaWVsZCBhbmQgYWRqdXN0IGZvY3VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGtleWJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihpbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmxlbmd0aCgpIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja3NwYWNlKGluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgcGFzdGUgKGNsaXBib2FyZCkgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBFeHRyYWN0cyB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gcGFzdGVkIGNvbnRlbnQsIGZpbHRlcnMgYnkgY2hhcmFjdGVyIHR5cGUsXG4gICAgICogYW5kIGF1dG9tYXRpY2FsbHkgdHJ1bmNhdGVzIHRvIG1hdGNoIGZpZWxkIGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEJlaGF2aW9yOlxuICAgICAqIC0gRmlsdGVycyBjaGFyYWN0ZXJzIGJhc2VkIG9uIGBhbHBoYW51bWVyaWNgIHNldHRpbmdcbiAgICAgKiAtIFRydW5jYXRlcyB0byBtYXhpbXVtIGZpZWxkIGNvdW50XG4gICAgICogLSBGaWxscyBhdmFpbGFibGUgZmllbGRzIHdpdGggcGFzdGVkIGNvbnRlbnRcbiAgICAgKiAtIEVtaXRzIGNvZGVGaWxsZWQgZXZlbnQgaWYgYWxsIGZpZWxkcyBhcmUgZmlsbGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2xpcGJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkQ2hhcnMgPSB0aGlzLmV4dHJhY3RWYWxpZENoYXJhY3RlcnNGcm9tUGFzdGUoZXZlbnQpO1xuXG4gICAgICAgIGlmICh2YWxpZENoYXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsbGVkSW5wdXRzID0gWy4uLnZhbGlkQ2hhcnMsIC4uLkFycmF5KHRoaXMubGVuZ3RoKCkgLSB2YWxpZENoYXJzLmxlbmd0aCkuZmlsbCgnJyldO1xuXG4gICAgICAgIHRoaXMuaW5wdXRzLnNldChmaWxsZWRJbnB1dHMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG5cbiAgICAgICAgLy8gRm9jdXMgb24gdGhlIGZpcnN0IGVtcHR5IGlucHV0IG9yIHRoZSBsYXN0IGZpbGxlZCBpbnB1dCBpZiBhbGwgYXJlIGZpbGxlZFxuICAgICAgICBjb25zdCBmaXJzdEVtcHR5SW5kZXggPSB2YWxpZENoYXJzLmxlbmd0aCA8IHRoaXMubGVuZ3RoKCkgPyB2YWxpZENoYXJzLmxlbmd0aCA6IHZhbGlkQ2hhcnMubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGZpcnN0RW1wdHlJbmRleCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGVGaWxsZWQuZW1pdCh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgZm9jdXMgZXZlbnQgb24gUElOIGNvZGUgZmllbGRzLlxuICAgICAqIFNlbGVjdHMgYWxsIHRleHQgaW4gdGhlIGlucHV0IGZpZWxkIHdoZW4gZm9jdXNlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Gb2N1cyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5waW5JbnB1dHMoKVtpbmRleF07XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYmx1ciBldmVudCBvbiBQSU4gY29kZSBmaWVsZHMuXG4gICAgICogTWFya3MgdGhlIGNvbXBvbmVudCBhcyB0b3VjaGVkIHdoZW4gdGhlIGxhc3QgaW5wdXQgZmllbGQgbG9zZXMgZm9jdXMuXG4gICAgICogQWxzbyBub3RpZmllcyB0aGUgcmVnaXN0ZXJlZCBvblRvdWNoZWQgY2FsbGJhY2sgZm9yIEZvcm1Db250cm9sIGludGVncmF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkJsdXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBPbmx5IG1hcmsgYXMgdG91Y2hlZCB3aGVuIHRoZSBMQVNUIGlucHV0IGxvc2VzIGZvY3VzXG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5sZW5ndGgoKSAtIFBpbkNvZGVGaWVsZENvbXBvbmVudC5MQVNUX0lOREVYX09GRlNFVCkge1xuICAgICAgICAgICAgdGhpcy50b3VjaGVkLnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGlucHV0IHZhbHVlIGF0IHNwZWNpZmllZCBpbmRleCBhbmQgYWRqdXN0cyBmb2N1cyBhY2NvcmRpbmdseS5cbiAgICAgKiBJZiBjdXJyZW50IGZpZWxkIGlzIGVtcHR5LCBtb3ZlcyB0byBwcmV2aW91cyBmaWVsZCBhbmQgY2xlYXJzIGl0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVCYWNrc3BhY2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcblxuICAgICAgICAvLyBJZiBjdXJyZW50IGlucHV0IGhhcyB2YWx1ZSwgY2xlYXIgaXRcbiAgICAgICAgaWYgKGN1cnJlbnRJbnB1dHNbaW5kZXhdKSB7XG4gICAgICAgICAgICB0aGlzLnNldElucHV0QXRJbmRleChpbmRleCwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgY2xlYXIgcHJldmlvdXMgaW5wdXQgYW5kIGZvY3VzIGl0XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4IC0gMSwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgYXQgYSBzcGVjaWZpYyBpbnB1dCBmaWVsZCBpbmRleCBhbmQgdXBkYXRlcyB0aGUgZm9ybSB2YWx1ZS5cbiAgICAgKiBVcGRhdGVzIHRoZSBzaWduYWwgYW5kIHRyaWdnZXJzIHRoZSBjaGFuZ2UgZGV0ZWN0aW9uIHZpYSBvbkNoYW5nZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQgaW4gdGhlIGZpZWxkXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRJbnB1dEF0SW5kZXgoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcbiAgICAgICAgY3VycmVudElucHV0c1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbnB1dHMuc2V0KFsuLi5jdXJyZW50SW5wdXRzXSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIG9uIGFuZCBzZWxlY3RzIHRleHQgaW4gdGhlIGlucHV0IGZpZWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXG4gICAgICogVXNlcyBxdWV1ZU1pY3JvdGFzayB0byBlbnN1cmUgRE9NIGlzIHVwZGF0ZWQgYmVmb3JlIGZvY3VzaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb2N1c0FuZFNlbGVjdElucHV0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnBpbklucHV0cygpW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIHZhbHVlIG9mIGFuIGlucHV0IGVsZW1lbnQuXG4gICAgICogVXNlZCBmb3IgaW5wdXQgdmFsaWRhdGlvbiB0byByZWplY3QgaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIEhUTUwgaW5wdXQgZWxlbWVudCB0byBjbGVhclxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYXJJbnB1dCh0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgdmFsaWQgY2hhcmFjdGVycyBmcm9tIHBhc3RlZCBjb250ZW50LlxuICAgICAqIEZpbHRlcnMgYmFzZWQgb24gYWxwaGFudW1lcmljIHNldHRpbmcgYW5kIGxpbWl0cyB0byBjb21wb25lbnQncyBsZW5ndGguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBjbGlwYm9hcmQgZXZlbnRcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHBhc3RlZCBjb250ZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBleHRyYWN0VmFsaWRDaGFyYWN0ZXJzRnJvbVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHBhc3RlZFRleHRcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5maWx0ZXIoKGNoYXIpID0+IHRoaXMuaXNWYWxpZENoYXJhY3RlcihjaGFyKSlcbiAgICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmxlbmd0aCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgaWYgYSBjaGFyYWN0ZXIgaXMgYWNjZXB0YWJsZSBiYXNlZCBvbiBjb21wb25lbnQgY29uZmlndXJhdGlvbi5cbiAgICAgKiBGb3IgbnVtZXJpYyBtb2RlLCBhY2NlcHRzIG9ubHkgZGlnaXRzIDAtOS5cbiAgICAgKiBGb3IgYWxwaGFudW1lcmljIG1vZGUsIGFjY2VwdHMgYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIGNoYXIgLSBUaGUgY2hhcmFjdGVyIHRvIHZhbGlkYXRlXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBjaGFyYWN0ZXIgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHByaXZhdGUgaXNWYWxpZENoYXJhY3RlcihjaGFyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuYWxwaGFudW1lcmljKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFyLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAvXlswLTldJC8udGVzdChjaGFyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBmb3JtIHZhbHVlIGJ5IGNhbGxpbmcgdGhlIG9uQ2hhbmdlIGNhbGxiYWNrIHJlZ2lzdGVyZWQgYnkgRm9ybUNvbnRyb2wuXG4gICAgICogVGhpcyBlbnN1cmVzIHRoZSByZWFjdGl2ZSBmb3JtIHN0YXlzIHN5bmNocm9uaXplZCB3aXRoIGNvbXBvbmVudCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHRvIHdyaXRlIGEgdmFsdWUgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKiBPbmx5IGFjY2VwdHMgc3RyaW5nIHZhbHVlcyB3aXRoIGxlbmd0aCBtYXRjaGluZyB0aGUgY29tcG9uZW50J3MgbGVuZ3RoIHNldHRpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUgKHR5cGljYWxseSBmcm9tIHRoZSBGb3JtQ29udHJvbClcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLmxlbmd0aCA9PT0gdGhpcy5sZW5ndGgoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNldChzdHJpbmdWYWx1ZS5zcGxpdCgnJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB3aGVuIHZhbHVlIGNoYW5nZXMuXG4gICAgICogUmVnaXN0ZXJzIHRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBjb21wb25lbnQgdmFsdWUgY2hhbmdlc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB0byByZWdpc3RlciB0aGUgdG91Y2hlZCBjYWxsYmFjay5cbiAgICAgKiBUaGUgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gY29tcG9uZW50IGlzIHRvdWNoZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHRvIHNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBVcGRhdGVzIHRoZSBkaXNhYmxlZCBtb2RlbCB0byByZWZsZWN0IHRoZSBmb3JtJ3MgZGlzYWJsZWQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZCAtIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzYWJsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImdhcC14c21hbGwgZmxleCBmbGV4LWNvbFwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGdhcC0yXCJcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlBJTiBjb2RlIGlucHV0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImhlbHBUZXh0KCkgPyAncGluLWhlbHAtdGV4dCcgOiBudWxsXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGlucHV0IG9mIGlucHV0cygpOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI3BpbklucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMiB3LTEyIHJvdW5kZWQteGJpZyBib3JkZXIgdGV4dC1jZW50ZXIgdGV4dC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1jcml0aWNhbGl0eS1yZWQgZm9jdXM6cmluZy1jcml0aWNhbGl0eS1yZWQnOiBoYXNFcnJvcigpLFxuICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWdyYXlzY2FsZS0zMCBmb2N1czpib3JkZXItcHJpbWFyeSBmb2N1czpyaW5nLXByaW1hcnknOiAhaGFzRXJyb3IoKSxcbiAgICAgICAgICAgICAgICAgICAgJ2N1cnNvci1ub3QtYWxsb3dlZCBiZy1ncmF5c2NhbGUtMTAgdGV4dC1ncmF5c2NhbGUtNjAnOiBkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgICAgICAnYmctZ3JheXNjYWxlLTAgdGV4dC1ncmF5c2NhbGUtMTAwIGZvY3VzOm91dGxpbmUtbm9uZSc6ICFkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpbnB1dFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLm1heGxlbmd0aF09XCIxXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pbnB1dG1vZGVdPVwiYWxwaGFudW1lcmljKCkgPyAndGV4dCcgOiAnbnVtZXJpYydcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFscGhhbnVtZXJpYygpXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpbl9jb2RlX2NoYXJhY3Rlcl9pbmRleF9vZl90b3RhbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgaW5kZXg6IGkgKyAxLCBsZW5ndGg6IGxlbmd0aCgpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpbl9jb2RlX2RpZ2l0X2luZGV4X29mX3RvdGFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBpbmRleDogaSArIDEsIGxlbmd0aDogbGVuZ3RoKCkgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQoKSA/ICdwaW4taGVscC10ZXh0JyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dChpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoaSlcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cihpKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGhlbHBUZXh0KCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9XCJwaW4taGVscC10ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXQtc21hbGwgdGV4dC1zbSB0ZXh0LWdyYXlzY2FsZS02MFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGhlbHBUZXh0KCkgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG5cbiJdfQ==
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBRXREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQWNILE1BQU0sT0FBTyxxQkFBcUI7SUFDdEIsTUFBTSxDQUFVLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLENBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUV6Qzs7Ozs7T0FLRztJQUNJLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekI7Ozs7O09BS0c7SUFDSSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5DOzs7OztPQUtHO0lBQ0ksUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFF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Q0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgZm9yd2FyZFJlZixcbiAgICB2aWV3Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBzaWduYWwsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIGVmZmVjdCxcbiAgICBjb21wdXRlZCxcbiAgICBtb2RlbCxcbiAgICBpbmplY3QsXG4gICAgRGVzdHJveVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgZW50cmFkYSBkZSBjw7NkaWdvIFBJTi9PVFAgY29tIGNhbXBvcyBpbmRpdmlkdWFpcyBwYXJhIGNhZGEgZMOtZ2l0by5cbiAqIEltcGxlbWVudGEge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBwYXJhIGludGVncmHDp8OjbyBuYXRpdmEgY29tIFJlYWN0aXZlIEZvcm1zXG4gKiBlIFRlbXBsYXRlLWRyaXZlbiBGb3JtcyBkbyBBbmd1bGFyLlxuICpcbiAqIEZ1bmNpb25hbGlkYWRlczpcbiAqIC0gQ2FtcG9zIHNlcGFyYWRvcyBlIG5hdmVnw6F2ZWlzIHBhcmEgY2FkYSBkw61naXRvIGRvIGPDs2RpZ29cbiAqIC0gQ29tcHJpbWVudG8gY29uZmlndXLDoXZlbCB2aWEgaW5wdXQgYGxlbmd0aGBcbiAqIC0gU3Vwb3J0ZSBhIGVudHJhZGEgbnVtw6lyaWNhIG91IGFsZmFudW3DqXJpY2FcbiAqIC0gTmF2ZWdhw6fDo28gcG9yIHRlY2xhZG8gKHNldGFzLCBiYWNrc3BhY2UpXG4gKiAtIFN1cG9ydGUgYSBjb2xhciAocGFzdGUpIGNvbSB0cnVuY2FtZW50byBhdXRvbcOhdGljbyBhbyB0YW1hbmhvIGRlZmluaWRvXG4gKiAtIEVzdGFkbyBkZSBlcnJvIHZpYSBpbnB1dCBgaW52YWxpZGBcbiAqIC0gQWNlc3NpYmlsaWRhZGUgY29tcGxldGEgY29tIEFSSUEgbGFiZWxzIGUgcm9sZXMgc2Vtw6JudGljb3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gKiAgIDxzLXBpbi1jb2RlLWZpZWxkXG4gKiAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29kZVwiXG4gKiAgICAgW2xlbmd0aF09XCI2XCJcbiAqICAgICBbYWxwaGFudW1lcmljXT1cImZhbHNlXCJcbiAqICAgICBbaW52YWxpZF09XCIoZm9ybS5nZXQoJ2NvZGUnKT8uaW52YWxpZCAmJiBmb3JtLmdldCgnY29kZScpPy5kaXJ0eSkgfHwgZmFsc2VcIlxuICogICAgIGhlbHBUZXh0PVwiRGlnaXRlIHNldSBjw7NkaWdvIGRlIDYgZMOtZ2l0b3NcIlxuICogICAgIChjb2RlRmlsbGVkKT1cIm9uQ29kZUZpbGxlZCgkZXZlbnQpXCI+XG4gKiAgIDwvcy1waW4tY29kZS1maWVsZD5cbiAqIDwvZm9ybT5cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBJbnB1dHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLXBpbi1jb2RlLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQaW5Db2RlRmllbGRDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGluQ29kZUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExBU1RfSU5ERVhfT0ZGU0VUID0gMTtcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFTVBUWV9WQUxVRSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE7Dum1lcm8gZGUgY2FtcG9zIGRlIGVudHJhZGEgKGNvbXByaW1lbnRvIGRvIGPDs2RpZ28gUElOKS5cbiAgICAgKiBEZXZlIHNlciBhbyBtZW5vcyAxLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGggPSBpbnB1dCg2KTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIGVudHJhZGEgYWxmYW51bcOpcmljYSBlIGRlIGNhcmFjdGVyZXMgZXNwZWNpYWlzLlxuICAgICAqIFF1YW5kbyBgZmFsc2VgLCBhY2VpdGEgYXBlbmFzIGTDrWdpdG9zIG51bcOpcmljb3MgKDDigJM5KS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGFscGhhbnVtZXJpYyA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0byBkZSBhanVkYSBleGliaWRvIGFiYWl4byBkb3MgY2FtcG9zIGRlIGVudHJhZGEsXG4gICAgICogZm9ybmVjZW5kbyBpbnN0cnXDp8O1ZXMgYWRpY2lvbmFpcyBhbyB1c3XDoXJpby5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIGhlbHBUZXh0ID0gaW5wdXQoJycpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGEgdmlzdWFsaXphw6fDo28gZG8gZXN0YWRvIGRlIGVycm8gZG8gY29tcG9uZW50ZS5cbiAgICAgKiBRdWFuZG8gYHRydWVgLCBleGliZSBib3JkYSB2ZXJtZWxoYSBub3MgY2FtcG9zIGRlIGVudHJhZGEuXG4gICAgICogTm9ybWFsbWVudGUgdmluY3VsYWRvIGFvIGVzdGFkbyBgaW52YWxpZCAmJiBkaXJ0eWAgZG8gYEZvcm1Db250cm9sYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIFtpbnZhbGlkXT1cIihjb250cm9sPy5pbnZhbGlkICYmIGNvbnRyb2w/LmRpcnR5KSB8fCBmYWxzZVwiXG4gICAgICogYGBgXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaW52YWxpZCA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250cm9sYSBvIGVzdGFkbyBkZXNhYmlsaXRhZG8gZG8gY29tcG9uZW50ZSB2aWEgdHdvLXdheSBiaW5kaW5nLlxuICAgICAqIFF1YW5kbyBgdHJ1ZWAsIHRvZG9zIG9zIGNhbXBvcyBmaWNhbSBkZXNhYmlsaXRhZG9zIGUgYSBpbnRlcmHDp8OjbyBkbyB1c3XDoXJpbyDDqSBibG9xdWVhZGEuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBkaXNhYmxlZCA9IG1vZGVsKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyB0b2RvcyBvcyBjYW1wb3MgZG8gY8OzZGlnbyBQSU4gc8OjbyBwcmVlbmNoaWRvcy5cbiAgICAgKiBFbWl0ZSBvIGPDs2RpZ28gY29tcGxldG8gY29tbyBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAoY29kZUZpbGxlZCk9XCJvbkNvZGVGaWxsZWQoJGV2ZW50KVwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvZGVGaWxsZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ25hbCBjb20gb3MgdmFsb3JlcyBhdHVhaXMgZGUgY2FkYSBjYW1wbyBkZSBlbnRyYWRhLlxuICAgICAqIE8gY29tcHJpbWVudG8gZG8gYXJyYXkgY29ycmVzcG9uZGUgYW8gdmFsb3IgZG8gaW5wdXQgYGxlbmd0aGAuXG4gICAgICovXG4gICAgcHVibGljIGlucHV0cyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkIGJ5IHRoZSB1c2VyLlxuICAgICAqIFNldCB0byB0cnVlIHdoZW4gdGhlIGxhc3QgaW5wdXQgZmllbGQgbG9zZXMgZm9jdXMgKGJsdXIgZXZlbnQpLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b3VjaGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgYWxsIFBJTiBjb2RlIGZpZWxkcyBhcmUgZmlsbGVkLlxuICAgICAqIFRydWUgb25seSB3aGVuIGV2ZXJ5IGZpZWxkIGNvbnRhaW5zIGEgbm9uLWVtcHR5IHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0NvbXBsZXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnB1dHMoKS5ldmVyeSgoaW5wdXQpID0+IGlucHV0ICE9PSAnJykpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZWQgc2lnbmFsIGNvbnRhaW5pbmcgdGhlIGNvbXBsZXRlIFBJTiBjb2RlIGFzIGEgam9pbmVkIHN0cmluZy5cbiAgICAgKiBSZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBubyBpbnB1dHMgYXJlIGZpbGxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3VycmVudFZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnB1dHMoKS5qb2luKCcnKSk7XG5cbiAgICAvKipcbiAgICAgKiBTaWduYWwgdHJhY2tpbmcgaWYgdGhlIGNvbXBvbmVudCBob3N0IGhhcyB0aGUgbmctaW52YWxpZCBjbGFzcyBmcm9tIEZvcm1Db250cm9sIHZhbGlkYXRvcnMuXG4gICAgICogVXBkYXRlZCByZWFjdGl2ZWx5IHdoZW5ldmVyIHRoZSBpbnZhbGlkIHN0YXRlIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYXNOZ0ludmFsaWRDbGFzcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaWduYWwgdHJhY2tpbmcgaWYgdGhlIEZvcm1Db250cm9sIGlzIGRpcnR5LlxuICAgICAqIFVwZGF0ZWQgcmVhY3RpdmVseSB3aGVuZXZlciB0aGUgZGlydHkgc3RhdGUgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzQ29udHJvbERpcnR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBpbmRpY2F0aW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHNob3cgZXJyb3Igc3RhdGUuXG4gICAgICogUmV0dXJucyB0cnVlIGlmOlxuICAgICAqIC0gVGhlIGBpbnZhbGlkYCBpbnB1dCBpcyB0cnVlLCBPUlxuICAgICAqIC0gVGhlIGNvbXBvbmVudCBoYXMgdGhlIGBuZy1pbnZhbGlkYCBjbGFzcyBBTkQgdGhlIEZvcm1Db250cm9sIGlzIGRpcnR5ICh0b3VjaGVkL21vZGlmaWVkKVxuICAgICAqIFRoaXMgZW5zdXJlcyBlcnJvcnMgYXJlIG9ubHkgc2hvd24gdG8gdGhlIHVzZXIgYWZ0ZXIgdGhleSd2ZSBpbnRlcmFjdGVkIHdpdGggdGhlIGZpZWxkLlxuICAgICAqL1xuICAgIHB1YmxpYyBoYXNFcnJvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW52YWxpZCgpIHx8ICh0aGlzLmhhc05nSW52YWxpZENsYXNzKCkgJiYgdGhpcy5pc0NvbnRyb2xEaXJ0eSgpKSk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3Q2hpbGRyZW4gcmVmZXJlbmNlIHRvIGFsbCBpbnB1dCBET00gZWxlbWVudHMuXG4gICAgICogVXNlZCBmb3IgRE9NIG1hbmlwdWxhdGlvbiAoZm9jdXMsIHNlbGVjdGlvbikuXG4gICAgICovXG4gICAgcHVibGljIHBpbklucHV0cyA9IHZpZXdDaGlsZHJlbjxFbGVtZW50UmVmPigncGluSW5wdXQnKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0xlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0xlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQSU4gY29kZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAxJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRzKCkubGVuZ3RoICE9PSBuZXdMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMuc2V0KEFycmF5LmZyb20oeyBsZW5ndGg6IG5ld0xlbmd0aCB9LCAoKSA9PiAnJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTW9uaXRvciBuZy1pbnZhbGlkIGFuZCBuZy1kaXJ0eSBjbGFzc2VzIG9uIHRoZSBob3N0IGVsZW1lbnQgZm9yIHJlYWN0aXZlIGVycm9yIHN0YXRlXG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBBY2Nlc3MgaW5wdXRzIHRvIGNyZWF0ZSBkZXBlbmRlbmN5IG9uIGNoYW5nZXNcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZGVmZXIgdGhlIGNoZWNrIHRvIG5leHQgdGljayB0byBlbnN1cmUgQW5ndWxhciBoYXMgdXBkYXRlZCBET00gY2xhc3Nlc1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzTmdJbnZhbGlkID0gaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRGlydHkgPSBob3N0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNOZ0ludmFsaWRDbGFzcy5zZXQoaGFzTmdJbnZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbnRyb2xEaXJ0eS5zZXQoaXNEaXJ0eSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBDbGVhbnVwIHRpbWVvdXQgb24gY29tcG9uZW50IGRlc3Ryb3lcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgaW5wdXQgZXZlbnQgb24gUElOIGNvZGUgZmllbGRzLlxuICAgICAqIFZhbGlkYXRlcyBjaGFyYWN0ZXIgaW5wdXQsIHByZXZlbnRzIG11bHRpcGxlIGNoYXJhY3RlcnMgcGVyIGZpZWxkLFxuICAgICAqIGF1dG8tYWR2YW5jZXMgdG8gbmV4dCBmaWVsZCB3aGVuIGNoYXJhY3RlciBpcyBlbnRlcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBpbnB1dCBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0KGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAxIHx8ICh2YWx1ZSAmJiAhdGhpcy5pc1ZhbGlkQ2hhcmFjdGVyKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCh0YXJnZXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRJbnB1dEF0SW5kZXgoaW5kZXgsIHZhbHVlKTtcblxuICAgICAgICBpZiAodmFsdWUgJiYgaW5kZXggPCB0aGlzLmxlbmd0aCgpIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4ICsgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZUZpbGxlZC5lbWl0KHRoaXMuY3VycmVudFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgb24gUElOIGNvZGUgZmllbGRzLlxuICAgICAqIFN1cHBvcnRzIGFycm93IG5hdmlnYXRpb24gKGxlZnQvcmlnaHQpIGFuZCBiYWNrc3BhY2Uga2V5LlxuICAgICAqXG4gICAgICogS2V5Ym9hcmQgYmVoYXZpb3I6XG4gICAgICogLSBBcnJvd1JpZ2h0OiBNb3ZlIGZvY3VzIHRvIG5leHQgZmllbGRcbiAgICAgKiAtIEFycm93TGVmdDogTW92ZSBmb2N1cyB0byBwcmV2aW91cyBmaWVsZFxuICAgICAqIC0gQmFja3NwYWNlOiBDbGVhciBjdXJyZW50IG9yIHByZXZpb3VzIGZpZWxkIGFuZCBhZGp1c3QgZm9jdXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUga2V5Ym9hcmQgZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25LZXlEb3duKGluZGV4OiBudW1iZXIsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG5cbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IHRoaXMubGVuZ3RoKCkgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoaW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCYWNrc3BhY2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBwYXN0ZSAoY2xpcGJvYXJkKSBldmVudHMgb24gUElOIGNvZGUgZmllbGRzLlxuICAgICAqIEV4dHJhY3RzIHZhbGlkIGNoYXJhY3RlcnMgZnJvbSBwYXN0ZWQgY29udGVudCwgZmlsdGVycyBieSBjaGFyYWN0ZXIgdHlwZSxcbiAgICAgKiBhbmQgYXV0b21hdGljYWxseSB0cnVuY2F0ZXMgdG8gbWF0Y2ggZmllbGQgbGVuZ3RoLlxuICAgICAqXG4gICAgICogQmVoYXZpb3I6XG4gICAgICogLSBGaWx0ZXJzIGNoYXJhY3RlcnMgYmFzZWQgb24gYGFscGhhbnVtZXJpY2Agc2V0dGluZ1xuICAgICAqIC0gVHJ1bmNhdGVzIHRvIG1heGltdW0gZmllbGQgY291bnRcbiAgICAgKiAtIEZpbGxzIGF2YWlsYWJsZSBmaWVsZHMgd2l0aCBwYXN0ZWQgY29udGVudFxuICAgICAqIC0gRW1pdHMgY29kZUZpbGxlZCBldmVudCBpZiBhbGwgZmllbGRzIGFyZSBmaWxsZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBjbGlwYm9hcmQgZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgdmFsaWRDaGFycyA9IHRoaXMuZXh0cmFjdFZhbGlkQ2hhcmFjdGVyc0Zyb21QYXN0ZShldmVudCk7XG5cbiAgICAgICAgaWYgKHZhbGlkQ2hhcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxsZWRJbnB1dHMgPSBbLi4udmFsaWRDaGFycywgLi4uQXJyYXkodGhpcy5sZW5ndGgoKSAtIHZhbGlkQ2hhcnMubGVuZ3RoKS5maWxsKCcnKV07XG5cbiAgICAgICAgdGhpcy5pbnB1dHMuc2V0KGZpbGxlZElucHV0cyk7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcblxuICAgICAgICAvLyBGb2N1cyBvbiB0aGUgZmlyc3QgZW1wdHkgaW5wdXQgb3IgdGhlIGxhc3QgZmlsbGVkIGlucHV0IGlmIGFsbCBhcmUgZmlsbGVkXG4gICAgICAgIGNvbnN0IGZpcnN0RW1wdHlJbmRleCA9IHZhbGlkQ2hhcnMubGVuZ3RoIDwgdGhpcy5sZW5ndGgoKSA/IHZhbGlkQ2hhcnMubGVuZ3RoIDogdmFsaWRDaGFycy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoZmlyc3RFbXB0eUluZGV4KTtcblxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZUZpbGxlZC5lbWl0KHRoaXMuY3VycmVudFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBmb2N1cyBldmVudCBvbiBQSU4gY29kZSBmaWVsZHMuXG4gICAgICogU2VsZWN0cyBhbGwgdGV4dCBpbiB0aGUgaW5wdXQgZmllbGQgd2hlbiBmb2N1c2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZvY3VzKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnBpbklucHV0cygpW2luZGV4XTtcbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBibHVyIGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBNYXJrcyB0aGUgY29tcG9uZW50IGFzIHRvdWNoZWQgd2hlbiB0aGUgbGFzdCBpbnB1dCBmaWVsZCBsb3NlcyBmb2N1cy5cbiAgICAgKiBBbHNvIG5vdGlmaWVzIHRoZSByZWdpc3RlcmVkIG9uVG91Y2hlZCBjYWxsYmFjayBmb3IgRm9ybUNvbnRyb2wgaW50ZWdyYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICovXG4gICAgcHVibGljIG9uQmx1cihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIE9ubHkgbWFyayBhcyB0b3VjaGVkIHdoZW4gdGhlIExBU1QgaW5wdXQgbG9zZXMgZm9jdXNcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmxlbmd0aCgpIC0gUGluQ29kZUZpZWxkQ29tcG9uZW50LkxBU1RfSU5ERVhfT0ZGU0VUKSB7XG4gICAgICAgICAgICB0aGlzLnRvdWNoZWQuc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgaW5wdXQgdmFsdWUgYXQgc3BlY2lmaWVkIGluZGV4IGFuZCBhZGp1c3RzIGZvY3VzIGFjY29yZGluZ2x5LlxuICAgICAqIElmIGN1cnJlbnQgZmllbGQgaXMgZW1wdHksIG1vdmVzIHRvIHByZXZpb3VzIGZpZWxkIGFuZCBjbGVhcnMgaXQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUJhY2tzcGFjZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuXG4gICAgICAgIC8vIElmIGN1cnJlbnQgaW5wdXQgaGFzIHZhbHVlLCBjbGVhciBpdFxuICAgICAgICBpZiAoY3VycmVudElucHV0c1tpbmRleF0pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4LCBQaW5Db2RlRmllbGRDb21wb25lbnQuRU1QVFlfVkFMVUUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBjbGVhciBwcmV2aW91cyBpbnB1dCBhbmQgZm9jdXMgaXRcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dEF0SW5kZXgoaW5kZXggLSAxLCBQaW5Db2RlRmllbGRDb21wb25lbnQuRU1QVFlfVkFMVUUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhdCBhIHNwZWNpZmljIGlucHV0IGZpZWxkIGluZGV4IGFuZCB1cGRhdGVzIHRoZSBmb3JtIHZhbHVlLlxuICAgICAqIFVwZGF0ZXMgdGhlIHNpZ25hbCBhbmQgdHJpZ2dlcnMgdGhlIGNoYW5nZSBkZXRlY3Rpb24gdmlhIG9uQ2hhbmdlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCBpbiB0aGUgZmllbGRcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldElucHV0QXRJbmRleChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgICBjdXJyZW50SW5wdXRzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlucHV0cy5zZXQoWy4uLmN1cnJlbnRJbnB1dHNdKTtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgb24gYW5kIHNlbGVjdHMgdGV4dCBpbiB0aGUgaW5wdXQgZmllbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleC5cbiAgICAgKiBVc2VzIHF1ZXVlTWljcm90YXNrIHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZCBiZWZvcmUgZm9jdXNpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKi9cbiAgICBwcml2YXRlIGZvY3VzQW5kU2VsZWN0SW5wdXQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMucGluSW5wdXRzKClbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgdmFsdWUgb2YgYW4gaW5wdXQgZWxlbWVudC5cbiAgICAgKiBVc2VkIGZvciBpbnB1dCB2YWxpZGF0aW9uIHRvIHJlamVjdCBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgSFRNTCBpbnB1dCBlbGVtZW50IHRvIGNsZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbGVhcklucHV0KHRhcmdldDogSFRNTElucHV0RWxlbWVudCk6IHZvaWQge1xuICAgICAgICB0YXJnZXQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gcGFzdGVkIGNvbnRlbnQuXG4gICAgICogRmlsdGVycyBiYXNlZCBvbiBhbHBoYW51bWVyaWMgc2V0dGluZyBhbmQgbGltaXRzIHRvIGNvbXBvbmVudCdzIGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGNsaXBib2FyZCBldmVudFxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkIGNoYXJhY3RlcnMgZnJvbSB0aGUgcGFzdGVkIGNvbnRlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGV4dHJhY3RWYWxpZENoYXJhY3RlcnNGcm9tUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gKGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSB8fCAnJykudHJpbSgpO1xuICAgICAgICByZXR1cm4gcGFzdGVkVGV4dFxuICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgLmZpbHRlcigoY2hhcikgPT4gdGhpcy5pc1ZhbGlkQ2hhcmFjdGVyKGNoYXIpKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHRoaXMubGVuZ3RoKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyBpZiBhIGNoYXJhY3RlciBpcyBhY2NlcHRhYmxlIGJhc2VkIG9uIGNvbXBvbmVudCBjb25maWd1cmF0aW9uLlxuICAgICAqIEZvciBudW1lcmljIG1vZGUsIGFjY2VwdHMgb25seSBkaWdpdHMgMC05LlxuICAgICAqIEZvciBhbHBoYW51bWVyaWMgbW9kZSwgYWNjZXB0cyBhbnkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gY2hhciAtIFRoZSBjaGFyYWN0ZXIgdG8gdmFsaWRhdGVcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGNoYXJhY3RlciBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1ZhbGlkQ2hhcmFjdGVyKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5hbHBoYW51bWVyaWMoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoYXIudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC9eWzAtOV0kLy50ZXN0KGNoYXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGZvcm0gdmFsdWUgYnkgY2FsbGluZyB0aGUgb25DaGFuZ2UgY2FsbGJhY2sgcmVnaXN0ZXJlZCBieSBGb3JtQ29udHJvbC5cbiAgICAgKiBUaGlzIGVuc3VyZXMgdGhlIHJlYWN0aXZlIGZvcm0gc3RheXMgc3luY2hyb25pemVkIHdpdGggY29tcG9uZW50IHN0YXRlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVZhbHVlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY3VycmVudFZhbHVlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgdG8gd3JpdGUgYSB2YWx1ZSB0byB0aGUgY29tcG9uZW50LlxuICAgICAqIE9ubHkgYWNjZXB0cyBzdHJpbmcgdmFsdWVzIHdpdGggbGVuZ3RoIG1hdGNoaW5nIHRoZSBjb21wb25lbnQncyBsZW5ndGggc2V0dGluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZSAodHlwaWNhbGx5IGZyb20gdGhlIEZvcm1Db250cm9sKVxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUubGVuZ3RoID09PSB0aGlzLmxlbmd0aCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMuc2V0KHN0cmluZ1ZhbHVlLnNwbGl0KCcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHdoZW4gdmFsdWUgY2hhbmdlcy5cbiAgICAgKiBSZWdpc3RlcnMgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgdmFsdWUgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGNvbXBvbmVudCB2YWx1ZSBjaGFuZ2VzXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHRvIHJlZ2lzdGVyIHRoZSB0b3VjaGVkIGNhbGxiYWNrLlxuICAgICAqIFRoZSBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4gdGhlIGxhc3QgaW5wdXQgZmllbGQgbG9zZXMgZm9jdXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBjb21wb25lbnQgaXMgdG91Y2hlZFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgdG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIFVwZGF0ZXMgdGhlIGRpc2FibGVkIG1vZGVsIHRvIHJlZmxlY3QgdGhlIGZvcm0ncyBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkIC0gV2hldGhlciB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XG4gICAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZ2FwLXhzbWFsbCBmbGV4IGZsZXgtY29sXCI+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTJcIlxuICAgICAgICByb2xlPVwiZ3JvdXBcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiUElOIGNvZGUgaW5wdXRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaGVscFRleHQoKSA/ICdwaW4taGVscC10ZXh0JyA6IG51bGxcIlxuICAgID5cbiAgICAgICAgQGZvciAoaW5wdXQgb2YgaW5wdXRzKCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBpKSB7XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjcGluSW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTEyIHctMTIgcm91bmRlZC14YmlnIGJvcmRlciB0ZXh0LWNlbnRlciB0ZXh0LWxnIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWNyaXRpY2FsaXR5LXJlZCBmb2N1czpyaW5nLWNyaXRpY2FsaXR5LXJlZCc6IGhhc0Vycm9yKCksXG4gICAgICAgICAgICAgICAgICAgICdib3JkZXItZ3JheXNjYWxlLTMwIGZvY3VzOmJvcmRlci1wcmltYXJ5IGZvY3VzOnJpbmctcHJpbWFyeSc6ICFoYXNFcnJvcigpLFxuICAgICAgICAgICAgICAgICAgICAnY3Vyc29yLW5vdC1hbGxvd2VkIGJnLWdyYXlzY2FsZS0xMCB0ZXh0LWdyYXlzY2FsZS02MCc6IGRpc2FibGVkKCksXG4gICAgICAgICAgICAgICAgICAgICdiZy1ncmF5c2NhbGUtMCB0ZXh0LWdyYXlzY2FsZS0xMDAgZm9jdXM6b3V0bGluZS1ub25lJzogIWRpc2FibGVkKCksXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlucHV0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cIjFcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlucHV0bW9kZV09XCJhbHBoYW51bWVyaWMoKSA/ICd0ZXh0JyA6ICdudW1lcmljJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgYWxwaGFudW1lcmljKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGluX2NvZGVfY2hhcmFjdGVyX2luZGV4X29mX3RvdGFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBpbmRleDogaSArIDEsIGxlbmd0aDogbGVuZ3RoKCkgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGluX2NvZGVfZGlnaXRfaW5kZXhfb2ZfdG90YWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IGluZGV4OiBpICsgMSwgbGVuZ3RoOiBsZW5ndGgoKSB9KVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJoZWxwVGV4dCgpID8gJ3Bpbi1oZWxwLXRleHQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KGksICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bihpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cyhpKVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKGkpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoaGVscFRleHQoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBpZD1cInBpbi1oZWxwLXRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJtdC1zbWFsbCB0ZXh0LXNtIHRleHQtZ3JheXNjYWxlLTYwXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgaGVscFRleHQoKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L2Rpdj5cblxuIl19
@@ -8,32 +8,116 @@ import * as i3 from "@ngx-translate/core";
8
8
  import * as i4 from "@seniorsistemas/angular-components/button";
9
9
  import * as i5 from "@seniorsistemas/angular-components/thumbnail";
10
10
  import * as i6 from "primeng/confirmdialog";
11
+ /**
12
+ * @description Componente para seleção, edição e remoção de foto de perfil do usuário.
13
+ * Permite ao usuário fazer upload de uma imagem, recortá-la com o {@link ImageCropperService}
14
+ * e confirmar ou remover a foto atual. Implementa {@link ControlValueAccessor} para uso
15
+ * em formulários reativos e template-driven do Angular.
16
+ *
17
+ * @example
18
+ * ```html
19
+ * <s-profile-picture-picker
20
+ * formControlName="avatar"
21
+ * subtitle="Formatos aceitos: JPG e PNG"
22
+ * [maxFileSize]="2097152"
23
+ * accept="image/jpeg,image/png"
24
+ * (imageChange)="onImageChange($event)"
25
+ * (removedImage)="onImageRemoved()" />
26
+ * ```
27
+ *
28
+ * @category Inputs
29
+ */
11
30
  export class ProfilePicturePickerComponent {
12
31
  imageCropperService;
13
32
  confirmationService;
14
33
  translateService;
34
+ /**
35
+ * @description Título simples exibido quando nenhuma imagem está selecionada.
36
+ */
15
37
  simpleTitle;
38
+ /**
39
+ * @description Título de ação exibido como label principal do botão de upload.
40
+ */
16
41
  actionTitle;
42
+ /**
43
+ * @description Legenda exibida abaixo do título, descrevendo formatos suportados
44
+ * ou outras orientações para o usuário. Campo obrigatório.
45
+ */
17
46
  subtitle;
47
+ /**
48
+ * @description Proporção (aspect ratio) do recorte da imagem.
49
+ * Por exemplo, `1` para quadrado, `16/9` para widescreen.
50
+ *
51
+ * @default 1
52
+ */
18
53
  aspectRatio = 1;
54
+ /**
55
+ * @description Configurações de rótulos exibidos no componente de recorte de imagem (cropper).
56
+ * Permite sobrescrever os textos padrão dos botões e instruções do cropper.
57
+ */
19
58
  cropperLabelsConfig;
59
+ /**
60
+ * @description Texto do botão de remoção da foto atual.
61
+ * Se não informado, utiliza o label padrão de remoção.
62
+ */
20
63
  removeButtonLabel;
64
+ /**
65
+ * @description Texto do botão de troca da foto atual.
66
+ * Se não informado, utiliza o label padrão de alteração.
67
+ */
21
68
  changeButtonLabel;
69
+ /**
70
+ * @description Textos personalizados exibidos no diálogo de confirmação
71
+ * ao remover ou substituir a foto. Permite sobrescrever título, mensagem e botões.
72
+ */
22
73
  confirmationTexts;
74
+ /**
75
+ * @description Tamanho máximo permitido para o arquivo de imagem, em bytes.
76
+ * Quando o arquivo excede esse limite, o output `invalidFile` é emitido.
77
+ */
23
78
  maxFileSize;
79
+ /**
80
+ * @description Tipos MIME aceitos pelo input de arquivo.
81
+ * Exemplo: `"image/jpeg,image/png"`.
82
+ */
24
83
  accept;
84
+ /**
85
+ * @description Lista de extensões de arquivo aceitas para validação.
86
+ * Exemplo: `['.jpg', '.jpeg', '.png']`.
87
+ *
88
+ * @default []
89
+ */
25
90
  supportedExtensions = [];
91
+ /**
92
+ * @description Imagem atual do componente. Pode ser uma string base64, um objeto
93
+ * {@link ProfilePicturePickerData} com metadados, ou `null` para sem imagem.
94
+ *
95
+ * @default null
96
+ */
26
97
  image = null;
27
98
  uploadPicture = null;
28
99
  info = null;
29
100
  thumbnail = null;
30
101
  fileInput = null;
31
102
  /**
32
- * @deprecated Use imageChange instead.
103
+ * @deprecated Use `imageChange` em vez deste output.
104
+ * @description Emitido ao selecionar ou recortar uma nova imagem. Emite a string base64 da imagem.
33
105
  */
34
106
  changedImage = new EventEmitter();
107
+ /**
108
+ * @description Emitido ao selecionar, recortar ou alterar a imagem.
109
+ * Emite a string base64 ou um objeto {@link ProfilePicturePickerData} com os dados da imagem.
110
+ */
35
111
  imageChange = new EventEmitter();
112
+ /**
113
+ * @description Emitido quando o usuário confirma a remoção da foto atual.
114
+ */
36
115
  removedImage = new EventEmitter();
116
+ /**
117
+ * @description Emitido quando o arquivo selecionado não passa na validação.
118
+ * Emite um objeto {@link FileValidationErrors} descrevendo os erros encontrados
119
+ * (ex.: tamanho excedido, extensão inválida).
120
+ */
37
121
  invalidFile = new EventEmitter();
38
122
  get imageBase64() {
39
123
  return typeof this.image === 'string' ? this.image : (this.image?.base64 ?? '');
@@ -274,4 +358,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
274
358
  type: HostListener,
275
359
  args: ['window:resize']
276
360
  }] } });
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvcHJvZmlsZS1waWN0dXJlLXBpY2tlci9zcmMvbGliL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvcHJvZmlsZS1waWN0dXJlLXBpY2tlci9zcmMvbGliL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFVekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7O0FBZTdFLE1BQU0sT0FBTyw2QkFBNkI7SUF3RWpCO0lBQ0E7SUFDQTtJQXhFZCxXQUFXLENBQVU7SUFHckIsV0FBVyxDQUFVO0lBR3JCLFFBQVEsQ0FBVTtJQUdsQixXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBR2hCLG1CQUFtQixDQUF1QjtJQUcxQyxpQkFBaUIsQ0FBVTtJQUczQixpQkFBaUIsQ0FBVTtJQUczQixpQkFBaUIsQ0FBcUI7SUFHdEMsV0FBVyxDQUFVO0lBR3JCLE1BQU0sQ0FBVTtJQUdoQixtQkFBbUIsR0FBYSxFQUFFLENBQUM7SUFHbkMsS0FBSyxHQUE2QyxJQUFJLENBQUM7SUFHdkQsYUFBYSxHQUFzQixJQUFJLENBQUM7SUFHeEMsSUFB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QjtzQkFEdkIsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxNQUFNO3NCQURaLEtBQUs7Z0JBSUMsbUJBQW1CO3NCQUR6QixLQUFLO2dCQUlDLEtBQUs7c0JBRFgsS0FBSztnQkFJQyxhQUFhO3NCQURuQixTQUFTO3VCQUFDLGVBQWU7Z0JBSW5CLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxNQUFNO2dCQUlWLFNBQVM7c0JBRGYsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUlyQyxTQUFTO3NCQURmLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFPckMsWUFBWTtzQkFEbEIsTUFBTTtnQkFJQSxXQUFXO3NCQURqQixNQUFNO2dCQUlBLFlBQVk7c0JBRGxCLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsTUFBTTtnQkFpQ0EsVUFBVTtzQkFEaEIsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTzdCLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU85QixNQUFNO3NCQURaLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXdCekIsUUFBUTtzQkFEZCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1xuICAgIENvbmZpcm1hdGlvblRleHRzLFxuICAgIENyb3BwZXJMYWJlbHNDb25maWcsXG4gICAgRmlsZVZhbGlkYXRpb25FcnJvcnMsXG4gICAgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhXG59IGZyb20gJy4vbW9kZWxzL2luZGV4JztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBJbWFnZUNyb3BwZXJTZXJ2aWNlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLXByb2ZpbGUtcGljdHVyZS1waWNrZXInLFxuICAgIHRlbXBsYXRlVXJsOiAncHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3Byb2ZpbGUtcGljdHVyZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQcm9maWxlUGljdHVyZVBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlUGljdHVyZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNpbXBsZVRpdGxlITogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWN0aW9uVGl0bGUhOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHB1YmxpYyBzdWJ0aXRsZSE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFzcGVjdFJhdGlvID0gMTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNyb3BwZXJMYWJlbHNDb25maWc/OiBDcm9wcGVyTGFiZWxzQ29uZmlnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjaGFuZ2VCdXR0b25MYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbmZpcm1hdGlvblRleHRzPzogQ29uZmlybWF0aW9uVGV4dHM7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXhGaWxlU2l6ZT86IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFjY2VwdD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHN1cHBvcnRlZEV4dGVuc2lvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbWFnZTogc3RyaW5nIHwgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhIHwgbnVsbCA9IG51bGw7XG5cbiAgICBAVmlld0NoaWxkKCd1cGxvYWRQaWN0dXJlJylcbiAgICBwdWJsaWMgdXBsb2FkUGljdHVyZTogRWxlbWVudFJlZiB8IG51bGwgPSBudWxsO1xuXG4gICAgQFZpZXdDaGlsZCgnaW5mbycpXG4gICAgcHVibGljIGluZm86IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcblxuICAgIEBWaWV3Q2hpbGQoJ3RodW1ibmFpbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyB0aHVtYm5haWw6IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcblxuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBmaWxlSW5wdXQ6IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBpbWFnZUNoYW5nZSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjaGFuZ2VkSW1hZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGltYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGE+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlZEltYWdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGludmFsaWRGaWxlOiBFdmVudEVtaXR0ZXI8RmlsZVZhbGlkYXRpb25FcnJvcnM+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIGdldCBpbWFnZUJhc2U2NCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuaW1hZ2UgPT09ICdzdHJpbmcnID8gdGhpcy5pbWFnZSA6ICh0aGlzLmltYWdlPy5iYXNlNjQgPz8gJycpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX29uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkPzogKCkgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGltYWdlQ3JvcHBlclNlcnZpY2U6IEltYWdlQ3JvcHBlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW1hZ2UgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQob25Ub3VjaGVkOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCA9IG9uVG91Y2hlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25vcm1hbGl6ZVN1cG9ydGVkRXh0ZW5zaW9ucygpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdvdmVyJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2RyYWdsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZHJvcCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XG5cbiAgICAgICAgY29uc3QgZmlsZXM6IEZpbGVbXSA9IFtdO1xuICAgICAgICBjb25zdCBkYXRhVHJhbnNmZXJGaWxlcyA9IGV2ZW50LmRhdGFUcmFuc2Zlcj8uZmlsZXM7XG5cbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChkYXRhVHJhbnNmZXJGaWxlcykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVRyYW5zZmVyRmlsZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRhdGFUcmFuc2ZlckZpbGVzLml0ZW0oaSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Nob3dJbWFnZUNyb3BwZXIoZmlsZXMpO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhbmRvIG8gcmVkaW1lbnNpb25hbWVudG8gcGFyYSBhanVzdGFyIG8gZGVzaWduIHBhcmEgZmljYXIgcmVzcG9uc2l2by5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgICBwdWJsaWMgb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnVwbG9hZFBpY3R1cmUgJiYgdGhpcy5pbmZvICYmIHRoaXMudGh1bWJuYWlsKSB7XG4gICAgICAgICAgICBjb25zdCB1cGxvYWRQaWN0dXJlV2lkdGggPSB0aGlzLl9nZXRXaWR0aEVsZW1lbnQodGhpcy51cGxvYWRQaWN0dXJlKTtcbiAgICAgICAgICAgIGNvbnN0IGluZm9XaWR0aCA9IHRoaXMuX2dldFdpZHRoRWxlbWVudCh0aGlzLmluZm8pO1xuICAgICAgICAgICAgY29uc3QgdGh1bWJuYWlsV2lkdGggPSB0aGlzLl9nZXRXaWR0aEVsZW1lbnQodGhpcy50aHVtYm5haWwpO1xuXG4gICAgICAgICAgICBpZiAodGh1bWJuYWlsV2lkdGggKyBpbmZvV2lkdGggPiB1cGxvYWRQaWN0dXJlV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFBpY3R1cmUubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd1cGxvYWQtcGljdHVyZS0tc21hbGwnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRQaWN0dXJlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgndXBsb2FkLXBpY3R1cmUtLXNtYWxsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0UGhvdG8oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dEVsZW1lbnQgPSB0aGlzLmZpbGVJbnB1dD8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgZmlsZUlucHV0RWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICBmaWxlSW5wdXRFbGVtZW50LmNsaWNrKCk7XG5cbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkPy4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlUGhvdG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25UZXh0cz8ucmVtb3ZhbE1lc3NhZ2UgPz9cbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmNvbmZpcm1hdGlvbl9yZW1vdmVfaW1hZ2UnKSxcbiAgICAgICAgICAgIGFjY2VwdExhYmVsOlxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uVGV4dHM/LnJlbW92YWxBY2NlcHRMYWJlbCA/P1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucmVtb3ZlJyksXG4gICAgICAgICAgICByZWplY3RMYWJlbDpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblRleHRzPy5yZW1vdmFsUmVqZWN0TGFiZWwgPz9cbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmNhbmNlbCcpLFxuICAgICAgICAgICAgaGVhZGVyOlxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uVGV4dHM/LnJlbW92YWxIZWFkZXIgPz9cbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZV9pbWFnZScpLFxuICAgICAgICAgICAgcmVqZWN0QnV0dG9uU3R5bGVDbGFzczogJ3VpLWJ1dHRvbi1zZWNvbmRhcnknLFxuICAgICAgICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZUlucHV0RWxlbWVudCA9IHRoaXMuZmlsZUlucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGZpbGVJbnB1dEVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZWRJbWFnZS5lbWl0KCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGhvdG9TZWxlY3RlZChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Nob3dJbWFnZUNyb3BwZXIoZXZlbnQuc3JjRWxlbWVudC5maWxlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hvd0ltYWdlQ3JvcHBlcihmaWxlczogRmlsZVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVEYXRhKGZpbGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xuXG4gICAgICAgIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgIGZpbGVSZWFkZXIub25sb2FkZW5kID0gKGZpbGVFdmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmltYWdlQ3JvcHBlclNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgICAgICAgaW1hZ2VTb3VyY2U6IGZpbGVFdmVudC50YXJnZXQucmVzdWx0LFxuICAgICAgICAgICAgICAgIGNyb3BwZWRJbWFnZTogKGltYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZEltYWdlLmVtaXQoaW1hZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSA9IHsgc291cmNlOiBmaWxlLCBiYXNlNjQ6IGltYWdlIH07XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU2UgbyB0aXBvIGRvIGltYWdlIGZvciBzdHJpbmcgZXUgcHJlY2lzbyBhdHVhbGl6YXIgZSBtYW5kYXIgcGFyYSBvIGltYWdlQ2hhbmdlIHVtYSBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlIGZvciBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEgZXUgcHJlY2lzbyBtYW5kYXIgbyBkYXRhIGNvbXBsZXRvLlxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuaW1hZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlID0gaW1hZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlQ2hhbmdlLmVtaXQoaW1hZ2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlQ2hhbmdlLmVtaXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZT8uKHRoaXMuaW1hZ2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2hhbmdlSW1hZ2U6ICgpID0+IHRoaXMuc2VsZWN0UGhvdG8oKSxcbiAgICAgICAgICAgICAgICBhbGxvd1NlbGVjdEFub3RoZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGFzcGVjdFJhdGlvOiB0aGlzLmFzcGVjdFJhdGlvLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuY3JvcHBlckxhYmVsc0NvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX25vcm1hbGl6ZVN1cG9ydGVkRXh0ZW5zaW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zID0gdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zPy5tYXAoKGV4dGVuc2lvbikgPT5cbiAgICAgICAgICAgIGV4dGVuc2lvbi5yZXBsYWNlKCcuJywgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVEYXRhKGZpbGVzOiBGaWxlW10pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRGaWxlLmVtaXQoeyBmaWxlOiBudWxsLCB2YWxpZGF0aW9uOiAnbWF4RmlsZUxpbWl0JyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcblxuICAgICAgICBpZiAoIWZpbGUudHlwZS5pbmNsdWRlcygnaW1hZ2UnKSkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZSwgdmFsaWRhdGlvbjogJ3R5cGVJbnZhbGlkJyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVGaWxlRXh0ZW5zaW9uKGZpbGUpKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRGaWxlLmVtaXQoeyBmaWxlLCB2YWxpZGF0aW9uOiAndW5zdXBwb3J0ZWRFeHRlbnNpb24nIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl92YWxpZGF0ZUZpbGVTaXplKGZpbGUpKSB7XG4gICAgICAgICAgICB0aGlzLmludmFsaWRGaWxlLmVtaXQoeyBmaWxlLCB2YWxpZGF0aW9uOiAnbWF4RmlsZVNpemUnIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVGaWxlRXh0ZW5zaW9uKGZpbGU6IEZpbGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKT8udG9Mb3dlckNhc2UoKSA/PyAnJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1cHBvcnRlZEV4dGVuc2lvbnMuaW5jbHVkZXMoZXh0ZW5zaW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF92YWxpZGF0ZUZpbGVTaXplKGZpbGU6IEZpbGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubWF4RmlsZVNpemUpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlLnNpemUgPD0gdGhpcy5tYXhGaWxlU2l6ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRXaWR0aEVsZW1lbnQoZWxlbWVudDogRWxlbWVudFJlZik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHsgbGVmdCwgcmlnaHQgfSA9IGVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmV0dXJuIHJpZ2h0IC0gbGVmdDtcbiAgICB9XG59XG4iLCI8cC1jb25maXJtRGlhbG9nPjwvcC1jb25maXJtRGlhbG9nPlxuXG48aW5wdXRcbiAgICAjZmlsZUlucHV0XG4gICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgdHlwZT1cImZpbGVcIlxuICAgIChjaGFuZ2UpPVwicGhvdG9TZWxlY3RlZCgkZXZlbnQpXCJcbi8+XG48ZGl2XG4gICAgI3VwbG9hZFBpY3R1cmVcbiAgICBjbGFzcz1cInVwbG9hZC1waWN0dXJlXCJcbj5cbiAgICA8cy10aHVtYm5haWxcbiAgICAgICAgI3RodW1ibmFpbFxuICAgICAgICBpY29uQ2xhc3M9XCJmYXIgZmEtdXNlclwiXG4gICAgICAgIFtpbWFnZVNvdXJjZV09XCJpbWFnZUJhc2U2NFwiXG4gICAgICAgIFtoYXNBY3Rpb25dPVwiIWltYWdlXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBob3RvKClcIlxuICAgID5cbiAgICA8L3MtdGh1bWJuYWlsPlxuICAgIDxkaXZcbiAgICAgICAgI2luZm9cbiAgICAgICAgY2xhc3M9XCJpbmZvXCJcbiAgICA+XG4gICAgICAgIEBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjaGFuZ2VCdXR0b25MYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmNoYW5nZV9waG90bycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZWxlY3RQaG90bygpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8cy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUJ1dHRvbkxhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlUGhvdG8oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgc2ltcGxlVGl0bGUgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5kcmFnX3lvdXJfcGhvdG9fb3InIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGhvdG8oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb25UaXRsZSB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNlbGVjdF9hX2ZpbGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICB9XG4gICAgICAgIDxwIGNsYXNzPVwic3VidGl0bGVcIj57eyBzdWJ0aXRsZSB9fTwvcD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvcHJvZmlsZS1waWN0dXJlLXBpY2tlci9zcmMvbGliL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvcHJvZmlsZS1waWN0dXJlLXBpY2tlci9zcmMvbGliL3Byb2ZpbGUtcGljdHVyZS1waWNrZXIvcHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLekUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7O0FBRzdFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFhSCxNQUFNLE9BQU8sNkJBQTZCO0lBeUlqQjtJQUNBO0lBQ0E7SUExSXJCOztPQUVHO0lBRUksV0FBVyxDQUFVO0lBRTVCOztPQUVHO0lBRUksV0FBVyxDQUFVO0lBRTVCOzs7T0FHRztJQUVJLFFBQVEsQ0FBVTtJQUV6Qjs7Ozs7T0FLRztJQUVJLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFFdkI7OztPQUdHO0lBRUksbUJBQW1CLENBQXVCO0lBRWpEOzs7T0FHRztJQUVJLGlCQUFpQixDQUFVO0lBRWxDOzs7T0FHRztJQUVJLGlCQUFpQixDQUFVO0lBRWxDOzs7T0FHRztJQUVJLGlCQUFpQixDQUFx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ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25UZXh0cywgQ3JvcHBlckxhYmVsc0NvbmZpZywgRmlsZVZhbGlkYXRpb25FcnJvcnMsIFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSB9IGZyb20gJy4vbW9kZWxzL2luZGV4JztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBJbWFnZUNyb3BwZXJTZXJ2aWNlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBwYXJhIHNlbGXDp8OjbywgZWRpw6fDo28gZSByZW1vw6fDo28gZGUgZm90byBkZSBwZXJmaWwgZG8gdXN1w6FyaW8uXG4gKiBQZXJtaXRlIGFvIHVzdcOhcmlvIGZhemVyIHVwbG9hZCBkZSB1bWEgaW1hZ2VtLCByZWNvcnTDoS1sYSBjb20gbyB7QGxpbmsgSW1hZ2VDcm9wcGVyU2VydmljZX1cbiAqIGUgY29uZmlybWFyIG91IHJlbW92ZXIgYSBmb3RvIGF0dWFsLiBJbXBsZW1lbnRhIHtAbGluayBDb250cm9sVmFsdWVBY2Nlc3Nvcn0gcGFyYSB1c29cbiAqIGVtIGZvcm11bMOhcmlvcyByZWF0aXZvcyBlIHRlbXBsYXRlLWRyaXZlbiBkbyBBbmd1bGFyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cy1wcm9maWxlLXBpY3R1cmUtcGlja2VyXG4gKiAgIGZvcm1Db250cm9sTmFtZT1cImF2YXRhclwiXG4gKiAgIHN1YnRpdGxlPVwiRm9ybWF0b3MgYWNlaXRvczogSlBHIGUgUE5HXCJcbiAqICAgW21heEZpbGVTaXplXT1cIjIwOTcxNTJcIlxuICogICBhY2NlcHQ9XCJpbWFnZS9qcGVnLGltYWdlL3BuZ1wiXG4gKiAgIChpbWFnZUNoYW5nZSk9XCJvbkltYWdlQ2hhbmdlKCRldmVudClcIlxuICogICAocmVtb3ZlZEltYWdlKT1cIm9uSW1hZ2VSZW1vdmVkKClcIiAvPlxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IElucHV0c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtcHJvZmlsZS1waWN0dXJlLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICdwcm9maWxlLXBpY3R1cmUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsncHJvZmlsZS1waWN0dXJlLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFByb2ZpbGVQaWN0dXJlUGlja2VyQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFByb2ZpbGVQaWN0dXJlUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFTDrXR1bG8gc2ltcGxlcyBleGliaWRvIHF1YW5kbyBuZW5odW1hIGltYWdlbSBlc3TDoSBzZWxlY2lvbmFkYS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaW1wbGVUaXRsZSE6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUw610dWxvIGRlIGHDp8OjbyBleGliaWRvIGNvbW8gbGFiZWwgcHJpbmNpcGFsIGRvIGJvdMOjbyBkZSB1cGxvYWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWN0aW9uVGl0bGUhOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTGVnZW5kYSBleGliaWRhIGFiYWl4byBkbyB0w610dWxvLCBkZXNjcmV2ZW5kbyBmb3JtYXRvcyBzdXBvcnRhZG9zXG4gICAgICogb3Ugb3V0cmFzIG9yaWVudGHDp8O1ZXMgcGFyYSBvIHVzdcOhcmlvLiBDYW1wbyBvYnJpZ2F0w7NyaW8uXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwdWJsaWMgc3VidGl0bGUhOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUHJvcG9yw6fDo28gKGFzcGVjdCByYXRpbykgZG8gcmVjb3J0ZSBkYSBpbWFnZW0uXG4gICAgICogUG9yIGV4ZW1wbG8sIGAxYCBwYXJhIHF1YWRyYWRvLCBgMTYvOWAgcGFyYSB3aWRlc2NyZWVuLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFzcGVjdFJhdGlvID0gMTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmHDp8O1ZXMgZGUgcsOzdHVsb3MgZXhpYmlkb3Mgbm8gY29tcG9uZW50ZSBkZSByZWNvcnRlIGRlIGltYWdlbSAoY3JvcHBlcikuXG4gICAgICogUGVybWl0ZSBzb2JyZXNjcmV2ZXIgb3MgdGV4dG9zIHBhZHLDo28gZG9zIGJvdMO1ZXMgZSBpbnN0cnXDp8O1ZXMgZG8gY3JvcHBlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjcm9wcGVyTGFiZWxzQ29uZmlnPzogQ3JvcHBlckxhYmVsc0NvbmZpZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0byBkbyBib3TDo28gZGUgcmVtb8Onw6NvIGRhIGZvdG8gYXR1YWwuXG4gICAgICogU2UgbsOjbyBpbmZvcm1hZG8sIHV0aWxpemEgbyBsYWJlbCBwYWRyw6NvIGRlIHJlbW/Dp8Ojby5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZW1vdmVCdXR0b25MYWJlbD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0byBkbyBib3TDo28gZGUgdHJvY2EgZGEgZm90byBhdHVhbC5cbiAgICAgKiBTZSBuw6NvIGluZm9ybWFkbywgdXRpbGl6YSBvIGxhYmVsIHBhZHLDo28gZGUgYWx0ZXJhw6fDo28uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2hhbmdlQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gVGV4dG9zIHBlcnNvbmFsaXphZG9zIGV4aWJpZG9zIG5vIGRpw6Fsb2dvIGRlIGNvbmZpcm1hw6fDo29cbiAgICAgKiBhbyByZW1vdmVyIG91IHN1YnN0aXR1aXIgYSBmb3RvLiBQZXJtaXRlIHNvYnJlc2NyZXZlciB0w610dWxvLCBtZW5zYWdlbSBlIGJvdMO1ZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29uZmlybWF0aW9uVGV4dHM/OiBDb25maXJtYXRpb25UZXh0cztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUYW1hbmhvIG3DoXhpbW8gcGVybWl0aWRvIHBhcmEgbyBhcnF1aXZvIGRlIGltYWdlbSwgZW0gYnl0ZXMuXG4gICAgICogUXVhbmRvIG8gYXJxdWl2byBleGNlZGUgZXNzZSBsaW1pdGUsIG8gb3V0cHV0IGBpbnZhbGlkRmlsZWAgw6kgZW1pdGlkby5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXhGaWxlU2l6ZT86IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaXBvcyBNSU1FIGFjZWl0b3MgcGVsbyBpbnB1dCBkZSBhcnF1aXZvLlxuICAgICAqIEV4ZW1wbG86IGBcImltYWdlL2pwZWcsaW1hZ2UvcG5nXCJgLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFjY2VwdD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMaXN0YSBkZSBleHRlbnPDtWVzIGRlIGFycXVpdm8gYWNlaXRhcyBwYXJhIHZhbGlkYcOnw6NvLlxuICAgICAqIEV4ZW1wbG86IGBbJy5qcGcnLCAnLmpwZWcnLCAnLnBuZyddYC5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFtdXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3VwcG9ydGVkRXh0ZW5zaW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBJbWFnZW0gYXR1YWwgZG8gY29tcG9uZW50ZS4gUG9kZSBzZXIgdW1hIHN0cmluZyBiYXNlNjQsIHVtIG9iamV0b1xuICAgICAqIHtAbGluayBQcm9maWxlUGljdHVyZVBpY2tlckRhdGF9IGNvbSBtZXRhZGFkb3MsIG91IGBudWxsYCBwYXJhIHNlbSBpbWFnZW0uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaW1hZ2U6IHN0cmluZyB8IFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSB8IG51bGwgPSBudWxsO1xuXG4gICAgQFZpZXdDaGlsZCgndXBsb2FkUGljdHVyZScpXG4gICAgcHVibGljIHVwbG9hZFBpY3R1cmU6IEVsZW1lbnRSZWYgfCBudWxsID0gbnVsbDtcblxuICAgIEBWaWV3Q2hpbGQoJ2luZm8nKVxuICAgIHB1YmxpYyBpbmZvOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgICBAVmlld0NoaWxkKCd0aHVtYm5haWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgdGh1bWJuYWlsOiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgICBAVmlld0NoaWxkKCdmaWxlSW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwdWJsaWMgZmlsZUlucHV0OiBFbGVtZW50UmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYGltYWdlQ2hhbmdlYCBlbSB2ZXogZGVzdGUgb3V0cHV0LlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIGFvIHNlbGVjaW9uYXIgb3UgcmVjb3J0YXIgdW1hIG5vdmEgaW1hZ2VtLiBFbWl0ZSBhIHN0cmluZyBiYXNlNjQgZGEgaW1hZ2VtLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBjaGFuZ2VkSW1hZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gYW8gc2VsZWNpb25hciwgcmVjb3J0YXIgb3UgYWx0ZXJhciBhIGltYWdlbS5cbiAgICAgKiBFbWl0ZSBhIHN0cmluZyBiYXNlNjQgb3UgdW0gb2JqZXRvIHtAbGluayBQcm9maWxlUGljdHVyZVBpY2tlckRhdGF9IGNvbSBvcyBkYWRvcyBkYSBpbWFnZW0uXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGltYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmcgfCBQcm9maWxlUGljdHVyZVBpY2tlckRhdGE+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyB1c3XDoXJpbyBjb25maXJtYSBhIHJlbW/Dp8OjbyBkYSBmb3RvIGF0dWFsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZW1vdmVkSW1hZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBhcnF1aXZvIHNlbGVjaW9uYWRvIG7Do28gcGFzc2EgbmEgdmFsaWRhw6fDo28uXG4gICAgICogRW1pdGUgdW0gb2JqZXRvIHtAbGluayBGaWxlVmFsaWRhdGlvbkVycm9yc30gZGVzY3JldmVuZG8gb3MgZXJyb3MgZW5jb250cmFkb3NcbiAgICAgKiAoZXguOiB0YW1hbmhvIGV4Y2VkaWRvLCBleHRlbnPDo28gaW52w6FsaWRhKS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaW52YWxpZEZpbGU6IEV2ZW50RW1pdHRlcjxGaWxlVmFsaWRhdGlvbkVycm9ycz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwdWJsaWMgZ2V0IGltYWdlQmFzZTY0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5pbWFnZSA9PT0gJ3N0cmluZycgPyB0aGlzLmltYWdlIDogKHRoaXMuaW1hZ2U/LmJhc2U2NCA/PyAnJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZyB8IFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSkgPT4gdm9pZDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWQ/OiAoKSA9PiB2b2lkO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW1hZ2VDcm9wcGVyU2VydmljZTogSW1hZ2VDcm9wcGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IFByb2ZpbGVQaWN0dXJlUGlja2VyRGF0YSk6IHZvaWQge1xuICAgICAgICB0aGlzLmltYWdlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nIHwgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlID0gb25DaGFuZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ub3JtYWxpemVTdXBvcnRlZEV4dGVuc2lvbnMoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcmFnb3ZlcicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdkcmFnbGVhdmUnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2Ryb3AnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLl9vblRvdWNoZWQ/LigpO1xuXG4gICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlW10gPSBbXTtcbiAgICAgICAgY29uc3QgZGF0YVRyYW5zZmVyRmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xuXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZGF0YVRyYW5zZmVyRmlsZXMpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFUcmFuc2ZlckZpbGVzPy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhVHJhbnNmZXJGaWxlcy5pdGVtKGkpO1xuICAgICAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zaG93SW1hZ2VDcm9wcGVyKGZpbGVzKTtcbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYW5kbyBvIHJlZGltZW5zaW9uYW1lbnRvIHBhcmEgYWp1c3RhciBvIGRlc2lnbiBwYXJhIGZpY2FyIHJlc3BvbnNpdm8uXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gICAgcHVibGljIG9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy51cGxvYWRQaWN0dXJlICYmIHRoaXMuaW5mbyAmJiB0aGlzLnRodW1ibmFpbCkge1xuICAgICAgICAgICAgY29uc3QgdXBsb2FkUGljdHVyZVdpZHRoID0gdGhpcy5fZ2V0V2lkdGhFbGVtZW50KHRoaXMudXBsb2FkUGljdHVyZSk7XG4gICAgICAgICAgICBjb25zdCBpbmZvV2lkdGggPSB0aGlzLl9nZXRXaWR0aEVsZW1lbnQodGhpcy5pbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IHRodW1ibmFpbFdpZHRoID0gdGhpcy5fZ2V0V2lkdGhFbGVtZW50KHRoaXMudGh1bWJuYWlsKTtcblxuICAgICAgICAgICAgaWYgKHRodW1ibmFpbFdpZHRoICsgaW5mb1dpZHRoID4gdXBsb2FkUGljdHVyZVdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRQaWN0dXJlLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgndXBsb2FkLXBpY3R1cmUtLXNtYWxsJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkUGljdHVyZS5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3VwbG9hZC1waWN0dXJlLS1zbWFsbCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFBob3RvKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWxlSW5wdXRFbGVtZW50ID0gdGhpcy5maWxlSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGZpbGVJbnB1dEVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgZmlsZUlucHV0RWxlbWVudC5jbGljaygpO1xuXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZD8uKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVBob3RvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uVGV4dHM/LnJlbW92YWxNZXNzYWdlID8/XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jb25maXJtYXRpb25fcmVtb3ZlX2ltYWdlJyksXG4gICAgICAgICAgICBhY2NlcHRMYWJlbDpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblRleHRzPy5yZW1vdmFsQWNjZXB0TGFiZWwgPz9cbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScpLFxuICAgICAgICAgICAgcmVqZWN0TGFiZWw6XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtYXRpb25UZXh0cz8ucmVtb3ZhbFJlamVjdExhYmVsID8/XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5jYW5jZWwnKSxcbiAgICAgICAgICAgIGhlYWRlcjpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblRleHRzPy5yZW1vdmFsSGVhZGVyID8/XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfaW1hZ2UnKSxcbiAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6ICd1aS1idXR0b24tc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVJbnB1dEVsZW1lbnQgPSB0aGlzLmZpbGVJbnB1dD8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICBmaWxlSW5wdXRFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVkSW1hZ2UuZW1pdCgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHBob3RvU2VsZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zaG93SW1hZ2VDcm9wcGVyKGV2ZW50LnNyY0VsZW1lbnQuZmlsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dJbWFnZUNyb3BwZXIoZmlsZXM6IEZpbGVbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlRGF0YShmaWxlcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcblxuICAgICAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZGVuZCA9IChmaWxlRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUNyb3BwZXJTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGltYWdlU291cmNlOiBmaWxlRXZlbnQudGFyZ2V0LnJlc3VsdCxcbiAgICAgICAgICAgICAgICBjcm9wcGVkSW1hZ2U6IChpbWFnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRJbWFnZS5lbWl0KGltYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhOiBQcm9maWxlUGljdHVyZVBpY2tlckRhdGEgPSB7IHNvdXJjZTogZmlsZSwgYmFzZTY0OiBpbWFnZSB9O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlIG8gdGlwbyBkbyBpbWFnZSBmb3Igc3RyaW5nIGV1IHByZWNpc28gYXR1YWxpemFyIGUgbWFuZGFyIHBhcmEgbyBpbWFnZUNoYW5nZSB1bWEgc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgICAvLyBTZSBmb3IgUHJvZmlsZVBpY3R1cmVQaWNrZXJEYXRhIGV1IHByZWNpc28gbWFuZGFyIG8gZGF0YSBjb21wbGV0by5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmltYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZSA9IGltYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUNoYW5nZS5lbWl0KGltYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUNoYW5nZS5lbWl0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2U/Lih0aGlzLmltYWdlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNoYW5nZUltYWdlOiAoKSA9PiB0aGlzLnNlbGVjdFBob3RvKCksXG4gICAgICAgICAgICAgICAgYWxsb3dTZWxlY3RBbm90aGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogdGhpcy5hc3BlY3RSYXRpbyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmNyb3BwZXJMYWJlbHNDb25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9ub3JtYWxpemVTdXBvcnRlZEV4dGVuc2lvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucz8ubWFwKChleHRlbnNpb24pID0+XG4gICAgICAgICAgICBleHRlbnNpb24ucmVwbGFjZSgnLicsICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhbGlkYXRlRGF0YShmaWxlczogRmlsZVtdKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZTogbnVsbCwgdmFsaWRhdGlvbjogJ21heEZpbGVMaW1pdCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XG5cbiAgICAgICAgaWYgKCFmaWxlLnR5cGUuaW5jbHVkZXMoJ2ltYWdlJykpIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZEZpbGUuZW1pdCh7IGZpbGUsIHZhbGlkYXRpb246ICd0eXBlSW52YWxpZCcgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3ZhbGlkYXRlRmlsZUV4dGVuc2lvbihmaWxlKSkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZSwgdmFsaWRhdGlvbjogJ3Vuc3VwcG9ydGVkRXh0ZW5zaW9uJyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fdmFsaWRhdGVGaWxlU2l6ZShmaWxlKSkge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkRmlsZS5lbWl0KHsgZmlsZSwgdmFsaWRhdGlvbjogJ21heEZpbGVTaXplJyB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhbGlkYXRlRmlsZUV4dGVuc2lvbihmaWxlOiBGaWxlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnN1cHBvcnRlZEV4dGVuc2lvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCk/LnRvTG93ZXJDYXNlKCkgPz8gJyc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdXBwb3J0ZWRFeHRlbnNpb25zLmluY2x1ZGVzKGV4dGVuc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVGaWxlU2l6ZShmaWxlOiBGaWxlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLm1heEZpbGVTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsZS5zaXplIDw9IHRoaXMubWF4RmlsZVNpemU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0V2lkdGhFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnRSZWYpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB7IGxlZnQsIHJpZ2h0IH0gPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiByaWdodCAtIGxlZnQ7XG4gICAgfVxufVxuXG4iLCI8cC1jb25maXJtRGlhbG9nPjwvcC1jb25maXJtRGlhbG9nPlxuXG48aW5wdXRcbiAgICAjZmlsZUlucHV0XG4gICAgW2FjY2VwdF09XCJhY2NlcHRcIlxuICAgIGNsYXNzPVwiZmlsZS1pbnB1dFwiXG4gICAgdHlwZT1cImZpbGVcIlxuICAgIChjaGFuZ2UpPVwicGhvdG9TZWxlY3RlZCgkZXZlbnQpXCJcbi8+XG48ZGl2XG4gICAgI3VwbG9hZFBpY3R1cmVcbiAgICBjbGFzcz1cInVwbG9hZC1waWN0dXJlXCJcbj5cbiAgICA8cy10aHVtYm5haWxcbiAgICAgICAgI3RodW1ibmFpbFxuICAgICAgICBpY29uQ2xhc3M9XCJmYXIgZmEtdXNlclwiXG4gICAgICAgIFtpbWFnZVNvdXJjZV09XCJpbWFnZUJhc2U2NFwiXG4gICAgICAgIFtoYXNBY3Rpb25dPVwiIWltYWdlXCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdFBob3RvKClcIlxuICAgID5cbiAgICA8L3MtdGh1bWJuYWlsPlxuICAgIDxkaXZcbiAgICAgICAgI2luZm9cbiAgICAgICAgY2xhc3M9XCJpbmZvXCJcbiAgICA+XG4gICAgICAgIEBpZiAoaW1hZ2UpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjaGFuZ2VCdXR0b25MYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmNoYW5nZV9waG90bycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJzZWxlY3RQaG90bygpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8cy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUJ1dHRvbkxhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlUGhvdG8oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8cCBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgc2ltcGxlVGl0bGUgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5kcmFnX3lvdXJfcGhvdG9fb3InIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24tdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGhvdG8oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb25UaXRsZSB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNlbGVjdF9hX2ZpbGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICB9XG4gICAgICAgIDxwIGNsYXNzPVwic3VidGl0bGVcIj57eyBzdWJ0aXRsZSB9fTwvcD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19