keevo-components 1.5.191 → 1.5.192

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 (350) hide show
  1. package/esm2020/keevo-components.mjs +5 -0
  2. package/esm2020/lib/api/base-components/base-component-button.mjs +36 -0
  3. package/esm2020/lib/api/base-components/base-component-chart.mjs +92 -0
  4. package/esm2020/lib/api/base-components/base-component-crud-form.mjs +270 -0
  5. package/esm2020/lib/api/base-components/base-component-crud-list.mjs +68 -0
  6. package/esm2020/lib/api/base-components/base-component-crud.mjs +65 -0
  7. package/esm2020/lib/api/base-components/base-component-dropdown-new.mjs +211 -0
  8. package/esm2020/lib/api/base-components/base-component-dropdown.mjs +161 -0
  9. package/esm2020/lib/api/base-components/base-component-input.mjs +94 -0
  10. package/esm2020/lib/api/base-components/base-component-multi-select.mjs +128 -0
  11. package/esm2020/lib/api/base-components/base-component.mjs +49 -0
  12. package/esm2020/lib/api/components/chart/chart.config.mjs +2 -0
  13. package/esm2020/lib/api/components/chart/chart.model.mjs +2 -0
  14. package/esm2020/lib/api/components/chart/orchart.config.mjs +2 -0
  15. package/esm2020/lib/api/components/chart/orchart.item.mjs +2 -0
  16. package/esm2020/lib/api/components/dropdown/filtro.combo.mjs +2 -0
  17. package/esm2020/lib/api/components/error/error.component.mjs +26 -0
  18. package/esm2020/lib/api/components/error/kverror.module.mjs +35 -0
  19. package/esm2020/lib/api/components/table/action-item.mjs +2 -0
  20. package/esm2020/lib/api/components/table/kv-menuitem.mjs +3 -0
  21. package/esm2020/lib/api/components/table/table.config.column.mjs +2 -0
  22. package/esm2020/lib/api/components/table/table.config.mjs +2 -0
  23. package/esm2020/lib/api/components/table/table.paginate.mjs +9 -0
  24. package/esm2020/lib/api/helpers/component-providers.mjs +16 -0
  25. package/esm2020/lib/api/helpers/keevo-validators.mjs +64 -0
  26. package/esm2020/lib/api/helpers/translate-primeng.mjs +23 -0
  27. package/esm2020/lib/api/models/menu/menu.model.mjs +2 -0
  28. package/esm2020/lib/api/models/menu/menucompleto.model.mjs +2 -0
  29. package/esm2020/lib/api/models/menu/sistemamenu.model.mjs +2 -0
  30. package/esm2020/lib/api/modules/primeng.module.mjs +247 -0
  31. package/esm2020/lib/api/services/base.api.service.mjs +74 -0
  32. package/esm2020/lib/api/services/component.service.mjs +27 -0
  33. package/esm2020/lib/api/services/form.service.mjs +84 -0
  34. package/esm2020/lib/api/services/imagens.service.mjs +22 -0
  35. package/esm2020/lib/api/services/notification.service.mjs +67 -0
  36. package/esm2020/lib/api/services/object.service.mjs +26 -0
  37. package/esm2020/lib/buttons/button-personalize/button-personalize.component.mjs +17 -0
  38. package/esm2020/lib/buttons/button-popup/button-popup.component.mjs +31 -0
  39. package/esm2020/lib/buttons/button-secondary/button-secondary.component.mjs +17 -0
  40. package/esm2020/lib/buttons/button-success/button-success.component.mjs +17 -0
  41. package/esm2020/lib/buttons/kvbutton.module.mjs +39 -0
  42. package/esm2020/lib/chart/chart.component.mjs +145 -0
  43. package/esm2020/lib/chart/kvchart.module.mjs +32 -0
  44. package/esm2020/lib/directives/template.directive.mjs +24 -0
  45. package/esm2020/lib/inputs/check/check.component.mjs +26 -0
  46. package/esm2020/lib/inputs/dropdown/dropdown.component.mjs +37 -0
  47. package/esm2020/lib/inputs/editor/editor.component.mjs +70 -0
  48. package/esm2020/lib/inputs/input-calendar/input-calendar.component.mjs +89 -0
  49. package/esm2020/lib/inputs/input-mask/input-mask.component.mjs +23 -0
  50. package/esm2020/lib/inputs/input-number/input-number.component.mjs +59 -0
  51. package/esm2020/lib/inputs/input-password/input-password.component.mjs +33 -0
  52. package/esm2020/lib/inputs/input-text/input-text.component.mjs +21 -0
  53. package/esm2020/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +38 -0
  54. package/esm2020/lib/inputs/input-textarea/input-textarea.component.mjs +43 -0
  55. package/esm2020/lib/inputs/input-time/input-time.component.mjs +24 -0
  56. package/esm2020/lib/inputs/kvinputs.module.mjs +108 -0
  57. package/esm2020/lib/inputs/multi-select/multi-select.component.mjs +38 -0
  58. package/esm2020/lib/inputs/radio-group/radio-group.component.mjs +53 -0
  59. package/esm2020/lib/inputs/switch/switch.component.mjs +32 -0
  60. package/esm2020/lib/keevo-components.module.mjs +105 -0
  61. package/esm2020/lib/label/label.component.mjs +15 -0
  62. package/esm2020/lib/label/label.module.mjs +24 -0
  63. package/esm2020/lib/loader/kvloader.module.mjs +28 -0
  64. package/esm2020/lib/loader/loader.component.mjs +17 -0
  65. package/esm2020/lib/loader/loader.service.mjs +29 -0
  66. package/esm2020/lib/login/kvlogin.module.mjs +47 -0
  67. package/esm2020/lib/login/login.component.mjs +52 -0
  68. package/esm2020/lib/menu/kvmenu.module.mjs +43 -0
  69. package/esm2020/lib/menu/menu.component.mjs +237 -0
  70. package/esm2020/lib/orgchart/orgchart.component.mjs +100 -0
  71. package/esm2020/lib/orgchart/orgchart.module.mjs +24 -0
  72. package/esm2020/lib/page-form/kv-page-form.module.mjs +38 -0
  73. package/esm2020/lib/page-form/page-form.component.mjs +144 -0
  74. package/esm2020/lib/picklist/kvpicklist.module.mjs +32 -0
  75. package/esm2020/lib/picklist/picklist.component.mjs +48 -0
  76. package/esm2020/lib/pipes/codigofile.pipe.mjs +19 -0
  77. package/esm2020/lib/pipes/cpfcnpj.pipe.mjs +25 -0
  78. package/esm2020/lib/pipes/pipes.module.mjs +34 -0
  79. package/esm2020/lib/pipes/telefone.pipe.mjs +45 -0
  80. package/esm2020/lib/table/kvtable.module.mjs +32 -0
  81. package/esm2020/lib/table/table.component.mjs +499 -0
  82. package/esm2020/lib/tree-table/kv-treetable.component.mjs +371 -0
  83. package/esm2020/lib/tree-table/kv-treetable.module.mjs +32 -0
  84. package/esm2020/lib/tree-view/kvtree-view.module.mjs +28 -0
  85. package/esm2020/lib/tree-view/tree-view.component.mjs +29 -0
  86. package/esm2020/lib/workspace/kvworkspace.module.mjs +47 -0
  87. package/esm2020/lib/workspace/workspace.component.mjs +77 -0
  88. package/esm2020/public-api.mjs +138 -0
  89. package/fesm2015/keevo-components.mjs +4705 -0
  90. package/fesm2015/keevo-components.mjs.map +1 -0
  91. package/fesm2020/keevo-components.mjs +4696 -0
  92. package/fesm2020/keevo-components.mjs.map +1 -0
  93. package/index.d.ts +5 -0
  94. package/lib/api/base-components/base-component-button.d.ts +14 -0
  95. package/lib/api/base-components/base-component-chart.d.ts +40 -0
  96. package/lib/api/base-components/base-component-crud-form.d.ts +137 -0
  97. package/lib/api/base-components/base-component-crud-list.d.ts +63 -0
  98. package/lib/api/base-components/base-component-crud.d.ts +36 -0
  99. package/lib/api/base-components/base-component-dropdown-new.d.ts +14 -0
  100. package/lib/api/base-components/base-component-dropdown.d.ts +42 -0
  101. package/lib/api/base-components/base-component-input.d.ts +31 -0
  102. package/lib/api/base-components/base-component-multi-select.d.ts +35 -0
  103. package/lib/api/base-components/base-component.d.ts +21 -0
  104. package/lib/api/components/chart/chart.config.d.ts +11 -0
  105. package/lib/api/components/chart/chart.model.d.ts +9 -0
  106. package/lib/api/components/chart/orchart.config.d.ts +35 -0
  107. package/lib/api/components/chart/orchart.item.d.ts +26 -0
  108. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -0
  109. package/lib/api/components/error/error.component.d.ts +12 -0
  110. package/lib/api/components/error/kverror.module.d.ts +10 -0
  111. package/lib/api/components/table/action-item.d.ts +5 -0
  112. package/lib/api/components/table/kv-menuitem.d.ts +9 -0
  113. package/lib/api/components/table/table.config.column.d.ts +21 -0
  114. package/lib/api/components/table/table.config.d.ts +17 -0
  115. package/lib/api/components/table/table.paginate.d.ts +6 -0
  116. package/lib/api/helpers/component-providers.d.ts +2 -0
  117. package/lib/api/helpers/keevo-validators.d.ts +10 -0
  118. package/lib/api/helpers/translate-primeng.d.ts +4 -0
  119. package/lib/api/models/menu/menu.model.d.ts +10 -0
  120. package/{src/lib/api/models/menu/menucompleto.model.ts → lib/api/models/menu/menucompleto.model.d.ts} +3 -4
  121. package/lib/api/models/menu/sistemamenu.model.d.ts +8 -0
  122. package/lib/api/modules/primeng.module.d.ts +60 -0
  123. package/lib/api/services/base.api.service.d.ts +25 -0
  124. package/lib/api/services/component.service.d.ts +11 -0
  125. package/lib/api/services/form.service.d.ts +27 -0
  126. package/lib/api/services/imagens.service.d.ts +8 -0
  127. package/lib/api/services/notification.service.d.ts +25 -0
  128. package/lib/api/services/object.service.d.ts +8 -0
  129. package/lib/buttons/button-personalize/button-personalize.component.d.ts +7 -0
  130. package/lib/buttons/button-popup/button-popup.component.d.ts +13 -0
  131. package/lib/buttons/button-secondary/button-secondary.component.d.ts +7 -0
  132. package/lib/buttons/button-success/button-success.component.d.ts +7 -0
  133. package/lib/buttons/kvbutton.module.d.ts +11 -0
  134. package/lib/chart/chart.component.d.ts +56 -0
  135. package/lib/chart/kvchart.module.d.ts +10 -0
  136. package/lib/directives/template.directive.d.ts +11 -0
  137. package/lib/inputs/check/check.component.d.ts +11 -0
  138. package/lib/inputs/dropdown/dropdown.component.d.ts +14 -0
  139. package/lib/inputs/editor/editor.component.d.ts +39 -0
  140. package/lib/inputs/input-calendar/input-calendar.component.d.ts +27 -0
  141. package/lib/inputs/input-mask/input-mask.component.d.ts +10 -0
  142. package/lib/inputs/input-number/input-number.component.d.ts +19 -0
  143. package/lib/inputs/input-password/input-password.component.d.ts +13 -0
  144. package/lib/inputs/input-text/input-text.component.d.ts +9 -0
  145. package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +15 -0
  146. package/lib/inputs/input-textarea/input-textarea.component.d.ts +16 -0
  147. package/lib/inputs/input-time/input-time.component.d.ts +10 -0
  148. package/lib/inputs/kvinputs.module.d.ts +25 -0
  149. package/lib/inputs/multi-select/multi-select.component.d.ts +12 -0
  150. package/lib/inputs/radio-group/radio-group.component.d.ts +18 -0
  151. package/lib/inputs/switch/switch.component.d.ts +13 -0
  152. package/lib/keevo-components.module.d.ts +19 -0
  153. package/lib/label/label.component.d.ts +7 -0
  154. package/lib/label/label.module.d.ts +8 -0
  155. package/lib/loader/kvloader.module.d.ts +9 -0
  156. package/lib/loader/loader.component.d.ts +8 -0
  157. package/lib/loader/loader.service.d.ts +10 -0
  158. package/lib/login/kvlogin.module.d.ts +13 -0
  159. package/lib/login/login.component.d.ts +30 -0
  160. package/lib/menu/kvmenu.module.d.ts +12 -0
  161. package/lib/menu/menu.component.d.ts +74 -0
  162. package/lib/orgchart/orgchart.component.d.ts +27 -0
  163. package/lib/orgchart/orgchart.module.d.ts +9 -0
  164. package/lib/page-form/kv-page-form.module.d.ts +11 -0
  165. package/lib/page-form/page-form.component.d.ts +69 -0
  166. package/lib/picklist/kvpicklist.module.d.ts +10 -0
  167. package/lib/picklist/picklist.component.d.ts +20 -0
  168. package/lib/pipes/codigofile.pipe.d.ts +7 -0
  169. package/lib/pipes/cpfcnpj.pipe.d.ts +7 -0
  170. package/lib/pipes/pipes.module.d.ts +10 -0
  171. package/lib/pipes/telefone.pipe.d.ts +7 -0
  172. package/lib/table/kvtable.module.d.ts +10 -0
  173. package/lib/table/table.component.d.ts +104 -0
  174. package/lib/tree-table/kv-treetable.component.d.ts +84 -0
  175. package/lib/tree-table/kv-treetable.module.d.ts +11 -0
  176. package/lib/tree-view/kvtree-view.module.d.ts +9 -0
  177. package/lib/tree-view/tree-view.component.d.ts +14 -0
  178. package/lib/workspace/kvworkspace.module.d.ts +13 -0
  179. package/lib/workspace/workspace.component.d.ts +28 -0
  180. package/package.json +22 -3
  181. package/{src/public-api.ts → public-api.d.ts} +14 -36
  182. package/ng-package.json +0 -7
  183. package/src/assets/.gitkeep +0 -0
  184. package/src/assets/images/LogoEvo.png +0 -0
  185. package/src/assets/images/LogoPequenaEvo.png +0 -0
  186. package/src/assets/images/background.png +0 -0
  187. package/src/assets/images/keepass-logo.png +0 -0
  188. package/src/assets/images/keepass-logo.svg +0 -74
  189. package/src/assets/images/keevo-logo.png +0 -0
  190. package/src/assets/images/logokeevo_2.png +0 -0
  191. package/src/index.ts +0 -1
  192. package/src/lib/api/base-components/base-component-button.ts +0 -27
  193. package/src/lib/api/base-components/base-component-chart.ts +0 -105
  194. package/src/lib/api/base-components/base-component-crud-form.ts +0 -328
  195. package/src/lib/api/base-components/base-component-crud-list.ts +0 -111
  196. package/src/lib/api/base-components/base-component-crud.ts +0 -70
  197. package/src/lib/api/base-components/base-component-dropdown-new.ts +0 -112
  198. package/src/lib/api/base-components/base-component-dropdown.ts +0 -164
  199. package/src/lib/api/base-components/base-component-input.ts +0 -107
  200. package/src/lib/api/base-components/base-component-multi-select.ts +0 -136
  201. package/src/lib/api/base-components/base-component.ts +0 -46
  202. package/src/lib/api/components/chart/chart.config.ts +0 -12
  203. package/src/lib/api/components/chart/chart.model.ts +0 -9
  204. package/src/lib/api/components/chart/orchart.config.ts +0 -41
  205. package/src/lib/api/components/chart/orchart.item.ts +0 -33
  206. package/src/lib/api/components/dropdown/filtro.combo.ts +0 -4
  207. package/src/lib/api/components/error/error.component.html +0 -3
  208. package/src/lib/api/components/error/error.component.scss +0 -5
  209. package/src/lib/api/components/error/error.component.ts +0 -22
  210. package/src/lib/api/components/error/kverror.module.ts +0 -23
  211. package/src/lib/api/components/table/action-item.ts +0 -5
  212. package/src/lib/api/components/table/kv-menuitem.ts +0 -10
  213. package/src/lib/api/components/table/table.config.column.ts +0 -21
  214. package/src/lib/api/components/table/table.config.ts +0 -20
  215. package/src/lib/api/components/table/table.paginate.ts +0 -6
  216. package/src/lib/api/helpers/component-providers.ts +0 -16
  217. package/src/lib/api/helpers/keevo-validators.ts +0 -77
  218. package/src/lib/api/helpers/translate-primeng.ts +0 -25
  219. package/src/lib/api/models/menu/menu.model.ts +0 -10
  220. package/src/lib/api/models/menu/sistemamenu.model.ts +0 -8
  221. package/src/lib/api/modules/primeng.module.ts +0 -125
  222. package/src/lib/api/services/base.api.service.ts +0 -115
  223. package/src/lib/api/services/component.service.ts +0 -22
  224. package/src/lib/api/services/form.service.ts +0 -105
  225. package/src/lib/api/services/imagens.service.ts +0 -20
  226. package/src/lib/api/services/notification.service.ts +0 -82
  227. package/src/lib/api/services/object.service.ts +0 -20
  228. package/src/lib/buttons/button-personalize/button-personalize.component.html +0 -11
  229. package/src/lib/buttons/button-personalize/button-personalize.component.scss +0 -3
  230. package/src/lib/buttons/button-personalize/button-personalize.component.ts +0 -13
  231. package/src/lib/buttons/button-popup/button-popup.component.html +0 -12
  232. package/src/lib/buttons/button-popup/button-popup.component.scss +0 -13
  233. package/src/lib/buttons/button-popup/button-popup.component.ts +0 -30
  234. package/src/lib/buttons/button-secondary/button-secondary.component.html +0 -12
  235. package/src/lib/buttons/button-secondary/button-secondary.component.scss +0 -14
  236. package/src/lib/buttons/button-secondary/button-secondary.component.ts +0 -13
  237. package/src/lib/buttons/button-success/button-success.component.html +0 -11
  238. package/src/lib/buttons/button-success/button-success.component.scss +0 -13
  239. package/src/lib/buttons/button-success/button-success.component.ts +0 -13
  240. package/src/lib/buttons/kvbutton.module.ts +0 -25
  241. package/src/lib/chart/chart.component.html +0 -38
  242. package/src/lib/chart/chart.component.scss +0 -0
  243. package/src/lib/chart/chart.component.spec.ts +0 -28
  244. package/src/lib/chart/chart.component.ts +0 -141
  245. package/src/lib/chart/kvchart.module.ts +0 -20
  246. package/src/lib/directives/template.directive.ts +0 -15
  247. package/src/lib/inputs/check/check.component.html +0 -11
  248. package/src/lib/inputs/check/check.component.scss +0 -13
  249. package/src/lib/inputs/check/check.component.ts +0 -24
  250. package/src/lib/inputs/dropdown/dropdown.component.html +0 -91
  251. package/src/lib/inputs/dropdown/dropdown.component.scss +0 -0
  252. package/src/lib/inputs/dropdown/dropdown.component.ts +0 -28
  253. package/src/lib/inputs/editor/editor.component.html +0 -90
  254. package/src/lib/inputs/editor/editor.component.scss +0 -4
  255. package/src/lib/inputs/editor/editor.component.ts +0 -80
  256. package/src/lib/inputs/input-calendar/input-calendar.component.html +0 -30
  257. package/src/lib/inputs/input-calendar/input-calendar.component.scss +0 -0
  258. package/src/lib/inputs/input-calendar/input-calendar.component.ts +0 -81
  259. package/src/lib/inputs/input-mask/input-mask.component.html +0 -20
  260. package/src/lib/inputs/input-mask/input-mask.component.scss +0 -0
  261. package/src/lib/inputs/input-mask/input-mask.component.ts +0 -20
  262. package/src/lib/inputs/input-number/input-number.component.html +0 -22
  263. package/src/lib/inputs/input-number/input-number.component.scss +0 -0
  264. package/src/lib/inputs/input-number/input-number.component.ts +0 -52
  265. package/src/lib/inputs/input-password/input-password.component.html +0 -23
  266. package/src/lib/inputs/input-password/input-password.component.scss +0 -0
  267. package/src/lib/inputs/input-password/input-password.component.ts +0 -23
  268. package/src/lib/inputs/input-text/input-text.component.html +0 -20
  269. package/src/lib/inputs/input-text/input-text.component.scss +0 -18
  270. package/src/lib/inputs/input-text/input-text.component.ts +0 -17
  271. package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.html +0 -32
  272. package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.scss +0 -0
  273. package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.spec.ts +0 -23
  274. package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.ts +0 -36
  275. package/src/lib/inputs/input-textarea/input-textarea.component.html +0 -22
  276. package/src/lib/inputs/input-textarea/input-textarea.component.scss +0 -0
  277. package/src/lib/inputs/input-textarea/input-textarea.component.ts +0 -33
  278. package/src/lib/inputs/input-time/input-time.component.html +0 -23
  279. package/src/lib/inputs/input-time/input-time.component.scss +0 -0
  280. package/src/lib/inputs/input-time/input-time.component.ts +0 -20
  281. package/src/lib/inputs/kvinputs.module.ts +0 -64
  282. package/src/lib/inputs/multi-select/multi-select.component.html +0 -28
  283. package/src/lib/inputs/multi-select/multi-select.component.scss +0 -8
  284. package/src/lib/inputs/multi-select/multi-select.component.ts +0 -31
  285. package/src/lib/inputs/radio-group/radio-group.component.html +0 -19
  286. package/src/lib/inputs/radio-group/radio-group.component.scss +0 -15
  287. package/src/lib/inputs/radio-group/radio-group.component.ts +0 -50
  288. package/src/lib/inputs/switch/switch.component.html +0 -12
  289. package/src/lib/inputs/switch/switch.component.scss +0 -3
  290. package/src/lib/inputs/switch/switch.component.ts +0 -30
  291. package/src/lib/keevo-components.module.ts +0 -50
  292. package/src/lib/label/label.component.html +0 -6
  293. package/src/lib/label/label.component.scss +0 -9
  294. package/src/lib/label/label.component.spec.ts +0 -23
  295. package/src/lib/label/label.component.ts +0 -13
  296. package/src/lib/label/label.module.ts +0 -18
  297. package/src/lib/loader/kvloader.module.ts +0 -17
  298. package/src/lib/loader/loader.component.html +0 -1
  299. package/src/lib/loader/loader.component.ts +0 -14
  300. package/src/lib/loader/loader.service.ts +0 -26
  301. package/src/lib/login/kvlogin.module.ts +0 -28
  302. package/src/lib/login/login.component.html +0 -108
  303. package/src/lib/login/login.component.scss +0 -48
  304. package/src/lib/login/login.component.spec.ts +0 -23
  305. package/src/lib/login/login.component.ts +0 -65
  306. package/src/lib/menu/kvmenu.module.ts +0 -27
  307. package/src/lib/menu/menu.component.html +0 -342
  308. package/src/lib/menu/menu.component.scss +0 -210
  309. package/src/lib/menu/menu.component.spec.ts +0 -23
  310. package/src/lib/menu/menu.component.ts +0 -246
  311. package/src/lib/orgchart/orgchart.component.html +0 -58
  312. package/src/lib/orgchart/orgchart.component.scss +0 -21
  313. package/src/lib/orgchart/orgchart.component.ts +0 -118
  314. package/src/lib/orgchart/orgchart.module.ts +0 -14
  315. package/src/lib/page-form/kv-page-form.module.ts +0 -22
  316. package/src/lib/page-form/page-form.component.html +0 -57
  317. package/src/lib/page-form/page-form.component.scss +0 -72
  318. package/src/lib/page-form/page-form.component.spec.ts +0 -28
  319. package/src/lib/page-form/page-form.component.ts +0 -121
  320. package/src/lib/picklist/kvpicklist.module.ts +0 -20
  321. package/src/lib/picklist/picklist.component.html +0 -17
  322. package/src/lib/picklist/picklist.component.scss +0 -0
  323. package/src/lib/picklist/picklist.component.spec.ts +0 -26
  324. package/src/lib/picklist/picklist.component.ts +0 -27
  325. package/src/lib/pipes/codigofile.pipe.ts +0 -15
  326. package/src/lib/pipes/cpfcnpj.pipe.ts +0 -21
  327. package/src/lib/pipes/pipes.module.ts +0 -22
  328. package/src/lib/pipes/telefone.pipe.ts +0 -38
  329. package/src/lib/styles-components.scss +0 -11
  330. package/src/lib/table/kvtable.module.ts +0 -22
  331. package/src/lib/table/table.component.html +0 -473
  332. package/src/lib/table/table.component.scss +0 -240
  333. package/src/lib/table/table.component.spec.ts +0 -28
  334. package/src/lib/table/table.component.ts +0 -546
  335. package/src/lib/tree-table/kv-treetable.component.html +0 -649
  336. package/src/lib/tree-table/kv-treetable.component.scss +0 -315
  337. package/src/lib/tree-table/kv-treetable.component.ts +0 -390
  338. package/src/lib/tree-table/kv-treetable.module.ts +0 -18
  339. package/src/lib/tree-view/kvtree-view.module.ts +0 -19
  340. package/src/lib/tree-view/tree-view.component.html +0 -9
  341. package/src/lib/tree-view/tree-view.component.scss +0 -0
  342. package/src/lib/tree-view/tree-view.component.spec.ts +0 -23
  343. package/src/lib/tree-view/tree-view.component.ts +0 -29
  344. package/src/lib/workspace/kvworkspace.module.ts +0 -29
  345. package/src/lib/workspace/workspace.component.html +0 -108
  346. package/src/lib/workspace/workspace.component.scss +0 -83
  347. package/src/lib/workspace/workspace.component.ts +0 -75
  348. package/tsconfig.lib.json +0 -14
  349. package/tsconfig.lib.prod.json +0 -10
  350. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,499 @@
1
+ import { Component, ContentChildren, EventEmitter, HostListener, Input, Output, ViewChild, } from '@angular/core';
2
+ import { TemplateDirective } from '../directives/template.directive';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "../pipes/codigofile.pipe";
6
+ import * as i3 from "../pipes/cpfcnpj.pipe";
7
+ import * as i4 from "../pipes/telefone.pipe";
8
+ import * as i5 from "@angular/platform-browser";
9
+ import * as i6 from "primeng/api";
10
+ import * as i7 from "primeng/autofocus";
11
+ import * as i8 from "primeng/button";
12
+ import * as i9 from "primeng/card";
13
+ import * as i10 from "primeng/checkbox";
14
+ import * as i11 from "primeng/tooltip";
15
+ import * as i12 from "primeng/inputtext";
16
+ import * as i13 from "primeng/menu";
17
+ import * as i14 from "primeng/panel";
18
+ import * as i15 from "primeng/table";
19
+ import * as i16 from "@angular/forms";
20
+ const imgDefault = '/9j/4AAQSkZJRgABAQIAdgB2AAD/4QBiRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAMAAAITAAMAAAABAAEAAAAAAAAAAAB2AAAAAQAAAHYAAAAB/9sAQwADAgICAgIDAgICAwMDAwQGBAQEBAQIBgYFBgkICgoJCAkJCgwPDAoLDgsJCQ0RDQ4PEBAREAoMEhMSEBMPEBAQ/9sAQwEDAwMEAwQIBAQIEAsJCxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/8AAEQgAkACQAwERAAIRAQMRAf/EAB0AAQABBAMBAAAAAAAAAAAAAAAGAQIHCAMECQX/xABBEAACAQQABQICCAQDBAsAAAABAgMABAURBgcSITETQQhRCRQVGSJVldEyYYGRQlJiFiM3OFNjcXN1dpKTsbO0/8QAGgEBAAIDAQAAAAAAAAAAAAAAAAEFAwQGAv/EADIRAAIABAMFCAEFAQEBAAAAAAABAgMEESExUQUSQZHwExUyYXGBobHRIjNCweE08SP/2gAMAwEAAhEDEQA/APKqgFAKAUBdDDLcSpBBE8ksjBERFJZmJ0AAPJJqUnE7IhtQq7yJ5w9ydz2Vi+s5e4XFRMu0V09SU70RtAR0jRPk9QI0V96s5GypkxXmPd+X/n35FbO2pKl4QfqfxzJ9jOU/BmO6WksZb6RJBIr3UpOta0pVelSO3gg72d7HarOXs2ngzV/XpIq49pVMfG3ovzdkmsMTisX1/ZmMtLP1ddfoQLH1a3rfSBvWz/etuCXBLvuJK+mBpxzI5lt9t21xO3WQ8CgOpf4nFZTo+08ZaXnpb6PrECydO9b11A63of2rHHLgmeNJ+qPcEyOXfcbV9MCM5PlPwZkepo7GWxkeQyM9rKRve9qFbqUL38ADWhrQ7VqTNm08eSt6P/1G5BtKog439V+LMgPEPJ3PYqL6ziLhcrGq7dET05RrZOkJPUNAeD1EnQX3qsn7KmS1vS3vfD/378i0k7UlTHuxrdfxz/wgc0M1vM9vcRPFLExR0dSrKwOiCD4IPtVY04XZlkmoldZFtQSKAUAoBQCgFASjg/l9meLZRKFeysOksbuSIlW7kaQdus7BB0dDR2d6B3aWhmVOOUOv41NKsrYaVYYxadX/AN+Vmzh7hHAcMRBMTYIkpXpe4f8AFK/Yb2x9j0g9I0u/YV0MimlU6tAsdeJzs2pmz/3Ir/XSy11Z9ms5gKhTUkXK6FBcaFCLjQoLjQoTcoVNBcpUEnxuIeEcBxRCUy1gjShelLhPwyp2OtMO5A6iek7XftWCfSyqhfrWOvEzyaibIf8A84reXDp5Xz0ZhPjHl/l+EZfUIa8sCoIu44yFU7A0479B2RrZ0djR3sDnaqimUru8Vr+dDoKSvl1KtFaGK+V888sr4K70+SL1pm+KAUAoBQE55dcu5eJplyuWR48TG3YbKtcsD3VT7KD2Lf0HfZWyoaF1D34/D99cerVtdXKnXZy/F9f7p1fOMMMVvElvbxJHFGoRERQFVQNAADwAPauiSUKssjnW3E7t4nIB869HhsrQgrUAUAoBQCgFAUqQUIoTc45oYp4ngniSSORSjo6hlZSNEEHsQR7VDSiVnkek3C7p4mDeYnLuXhiVsrikeTFSN3HctbMT2Vj7qT4b+h76Lc5XULp32kvw/X+efT6OhrlULs5ni+/916tB6rSyFAKAlHL/AIOl4uy+pCq2FmySXZJO2UntGNEHbaI37AE+dA7lFSuqmWeSz/HuaFfVqml7qvvRXt5eeTWF8nnpa5sFDFFBEkEESRxxqEREUBVUDQAA8AD2rqUklZHMtt4s5QKk8tlaggUAoCfcpuRPNLnbknx/Lvha4yEcDBbm9ciK1tt/9JK2lB136RtiPANYZ1RLp1eYzPIpptQ7S0bP4T6Lbju4tFk4h5qYKwuSNmKzsZrpAfl1sY//AIqui2vAn+mFllDseNr9USIrzB+jb528K2cuR4SyeG4tiiBY29s7W12QPcRyfgP/AGCTZ9gayStqyY3aK6MU3ZM6BXgaZqvlsTlcDkrnDZvG3WPv7OQxXFrdRNFLE48qyMAVP8jVkmoldZFZFC4XaLM6lSQKAUBaRU5kpnHNDFcRPb3ESSRSKUdHUMrKRogg+QahpNNM9wxOF7yzNfeYHB0vCOYIj6TYXjPJaEHuqgjaHZJ2uwN+40fOwOWraV0szDwvL8ex0tBVqpl7r8UKV/PzySxtksuRF60zfLoYZbiVIIInklkYIiIpLMxOgAB5JNSk4nZENqFXeRspwngIuGeH7TDoIzJEnVO6Af7yVu7HYALDfYEjfSFHtXW00hU8pS17+vXwchUTe2mxTMcXq/TV2yxSwvd5tn2AK2DAy6oIFAKAyp8NXIzJfEBzQsuC4JZLXFwIb3L3iAbgtEIDdO+3WxKovnu2yCAa16qoVNLcfHgbNJTOpmqDhxPYngzgvhfl7w1Y8IcHYa3xmJx8Yjgt4V0B82Y+WYnuWOySSSSa5WZMimxOKN3Z1kuXDKhUECsj7deD2KA1y+MT4W8Nzz4NuuI+H8dFDxzhrdpbC4jUK1/Gg2bWQ/4tjfQT/C2u4Bbe/Q1jp492Lwv48zQrqNVMG9Cv1L58jyVdHjdo5FKspIZSNEH5GumOWKUAoBQFpHvUko+Nxdw9DxRgLrEyBRK69du7aHRKP4TvR0N9job6SR71r1UhVEpy37epsU03sJsMzT6/v342ZrZNDNbzPb3ETxSxMUdHUqysDogg+CD7VyTThdmdcmoldZE85O8PRZXPy5a5CtFilV1Q6O5X2EOiD2AVjvYIYKastlyVMm77/j99fJWbUqHLlqWv5cfJW+/q5m+ujOdLqHkrUAUAoD0i+i74Vs7Tlrxdxr6S/W8lm1xpcjuIreBJAB8gWuW/sPlVDteNuZDBor9cjoNjwJS4o9X9f+m61VBcCgFAKA8Y/i24VtODPiP48wVhEsVv9p/XkRRoILmNLjpA9gPW0B8q6yijcyRDE9PrA5GugUuojhWv3iYjrZNUUAoClSC2oPRhDnFw9Fis/Fl7boWPKqzsg7alTQc6AA0QyneySxYn2rntqSFLmKYv5fa/P3c6PZc5zJW484frh/ZPuU+M+zuDLaRklSS+kkunWQa1s9KlRr+Eoiked734Iqz2bL3KdPW769kVe0o9+oflZf39smQFb5oMuqDyKAUAoD0b+i64xs7ngPjDgFpVF3j8smWVCe7RTwpESPmA1uN/LrHzqh2vLajhj8rHQbHmJwRQaO5u7VQXAoBQCgPFz4qOMbPjz4huOuJcfKstrJlGtIJFO1kjt0W3VwfkRECP5Guso5blyIYXp94nI1sxTKiKJa/WBiqtk1RQCgFAWkVJKIdzYxn2jwXcyKkzyWUkd0ix9/B6WLDR7BHc+2tb3oGq/aUtzKd24Y9cyw2dMUuoV+OHXukSXEWH2VirLGer6v1O3jg6+np6uhQu9bOt68brclwdnAoNFY05kfaRuPV35ndHishjZWoIFAKAUBkbkBzozfIXmZjuPcRGbiCMG2yVn1dIu7NyPUj37HsrKfZkUnY2DgqZCqZbgZsU1RFTTFGj2J5bczOC+bXClrxlwLmocjjrpRvpIEkEmtmKVPKON91P8iNggnlZsqOTFuRrE6yVOgnw78DuiU1jMgoDVj40vizw3KPhe+5e8F5SO444y0BgPoPv7JhcaMzkfwylT+BfIJDnsAGsqCic6JTI1+lfJW19apELggf6n8Hld5rozmRQCgFAKAo3ipJR0stYDK4q8xZm9IXlvJB6nT1dHWpXetjet+N1jmQdpA4NU1zMkuPs41Glezudush4RcPFDyytQBQCgFAKAlPLzmjzB5UZr/aDl5xVfYS9ICyGBwY5lB2FkjYFJF37MCKxzZME5bsxXMsqdMkPeluxsnhPpNueePtFtsvw1wjlZEGvrD2s8MjH5sElCf2UVXxbJkt4NosIdrzksUmRTmD9ID8RPHVnLjbLM47ha1mBVxg7ZopmX/vpGeRT/NCprLL2bIlu7V/UxTdp1ExWTt6GuVzc3F5cS3d3PJPPM5kklkYs7sTssxPckn3Nb6VsEV7beLOOgFAKAUAoCh8VIRbQ9CgRcPFDyytQBQCgFASfg/lfzH5gyenwPwLnc4OrpZ7GwkljQ/6nUdK/1IrHHOlyvHEkZJcmZN8ELZmDA/AJ8T+bRZZuBrXFRv3DX+Ut1Ov5qjsw/qBWrFtKnh/lf2NuHZlTF/G3uSuH6M/4hJUDSZfguE/5XyU5I/8ATARWPvWRo+vcyrZM/Vdex1b/AOjb+I2zQtbtwrfED+G3yjgn/wByNRUrash68iHsmoWnMx9xR8G3xL8JI82R5T5W6iQb68Y8V/sfMLAzt/cVngrqePKL+vswR0FRBnDyx+jEOTxeTwt7Jjsxjrqxu4TqSC5haKRD/NWAIrZTUSujUcLhdmdapIFAKAUBQ+KkItoejqYm/wDtTFWWT9L0vrlvHP0dXV09ahtb0N6351WOXH2kCj1SZ7mQdnG4L3s7cjujxWQxsrUECgMj8kOQPMPn7xIcDwRjlFvbdLX+Sudra2SHwXYA7Y6OkUFjo9tAkYKipl00O9GbFPTTKmLdg5no9yb+AvkjywggvuIsWvGmcQAvd5aINbK3/V2uygHj+Prb5EeKoZ+0Z07CF7q8vydBI2bJk4xLefn+DY62tbayt47Szt4oIIlCRxRIFRFHgADsBWg23iywStgjlqAKAUAoCOca8uOAuY+OOK474QxWcttEKt7bLI0e/dHI6kP81INZJc2OU7wOxjmSoJqtGrmk/P76Nu3jtLnibkHfTerGGkfh6/m6usfK3nbvv5LITv8AzjsDb021cd2fz/JT1OyVbekcvwaFZHHZDD5C5xWWsp7O9s5WguLeeMpJFIp0yMp7ggggg1dJqJXRSNOF2eZ16ECgKHxUko6WWvxisVeZQw+qLO3kn9Pq6evoUtrejrevOqxzI+zgceib5GSXA5kagTtd25ka5T5MZHgu1jZ5nksZJLV2kO/B6lCnZ/CEdAPGta8AVp7NmOZTpPhh1zNzaMvs6h2449e6ZMQasCvZdUEHZxmOu8vkrTE2EfqXN7PHbwpvXVI7BVH9yKhtQq7JScTsj225L8peHOSnLvFcBcOW8YWziDXlyF095dED1Z3Pklj434UKo7AVyNROiqJjjiOxp5ENPLUEJOawmYUAoBQCgFAKAUBoV9JfyVw8WMxXPHC2kcF+10mJzPprr6wrIxgmb/UvQUJ8kMg8LV1sqod3Jfqik2vTqynLPJnn5V2UQoC0mpJRDubGT+zuC7qNXmSS9kjtUaM61s9TBjsfhKI49971rRNV+0pjl07txw65G/s6WplQr8MevdogHJ3iCLFZ+XE3JVYsqqornQ1Mmyg2SOxDMPBJYqKrNlz1Lm7jyi++BZ7VkOZLUyH+PDyftw5Wv5Gb66I54uqTySzlL/xV4M/8wY7/APTHWKd+1F6MyyP3YfVHubXHHZigFAKAUAoBQCgFAay/SJ/8s+S/8VsP/sqw2Z/0L0ZXbU/5n6o8oa6U5goe1SC2oPRhDnFxDDlc9FibboaPFKyM47kyvouNgkaHSo8AhuoH2rntqz1MmKXD/H7f4+7nR7LkuXKccWcX1w/sgcM0tvKk8ErxyxsHR0YhlYHYII8EGqxNwu6LJpRKzyNlOEs/HxNw/Z5dTGJJU6Z0Uj8Eq9mGgSV79wD36Sp9662mnqolKNe/r18HIVEvsZ0UrT1yzXDH1WF7rNM+wD7VsGBnfweYveHs1j8/jWRbvGXUV5bl16lEkbh1JHuNgdq8xQqJOF8RDE4WolwNjvvFPiX/ADnBfpMf71od2U+j5lh3rUarkPvFPiX/ADnBfpMf707sp9HzHetRquQ+8U+Jf85wX6TH+9O7KfR8x3rUarkPvFPiX/OcF+kx/vTuyn0fMd61Gq5D7xT4l/znBfpMf707sp9HzHetRquQ+8U+Jf8AOcF+kx/vTuyn0fMd61Gq5D7xT4l/znBfpMf707sp9HzHetRquQ+8U+Jf85wX6TH+9O7KfR8x3rUarkPvFPiX/OcF+kx/vTuyn0fMd61Gq5EP5qfGBzp5ycITcD8b5HFzYueaK4dbfHpE/XGdr+Id/NZZNDJkRb8GZinV06og3I8jClbZplpPtUkpHxeLuIYuF8BdZZyhlRei3Rv8cp7KNbGx7nR30g1r1M9U8pzH7evXwbFPK7ebDL1+v698L2NbZppbiV555XklkYu7uxLMxOyST5JNck24nd5nXJKFWRbUEko5f8Yy8I5cGTpNheMkd2CDtVBOpBoE7XZOvcEjzojcoqp0szHwvP8APsaFfSKpl7yvvQ3t5+WOGNs+GtrmwUM0VxElxbypJFIodHRgyspGwQR5BrqU7q6OZaawZyA1OZ5aLqggUAoBQCgFAKAUAoBQFpNTkSkcc00VvE9xcSpHFGpd3dgqqoGyST4AqG0k2z3DC4nurM195gcYy8XZgmPpFhZs8doAO7KSNyHYB23SDr2Gh52Ty1bVOqmXWSy/J0tBSKml7z8USV/Lyzawvms+RF60zfFAKAnHLvmJLwxKuKyrvJipG7HuzWzE92Ue6k+V/qO+w1lQ1zp32czw/X+eXTra6hVQt+X4vvrh1bOUM0VxEk8EqSRSKHR0YFWUjYII8giujTTV0znGmnZo5AfnUnlorUEFaAUAoBQCgFAU3qpBQn5UJSOOaaK3ie4uJUjijUu7uwCqoGyST4AFQ2liz0ld2Rg3mJzEl4mlbFYp3jxUbdz3DXLA9mYeyj2X+p76C85XVzqHuQeH7668ujoaFU67SPxfXXXnB6rSyFAKAUAoCU8H8w81wnIsJd77HhCgs5ZSFTuW3Ge/QepiToaOzsb0RuUtbMpnbOHT8aFfVbOl1F4oLQxN3btnkscr4KyfCy4YGbcBxZgOJog2IyMcsgQO8Dfhlj7KTtT3IBYAsNrvwTXRSamVUK8t+3Hr4Ofm086T+5DbF/flfPNXxtmk8D69ZzCVDGpIsV6hQWGx86EWGx86Cw6hQmxQsaCxSoJPkZ/i3h/hmMtl8jHFIULpAv4pZOzEaUdxsqQGOl35IrBPqZVOrzH7cevgzSqebP8A24b4pcMOdss3xtkm8DCPGPMDL8XS+mS1nYBQBaRykqx2Dtz26zsDWxoaGhvZPO1VbMqnZ4LT86nRUtBLpknFaKLW3rlnbB2evwRetM3hQCgFAKAUAoC6GaW3lSeCV45Y2Do6MQysDsEEeCDUpuF3RDSiVnkTzh7nFn8VELbLQJlYlXSM7+nKOwA24B6h2PkFiTsmrKTtSbLVo1vL56+fMq5+ypcx3lvd14rjy+rK1if4zmxwXkelZL6WykeT01S6hK78aYsvUqjv5LDWjvQ71Zy9pU8x2vb16ZWzNnVEtXtf06T+CS2GWxWVEhxeStbwRa9T0Jlk6N71vpJ1vR/sa3IJkEzwNP0dzTjlxy7KNNX1O3WQ8CgOpf5fE4ro+08naWfq7KevMsfVrzrqI35H96xxzIJfjaXqzJBLjmeBN+iI1k+a/BeN6lS/lvZElMbJaxFvG9sGbpRl7eQx3sa2O9aczaVPLdr39Ol8G1L2dUTFe1vXptciAcQc4s/lYjbYmBMVEy6dkf1JTsEHTkAKO48DqBGw1Vk/ak2ZhB+lfPMtJGypct70x72nBcOfHyxy4kDmmmuJnuLiV5ZZWLu7sWZmJ2SSe5JPvVa24ndlmkoVZZFtQSKAUAoD/9k=';
21
+ export class TableComponent {
22
+ set setConfig(value) {
23
+ this.config = {
24
+ enableCation: value.enableCation || true,
25
+ enableSelect: value.enableSelect || false,
26
+ enableFilter: value.enableFilter || true,
27
+ ...value,
28
+ };
29
+ if (this.config.enableFilter) {
30
+ this.config.columns.forEach((col) => {
31
+ this.globalFilterFields.push(col.field);
32
+ });
33
+ }
34
+ }
35
+ constructor(datePipe, decimalPipe, codigoFipePipe, cpfCnpjPipe, telefonePipe, renderer, elementRef, sanitizer) {
36
+ this.datePipe = datePipe;
37
+ this.decimalPipe = decimalPipe;
38
+ this.codigoFipePipe = codigoFipePipe;
39
+ this.cpfCnpjPipe = cpfCnpjPipe;
40
+ this.telefonePipe = telefonePipe;
41
+ this.renderer = renderer;
42
+ this.elementRef = elementRef;
43
+ this.sanitizer = sanitizer;
44
+ this.globalFilterFields = [];
45
+ this.selectedSize = '';
46
+ this.menuItems = [];
47
+ this.menuColumns = [];
48
+ this.checked = true;
49
+ this.columns = [];
50
+ this.deletedColuns = [];
51
+ this.menuFiltro = false;
52
+ this.checkboxClicked = false;
53
+ this.showFiltrosAvancados = false;
54
+ this.selectedItems = [];
55
+ this.paginator = true;
56
+ this.rows = 5;
57
+ this.pageLinksOptions = 1;
58
+ this.showFirstLastIcon = false;
59
+ this.applyStyle = (rowData, col) => '';
60
+ this.acoesLinhaTabela = true;
61
+ this.filterColumnsBtn = false;
62
+ this.filtrosAvancados = false;
63
+ this.onActiveItem = new EventEmitter();
64
+ this.onActiveItemLote = new EventEmitter();
65
+ this.onPaginate = new EventEmitter();
66
+ this.onSelectionChange = new EventEmitter();
67
+ this.doubleClickEvent = new EventEmitter();
68
+ this.filterField = new EventEmitter();
69
+ this.filtrosAvancadosEmit = new EventEmitter();
70
+ this.isRowSelectable = this.isRowSelectable.bind(this);
71
+ }
72
+ ngOnInit() {
73
+ this.adjustTableSize();
74
+ this.tamanhoTela = window.innerWidth;
75
+ // this.criarMenuColumns();
76
+ this.config.columns.forEach((col) => {
77
+ this.columns.push(col);
78
+ });
79
+ this.checkHideColumns();
80
+ }
81
+ onWindowResize() {
82
+ this.adjustTableSize();
83
+ this.tamanhoTela = window.innerWidth;
84
+ }
85
+ activeItem(rowData) {
86
+ this.onActiveItem.emit(rowData);
87
+ }
88
+ activeItemLote(rowData) {
89
+ this.onActiveItemLote.emit(rowData);
90
+ }
91
+ isBooleanField(rowData, col) {
92
+ return typeof rowData[col.field] == 'boolean';
93
+ }
94
+ isChipField(col) {
95
+ return col.fieldType == 'chip';
96
+ }
97
+ isImageField(col) {
98
+ let retorno = col.fieldType && col.fieldType === 'image' ? true : false;
99
+ return retorno;
100
+ }
101
+ // isVisibleCheckbox(rowData: any): boolean {
102
+ // return this.config.visibleControlCheckboxFunction? this.config.visibleControlCheckboxFunction(rowData): true;
103
+ // }
104
+ isRowSelectable(event) {
105
+ return !this.isDisabledCheckbox(event.data);
106
+ ;
107
+ }
108
+ isDisabledCheckbox(rowData) {
109
+ return this.config.disableControlCheckboxFunction ? this.config.disableControlCheckboxFunction(rowData) : false;
110
+ }
111
+ loadImage(rowData, col) {
112
+ /*
113
+ Nossa coluna de imagem trabalha com strings do tipo: base64 ou url
114
+ */
115
+ let retorno = `data:image/jpg;base64, ${imgDefault}`;
116
+ if (rowData && col && rowData[col.field] && rowData[col.field] !== '') {
117
+ if (rowData[col.field].includes('http'))
118
+ retorno = rowData[col.field];
119
+ else
120
+ retorno = `data:image/jpg;base64, ${rowData[col.field]}`;
121
+ }
122
+ return retorno;
123
+ }
124
+ onGlobalFilter(table, event) {
125
+ this.filterField.emit(event.target.value);
126
+ table.filterGlobal(event.target.value, 'contains');
127
+ }
128
+ paginate(event) {
129
+ if (event) {
130
+ let paginaInicial = (event?.first > 0 ? event.first / event.rows : event.first) + 1;
131
+ let termoPesquisa = '';
132
+ let ordenacao = '';
133
+ if (event.globalFilter)
134
+ termoPesquisa = event.globalFilter;
135
+ if (event.sortField)
136
+ ordenacao = `${event.sortField} ${event.sortOrder === 1 ? 'ASC' : 'DESC'}`;
137
+ const objeto = {
138
+ paginaInicial: paginaInicial,
139
+ tamanhoPagina: event.rows,
140
+ termoPesquisa: termoPesquisa,
141
+ ordenacao: ordenacao,
142
+ };
143
+ this.onPaginate.emit(objeto);
144
+ }
145
+ }
146
+ selectionChange(value = []) {
147
+ this.onSelectionChange.emit(value);
148
+ }
149
+ returnRowClass(rowData, col) {
150
+ let value = rowData[col.field];
151
+ let rowClass;
152
+ this.tableSize > 800 ? (rowClass = 'text-base') : (rowClass = 'text-sm');
153
+ if (col.expiredDate == true) {
154
+ new Date(value) < new Date()
155
+ ? (rowClass = rowClass + ' text-red-400 font-semibold')
156
+ : '';
157
+ }
158
+ return rowClass;
159
+ }
160
+ expiredFile(rowData, col) {
161
+ let value = rowData['datavencimento'];
162
+ return new Date(value) < new Date() && col.field == 'area';
163
+ }
164
+ transformValue(rowData, col) {
165
+ let value = rowData[col.field];
166
+ if (value != null) {
167
+ if (!col.pipe) {
168
+ return value;
169
+ }
170
+ switch (col.pipe) {
171
+ case 'date':
172
+ return this.datePipe.transform(value, 'dd/MM/yyyy');
173
+ case 'decimal':
174
+ return this.decimalPipe.transform(value, '1.2-2', 'pt-BR');
175
+ case 'cpfcnpj':
176
+ return this.cpfCnpjPipe.transform(value);
177
+ case 'telefone':
178
+ return this.telefonePipe.transform(value);
179
+ case 'codigofipe':
180
+ return this.codigoFipePipe.transform(value);
181
+ case 'money':
182
+ return this.formatarValor(value);
183
+ case 'percentage':
184
+ return `${value} %`;
185
+ default:
186
+ break;
187
+ }
188
+ }
189
+ }
190
+ formatarValor(valor) {
191
+ const formatter = new Intl.NumberFormat('pt-BR', {
192
+ style: 'currency',
193
+ currency: 'BRL',
194
+ });
195
+ return formatter.format(valor);
196
+ }
197
+ adjustTableSize() {
198
+ if (this.tableSize < 800) {
199
+ this.selectedSize = 'p-datatable-sm';
200
+ }
201
+ else {
202
+ this.selectedSize = '';
203
+ }
204
+ }
205
+ doubleClick(e, rowData) {
206
+ let eventDoubleClick = { event: e, rowData: rowData };
207
+ let array = [];
208
+ e.target.classList.forEach((x) => array.push(x));
209
+ if (array.find((x) => x == 'ng-star-inserted') != undefined)
210
+ this.doubleClickEvent.emit(eventDoubleClick);
211
+ }
212
+ centralizarColunas(col) {
213
+ if (col.centralize) {
214
+ return 'text-align: center';
215
+ }
216
+ else
217
+ return '';
218
+ }
219
+ alignColunas(col) {
220
+ if (col.align) {
221
+ return `text-align: ${col.align}`;
222
+ }
223
+ else
224
+ return '';
225
+ }
226
+ alignColunasHeader(col) {
227
+ if (col.align) {
228
+ if (col.align == 'right')
229
+ return 'justify-content: end';
230
+ else
231
+ return '';
232
+ }
233
+ else
234
+ return '';
235
+ }
236
+ retornarCampo(action, rowData, field) {
237
+ const _function = action.dynamicfields
238
+ ? action.dynamicfields[field]
239
+ : null;
240
+ const _field = _function
241
+ ? _function.apply(action, [rowData])
242
+ : action[field];
243
+ return _field;
244
+ }
245
+ retornarRow(rowData, col, field) {
246
+ const _rowaction = this.config.rows ? this.config.rows[col.field] : null;
247
+ const _field = _rowaction && _rowaction[field]
248
+ ? _rowaction[field].constructor === Function
249
+ ? _rowaction[field].apply(this, [rowData])
250
+ : _rowaction[field]
251
+ : null;
252
+ return _field;
253
+ }
254
+ exibirCampo(field, rowData) {
255
+ let visible = field.visible ? field.visible(rowData) : true;
256
+ // if (field != undefined && field != null && field != '') {
257
+ // const value = rowData[field];
258
+ // return value;
259
+ // }
260
+ return visible;
261
+ }
262
+ criarMenusModal(data) {
263
+ if (this.config.actions && data) {
264
+ const items = this.config.actions.map((action) => {
265
+ const icon = this.retornarCampo(action, data, 'icon');
266
+ const tooltip = this.retornarCampo(action, data, 'tooltip');
267
+ const tooltipPosition = this.retornarCampo(action, data, 'tooltipPosition');
268
+ const label = this.retornarCampo(action, data, 'label');
269
+ const command = this.retornarCampo(action, data, 'command');
270
+ const visible = action.visible ? action.visible(data) : true;
271
+ const disabled = action.disabled
272
+ ? action.disabled(data)
273
+ : false;
274
+ const menuInsert = {
275
+ label,
276
+ icon,
277
+ tooltip,
278
+ tooltipPosition,
279
+ command,
280
+ disabled,
281
+ visible,
282
+ };
283
+ let item = this.menuItems.filter((x) => x.command == menuInsert.command);
284
+ if (item.length == 0)
285
+ this.menuItems.push(menuInsert);
286
+ else {
287
+ if (menuInsert.label != item[0].label) {
288
+ let index = this.menuItems.indexOf(item[0]);
289
+ this.menuItems.splice(index, 1);
290
+ }
291
+ if (menuInsert.visible != item[0].visible) {
292
+ let index = this.menuItems.indexOf(item[0]);
293
+ this.menuItems.splice(index, 1);
294
+ }
295
+ if (menuInsert.disabled != item[0].disabled) {
296
+ let index = this.menuItems.indexOf(item[0]);
297
+ this.menuItems.splice(index, 1);
298
+ }
299
+ }
300
+ });
301
+ }
302
+ }
303
+ returnClassChip(rowData, col) {
304
+ return `chip-style w-auto border-round-2xl p-2 text-${this.retornarRow(rowData, col, 'stylechip')} border-${this.retornarRow(rowData, col, 'stylechip')}`;
305
+ }
306
+ returnClassIcon(rowData, col) {
307
+ return this.retornarRow(rowData, col, 'iconrow');
308
+ }
309
+ returnTooltipIcon(rowData, col) {
310
+ return this.retornarRow(rowData, col, 'tooltipiconrow');
311
+ }
312
+ deleteColumn(field) {
313
+ let index;
314
+ let column = this.config.columns.find((x) => x.field == field);
315
+ if (column) {
316
+ index = this.config.columns.indexOf(column);
317
+ this.config.columns.splice(index, 1);
318
+ this.deletedColuns.push(column);
319
+ }
320
+ }
321
+ addColumn(field) {
322
+ let index;
323
+ let column = this.config.columns.find((x) => x.field == field);
324
+ if (!column) {
325
+ let deletedColumn = this.deletedColuns.find((x) => x.field == field);
326
+ if (deletedColumn != undefined) {
327
+ index = this.deletedColuns.indexOf(deletedColumn);
328
+ this.deletedColuns.slice(index, 1);
329
+ this.config.columns.push(deletedColumn);
330
+ }
331
+ }
332
+ }
333
+ dinamicColumnSet(e, col) {
334
+ col.checked = e.checked;
335
+ if (e.checked)
336
+ this.addColumn(col.field);
337
+ else
338
+ this.deleteColumn(col.field);
339
+ if (col.position)
340
+ this.config.columns.sort(this.sortByPosition());
341
+ }
342
+ // abrirMenuFiltro(e: any) {
343
+ // this.menuFiltro = !this.menuFiltro;
344
+ // this.checkboxClicked = false;
345
+ // if (this.tamanhoTela < 700)
346
+ // this.styleSetter('left', (this.botaoFiltro.nativeElement.offsetLeft - 288) + 'px')
347
+ // else
348
+ // this.styleSetter('left', (this.botaoFiltro.nativeElement.offsetLeft + 40) + 'px')
349
+ // this.styleSetter('top', this.botaoFiltro.nativeElement.offsetTop + 'px')
350
+ // this.styleSetter('visibility', this.menuFiltro ? 'visible' : 'hidden')
351
+ // }
352
+ // fecharMenuFiltro() {
353
+ // this.menuFiltro = false;
354
+ // this.checkboxClicked = false;
355
+ // this.styleSetter('visibility', 'hidden')
356
+ // }
357
+ // @HostListener('document:keydown.escape', ['$event'])
358
+ // onEscapeKey(event: KeyboardEvent) {
359
+ // if (this.filterColumnsBtn == true && this.menuFiltro == true) {
360
+ // this.fecharMenuFiltro();
361
+ // }
362
+ // }
363
+ // @HostListener('document:click', ['$event'])
364
+ // onClickEvent(event: any) {
365
+ // if (this.filterColumnsBtn == true && this.menuFiltro == true) {
366
+ // const clickedElement = event.target as HTMLElement;
367
+ // const menuFiltroDiv =
368
+ // this.elementRef.nativeElement.querySelector('#menuFiltroDiv');
369
+ // const botaoFiltro =
370
+ // this.elementRef.nativeElement.querySelector('#botaoFiltro');
371
+ // const isCheckboxClicked =
372
+ // clickedElement.classList.toString().includes('p-checkbox') ||
373
+ // event.target.classList.toString() == '';
374
+ // const isInsideMenu =
375
+ // menuFiltroDiv?.contains(clickedElement) ||
376
+ // botaoFiltro?.contains(clickedElement) ||
377
+ // isCheckboxClicked;
378
+ // if (!isInsideMenu) this.fecharMenuFiltro();
379
+ // }
380
+ // }
381
+ checkMenuFiltro(col) {
382
+ let deletedColumn = this.deletedColuns.find((x) => x.field == col.field);
383
+ if (deletedColumn)
384
+ col.checked = false;
385
+ else
386
+ col.checked = true;
387
+ }
388
+ sortByPosition() {
389
+ return function (elem1, elem2) {
390
+ if (elem1.position < elem2.position) {
391
+ return -1;
392
+ }
393
+ else if (elem1.position > elem2.position) {
394
+ return 1;
395
+ }
396
+ else {
397
+ return 0;
398
+ }
399
+ };
400
+ }
401
+ callDisabled(action, data) {
402
+ if (action?.disabled) {
403
+ return action.disabled(data);
404
+ }
405
+ return false;
406
+ }
407
+ dinamicDisableColumn(col) {
408
+ if (col.fixedColumn)
409
+ return col.fixedColumn;
410
+ else
411
+ return false;
412
+ }
413
+ checkHideColumns() {
414
+ let hideColumnsConfig = this.columns.filter((col) => col.hideColumn == true);
415
+ hideColumnsConfig.forEach((col) => this.deleteColumn(col.field));
416
+ }
417
+ getCustomTemplate(templatename) {
418
+ return this._templates[templatename];
419
+ }
420
+ // styleSetter(style: string, data: string) {
421
+ // this.renderer?.setStyle(
422
+ // this.menuFiltroDiv.nativeElement,
423
+ // style,
424
+ // data
425
+ // );
426
+ // }
427
+ filtrosAvancadosEvent(e) {
428
+ this.showFiltrosAvancados = !this.showFiltrosAvancados;
429
+ this.filtrosAvancadosEmit.emit(this.showFiltrosAvancados);
430
+ }
431
+ }
432
+ TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: TableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i3.CpfCnpjPipe }, { token: i4.TelefonePipe }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i5.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
433
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: TableComponent, selector: "kv-table", inputs: { _templates: ["templates", "_templates"], setConfig: ["config", "setConfig"], dataSource: "dataSource", selectedItems: "selectedItems", totalRecords: "totalRecords", paginator: "paginator", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", pageLinksOptions: "pageLinksOptions", showFirstLastIcon: "showFirstLastIcon", tableSize: "tableSize", applyStyle: "applyStyle", acoesLinhaTabela: "acoesLinhaTabela", filterColumnsBtn: "filterColumnsBtn", filtrosAvancados: "filtrosAvancados" }, outputs: { onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", filtrosAvancadosEmit: "filtrosAvancadosEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }], ngImport: i0, template: "<div>\n\n <p-panel\n *ngIf=\"filtrosAvancados\"\n header=\"Filtros avan\u00E7ados\"\n [toggleable]=\"true\"\n [collapsed]=\"true\"\n collapsedIcon=\"pi pi-filter\"\n styleClass=\"bg-gray-200\"\n [style]=\"{'margin-bottom': '2px'}\"\n >\n <ng-content></ng-content>\n </p-panel>\n\n\n <p-table\n *ngIf=\"config\"\n #dt\n styleClass=\"p-datatable-sm\"\n [value]=\"dataSource\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [columns]=\"config.columns\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {{totalRecords}}\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n (selectionChange)=\"selectionChange($event)\"\n rowGroupMode=\"rowspan\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [pageLinks]=\"pageLinksOptions\"\n [responsive]=\"true\"\n responsiveLayout=\"stack\"\n >\n <ng-template\n pTemplate=\"caption\"\n *ngIf=\"config.enableCation\"\n >\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\n\n <div class=\"col-12 flex flex-column\">\n <div\n *ngIf=\"config.title\"\n class=\"text-md font-bold my-3\"\n >\n {{ config.title }}\n </div>\n <div\n *ngIf=\"config.subtitle\"\n class=\"text-sm mb-4 font-medium\"\n >\n {{ config.subtitle }}\n </div>\n </div>\n\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{tamanhoTela < 768 ? 'col-10' : 'col-12'}}\">\n <span\n *ngIf=\"config.enableFilter\"\n class=\"block mt-2 md:mt-0 p-input-icon-left text-align-center\"\n >\n <i\n class=\"material-symbols-outlined icon-search\"\n style=\"display: inline-block\"\n >\n search\n </i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(dt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"w-full mb-1\"\n style=\"height: 40px\"\n />\n </span>\n\n <!-- <button\n pButton\n #botaoFiltro\n *ngIf=\"filtrosAvancados\"\n class=\"p-button-raised p-button-text actionLoteBtns\"\n (click)=\"filtrosAvancadosEvent(showFiltrosAvancados)\"\n [pTooltip]=\"'Filtros avan\u00E7ados'\"\n >\n <span class=\"material-symbols-outlined md-22\"> filter_alt </span>\n </button> -->\n\n <!-- <div\n #menuFiltroDiv\n id = \"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200\"\n (click)=\"onClickEvent($event)\"\n > -->\n\n <div\n #menuFiltroDiv\n id=\"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\n >\n <p-card>\n <div\n class=\"flex flex-column text-medium w-15rem\"\n *ngFor=\"let col of columns\"\n >\n {{ checkMenuFiltro(col) }}\n <p-checkbox\n #filterColumns\n [label]=\"col.header\"\n [binary]=\"true\"\n class=\"checkbox-container\"\n (onChange)=\"dinamicColumnSet($event, col)\"\n [(ngModel)]=\"col.checked\"\n *ngIf=\"!dinamicDisableColumn(col)\"\n ></p-checkbox>\n </div>\n </p-card>\n </div>\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div\n *ngFor=\"let action of config.actionsLote\"\n class=\"btns-options\"\n >\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [style.backgroundColor]=\"retornarCampo(action, selectedItems, 'btnColor')\"\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\n >\n <span\n class=\"material-symbols-outlined md-22\"\n [style.color]=\"\n retornarCampo(action, selectedItems, 'iconBtnColor')\n \"\n >\n {{ retornarCampo(action, selectedItems, \"icon\") }}\n </span>\n </button>\n </div>\n </div>\n\n </div>\n </ng-template>\n\n <ng-template\n pTemplate=\"header\"\n let-columns\n >\n <tr>\n <th\n style=\"width: 4rem; border-left: solid 4px transparent\"\n *ngIf=\"config.enableSelect\"\n >\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\n </th>\n\n <th\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n class=\"text-sm\"\n >\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n\n\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span>\n\n </div>\n </th>\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n >\n <tr (dblclick)=\"doubleClick($event, rowData)\">\n <td\n *ngIf=\"config.enableSelect\"\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\n >\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n\n <ng-container *ngFor=\"let col of columns\">\n <td\n *ngIf=\"rowgroup && !col.template\"\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\n <i\n *ngIf=\"col.icon\"\n [class]=\"col.icon + ' mr-2'\"\n ></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >{{\n transformValue(rowData, col)\n }}</span>\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img\n class=\"image\"\n [src]=\"loadImage(rowData, col)\"\n />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\n <i\n *ngIf=\"col.icon\"\n [class]=\"col.icon + ' mr-2'\"\n ></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ transformValue(rowData, col) }}</span>\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img\n class=\"image\"\n [src]=\"loadImage(rowData, col)\"\n />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </td>\n </ng-container>\n\n <td\n *ngIf=\"config.actions && config.actions.length > 0\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n <div\n class=\"flex flex-row justify-content-end w-full gap-1\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\">\n <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData); action?.command()\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"action.tooltipPosition ? action.tooltipPosition : 'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\n </button>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"font-size: 20px\"\n >\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </td>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"emptymessage\"\n let-columns\n >\n <tr>\n <td\n [attr.colspan]=\"columns.length + 2\"\n style=\"text-align: center\"\n >\n Nenhum registro encontrado\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>", styles: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover,#moreVertBtn:hover{color:#a9a9a9}.icon-search{top:20px}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-table{border-spacing:0px 2px}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-right:1px solid #ddd!important;border-bottom:1px solid hsl(0,0%,91%)!important;border-top:0px solid!important;line-height:30px!important;gap:5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 10px 0 0!important;border-top:1px solid #ddd!important;line-height:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 0 10px 10px!important;border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-left:solid 4px #5289B4!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i7.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i8.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i9.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i10.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "directive", type: i11.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i12.InputText, selector: "[pInputText]" }, { kind: "component", type: i13.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i14.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i15.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i15.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i15.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i15.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: TableComponent, decorators: [{
435
+ type: Component,
436
+ args: [{ selector: 'kv-table', template: "<div>\n\n <p-panel\n *ngIf=\"filtrosAvancados\"\n header=\"Filtros avan\u00E7ados\"\n [toggleable]=\"true\"\n [collapsed]=\"true\"\n collapsedIcon=\"pi pi-filter\"\n styleClass=\"bg-gray-200\"\n [style]=\"{'margin-bottom': '2px'}\"\n >\n <ng-content></ng-content>\n </p-panel>\n\n\n <p-table\n *ngIf=\"config\"\n #dt\n styleClass=\"p-datatable-sm\"\n [value]=\"dataSource\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [columns]=\"config.columns\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {{totalRecords}}\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n (onLazyLoad)=\"paginate($event)\"\n (selectionChange)=\"selectionChange($event)\"\n rowGroupMode=\"rowspan\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"showFirstLastIcon\"\n [pageLinks]=\"pageLinksOptions\"\n [responsive]=\"true\"\n responsiveLayout=\"stack\"\n >\n <ng-template\n pTemplate=\"caption\"\n *ngIf=\"config.enableCation\"\n >\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\n\n <div class=\"col-12 flex flex-column\">\n <div\n *ngIf=\"config.title\"\n class=\"text-md font-bold my-3\"\n >\n {{ config.title }}\n </div>\n <div\n *ngIf=\"config.subtitle\"\n class=\"text-sm mb-4 font-medium\"\n >\n {{ config.subtitle }}\n </div>\n </div>\n\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{tamanhoTela < 768 ? 'col-10' : 'col-12'}}\">\n <span\n *ngIf=\"config.enableFilter\"\n class=\"block mt-2 md:mt-0 p-input-icon-left text-align-center\"\n >\n <i\n class=\"material-symbols-outlined icon-search\"\n style=\"display: inline-block\"\n >\n search\n </i>\n\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"true\"\n type=\"text\"\n (input)=\"onGlobalFilter(dt, $event)\"\n placeholder=\"Pesquisar...\"\n class=\"w-full mb-1\"\n style=\"height: 40px\"\n />\n </span>\n\n <!-- <button\n pButton\n #botaoFiltro\n *ngIf=\"filtrosAvancados\"\n class=\"p-button-raised p-button-text actionLoteBtns\"\n (click)=\"filtrosAvancadosEvent(showFiltrosAvancados)\"\n [pTooltip]=\"'Filtros avan\u00E7ados'\"\n >\n <span class=\"material-symbols-outlined md-22\"> filter_alt </span>\n </button> -->\n\n <!-- <div\n #menuFiltroDiv\n id = \"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200\"\n (click)=\"onClickEvent($event)\"\n > -->\n\n <div\n #menuFiltroDiv\n id=\"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\n >\n <p-card>\n <div\n class=\"flex flex-column text-medium w-15rem\"\n *ngFor=\"let col of columns\"\n >\n {{ checkMenuFiltro(col) }}\n <p-checkbox\n #filterColumns\n [label]=\"col.header\"\n [binary]=\"true\"\n class=\"checkbox-container\"\n (onChange)=\"dinamicColumnSet($event, col)\"\n [(ngModel)]=\"col.checked\"\n *ngIf=\"!dinamicDisableColumn(col)\"\n ></p-checkbox>\n </div>\n </p-card>\n </div>\n </div>\n\n <div class=\"flex flex-row col-1 justify-content-end\">\n <div\n *ngFor=\"let action of config.actionsLote\"\n class=\"btns-options\"\n >\n <button\n id=\"actionLoteBtns\"\n pButton\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\n class=\"actionLoteBtns p-button-raised p-button-text\"\n (click)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\n [tooltipPosition]=\"'bottom'\"\n [style.backgroundColor]=\"retornarCampo(action, selectedItems, 'btnColor')\"\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\n >\n <span\n class=\"material-symbols-outlined md-22\"\n [style.color]=\"\n retornarCampo(action, selectedItems, 'iconBtnColor')\n \"\n >\n {{ retornarCampo(action, selectedItems, \"icon\") }}\n </span>\n </button>\n </div>\n </div>\n\n </div>\n </ng-template>\n\n <ng-template\n pTemplate=\"header\"\n let-columns\n >\n <tr>\n <th\n style=\"width: 4rem; border-left: solid 4px transparent\"\n *ngIf=\"config.enableSelect\"\n >\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\n </th>\n\n <th\n *ngFor=\"let col of columns\"\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n class=\"text-sm\"\n >\n <div\n [class]=\"\n centralizarColunas(col) && alignColunasHeader(col) == ''\n ? 'flex flex-row justify-content-center'\n : 'flex flex-row'\n \"\n [style]=\"alignColunasHeader(col)\"\n >\n\n\n <span>{{ col.header }}</span>\n <p-sortIcon\n *ngIf=\"col.sortable === true\"\n [field]=\"col.field\"\n style=\"font-size: 10px\"\n ></p-sortIcon>\n\n <span\n *ngIf=\"col.headerTooltip\"\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span>\n\n </div>\n </th>\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n >\n <tr (dblclick)=\"doubleClick($event, rowData)\">\n <td\n *ngIf=\"config.enableSelect\"\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\n >\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n\n <ng-container *ngFor=\"let col of columns\">\n <td\n *ngIf=\"rowgroup && !col.template\"\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n class=\"rowTable\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\n <i\n *ngIf=\"col.icon\"\n [class]=\"col.icon + ' mr-2'\"\n ></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >{{\n transformValue(rowData, col)\n }}</span>\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img\n class=\"image\"\n [src]=\"loadImage(rowData, col)\"\n />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\n <i\n *ngIf=\"col.icon\"\n [class]=\"col.icon + ' mr-2'\"\n ></i>\n {{ transformValue(rowData, col) }}\n </span>\n\n <div *ngIf=\"isChipField(col) && !col.iconField\">\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ transformValue(rowData, col) }}</span>\n </div>\n </span>\n\n <span *ngIf=\"isImageField(col)\">\n <span>\n <img\n class=\"image\"\n [src]=\"loadImage(rowData, col)\"\n />\n </span>\n </span>\n\n <i\n *ngIf=\"col.iconField\"\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n\n <ng-template #booleanField>\n <i\n *ngIf=\"!col.iconField\"\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span class=\"material-symbols-outlined\">\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </ng-template>\n </td>\n\n <td\n *ngIf=\"col.template\"\n [style]=\"\n applyStyle(rowData, col) +\n centralizarColunas(col) +\n alignColunas(col)\n \"\n class=\"rowTable\"\n >\n <span class=\"p-column-title\">{{ col.header }}:</span>\n <ng-container\n *ngIf=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n >\n </ng-container>\n </td>\n </ng-container>\n\n <td\n *ngIf=\"config.actions && config.actions.length > 0\"\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\n >\n <div\n class=\"flex flex-row justify-content-end w-full gap-1\"\n *ngIf=\"acoesLinhaTabela\"\n >\n <div *ngFor=\"let action of config.actions\">\n <button\n id=\"actionBtns\"\n pButton\n *ngIf=\"exibirCampo(action, rowData)\"\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"activeItem(rowData); action?.command()\"\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\n [tooltipPosition]=\"action.tooltipPosition ? action.tooltipPosition : 'bottom'\"\n [disabled]=\"callDisabled(action, rowData)\"\n >\n <span class=\"material-symbols-outlined md-19\">\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\n </button>\n </div>\n </div>\n <div\n class=\"flex flex-row justify-content-end w-full\"\n *ngIf=\"!acoesLinhaTabela\"\n >\n <button\n id=\"moreVertBtn\"\n pButton\n class=\"actionBtns p-button-text p-button-raised\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n <span\n class=\"material-symbols-outlined\"\n style=\"font-size: 20px\"\n >\n more_horiz\n </span>\n </button>\n\n <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div>\n\n <!-- <div *ngFor=\"let action of config.actions\">\n {{ criarMenusModal(rowData) }}\n </div> -->\n\n <p-menu\n #menu\n [popup]=\"true\"\n [model]=\"menuItems\"\n appendTo=\"body\"\n ></p-menu>\n </div>\n </td>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"emptymessage\"\n let-columns\n >\n <tr>\n <td\n [attr.colspan]=\"columns.length + 2\"\n style=\"text-align: center\"\n >\n Nenhum registro encontrado\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>", styles: ["@charset \"UTF-8\";.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:19px}.material-symbols-outlined.md-22{font-size:22px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover,#moreVertBtn:hover{color:#a9a9a9}.icon-search{top:20px}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-datatable-table{border-spacing:0px 2px}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 0 0 10px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 10px 10px 0!important;border-right:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){.rowTable{text-align:right!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-right:1px solid #ddd!important;border-bottom:1px solid hsl(0,0%,91%)!important;border-top:0px solid!important;line-height:30px!important;gap:5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:first-of-type{border-left:solid 4px #5289B4!important;border-radius:10px 10px 0 0!important;border-top:1px solid #ddd!important;line-height:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-radius:0 0 10px 10px!important;border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-left:solid 4px #5289B4!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}\n"] }]
437
+ }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i3.CpfCnpjPipe }, { type: i4.TelefonePipe }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i5.DomSanitizer }]; }, propDecorators: { templates: [{
438
+ type: ContentChildren,
439
+ args: [TemplateDirective]
440
+ }], _templates: [{
441
+ type: Input,
442
+ args: ['templates']
443
+ }], table: [{
444
+ type: ViewChild,
445
+ args: ['table', { static: false }]
446
+ }], setConfig: [{
447
+ type: Input,
448
+ args: ['config']
449
+ }], dataSource: [{
450
+ type: Input
451
+ }], selectedItems: [{
452
+ type: Input
453
+ }], totalRecords: [{
454
+ type: Input
455
+ }], paginator: [{
456
+ type: Input
457
+ }], rowsPerPageOptions: [{
458
+ type: Input
459
+ }], rows: [{
460
+ type: Input
461
+ }], pageLinksOptions: [{
462
+ type: Input
463
+ }], showFirstLastIcon: [{
464
+ type: Input
465
+ }], tableSize: [{
466
+ type: Input
467
+ }], applyStyle: [{
468
+ type: Input
469
+ }], acoesLinhaTabela: [{
470
+ type: Input
471
+ }], filterColumnsBtn: [{
472
+ type: Input
473
+ }], filtrosAvancados: [{
474
+ type: Input
475
+ }], onActiveItem: [{
476
+ type: Output
477
+ }], onActiveItemLote: [{
478
+ type: Output
479
+ }], onPaginate: [{
480
+ type: Output
481
+ }], onSelectionChange: [{
482
+ type: Output
483
+ }], doubleClickEvent: [{
484
+ type: Output
485
+ }], filterField: [{
486
+ type: Output
487
+ }], filtrosAvancadosEmit: [{
488
+ type: Output
489
+ }], menuFiltroDiv: [{
490
+ type: ViewChild,
491
+ args: ['menuFiltroDiv']
492
+ }], botaoFiltro: [{
493
+ type: ViewChild,
494
+ args: ['botaoFiltro']
495
+ }], onWindowResize: [{
496
+ type: HostListener,
497
+ args: ['window:resize', ['$event']]
498
+ }] } });
499
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPckUsTUFBTSxVQUFVLEdBQUcsMHFQQUEwcVAsQ0FBQztBQU85clAsTUFBTSxPQUFPLGNBQWM7SUE2QnpCLElBQXFCLFNBQVMsQ0FBQyxLQUFrQjtRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQ3pDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsR0FBRyxLQUFLO1NBQ1QsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBNkJELFlBQ21CLFFBQWtCLEVBQ2xCLFdB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QkFBQyxXQUFXO2dCQUVxQixLQUFLO3NCQUEzQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR2hCLFNBQVM7c0JBQTdCLEtBQUs7dUJBQUMsUUFBUTtnQkFlTixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUlxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0EsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQTBCeEIsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29uZmlnJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnQ29sdW1uIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29uZmlnLmNvbHVtbic7XG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRlIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUucGFnaW5hdGUnO1xuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb2RpZ29GaXBlUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NvZGlnb2ZpbGUucGlwZSc7XG5pbXBvcnQgeyBDcGZDbnBqUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NwZmNucGoucGlwZSc7XG5pbXBvcnQgeyBUZWxlZm9uZVBpcGUgfSBmcm9tICcuLi9waXBlcy90ZWxlZm9uZS5waXBlJztcbmltcG9ydCB7IEt2TWVudUl0ZW0gfSBmcm9tICcuLi9hcGkvY29tcG9uZW50cy90YWJsZS9rdi1tZW51aXRlbSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuY29uc3QgaW1nRGVmYXVsdCA9ICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdrdi10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY29uZmlnITogVGFibGVDb25maWc7XG4gIHBlc3F1aXNhVmFsdWUhOiBzdHJpbmc7XG4gIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgYWN0aW9uc1RlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBzZWxlY3RlZFNpemU6IHN0cmluZyA9ICcnO1xuXG4gIHRhbWFuaG9UZWxhITogbnVtYmVyO1xuXG4gIG1lbnVJdGVtczogS3ZNZW51SXRlbVtdID0gW107XG4gIG1lbnVDb2x1bW5zOiBLdk1lbnVJdGVtW10gPSBbXTtcblxuICBjaGVja2VkOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb2x1bW5zOiBUYWJsZUNvbmZpZ0NvbHVtbltdID0gW107XG4gIGRlbGV0ZWRDb2x1bnM6IFRhYmxlQ29uZmlnQ29sdW1uW10gPSBbXTtcblxuICBtZW51RmlsdHJvOiBib29sZWFuID0gZmFsc2U7XG4gIGNoZWNrYm94Q2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNob3dGaWx0cm9zQXZhbmNhZG9zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XG4gIEBJbnB1dCgndGVtcGxhdGVzJykgX3RlbXBsYXRlcyE6IGFueTtcblxuICBAVmlld0NoaWxkKCd0YWJsZScsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJsZSE6IFRhYmxlO1xuICBkZWxldGVkQ29sdW1uc0luZGV4ITogYW55W107XG5cbiAgQElucHV0KCdjb25maWcnKSBzZXQgc2V0Q29uZmlnKHZhbHVlOiBUYWJsZUNvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgZW5hYmxlQ2F0aW9uOiB2YWx1ZS5lbmFibGVDYXRpb24gfHwgdHJ1ZSxcbiAgICAgIGVuYWJsZVNlbGVjdDogdmFsdWUuZW5hYmxlU2VsZWN0IHx8IGZhbHNlLFxuICAgICAgZW5hYmxlRmlsdGVyOiB2YWx1ZS5lbmFibGVGaWx0ZXIgfHwgdHJ1ZSxcbiAgICAgIC4uLnZhbHVlLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlRmlsdGVyKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5wdXNoKGNvbC5maWVsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSBkYXRhU291cmNlOiBhbnk7XG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcbiAgQElucHV0KCkgcGFnaW5hdG9yOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zITogbnVtYmVyW107XG4gIEBJbnB1dCgpIHJvd3M6IG51bWJlciA9IDU7XG4gIEBJbnB1dCgpIHBhZ2VMaW5rc09wdGlvbnM6IG51bWJlciA9IDE7XG4gIEBJbnB1dCgpIHNob3dGaXJzdExhc3RJY29uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRhYmxlU2l6ZSE6IG51bWJlcjtcbiAgQElucHV0KCkgYXBwbHlTdHlsZTogRnVuY3Rpb24gPSAocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiAnJztcbiAgQElucHV0KCkgYWNvZXNMaW5oYVRhYmVsYTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGZpbHRlckNvbHVtbnNCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvbkFjdGl2ZUl0ZW06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtTG90ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRvdWJsZUNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZmlsdHJvc0F2YW5jYWRvc0VtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXG5cbiAgQFZpZXdDaGlsZCgnbWVudUZpbHRyb0RpdicpIG1lbnVGaWx0cm9EaXYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdib3Rhb0ZpbHRybycpIGJvdGFvRmlsdHJvITogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGlnb0ZpcGVQaXBlOiBDb2RpZ29GaXBlUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNwZkNucGpQaXBlOiBDcGZDbnBqUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICApIHtcbiAgICB0aGlzLmlzUm93U2VsZWN0YWJsZSA9IHRoaXMuaXNSb3dTZWxlY3RhYmxlLmJpbmQodGhpcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFkanVzdFRhYmxlU2l6ZSgpO1xuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICAvLyB0aGlzLmNyaWFyTWVudUNvbHVtbnMoKTtcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tIaWRlQ29sdW1ucygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIG9uV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMuYWRqdXN0VGFibGVTaXplKCk7XG4gICAgdGhpcy50YW1hbmhvVGVsYSA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICB9XG5cbiAgcHVibGljIGFjdGl2ZUl0ZW0ocm93RGF0YTogYW55KSB7XG4gICAgdGhpcy5vbkFjdGl2ZUl0ZW0uZW1pdChyb3dEYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmVJdGVtTG90ZShyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLm9uQWN0aXZlSXRlbUxvdGUuZW1pdChyb3dEYXRhKTtcbiAgfVxuXG4gIGlzQm9vbGVhbkZpZWxkKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2Ygcm93RGF0YVtjb2wuZmllbGRdID09ICdib29sZWFuJztcbiAgfVxuXG4gIGlzQ2hpcEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sLmZpZWxkVHlwZSA9PSAnY2hpcCc7XG4gIH1cblxuICBpc0ltYWdlRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCByZXRvcm5vID0gY29sLmZpZWxkVHlwZSAmJiBjb2wuZmllbGRUeXBlID09PSAnaW1hZ2UnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHJldHVybiByZXRvcm5vO1xuICB9XG5cbiAgLy8gaXNWaXNpYmxlQ2hlY2tib3gocm93RGF0YTogYW55KTogYm9vbGVhbiB7XG4gIC8vICAgcmV0dXJuIHRoaXMuY29uZmlnLnZpc2libGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbj8gdGhpcy5jb25maWcudmlzaWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uKHJvd0RhdGEpOiB0cnVlO1xuICAvLyB9XG5cbiAgaXNSb3dTZWxlY3RhYmxlKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZENoZWNrYm94KGV2ZW50LmRhdGEpOztcbiAgfVxuICBpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbiA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhKSA6IGZhbHNlO1xuICB9XG5cbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XG4gICAgLypcbiAgICAgIE5vc3NhIGNvbHVuYSBkZSBpbWFnZW0gdHJhYmFsaGEgY29tIHN0cmluZ3MgZG8gdGlwbzogYmFzZTY0IG91IHVybFxuICAgICovXG4gICAgbGV0IHJldG9ybm8gPSBgZGF0YTppbWFnZS9qcGc7YmFzZTY0LCAke2ltZ0RlZmF1bHR9YDtcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcbiAgICAgIGlmIChyb3dEYXRhW2NvbC5maWVsZF0uaW5jbHVkZXMoJ2h0dHAnKSlcbiAgICAgICAgcmV0b3JubyA9IHJvd0RhdGFbY29sLmZpZWxkXTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7cm93RGF0YVtjb2wuZmllbGRdfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cblxuICBwdWJsaWMgb25HbG9iYWxGaWx0ZXIodGFibGU6IFRhYmxlLCBldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmZpbHRlckZpZWxkLmVtaXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgdGFibGUuZmlsdGVyR2xvYmFsKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsICdjb250YWlucycpO1xuICB9XG5cbiAgcHVibGljIHBhZ2luYXRlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGxldCBwYWdpbmFJbmljaWFsID1cbiAgICAgICAgKGV2ZW50Py5maXJzdCA+IDAgPyBldmVudC5maXJzdCAvIGV2ZW50LnJvd3MgOiBldmVudC5maXJzdCkgKyAxO1xuICAgICAgbGV0IHRlcm1vUGVzcXVpc2EgPSAnJztcbiAgICAgIGxldCBvcmRlbmFjYW8gPSAnJztcblxuICAgICAgaWYgKGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9IGV2ZW50Lmdsb2JhbEZpbHRlcjtcblxuICAgICAgaWYgKGV2ZW50LnNvcnRGaWVsZClcbiAgICAgICAgb3JkZW5hY2FvID0gYCR7ZXZlbnQuc29ydEZpZWxkfSAke2V2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnXG4gICAgICAgICAgfWA7XG5cbiAgICAgIGNvbnN0IG9iamV0bzogVGFibGVQYWdpbmF0ZSA9IHtcbiAgICAgICAgcGFnaW5hSW5pY2lhbDogcGFnaW5hSW5pY2lhbCxcbiAgICAgICAgdGFtYW5ob1BhZ2luYTogZXZlbnQucm93cyxcbiAgICAgICAgdGVybW9QZXNxdWlzYTogdGVybW9QZXNxdWlzYSxcbiAgICAgICAgb3JkZW5hY2FvOiBvcmRlbmFjYW8sXG4gICAgICB9O1xuXG4gICAgICB0aGlzLm9uUGFnaW5hdGUuZW1pdChvYmpldG8pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdGlvbkNoYW5nZSh2YWx1ZSA9IFtdKSB7XG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHJldHVyblJvd0NsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcbiAgICBsZXQgcm93Q2xhc3M6IHN0cmluZztcblxuICAgIHRoaXMudGFibGVTaXplID4gODAwID8gKHJvd0NsYXNzID0gJ3RleHQtYmFzZScpIDogKHJvd0NsYXNzID0gJ3RleHQtc20nKTtcblxuICAgIGlmIChjb2wuZXhwaXJlZERhdGUgPT0gdHJ1ZSkge1xuICAgICAgbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoKVxuICAgICAgICA/IChyb3dDbGFzcyA9IHJvd0NsYXNzICsgJyB0ZXh0LXJlZC00MDAgZm9udC1zZW1pYm9sZCcpXG4gICAgICAgIDogJyc7XG4gICAgfVxuICAgIHJldHVybiByb3dDbGFzcztcbiAgfVxuXG4gIGV4cGlyZWRGaWxlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbJ2RhdGF2ZW5jaW1lbnRvJ107XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKCkgJiYgY29sLmZpZWxkID09ICdhcmVhJztcbiAgfVxuXG4gIHRyYW5zZm9ybVZhbHVlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcblxuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAoIWNvbC5waXBlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjb2wucGlwZSkge1xuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XG4gICAgICAgIGNhc2UgJ2RlY2ltYWwnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJzEuMi0yJywgJ3B0LUJSJyk7XG4gICAgICAgIGNhc2UgJ2NwZmNucGonOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNwZkNucGpQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ3RlbGVmb25lJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZWxlZm9uZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgY2FzZSAnY29kaWdvZmlwZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29kaWdvRmlwZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgY2FzZSAnbW9uZXknOlxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGFyVmFsb3IodmFsdWUpO1xuICAgICAgICBjYXNlICdwZXJjZW50YWdlJzpcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9ICVgO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0YXJWYWxvcih2YWxvcjogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xuICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICBjdXJyZW5jeTogJ0JSTCcsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh2YWxvcik7XG4gIH1cblxuICBhZGp1c3RUYWJsZVNpemUoKSB7XG4gICAgaWYgKHRoaXMudGFibGVTaXplIDwgODAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9ICdwLWRhdGF0YWJsZS1zbSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJyc7XG4gICAgfVxuICB9XG5cbiAgZG91YmxlQ2xpY2soZTogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICBsZXQgZXZlbnREb3VibGVDbGljayA9IHsgZXZlbnQ6IGUsIHJvd0RhdGE6IHJvd0RhdGEgfTtcblxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcbiAgICBlLnRhcmdldC5jbGFzc0xpc3QuZm9yRWFjaCgoeDogYW55KSA9PiBhcnJheS5wdXNoKHgpKTtcblxuICAgIGlmIChhcnJheS5maW5kKCh4OiBhbnkpID0+IHggPT0gJ25nLXN0YXItaW5zZXJ0ZWQnKSAhPSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmRvdWJsZUNsaWNrRXZlbnQuZW1pdChldmVudERvdWJsZUNsaWNrKTtcbiAgfVxuXG4gIGNlbnRyYWxpemFyQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC5jZW50cmFsaXplKSB7XG4gICAgICByZXR1cm4gJ3RleHQtYWxpZ246IGNlbnRlcic7XG4gICAgfSBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIGFsaWduQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKGNvbC5hbGlnbikge1xuICAgICAgcmV0dXJuIGB0ZXh0LWFsaWduOiAke2NvbC5hbGlnbn1gO1xuICAgIH0gZWxzZSByZXR1cm4gJyc7XG4gIH1cblxuICBhbGlnbkNvbHVuYXNIZWFkZXIoY29sOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChjb2wuYWxpZ24pIHtcbiAgICAgIGlmIChjb2wuYWxpZ24gPT0gJ3JpZ2h0JykgcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQ6IGVuZCc7XG4gICAgICBlbHNlIHJldHVybiAnJztcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0b3JuYXJDYW1wbyhhY3Rpb246IEt2TWVudUl0ZW0sIHJvd0RhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgX2Z1bmN0aW9uID0gYWN0aW9uLmR5bmFtaWNmaWVsZHNcbiAgICAgID8gKGFjdGlvbi5keW5hbWljZmllbGRzW2ZpZWxkXSBhcyBGdW5jdGlvbilcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9IF9mdW5jdGlvblxuICAgICAgPyBfZnVuY3Rpb24uYXBwbHkoYWN0aW9uLCBbcm93RGF0YV0pXG4gICAgICA6IGFjdGlvbltmaWVsZF07XG4gICAgcmV0dXJuIF9maWVsZDtcbiAgfVxuXG4gIHJldG9ybmFyUm93KHJvd0RhdGE6IGFueSwgY29sOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IF9yb3dhY3Rpb24gPSB0aGlzLmNvbmZpZy5yb3dzID8gdGhpcy5jb25maWcucm93c1tjb2wuZmllbGRdIDogbnVsbDtcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9XG4gICAgICBfcm93YWN0aW9uICYmIF9yb3dhY3Rpb25bZmllbGRdXG4gICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uY29uc3RydWN0b3IgPT09IEZ1bmN0aW9uXG4gICAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5hcHBseSh0aGlzLCBbcm93RGF0YV0pXG4gICAgICAgICAgOiBfcm93YWN0aW9uW2ZpZWxkXVxuICAgICAgICA6IG51bGw7XG4gICAgcmV0dXJuIF9maWVsZDtcbiAgfVxuXG4gIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xuICAgIGxldCB2aXNpYmxlID0gZmllbGQudmlzaWJsZSA/IGZpZWxkLnZpc2libGUocm93RGF0YSkgOiB0cnVlO1xuXG4gICAgLy8gaWYgKGZpZWxkICE9IHVuZGVmaW5lZCAmJiBmaWVsZCAhPSBudWxsICYmIGZpZWxkICE9ICcnKSB7XG4gICAgLy8gICBjb25zdCB2YWx1ZSA9IHJvd0RhdGFbZmllbGRdO1xuICAgIC8vICAgcmV0dXJuIHZhbHVlO1xuICAgIC8vIH1cbiAgICByZXR1cm4gdmlzaWJsZTtcbiAgfVxuXG4gIGNyaWFyTWVudXNNb2RhbChkYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9ucyAmJiBkYXRhKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29uZmlnLmFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAndG9vbHRpcCcpO1xuICAgICAgICBjb25zdCB0b29sdGlwUG9zaXRpb24gPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAndG9vbHRpcFBvc2l0aW9uJyk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5yZXRvcm5hckNhbXBvKGFjdGlvbiwgZGF0YSwgJ2xhYmVsJyk7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQ6IGFueSA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdjb21tYW5kJyk7XG4gICAgICAgIGNvbnN0IHZpc2libGU6IGJvb2xlYW4gPSBhY3Rpb24udmlzaWJsZSA/IGFjdGlvbi52aXNpYmxlKGRhdGEpIDogdHJ1ZTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQ6IGJvb2xlYW4gPSBhY3Rpb24uZGlzYWJsZWRcbiAgICAgICAgICA/IGFjdGlvbi5kaXNhYmxlZChkYXRhKVxuICAgICAgICAgIDogZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWVudUluc2VydDogS3ZNZW51SXRlbSA9IHtcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIHRvb2x0aXAsXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uLFxuICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgfTtcblxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMubWVudUl0ZW1zLmZpbHRlcihcbiAgICAgICAgICAoeCkgPT4geC5jb21tYW5kID09IG1lbnVJbnNlcnQuY29tbWFuZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpdGVtLmxlbmd0aCA9PSAwKSB0aGlzLm1lbnVJdGVtcy5wdXNoKG1lbnVJbnNlcnQpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpZiAobWVudUluc2VydC5sYWJlbCAhPSBpdGVtWzBdLmxhYmVsKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWVudUluc2VydC52aXNpYmxlICE9IGl0ZW1bMF0udmlzaWJsZSkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQuZGlzYWJsZWQgIT0gaXRlbVswXS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm5DbGFzc0NoaXAocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjaGlwLXN0eWxlIHctYXV0byBib3JkZXItcm91bmQtMnhsIHAtMiB0ZXh0LSR7dGhpcy5yZXRvcm5hclJvdyhcbiAgICAgIHJvd0RhdGEsXG4gICAgICBjb2wsXG4gICAgICAnc3R5bGVjaGlwJ1xuICAgICl9IGJvcmRlci0ke3RoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAnc3R5bGVjaGlwJyl9YDtcbiAgfVxuXG4gIHJldHVybkNsYXNzSWNvbihyb3dEYXRhOiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICdpY29ucm93Jyk7XG4gIH1cblxuICByZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhOiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwaWNvbnJvdycpO1xuICB9XG5cbiAgZGVsZXRlQ29sdW1uKGZpZWxkOiBzdHJpbmcpIHtcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcblxuICAgIGxldCBjb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKFxuICAgICAgKHg6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiB4LmZpZWxkID09IGZpZWxkXG4gICAgKTtcbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBpbmRleCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuaW5kZXhPZihjb2x1bW4pO1xuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5kZWxldGVkQ29sdW5zLnB1c2goY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBhZGRDb2x1bW4oZmllbGQ6IHN0cmluZykge1xuICAgIGxldCBpbmRleDogbnVtYmVyO1xuXG4gICAgbGV0IGNvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoXG4gICAgICAoeDogVGFibGVDb25maWdDb2x1bW4pID0+IHguZmllbGQgPT0gZmllbGRcbiAgICApO1xuXG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIGxldCBkZWxldGVkQ29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5maW5kKCh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBmaWVsZCk7XG5cbiAgICAgIGlmIChkZWxldGVkQ29sdW1uICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpbmRleCA9IHRoaXMuZGVsZXRlZENvbHVucy5pbmRleE9mKGRlbGV0ZWRDb2x1bW4pO1xuICAgICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMuc2xpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLnB1c2goZGVsZXRlZENvbHVtbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGluYW1pY0NvbHVtblNldChlOiBhbnksIGNvbDogYW55KSB7XG4gICAgY29sLmNoZWNrZWQgPSBlLmNoZWNrZWQ7XG4gICAgaWYgKGUuY2hlY2tlZCkgdGhpcy5hZGRDb2x1bW4oY29sLmZpZWxkKTtcbiAgICBlbHNlIHRoaXMuZGVsZXRlQ29sdW1uKGNvbC5maWVsZCk7XG5cbiAgICBpZiAoY29sLnBvc2l0aW9uKSB0aGlzLmNvbmZpZy5jb2x1bW5zLnNvcnQodGhpcy5zb3J0QnlQb3NpdGlvbigpKTtcbiAgfVxuXG4gIC8vIGFicmlyTWVudUZpbHRybyhlOiBhbnkpIHtcbiAgLy8gICB0aGlzLm1lbnVGaWx0cm8gPSAhdGhpcy5tZW51RmlsdHJvO1xuICAvLyAgIHRoaXMuY2hlY2tib3hDbGlja2VkID0gZmFsc2U7XG5cbiAgLy8gICBpZiAodGhpcy50YW1hbmhvVGVsYSA8IDcwMClcbiAgLy8gICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ2xlZnQnLCAodGhpcy5ib3Rhb0ZpbHRyby5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgLSAyODgpICsgJ3B4JylcbiAgLy8gICBlbHNlXG4gIC8vICAgICB0aGlzLnN0eWxlU2V0dGVyKCdsZWZ0JywgKHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgNDApICsgJ3B4JylcblxuICAvLyAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3RvcCcsIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyAncHgnKVxuICAvLyAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCB0aGlzLm1lbnVGaWx0cm8gPyAndmlzaWJsZScgOiAnaGlkZGVuJylcbiAgLy8gfVxuXG4gIC8vIGZlY2hhck1lbnVGaWx0cm8oKSB7XG4gIC8vICAgdGhpcy5tZW51RmlsdHJvID0gZmFsc2U7XG4gIC8vICAgdGhpcy5jaGVja2JveENsaWNrZWQgPSBmYWxzZTtcblxuICAvLyAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJylcbiAgLy8gfVxuXG4gIC8vIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSlcbiAgLy8gb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgLy8gICBpZiAodGhpcy5maWx0ZXJDb2x1bW5zQnRuID09IHRydWUgJiYgdGhpcy5tZW51RmlsdHJvID09IHRydWUpIHtcbiAgLy8gICAgIHRoaXMuZmVjaGFyTWVudUZpbHRybygpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIC8vIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgLy8gb25DbGlja0V2ZW50KGV2ZW50OiBhbnkpIHtcbiAgLy8gICBpZiAodGhpcy5maWx0ZXJDb2x1bW5zQnRuID09IHRydWUgJiYgdGhpcy5tZW51RmlsdHJvID09IHRydWUpIHtcbiAgLy8gICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAvLyAgICAgY29uc3QgbWVudUZpbHRyb0RpdiA9XG4gIC8vICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNtZW51RmlsdHJvRGl2Jyk7XG4gIC8vICAgICBjb25zdCBib3Rhb0ZpbHRybyA9XG4gIC8vICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNib3Rhb0ZpbHRybycpO1xuICAvLyAgICAgY29uc3QgaXNDaGVja2JveENsaWNrZWQgPVxuICAvLyAgICAgICBjbGlja2VkRWxlbWVudC5jbGFzc0xpc3QudG9TdHJpbmcoKS5pbmNsdWRlcygncC1jaGVja2JveCcpIHx8XG4gIC8vICAgICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QudG9TdHJpbmcoKSA9PSAnJztcbiAgLy8gICAgIGNvbnN0IGlzSW5zaWRlTWVudSA9XG4gIC8vICAgICAgIG1lbnVGaWx0cm9EaXY/LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSB8fFxuICAvLyAgICAgICBib3Rhb0ZpbHRybz8uY29udGFpbnMoY2xpY2tlZEVsZW1lbnQpIHx8XG4gIC8vICAgICAgIGlzQ2hlY2tib3hDbGlja2VkO1xuXG4gIC8vICAgICBpZiAoIWlzSW5zaWRlTWVudSkgdGhpcy5mZWNoYXJNZW51RmlsdHJvKCk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgY2hlY2tNZW51RmlsdHJvKGNvbDogYW55KSB7XG4gICAgbGV0IGRlbGV0ZWRDb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5kZWxldGVkQ29sdW5zLmZpbmQoXG4gICAgICAoeDogVGFibGVDb25maWdDb2x1bW4pID0+IHguZmllbGQgPT0gY29sLmZpZWxkXG4gICAgKTtcbiAgICBpZiAoZGVsZXRlZENvbHVtbikgY29sLmNoZWNrZWQgPSBmYWxzZTtcbiAgICBlbHNlIGNvbC5jaGVja2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHNvcnRCeVBvc2l0aW9uKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbTE6IGFueSwgZWxlbTI6IGFueSkge1xuICAgICAgaWYgKGVsZW0xLnBvc2l0aW9uIDwgZWxlbTIucG9zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChlbGVtMS5wb3NpdGlvbiA+IGVsZW0yLnBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNhbGxEaXNhYmxlZChhY3Rpb246IEt2TWVudUl0ZW0sIGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChhY3Rpb24/LmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBkaW5hbWljRGlzYWJsZUNvbHVtbihjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbC5maXhlZENvbHVtbikgcmV0dXJuIGNvbC5maXhlZENvbHVtbjtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNoZWNrSGlkZUNvbHVtbnMoKSB7XG4gICAgbGV0IGhpZGVDb2x1bW5zQ29uZmlnID0gdGhpcy5jb2x1bW5zLmZpbHRlcihcbiAgICAgIChjb2wpID0+IGNvbC5oaWRlQ29sdW1uID09IHRydWVcbiAgICApO1xuICAgIGhpZGVDb2x1bW5zQ29uZmlnLmZvckVhY2goKGNvbCkgPT4gdGhpcy5kZWxldGVDb2x1bW4oY29sLmZpZWxkKSk7XG4gIH1cblxuICBnZXRDdXN0b21UZW1wbGF0ZSh0ZW1wbGF0ZW5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcbiAgfVxuXG4gIC8vIHN0eWxlU2V0dGVyKHN0eWxlOiBzdHJpbmcsIGRhdGE6IHN0cmluZykge1xuICAvLyAgIHRoaXMucmVuZGVyZXI/LnNldFN0eWxlKFxuICAvLyAgICAgdGhpcy5tZW51RmlsdHJvRGl2Lm5hdGl2ZUVsZW1lbnQsXG4gIC8vICAgICBzdHlsZSxcbiAgLy8gICAgIGRhdGFcbiAgLy8gICApO1xuICAvLyB9XG5cbiAgZmlsdHJvc0F2YW5jYWRvc0V2ZW50KGU6IGFueSkge1xuICAgIHRoaXMuc2hvd0ZpbHRyb3NBdmFuY2Fkb3MgPSAhdGhpcy5zaG93RmlsdHJvc0F2YW5jYWRvcztcbiAgICB0aGlzLmZpbHRyb3NBdmFuY2Fkb3NFbWl0LmVtaXQodGhpcy5zaG93RmlsdHJvc0F2YW5jYWRvcylcbiAgfVxufVxuIiwiPGRpdj5cblxuICA8cC1wYW5lbFxuICAgICpuZ0lmPVwiZmlsdHJvc0F2YW5jYWRvc1wiXG4gICAgaGVhZGVyPVwiRmlsdHJvcyBhdmFuw6dhZG9zXCJcbiAgICBbdG9nZ2xlYWJsZV09XCJ0cnVlXCJcbiAgICBbY29sbGFwc2VkXT1cInRydWVcIlxuICAgIGNvbGxhcHNlZEljb249XCJwaSBwaS1maWx0ZXJcIlxuICAgIHN0eWxlQ2xhc3M9XCJiZy1ncmF5LTIwMFwiXG4gICAgW3N0eWxlXT1cInsnbWFyZ2luLWJvdHRvbSc6ICcycHgnfVwiXG4gID5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvcC1wYW5lbD5cblxuXG4gIDxwLXRhYmxlXG4gICAgKm5nSWY9XCJjb25maWdcIlxuICAgICNkdFxuICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zbVwiXG4gICAgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIlxuICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcbiAgICBbcm93U2VsZWN0YWJsZV09XCJpc1Jvd1NlbGVjdGFibGVcIlxuICAgIFtjb2x1bW5zXT1cImNvbmZpZy5jb2x1bW5zXCJcbiAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gICAgW3Jvd3NdPVwicm93c1wiXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt7dG90YWxSZWNvcmRzfX1cIlxuICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcbiAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXG4gICAgW2xhenldPVwiY29uZmlnLmxhenlcIlxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgIHJvd0dyb3VwTW9kZT1cInJvd3NwYW5cIlxuICAgIFtncm91cFJvd3NCeV09XCJjb25maWcuZmllbGRHcm91cFwiXG4gICAgW3Nob3dGaXJzdExhc3RJY29uXT1cInNob3dGaXJzdExhc3RJY29uXCJcbiAgICBbcGFnZUxpbmtzXT1cInBhZ2VMaW5rc09wdGlvbnNcIlxuICAgIFtyZXNwb25zaXZlXT1cInRydWVcIlxuICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzdGFja1wiXG4gID5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImNhcHRpb25cIlxuICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlQ2F0aW9uXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTJcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGZsZXggZmxleC1jb2x1bW5cIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy50aXRsZVwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkIG15LTNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLnN1YnRpdGxlXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBtYi00IGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIG1kOmNvbC02IGxnOmNvbC00IHt7dGFtYW5ob1RlbGEgPCA3NjggPyAnY29sLTEwJyA6ICdjb2wtMTInfX1cIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlRmlsdGVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmxvY2sgbXQtMiBtZDptdC0wIHAtaW5wdXQtaWNvbi1sZWZ0IHRleHQtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1zZWFyY2hcIlxuICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICBwQXV0b0ZvY3VzXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cIm9uR2xvYmFsRmlsdGVyKGR0LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXNxdWlzYXIuLi5cIlxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBtYi0xXCJcbiAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDQwcHhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8IS0tIDxidXR0b25cbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICNib3Rhb0ZpbHRyb1xuICAgICAgICAgICAgKm5nSWY9XCJmaWx0cm9zQXZhbmNhZG9zXCJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcmFpc2VkIHAtYnV0dG9uLXRleHQgYWN0aW9uTG90ZUJ0bnNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRyb3NBdmFuY2Fkb3NFdmVudChzaG93RmlsdHJvc0F2YW5jYWRvcylcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIidGaWx0cm9zIGF2YW7Dp2Fkb3MnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWQtMjJcIj4gZmlsdGVyX2FsdCA8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+IC0tPlxuXG4gICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgI21lbnVGaWx0cm9EaXZcbiAgICAgICAgICBpZCA9IFwibWVudUZpbHRyb0RpdlwiXG4gICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwiJ2hpZGRlbidcIlxuICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei00IGJnLWdyYXktMjAwXCJcbiAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KCRldmVudClcIlxuICAgICAgICA+IC0tPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgI21lbnVGaWx0cm9EaXZcbiAgICAgICAgICAgIGlkPVwibWVudUZpbHRyb0RpdlwiXG4gICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCInaGlkZGVuJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotNCBiZy1ncmF5LTIwMCBtZW51LWNvbHVtbnMtZmlsdHJvXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cC1jYXJkPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHRleHQtbWVkaXVtIHctMTVyZW1cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjaGVja01lbnVGaWx0cm8oY29sKSB9fVxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAjZmlsdGVyQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJkaW5hbWljQ29sdW1uU2V0KCRldmVudCwgY29sKVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgID48L3AtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9wLWNhcmQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0xIGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zTG90ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0bnMtb3B0aW9uc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBpZD1cImFjdGlvbkxvdGVCdG5zXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIihzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgfHwgYWN0aW9uLnNob3dBY29lc0xvdGUpICYmIGV4aWJpckNhbXBvKGFjdGlvbiwgdGhpcy5hY3Rpb24pXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25Mb3RlQnRucyBwLWJ1dHRvbi1yYWlzZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb24/LmNvbW1hbmQoKTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICd0b29sdGlwJylcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ2J0bkNvbG9yJylcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdkaXNhYmxlZCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWQtMjJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJcbiAgICAgICAgICAgICAgICAgIHJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnaWNvbkJ0bkNvbG9yJylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsIFwiaWNvblwiKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImhlYWRlclwiXG4gICAgICBsZXQtY29sdW1uc1xuICAgID5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbTsgYm9yZGVyLWxlZnQ6IHNvbGlkIDRweCB0cmFuc3BhcmVudFwiXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCI+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgIDwvdGg+XG5cbiAgICAgICAgPHRoXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxuICAgICAgICAgIGNsYXNzPVwidGV4dC1zbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICYmIGFsaWduQ29sdW5hc0hlYWRlcihjb2wpID09ICcnXG4gICAgICAgICAgICAgICAgPyAnZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xuICAgICAgICAgICAgICAgIDogJ2ZsZXggZmxleC1yb3cnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3N0eWxlXT1cImFsaWduQ29sdW5hc0hlYWRlcihjb2wpXCJcbiAgICAgICAgICA+XG5cblxuICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxwLXNvcnRJY29uXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLnNvcnRhYmxlID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4XCJcbiAgICAgICAgICAgID48L3Atc29ydEljb24+XG5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhlYWRlclRvb2x0aXBcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIlxuICAgICAgICAgICAgPmluZm88L3NwYW4+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMFwiPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LXJvd0RhdGFcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICBsZXQtcm93Z3JvdXA9XCJyb3dncm91cFwiXG4gICAgICBsZXQtcm93c3Bhbj1cInJvd3NwYW5cIlxuICAgID5cbiAgICAgIDx0ciAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhKVwiPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVTZWxlY3RcIlxuICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdjaGVjay1ib3gnLCBoZWFkZXI6ICcnIH0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS08cC10YWJsZUNoZWNrYm94ICpuZ0lmPVwiaXNWaXNpYmxlQ2hlY2tib3gocm93RGF0YSlcIi0tPlxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3hcbiAgICAgICAgICAgIFt2YWx1ZV09XCJyb3dEYXRhXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcbiAgICAgICAgICA+PC9wLXRhYmxlQ2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIj5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgICpuZ0lmPVwicm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cInJvd2dyb3VwICYmIGNvbC5ncm91cGVkID8gcm93c3BhbiA6IG51bGxcIlxuICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbClcIj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvblwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCJcbiAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiY29sLmljb25GaWVsZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxuICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaWNvbkZpZWxkXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdJZj1cIiFyb3dncm91cCAmJiAhY29sLmdyb3VwZWQgJiYgIWNvbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XG5cblxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpXCI+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmljb25cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAqbmdJZj1cImNvbC5pY29uRmllbGRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtci0yJzogIWNvbC5pbmRJY29uTWF0ZXJpYWxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cbiAgICAgICAgICAgIDwvaT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sLmljb25GaWVsZFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90ZD5cblxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nSWY9XCJjb2wudGVtcGxhdGVcIlxuICAgICAgICAgICAgW3N0eWxlXT1cIlxuICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXG4gICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdJZj1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgW3N0eWxlXT1cImFwcGx5U3R5bGUocm93RGF0YSwgeyBmaWVsZDogJ2J0bnMtb3B0aW9ucycsIGhlYWRlcjogJycgfSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsIGdhcC0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiYWNvZXNMaW5oYVRhYmVsYVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFjdGlvbkJ0bnNcIlxuICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImV4aWJpckNhbXBvKGFjdGlvbiwgcm93RGF0YSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSk7IGFjdGlvbj8uY29tbWFuZCgpXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsICd0b29sdGlwJylcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA/IGFjdGlvbi50b29sdGlwUG9zaXRpb24gOiAnYm90dG9tJ1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtZC0xOVwiPlxuICAgICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIlxuICAgICAgICAgICAgKm5nSWY9XCIhYWNvZXNMaW5oYVRhYmVsYVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBpZD1cIm1vcmVWZXJ0QnRuXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjBweFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBtb3JlX2hvcml6XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cbiAgICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cbiAgICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgIDxwLW1lbnVcbiAgICAgICAgICAgICAgI21lbnVcbiAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgICAgICBbbW9kZWxdPVwibWVudUl0ZW1zXCJcbiAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgID48L3AtbWVudT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCJcbiAgICAgIGxldC1jb2x1bW5zXG4gICAgPlxuICAgICAgPHRyPlxuICAgICAgICA8dGRcbiAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoICsgMlwiXG4gICAgICAgICAgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgTmVuaHVtIHJlZ2lzdHJvIGVuY29udHJhZG9cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLXRhYmxlPlxuPC9kaXY+XG5cbjxsaW5rXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9pY29uP2ZhbWlseT1NYXRlcmlhbCtJY29uc1wiXG4vPlxuXG48bGlua1xuICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9TWF0ZXJpYWwrU3ltYm9scytPdXRsaW5lZDpvcHN6LHdnaHQsRklMTCxHUkFEQDQ4LDQwMCwwLDBcIlxuLz4iXX0=