@dev-tcloud/tcloud-ui 0.0.90 → 0.0.91

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 (417) hide show
  1. package/.browserslistrc +16 -0
  2. package/.editorconfig +16 -0
  3. package/.vscode/extensions.json +4 -0
  4. package/.vscode/launch.json +20 -0
  5. package/.vscode/tasks.json +42 -0
  6. package/README.md +79 -79
  7. package/angular.json +147 -0
  8. package/karma.conf.js +44 -0
  9. package/ng-package.json +7 -0
  10. package/package.json +612 -24
  11. package/projects/tcloud-ui/README.md +80 -0
  12. package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/buttons.scss +1 -1
  13. package/projects/tcloud-ui/karma.conf.js +44 -0
  14. package/projects/tcloud-ui/ng-package.json +7 -0
  15. package/projects/tcloud-ui/package.json +11 -0
  16. package/projects/tcloud-ui/src/lib/_directives/align/align.directive.ts +42 -0
  17. package/projects/tcloud-ui/src/lib/_directives/directives.module.ts +18 -0
  18. package/projects/tcloud-ui/src/lib/_directives/hover-parent/hover-parent.directive.ts +52 -0
  19. package/projects/tcloud-ui/src/lib/_directives/tooltip/tooltip.directive.ts +179 -0
  20. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-body/tcloud-ui-accordion-body.component.html +3 -0
  21. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-body/tcloud-ui-accordion-body.component.scss +8 -0
  22. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-body/tcloud-ui-accordion-body.component.ts +26 -0
  23. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-title/tcloud-ui-accordion-title.component.css +31 -0
  24. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-title/tcloud-ui-accordion-title.component.html +17 -0
  25. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-title/tcloud-ui-accordion-title.component.ts +62 -0
  26. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/services/tcloud-ui-accordion.service.ts +46 -0
  27. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.component.css +11 -0
  28. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.component.html +3 -0
  29. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.component.ts +77 -0
  30. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.module.ts +24 -0
  31. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.component.html +45 -0
  32. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.component.scss +88 -0
  33. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.component.ts +95 -0
  34. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.module.ts +21 -0
  35. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-data-list/services/data-list.service.ts +42 -0
  36. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list-option/tcloud-ui-data-list-option.component.html +13 -0
  37. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list-option/tcloud-ui-data-list-option.component.scss +25 -0
  38. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list-option/tcloud-ui-data-list-option.component.ts +64 -0
  39. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.component.html +58 -0
  40. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.component.scss +136 -0
  41. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.component.ts +352 -0
  42. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.module.ts +25 -0
  43. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.ts +4 -0
  44. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker/datepicker/css/datepicker.min.css +1 -0
  45. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker/datepicker/css/style.css +4 -0
  46. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.component.html +45 -0
  47. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.component.scss +44 -0
  48. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.component.ts +378 -0
  49. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.module.ts +21 -0
  50. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component.html +95 -0
  51. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component.scss +154 -0
  52. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component.ts +366 -0
  53. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.module.ts +23 -0
  54. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.html +56 -0
  55. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.scss +67 -0
  56. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.ts +245 -0
  57. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.html +156 -0
  58. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.scss +69 -0
  59. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.ts +501 -0
  60. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.module.ts +28 -0
  61. package/{lib/_modules/tcloud-ui-filters/tcloud-ui-filters.d.ts → projects/tcloud-ui/src/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.ts} +12 -6
  62. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.component.html +14 -0
  63. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.component.scss +33 -0
  64. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.component.spec.ts +23 -0
  65. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.component.ts +69 -0
  66. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.module.ts +21 -0
  67. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.component.html +15 -0
  68. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.component.scss +68 -0
  69. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.component.ts +102 -0
  70. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.module.ts +18 -0
  71. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.component.html +9 -0
  72. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.component.scss +34 -0
  73. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.component.ts +74 -0
  74. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.module.ts +18 -0
  75. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-body/tcloud-ui-modal-body.component.html +3 -0
  76. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-body/tcloud-ui-modal-body.component.scss +3 -0
  77. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-body/tcloud-ui-modal-body.component.ts +15 -0
  78. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-footer/tcloud-ui-modal-footer.component.html +30 -0
  79. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-footer/tcloud-ui-modal-footer.component.scss +30 -0
  80. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-footer/tcloud-ui-modal-footer.component.ts +66 -0
  81. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-header/tcloud-ui-modal-header.component.html +6 -0
  82. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-header/tcloud-ui-modal-header.component.scss +32 -0
  83. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-header/tcloud-ui-modal-header.component.ts +18 -0
  84. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/services/tcloud-modal.service.ts +66 -0
  85. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.component.html +54 -0
  86. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.component.scss +83 -0
  87. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.component.ts +185 -0
  88. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.module.ts +31 -0
  89. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.ts +4 -0
  90. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.component.html +43 -0
  91. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.component.scss +111 -0
  92. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.component.ts +180 -0
  93. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.module.ts +15 -0
  94. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.component.html +54 -0
  95. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.component.scss +97 -0
  96. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.component.ts +189 -0
  97. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.module.ts +15 -0
  98. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.component.html +182 -0
  99. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.component.scss +272 -0
  100. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.component.ts +359 -0
  101. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.module.ts +23 -0
  102. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.component.html +6 -0
  103. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.component.scss +21 -0
  104. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.component.ts +19 -0
  105. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.module.ts +16 -0
  106. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.component.html +33 -0
  107. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.component.scss +117 -0
  108. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.component.spec.ts +23 -0
  109. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.component.ts +106 -0
  110. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.module.ts +18 -0
  111. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.component.html +5 -0
  112. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.component.scss +37 -0
  113. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.component.spec.ts +23 -0
  114. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.component.ts +18 -0
  115. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.module.ts +18 -0
  116. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-content/tcloud-ui-tab-content.component.html +4 -0
  117. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-content/tcloud-ui-tab-content.component.scss +7 -0
  118. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-content/tcloud-ui-tab-content.component.ts +39 -0
  119. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-head/tcloud-ui-tab-head.component.html +24 -0
  120. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-head/tcloud-ui-tab-head.component.scss +85 -0
  121. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-head/tcloud-ui-tab-head.component.ts +76 -0
  122. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-subtitle/tcloud-ui-tab-subtitle.component.html +3 -0
  123. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-subtitle/tcloud-ui-tab-subtitle.component.scss +23 -0
  124. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-subtitle/tcloud-ui-tab-subtitle.component.ts +66 -0
  125. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-title/tcloud-ui-tab-title.component.html +3 -0
  126. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-title/tcloud-ui-tab-title.component.scss +74 -0
  127. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-title/tcloud-ui-tab-title.component.ts +68 -0
  128. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/services/tab-menu.service.ts +102 -0
  129. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.component.html +3 -0
  130. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.component.scss +13 -0
  131. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.component.ts +59 -0
  132. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.module.ts +30 -0
  133. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.ts +4 -0
  134. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-table/tcloud-ui-table.component.html +4 -0
  135. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-table/tcloud-ui-table.component.scss +0 -0
  136. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-table/tcloud-ui-table.component.spec.ts +23 -0
  137. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-table/tcloud-ui-table.component.ts +18 -0
  138. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-table/tcloud-ui-table.module.ts +18 -0
  139. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.component.html +22 -0
  140. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.component.scss +52 -0
  141. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.component.ts +22 -0
  142. package/projects/tcloud-ui/src/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.module.ts +18 -0
  143. package/projects/tcloud-ui/src/lib/_pipes/bytes.ts +17 -0
  144. package/projects/tcloud-ui/src/lib/_pipes/cnpj.ts +27 -0
  145. package/projects/tcloud-ui/src/lib/_pipes/cpf.ts +27 -0
  146. package/projects/tcloud-ui/src/lib/_pipes/datebr.ts +80 -0
  147. package/{lib/_pipes/index.d.ts → projects/tcloud-ui/src/lib/_pipes/index.ts} +1 -1
  148. package/projects/tcloud-ui/src/lib/_pipes/monthname.ts +23 -0
  149. package/projects/tcloud-ui/src/lib/_pipes/respective.ts +79 -0
  150. package/projects/tcloud-ui/src/lib/_pipes/statusinfo.ts +79 -0
  151. package/projects/tcloud-ui/src/lib/_pipes/tcloud-pipes.module.ts +43 -0
  152. package/projects/tcloud-ui/src/lib/_services/loading-transitions.service.ts +59 -0
  153. package/projects/tcloud-ui/src/lib/_services/search-in-object.service.ts +100 -0
  154. package/projects/tcloud-ui/src/lib/tcloud-ui.module.ts +92 -0
  155. package/{public-api.d.ts → projects/tcloud-ui/src/public-api.ts} +107 -59
  156. package/projects/tcloud-ui/src/test.ts +27 -0
  157. package/projects/tcloud-ui/tsconfig.lib.json +15 -0
  158. package/projects/tcloud-ui/tsconfig.lib.prod.json +10 -0
  159. package/projects/tcloud-ui/tsconfig.spec.json +17 -0
  160. package/scripts/copy-artifacts.js +40 -0
  161. package/src/app/app.component.html +151 -0
  162. package/src/app/app.component.scss +0 -0
  163. package/src/app/app.component.ts +16 -0
  164. package/src/app/app.module.ts +77 -0
  165. package/src/app/pages/ui-accordion/ui-accordion.component.html +13 -0
  166. package/src/app/pages/ui-accordion/ui-accordion.component.scss +0 -0
  167. package/src/app/pages/ui-accordion/ui-accordion.component.ts +28 -0
  168. package/src/app/pages/ui-choice-issues/ui-choice-issues.component.html +8 -0
  169. package/src/app/pages/ui-choice-issues/ui-choice-issues.component.scss +0 -0
  170. package/src/app/pages/ui-choice-issues/ui-choice-issues.component.ts +21 -0
  171. package/src/app/pages/ui-data-list/ui-data-list.component.html +41 -0
  172. package/src/app/pages/ui-data-list/ui-data-list.component.scss +0 -0
  173. package/src/app/pages/ui-data-list/ui-data-list.component.ts +82 -0
  174. package/src/app/pages/ui-datepicker/ui-datepicker.component.html +27 -0
  175. package/src/app/pages/ui-datepicker/ui-datepicker.component.scss +0 -0
  176. package/src/app/pages/ui-datepicker/ui-datepicker.component.ts +17 -0
  177. package/src/app/pages/ui-datepicker-time/ui-datepicker-time.component.html +7 -0
  178. package/src/app/pages/ui-datepicker-time/ui-datepicker-time.component.scss +0 -0
  179. package/src/app/pages/ui-datepicker-time/ui-datepicker-time.component.ts +21 -0
  180. package/src/app/pages/ui-filters/ui-filters.component.html +27 -0
  181. package/src/app/pages/ui-filters/ui-filters.component.scss +0 -0
  182. package/src/app/pages/ui-filters/ui-filters.component.ts +147 -0
  183. package/src/app/pages/ui-hover-parent/ui-hover-parent.component.html +14 -0
  184. package/src/app/pages/ui-hover-parent/ui-hover-parent.component.scss +22 -0
  185. package/src/app/pages/ui-hover-parent/ui-hover-parent.component.ts +15 -0
  186. package/src/app/pages/ui-input-search/ui-input-search.component.html +19 -0
  187. package/src/app/pages/ui-input-search/ui-input-search.component.scss +0 -0
  188. package/src/app/pages/ui-input-search/ui-input-search.component.ts +100 -0
  189. package/src/app/pages/ui-line-step-circle/ui-line-step-circle.component.html +1 -0
  190. package/src/app/pages/ui-line-step-circle/ui-line-step-circle.component.scss +0 -0
  191. package/src/app/pages/ui-line-step-circle/ui-line-step-circle.component.ts +21 -0
  192. package/src/app/pages/ui-linha-logo/ui-linha-logo.component.html +1 -0
  193. package/src/app/pages/ui-linha-logo/ui-linha-logo.component.scss +0 -0
  194. package/src/app/pages/ui-linha-logo/ui-linha-logo.component.ts +15 -0
  195. package/src/app/pages/ui-loading-transitions/ui-loading-transitions.component.html +3 -0
  196. package/src/app/pages/ui-loading-transitions/ui-loading-transitions.component.scss +0 -0
  197. package/src/app/pages/ui-loading-transitions/ui-loading-transitions.component.ts +30 -0
  198. package/src/app/pages/ui-modal/ui-modal.component.html +20 -0
  199. package/src/app/pages/ui-modal/ui-modal.component.scss +0 -0
  200. package/src/app/pages/ui-modal/ui-modal.component.ts +18 -0
  201. package/src/app/pages/ui-multi-input/ui-multi-input.component.html +14 -0
  202. package/src/app/pages/ui-multi-input/ui-multi-input.component.scss +0 -0
  203. package/src/app/pages/ui-multi-input/ui-multi-input.component.ts +41 -0
  204. package/src/app/pages/ui-multi-select/ui-multi-select.component.html +14 -0
  205. package/src/app/pages/ui-multi-select/ui-multi-select.component.scss +0 -0
  206. package/src/app/pages/ui-multi-select/ui-multi-select.component.ts +51 -0
  207. package/src/app/pages/ui-multiples-values/ui-multiples-values.component.html +8 -0
  208. package/src/app/pages/ui-multiples-values/ui-multiples-values.component.scss +0 -0
  209. package/src/app/pages/ui-multiples-values/ui-multiples-values.component.ts +25 -0
  210. package/src/app/pages/ui-not-found/ui-not-found.component.html +1 -0
  211. package/src/app/pages/ui-not-found/ui-not-found.component.scss +0 -0
  212. package/src/app/pages/ui-not-found/ui-not-found.component.ts +15 -0
  213. package/src/app/pages/ui-number-step/ui-number-step.component.html +11 -0
  214. package/src/app/pages/ui-number-step/ui-number-step.component.scss +0 -0
  215. package/src/app/pages/ui-number-step/ui-number-step.component.ts +21 -0
  216. package/src/app/pages/ui-scroll-box/ui-scroll-box.component.html +69 -0
  217. package/src/app/pages/ui-scroll-box/ui-scroll-box.component.scss +0 -0
  218. package/src/app/pages/ui-scroll-box/ui-scroll-box.component.ts +15 -0
  219. package/src/app/pages/ui-search-in-object/ui-search-in-object.component.html +27 -0
  220. package/src/app/pages/ui-search-in-object/ui-search-in-object.component.scss +0 -0
  221. package/src/app/pages/ui-search-in-object/ui-search-in-object.component.ts +28 -0
  222. package/src/app/pages/ui-tab-menu/ui-tab-menu.component.html +12 -0
  223. package/src/app/pages/ui-tab-menu/ui-tab-menu.component.scss +0 -0
  224. package/src/app/pages/ui-tab-menu/ui-tab-menu.component.spec.ts +23 -0
  225. package/src/app/pages/ui-tab-menu/ui-tab-menu.component.ts +19 -0
  226. package/src/app/pages/ui-table/ui-table.component.html +37 -0
  227. package/src/app/pages/ui-table/ui-table.component.scss +0 -0
  228. package/src/app/pages/ui-table/ui-table.component.ts +15 -0
  229. package/src/app/pages/ui-tooltip/ui-tooltip.component.html +17 -0
  230. package/src/app/pages/ui-tooltip/ui-tooltip.component.scss +0 -0
  231. package/src/app/pages/ui-tooltip/ui-tooltip.component.ts +15 -0
  232. package/src/app/pages/ui-welcome/ui-welcome.component.html +6 -0
  233. package/src/app/pages/ui-welcome/ui-welcome.component.scss +0 -0
  234. package/src/app/pages/ui-welcome/ui-welcome.component.ts +19 -0
  235. package/src/assets/.gitkeep +0 -0
  236. package/src/assets/css/bootstrap.min.css +7 -0
  237. package/src/assets/css/style.css +8351 -0
  238. package/src/environments/environment.prod.ts +3 -0
  239. package/src/environments/environment.ts +16 -0
  240. package/src/favicon.ico +0 -0
  241. package/src/index.html +18 -0
  242. package/src/main.ts +12 -0
  243. package/src/polyfills.ts +53 -0
  244. package/src/test.ts +26 -0
  245. package/tsconfig.app.json +15 -0
  246. package/tsconfig.json +38 -0
  247. package/tsconfig.spec.json +18 -0
  248. package/esm2020/dev-tcloud-tcloud-ui.mjs +0 -5
  249. package/esm2020/lib/_directives/align/align.directive.mjs +0 -39
  250. package/esm2020/lib/_directives/directives.module.mjs +0 -30
  251. package/esm2020/lib/_directives/hover-parent/hover-parent.directive.mjs +0 -58
  252. package/esm2020/lib/_directives/tooltip/tooltip.directive.mjs +0 -163
  253. package/esm2020/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-body/tcloud-ui-accordion-body.component.mjs +0 -22
  254. package/esm2020/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-title/tcloud-ui-accordion-title.component.mjs +0 -54
  255. package/esm2020/lib/_modules/tcloud-ui-accordion/services/tcloud-ui-accordion.service.mjs +0 -38
  256. package/esm2020/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.component.mjs +0 -75
  257. package/esm2020/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.module.mjs +0 -34
  258. package/esm2020/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.component.mjs +0 -88
  259. package/esm2020/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.module.mjs +0 -31
  260. package/esm2020/lib/_modules/tcloud-ui-data-list/services/data-list.service.mjs +0 -38
  261. package/esm2020/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list-option/tcloud-ui-data-list-option.component.mjs +0 -60
  262. package/esm2020/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.component.mjs +0 -317
  263. package/esm2020/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.mjs +0 -3
  264. package/esm2020/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.module.mjs +0 -36
  265. package/esm2020/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.component.mjs +0 -303
  266. package/esm2020/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.module.mjs +0 -31
  267. package/esm2020/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component.mjs +0 -311
  268. package/esm2020/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.module.mjs +0 -39
  269. package/esm2020/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.mjs +0 -186
  270. package/esm2020/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.mjs +0 -479
  271. package/esm2020/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.mjs +0 -19
  272. package/esm2020/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.module.mjs +0 -44
  273. package/esm2020/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.component.mjs +0 -66
  274. package/esm2020/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.module.mjs +0 -31
  275. package/esm2020/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.component.mjs +0 -93
  276. package/esm2020/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.module.mjs +0 -24
  277. package/esm2020/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.component.mjs +0 -65
  278. package/esm2020/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.module.mjs +0 -24
  279. package/esm2020/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-body/tcloud-ui-modal-body.component.mjs +0 -14
  280. package/esm2020/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-footer/tcloud-ui-modal-footer.component.mjs +0 -61
  281. package/esm2020/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-header/tcloud-ui-modal-header.component.mjs +0 -21
  282. package/esm2020/lib/_modules/tcloud-ui-modal/services/tcloud-modal.service.mjs +0 -56
  283. package/esm2020/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.component.mjs +0 -196
  284. package/esm2020/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.mjs +0 -2
  285. package/esm2020/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.module.mjs +0 -46
  286. package/esm2020/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.component.mjs +0 -168
  287. package/esm2020/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.module.mjs +0 -27
  288. package/esm2020/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.component.mjs +0 -180
  289. package/esm2020/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.module.mjs +0 -27
  290. package/esm2020/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.component.mjs +0 -309
  291. package/esm2020/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.module.mjs +0 -35
  292. package/esm2020/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.component.mjs +0 -20
  293. package/esm2020/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.module.mjs +0 -24
  294. package/esm2020/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.component.mjs +0 -99
  295. package/esm2020/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.module.mjs +0 -24
  296. package/esm2020/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.component.mjs +0 -21
  297. package/esm2020/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.module.mjs +0 -24
  298. package/esm2020/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-content/tcloud-ui-tab-content.component.mjs +0 -36
  299. package/esm2020/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-head/tcloud-ui-tab-head.component.mjs +0 -68
  300. package/esm2020/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-subtitle/tcloud-ui-tab-subtitle.component.mjs +0 -62
  301. package/esm2020/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-title/tcloud-ui-tab-title.component.mjs +0 -64
  302. package/esm2020/lib/_modules/tcloud-ui-tab-menu/services/tab-menu.service.mjs +0 -86
  303. package/esm2020/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.component.mjs +0 -56
  304. package/esm2020/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.mjs +0 -2
  305. package/esm2020/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.module.mjs +0 -44
  306. package/esm2020/lib/_modules/tcloud-ui-table/tcloud-ui-table.component.mjs +0 -21
  307. package/esm2020/lib/_modules/tcloud-ui-table/tcloud-ui-table.module.mjs +0 -24
  308. package/esm2020/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.component.mjs +0 -31
  309. package/esm2020/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.module.mjs +0 -24
  310. package/esm2020/lib/_pipes/bytes.mjs +0 -23
  311. package/esm2020/lib/_pipes/cnpj.mjs +0 -37
  312. package/esm2020/lib/_pipes/cpf.mjs +0 -37
  313. package/esm2020/lib/_pipes/datebr.mjs +0 -102
  314. package/esm2020/lib/_pipes/index.mjs +0 -8
  315. package/esm2020/lib/_pipes/monthname.mjs +0 -25
  316. package/esm2020/lib/_pipes/respective.mjs +0 -73
  317. package/esm2020/lib/_pipes/statusinfo.mjs +0 -78
  318. package/esm2020/lib/_pipes/tcloud-pipes.module.mjs +0 -69
  319. package/esm2020/lib/_services/loading-transitions.service.mjs +0 -52
  320. package/esm2020/lib/_services/search-in-object.service.mjs +0 -99
  321. package/esm2020/lib/tcloud-ui.module.mjs +0 -181
  322. package/esm2020/public-api.mjs +0 -85
  323. package/fesm2015/dev-tcloud-tcloud-ui.mjs +0 -5180
  324. package/fesm2015/dev-tcloud-tcloud-ui.mjs.map +0 -1
  325. package/fesm2020/dev-tcloud-tcloud-ui.mjs +0 -5162
  326. package/fesm2020/dev-tcloud-tcloud-ui.mjs.map +0 -1
  327. package/index.d.ts +0 -5
  328. package/lib/_directives/align/align.directive.d.ts +0 -13
  329. package/lib/_directives/directives.module.d.ts +0 -9
  330. package/lib/_directives/hover-parent/hover-parent.directive.d.ts +0 -15
  331. package/lib/_directives/tooltip/tooltip.directive.d.ts +0 -34
  332. package/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-body/tcloud-ui-accordion-body.component.d.ts +0 -11
  333. package/lib/_modules/tcloud-ui-accordion/components/tcloud-ui-accordion-title/tcloud-ui-accordion-title.component.d.ts +0 -20
  334. package/lib/_modules/tcloud-ui-accordion/services/tcloud-ui-accordion.service.d.ts +0 -20
  335. package/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.component.d.ts +0 -27
  336. package/lib/_modules/tcloud-ui-accordion/tcloud-ui-accordion.module.d.ts +0 -10
  337. package/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.component.d.ts +0 -27
  338. package/lib/_modules/tcloud-ui-choice-issues/tcloud-ui-choice-issues.module.d.ts +0 -9
  339. package/lib/_modules/tcloud-ui-data-list/services/data-list.service.d.ts +0 -20
  340. package/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list-option/tcloud-ui-data-list-option.component.d.ts +0 -22
  341. package/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.component.d.ts +0 -75
  342. package/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.d.ts +0 -4
  343. package/lib/_modules/tcloud-ui-data-list/tcloud-ui-data-list.module.d.ts +0 -10
  344. package/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.component.d.ts +0 -46
  345. package/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.module.d.ts +0 -9
  346. package/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component.d.ts +0 -51
  347. package/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.module.d.ts +0 -11
  348. package/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.d.ts +0 -41
  349. package/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.d.ts +0 -62
  350. package/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.module.d.ts +0 -12
  351. package/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.component.d.ts +0 -28
  352. package/lib/_modules/tcloud-ui-input-search/tcloud-ui-input-search.module.d.ts +0 -9
  353. package/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.component.d.ts +0 -28
  354. package/lib/_modules/tcloud-ui-line-step-circle/tcloud-ui-line-step-circle.module.d.ts +0 -8
  355. package/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.component.d.ts +0 -17
  356. package/lib/_modules/tcloud-ui-linha-logo/tcloud-ui-linha-logo.module.d.ts +0 -8
  357. package/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-body/tcloud-ui-modal-body.component.d.ts +0 -8
  358. package/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-footer/tcloud-ui-modal-footer.component.d.ts +0 -26
  359. package/lib/_modules/tcloud-ui-modal/components/tcloud-ui-modal-header/tcloud-ui-modal-header.component.d.ts +0 -10
  360. package/lib/_modules/tcloud-ui-modal/services/tcloud-modal.service.d.ts +0 -24
  361. package/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.component.d.ts +0 -68
  362. package/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.d.ts +0 -4
  363. package/lib/_modules/tcloud-ui-modal/tcloud-ui-modal.module.d.ts +0 -12
  364. package/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.component.d.ts +0 -41
  365. package/lib/_modules/tcloud-ui-multi-input/tcloud-ui-multi-input.module.d.ts +0 -9
  366. package/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.component.d.ts +0 -40
  367. package/lib/_modules/tcloud-ui-multi-select/tcloud-ui-multi-select.module.d.ts +0 -9
  368. package/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.component.d.ts +0 -63
  369. package/lib/_modules/tcloud-ui-multiples-values/tcloud-ui-multiples-values.module.d.ts +0 -10
  370. package/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.component.d.ts +0 -8
  371. package/lib/_modules/tcloud-ui-not-found/tcloud-ui-not-found.module.d.ts +0 -8
  372. package/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.component.d.ts +0 -29
  373. package/lib/_modules/tcloud-ui-number-step/tcloud-ui-number-step.module.d.ts +0 -8
  374. package/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.component.d.ts +0 -10
  375. package/lib/_modules/tcloud-ui-scroll-box/tcloud-ui-scroll-box.module.d.ts +0 -8
  376. package/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-content/tcloud-ui-tab-content.component.d.ts +0 -15
  377. package/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-head/tcloud-ui-tab-head.component.d.ts +0 -21
  378. package/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-subtitle/tcloud-ui-tab-subtitle.component.d.ts +0 -21
  379. package/lib/_modules/tcloud-ui-tab-menu/components/tcloud-ui-tab-title/tcloud-ui-tab-title.component.d.ts +0 -22
  380. package/lib/_modules/tcloud-ui-tab-menu/services/tab-menu.service.d.ts +0 -28
  381. package/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.component.d.ts +0 -20
  382. package/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.d.ts +0 -4
  383. package/lib/_modules/tcloud-ui-tab-menu/tcloud-ui-tab-menu.module.d.ts +0 -12
  384. package/lib/_modules/tcloud-ui-table/tcloud-ui-table.component.d.ts +0 -10
  385. package/lib/_modules/tcloud-ui-table/tcloud-ui-table.module.d.ts +0 -8
  386. package/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.component.d.ts +0 -13
  387. package/lib/_modules/tcloud-ui-welcome/tcloud-ui-welcome.module.d.ts +0 -8
  388. package/lib/_pipes/bytes.d.ts +0 -8
  389. package/lib/_pipes/cnpj.d.ts +0 -9
  390. package/lib/_pipes/cpf.d.ts +0 -9
  391. package/lib/_pipes/datebr.d.ts +0 -11
  392. package/lib/_pipes/monthname.d.ts +0 -8
  393. package/lib/_pipes/respective.d.ts +0 -11
  394. package/lib/_pipes/statusinfo.d.ts +0 -15
  395. package/lib/_pipes/tcloud-pipes.module.d.ts +0 -14
  396. package/lib/_services/loading-transitions.service.d.ts +0 -16
  397. package/lib/_services/search-in-object.service.d.ts +0 -19
  398. package/lib/tcloud-ui.module.d.ts +0 -27
  399. /package/{datepicker → projects/tcloud-ui/assets/datepicker}/js/datepicker-full.min.js +0 -0
  400. /package/{scss → projects/tcloud-ui/assets/scss}/components/custom/loading-transitions.scss +0 -0
  401. /package/{scss → projects/tcloud-ui/assets/scss}/components/custom/table.scss +0 -0
  402. /package/{scss → projects/tcloud-ui/assets/scss}/components/custom/tooltip.scss +0 -0
  403. /package/{scss → projects/tcloud-ui/assets/scss}/components/custom/validation.scss +0 -0
  404. /package/{scss → projects/tcloud-ui/assets/scss}/components/custom/variables.scss +0 -0
  405. /package/{scss → projects/tcloud-ui/assets/scss}/components/styles.scss +0 -0
  406. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/card.scss +0 -0
  407. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/colors-prime.scss +0 -0
  408. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/colors-standard.scss +0 -0
  409. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/colors.scss +0 -0
  410. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/forms.scss +0 -0
  411. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/layout.scss +0 -0
  412. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/mixins.scss +0 -0
  413. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/tcloud-prime.scss +0 -0
  414. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/tcloud-standard.scss +0 -0
  415. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/text.scss +0 -0
  416. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/custom/variables.scss +0 -0
  417. /package/{scss → projects/tcloud-ui/assets/scss}/tcloud/styles.scss +0 -0
@@ -1,479 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
- import { TCCondition, TCFiltersType } from './tcloud-ui-filters';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
- import * as i2 from "@angular/forms";
6
- import * as i3 from "../tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component";
7
- import * as i4 from "../tcloud-ui-datepicker/tcloud-ui-datepicker.component";
8
- import * as i5 from "./components/range-date/range-date.component";
9
- export class TCloudUiFiltersComponent {
10
- constructor(datepipe) {
11
- this.datepipe = datepipe;
12
- this.datepickers = [];
13
- this.inputs = [];
14
- this.show_filters = false;
15
- this._submitText = 'Filtrar';
16
- this.btnSubmitClass = 'btn-new-grey';
17
- this.useOnChangeSubmit = true; // useOnChangeSubmit - Submit automatico quando for alterado quanquer input
18
- this.useButtonSubmit = false; // useButtonSubmit - Exibe um botão de submit e não executa a busca automaticamente
19
- this.useNormalizeCaseSensitive = true; // useNormalizeCaseSensitive - Não valida caixa alta ou baixa e caracteres especiais
20
- this.useRangeDate = true;
21
- this.useFilterAccept = false;
22
- this.result = new EventEmitter();
23
- this.onFilter = new EventEmitter();
24
- this.onChange = new EventEmitter();
25
- this.onSubmit = new EventEmitter();
26
- this.descriptionStart = '';
27
- this.descriptionStop = '';
28
- this.first_active_filter = false;
29
- this.start_stop = false;
30
- this.start_stop_width = 0;
31
- this.start_stop_und = ''; // px ou %
32
- this.first = true;
33
- this.start_filter_fc = undefined;
34
- }
35
- set data(data) {
36
- // this._data = JSON.parse(JSON.stringify(data));
37
- }
38
- get data() { return this._data; }
39
- set filters(filters) {
40
- //this._filters = filters;
41
- }
42
- get filters() { return this._filters; }
43
- set submitText(v) {
44
- if (v && v !== this._submitText) {
45
- this._submitText = v;
46
- }
47
- }
48
- get submitText() { return this._submitText; }
49
- ngOnInit() {
50
- setTimeout(() => {
51
- if (this.filters && (this.filters).length > 0) {
52
- for (let i = 0; i < (this.filters).length; i++) {
53
- if (this.filters[i].value) {
54
- if (this.filters[i].type === 'datetime-local') {
55
- try {
56
- this.filters[i].searchText = new Date(`${this.filters[i].value}`);
57
- }
58
- catch (error) { }
59
- }
60
- else {
61
- this.filters[i].searchText = this.filters[i].value;
62
- }
63
- this.first_active_filter = true;
64
- }
65
- }
66
- }
67
- this.start_stop = (this.useRangeDate) ? this.is_start_stop_datetime() : false;
68
- this.toSubmit();
69
- });
70
- }
71
- is_start_stop_datetime() {
72
- let start = false;
73
- let stop = false;
74
- if (this.filters && (this.filters).length > 0) {
75
- this.start_stop_width = 0;
76
- for (let i = 0; i < (this.filters).length; i++) {
77
- if (this.filters[i].id === 'start') {
78
- start = true;
79
- this.start_stop_width += this.getValueWidth(this.filters[i].width);
80
- this.start_stop_und = this.getUnidade(this.filters[i].width);
81
- this.descriptionStart = this.filters[i].description;
82
- }
83
- if (this.filters[i].id === 'stop') {
84
- stop = true;
85
- this.start_stop_width += this.getValueWidth(this.filters[i].width);
86
- this.descriptionStop = this.filters[i].description;
87
- }
88
- }
89
- }
90
- return (start && stop) ? true : false;
91
- }
92
- getValueWidth(v) {
93
- let und = this.getUnidade(v);
94
- v = (v).replace(und, '');
95
- return +(v);
96
- }
97
- getUnidade(v) {
98
- let und = '%';
99
- if (v && (v).includes('px')) {
100
- und = 'px';
101
- }
102
- return und;
103
- }
104
- ngOnChanges(changes) {
105
- if (changes && changes['data']) {
106
- const data = changes['data'].currentValue;
107
- if (this._data !== data) {
108
- this._data = JSON.parse(JSON.stringify(data));
109
- this.search_data = JSON.parse(JSON.stringify(data));
110
- this.init();
111
- }
112
- }
113
- if (changes && changes['filters']) {
114
- const filters = changes['filters'].currentValue;
115
- if (this._filters !== filters) {
116
- this._filters = JSON.parse(JSON.stringify(filters));
117
- this.init();
118
- }
119
- }
120
- }
121
- init() {
122
- if (this.data && this.filters) {
123
- this.show_filters = true;
124
- if (this.filters && (this.filters).length > 0) {
125
- (this.filters).forEach((filter) => {
126
- this.searchIn(filter, 'sync');
127
- });
128
- }
129
- // this.toResult();
130
- if (!this.useOnChangeSubmit) {
131
- this.result_accept(this.data);
132
- }
133
- if (this.useOnChangeSubmit || this.useButtonSubmit) {
134
- this.start_filter();
135
- }
136
- }
137
- }
138
- normalize(text) {
139
- if (this.useNormalizeCaseSensitive) {
140
- const v = (((`${text}`).normalize('NFD').replace(/[\u0300-\u036f]/g, "")).trim()).toLowerCase();
141
- return v;
142
- }
143
- return text;
144
- }
145
- toSubmit() {
146
- if (this.filters && (this.filters).length > 0) {
147
- this.init();
148
- }
149
- this.emitSubmitFilters();
150
- }
151
- emitSubmitFilters() {
152
- let filters = JSON.parse(JSON.stringify(this.filters));
153
- if (filters && (filters).length > 0) {
154
- (filters).forEach((filter, i) => {
155
- if (filter.width) {
156
- delete (filters[i].width);
157
- }
158
- if (filter.placeholder) {
159
- delete (filters[i].placeholder);
160
- }
161
- if (filter.description) {
162
- delete (filters[i].description);
163
- }
164
- if ((!filter.searchText || filter.searchText && filter.searchText === '') && filter.type !== "boolean") {
165
- delete (filters[i]);
166
- }
167
- if (filter.type === "boolean") {
168
- if (!filter.searchText) {
169
- filter.searchText = false;
170
- }
171
- }
172
- });
173
- }
174
- // console.log('onSubmit', this.filters);
175
- this.onSubmit.emit(this.filters);
176
- }
177
- collectionFind(obj, path) {
178
- const pathArray = path.split(".");
179
- let current = obj;
180
- for (let i = 0; i < pathArray.length; i++) {
181
- const key = pathArray[i];
182
- if (key.includes('[') && key.includes(']')) {
183
- const nextKeys = pathArray.slice(i + 1);
184
- const index = key.substring(key.indexOf('[') + 1, key.indexOf(']'));
185
- const arrayKey = key.substring(0, key.indexOf('['));
186
- if (current && current[arrayKey] && current[arrayKey][index]) {
187
- return this.collectionFind(current[arrayKey][index], nextKeys.join("."));
188
- }
189
- }
190
- if (key.includes("[]")) {
191
- const arrayKey = key.replace("[]", "");
192
- current = current[arrayKey] || [];
193
- const nextKeys = pathArray.slice(i + 1);
194
- const results = [];
195
- for (let j = 0; j < current.length; j++) {
196
- let result = this.collectionFind(current[j], nextKeys.join("."));
197
- if (result !== undefined) {
198
- results.push(result);
199
- }
200
- }
201
- if (results.length === 0) {
202
- return undefined;
203
- }
204
- return results;
205
- }
206
- else {
207
- if (!current || (current && !current[key])) {
208
- return undefined;
209
- }
210
- current = current[key];
211
- if (current === undefined) {
212
- return undefined;
213
- }
214
- }
215
- }
216
- return current;
217
- }
218
- searchInRange(range_date) {
219
- if (this.filters && (this.filters).length > 0) {
220
- let event = {};
221
- event.datepickertime = true;
222
- for (let i = 0; i < (this.filters).length; i++) {
223
- if (this.filters[i] && this.filters[i].id && this.filters[i].id === 'start') {
224
- this.filters[i].value = range_date?.result?.start;
225
- this.filters[i].searchText = range_date?.result?.start;
226
- event.innerValue = this.start_value = range_date?.result?.start;
227
- this.searchIn(this.filters[i], event);
228
- }
229
- if (this.filters[i] && this.filters[i].id && this.filters[i].id === 'stop') {
230
- this.filters[i].value = range_date?.result?.stop;
231
- this.filters[i].searchText = range_date?.result?.stop;
232
- event.innerValue = this.stop_value = range_date?.result?.stop;
233
- this.searchIn(this.filters[i], event);
234
- }
235
- }
236
- if (this.first || this.useOnChangeSubmit) {
237
- this.toSubmit();
238
- }
239
- }
240
- this.first = false;
241
- }
242
- convertDataToNumber(dataString) {
243
- try {
244
- const [dia, mes, ano] = dataString.split('/');
245
- return +(`${ano}${mes}${dia}`);
246
- }
247
- catch (error) { }
248
- return 0;
249
- }
250
- searchIn(item, event) {
251
- this.start_filter_fc = undefined;
252
- let isValid = true;
253
- if (event === 'sync' && isValid) {
254
- isValid = false;
255
- this.onChange.emit(true);
256
- }
257
- if (typeof event === 'boolean' && isValid) {
258
- isValid = false;
259
- item.searchText = event;
260
- this.onChange.emit(true);
261
- }
262
- if (event === undefined || event === null || event === '' && isValid) {
263
- isValid = false;
264
- item.searchText = '';
265
- this.onChange.emit(true);
266
- }
267
- if (event?.datepickertime && isValid) {
268
- isValid = false;
269
- item.searchText = event?.innerValue;
270
- this.onChange.emit(true);
271
- }
272
- if (event?.target?.value && isValid) {
273
- isValid = false;
274
- item.searchText = this.normalize(event.target.value);
275
- this.onChange.emit(true);
276
- }
277
- if (event?.target?.value === '' && isValid) {
278
- isValid = false;
279
- item.searchText = '';
280
- this.onChange.emit(true);
281
- }
282
- if (item.type === 'date-local' && item.value) {
283
- isValid = false;
284
- item.searchText = `${this.convertDataToNumber(item.value)}`;
285
- this.onChange.emit(true);
286
- }
287
- if (this.useOnChangeSubmit || this.first_active_filter) {
288
- this.start_filter_fc = this.start_filter();
289
- this.first_active_filter = false;
290
- }
291
- if (!this.useButtonSubmit) {
292
- this.emitSubmitFilters();
293
- }
294
- }
295
- start_filter() {
296
- for (let i = 0; i < (this.data).length; i++) {
297
- this.setDataIndex(i, true);
298
- for (let j = 0; j < (this.filters).length; j++) {
299
- const filter_item = this.filters[j];
300
- if (filter_item.searchText && typeof (filter_item.searchText) === 'string' && filter_item.searchText !== '' && filter_item.type !== TCFiltersType.number && filter_item.type !== TCFiltersType.date) {
301
- filter_item.searchText = this.normalize(filter_item.searchText);
302
- let item_value = this.collectionFind(this.data[i], filter_item.searchIn);
303
- if (item_value) {
304
- item_value = this.normalize(item_value);
305
- if (!(item_value.includes(filter_item.searchText) || item_value === filter_item.searchText)) {
306
- this.setDataIndex(i, false);
307
- }
308
- }
309
- else {
310
- this.setDataIndex(i, false);
311
- }
312
- }
313
- if (filter_item.searchText && filter_item.searchText instanceof Date && !isNaN(filter_item.searchText.valueOf()) && filter_item.type === TCFiltersType.datetime) {
314
- let item_value = this.collectionFind(this.data[i], filter_item.searchIn);
315
- try {
316
- item_value = new Date(item_value);
317
- }
318
- catch (error) { }
319
- if (item_value && item_value instanceof Date && !isNaN(item_value.valueOf())) {
320
- let is_accept = false;
321
- const dt_target = (filter_item.searchText).getTime() + (3 * 60 * 60 * 1000);
322
- const dt_current = (item_value).getTime();
323
- if (filter_item.condition) {
324
- switch (filter_item.condition) {
325
- case TCCondition.gt:
326
- is_accept = !(+(dt_target) > +(dt_current));
327
- break;
328
- case TCCondition.lt:
329
- is_accept = !(+(dt_target) < +(dt_current));
330
- break;
331
- case TCCondition.gte:
332
- is_accept = !(+(dt_target) >= +(dt_current));
333
- break;
334
- case TCCondition.lte:
335
- is_accept = !(+(dt_target) <= +(dt_current));
336
- break;
337
- case TCCondition.equal:
338
- is_accept = !(+(dt_target) === +(dt_current));
339
- break;
340
- default: is_accept = !(+(dt_target) == +(dt_current));
341
- }
342
- }
343
- else {
344
- is_accept = !(+(filter_item.searchText) === +(item_value));
345
- }
346
- if (!is_accept) {
347
- this.setDataIndex(i, false);
348
- }
349
- }
350
- }
351
- if (filter_item.searchText && typeof +(filter_item.searchText) === 'number' && (filter_item.type === TCFiltersType.number || filter_item.type === TCFiltersType.date)) {
352
- filter_item.searchText = Number(filter_item.searchText);
353
- let item_value = this.collectionFind(this.data[i], filter_item.searchIn);
354
- if (typeof +(item_value) === 'number') {
355
- item_value = Number(item_value);
356
- let is_accept = false;
357
- if (filter_item.condition) {
358
- switch (filter_item.condition) {
359
- case TCCondition.gt:
360
- is_accept = !(+(filter_item.searchText) > +(item_value));
361
- break;
362
- case TCCondition.lt:
363
- is_accept = !(+(filter_item.searchText) < +(item_value));
364
- break;
365
- case TCCondition.gte:
366
- is_accept = !(+(filter_item.searchText) - 0.01 >= +(item_value));
367
- break;
368
- case TCCondition.lte:
369
- is_accept = !(+(filter_item.searchText) + 0.01 <= +(item_value));
370
- break;
371
- case TCCondition.equal:
372
- is_accept = !(+(filter_item.searchText) === +(item_value));
373
- break;
374
- default: is_accept = !(+(filter_item.searchText) == +(item_value));
375
- }
376
- }
377
- else {
378
- is_accept = !(+(filter_item.searchText) === +(item_value));
379
- }
380
- if (!is_accept) {
381
- this.setDataIndex(i, false);
382
- }
383
- }
384
- }
385
- if (typeof (filter_item.searchText) === 'boolean' && filter_item.searchText) {
386
- let item_value = this.collectionFind(this.data[i], filter_item.searchIn);
387
- if (item_value && (item_value).length > 0) {
388
- let qtd_is_true = 0;
389
- for (let i = 0; i < ((item_value).length); i++) {
390
- const item = item_value[i];
391
- if (item === filter_item.searchText) {
392
- qtd_is_true++;
393
- }
394
- }
395
- if (qtd_is_true === 0) {
396
- this.setDataIndex(i, false);
397
- }
398
- }
399
- else {
400
- if (!(item_value === filter_item.searchText)) {
401
- this.setDataIndex(i, false);
402
- }
403
- }
404
- }
405
- }
406
- } // end for
407
- this.toResult();
408
- }
409
- toResult() {
410
- const search_data = [];
411
- let is_filter = false;
412
- for (let i = 0; i < (this.filters).length; i++) {
413
- if (this.filters[i].searchText && this.filters[i].searchText !== '') {
414
- is_filter = true;
415
- }
416
- }
417
- if (is_filter) {
418
- for (let i = 0; i < (this.data).length; i++) {
419
- if (this.data && this.data[i] && this.data[i]['tc_filter_accept']) {
420
- (search_data).push(this.data[i]);
421
- }
422
- }
423
- this.result_accept(search_data);
424
- this.onFilter.emit({ ...this.filters });
425
- return;
426
- }
427
- this.result_accept(this.data);
428
- this.onFilter.emit({ ...this.filters });
429
- }
430
- setDataIndex(index, value) {
431
- if (this.data && this.data[index]) {
432
- this.data[index]['tc_filter_accept'] = value;
433
- }
434
- }
435
- result_accept(data) {
436
- if (!this.useFilterAccept && data && (data).length > 0) {
437
- for (let i = 0; i < (data).length; i++) {
438
- delete data[i]['tc_filter_accept'];
439
- }
440
- }
441
- this.result.emit(data);
442
- }
443
- }
444
- TCloudUiFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiFiltersComponent, deps: [{ token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
445
- TCloudUiFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiFiltersComponent, selector: "tcloud-ui-filters", inputs: { data: "data", filters: "filters", submitText: "submitText", btnSubmitClass: "btnSubmitClass", useOnChangeSubmit: "useOnChangeSubmit", useButtonSubmit: "useButtonSubmit", useNormalizeCaseSensitive: "useNormalizeCaseSensitive", useRangeDate: "useRangeDate", useFilterAccept: "useFilterAccept" }, outputs: { result: "result", onFilter: "onFilter", onChange: "onChange", onSubmit: "onSubmit" }, viewQueries: [{ propertyName: "_formulario", first: true, predicate: ["_formulario"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"show_filters\" class=\"area-filter\">\n <ng-container *ngFor=\"let item of filters; let i = index\">\n\n <ng-container *ngIf=\"!item.type || (item.type && item.type !== 'boolean')\">\n\n <ng-container *ngIf=\"item.type === 'date-local'\">\n\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"box-type-{{item.type}}\">\n <tcloud-ui-datepicker \n #_input\n name=\"input_{{i+1}}\"\n [modeInput]=\"true\"\n [(ngModel)]=\"item.value\"\n (ngModelChange)=\"searchIn(item, _input)\">\n </tcloud-ui-datepicker>\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n\n \n </ng-container>\n\n <ng-container *ngIf=\"item.type !== 'date-local'\">\n <ng-container *ngIf=\"item.type === 'datetime-local'\">\n\n <ng-container *ngIf=\"start_stop\">\n <ng-container *ngIf=\"item.id === 'start'\">\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+start_stop_width+''+start_stop_und : ''\">\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"(_range_date && _range_date.result && _range_date.result.start && _range_date.result.stop )\" class=\"fas fa-filter icon-filter\"></i>&nbsp;</div>\n <range-date \n #_range_date ngModel name=\"input_{{i+1}}\" \n [defaultValuePeriodStartStop]=\"item.defaultValuePeriodStartStop\"\n [descriptionStart]=\"descriptionStart\"\n [descriptionStop]=\"descriptionStop\"\n [UTC]=\"(item && item.UTC) ? true : false\"\n required \n (onChange)=\"searchInRange(_range_date); searchIn(item, _range_date)\">\n </range-date>\n </div>\n </ng-container> \n <input *ngIf=\"item.id === 'start'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"start_value\"> \n <input *ngIf=\"item.id === 'stop'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"stop_value\"> \n </ng-container>\n\n <ng-container *ngIf=\"!start_stop\">\n\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"box-type-{{item.type}}\">\n <tcloud-ui-datepicker-time \n #_input \n [(ngModel)]=\"item.value\" \n name=\"input_{{i+1}}\" \n [useOptionsDateTime]=\"(item && item.useOptionsDateTime) ? true : false\"\n [UTC]=\"(item && item.UTC) ? true : false\"\n (eventChange)=\"searchIn(item, _input)\" >\n </tcloud-ui-datepicker-time>\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n\n </ng-container>\n\n </ng-container>\n </ng-container>\n \n <ng-container *ngIf=\"item.type !== 'select' && item.type !== 'datetime-local' && item.type !== 'date-local'\">\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"box-type-{{item.type}}\">\n <input \n #_input\n [(ngModel)]=\"item.value\"\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\n name=\"input_{{i+1}}\" \n type=\"{{ (item.type === 'number') ? 'text' : item.type }}\" \n class=\"form-control tc-form-control\" \n (keyup)=\"searchIn(item, $event)\"> \n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"_input.value === ''\" (click)=\"searchIn(item, null); _input.value = ''\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.type === 'select' && item.data && (item.data).length > 0\" >\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"box-type-{{item.type}}\">\n <select \n #_input\n [(ngModel)]=\"item.value\"\n name=\"input_{{i+1}}\" \n class=\"form-control tc-form-control\" \n (change)=\"searchIn(item, $event)\">\n <option [ngValue]=\"\"></option>\n <ng-container *ngFor=\"let v of item.data\">\n <option [value]=\"v.value\">{{ v.description }}</option>\n </ng-container>\n </select>\n </div>\n </div>\n </ng-container>\n\n </ng-container>\n\n\n <ng-container *ngIf=\"item.type && item.type === 'boolean'\">\n \n <div class=\"box-filter-input\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n <div class=\"m-description\"><i [class.to-active]=\"_input.checked === true\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"area-input-checkbox\">\n <div class=\"form-control tc-form-control\">\n <label>\n {{ item.placeholder }}\n <input \n #_input\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\n name=\"input_{{i+1}}\" \n type=\"checkbox\" \n (change)=\"searchIn(item, _input.checked)\"> \n </label>\n </div> \n </div>\n </div>\n\n </ng-container>\n\n\n </ng-container>\n\n <div class=\"text-right mb-1 mr-1\" *ngIf=\"useButtonSubmit\">\n <button type=\"button\" class=\"tc-btn {{ btnSubmitClass }}\" (click)=\"toSubmit()\" >{{ submitText }}</button>\n </div>\n\n</div>\n\n<!-- <pre>{{ inputs | json }}</pre> -->\n <!-- <pre> {{ data | json }} </pre>\n\n<p>FILTERS</p>\n<pre> {{ filters | json }}</pre> -->\n\n<!--\n <pre>start_stop: {{ start_stop }}</pre>\n <pre>start_stop_width: {{ start_stop_width }}</pre>\n <pre>start_stop_und: {{ start_stop_und }}</pre>\n-->", styles: [".box-filter-input{display:inline-grid;padding:10px 5px;position:relative}.area-filter{border:1px solid #eeeeee;border-radius:5px;margin-bottom:5px}.btn-clear-filter-text{position:absolute;right:8px;top:38px;background-color:#fff;border:none;cursor:pointer;color:#aaa}.to-hide{display:none}.icon-filter{color:#ccc}.to-active{color:var(--verde)}.area-input-checkbox label{cursor:pointer;margin-bottom:0;color:#9f9f9f}.area-input-checkbox div.tc-form-control{height:40px}.m-description{margin-bottom:3px}input{color:#535353}input[type=text],input[type=number],select{height:40px!important}.type-hidden{display:none;width:0px!important}.box-type-global_vars{display:none!important;width:0px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.TCloudUiDatepickerTimeComponent, selector: "tcloud-ui-datepicker-time", inputs: ["UTC", "ngModel", "useOptionsDateTime"], outputs: ["ngModelChange", "onChange", "eventChange"] }, { kind: "component", type: i4.TCloudUiDatepickerComponent, selector: "tcloud-ui-datepicker", inputs: ["multiple", "maxNumberOfDates", "daysOfWeekDisabled", "minDate", "maxDate", "datesDisabled", "modeInput", "useBorder", "ngModel", "code"], outputs: ["onChange", "ngModelChange"] }, { kind: "component", type: i5.TCloudUiRangeDateComponent, selector: "range-date", inputs: ["defaultValuePeriodStartStop", "required", "descriptionStart", "descriptionStop", "UTC"], outputs: ["onChange"] }] });
446
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiFiltersComponent, decorators: [{
447
- type: Component,
448
- args: [{ selector: 'tcloud-ui-filters', template: "<div *ngIf=\"show_filters\" class=\"area-filter\">\n <ng-container *ngFor=\"let item of filters; let i = index\">\n\n <ng-container *ngIf=\"!item.type || (item.type && item.type !== 'boolean')\">\n\n <ng-container *ngIf=\"item.type === 'date-local'\">\n\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"box-type-{{item.type}}\">\n <tcloud-ui-datepicker \n #_input\n name=\"input_{{i+1}}\"\n [modeInput]=\"true\"\n [(ngModel)]=\"item.value\"\n (ngModelChange)=\"searchIn(item, _input)\">\n </tcloud-ui-datepicker>\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n\n \n </ng-container>\n\n <ng-container *ngIf=\"item.type !== 'date-local'\">\n <ng-container *ngIf=\"item.type === 'datetime-local'\">\n\n <ng-container *ngIf=\"start_stop\">\n <ng-container *ngIf=\"item.id === 'start'\">\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+start_stop_width+''+start_stop_und : ''\">\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"(_range_date && _range_date.result && _range_date.result.start && _range_date.result.stop )\" class=\"fas fa-filter icon-filter\"></i>&nbsp;</div>\n <range-date \n #_range_date ngModel name=\"input_{{i+1}}\" \n [defaultValuePeriodStartStop]=\"item.defaultValuePeriodStartStop\"\n [descriptionStart]=\"descriptionStart\"\n [descriptionStop]=\"descriptionStop\"\n [UTC]=\"(item && item.UTC) ? true : false\"\n required \n (onChange)=\"searchInRange(_range_date); searchIn(item, _range_date)\">\n </range-date>\n </div>\n </ng-container> \n <input *ngIf=\"item.id === 'start'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"start_value\"> \n <input *ngIf=\"item.id === 'stop'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"stop_value\"> \n </ng-container>\n\n <ng-container *ngIf=\"!start_stop\">\n\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"box-type-{{item.type}}\">\n <tcloud-ui-datepicker-time \n #_input \n [(ngModel)]=\"item.value\" \n name=\"input_{{i+1}}\" \n [useOptionsDateTime]=\"(item && item.useOptionsDateTime) ? true : false\"\n [UTC]=\"(item && item.UTC) ? true : false\"\n (eventChange)=\"searchIn(item, _input)\" >\n </tcloud-ui-datepicker-time>\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n\n </ng-container>\n\n </ng-container>\n </ng-container>\n \n <ng-container *ngIf=\"item.type !== 'select' && item.type !== 'datetime-local' && item.type !== 'date-local'\">\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"box-type-{{item.type}}\">\n <input \n #_input\n [(ngModel)]=\"item.value\"\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\n name=\"input_{{i+1}}\" \n type=\"{{ (item.type === 'number') ? 'text' : item.type }}\" \n class=\"form-control tc-form-control\" \n (keyup)=\"searchIn(item, $event)\"> \n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"_input.value === ''\" (click)=\"searchIn(item, null); _input.value = ''\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.type === 'select' && item.data && (item.data).length > 0\" >\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n\n <div class=\"m-description box-type-{{item.type}}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"box-type-{{item.type}}\">\n <select \n #_input\n [(ngModel)]=\"item.value\"\n name=\"input_{{i+1}}\" \n class=\"form-control tc-form-control\" \n (change)=\"searchIn(item, $event)\">\n <option [ngValue]=\"\"></option>\n <ng-container *ngFor=\"let v of item.data\">\n <option [value]=\"v.value\">{{ v.description }}</option>\n </ng-container>\n </select>\n </div>\n </div>\n </ng-container>\n\n </ng-container>\n\n\n <ng-container *ngIf=\"item.type && item.type === 'boolean'\">\n \n <div class=\"box-filter-input\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\n <div class=\"m-description\"><i [class.to-active]=\"_input.checked === true\" class=\"fas fa-filter icon-filter\"></i>&nbsp;{{ item.description }}</div>\n <div class=\"area-input-checkbox\">\n <div class=\"form-control tc-form-control\">\n <label>\n {{ item.placeholder }}\n <input \n #_input\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\n name=\"input_{{i+1}}\" \n type=\"checkbox\" \n (change)=\"searchIn(item, _input.checked)\"> \n </label>\n </div> \n </div>\n </div>\n\n </ng-container>\n\n\n </ng-container>\n\n <div class=\"text-right mb-1 mr-1\" *ngIf=\"useButtonSubmit\">\n <button type=\"button\" class=\"tc-btn {{ btnSubmitClass }}\" (click)=\"toSubmit()\" >{{ submitText }}</button>\n </div>\n\n</div>\n\n<!-- <pre>{{ inputs | json }}</pre> -->\n <!-- <pre> {{ data | json }} </pre>\n\n<p>FILTERS</p>\n<pre> {{ filters | json }}</pre> -->\n\n<!--\n <pre>start_stop: {{ start_stop }}</pre>\n <pre>start_stop_width: {{ start_stop_width }}</pre>\n <pre>start_stop_und: {{ start_stop_und }}</pre>\n-->", styles: [".box-filter-input{display:inline-grid;padding:10px 5px;position:relative}.area-filter{border:1px solid #eeeeee;border-radius:5px;margin-bottom:5px}.btn-clear-filter-text{position:absolute;right:8px;top:38px;background-color:#fff;border:none;cursor:pointer;color:#aaa}.to-hide{display:none}.icon-filter{color:#ccc}.to-active{color:var(--verde)}.area-input-checkbox label{cursor:pointer;margin-bottom:0;color:#9f9f9f}.area-input-checkbox div.tc-form-control{height:40px}.m-description{margin-bottom:3px}input{color:#535353}input[type=text],input[type=number],select{height:40px!important}.type-hidden{display:none;width:0px!important}.box-type-global_vars{display:none!important;width:0px!important}\n"] }]
449
- }], ctorParameters: function () { return [{ type: i1.DatePipe }]; }, propDecorators: { _formulario: [{
450
- type: ViewChild,
451
- args: ['_formulario']
452
- }], data: [{
453
- type: Input
454
- }], filters: [{
455
- type: Input
456
- }], submitText: [{
457
- type: Input
458
- }], btnSubmitClass: [{
459
- type: Input
460
- }], useOnChangeSubmit: [{
461
- type: Input
462
- }], useButtonSubmit: [{
463
- type: Input
464
- }], useNormalizeCaseSensitive: [{
465
- type: Input
466
- }], useRangeDate: [{
467
- type: Input
468
- }], useFilterAccept: [{
469
- type: Input
470
- }], result: [{
471
- type: Output
472
- }], onFilter: [{
473
- type: Output
474
- }], onChange: [{
475
- type: Output
476
- }], onSubmit: [{
477
- type: Output
478
- }] } });
479
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWZpbHRlcnMvdGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWZpbHRlcnMvdGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwSCxPQUFPLEVBQUUsV0FBVyxFQUFpQixhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQU9oRixNQUFNLE9BQU8sd0JBQXdCO0lBcURuQyxZQUNVLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFwRDVCLGdCQUFXLEdBQUcsRUFBUyxDQUFDO1FBSXhCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFFdEIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFnQnRCLGdCQUFXLEdBQVcsU0FBUyxDQUFDO1FBUS9CLG1CQUFjLEdBQVcsY0FBYyxDQUFDO1FBQ3hDLHNCQUFpQixHQUFZLElBQUksQ0FBQyxDQUFDLDJFQUEyRTtRQUM5RyxvQkFBZSxHQUFZLEtBQUssQ0FBQyxDQUFDLG1GQUFtRjtRQUNySCw4QkFBeUIsR0FBWSxJQUFJLENBQUMsQ0FBQyxvRkFBb0Y7UUFDL0gsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFaEMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFP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RyxlQUFlO3NCQUF2QixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUQ0NvbmRpdGlvbiwgVENEYXRhRmlsdGVycywgVENGaWx0ZXJzVHlwZSB9IGZyb20gJy4vdGNsb3VkLXVpLWZpbHRlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0Y2xvdWQtdWktZmlsdGVycycsXG4gIHRlbXBsYXRlVXJsOiAnLi90Y2xvdWQtdWktZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RjbG91ZC11aS1maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVENsb3VkVWlGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIGRhdGVwaWNrZXJzID0gW10gYXMgYW55O1xuXG4gIEBWaWV3Q2hpbGQoJ19mb3JtdWxhcmlvJykgIF9mb3JtdWxhcmlvOiBOZ0Zvcm0gfCB1bmRlZmluZWQ7XG5cbiAgaW5wdXRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHNob3dfZmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNlYXJjaF9kYXRhOiBhbnkgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBfZGF0YTogYW55IHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBzZXQgZGF0YShkYXRhOiBhbnkpe1xuICAgIC8vIHRoaXMuX2RhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgfVxuICBnZXQgZGF0YSgpOiBhbnl7IHJldHVybiB0aGlzLl9kYXRhOyB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyczogVENEYXRhRmlsdGVycyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgc2V0IGZpbHRlcnMoZmlsdGVyczogYW55KXtcbiAgICAvL3RoaXMuX2ZpbHRlcnMgPSBmaWx0ZXJzO1xuICB9XG4gIGdldCBmaWx0ZXJzKCk6IGFueXsgcmV0dXJuIHRoaXMuX2ZpbHRlcnM7IH1cblxuICBwcml2YXRlIF9zdWJtaXRUZXh0OiBzdHJpbmcgPSAnRmlsdHJhcic7XG4gIEBJbnB1dCgpIHNldCBzdWJtaXRUZXh0KHY6IHN0cmluZyl7IFxuICAgIGlmKCB2ICYmIHYgIT09IHRoaXMuX3N1Ym1pdFRleHQgKXtcbiAgICAgIHRoaXMuX3N1Ym1pdFRleHQgPSB2O1xuICAgIH1cbiAgfVxuICBnZXQgc3VibWl0VGV4dCgpOnN0cmluZ3sgcmV0dXJuIHRoaXMuX3N1Ym1pdFRleHQ7IH1cblxuICBASW5wdXQoKSBidG5TdWJtaXRDbGFzczogc3RyaW5nID0gJ2J0bi1uZXctZ3JleSc7XG4gIEBJbnB1dCgpIHVzZU9uQ2hhbmdlU3VibWl0OiBib29sZWFuID0gdHJ1ZTsgLy8gdXNlT25DaGFuZ2VTdWJtaXQgLSBTdWJtaXQgYXV0b21hdGljbyBxdWFuZG8gZm9yIGFsdGVyYWRvIHF1YW5xdWVyIGlucHV0XG4gIEBJbnB1dCgpIHVzZUJ1dHRvblN1Ym1pdDogYm9vbGVhbiA9IGZhbHNlOyAvLyB1c2VCdXR0b25TdWJtaXQgLSBFeGliZSB1bSBib3TDo28gZGUgc3VibWl0IGUgbsOjbyBleGVjdXRhIGEgYnVzY2EgYXV0b21hdGljYW1lbnRlXG4gIEBJbnB1dCgpIHVzZU5vcm1hbGl6ZUNhc2VTZW5zaXRpdmU6IGJvb2xlYW4gPSB0cnVlOyAvLyB1c2VOb3JtYWxpemVDYXNlU2Vuc2l0aXZlIC0gTsOjbyB2YWxpZGEgY2FpeGEgYWx0YSBvdSBiYWl4YSBlIGNhcmFjdGVyZXMgZXNwZWNpYWlzXG4gIEBJbnB1dCgpIHVzZVJhbmdlRGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHVzZUZpbHRlckFjY2VwdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSByZXN1bHQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uRmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBkZXNjcmlwdGlvblN0YXJ0OiBzdHJpbmcgPSAnJztcbiAgZGVzY3JpcHRpb25TdG9wOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIGZpcnN0X2FjdGl2ZV9maWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzdGFydF9zdG9wOiBib29sZWFuID0gZmFsc2U7XG4gIHN0YXJ0X3N0b3Bfd2lkdGg6IG51bWJlciA9IDA7XG4gIHN0YXJ0X3N0b3BfdW5kOiBzdHJpbmcgPSAnJzsgLy8gcHggb3UgJVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGF0ZXBpcGU6IERhdGVQaXBlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiggdGhpcy5maWx0ZXJzICYmICh0aGlzLmZpbHRlcnMpLmxlbmd0aCA+IDAgKXtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8ICh0aGlzLmZpbHRlcnMpLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICBpZiggdGhpcy5maWx0ZXJzW2ldLnZhbHVlICl7XG4gICAgICAgICAgICBpZiggdGhpcy5maWx0ZXJzW2ldLnR5cGUgPT09ICdkYXRldGltZS1sb2NhbCcgKXtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcnNbaV0uc2VhcmNoVGV4dCA9IG5ldyBEYXRlKCBgJHt0aGlzLmZpbHRlcnNbaV0udmFsdWV9YCApO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlcnNbaV0uc2VhcmNoVGV4dCA9IHRoaXMuZmlsdGVyc1tpXS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlyc3RfYWN0aXZlX2ZpbHRlciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9ICAgICAgXG4gICAgICB9XG4gICAgICB0aGlzLnN0YXJ0X3N0b3AgPSAodGhpcy51c2VSYW5nZURhdGUpID8gdGhpcy5pc19zdGFydF9zdG9wX2RhdGV0aW1lKCkgOiBmYWxzZTtcbiAgICAgIHRoaXMudG9TdWJtaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzX3N0YXJ0X3N0b3BfZGF0ZXRpbWUoKXtcbiAgICBsZXQgc3RhcnQgPSBmYWxzZTtcbiAgICBsZXQgc3RvcCA9IGZhbHNlO1xuICAgIGlmKCB0aGlzLmZpbHRlcnMgJiYgKHRoaXMuZmlsdGVycykubGVuZ3RoID4gMCApe1xuICAgICAgdGhpcy5zdGFydF9zdG9wX3dpZHRoID0gMDtcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCAodGhpcy5maWx0ZXJzKS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGlmKCB0aGlzLmZpbHRlcnNbaV0uaWQgPT09ICdzdGFydCcgKXtcbiAgICAgICAgICBzdGFydCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zdGFydF9zdG9wX3dpZHRoICs9IHRoaXMuZ2V0VmFsdWVXaWR0aCh0aGlzLmZpbHRlcnNbaV0ud2lkdGgpO1xuICAgICAgICAgIHRoaXMuc3RhcnRfc3RvcF91bmQgPSB0aGlzLmdldFVuaWRhZGUodGhpcy5maWx0ZXJzW2ldLndpZHRoKTtcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uU3RhcnQgPSB0aGlzLmZpbHRlcnNbaV0uZGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYoIHRoaXMuZmlsdGVyc1tpXS5pZCA9PT0gJ3N0b3AnICl7XG4gICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zdGFydF9zdG9wX3dpZHRoICs9IHRoaXMuZ2V0VmFsdWVXaWR0aCh0aGlzLmZpbHRlcnNbaV0ud2lkdGgpO1xuICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb25TdG9wID0gdGhpcy5maWx0ZXJzW2ldLmRlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoIHN0YXJ0ICYmIHN0b3AgKSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldFZhbHVlV2lkdGgodjogc3RyaW5nKTpudW1iZXIge1xuICAgIGxldCB1bmQgPSB0aGlzLmdldFVuaWRhZGUodik7XG4gICAgdiA9ICh2KS5yZXBsYWNlKHVuZCwgJycpO1xuICAgIHJldHVybiArKHYpO1xuICB9XG5cbiAgZ2V0VW5pZGFkZSh2OiBzdHJpbmcpOnN0cmluZyB7XG4gICAgbGV0IHVuZCA9ICclJztcbiAgICBpZiggdiAmJiAodikuaW5jbHVkZXMoJ3B4JykgKXtcbiAgICAgIHVuZCA9ICdweCc7XG4gICAgfVxuICAgIHJldHVybiB1bmQ7XG4gIH1cbiBcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7ICBcbiAgICBcbiAgICBpZiggY2hhbmdlcyAmJiBjaGFuZ2VzWydkYXRhJ10gKXtcbiAgICAgIGNvbnN0IGRhdGEgPSBjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlO1xuICAgICAgaWYoIHRoaXMuX2RhdGEgIT09IGRhdGEgKXtcbiAgICAgICAgdGhpcy5fZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICB0aGlzLnNlYXJjaF9kYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKCBjaGFuZ2VzICYmIGNoYW5nZXNbJ2ZpbHRlcnMnXSApe1xuICAgICAgY29uc3QgZmlsdGVycyA9IGNoYW5nZXNbJ2ZpbHRlcnMnXS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiggdGhpcy5fZmlsdGVycyAhPT0gZmlsdGVycyApe1xuICAgICAgICB0aGlzLl9maWx0ZXJzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShmaWx0ZXJzKSk7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpe1xuICAgIGlmKCB0aGlzLmRhdGEgJiYgdGhpcy5maWx0ZXJzICl7XG4gICAgICB0aGlzLnNob3dfZmlsdGVycyA9IHRydWU7XG4gICAgICBpZiggdGhpcy5maWx0ZXJzICYmICh0aGlzLmZpbHRlcnMpLmxlbmd0aCA+IDAgKXtcbiAgICAgICAgKHRoaXMuZmlsdGVycykuZm9yRWFjaCgoZmlsdGVyOiBUQ0RhdGFGaWx0ZXJzKSA9PiB7ICAgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5zZWFyY2hJbihmaWx0ZXIsICdzeW5jJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBcbiAgICAgIC8vIHRoaXMudG9SZXN1bHQoKTtcbiAgICAgIGlmKCAhdGhpcy51c2VPbkNoYW5nZVN1Ym1pdCApe1xuICAgICAgICB0aGlzLnJlc3VsdF9hY2NlcHQodGhpcy5kYXRhKTtcbiAgICAgIH1cblxuICAgICAgaWYoIHRoaXMudXNlT25DaGFuZ2VTdWJtaXQgfHwgdGhpcy51c2VCdXR0b25TdWJtaXQgKXtcbiAgICAgICAgdGhpcy5zdGFydF9maWx0ZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZSh0ZXh0OiBhbnkpOiBzdHJpbmd7XG4gICAgaWYoIHRoaXMudXNlTm9ybWFsaXplQ2FzZVNlbnNpdGl2ZSApe1xuICAgICAgY29uc3QgdiA9ICggKCAoYCR7dGV4dH1gKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpICkudHJpbSgpICkudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiB2O1xuICAgIH1cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHRvU3VibWl0KCl7XG4gICAgaWYoIHRoaXMuZmlsdGVycyAmJiAodGhpcy5maWx0ZXJzKS5sZW5ndGggPiAwICl7XG4gICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U3VibWl0RmlsdGVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3VibWl0RmlsdGVycygpe1xuICAgIGxldCBmaWx0ZXJzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcnMpKTtcbiAgICBpZiggZmlsdGVycyAmJiAoZmlsdGVycykubGVuZ3RoID4gMCApe1xuICAgICAgKGZpbHRlcnMpLmZvckVhY2goKGZpbHRlcjogVENEYXRhRmlsdGVycywgaTogbnVtYmVyKSA9PiB7XG5cbiAgICAgICAgaWYoIGZpbHRlci53aWR0aCApeyBkZWxldGUoZmlsdGVyc1tpXS53aWR0aCk7IH1cbiAgICAgICAgaWYoIGZpbHRlci5wbGFjZWhvbGRlciApeyBkZWxldGUoZmlsdGVyc1tpXS5wbGFjZWhvbGRlcik7IH1cbiAgICAgICAgaWYoIGZpbHRlci5kZXNjcmlwdGlvbiApeyBkZWxldGUoZmlsdGVyc1tpXS5kZXNjcmlwdGlvbik7IH1cblxuICAgICAgICBpZiggKCFmaWx0ZXIuc2VhcmNoVGV4dCB8fCBmaWx0ZXIuc2VhcmNoVGV4dCAmJiBmaWx0ZXIuc2VhcmNoVGV4dCA9PT0gJycpICYmIGZpbHRlci50eXBlICE9PSBcImJvb2xlYW5cIiApe1xuICAgICAgICAgIGRlbGV0ZShmaWx0ZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiggZmlsdGVyLnR5cGUgPT09IFwiYm9vbGVhblwiICl7XG4gICAgICAgICAgaWYoICFmaWx0ZXIuc2VhcmNoVGV4dCApe1xuICAgICAgICAgICAgZmlsdGVyLnNlYXJjaFRleHQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICB9KTtcbiAgICB9ICAgXG4gICAgLy8gY29uc29sZS5sb2coJ29uU3VibWl0JywgdGhpcy5maWx0ZXJzKTtcbiAgICB0aGlzLm9uU3VibWl0LmVtaXQodGhpcy5maWx0ZXJzKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBjb2xsZWN0aW9uRmluZChvYmo6IGFueSwgcGF0aDogYW55KTogYW55IHtcbiAgICBjb25zdCBwYXRoQXJyYXkgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICBsZXQgY3VycmVudCA9IG9iajtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gcGF0aEFycmF5W2ldO1xuXG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdbJykgJiYga2V5LmluY2x1ZGVzKCddJykpIHtcbiAgICAgICAgY29uc3QgbmV4dEtleXMgPSBwYXRoQXJyYXkuc2xpY2UoaSArIDEpO1xuICAgICAgICBjb25zdCBpbmRleCA9IGtleS5zdWJzdHJpbmcoa2V5LmluZGV4T2YoJ1snKSArIDEsIGtleS5pbmRleE9mKCddJykpO1xuICAgICAgICBjb25zdCBhcnJheUtleSA9IGtleS5zdWJzdHJpbmcoMCwga2V5LmluZGV4T2YoJ1snKSk7XG4gICAgICAgIGlmKCBjdXJyZW50ICYmIGN1cnJlbnRbYXJyYXlLZXldICYmIGN1cnJlbnRbYXJyYXlLZXldW2luZGV4XSApe1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25GaW5kKGN1cnJlbnRbYXJyYXlLZXldW2luZGV4XSwgbmV4dEtleXMuam9pbihcIi5cIikpO1xuICAgICAgICB9XG4gICAgICB9XG5cblxuICAgICAgaWYgKGtleS5pbmNsdWRlcyhcIltdXCIpKSB7XG4gICAgICAgIGNvbnN0IGFycmF5S2V5ID0ga2V5LnJlcGxhY2UoXCJbXVwiLCBcIlwiKTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbYXJyYXlLZXldIHx8IFtdO1xuICAgICAgICBjb25zdCBuZXh0S2V5cyA9IHBhdGhBcnJheS5zbGljZShpICsgMSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjdXJyZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuY29sbGVjdGlvbkZpbmQoY3VycmVudFtqXSwgbmV4dEtleXMuam9pbihcIi5cIikpO1xuICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7IFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYoICFjdXJyZW50IHx8IChjdXJyZW50ICYmICFjdXJyZW50W2tleV0pICl7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuICAgIFxuICBmaXJzdDogYm9vbGVhbiA9IHRydWU7XG4gIHN0YXJ0X2ZpbHRlcl9mYzogYW55ID0gdW5kZWZpbmVkO1xuXG4gIHN0YXJ0X3ZhbHVlOiBhbnkgfCB1bmRlZmluZWQ7XG4gIHN0b3BfdmFsdWU6IGFueSB8IHVuZGVmaW5lZDtcblxuICBzZWFyY2hJblJhbmdlKCByYW5nZV9kYXRlOiBhbnkpe1xuICAgIFxuICAgIGlmKCB0aGlzLmZpbHRlcnMgJiYgKHRoaXMuZmlsdGVycykubGVuZ3RoID4gMCApe1xuXG4gICAgICBsZXQgZXZlbnQgPSB7fSBhcyBhbnk7IFxuICAgICAgZXZlbnQuZGF0ZXBpY2tlcnRpbWUgPSB0cnVlO1xuXG4gICAgICBmb3IoIGxldCBpID0gMDsgaSA8ICh0aGlzLmZpbHRlcnMpLmxlbmd0aDsgaSsrICl7XG5cbiAgICAgICAgaWYoIHRoaXMuZmlsdGVyc1tpXSAmJiB0aGlzLmZpbHRlcnNbaV0uaWQgJiYgdGhpcy5maWx0ZXJzW2ldLmlkID09PSAnc3RhcnQnICl7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzW2ldLnZhbHVlID0gcmFuZ2VfZGF0ZT8ucmVzdWx0Py5zdGFydCE7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzW2ldLnNlYXJjaFRleHQgPSByYW5nZV9kYXRlPy5yZXN1bHQ/LnN0YXJ0ITtcbiAgICAgICAgICBldmVudC5pbm5lclZhbHVlID0gdGhpcy5zdGFydF92YWx1ZSA9IHJhbmdlX2RhdGU/LnJlc3VsdD8uc3RhcnQhO1xuICAgICAgICAgIHRoaXMuc2VhcmNoSW4odGhpcy5maWx0ZXJzW2ldLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiggdGhpcy5maWx0ZXJzW2ldICYmIHRoaXMuZmlsdGVyc1tpXS5pZCAmJiB0aGlzLmZpbHRlcnNbaV0uaWQgPT09ICdzdG9wJyApe1xuICAgICAgICAgIHRoaXMuZmlsdGVyc1tpXS52YWx1ZSA9IHJhbmdlX2RhdGU/LnJlc3VsdD8uc3RvcCE7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzW2ldLnNlYXJjaFRleHQgPSByYW5nZV9kYXRlPy5yZXN1bHQ/LnN0b3AhO1xuICAgICAgICAgIGV2ZW50LmlubmVyVmFsdWUgPSB0aGlzLnN0b3BfdmFsdWUgPSByYW5nZV9kYXRlPy5yZXN1bHQ/LnN0b3AhO1xuICAgICAgICAgIHRoaXMuc2VhcmNoSW4odGhpcy5maWx0ZXJzW2ldLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKCB0aGlzLmZpcnN0IHx8IHRoaXMudXNlT25DaGFuZ2VTdWJtaXQgKXtcbiAgICAgICAgdGhpcy50b1N1Ym1pdCgpO1xuICAgICAgfVxuICAgICAgXG4gICAgfVxuICAgIHRoaXMuZmlyc3QgPSBmYWxzZTtcblxuICB9XG5cbiAgY29udmVydERhdGFUb051bWJlcihkYXRhU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBbZGlhLCBtZXMsIGFub10gPSBkYXRhU3RyaW5nLnNwbGl0KCcvJyk7XG4gICAgICByZXR1cm4gKyhgJHthbm99JHttZXN9JHtkaWF9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzZWFyY2hJbihpdGVtOiBUQ0RhdGFGaWx0ZXJzLCBldmVudD86IGFueSl7XG5cbiAgIFxuXG4gICAgdGhpcy5zdGFydF9maWx0ZXJfZmMgPSB1bmRlZmluZWQ7XG5cbiAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG5cbiAgICBpZiggZXZlbnQgPT09ICdzeW5jJyAmJiBpc1ZhbGlkICl7XG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYoIHR5cGVvZiBldmVudCA9PT0gJ2Jvb2xlYW4nICYmIGlzVmFsaWQgKXtcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9IGV2ZW50O1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIGlmKCBldmVudCA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50ID09PSBudWxsIHx8IGV2ZW50ID09PSAnJyAmJiBpc1ZhbGlkICl7XG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICBpdGVtLnNlYXJjaFRleHQgPSAnJztcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiggZXZlbnQ/LmRhdGVwaWNrZXJ0aW1lICAmJiBpc1ZhbGlkICl7XG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICBpdGVtLnNlYXJjaFRleHQgPSBldmVudD8uaW5uZXJWYWx1ZTsgICAgICBcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZihldmVudD8udGFyZ2V0Py52YWx1ZSAmJiBpc1ZhbGlkICl7XG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICBpdGVtLnNlYXJjaFRleHQgPSB0aGlzLm5vcm1hbGl6ZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIGlmKGV2ZW50Py50YXJnZXQ/LnZhbHVlID09PSAnJyAmJiBpc1ZhbGlkICl7XG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICBpdGVtLnNlYXJjaFRleHQgPSAnJztcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiggaXRlbS50eXBlID09PSAnZGF0ZS1sb2NhbCcgJiYgaXRlbS52YWx1ZSApe1xuICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgaXRlbS5zZWFyY2hUZXh0ID0gYCR7dGhpcy5jb252ZXJ0RGF0YVRvTnVtYmVyKCBpdGVtLnZhbHVlICl9YDtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG4gICAgXG4gICAgaWYoIHRoaXMudXNlT25DaGFuZ2VTdWJtaXQgfHwgdGhpcy5maXJzdF9hY3RpdmVfZmlsdGVyICl7ICAgICAgXG4gICAgICB0aGlzLnN0YXJ0X2ZpbHRlcl9mYyA9IHRoaXMuc3RhcnRfZmlsdGVyKCk7XG4gICAgICB0aGlzLmZpcnN0X2FjdGl2ZV9maWx0ZXIgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiggIXRoaXMudXNlQnV0dG9uU3VibWl0ICl7XG4gICAgICB0aGlzLmVtaXRTdWJtaXRGaWx0ZXJzKCk7XG4gICAgfSBcbiAgfVxuXG4gIFxuICBzdGFydF9maWx0ZXIoKTogdm9pZHtcbiAgICBmb3IoIGxldCBpID0gMDsgaSA8ICh0aGlzLmRhdGEpLmxlbmd0aDsgaSsrICl7XG5cbiAgICAgIHRoaXMuc2V0RGF0YUluZGV4KGksIHRydWUpO1xuXG4gICAgICBmb3IoIGxldCBqID0gMDsgaiA8ICh0aGlzLmZpbHRlcnMpLmxlbmd0aDsgaisrICl7ICAgICAgICBcbiAgICAgICAgY29uc3QgZmlsdGVyX2l0ZW0gPSB0aGlzLmZpbHRlcnNbal07ICAgXG5cbiAgICAgICAgaWYoIGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgJiYgdHlwZW9mIChmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSA9PT0gJ3N0cmluZycgJiYgZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCAhPT0gJycgJiYgZmlsdGVyX2l0ZW0udHlwZSAhPT0gVENGaWx0ZXJzVHlwZS5udW1iZXIgJiYgZmlsdGVyX2l0ZW0udHlwZSAhPT0gVENGaWx0ZXJzVHlwZS5kYXRlICl7XG4gICAgICAgICAgZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCA9IHRoaXMubm9ybWFsaXplKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpOyAgICAgICAgXG4gICAgICAgICAgbGV0IGl0ZW1fdmFsdWUgPSB0aGlzLmNvbGxlY3Rpb25GaW5kKHRoaXMuZGF0YVtpXSwgZmlsdGVyX2l0ZW0uc2VhcmNoSW4pO1xuICAgICAgICAgIGlmKCBpdGVtX3ZhbHVlICl7XG4gICAgICAgICAgICBpdGVtX3ZhbHVlID0gdGhpcy5ub3JtYWxpemUoaXRlbV92YWx1ZSk7ICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiggISggaXRlbV92YWx1ZS5pbmNsdWRlcyhmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSB8fCBpdGVtX3ZhbHVlID09PSBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ICkgKXtcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBcbiAgICAgICAgXG5cbiAgICAgICAgaWYoIGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgJiYgIGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTiggZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dC52YWx1ZU9mKCkpICYmIGZpbHRlcl9pdGVtLnR5cGUgPT09IFRDRmlsdGVyc1R5cGUuZGF0ZXRpbWUgKXtcbiAgICAgICAgICBsZXQgaXRlbV92YWx1ZTogYW55ID0gdGhpcy5jb2xsZWN0aW9uRmluZCh0aGlzLmRhdGFbaV0sIGZpbHRlcl9pdGVtLnNlYXJjaEluKTtcblxuICAgICAgICAgIHRyeSB7IGl0ZW1fdmFsdWUgPSBuZXcgRGF0ZShpdGVtX3ZhbHVlKTsgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgaWYoIGl0ZW1fdmFsdWUgJiYgIGl0ZW1fdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTiggaXRlbV92YWx1ZS52YWx1ZU9mKCkpICl7XG4gICAgICAgICAgICBsZXQgaXNfYWNjZXB0ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBkdF90YXJnZXQgICA9IChmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KS5nZXRUaW1lKCkgKyAoMyAqIDYwICogNjAgKiAxMDAwKTtcbiAgICAgICAgICAgIGNvbnN0IGR0X2N1cnJlbnQgID0gKGl0ZW1fdmFsdWUpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGlmKCBmaWx0ZXJfaXRlbS5jb25kaXRpb24gKXtcbiAgICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXJfaXRlbS5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjYXNlIFRDQ29uZGl0aW9uLmd0OiAgICBpc19hY2NlcHQgPSAhKCArKGR0X3RhcmdldCkgPiAgKyhkdF9jdXJyZW50KSApOyAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5sdDogICAgaXNfYWNjZXB0ID0gISggKyhkdF90YXJnZXQpIDwgICsoZHRfY3VycmVudCkgKTsgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVENDb25kaXRpb24uZ3RlOiAgIGlzX2FjY2VwdCA9ICEoICsoZHRfdGFyZ2V0KSA+PSArKGR0X2N1cnJlbnQpICk7ICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFRDQ29uZGl0aW9uLmx0ZTogICBpc19hY2NlcHQgPSAhKCArKGR0X3RhcmdldCkgPD0gKyhkdF9jdXJyZW50KSApOyAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5lcXVhbDogaXNfYWNjZXB0ID0gISggKyhkdF90YXJnZXQpID09PSArKGR0X2N1cnJlbnQpICk7ICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBpc19hY2NlcHQgPSAhKCArKGR0X3RhcmdldCkgPT0gKyhkdF9jdXJyZW50KSApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgaXNfYWNjZXB0ID0gISggKyhmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSA9PT0gKyhpdGVtX3ZhbHVlKSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoICFpc19hY2NlcHQgKXtcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIFxuXG4gICAgICAgIGlmKCBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ICYmIHR5cGVvZiArKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID09PSAnbnVtYmVyJyAmJiAoIGZpbHRlcl9pdGVtLnR5cGUgPT09IFRDRmlsdGVyc1R5cGUubnVtYmVyIHx8IGZpbHRlcl9pdGVtLnR5cGUgPT09IFRDRmlsdGVyc1R5cGUuZGF0ZSApICl7XG4gICAgICAgICAgZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCA9IE51bWJlcihmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KTtcbiAgICAgICAgICBsZXQgaXRlbV92YWx1ZSA9IHRoaXMuY29sbGVjdGlvbkZpbmQodGhpcy5kYXRhW2ldLCBmaWx0ZXJfaXRlbS5zZWFyY2hJbik7XG4gICAgICAgICAgaWYoIHR5cGVvZiArKGl0ZW1fdmFsdWUpID09PSAnbnVtYmVyJyApeyAgIFxuICAgICAgICAgICAgaXRlbV92YWx1ZSA9IE51bWJlcihpdGVtX3ZhbHVlKTsgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBpc19hY2NlcHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmKCBmaWx0ZXJfaXRlbS5jb25kaXRpb24gKXtcbiAgICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXJfaXRlbS5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjYXNlIFRDQ29uZGl0aW9uLmd0OiAgICBpc19hY2NlcHQgPSAhKCArKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID4gICsoaXRlbV92YWx1ZSkgKTsgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVENDb25kaXRpb24ubHQ6ICAgIGlzX2FjY2VwdCA9ICEoICsoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPCAgKyhpdGVtX3ZhbHVlKSApOyAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5ndGU6ICAgaXNfYWNjZXB0ID0gISggKyhmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KS0wLjAxID49ICsoaXRlbV92YWx1ZSkgKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5sdGU6ICAgaXNfYWNjZXB0ID0gISggKyhmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSswLjAxIDw9ICsoaXRlbV92YWx1ZSkgKTsgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVENDb25kaXRpb24uZXF1YWw6IGlzX2FjY2VwdCA9ICEoICsoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPT09ICsoaXRlbV92YWx1ZSkgKTsgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGlzX2FjY2VwdCA9ICEoICsoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPT0gKyhpdGVtX3ZhbHVlKSApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgaXNfYWNjZXB0ID0gISggKyhmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSA9PT0gKyhpdGVtX3ZhbHVlKSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoICFpc19hY2NlcHQgKXtcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIGlmKCB0eXBlb2YgKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID09PSAnYm9vbGVhbicgJiYgZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCApe1xuICAgICAgICAgIGxldCBpdGVtX3ZhbHVlOiBhbnkgPSB0aGlzLmNvbGxlY3Rpb25GaW5kKHRoaXMuZGF0YVtpXSwgZmlsdGVyX2l0ZW0uc2VhcmNoSW4pO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmKCBpdGVtX3ZhbHVlICYmIChpdGVtX3ZhbHVlKS5sZW5ndGggPiAwICl7ICBcbiAgICAgICAgICAgIGxldCBxdGRfaXNfdHJ1ZSA9IDA7ICAgICAgICAgIFxuICAgICAgICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCAoKGl0ZW1fdmFsdWUpLmxlbmd0aCk7IGkrKyApe1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbV92YWx1ZVtpXTtcbiAgICAgICAgICAgICAgaWYoIGl0ZW0gPT09IGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgKXtcbiAgICAgICAgICAgICAgICBxdGRfaXNfdHJ1ZSsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiggcXRkX2lzX3RydWUgPT09IDAgKXtcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgaWYoICEoIGl0ZW1fdmFsdWUgPT09IGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgKSApe1xuICAgICAgICAgICAgICB0aGlzLnNldERhdGFJbmRleChpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgXG4gICAgICB9XG5cbiAgICB9IC8vIGVuZCBmb3JcbiAgICBcbiAgICB0aGlzLnRvUmVzdWx0KCk7XG4gICAgICBcbiAgfVxuXG4gIHByaXZhdGUgdG9SZXN1bHQoKXtcblxuXG4gICAgY29uc3Qgc2VhcmNoX2RhdGEgPSBbXTtcblxuICAgIGxldCBpc19maWx0ZXIgPSBmYWxzZTtcbiAgICBmb3IoIGxldCBpID0gMDsgaSA8ICh0aGlzLmZpbHRlcnMpLmxlbmd0aDsgaSsrICl7XG4gICAgICBpZiggdGhpcy5maWx0ZXJzW2ldLnNlYXJjaFRleHQgJiYgdGhpcy5maWx0ZXJzW2ldLnNlYXJjaFRleHQgIT09ICcnICl7XG4gICAgICAgIGlzX2ZpbHRlciA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIGlzX2ZpbHRlciApe1xuICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCAodGhpcy5kYXRhKS5sZW5ndGg7IGkrKyApe1xuICAgICAgICBpZiggdGhpcy5kYXRhICYmIHRoaXMuZGF0YVtpXSAmJiB0aGlzLmRhdGFbaV1bJ3RjX2ZpbHRlcl9hY2NlcHQnXSApe1xuICAgICAgICAgIChzZWFyY2hfZGF0YSkucHVzaCh0aGlzLmRhdGFbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlc3VsdF9hY2NlcHQoc2VhcmNoX2RhdGEpO1xuICAgICAgdGhpcy5vbkZpbHRlci5lbWl0KHsuLi50aGlzLmZpbHRlcnN9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3VsdF9hY2NlcHQodGhpcy5kYXRhKTtcbiAgICB0aGlzLm9uRmlsdGVyLmVtaXQoey4uLnRoaXMuZmlsdGVyc30pO1xuICB9XG5cbiAgc2V0RGF0YUluZGV4KGluZGV4OiBudW1iZXIsIHZhbHVlOiBib29sZWFuICl7XG4gICAgaWYoIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGFbaW5kZXhdICl7XG4gICAgICB0aGlzLmRhdGFbaW5kZXhdWyd0Y19maWx0ZXJfYWNjZXB0J10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXN1bHRfYWNjZXB0KGRhdGE6IGFueSl7XG4gICAgaWYoICF0aGlzLnVzZUZpbHRlckFjY2VwdCAmJiBkYXRhICYmIChkYXRhKS5sZW5ndGggPiAwICl7XG4gICAgICBmb3IoIGxldCBpID0gMDsgaSA8IChkYXRhKS5sZW5ndGg7IGkrKyApe1xuICAgICAgICBkZWxldGUgZGF0YVtpXVsndGNfZmlsdGVyX2FjY2VwdCddO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlc3VsdC5lbWl0KGRhdGEpO1xuICB9XG5cbn1cbiIsIjxkaXYgKm5nSWY9XCJzaG93X2ZpbHRlcnNcIiBjbGFzcz1cImFyZWEtZmlsdGVyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJzOyBsZXQgaSA9IGluZGV4XCI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLnR5cGUgfHwgKGl0ZW0udHlwZSAmJiBpdGVtLnR5cGUgIT09ICdib29sZWFuJylcIj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2RhdGUtbG9jYWwnXCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LWZpbHRlci1pbnB1dCB0eXBlLXt7aXRlbS50eXBlfX0gYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIFtzdHlsZV09XCIoaXRlbS53aWR0aCAhPT0gJycpID8gJ3dpZHRoOicraXRlbS53aWR0aCA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWRlc2NyaXB0aW9uIGJveC10eXBlLXt7aXRlbS50eXBlfX1cIj48aSBbY2xhc3MudG8tYWN0aXZlXT1cIihpdGVtLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbS52YWx1ZSAhPT0gbnVsbCAmJiBpdGVtLnZhbHVlICE9PSAnJylcIiBjbGFzcz1cImZhcyBmYS1maWx0ZXIgaWNvbi1maWx0ZXJcIj48L2k+Jm5ic3A7e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRjbG91ZC11aS1kYXRlcGlja2VyIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNfaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVJbnB1dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaEluKGl0ZW0sIF9pbnB1dClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGNsb3VkLXVpLWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWNsZWFyLWZpbHRlci10ZXh0XCIgW2NsYXNzLnRvLWhpZGVdPVwiIShpdGVtLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbS52YWx1ZSAhPT0gbnVsbCAmJiBpdGVtLnZhbHVlICE9PSAnJylcIiAoY2xpY2spPVwic2VhcmNoSW4oaXRlbSwgbnVsbCk7IGl0ZW0uc2VhcmNoVGV4dCA9IHVuZGVmaW5lZDsgaXRlbS52YWx1ZSA9ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlICE9PSAnZGF0ZS1sb2NhbCdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlID09PSAnZGF0ZXRpbWUtbG9jYWwnXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXJ0X3N0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmlkID09PSAnc3RhcnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC1maWx0ZXItaW5wdXQgdHlwZS17e2l0ZW0udHlwZX19IGJveC10eXBlLXt7aXRlbS50eXBlfX1cIiBbc3R5bGVdPVwiKGl0ZW0ud2lkdGggIT09ICcnKSA/ICd3aWR0aDonK3N0YXJ0X3N0b3Bfd2lkdGgrJycrc3RhcnRfc3RvcF91bmQgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1kZXNjcmlwdGlvbiBib3gtdHlwZS17e2l0ZW0udHlwZX19XCI+PGkgW2NsYXNzLnRvLWFjdGl2ZV09XCIoX3JhbmdlX2RhdGUgJiYgX3JhbmdlX2RhdGUucmVzdWx0ICYmIF9yYW5nZV9kYXRlLnJlc3VsdC5zdGFydCAmJiBfcmFuZ2VfZGF0ZS5yZXN1bHQuc3RvcCApXCIgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIGljb24tZmlsdGVyXCI+PC9pPiZuYnNwOzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmFuZ2UtZGF0ZSAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjX3JhbmdlX2RhdGUgbmdNb2RlbCBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZVBlcmlvZFN0YXJ0U3RvcF09XCJpdGVtLmRlZmF1bHRWYWx1ZVBlcmlvZFN0YXJ0U3RvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVzY3JpcHRpb25TdGFydF09XCJkZXNjcmlwdGlvblN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvblN0b3BdPVwiZGVzY3JpcHRpb25TdG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtVVENdPVwiKGl0ZW0gJiYgaXRlbS5VVEMpID8gdHJ1ZSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNlYXJjaEluUmFuZ2UoX3JhbmdlX2RhdGUpOyBzZWFyY2hJbihpdGVtLCBfcmFuZ2VfZGF0ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yYW5nZS1kYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJpdGVtLmlkID09PSAnc3RhcnQnXCIgI19pbnB1dCBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiIHR5cGU9XCJoaWRkZW5cIiBbKG5nTW9kZWwpXT1cInN0YXJ0X3ZhbHVlXCI+ICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIml0ZW0uaWQgPT09ICdzdG9wJ1wiICNfaW5wdXQgbmFtZT1cImlucHV0X3t7aSsxfX1cIiB0eXBlPVwiaGlkZGVuXCIgWyhuZ01vZGVsKV09XCJzdG9wX3ZhbHVlXCI+ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhcnRfc3RvcFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LWZpbHRlci1pbnB1dCB0eXBlLXt7aXRlbS50eXBlfX0gYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIFtzdHlsZV09XCIoaXRlbS53aWR0aCAhPT0gJycpID8gJ3dpZHRoOicraXRlbS53aWR0aCA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZGVzY3JpcHRpb24gYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiPjxpIFtjbGFzcy50by1hY3RpdmVdPVwiKGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtLnZhbHVlICE9PSBudWxsICYmIGl0ZW0udmFsdWUgIT09ICcnKVwiIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBpY29uLWZpbHRlclwiPjwvaT4mbmJzcDt7eyBpdGVtLmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC10eXBlLXt7aXRlbS50eXBlfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRjbG91ZC11aS1kYXRlcGlja2VyLXRpbWUgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjX2lucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZU9wdGlvbnNEYXRlVGltZV09XCIoaXRlbSAmJiBpdGVtLnVzZU9wdGlvbnNEYXRlVGltZSkgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1VUQ109XCIoaXRlbSAmJiBpdGVtLlVUQykgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Q2hhbmdlKT1cInNlYXJjaEluKGl0ZW0sIF9pbnB1dClcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1jbGVhci1maWx0ZXItdGV4dFwiIFtjbGFzcy50by1oaWRlXT1cIiEoaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmFsdWUgIT09IG51bGwgJiYgaXRlbS52YWx1ZSAhPT0gJycpXCIgKGNsaWNrKT1cInNlYXJjaEluKGl0ZW0sIG51bGwpOyBpdGVtLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7IGl0ZW0udmFsdWUgPSAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlICE9PSAnc2VsZWN0JyAmJiBpdGVtLnR5cGUgIT09ICdkYXRldGltZS1sb2NhbCcgJiYgaXRlbS50eXBlICE9PSAnZGF0ZS1sb2NhbCdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LWZpbHRlci1pbnB1dCB0eXBlLXt7aXRlbS50eXBlfX0gYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIFtzdHlsZV09XCIoaXRlbS53aWR0aCAhPT0gJycpID8gJ3dpZHRoOicraXRlbS53aWR0aCA6ICcnXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZGVzY3JpcHRpb24gYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiPjxpIFtjbGFzcy50by1hY3RpdmVdPVwiX2lucHV0LnZhbHVlICE9PSAnJ1wiIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBpY29uLWZpbHRlclwiPjwvaT4mbmJzcDt7eyBpdGVtLmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtdHlwZS17e2l0ZW0udHlwZX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI19pbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAoaXRlbS5wbGFjZWhvbGRlciAhPT0gJycpID8gaXRlbS5wbGFjZWhvbGRlciA6ICcnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ7eyAoaXRlbS50eXBlID09PSAnbnVtYmVyJykgPyAndGV4dCcgOiBpdGVtLnR5cGUgfX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0Yy1mb3JtLWNvbnRyb2xcIiAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJzZWFyY2hJbihpdGVtLCAkZXZlbnQpXCI+ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY2xlYXItZmlsdGVyLXRleHRcIiBbY2xhc3MudG8taGlkZV09XCJfaW5wdXQudmFsdWUgPT09ICcnXCIgKGNsaWNrKT1cInNlYXJjaEluKGl0ZW0sIG51bGwpOyBfaW5wdXQudmFsdWUgPSAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzZWxlY3QnICYmIGl0ZW0uZGF0YSAmJiAoaXRlbS5kYXRhKS5sZW5ndGggPiAwXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtZmlsdGVyLWlucHV0IHR5cGUte3tpdGVtLnR5cGV9fSBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgW3N0eWxlXT1cIihpdGVtLndpZHRoICE9PSAnJykgPyAnd2lkdGg6JytpdGVtLndpZHRoIDogJydcIj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1kZXNjcmlwdGlvbiBib3gtdHlwZS17e2l0ZW0udHlwZX19XCI+PGkgW2NsYXNzLnRvLWFjdGl2ZV09XCJfaW5wdXQudmFsdWUgIT09ICcnXCIgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIGljb24tZmlsdGVyXCI+PC9pPiZuYnNwO3t7IGl0ZW0uZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC10eXBlLXt7aXRlbS50eXBlfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI19pbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlucHV0X3t7aSsxfX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0Yy1mb3JtLWNvbnRyb2xcIiAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VhcmNoSW4oaXRlbSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwiXCI+PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdiBvZiBpdGVtLmRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwidi52YWx1ZVwiPnt7IHYuZGVzY3JpcHRpb24gfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0udHlwZSAmJiBpdGVtLnR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LWZpbHRlci1pbnB1dFwiIFtzdHlsZV09XCIoaXRlbS53aWR0aCAhPT0gJycpID8gJ3dpZHRoOicraXRlbS53aWR0aCA6ICcnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZGVzY3JpcHRpb25cIj48aSBbY2xhc3MudG8tYWN0aXZlXT1cIl9pbnB1dC5jaGVja2VkID09PSB0cnVlXCIgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIGljb24tZmlsdGVyXCI+PC9pPiZuYnNwO3t7IGl0ZW0uZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJlYS1pbnB1dC1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sIHRjLWZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ucGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNfaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAoaXRlbS5wbGFjZWhvbGRlciAhPT0gJycpID8gaXRlbS5wbGFjZWhvbGRlciA6ICcnIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlucHV0X3t7aSsxfX1cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VhcmNoSW4oaXRlbSwgX2lucHV0LmNoZWNrZWQpXCI+ICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHQgbWItMSBtci0xXCIgKm5nSWY9XCJ1c2VCdXR0b25TdWJtaXRcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ0Yy1idG4ge3sgYnRuU3VibWl0Q2xhc3MgfX1cIiAoY2xpY2spPVwidG9TdWJtaXQoKVwiID57eyBzdWJtaXRUZXh0IH19PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbjwvZGl2PlxuXG48IS0tIDxwcmU+e3sgaW5wdXRzIHwganNvbiB9fTwvcHJlPiAtLT5cbiAgICA8IS0tIDxwcmU+IHt7IGRhdGEgfCBqc29uIH19IDwvcHJlPlxuXG48cD5GSUxURVJTPC9wPlxuPHByZT4ge3sgZmlsdGVycyB8IGpzb24gfX08L3ByZT4gLS0+XG5cbjwhLS1cbiAgICA8cHJlPnN0YXJ0X3N0b3A6IHt7IHN0YXJ0X3N0b3AgfX08L3ByZT5cbiAgICA8cHJlPnN0YXJ0X3N0b3Bfd2lkdGg6IHt7IHN0YXJ0X3N0b3Bfd2lkdGggfX08L3ByZT5cbiAgICA8cHJlPnN0YXJ0X3N0b3BfdW5kOiB7eyBzdGFydF9zdG9wX3VuZCB9fTwvcHJlPlxuLS0+Il19