keevo-components 1.5.189 → 1.5.191

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 (351) hide show
  1. package/README.md +24 -24
  2. package/ng-package.json +7 -0
  3. package/package.json +3 -22
  4. package/src/assets/.gitkeep +0 -0
  5. package/src/assets/images/LogoEvo.png +0 -0
  6. package/src/assets/images/LogoPequenaEvo.png +0 -0
  7. package/src/assets/images/background.png +0 -0
  8. package/src/assets/images/keepass-logo.png +0 -0
  9. package/src/assets/images/keepass-logo.svg +74 -0
  10. package/src/assets/images/keevo-logo.png +0 -0
  11. package/src/assets/images/logokeevo_2.png +0 -0
  12. package/src/index.ts +1 -0
  13. package/src/lib/api/base-components/base-component-button.ts +27 -0
  14. package/src/lib/api/base-components/base-component-chart.ts +105 -0
  15. package/src/lib/api/base-components/base-component-crud-form.ts +328 -0
  16. package/src/lib/api/base-components/base-component-crud-list.ts +111 -0
  17. package/src/lib/api/base-components/base-component-crud.ts +70 -0
  18. package/src/lib/api/base-components/base-component-dropdown-new.ts +112 -0
  19. package/src/lib/api/base-components/base-component-dropdown.ts +164 -0
  20. package/src/lib/api/base-components/base-component-input.ts +107 -0
  21. package/src/lib/api/base-components/base-component-multi-select.ts +136 -0
  22. package/src/lib/api/base-components/base-component.ts +46 -0
  23. package/src/lib/api/components/chart/chart.config.ts +12 -0
  24. package/src/lib/api/components/chart/chart.model.ts +9 -0
  25. package/src/lib/api/components/chart/orchart.config.ts +41 -0
  26. package/src/lib/api/components/chart/orchart.item.ts +33 -0
  27. package/src/lib/api/components/dropdown/filtro.combo.ts +4 -0
  28. package/src/lib/api/components/error/error.component.html +3 -0
  29. package/src/lib/api/components/error/error.component.scss +5 -0
  30. package/src/lib/api/components/error/error.component.ts +22 -0
  31. package/src/lib/api/components/error/kverror.module.ts +23 -0
  32. package/src/lib/api/components/table/action-item.ts +5 -0
  33. package/src/lib/api/components/table/kv-menuitem.ts +10 -0
  34. package/src/lib/api/components/table/table.config.column.ts +21 -0
  35. package/src/lib/api/components/table/table.config.ts +20 -0
  36. package/src/lib/api/components/table/table.paginate.ts +6 -0
  37. package/src/lib/api/helpers/component-providers.ts +16 -0
  38. package/src/lib/api/helpers/keevo-validators.ts +77 -0
  39. package/src/lib/api/helpers/translate-primeng.ts +25 -0
  40. package/src/lib/api/models/menu/menu.model.ts +10 -0
  41. package/{lib/api/models/menu/menucompleto.model.d.ts → src/lib/api/models/menu/menucompleto.model.ts} +7 -6
  42. package/src/lib/api/models/menu/sistemamenu.model.ts +8 -0
  43. package/src/lib/api/modules/primeng.module.ts +125 -0
  44. package/src/lib/api/services/base.api.service.ts +115 -0
  45. package/src/lib/api/services/component.service.ts +22 -0
  46. package/src/lib/api/services/form.service.ts +105 -0
  47. package/src/lib/api/services/imagens.service.ts +20 -0
  48. package/src/lib/api/services/notification.service.ts +82 -0
  49. package/src/lib/api/services/object.service.ts +20 -0
  50. package/src/lib/buttons/button-personalize/button-personalize.component.html +11 -0
  51. package/src/lib/buttons/button-personalize/button-personalize.component.scss +3 -0
  52. package/src/lib/buttons/button-personalize/button-personalize.component.ts +13 -0
  53. package/src/lib/buttons/button-popup/button-popup.component.html +12 -0
  54. package/src/lib/buttons/button-popup/button-popup.component.scss +13 -0
  55. package/src/lib/buttons/button-popup/button-popup.component.ts +30 -0
  56. package/src/lib/buttons/button-secondary/button-secondary.component.html +12 -0
  57. package/src/lib/buttons/button-secondary/button-secondary.component.scss +14 -0
  58. package/src/lib/buttons/button-secondary/button-secondary.component.ts +13 -0
  59. package/src/lib/buttons/button-success/button-success.component.html +11 -0
  60. package/src/lib/buttons/button-success/button-success.component.scss +13 -0
  61. package/src/lib/buttons/button-success/button-success.component.ts +13 -0
  62. package/src/lib/buttons/kvbutton.module.ts +25 -0
  63. package/src/lib/chart/chart.component.html +38 -0
  64. package/src/lib/chart/chart.component.scss +0 -0
  65. package/src/lib/chart/chart.component.spec.ts +28 -0
  66. package/src/lib/chart/chart.component.ts +141 -0
  67. package/src/lib/chart/kvchart.module.ts +20 -0
  68. package/src/lib/directives/template.directive.ts +15 -0
  69. package/src/lib/inputs/check/check.component.html +11 -0
  70. package/src/lib/inputs/check/check.component.scss +13 -0
  71. package/src/lib/inputs/check/check.component.ts +24 -0
  72. package/src/lib/inputs/dropdown/dropdown.component.html +91 -0
  73. package/src/lib/inputs/dropdown/dropdown.component.scss +0 -0
  74. package/src/lib/inputs/dropdown/dropdown.component.ts +28 -0
  75. package/src/lib/inputs/editor/editor.component.html +90 -0
  76. package/src/lib/inputs/editor/editor.component.scss +4 -0
  77. package/src/lib/inputs/editor/editor.component.ts +80 -0
  78. package/src/lib/inputs/input-calendar/input-calendar.component.html +30 -0
  79. package/src/lib/inputs/input-calendar/input-calendar.component.scss +0 -0
  80. package/src/lib/inputs/input-calendar/input-calendar.component.ts +81 -0
  81. package/src/lib/inputs/input-mask/input-mask.component.html +20 -0
  82. package/src/lib/inputs/input-mask/input-mask.component.scss +0 -0
  83. package/src/lib/inputs/input-mask/input-mask.component.ts +20 -0
  84. package/src/lib/inputs/input-number/input-number.component.html +22 -0
  85. package/src/lib/inputs/input-number/input-number.component.scss +0 -0
  86. package/src/lib/inputs/input-number/input-number.component.ts +52 -0
  87. package/src/lib/inputs/input-password/input-password.component.html +23 -0
  88. package/src/lib/inputs/input-password/input-password.component.scss +0 -0
  89. package/src/lib/inputs/input-password/input-password.component.ts +23 -0
  90. package/src/lib/inputs/input-text/input-text.component.html +20 -0
  91. package/src/lib/inputs/input-text/input-text.component.scss +18 -0
  92. package/src/lib/inputs/input-text/input-text.component.ts +17 -0
  93. package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.html +32 -0
  94. package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.scss +0 -0
  95. package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.spec.ts +23 -0
  96. package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.ts +36 -0
  97. package/src/lib/inputs/input-textarea/input-textarea.component.html +22 -0
  98. package/src/lib/inputs/input-textarea/input-textarea.component.scss +0 -0
  99. package/src/lib/inputs/input-textarea/input-textarea.component.ts +33 -0
  100. package/src/lib/inputs/input-time/input-time.component.html +23 -0
  101. package/src/lib/inputs/input-time/input-time.component.scss +0 -0
  102. package/src/lib/inputs/input-time/input-time.component.ts +20 -0
  103. package/src/lib/inputs/kvinputs.module.ts +64 -0
  104. package/src/lib/inputs/multi-select/multi-select.component.html +28 -0
  105. package/src/lib/inputs/multi-select/multi-select.component.scss +8 -0
  106. package/src/lib/inputs/multi-select/multi-select.component.ts +31 -0
  107. package/src/lib/inputs/radio-group/radio-group.component.html +19 -0
  108. package/src/lib/inputs/radio-group/radio-group.component.scss +15 -0
  109. package/src/lib/inputs/radio-group/radio-group.component.ts +50 -0
  110. package/src/lib/inputs/switch/switch.component.html +12 -0
  111. package/src/lib/inputs/switch/switch.component.scss +3 -0
  112. package/src/lib/inputs/switch/switch.component.ts +30 -0
  113. package/src/lib/keevo-components.module.ts +50 -0
  114. package/src/lib/label/label.component.html +6 -0
  115. package/src/lib/label/label.component.scss +9 -0
  116. package/src/lib/label/label.component.spec.ts +23 -0
  117. package/src/lib/label/label.component.ts +13 -0
  118. package/src/lib/label/label.module.ts +18 -0
  119. package/src/lib/loader/kvloader.module.ts +17 -0
  120. package/src/lib/loader/loader.component.html +1 -0
  121. package/src/lib/loader/loader.component.ts +14 -0
  122. package/src/lib/loader/loader.service.ts +26 -0
  123. package/src/lib/login/kvlogin.module.ts +28 -0
  124. package/src/lib/login/login.component.html +108 -0
  125. package/src/lib/login/login.component.scss +48 -0
  126. package/src/lib/login/login.component.spec.ts +23 -0
  127. package/src/lib/login/login.component.ts +65 -0
  128. package/src/lib/menu/kvmenu.module.ts +27 -0
  129. package/src/lib/menu/menu.component.html +342 -0
  130. package/src/lib/menu/menu.component.scss +210 -0
  131. package/src/lib/menu/menu.component.spec.ts +23 -0
  132. package/src/lib/menu/menu.component.ts +246 -0
  133. package/src/lib/orgchart/orgchart.component.html +58 -0
  134. package/src/lib/orgchart/orgchart.component.scss +21 -0
  135. package/src/lib/orgchart/orgchart.component.ts +118 -0
  136. package/src/lib/orgchart/orgchart.module.ts +14 -0
  137. package/src/lib/page-form/kv-page-form.module.ts +22 -0
  138. package/src/lib/page-form/page-form.component.html +57 -0
  139. package/src/lib/page-form/page-form.component.scss +72 -0
  140. package/src/lib/page-form/page-form.component.spec.ts +28 -0
  141. package/src/lib/page-form/page-form.component.ts +121 -0
  142. package/src/lib/picklist/kvpicklist.module.ts +20 -0
  143. package/src/lib/picklist/picklist.component.html +17 -0
  144. package/src/lib/picklist/picklist.component.scss +0 -0
  145. package/src/lib/picklist/picklist.component.spec.ts +26 -0
  146. package/src/lib/picklist/picklist.component.ts +27 -0
  147. package/src/lib/pipes/codigofile.pipe.ts +15 -0
  148. package/src/lib/pipes/cpfcnpj.pipe.ts +21 -0
  149. package/src/lib/pipes/pipes.module.ts +22 -0
  150. package/src/lib/pipes/telefone.pipe.ts +38 -0
  151. package/src/lib/styles-components.scss +11 -0
  152. package/src/lib/table/kvtable.module.ts +22 -0
  153. package/src/lib/table/table.component.html +473 -0
  154. package/src/lib/table/table.component.scss +240 -0
  155. package/src/lib/table/table.component.spec.ts +28 -0
  156. package/src/lib/table/table.component.ts +546 -0
  157. package/src/lib/tree-table/kv-treetable.component.html +649 -0
  158. package/src/lib/tree-table/kv-treetable.component.scss +315 -0
  159. package/src/lib/tree-table/kv-treetable.component.ts +390 -0
  160. package/src/lib/tree-table/kv-treetable.module.ts +18 -0
  161. package/src/lib/tree-view/kvtree-view.module.ts +19 -0
  162. package/src/lib/tree-view/tree-view.component.html +9 -0
  163. package/src/lib/tree-view/tree-view.component.scss +0 -0
  164. package/src/lib/tree-view/tree-view.component.spec.ts +23 -0
  165. package/src/lib/tree-view/tree-view.component.ts +29 -0
  166. package/src/lib/workspace/kvworkspace.module.ts +29 -0
  167. package/src/lib/workspace/workspace.component.html +108 -0
  168. package/src/lib/workspace/workspace.component.scss +83 -0
  169. package/src/lib/workspace/workspace.component.ts +75 -0
  170. package/{public-api.d.ts → src/public-api.ts} +156 -133
  171. package/tsconfig.lib.json +14 -0
  172. package/tsconfig.lib.prod.json +10 -0
  173. package/tsconfig.spec.json +14 -0
  174. package/esm2020/keevo-components.mjs +0 -5
  175. package/esm2020/lib/api/base-components/base-component-button.mjs +0 -36
  176. package/esm2020/lib/api/base-components/base-component-chart.mjs +0 -92
  177. package/esm2020/lib/api/base-components/base-component-crud-form.mjs +0 -269
  178. package/esm2020/lib/api/base-components/base-component-crud-list.mjs +0 -67
  179. package/esm2020/lib/api/base-components/base-component-crud.mjs +0 -65
  180. package/esm2020/lib/api/base-components/base-component-dropdown-new.mjs +0 -211
  181. package/esm2020/lib/api/base-components/base-component-dropdown.mjs +0 -161
  182. package/esm2020/lib/api/base-components/base-component-input.mjs +0 -94
  183. package/esm2020/lib/api/base-components/base-component-multi-select.mjs +0 -128
  184. package/esm2020/lib/api/base-components/base-component.mjs +0 -49
  185. package/esm2020/lib/api/components/chart/chart.config.mjs +0 -2
  186. package/esm2020/lib/api/components/chart/chart.model.mjs +0 -2
  187. package/esm2020/lib/api/components/chart/orchart.config.mjs +0 -2
  188. package/esm2020/lib/api/components/chart/orchart.item.mjs +0 -2
  189. package/esm2020/lib/api/components/dropdown/filtro.combo.mjs +0 -2
  190. package/esm2020/lib/api/components/error/error.component.mjs +0 -26
  191. package/esm2020/lib/api/components/error/kverror.module.mjs +0 -35
  192. package/esm2020/lib/api/components/table/action-item.mjs +0 -2
  193. package/esm2020/lib/api/components/table/kv-menuitem.mjs +0 -3
  194. package/esm2020/lib/api/components/table/table.config.column.mjs +0 -2
  195. package/esm2020/lib/api/components/table/table.config.mjs +0 -2
  196. package/esm2020/lib/api/components/table/table.paginate.mjs +0 -9
  197. package/esm2020/lib/api/helpers/component-providers.mjs +0 -16
  198. package/esm2020/lib/api/helpers/keevo-validators.mjs +0 -64
  199. package/esm2020/lib/api/helpers/translate-primeng.mjs +0 -23
  200. package/esm2020/lib/api/models/menu/menu.model.mjs +0 -2
  201. package/esm2020/lib/api/models/menu/menucompleto.model.mjs +0 -2
  202. package/esm2020/lib/api/models/menu/sistemamenu.model.mjs +0 -2
  203. package/esm2020/lib/api/modules/primeng.module.mjs +0 -247
  204. package/esm2020/lib/api/services/base.api.service.mjs +0 -74
  205. package/esm2020/lib/api/services/component.service.mjs +0 -27
  206. package/esm2020/lib/api/services/form.service.mjs +0 -84
  207. package/esm2020/lib/api/services/imagens.service.mjs +0 -22
  208. package/esm2020/lib/api/services/notification.service.mjs +0 -67
  209. package/esm2020/lib/api/services/object.service.mjs +0 -26
  210. package/esm2020/lib/buttons/button-personalize/button-personalize.component.mjs +0 -17
  211. package/esm2020/lib/buttons/button-popup/button-popup.component.mjs +0 -31
  212. package/esm2020/lib/buttons/button-secondary/button-secondary.component.mjs +0 -17
  213. package/esm2020/lib/buttons/button-success/button-success.component.mjs +0 -17
  214. package/esm2020/lib/buttons/kvbutton.module.mjs +0 -39
  215. package/esm2020/lib/chart/chart.component.mjs +0 -145
  216. package/esm2020/lib/chart/kvchart.module.mjs +0 -32
  217. package/esm2020/lib/directives/template.directive.mjs +0 -24
  218. package/esm2020/lib/inputs/check/check.component.mjs +0 -26
  219. package/esm2020/lib/inputs/dropdown/dropdown.component.mjs +0 -37
  220. package/esm2020/lib/inputs/editor/editor.component.mjs +0 -70
  221. package/esm2020/lib/inputs/input-calendar/input-calendar.component.mjs +0 -89
  222. package/esm2020/lib/inputs/input-mask/input-mask.component.mjs +0 -23
  223. package/esm2020/lib/inputs/input-number/input-number.component.mjs +0 -59
  224. package/esm2020/lib/inputs/input-password/input-password.component.mjs +0 -33
  225. package/esm2020/lib/inputs/input-text/input-text.component.mjs +0 -21
  226. package/esm2020/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +0 -38
  227. package/esm2020/lib/inputs/input-textarea/input-textarea.component.mjs +0 -43
  228. package/esm2020/lib/inputs/input-time/input-time.component.mjs +0 -24
  229. package/esm2020/lib/inputs/kvinputs.module.mjs +0 -108
  230. package/esm2020/lib/inputs/multi-select/multi-select.component.mjs +0 -38
  231. package/esm2020/lib/inputs/radio-group/radio-group.component.mjs +0 -53
  232. package/esm2020/lib/inputs/switch/switch.component.mjs +0 -32
  233. package/esm2020/lib/keevo-components.module.mjs +0 -105
  234. package/esm2020/lib/label/label.component.mjs +0 -15
  235. package/esm2020/lib/label/label.module.mjs +0 -24
  236. package/esm2020/lib/loader/loader.component.mjs +0 -18
  237. package/esm2020/lib/loader/loader.module.mjs +0 -28
  238. package/esm2020/lib/loader/loader.service.mjs +0 -29
  239. package/esm2020/lib/login/kvlogin.module.mjs +0 -47
  240. package/esm2020/lib/login/login.component.mjs +0 -52
  241. package/esm2020/lib/menu/kvmenu.module.mjs +0 -43
  242. package/esm2020/lib/menu/menu.component.mjs +0 -237
  243. package/esm2020/lib/orgchart/orgchart.component.mjs +0 -100
  244. package/esm2020/lib/orgchart/orgchart.module.mjs +0 -24
  245. package/esm2020/lib/page-form/kv-page-form.module.mjs +0 -38
  246. package/esm2020/lib/page-form/page-form.component.mjs +0 -144
  247. package/esm2020/lib/picklist/kvpicklist.module.mjs +0 -32
  248. package/esm2020/lib/picklist/picklist.component.mjs +0 -48
  249. package/esm2020/lib/pipes/codigofile.pipe.mjs +0 -19
  250. package/esm2020/lib/pipes/cpfcnpj.pipe.mjs +0 -25
  251. package/esm2020/lib/pipes/pipes.module.mjs +0 -34
  252. package/esm2020/lib/pipes/telefone.pipe.mjs +0 -45
  253. package/esm2020/lib/table/kvtable.module.mjs +0 -32
  254. package/esm2020/lib/table/table.component.mjs +0 -499
  255. package/esm2020/lib/tree-table/kv-treetable.component.mjs +0 -371
  256. package/esm2020/lib/tree-table/kv-treetable.module.mjs +0 -32
  257. package/esm2020/lib/tree-view/kvtree-view.module.mjs +0 -28
  258. package/esm2020/lib/tree-view/tree-view.component.mjs +0 -29
  259. package/esm2020/lib/workspace/kvworkspace.module.mjs +0 -47
  260. package/esm2020/lib/workspace/workspace.component.mjs +0 -77
  261. package/esm2020/public-api.mjs +0 -137
  262. package/fesm2015/keevo-components.mjs +0 -4706
  263. package/fesm2015/keevo-components.mjs.map +0 -1
  264. package/fesm2020/keevo-components.mjs +0 -4697
  265. package/fesm2020/keevo-components.mjs.map +0 -1
  266. package/index.d.ts +0 -5
  267. package/lib/api/base-components/base-component-button.d.ts +0 -14
  268. package/lib/api/base-components/base-component-chart.d.ts +0 -40
  269. package/lib/api/base-components/base-component-crud-form.d.ts +0 -137
  270. package/lib/api/base-components/base-component-crud-list.d.ts +0 -63
  271. package/lib/api/base-components/base-component-crud.d.ts +0 -36
  272. package/lib/api/base-components/base-component-dropdown-new.d.ts +0 -14
  273. package/lib/api/base-components/base-component-dropdown.d.ts +0 -42
  274. package/lib/api/base-components/base-component-input.d.ts +0 -31
  275. package/lib/api/base-components/base-component-multi-select.d.ts +0 -35
  276. package/lib/api/base-components/base-component.d.ts +0 -21
  277. package/lib/api/components/chart/chart.config.d.ts +0 -11
  278. package/lib/api/components/chart/chart.model.d.ts +0 -9
  279. package/lib/api/components/chart/orchart.config.d.ts +0 -35
  280. package/lib/api/components/chart/orchart.item.d.ts +0 -26
  281. package/lib/api/components/dropdown/filtro.combo.d.ts +0 -4
  282. package/lib/api/components/error/error.component.d.ts +0 -12
  283. package/lib/api/components/error/kverror.module.d.ts +0 -10
  284. package/lib/api/components/table/action-item.d.ts +0 -5
  285. package/lib/api/components/table/kv-menuitem.d.ts +0 -9
  286. package/lib/api/components/table/table.config.column.d.ts +0 -21
  287. package/lib/api/components/table/table.config.d.ts +0 -17
  288. package/lib/api/components/table/table.paginate.d.ts +0 -6
  289. package/lib/api/helpers/component-providers.d.ts +0 -2
  290. package/lib/api/helpers/keevo-validators.d.ts +0 -10
  291. package/lib/api/helpers/translate-primeng.d.ts +0 -4
  292. package/lib/api/models/menu/menu.model.d.ts +0 -10
  293. package/lib/api/models/menu/sistemamenu.model.d.ts +0 -8
  294. package/lib/api/modules/primeng.module.d.ts +0 -60
  295. package/lib/api/services/base.api.service.d.ts +0 -25
  296. package/lib/api/services/component.service.d.ts +0 -11
  297. package/lib/api/services/form.service.d.ts +0 -27
  298. package/lib/api/services/imagens.service.d.ts +0 -8
  299. package/lib/api/services/notification.service.d.ts +0 -25
  300. package/lib/api/services/object.service.d.ts +0 -8
  301. package/lib/buttons/button-personalize/button-personalize.component.d.ts +0 -7
  302. package/lib/buttons/button-popup/button-popup.component.d.ts +0 -13
  303. package/lib/buttons/button-secondary/button-secondary.component.d.ts +0 -7
  304. package/lib/buttons/button-success/button-success.component.d.ts +0 -7
  305. package/lib/buttons/kvbutton.module.d.ts +0 -11
  306. package/lib/chart/chart.component.d.ts +0 -56
  307. package/lib/chart/kvchart.module.d.ts +0 -10
  308. package/lib/directives/template.directive.d.ts +0 -11
  309. package/lib/inputs/check/check.component.d.ts +0 -11
  310. package/lib/inputs/dropdown/dropdown.component.d.ts +0 -14
  311. package/lib/inputs/editor/editor.component.d.ts +0 -39
  312. package/lib/inputs/input-calendar/input-calendar.component.d.ts +0 -27
  313. package/lib/inputs/input-mask/input-mask.component.d.ts +0 -10
  314. package/lib/inputs/input-number/input-number.component.d.ts +0 -19
  315. package/lib/inputs/input-password/input-password.component.d.ts +0 -13
  316. package/lib/inputs/input-text/input-text.component.d.ts +0 -9
  317. package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +0 -15
  318. package/lib/inputs/input-textarea/input-textarea.component.d.ts +0 -16
  319. package/lib/inputs/input-time/input-time.component.d.ts +0 -10
  320. package/lib/inputs/kvinputs.module.d.ts +0 -25
  321. package/lib/inputs/multi-select/multi-select.component.d.ts +0 -12
  322. package/lib/inputs/radio-group/radio-group.component.d.ts +0 -18
  323. package/lib/inputs/switch/switch.component.d.ts +0 -13
  324. package/lib/keevo-components.module.d.ts +0 -19
  325. package/lib/label/label.component.d.ts +0 -7
  326. package/lib/label/label.module.d.ts +0 -8
  327. package/lib/loader/loader.component.d.ts +0 -10
  328. package/lib/loader/loader.module.d.ts +0 -9
  329. package/lib/loader/loader.service.d.ts +0 -10
  330. package/lib/login/kvlogin.module.d.ts +0 -13
  331. package/lib/login/login.component.d.ts +0 -30
  332. package/lib/menu/kvmenu.module.d.ts +0 -12
  333. package/lib/menu/menu.component.d.ts +0 -74
  334. package/lib/orgchart/orgchart.component.d.ts +0 -27
  335. package/lib/orgchart/orgchart.module.d.ts +0 -9
  336. package/lib/page-form/kv-page-form.module.d.ts +0 -11
  337. package/lib/page-form/page-form.component.d.ts +0 -69
  338. package/lib/picklist/kvpicklist.module.d.ts +0 -10
  339. package/lib/picklist/picklist.component.d.ts +0 -20
  340. package/lib/pipes/codigofile.pipe.d.ts +0 -7
  341. package/lib/pipes/cpfcnpj.pipe.d.ts +0 -7
  342. package/lib/pipes/pipes.module.d.ts +0 -10
  343. package/lib/pipes/telefone.pipe.d.ts +0 -7
  344. package/lib/table/kvtable.module.d.ts +0 -10
  345. package/lib/table/table.component.d.ts +0 -104
  346. package/lib/tree-table/kv-treetable.component.d.ts +0 -84
  347. package/lib/tree-table/kv-treetable.module.d.ts +0 -11
  348. package/lib/tree-view/kvtree-view.module.d.ts +0 -9
  349. package/lib/tree-view/tree-view.component.d.ts +0 -14
  350. package/lib/workspace/kvworkspace.module.d.ts +0 -13
  351. package/lib/workspace/workspace.component.d.ts +0 -28
@@ -1,499 +0,0 @@
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>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n collapsedIcon=\"pi pi-filter\"\r\n styleClass=\"bg-gray-200\"\r\n [style]=\"{'margin-bottom': '2px'}\"\r\n >\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n\r\n <p-table\r\n *ngIf=\"config\"\r\n #dt\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{totalRecords}}\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [responsive]=\"true\"\r\n responsiveLayout=\"stack\"\r\n >\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{tamanhoTela < 768 ? 'col-10' : 'col-12'}}\">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"block mt-2 md:mt-0 p-input-icon-left text-align-center\"\r\n >\r\n <i\r\n class=\"material-symbols-outlined icon-search\"\r\n style=\"display: inline-block\"\r\n >\r\n search\r\n </i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"w-full mb-1\"\r\n style=\"height: 40px\"\r\n />\r\n </span>\r\n\r\n <!-- <button\r\n pButton\r\n #botaoFiltro\r\n *ngIf=\"filtrosAvancados\"\r\n class=\"p-button-raised p-button-text actionLoteBtns\"\r\n (click)=\"filtrosAvancadosEvent(showFiltrosAvancados)\"\r\n [pTooltip]=\"'Filtros avan\u00E7ados'\"\r\n >\r\n <span class=\"material-symbols-outlined md-22\"> filter_alt </span>\r\n </button> -->\r\n\r\n <!-- <div\r\n #menuFiltroDiv\r\n id = \"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200\"\r\n (click)=\"onClickEvent($event)\"\r\n > -->\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card>\r\n <div\r\n class=\"flex flex-column text-medium w-15rem\"\r\n *ngFor=\"let col of columns\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"retornarCampo(action, selectedItems, 'btnColor')\"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n\r\n\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n >\r\n <tr (dblclick)=\"doubleClick($event, rowData)\">\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\r\n <i\r\n *ngIf=\"col.icon\"\r\n [class]=\"col.icon + ' mr-2'\"\r\n ></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{\r\n transformValue(rowData, col)\r\n }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img\r\n class=\"image\"\r\n [src]=\"loadImage(rowData, col)\"\r\n />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\r\n <i\r\n *ngIf=\"col.icon\"\r\n [class]=\"col.icon + ' mr-2'\"\r\n ></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img\r\n class=\"image\"\r\n [src]=\"loadImage(rowData, col)\"\r\n />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <td\r\n *ngIf=\"config.actions && config.actions.length > 0\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div *ngFor=\"let action of config.actions\">\r\n <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command()\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"action.tooltipPosition ? action.tooltipPosition : 'bottom'\"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined\"\r\n style=\"font-size: 20px\"\r\n >\r\n more_horiz\r\n </span>\r\n </button>\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"emptymessage\"\r\n let-columns\r\n >\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + 2\"\r\n style=\"text-align: center\"\r\n >\r\n Nenhum registro encontrado\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\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>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n collapsedIcon=\"pi pi-filter\"\r\n styleClass=\"bg-gray-200\"\r\n [style]=\"{'margin-bottom': '2px'}\"\r\n >\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n\r\n <p-table\r\n *ngIf=\"config\"\r\n #dt\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{totalRecords}}\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [responsive]=\"true\"\r\n responsiveLayout=\"stack\"\r\n >\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{tamanhoTela < 768 ? 'col-10' : 'col-12'}}\">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"block mt-2 md:mt-0 p-input-icon-left text-align-center\"\r\n >\r\n <i\r\n class=\"material-symbols-outlined icon-search\"\r\n style=\"display: inline-block\"\r\n >\r\n search\r\n </i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"w-full mb-1\"\r\n style=\"height: 40px\"\r\n />\r\n </span>\r\n\r\n <!-- <button\r\n pButton\r\n #botaoFiltro\r\n *ngIf=\"filtrosAvancados\"\r\n class=\"p-button-raised p-button-text actionLoteBtns\"\r\n (click)=\"filtrosAvancadosEvent(showFiltrosAvancados)\"\r\n [pTooltip]=\"'Filtros avan\u00E7ados'\"\r\n >\r\n <span class=\"material-symbols-outlined md-22\"> filter_alt </span>\r\n </button> -->\r\n\r\n <!-- <div\r\n #menuFiltroDiv\r\n id = \"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200\"\r\n (click)=\"onClickEvent($event)\"\r\n > -->\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card>\r\n <div\r\n class=\"flex flex-column text-medium w-15rem\"\r\n *ngFor=\"let col of columns\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"(selectedItems.length > 0 || action.showAcoesLote) && exibirCampo(action, this.action)\"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"retornarCampo(action, selectedItems, 'btnColor')\"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n\r\n\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n >\r\n <tr (dblclick)=\"doubleClick($event, rowData)\">\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"rowgroup && !col.template\"\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\r\n <i\r\n *ngIf=\"col.icon\"\r\n [class]=\"col.icon + ' mr-2'\"\r\n ></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >{{\r\n transformValue(rowData, col)\r\n }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img\r\n class=\"image\"\r\n [src]=\"loadImage(rowData, col)\"\r\n />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"!rowgroup && !col.grouped && !col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n <span *ngIf=\"!isChipField(col) && !col.iconField && !isImageField(col)\">\r\n <i\r\n *ngIf=\"col.icon\"\r\n [class]=\"col.icon + ' mr-2'\"\r\n ></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img\r\n class=\"image\"\r\n [src]=\"loadImage(rowData, col)\"\r\n />\r\n </span>\r\n </span>\r\n\r\n <i\r\n *ngIf=\"col.iconField\"\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i\r\n *ngIf=\"!col.iconField\"\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </ng-template>\r\n </td>\r\n\r\n <td\r\n *ngIf=\"col.template\"\r\n [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \"\r\n class=\"rowTable\"\r\n >\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container\r\n *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n >\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <td\r\n *ngIf=\"config.actions && config.actions.length > 0\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div *ngFor=\"let action of config.actions\">\r\n <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command()\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"action.tooltipPosition ? action.tooltipPosition : 'bottom'\"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined\"\r\n style=\"font-size: 20px\"\r\n >\r\n more_horiz\r\n </span>\r\n </button>\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"emptymessage\"\r\n let-columns\r\n >\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + 2\"\r\n style=\"text-align: center\"\r\n >\r\n Nenhum registro encontrado\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBSU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPckUsTUFBTSxVQUFVLEdBQUcsMHFQQUEwcVAsQ0FBQztBQU85clAsTUFBTSxPQUFPLGNBQWM7SUE2QnpCLElBQXFCLFNBQVMsQ0FBQyxLQUFrQjtRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQ3pDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsR0FBRyxLQUFLO1NBQ1QsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBNkJELFlBQ21CLFFBQWtCLEVBQ2xCLFdBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQ25DLFFBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLFNBQXVCO1FBUGQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDbkMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUE1RWpDLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQUdsQyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUkxQixjQUFTLEdBQWlCLEVBQUUsQ0FBQztRQUM3QixnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFFL0IsWUFBTyxHQUFZLElBQUksQ0FBQztRQUV4QixZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUNsQyxrQkFBYSxHQUF3QixFQUFFLENBQUM7UUFFeEMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQyx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUF3QjdCLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBRTFCLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFMUIsU0FBSSxHQUFXLENBQUMsQ0FBQztRQUNqQixxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUFDN0Isc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBRW5DLGVBQVUsR0FBYSxDQUFDLE9BQVksRUFBRSxHQUFzQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDcEUscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQ2pDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFFakMsaUJBQVksR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyRCxxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6RCxlQUFVLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbkQsc0JBQWlCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDMUQscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekQsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRCx5QkFBb0IsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQWlCekUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDckMsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUdELGNBQWM7UUFDWixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxVQUFVLENBQUMsT0FBWTtRQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sY0FBYyxDQUFDLE9BQVk7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUNqRCxPQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDaEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFzQjtRQUNoQyxPQUFPLEdBQUcsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBc0I7UUFDakMsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDeEUsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxrSEFBa0g7SUFDbEgsSUFBSTtJQUVKLGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUEsQ0FBQztJQUMvQyxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsT0FBWTtRQUM3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNsSCxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUM1Qzs7VUFFRTtRQUNGLElBQUksT0FBTyxHQUFHLDBCQUEwQixVQUFVLEVBQUUsQ0FBQztRQUNyRCxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDckMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7O2dCQUU3QixPQUFPLEdBQUcsMEJBQTBCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztTQUM1RDtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxjQUFjLENBQUMsS0FBWSxFQUFFLEtBQVk7UUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsS0FBSyxDQUFDLFlBQVksQ0FBRSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFVO1FBQ3hCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxhQUFhLEdBQ2YsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFFbkIsSUFBSSxLQUFLLENBQUMsWUFBWTtnQkFBRSxhQUFhLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUUzRCxJQUFJLEtBQUssQ0FBQyxTQUFTO2dCQUNqQixTQUFTLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQ2hFLEVBQUUsQ0FBQztZQUVQLE1BQU0sTUFBTSxHQUFrQjtnQkFDNUIsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDekIsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLFNBQVMsRUFBRSxTQUFTO2FBQ3JCLENBQUM7WUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUNqRCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksUUFBZ0IsQ0FBQztRQUVyQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRXpFLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUU7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxRQUFRLEdBQUcsNkJBQTZCLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBWSxFQUFFLEdBQXNCO1FBQzlDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztJQUM3RCxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUNqRCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9CLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDYixPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUNoQixLQUFLLE1BQU07b0JBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3RELEtBQUssU0FBUztvQkFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdELEtBQUssU0FBUztvQkFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxLQUFLLFVBQVU7b0JBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUMsS0FBSyxZQUFZO29CQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlDLEtBQUssT0FBTztvQkFDVixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLEtBQUssWUFBWTtvQkFDZixPQUFPLEdBQUcsS0FBSyxJQUFJLENBQUM7Z0JBRXRCO29CQUNFLE1BQU07YUFDVDtTQUNGO0lBQ0gsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUU7WUFDL0MsS0FBSyxFQUFFLFVBQVU7WUFDakIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRTtZQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLGdCQUFnQixDQUFDO1NBQ3RDO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsQ0FBTSxFQUFFLE9BQVk7UUFDOUIsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRELElBQUksS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0RCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLFNBQVM7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRO1FBQ3pCLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRTtZQUNsQixPQUFPLG9CQUFvQixDQUFDO1NBQzdCOztZQUFNLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUTtRQUNuQixJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDYixPQUFPLGVBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ25DOztZQUFNLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRO1FBQ3pCLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtZQUNiLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxPQUFPO2dCQUFFLE9BQU8sc0JBQXNCLENBQUM7O2dCQUNuRCxPQUFPLEVBQUUsQ0FBQztTQUNoQjs7WUFBTSxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWtCLEVBQUUsT0FBWSxFQUFFLEtBQWE7UUFDM0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWE7WUFDcEMsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFjO1lBQzNDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxNQUFNLE1BQU0sR0FBVyxTQUFTO1lBQzlCLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFZLEVBQUUsR0FBUSxFQUFFLEtBQWE7UUFDL0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pFLE1BQU0sTUFBTSxHQUNWLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxLQUFLLFFBQVE7Z0JBQzFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVLEVBQUUsT0FBWTtRQUNsQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFNUQsNERBQTREO1FBQzVELGtDQUFrQztRQUNsQyxrQkFBa0I7UUFDbEIsSUFBSTtRQUNKLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUztRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzVELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM1RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sT0FBTyxHQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDakUsTUFBTSxPQUFPLEdBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN0RSxNQUFNLFFBQVEsR0FBWSxNQUFNLENBQUMsUUFBUTtvQkFDdkMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUN2QixDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUVWLE1BQU0sVUFBVSxHQUFlO29CQUM3QixLQUFLO29CQUNMLElBQUk7b0JBQ0osT0FBTztvQkFDUCxlQUFlO29CQUNmLE9BQU87b0JBQ1AsUUFBUTtvQkFDUixPQUFPO2lCQUNSLENBQUM7Z0JBRUYsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQzlCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQ3ZDLENBQUM7Z0JBRUYsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUM7b0JBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ2pEO29CQUNILElBQUksVUFBVSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO3dCQUNyQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNqQztvQkFFRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTt3QkFDekMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDakM7b0JBRUQsSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7d0JBQzNDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ2pDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsT0FBWSxFQUFFLEdBQVE7UUFDcEMsT0FBTywrQ0FBK0MsSUFBSSxDQUFDLFdBQVcsQ0FDcEUsT0FBTyxFQUNQLEdBQUcsRUFDSCxXQUFXLENBQ1osV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQVksRUFBRSxHQUFRO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFZLEVBQUUsR0FBUTtRQUN0QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLEtBQWEsQ0FBQztRQUVsQixJQUFJLE1BQU0sR0FBa0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNsRSxDQUFDLENBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUMzQyxDQUFDO1FBQ0YsSUFBSSxNQUFNLEVBQUU7WUFDVixLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWE7UUFDckIsSUFBSSxLQUFhLENBQUM7UUFFbEIsSUFBSSxNQUFNLEdBQWtDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDbEUsQ0FBQyxDQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FDM0MsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxJQUFJLGFBQWEsR0FDZixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUM7WUFFdEUsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFO2dCQUM5QixLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsQ0FBTSxFQUFFLEdBQVE7UUFDL0IsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7WUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsSUFBSSxHQUFHLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsNEJBQTRCO0lBQzVCLHdDQUF3QztJQUN4QyxrQ0FBa0M7SUFFbEMsZ0NBQWdDO0lBQ2hDLHlGQUF5RjtJQUN6RixTQUFTO0lBQ1Qsd0ZBQXdGO0lBRXhGLDZFQUE2RTtJQUM3RSwyRUFBMkU7SUFDM0UsSUFBSTtJQUVKLHVCQUF1QjtJQUN2Qiw2QkFBNkI7SUFDN0Isa0NBQWtDO0lBRWxDLDZDQUE2QztJQUM3QyxJQUFJO0lBRUosdURBQXVEO0lBQ3ZELHNDQUFzQztJQUN0QyxvRUFBb0U7SUFDcEUsK0JBQStCO0lBQy9CLE1BQU07SUFDTixJQUFJO0lBRUosOENBQThDO0lBQzlDLDZCQUE2QjtJQUM3QixvRUFBb0U7SUFDcEUsMERBQTBEO0lBQzFELDRCQUE0QjtJQUM1Qix1RUFBdUU7SUFDdkUsMEJBQTBCO0lBQzFCLHFFQUFxRTtJQUNyRSxnQ0FBZ0M7SUFDaEMsc0VBQXNFO0lBQ3RFLGlEQUFpRDtJQUNqRCwyQkFBMkI7SUFDM0IsbURBQW1EO0lBQ25ELGlEQUFpRDtJQUNqRCwyQkFBMkI7SUFFM0Isa0RBQWtEO0lBQ2xELE1BQU07SUFDTixJQUFJO0lBRUosZUFBZSxDQUFDLEdBQVE7UUFDdEIsSUFBSSxhQUFhLEdBQWtDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUN4RSxDQUFDLENBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssQ0FDL0MsQ0FBQztRQUNGLElBQUksYUFBYTtZQUFFLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDOztZQUNsQyxHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sVUFBVSxLQUFVLEVBQUUsS0FBVTtZQUNyQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRTtnQkFDbkMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNYO2lCQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUMxQyxPQUFPLENBQUMsQ0FBQzthQUNWO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWtCLEVBQUUsSUFBUztRQUN4QyxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUU7WUFDcEIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBc0I7UUFDekMsSUFBSSxHQUFHLENBQUMsV0FBVztZQUFFLE9BQU8sR0FBRyxDQUFDLFdBQVcsQ0FBQzs7WUFDdkMsT0FBTyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ3pDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLElBQUksQ0FDaEMsQ0FBQztRQUNGLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsWUFBb0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsNkJBQTZCO0lBQzdCLHdDQUF3QztJQUN4QyxhQUFhO0lBQ2IsV0FBVztJQUNYLE9BQU87SUFDUCxJQUFJO0lBRUoscUJBQXFCLENBQUMsQ0FBTTtRQUMxQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUMzRCxDQUFDOzsyR0EvZlUsY0FBYzsrRkFBZCxjQUFjLG80QkF1QlIsaUJBQWlCLDJUQ3hEcEMsNitmQW9kRTsyRkRuYlcsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxVQUFVO3VSQTJCZ0IsU0FBUztzQkFBNUMsZUFBZTt1QkFBQyxpQkFBaUI7Z0JBQ2QsVUFBVTtzQkFBN0IsS0FBSzt1QkFBQyxXQUFXO2dCQUVxQixLQUFLO3NCQUEzQyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR2hCLFNBQVM7c0JBQTdCLEtBQUs7dUJBQUMsUUFBUTtnQkFlTixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUlxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0EsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQTBCeEIsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi9hcGkvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb25maWcnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbmZpZ0NvbHVtbiB9IGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZy5jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRlIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUucGFnaW5hdGUnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29kaWdvRmlwZVBpcGUgfSBmcm9tICcuLi9waXBlcy9jb2RpZ29maWxlLnBpcGUnO1xyXG5pbXBvcnQgeyBDcGZDbnBqUGlwZSB9IGZyb20gJy4uL3BpcGVzL2NwZmNucGoucGlwZSc7XHJcbmltcG9ydCB7IFRlbGVmb25lUGlwZSB9IGZyb20gJy4uL3BpcGVzL3RlbGVmb25lLnBpcGUnO1xyXG5pbXBvcnQgeyBLdk1lbnVJdGVtIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUva3YtbWVudWl0ZW0nO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuXHJcbmNvbnN0IGltZ0RlZmF1bHQgPSAnLzlqLzRBQVFTa1pKUmdBQkFRSUFkZ0IyQUFELzRRQmlSWGhwWmdBQVRVMEFLZ0FBQUFnQUJRRVNBQU1BQUFBQkFBRUFBQUVhQUFVQUFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBTUFBQUlUQUFNQUFBQUJBQUVBQUFBQUFBQUFBQUIyQUFBQUFRQUFBSFlBQUFBQi85c0FRd0FEQWdJQ0FnSURBZ0lDQXdNREF3UUdCQVFFQkFRSUJnWUZCZ2tJQ2dvSkNBa0pDZ3dQREFvTERnc0pDUTBSRFE0UEVCQVJFQW9NRWhNU0VCTVBFQkFRLzlzQVF3RURBd01FQXdRSUJBUUlFQXNKQ3hBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVEvOEFBRVFnQWtBQ1FBd0VSQUFJUkFRTVJBZi9FQUIwQUFRQUJCQU1CQUFBQUFBQUFBQUFBQUFBR0FRSUhDQU1FQ1FYL3hBQkJFQUFDQVFRQUJRSUNDQVFEQkFzQUFBQUJBZ01BQkFVUkJnY1NJVEVUUVFoUkNSUVZHU0pWbGRFeVlZR1JRbEppRmlNM09GTmpjWE4xZHBLVHNiTzAvOFFBR2dFQkFBSURBUUFBQUFBQUFBQUFBQUFBQUFFRkF3UUdBdi9FQURJUkFBSUFCQU1GQ0FFRkFRRUJBQUFBQUFBQkFnTUVFU0V4VVFVU1FaSHdFeFV5WVhHQm9iSFJJak5Dd2VFMDhTUC8yZ0FNQXdFQUFoRURFUUEvQVBLcWdGQUtBVUJkRERMY1NwQkJFOGtzakJFUkZKWm1KMEFBUEpKcVVuRTdJaHRRcTd5SjV3OXlkejJWaStzNWU0WEZSTXUwVjA5U1U3MFJ0QVIwalJQazlRSTBWOTZzNUd5cGt4WG1QZCtYL24zNUZiTzJwS2w0UWZxZnh6SjlqT1UvQm1PNldrc1piNlJKQklyM1VwT3RhMHBWZWxTTzNnZzcyZDdIYXJPWHMybmd6Vi9YcElxNDlwVk1mRzNvdnpka21zTVRpc1gxL1ptTXRMUDFkZGZvUUxIMWEzcmZTQnZXei9ldHVDWEJMdnVKSyttQnB4ekk1bHQ5dDIxeE8zV1E4Q2dPcGY0bkZaVG8rMDhaYVhucGI2UHJFQ3lkTzliMTFBNjNvZjJySEhMZ21lTkorcVBjRXlPWGZjYlY5TUNNNVBsUHdaa2VwbzdHV3hrZVF5TTlyS1J2ZTlxRmJxVUwzOEFEV2hyUTdWcVRObTA4ZVN0NlAvMUc1QnRLb2c0MzlWK0xNZ1BFUEozUFlxTDZ6aUxoY3JHcTdkRVQwNVJyWk9rSlBVTkFlRDFFblFYM3FzbjdLbVMxdlMzdmZELzM3OGkwazdVbFRIdXhyZGZ4ei93Z2MwTTF2TTl2Y1JQRkxFeFIwZFNyS3dPaUNENElQdFZZMDRYWmxrbW9sZFpGdFFTS0FVQW9CUUNnRkFTamcvbDltZUxaUktGZXlzT2tzYnVTSWxXN2thUWR1czdCQjBkRFIyZDZCM2FXaG1WT09VT3Y0MU5Lc3JZYVZZWXhhZFgvQU4rVm16aDdoSEFjTVJCTVRZSWtwWHBlNGY4QUZLL1liMng5ajBnOUkwdS9ZVjBNaW1sVTZ0QXNkZUp6czJwbXovM0lyL1hTeTExWjltczVnS2hUVWtYSzZGQmNhRkNMalFvTGpRb1Rjb1ZOQmNwVUVueHVJZUVjQnhSQ1V5MWdqU2hlbExoUHd5cDJPdE1PNUE2aWVrN1hmdFdDZlN5cWhmcldPdkV6eWFpYklmOEE4NHJlWERwNVh6MFpoUGpIbC9sK0VaZlVJYThzQ29JdTQ0eUZVN0EwNDc5QjJSclowZGpSM3NEbmFxaW1VcnU4VnIrZERvS1N2bDFLdEZhR0srVjg4OHNyNEs3MCtTTDFwbStLQVVBb0JRRTU1ZGN1NWVKcGx5dVdSNDhURzNZYkt0Y3NEM1ZUN0tEMkxmMEhmWld5b2FGMUQzNC9EOTljZXJWdGRYS25YWnkvRjlmN3AxZk9NTU1WdkVsdmJ4SkhGR29SRVJRRlZRTkFBRHdBUGF1aVNVS3Nzam5XM0U3dDRuSUI4NjlIaHNyUWdyVUFVQW9CUUNnRkFVcVFVSW9UYzQ1b1lwNG5nbmlTU09SU2pvNmhsWlNORUVIc1FSN1ZEU2lWbmtlazNDN3A0bURlWW5MdVhoaVZzcmlrZVRGU04zSGN0Yk1UMlZqN3FUNGIraDc2TGM1WFVMcDMya3Z3L1grZWZUNk9ocmxVTHM1bmkrLzkxNnRCNnJTeUZBS0FsSEwvQUlPbDR1eStwQ3EyRm15U1haSk8yVW50R05FSGJhSTM3QUUrZEE3bEZTdXFtV2VTei9IdWFGZlZxbWw3cXZ2Ulh0NWVlVFdGOG5ucGE1c0ZERkZCRWtFRVNSeHhxRVJFVUJWVURRQUE4QUQycnFVa2xaSE10dDRzNVFLazh0bGFnZ1VBb0NmY3B1UlBOTG5ia254L0x2aGE0eUVjREJibTljaUsxdHQvOUpLMmxCMTM2UnRpUEFOWVoxUkxwMWVZelBJcHB0UTdTMGJQNFQ2TGJqdTR0Rms0aDVxWUt3dVNObUt6c1pycEFmbDFzWS8vQUlxdWkydkFuK21GbGxEc2VOcjlVU0lyekIramI1MjhLMmN1UjRTeWVHNHRpaUJZMjlzN1cxMlFQY1J5ZmdQL0FHQ1RaOWdheVN0cXlZM2FLNk1VM1pNNkJYZ2FacXZsc1RsY0Rrcm5EWnZHM1dQdjdPUXhYRnJkUk5GTEU0OHF5TUFWUDhqVmttb2xkWkZaRkM0WGFMTTZsU1FLQVVCYVJVNWtwbkhOREZjUlBiM0VTU1JTS1VkSFVNcktSb2dnK1FhaHBOTk05d3hPRjd5ek5mZVlIQjB2Q09ZSWo2VFlYalBKYUVIdXFnamFIWkoydXdOKzQwZk93T1dyYVYwc3pEd3ZMOGV4MHRCVnFwbDdyOFVLVi9QenlTeHRrc3VSRjYwemZMb1laYmlWSUlJbmtsa1lJaUlwTE14T2dBQjVKTlNrNG5aRU5xRlhlUnNwd25nSXVHZUg3VERvSXpKRW5WTzZBZjd5VnU3SFlBTERmWUVqZlNGSHRYVzAwaFU4cFMxNyt2WHdjaFVUZTJteFRNY1hxL1RWMnl4U3d2ZDV0bjJBSzJEQXk2b0lGQUtBeXA4TlhJekpmRUJ6UXN1QzRKWkxYRndJYjNMM2lBYmd0RUlEZE8rM1d4S292bnUyeUNBYTE2cW9WTkxjZkhnYk5KVE9wbXFEaHhQWW5nemd2aGZsN3cxWThJY0hZYTN4bUp4OFlqZ3Q0VjBCODJZK1dZbnVXT3lTU1NTYTVXWk1pbXhPS04zWjFrdVhES2hVRUNzajdkZUQyS0ExeStNVDRXOE56ejROdXVJK0g4ZEZEeHpocmRwYkM0alVLMS9HZzJiV1EvNHRqZlFUL0MydTRCYmUvUTFqcDQ5Mkx3djQ4elFycU5WTUc5Q3YxTDU4anlWZEhqZG81RktzcElaU05FSDVHdW1PV0tVQW9CUUZwSHZVa28rTnhkdzlEeFJnTHJFeUJSSzY5ZHU3YUhSS1A0VHZSME45am9iNlNSNzFyMVVoVkVweTM3ZXBzVTAzc0pzTXpUNi92MzQyWnJaTkROYnpQYjNFVHhTeE1VZEhVcXlzRG9nZytDRDdWeVRUaGRtZGNtb2xkWkU4NU84UFJaWFB5NWE1Q3RGaWxWMVE2TzVYMkVPaUQyQVZqdllJWUthc3RseVZNbTc3L2o5OWZKV2JVcUhMbHFXdjVjZkpXKy9xNW0rdWpPZExxSGtyVUFVQW9EMGkraTc0VnM3VGxyeGR4cjZTL1c4bG0xeHBjanVJcmVCSkFCOGdXdVcvc1BsVkR0ZU51WkRCb3I5Y2pvTmp3SlM0bzlYOWYrbTYxVkJjQ2dGQUtBOFkvaTI0VnRPRFBpUDQ4d1ZoRXNWdjlwL1hrUlJvSUxtTkxqcEE5Z1BXMEI4cTZ5aWpjeVJERTlQckE1R3VnVXVvamhXdjNpWWpyWk5VVUFvQ2xTQzJvUFJoRG5GdzlGaXMvRmw3Ym9XUEtxenNnN2FsVFFjNkFBMFF5bmV5U3hZbjJybnRxU0ZMbUtZdjVmYS9QM2M2UFpjNXpKVzQ4NGZyaC9aUHVVK00renVETGFSa2xTUytra3VuV1FhMXM5S2xScitFb2lrZWQ3MzRJcXoyYkwzS2RQVzc2OWtWZTBvOStvZmxaZjM5c21RRmI1b011cUR5S0FVQW9EMGIraTY0eHM3bmdQakRnRnBWRjNqOHNtV1ZDZTdSVHdwRVNQbUExdU4vTHJIenFoMnZMYWpoajhySFFiSG1Kd1JRYU81dTdWUVhBb0JRQ2dQRno0cU9NYlBqejRodU91SmNmS3N0ckpsR3RJSkZPMWtqdDBXM1Z3ZmtSRUNQNUd1c281Ymx5SVlYcDk0bkkxc3hUS2lLSmEvV0JpcXRrMVJRQ2dGQVdrVkpLSWR6WXhuMmp3WGN5S2t6eVdVa2QwaXg5L0I2V0xEUjdCSGMrMnRiM29HcS9hVXR6S2QyNFk5Y3l3MmRNVXVvVitPSFh1a1NYRVdIMlZpckxHZXI2djFPM2pnNitucDZ1aFF1OWJPdDY4YnJjbHdkbkFvTkZZMDVrZmFSdVBWMzVuZEhpc2hqWldvSUZBS0FVQmtia0J6b3pmSVhtWmp1UGNSR2JpQ01HMnlWbjFkSXU3TnlQVWozN0hzcktmWmtVblkyRGdxWkNxWmJnWnNVMVJGVFRGR2oySjViY3pPQytiWENscnhsd0xtb2NqanJwUnZwSUVrRW10bUtWUEtPTjkxUDhpTmdnbmxac3FPVEZ1UnJFNnlWT2dudzc4RHVpVTFqTWdvRFZqNDB2aXp3M0tQaGUrNWU4RjVTTzQ0NHkwQmdQb1B2N0poY2FNemtmd3lsVCtCZklKRG5zQUdzcUNpYzZKVEkxK2xmSlcxOWFwRUxnZ2Y2bjhIbGQ1cm96bVJRQ2dGQUtBbzNpcEpSMHN0WURLNHE4eFptOUlYbHZKQjZuVDFkSFdwWGV0amV0K04xam1RZHBBNE5VMXpNa3VQczQxR2xlenVkdXNoNFJjUEZEeXl0UUJRQ2dGQUtBbFBMem1qekI1VVpyL2FEbDV4VmZZUzlJQ3lHQndZNWxCMkZrallGSkYzN01DS3h6Wk1FNWJzeFhNc3FkTWtQZWx1eHNuaFBwTnVlZVB0RnRzdncxd2psWkVHdnJEMnM4TWpINXNFbENmMlVWWHhiSmt0NE5vc0lkcnprc1VtUlRtRDlJRDhSUEhWbkxqYkxNNDdoYTFtQlZ4Zzdab3BtWC92cEdlUlQvTkNwckxMMmJJbHU3Vi9VeFRkcDFFeFdUdDZHdVZ6YzNGNWNTM2QzUEpQUE01a2tsa1lzN3NUc3N4UGNrbjNOYjZWc0VWN2JlTE9PZ0ZBS0FVQW9DaDhWSVJiUTlDZ1JjUEZEeXl0UUJRQ2dGQVNmZy9sZnpINWd5ZW53UHdMbmM0T3JwWjdHd2tsalEvNm5VZEsvMUlySEhPbHl2SEVrWkpjbVpOOEVMWm1EQS9BSjhUK2JSWlp1QnJYRlJ2M0RYK1V0MU92NXFqc3cvcUJXckZ0S25oL2xmMk51SFpsVEYvRzN1U3VINk0vNGhKVURTWmZndUUvNVh5VTVJLzhBVEFSV1B2V1JvK3ZjeXJaTS9WZGV4MWIvQU9qYitJMnpRdGJ0d3JmRUQrRzN5amduL3dCeU5SVXJhc2g2OGlIc21vV25NeDl4UjhHM3hMOEpJODJSNVQ1VzZpUWI2OFk4Vi9zZk1MQXp0L2NWbmdycWVQS0wrdnN3UjBGUkJuRHl4K2pFT1R4ZVR3dDdKanN4anJxeHU0VHFTQzVoYUtSRC9OV0FJclpUVVN1alVjTGhkbWRhcElGQUtBVUJRK0trSXRvZWpxWW0vd0R0VEZXV1Q5TDB2cmx2SFAwZFhWMDlhaHRiME42MzUxV09YSDJrQ2oxU1o3bVFkbkc0TDNzN2NqdWp4V1F4c3JVRUNnTWo4a09RUE1Qbjd4SWNEd1JqbEZ2YmRMWCtTdWRyYTJTSHdYWUE3WTZPa1VGam85dEFrWUtpcGwwME85R2JGUFRUS21MZGc1bm85eWIrQXZranl3Z2d2dUlzV3ZHbWNRQXZkNWFJTmJLMy9WMnV5Z0hqK1ByYjVFZUtvWiswWjA3Q0Y3cTh2eWRCSTJiSms0eExlZm4rRFk2MnRiYXl0NDdTenQ0b0lJbENSeFJJRlJGSGdBRHNCV2cyM2l5d1N0Z2pscUFLQVVBb0NPY2E4dU9BdVkrT09LNDc0UXhXY3R0RUt0N2JMSTBlL2RISTZrUDgxSU5aSmMyT1U3d094am1Tb0pxdEdybWsvUDc2TnUzanRMbmlia0hmVGVyR0drZmg2L202dXNmSzNuYnZ2NUxJVHY4QXpqc0RiMDIxY2QyZnovSlQxT3lWYmVrY3Z3YUZaSEhaREQ1QzV4V1dzcDdPOXM1V2d1TGVlTXBKRklwMHlNcDdnZ2dnZzFkSnFKWFJTTk9GMmVaMTZFQ2dLSHhVa282V1d2eGlzVmVaUXcrcUxPM2tuOVBxNmV2b1V0cmVqcmV2T3F4ekkremdjZWliNUdTWEE1a2FnVHRkMjVrYTVUNU1aSGd1MWpaNW5rc1pKTFYya08vQjZsQ25aL0NFZEFQR3RhOEFWcDdObU9aVHBQaGgxek56YU12czZoMjQ0OWU2Wk1RYXNDdlpkVUVIWnhtT3U4dmtyVEUyRWZxWE43UEhid3B2WFZJN0JWSDl5S2h0UXE3SlNjVHNqMjI1TDhwZUhPU25MdkZjQmNPVzhZV3ppRFhseUYwOTVkRUQxWjNQa2xqNDM0VUtvN0FWeU5ST2lxSmpqaU94cDVFTlBMVUVKT2F3bVlVQW9CUUNnRkFLQVVCb1Y5SmZ5Vnc4V014WFBIQzJrY0YrMTBtSnpQcHJyNndySXhnbWIvVXZRVUo4a01nOExWMXNxb2QzSmZxaWsydlRxeW5MUEpubjVWMlVRb0MwbXBKUkR1YkdUK3p1QzdxTlhtU1M5a2p0VWFNNjFzOVRCanNmaEtJNDk5NzFyUk5WKzBwamwwN3R4dzY1Ry9zNldwbFFyOE1ldmRvZ0hKM2lDTEZaK1hFM0pWWXNxcW9yblExTW15ZzJTT3hETVBCSllxS3JObHoxTG03anlpKytCWjdWa09aTFV5SCtQRHlmdHc1V3Y1R2I2Nkk1NHVxVHlTemxML3hWNE0vOHdZNy9BUFRIV0tkKzFGNk15eVAzWWZWSHViWEhIWmlnRkFLQVVBb0JRQ2dGQWF5L1NKLzhzK1MvOFZzUC9zcXcyWi8wTDBaWGJVLzVuNm84b2E2VTVnb2UxU0Myb1BSaERuRnhERGxjOUZpYmJvYVBGS3lNNDdreXZvdU5na2FIU284QWh1b0gycm50cXoxTW1LWEQvSDdmNCs3blI3TGt1WEtjY1djWDF3L3NnY00wdHZLazhFcnh5eHNIUjBZaGxZSFlJSThFR3F4Tnd1NkxKcFJLenlObE9Fcy9IeE53L1o1ZFRHSkpVNlowVWo4RXE5bUdnU1Y3OXdEMzZTcDk2NjJtbnFvbEtOZS9yMThISVZFdnNaMFVyVDF5elhESDFXRjdyTk0rd0Q3VnNHQm5md2VZdmVIczFqOC9qV1JidkdYVVY1YmwxNmxFa2JoMUpIdU5nZHE4eFFxSk9GOFJERTRXb2x3Tmp2dkZQaVgvQURuQmZwTWY3MW9kMlUrajVsaDNyVWFya1B2RlBpWC9BRG5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjg1d1g2VEgrOU83S2ZSOHgzclVhcmtQdkZQaVgvT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4QU9jRitreC92VHV5bjBmTWQ2MUdxNUQ3eFQ0bC96bkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVFUDVxZkdCenA1eWNJVGNEOGI1SEZ6WXVlYUs0ZGJmSHBFL1hHZHIrSWQvTlpaTkRKa1JiOEdaaW5WMDZvZzNJOGpDbGJacGxwUHRVa3BIeGVMdUlZdUY4QmRaWnlobFJlaTNSdjhjcDdLTmJHeDduUjMwZzFyMU05VThwekg3ZXZYd2JGUEs3ZWJETDErdjY5OEwyTmJacHBiaVY1NTVYa2xrWXU3dXhMTXhPeVNUNUpOY2syNG5kNW5YSktGV1JiVUVrbzVmOFl5OEk1Y0dUcE5oZU1rZDJDRHRWQk9wQm9FN1haT3ZjRWp6b2pjb3FwMHN6SHd2UDhBUHNhRmZTS3BsN3l2dlEzdDUrV09HTnMrR3RybXdVTTBWeEVseGJ5cEpGSW9kSFJneXNwR3dRUjVCcnFVN3E2T1phYXdaeUExT1o1YUxxZ2dVQW9CUUNnRkFLQVVBb0JRRnBOVGtTa2NjMDBWdkU5eGNTcEhGR3BkM2RncXFvR3lTVDRBcUcwazJ6M0RDNG51ck0xOTVnY1l5OFhaZ21QcEZoWnM4ZG9BTzdLU055SFlCMjNTRHIyR2g1MlR5MWJWT3FtWFdTeS9KMHRCU0ttbDd6OFVTVi9MeXphd3ZtcytSRjYwemZGQUtBbkhMdm1KTHd4S3VLeXJ2SmlwRzdIdXpXekU5MlVlNmsrVi9xTyt3MWxRMXpwMzJjencvWCtlWFRyYTZoVlF0K1g0dnZyaDFiT1VNMFZ4RWs4RXFTUlNLSFIwWUZXVWpZSUk4Z2l1alRUVjB6bkdtblpvNUFmblVubG9yVUVGYUFVQW9CUUNnRkFVM3FwQlFuNVVKU09PYWFLM2llNHVKVWppalV1N3V3Q3FvR3lTVDRBRlEybGl6MGxkMlJnM21KekVsNG1sYkZZcDNqeFViZHozRFhMQTltWWV5ajJYK3A3NkM4NVhWenFIdVFlSDc2Njh1am9hRlU2N1NQeGZYWFhuQjZyU3lGQUtBVUFvQ1U4SDh3ODF3bklzSmQ3N0hoQ2dzNVpTRlR1VzNHZS9RZXBpVG9hT3pzYjBSdVV0Yk1wbmJPSFQ4YUZmVmJPbDFGNG9MUXhOM2J0bmtzY3I0S3lmQ3k0WUdiY0J4WmdPSm9nMkl5TWNzZ1FPOERmaGxqN0tUdFQzSUJZQXNOcnZ3VFhSU2FtVlVLOHQrM0hyNE9mbTA4NlQrNURiRi9mbGZQTlh4dG1rOEQ2OVp6Q1ZER3BJc1Y2aFFXR3g4NkVXR3g4NkN3NmhRbXhRc2FDeFNvSlBrWi9pM2gvaG1NdGw4akhGSVVMcEF2NHBaT3pFYVVkeHNxUUdPbDM1SXJCUHFaVk9yekg3Y2V2Z3pTcWViUDhBMjRiNHBjTU9kc3MzeHRrbThEQ1BHUE1ETDhYUyttUzFuWUJRQmFSeWtxeDJEdHoyNnpzRFd4b2FHaHZaUE8xVmJNcW5aNExUODZuUlV0Qkxwa25GYUtMVzNybG5iQjJldndSZXRNM2hRQ2dGQUtBVUFvQzZHYVczbFNlQ1Y0NVkyRG82TVF5c0RzRUVlQ0RVcHVGM1JEU2lWbmtUemg3bkZuOFZFTGJMUUpsWWxYU003K25LT3dBMjRCNmgyUGtGaVRzbXJLVHRTYkxWbzF2TDU2K2ZNcTUreXBjeDNsdmQxNHJqeStySzFpZjR6bXh3WGtlbFpMNld5a2VUMDFTNmhLNzhhWXN2VXFqdjVMRFdqdlE3MVp5OXBVOHgydmIxNlpXek5uVkV0WHRmMDZUK0NTMkdXeFdWRWh4ZVN0YndSYTlUMEpsazZONzF2cEoxdlIvc2EzSUprRXp3TlAwZHpUamx4eTdLTk5YMU8zV1E4Q2dPcGY1ZkU0cm8rMDhuYVdmcTdLZXZNc2ZWcnpycUkzNUg5Nnh4eklKZmphWHF6SkJMam1lQk4raUkxaythL0JlTjZsUy9sdlpFbE1iSmF4RnZHOXNHYnBSbDdlUXgzc2EyTzlhY3phVlBMZHIzOU9sOEcxTDJkVVRGZTF2WHB0Y2lBY1FjNHMvbFlqYlltQk1WRXk2ZGtmMUpUc0VIVGtBS080OERxQkd3MVZrL2FrMlpoQitsZlBNdEpHeXBjdDcweDcybkJjT2ZIeXh5NGtEbW1tdUpudUxpVjVaWldMdTdzV1ptSjJTU2U1SlB2VmEyNG5kbG1rb1ZaWkZ0UVNLQVVBb0QvOWs9JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAna3YtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBjb25maWchOiBUYWJsZUNvbmZpZztcclxuICBwZXNxdWlzYVZhbHVlITogc3RyaW5nO1xyXG4gIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBhY3Rpb25zVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBzZWxlY3RlZFNpemU6IHN0cmluZyA9ICcnO1xyXG5cclxuICB0YW1hbmhvVGVsYSE6IG51bWJlcjtcclxuXHJcbiAgbWVudUl0ZW1zOiBLdk1lbnVJdGVtW10gPSBbXTtcclxuICBtZW51Q29sdW1uczogS3ZNZW51SXRlbVtdID0gW107XHJcblxyXG4gIGNoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb2x1bW5zOiBUYWJsZUNvbmZpZ0NvbHVtbltdID0gW107XHJcbiAgZGVsZXRlZENvbHVuczogVGFibGVDb25maWdDb2x1bW5bXSA9IFtdO1xyXG5cclxuICBtZW51RmlsdHJvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hlY2tib3hDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNob3dGaWx0cm9zQXZhbmNhZG9zOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpIHRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxhbnk+O1xyXG4gIEBJbnB1dCgndGVtcGxhdGVzJykgX3RlbXBsYXRlcyE6IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGUhOiBUYWJsZTtcclxuICBkZWxldGVkQ29sdW1uc0luZGV4ITogYW55W107XHJcblxyXG4gIEBJbnB1dCgnY29uZmlnJykgc2V0IHNldENvbmZpZyh2YWx1ZTogVGFibGVDb25maWcpIHtcclxuICAgIHRoaXMuY29uZmlnID0ge1xyXG4gICAgICBlbmFibGVDYXRpb246IHZhbHVlLmVuYWJsZUNhdGlvbiB8fCB0cnVlLFxyXG4gICAgICBlbmFibGVTZWxlY3Q6IHZhbHVlLmVuYWJsZVNlbGVjdCB8fCBmYWxzZSxcclxuICAgICAgZW5hYmxlRmlsdGVyOiB2YWx1ZS5lbmFibGVGaWx0ZXIgfHwgdHJ1ZSxcclxuICAgICAgLi4udmFsdWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5lbmFibGVGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5wdXNoKGNvbC5maWVsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZTogYW55O1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zITogbnVtYmVyW107XHJcbiAgQElucHV0KCkgcm93czogbnVtYmVyID0gNTtcclxuICBASW5wdXQoKSBwYWdlTGlua3NPcHRpb25zOiBudW1iZXIgPSAxO1xyXG4gIEBJbnB1dCgpIHNob3dGaXJzdExhc3RJY29uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGFibGVTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGFwcGx5U3R5bGU6IEZ1bmN0aW9uID0gKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4gJyc7XHJcbiAgQElucHV0KCkgYWNvZXNMaW5oYVRhYmVsYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmlsdGVyQ29sdW1uc0J0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGZpbHRyb3NBdmFuY2Fkb3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0cm9zQXZhbmNhZG9zRW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVGaWx0cm9EaXYnKSBtZW51RmlsdHJvRGl2ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdib3Rhb0ZpbHRybycpIGJvdGFvRmlsdHJvITogRWxlbWVudFJlZjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVjaW1hbFBpcGU6IERlY2ltYWxQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2RpZ29GaXBlUGlwZTogQ29kaWdvRmlwZVBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNwZkNucGpQaXBlOiBDcGZDbnBqUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVsZWZvbmVQaXBlOiBUZWxlZm9uZVBpcGUsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmlzUm93U2VsZWN0YWJsZSA9IHRoaXMuaXNSb3dTZWxlY3RhYmxlLmJpbmQodGhpcyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYWRqdXN0VGFibGVTaXplKCk7XHJcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgICAvLyB0aGlzLmNyaWFyTWVudUNvbHVtbnMoKTtcclxuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29sKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGVja0hpZGVDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMuYWRqdXN0VGFibGVTaXplKCk7XHJcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWN0aXZlSXRlbUxvdGUocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLm9uQWN0aXZlSXRlbUxvdGUuZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIGlzQm9vbGVhbkZpZWxkKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiByb3dEYXRhW2NvbC5maWVsZF0gPT0gJ2Jvb2xlYW4nO1xyXG4gIH1cclxuXHJcbiAgaXNDaGlwRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvbC5maWVsZFR5cGUgPT0gJ2NoaXAnO1xyXG4gIH1cclxuXHJcbiAgaXNJbWFnZUZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGxldCByZXRvcm5vID0gY29sLmZpZWxkVHlwZSAmJiBjb2wuZmllbGRUeXBlID09PSAnaW1hZ2UnID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgcmV0dXJuIHJldG9ybm87XHJcbiAgfVxyXG5cclxuICAvLyBpc1Zpc2libGVDaGVja2JveChyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAvLyAgIHJldHVybiB0aGlzLmNvbmZpZy52aXNpYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb24/IHRoaXMuY29uZmlnLnZpc2libGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhKTogdHJ1ZTtcclxuICAvLyB9XHJcblxyXG4gIGlzUm93U2VsZWN0YWJsZShldmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZENoZWNrYm94KGV2ZW50LmRhdGEpOztcclxuICB9XHJcbiAgaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbiA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhKSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICAvKlxyXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcclxuICAgICovXHJcbiAgICBsZXQgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7aW1nRGVmYXVsdH1gO1xyXG4gICAgaWYgKHJvd0RhdGEgJiYgY29sICYmIHJvd0RhdGFbY29sLmZpZWxkXSAmJiByb3dEYXRhW2NvbC5maWVsZF0gIT09ICcnKSB7XHJcbiAgICAgIGlmIChyb3dEYXRhW2NvbC5maWVsZF0uaW5jbHVkZXMoJ2h0dHAnKSlcclxuICAgICAgICByZXRvcm5vID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7cm93RGF0YVtjb2wuZmllbGRdfWA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldG9ybm87XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25HbG9iYWxGaWx0ZXIodGFibGU6IFRhYmxlLCBldmVudDogRXZlbnQpIHtcclxuICAgIHRoaXMuZmlsdGVyRmllbGQuZW1pdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcclxuICAgIHRhYmxlLmZpbHRlckdsb2JhbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLCAnY29udGFpbnMnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdpbmF0ZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgbGV0IHBhZ2luYUluaWNpYWwgPVxyXG4gICAgICAgIChldmVudD8uZmlyc3QgPiAwID8gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzIDogZXZlbnQuZmlyc3QpICsgMTtcclxuICAgICAgbGV0IHRlcm1vUGVzcXVpc2EgPSAnJztcclxuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xyXG5cclxuICAgICAgaWYgKGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9IGV2ZW50Lmdsb2JhbEZpbHRlcjtcclxuXHJcbiAgICAgIGlmIChldmVudC5zb3J0RmllbGQpXHJcbiAgICAgICAgb3JkZW5hY2FvID0gYCR7ZXZlbnQuc29ydEZpZWxkfSAke2V2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnXHJcbiAgICAgICAgICB9YDtcclxuXHJcbiAgICAgIGNvbnN0IG9iamV0bzogVGFibGVQYWdpbmF0ZSA9IHtcclxuICAgICAgICBwYWdpbmFJbmljaWFsOiBwYWdpbmFJbmljaWFsLFxyXG4gICAgICAgIHRhbWFuaG9QYWdpbmE6IGV2ZW50LnJvd3MsXHJcbiAgICAgICAgdGVybW9QZXNxdWlzYTogdGVybW9QZXNxdWlzYSxcclxuICAgICAgICBvcmRlbmFjYW86IG9yZGVuYWNhbyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMub25QYWdpbmF0ZS5lbWl0KG9iamV0byk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3Rpb25DaGFuZ2UodmFsdWUgPSBbXSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHJldHVyblJvd0NsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgbGV0IHJvd0NsYXNzOiBzdHJpbmc7XHJcblxyXG4gICAgdGhpcy50YWJsZVNpemUgPiA4MDAgPyAocm93Q2xhc3MgPSAndGV4dC1iYXNlJykgOiAocm93Q2xhc3MgPSAndGV4dC1zbScpO1xyXG5cclxuICAgIGlmIChjb2wuZXhwaXJlZERhdGUgPT0gdHJ1ZSkge1xyXG4gICAgICBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpXHJcbiAgICAgICAgPyAocm93Q2xhc3MgPSByb3dDbGFzcyArICcgdGV4dC1yZWQtNDAwIGZvbnQtc2VtaWJvbGQnKVxyXG4gICAgICAgIDogJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93Q2xhc3M7XHJcbiAgfVxyXG5cclxuICBleHBpcmVkRmlsZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbJ2RhdGF2ZW5jaW1lbnRvJ107XHJcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoKSAmJiBjb2wuZmllbGQgPT0gJ2FyZWEnO1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtVmFsdWUocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XHJcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XHJcblxyXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgaWYgKCFjb2wucGlwZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChjb2wucGlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xyXG4gICAgICAgIGNhc2UgJ2RlY2ltYWwnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHZhbHVlLCAnMS4yLTInLCAncHQtQlInKTtcclxuICAgICAgICBjYXNlICdjcGZjbnBqJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNwZkNucGpQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAndGVsZWZvbmUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVsZWZvbmVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnY29kaWdvZmlwZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb2RpZ29GaXBlUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ21vbmV5JzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGFyVmFsb3IodmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG4gICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfSAlYDtcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtYXRhclZhbG9yKHZhbG9yOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcclxuICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXHJcbiAgICAgIGN1cnJlbmN5OiAnQlJMJyxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbG9yKTtcclxuICB9XHJcblxyXG4gIGFkanVzdFRhYmxlU2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlU2l6ZSA8IDgwMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9ICdwLWRhdGF0YWJsZS1zbSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG91YmxlQ2xpY2soZTogYW55LCByb3dEYXRhOiBhbnkpIHtcclxuICAgIGxldCBldmVudERvdWJsZUNsaWNrID0geyBldmVudDogZSwgcm93RGF0YTogcm93RGF0YSB9O1xyXG5cclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcclxuICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5mb3JFYWNoKCh4OiBhbnkpID0+IGFycmF5LnB1c2goeCkpO1xyXG5cclxuICAgIGlmIChhcnJheS5maW5kKCh4OiBhbnkpID0+IHggPT0gJ25nLXN0YXItaW5zZXJ0ZWQnKSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuZG91YmxlQ2xpY2tFdmVudC5lbWl0KGV2ZW50RG91YmxlQ2xpY2spO1xyXG4gIH1cclxuXHJcbiAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuY2VudHJhbGl6ZSkge1xyXG4gICAgICByZXR1cm4gJ3RleHQtYWxpZ246IGNlbnRlcic7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgYWxpZ25Db2x1bmFzKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAgICAgcmV0dXJuIGB0ZXh0LWFsaWduOiAke2NvbC5hbGlnbn1gO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGFsaWduQ29sdW5hc0hlYWRlcihjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoY29sLmFsaWduKSB7XHJcbiAgICAgIGlmIChjb2wuYWxpZ24gPT0gJ3JpZ2h0JykgcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQ6IGVuZCc7XHJcbiAgICAgIGVsc2UgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIHJldG9ybmFyQ2FtcG8oYWN0aW9uOiBLdk1lbnVJdGVtLCByb3dEYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgX2Z1bmN0aW9uID0gYWN0aW9uLmR5bmFtaWNmaWVsZHNcclxuICAgICAgPyAoYWN0aW9uLmR5bmFtaWNmaWVsZHNbZmllbGRdIGFzIEZ1bmN0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9IF9mdW5jdGlvblxyXG4gICAgICA/IF9mdW5jdGlvbi5hcHBseShhY3Rpb24sIFtyb3dEYXRhXSlcclxuICAgICAgOiBhY3Rpb25bZmllbGRdO1xyXG4gICAgcmV0dXJuIF9maWVsZDtcclxuICB9XHJcblxyXG4gIHJldG9ybmFyUm93KHJvd0RhdGE6IGFueSwgY29sOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgX3Jvd2FjdGlvbiA9IHRoaXMuY29uZmlnLnJvd3MgPyB0aGlzLmNvbmZpZy5yb3dzW2NvbC5maWVsZF0gOiBudWxsO1xyXG4gICAgY29uc3QgX2ZpZWxkOiBzdHJpbmcgPVxyXG4gICAgICBfcm93YWN0aW9uICYmIF9yb3dhY3Rpb25bZmllbGRdXHJcbiAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cclxuICAgICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uYXBwbHkodGhpcywgW3Jvd0RhdGFdKVxyXG4gICAgICAgICAgOiBfcm93YWN0aW9uW2ZpZWxkXVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIHJldHVybiBfZmllbGQ7XHJcbiAgfVxyXG5cclxuICBleGliaXJDYW1wbyhmaWVsZDogYW55LCByb3dEYXRhOiBhbnkpIHtcclxuICAgIGxldCB2aXNpYmxlID0gZmllbGQudmlzaWJsZSA/IGZpZWxkLnZpc2libGUocm93RGF0YSkgOiB0cnVlO1xyXG5cclxuICAgIC8vIGlmIChmaWVsZCAhPSB1bmRlZmluZWQgJiYgZmllbGQgIT0gbnVsbCAmJiBmaWVsZCAhPSAnJykge1xyXG4gICAgLy8gICBjb25zdCB2YWx1ZSA9IHJvd0RhdGFbZmllbGRdO1xyXG4gICAgLy8gICByZXR1cm4gdmFsdWU7XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gdmlzaWJsZTtcclxuICB9XHJcblxyXG4gIGNyaWFyTWVudXNNb2RhbChkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5hY3Rpb25zICYmIGRhdGEpIHtcclxuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICd0b29sdGlwJyk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcFBvc2l0aW9uID0gdGhpcy5yZXRvcm5hckNhbXBvKGFjdGlvbiwgZGF0YSwgJ3Rvb2x0aXBQb3NpdGlvbicpO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5yZXRvcm5hckNhbXBvKGFjdGlvbiwgZGF0YSwgJ2xhYmVsJyk7XHJcbiAgICAgICAgY29uc3QgY29tbWFuZDogYW55ID0gdGhpcy5yZXRvcm5hckNhbXBvKGFjdGlvbiwgZGF0YSwgJ2NvbW1hbmQnKTtcclxuICAgICAgICBjb25zdCB2aXNpYmxlOiBib29sZWFuID0gYWN0aW9uLnZpc2libGUgPyBhY3Rpb24udmlzaWJsZShkYXRhKSA6IHRydWU7XHJcbiAgICAgICAgY29uc3QgZGlzYWJsZWQ6IGJvb2xlYW4gPSBhY3Rpb24uZGlzYWJsZWRcclxuICAgICAgICAgID8gYWN0aW9uLmRpc2FibGVkKGRhdGEpXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCBtZW51SW5zZXJ0OiBLdk1lbnVJdGVtID0ge1xyXG4gICAgICAgICAgbGFiZWwsXHJcbiAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbixcclxuICAgICAgICAgIGNvbW1hbmQsXHJcbiAgICAgICAgICBkaXNhYmxlZCxcclxuICAgICAgICAgIHZpc2libGUsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4geC5jb21tYW5kID09IG1lbnVJbnNlcnQuY29tbWFuZFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChpdGVtLmxlbmd0aCA9PSAwKSB0aGlzLm1lbnVJdGVtcy5wdXNoKG1lbnVJbnNlcnQpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQubGFiZWwgIT0gaXRlbVswXS5sYWJlbCkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LnZpc2libGUgIT0gaXRlbVswXS52aXNpYmxlKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQuZGlzYWJsZWQgIT0gaXRlbVswXS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0NoaXAocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYGNoaXAtc3R5bGUgdy1hdXRvIGJvcmRlci1yb3VuZC0yeGwgcC0yIHRleHQtJHt0aGlzLnJldG9ybmFyUm93KFxyXG4gICAgICByb3dEYXRhLFxyXG4gICAgICBjb2wsXHJcbiAgICAgICdzdHlsZWNoaXAnXHJcbiAgICApfSBib3JkZXItJHt0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3N0eWxlY2hpcCcpfWA7XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0ljb24ocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICdpY29ucm93Jyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhOiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3Rvb2x0aXBpY29ucm93Jyk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVDb2x1bW4oZmllbGQ6IHN0cmluZykge1xyXG4gICAgbGV0IGluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgbGV0IGNvbHVtbjogVGFibGVDb25maWdDb2x1bW4gfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoXHJcbiAgICAgICh4OiBUYWJsZUNvbmZpZ0NvbHVtbikgPT4geC5maWVsZCA9PSBmaWVsZFxyXG4gICAgKTtcclxuICAgIGlmIChjb2x1bW4pIHtcclxuICAgICAgaW5kZXggPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmluZGV4T2YoY29sdW1uKTtcclxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMucHVzaChjb2x1bW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkQ29sdW1uKGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGxldCBjb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKFxyXG4gICAgICAoeDogVGFibGVDb25maWdDb2x1bW4pID0+IHguZmllbGQgPT0gZmllbGRcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFjb2x1bW4pIHtcclxuICAgICAgbGV0IGRlbGV0ZWRDb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID1cclxuICAgICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMuZmluZCgoeDogVGFibGVDb25maWdDb2x1bW4pID0+IHguZmllbGQgPT0gZmllbGQpO1xyXG5cclxuICAgICAgaWYgKGRlbGV0ZWRDb2x1bW4gIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLmRlbGV0ZWRDb2x1bnMuaW5kZXhPZihkZWxldGVkQ29sdW1uKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMuc2xpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMucHVzaChkZWxldGVkQ29sdW1uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGluYW1pY0NvbHVtblNldChlOiBhbnksIGNvbDogYW55KSB7XHJcbiAgICBjb2wuY2hlY2tlZCA9IGUuY2hlY2tlZDtcclxuICAgIGlmIChlLmNoZWNrZWQpIHRoaXMuYWRkQ29sdW1uKGNvbC5maWVsZCk7XHJcbiAgICBlbHNlIHRoaXMuZGVsZXRlQ29sdW1uKGNvbC5maWVsZCk7XHJcblxyXG4gICAgaWYgKGNvbC5wb3NpdGlvbikgdGhpcy5jb25maWcuY29sdW1ucy5zb3J0KHRoaXMuc29ydEJ5UG9zaXRpb24oKSk7XHJcbiAgfVxyXG5cclxuICAvLyBhYnJpck1lbnVGaWx0cm8oZTogYW55KSB7XHJcbiAgLy8gICB0aGlzLm1lbnVGaWx0cm8gPSAhdGhpcy5tZW51RmlsdHJvO1xyXG4gIC8vICAgdGhpcy5jaGVja2JveENsaWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gICBpZiAodGhpcy50YW1hbmhvVGVsYSA8IDcwMClcclxuICAvLyAgICAgdGhpcy5zdHlsZVNldHRlcignbGVmdCcsICh0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCAtIDI4OCkgKyAncHgnKVxyXG4gIC8vICAgZWxzZVxyXG4gIC8vICAgICB0aGlzLnN0eWxlU2V0dGVyKCdsZWZ0JywgKHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgNDApICsgJ3B4JylcclxuXHJcbiAgLy8gICB0aGlzLnN0eWxlU2V0dGVyKCd0b3AnLCB0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wICsgJ3B4JylcclxuICAvLyAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCB0aGlzLm1lbnVGaWx0cm8gPyAndmlzaWJsZScgOiAnaGlkZGVuJylcclxuICAvLyB9XHJcblxyXG4gIC8vIGZlY2hhck1lbnVGaWx0cm8oKSB7XHJcbiAgLy8gICB0aGlzLm1lbnVGaWx0cm8gPSBmYWxzZTtcclxuICAvLyAgIHRoaXMuY2hlY2tib3hDbGlja2VkID0gZmFsc2U7XHJcblxyXG4gIC8vICAgdGhpcy5zdHlsZVNldHRlcigndmlzaWJpbGl0eScsICdoaWRkZW4nKVxyXG4gIC8vIH1cclxuXHJcbiAgLy8gQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxyXG4gIC8vIG9uRXNjYXBlS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgLy8gICBpZiAodGhpcy5maWx0ZXJDb2x1bW5zQnRuID09IHRydWUgJiYgdGhpcy5tZW51RmlsdHJvID09IHRydWUpIHtcclxuICAvLyAgICAgdGhpcy5mZWNoYXJNZW51RmlsdHJvKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICAvLyBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgLy8gb25DbGlja0V2ZW50KGV2ZW50OiBhbnkpIHtcclxuICAvLyAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnNCdG4gPT0gdHJ1ZSAmJiB0aGlzLm1lbnVGaWx0cm8gPT0gdHJ1ZSkge1xyXG4gIC8vICAgICBjb25zdCBjbGlja2VkRWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAvLyAgICAgY29uc3QgbWVudUZpbHRyb0RpdiA9XHJcbiAgLy8gICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI21lbnVGaWx0cm9EaXYnKTtcclxuICAvLyAgICAgY29uc3QgYm90YW9GaWx0cm8gPVxyXG4gIC8vICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNib3Rhb0ZpbHRybycpO1xyXG4gIC8vICAgICBjb25zdCBpc0NoZWNrYm94Q2xpY2tlZCA9XHJcbiAgLy8gICAgICAgY2xpY2tlZEVsZW1lbnQuY2xhc3NMaXN0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3AtY2hlY2tib3gnKSB8fFxyXG4gIC8vICAgICAgIGV2ZW50LnRhcmdldC5jbGFzc0xpc3QudG9TdHJpbmcoKSA9PSAnJztcclxuICAvLyAgICAgY29uc3QgaXNJbnNpZGVNZW51ID1cclxuICAvLyAgICAgICBtZW51RmlsdHJvRGl2Py5jb250YWlucyhjbGlja2VkRWxlbWVudCkgfHxcclxuICAvLyAgICAgICBib3Rhb0ZpbHRybz8uY29udGFpbnMoY2xpY2tlZEVsZW1lbnQpIHx8XHJcbiAgLy8gICAgICAgaXNDaGVja2JveENsaWNrZWQ7XHJcblxyXG4gIC8vICAgICBpZiAoIWlzSW5zaWRlTWVudSkgdGhpcy5mZWNoYXJNZW51RmlsdHJvKCk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBjaGVja01lbnVGaWx0cm8oY29sOiBhbnkpIHtcclxuICAgIGxldCBkZWxldGVkQ29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuZGVsZXRlZENvbHVucy5maW5kKFxyXG4gICAgICAoeDogVGFibGVDb25maWdDb2x1bW4pID0+IHguZmllbGQgPT0gY29sLmZpZWxkXHJcbiAgICApO1xyXG4gICAgaWYgKGRlbGV0ZWRDb2x1bW4pIGNvbC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICBlbHNlIGNvbC5jaGVja2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNvcnRCeVBvc2l0aW9uKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtMTogYW55LCBlbGVtMjogYW55KSB7XHJcbiAgICAgIGlmIChlbGVtMS5wb3NpdGlvbiA8IGVsZW0yLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW0xLnBvc2l0aW9uID4gZWxlbTIucG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNhbGxEaXNhYmxlZChhY3Rpb246IEt2TWVudUl0ZW0sIGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGFjdGlvbj8uZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZChkYXRhKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGlmIChjb2wuZml4ZWRDb2x1bW4pIHJldHVybiBjb2wuZml4ZWRDb2x1bW47XHJcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNoZWNrSGlkZUNvbHVtbnMoKSB7XHJcbiAgICBsZXQgaGlkZUNvbHVtbnNDb25maWcgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAoY29sKSA9PiBjb2wuaGlkZUNvbHVtbiA9PSB0cnVlXHJcbiAgICApO1xyXG4gICAgaGlkZUNvbHVtbnNDb25maWcuZm9yRWFjaCgoY29sKSA9PiB0aGlzLmRlbGV0ZUNvbHVtbihjb2wuZmllbGQpKTtcclxuICB9XHJcblxyXG4gIGdldEN1c3RvbVRlbXBsYXRlKHRlbXBsYXRlbmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW3RlbXBsYXRlbmFtZV07XHJcbiAgfVxyXG5cclxuICAvLyBzdHlsZVNldHRlcihzdHlsZTogc3RyaW5nLCBkYXRhOiBzdHJpbmcpIHtcclxuICAvLyAgIHRoaXMucmVuZGVyZXI/LnNldFN0eWxlKFxyXG4gIC8vICAgICB0aGlzLm1lbnVGaWx0cm9EaXYubmF0aXZlRWxlbWVudCxcclxuICAvLyAgICAgc3R5bGUsXHJcbiAgLy8gICAgIGRhdGFcclxuICAvLyAgICk7XHJcbiAgLy8gfVxyXG5cclxuICBmaWx0cm9zQXZhbmNhZG9zRXZlbnQoZTogYW55KSB7XHJcbiAgICB0aGlzLnNob3dGaWx0cm9zQXZhbmNhZG9zID0gIXRoaXMuc2hvd0ZpbHRyb3NBdmFuY2Fkb3M7XHJcbiAgICB0aGlzLmZpbHRyb3NBdmFuY2Fkb3NFbWl0LmVtaXQodGhpcy5zaG93RmlsdHJvc0F2YW5jYWRvcylcclxuICB9XHJcbn1cclxuIiwiPGRpdj5cclxuXHJcbiAgPHAtcGFuZWxcclxuICAgICpuZ0lmPVwiZmlsdHJvc0F2YW5jYWRvc1wiXHJcbiAgICBoZWFkZXI9XCJGaWx0cm9zIGF2YW7Dp2Fkb3NcIlxyXG4gICAgW3RvZ2dsZWFibGVdPVwidHJ1ZVwiXHJcbiAgICBbY29sbGFwc2VkXT1cInRydWVcIlxyXG4gICAgY29sbGFwc2VkSWNvbj1cInBpIHBpLWZpbHRlclwiXHJcbiAgICBzdHlsZUNsYXNzPVwiYmctZ3JheS0yMDBcIlxyXG4gICAgW3N0eWxlXT1cInsnbWFyZ2luLWJvdHRvbSc6ICcycHgnfVwiXHJcbiAgPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvcC1wYW5lbD5cclxuXHJcblxyXG4gIDxwLXRhYmxlXHJcbiAgICAqbmdJZj1cImNvbmZpZ1wiXHJcbiAgICAjZHRcclxuICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zbVwiXHJcbiAgICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgICBbcm93U2VsZWN0YWJsZV09XCJpc1Jvd1NlbGVjdGFibGVcIlxyXG4gICAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxyXG4gICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxyXG4gICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXHJcbiAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlT3B0aW9uc1wiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIntmaXJzdH0gLSB7bGFzdH0gZGUge3t0b3RhbFJlY29yZHN9fVwiXHJcbiAgICBbcm93SG92ZXJdPVwidHJ1ZVwiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICBbbGF6eV09XCJjb25maWcubGF6eVwiXHJcbiAgICAob25MYXp5TG9hZCk9XCJwYWdpbmF0ZSgkZXZlbnQpXCJcclxuICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgcm93R3JvdXBNb2RlPVwicm93c3BhblwiXHJcbiAgICBbZ3JvdXBSb3dzQnldPVwiY29uZmlnLmZpZWxkR3JvdXBcIlxyXG4gICAgW3Nob3dGaXJzdExhc3RJY29uXT1cInNob3dGaXJzdExhc3RJY29uXCJcclxuICAgIFtwYWdlTGlua3NdPVwicGFnZUxpbmtzT3B0aW9uc1wiXHJcbiAgICBbcmVzcG9uc2l2ZV09XCJ0cnVlXCJcclxuICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzdGFja1wiXHJcbiAgPlxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIHBUZW1wbGF0ZT1cImNhcHRpb25cIlxyXG4gICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVDYXRpb25cIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTJcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLnRpdGxlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW1kIGZvbnQtYm9sZCBteS0zXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuc3VidGl0bGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc20gbWItNCBmb250LW1lZGl1bVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbmZpZy5zdWJ0aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBtZDpjb2wtNiBsZzpjb2wtNCB7e3RhbWFuaG9UZWxhIDwgNzY4ID8gJ2NvbC0xMCcgOiAnY29sLTEyJ319XCI+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVGaWx0ZXJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJsb2NrIG10LTIgbWQ6bXQtMCBwLWlucHV0LWljb24tbGVmdCB0ZXh0LWFsaWduLWNlbnRlclwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tc2VhcmNoXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9ja1wiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBzZWFyY2hcclxuICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxyXG4gICAgICAgICAgICAgIHBBdXRvRm9jdXNcclxuICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIoZHQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVzcXVpc2FyLi4uXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBtYi0xXCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogNDBweFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgI2JvdGFvRmlsdHJvXHJcbiAgICAgICAgICAgICpuZ0lmPVwiZmlsdHJvc0F2YW5jYWRvc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcmFpc2VkIHAtYnV0dG9uLXRleHQgYWN0aW9uTG90ZUJ0bnNcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZmlsdHJvc0F2YW5jYWRvc0V2ZW50KHNob3dGaWx0cm9zQXZhbmNhZG9zKVwiXHJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCInRmlsdHJvcyBhdmFuw6dhZG9zJ1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtZC0yMlwiPiBmaWx0ZXJfYWx0IDwvc3Bhbj5cclxuICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuXHJcbiAgICAgICAgICA8IS0tIDxkaXZcclxuICAgICAgICAgICNtZW51RmlsdHJvRGl2XHJcbiAgICAgICAgICBpZCA9IFwibWVudUZpbHRyb0RpdlwiXHJcbiAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCInaGlkZGVuJ1wiXHJcbiAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHotNCBiZy1ncmF5LTIwMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KCRldmVudClcIlxyXG4gICAgICAgID4gLS0+XHJcblxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAjbWVudUZpbHRyb0RpdlxyXG4gICAgICAgICAgICBpZD1cIm1lbnVGaWx0cm9EaXZcIlxyXG4gICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCInaGlkZGVuJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei00IGJnLWdyYXktMjAwIG1lbnUtY29sdW1ucy1maWx0cm9cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8cC1jYXJkPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiB0ZXh0LW1lZGl1bSB3LTE1cmVtXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgY2hlY2tNZW51RmlsdHJvKGNvbCkgfX1cclxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICNmaWx0ZXJDb2x1bW5zXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2wuaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiZGluYW1pY0NvbHVtblNldCgkZXZlbnQsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGluYW1pY0Rpc2FibGVDb2x1bW4oY29sKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3AtY2FyZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBjb2wtMSBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG5zLW9wdGlvbnNcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25Mb3RlQnRuc1wiXHJcbiAgICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiYgZXhpYmlyQ2FtcG8oYWN0aW9uLCB0aGlzLmFjdGlvbilcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uTG90ZUJ0bnMgcC1idXR0b24tcmFpc2VkIHAtYnV0dG9uLXRleHRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3Rpb24/LmNvbW1hbmQoKTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ3Rvb2x0aXAnKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ2J0bkNvbG9yJylcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ2Rpc2FibGVkJylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtZC0yMlwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnaWNvbkJ0bkNvbG9yJylcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsIFwiaWNvblwiKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiaGVhZGVyXCJcclxuICAgICAgbGV0LWNvbHVtbnNcclxuICAgID5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbTsgYm9yZGVyLWxlZnQ6IHNvbGlkIDRweCB0cmFuc3BhcmVudFwiXHJcbiAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVTZWxlY3RcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCI+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XHJcbiAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxyXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aFwiXHJcbiAgICAgICAgICBjbGFzcz1cInRleHQtc21cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW2NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICYmIGFsaWduQ29sdW5hc0hlYWRlcihjb2wpID09ICcnXHJcbiAgICAgICAgICAgICAgICA/ICdmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICA6ICdmbGV4IGZsZXgtcm93J1xyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbc3R5bGVdPVwiYWxpZ25Db2x1bmFzSGVhZGVyKGNvbClcIlxyXG4gICAgICAgICAgPlxyXG5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxwLXNvcnRJY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuc29ydGFibGUgPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4XCJcclxuICAgICAgICAgICAgPjwvcC1zb3J0SWNvbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICA+aW5mbzwvc3Bhbj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0aCAqbmdJZj1cImNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDBcIj48L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiYm9keVwiXHJcbiAgICAgIGxldC1yb3dEYXRhXHJcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICAgIGxldC1yb3dncm91cD1cInJvd2dyb3VwXCJcclxuICAgICAgbGV0LXJvd3NwYW49XCJyb3dzcGFuXCJcclxuICAgID5cclxuICAgICAgPHRyIChkYmxjbGljayk9XCJkb3VibGVDbGljaygkZXZlbnQsIHJvd0RhdGEpXCI+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVTZWxlY3RcIlxyXG4gICAgICAgICAgW3N0eWxlXT1cImFwcGx5U3R5bGUocm93RGF0YSwgeyBmaWVsZDogJ2NoZWNrLWJveCcsIGhlYWRlcjogJycgfSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDwhLS08cC10YWJsZUNoZWNrYm94ICpuZ0lmPVwiaXNWaXNpYmxlQ2hlY2tib3gocm93RGF0YSlcIi0tPlxyXG4gICAgICAgICAgPHAtdGFibGVDaGVja2JveFxyXG4gICAgICAgICAgICBbdmFsdWVdPVwicm93RGF0YVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxyXG4gICAgICAgICAgPjwvcC10YWJsZUNoZWNrYm94PlxyXG4gICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgKm5nSWY9XCJyb3dncm91cCAmJiAhY29sLnRlbXBsYXRlXCJcclxuICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJyb3dncm91cCAmJiBjb2wuZ3JvdXBlZCA/IHJvd3NwYW4gOiBudWxsXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJcclxuICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcclxuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIlxyXG4gICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICA+e3tcclxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0ltYWdlRmllbGQoY29sKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbC5pY29uRmllbGRcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1pY29ucyc6IGNvbC5pbmRJY29uTWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtci0yJzogIWNvbC5pbmRJY29uTWF0ZXJpYWxcclxuICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sLmljb25GaWVsZFwiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdID8gJ3RleHQtZ3JlZW4tNTAwJyA6ICd0ZXh0LXJlZC01MDAnXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgKm5nSWY9XCIhcm93Z3JvdXAgJiYgIWNvbC5ncm91cGVkICYmICFjb2wudGVtcGxhdGVcIlxyXG4gICAgICAgICAgICBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jb2x1bW4tdGl0bGVcIj57eyBjb2wuaGVhZGVyIH19Ojwvc3Bhbj5cclxuXHJcblxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIlxyXG4gICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5pY29uRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICpuZ0lmPVwiY29sLnRlbXBsYXRlXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xyXG4gICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvd0RhdGEgfVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgICBbc3R5bGVdPVwiYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnYnRucy1vcHRpb25zJywgaGVhZGVyOiAnJyB9KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGwgZ2FwLTFcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImFjb2VzTGluaGFUYWJlbGFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBpZD1cImFjdGlvbkJ0bnNcIlxyXG4gICAgICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJleGliaXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbShyb3dEYXRhKTsgYWN0aW9uPy5jb21tYW5kKClcIlxyXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCByb3dEYXRhLCAndG9vbHRpcCcpXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA/IGFjdGlvbi50b29sdGlwUG9zaXRpb24gOiAnYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtZC0xOVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgXCJpY29uXCIpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGlkPVwibW9yZVZlcnRCdG5cIlxyXG4gICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDIwcHhcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIG1vcmVfaG9yaXpcclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSkgfX1cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgPHAtbWVudVxyXG4gICAgICAgICAgICAgICNtZW51XHJcbiAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFttb2RlbF09XCJtZW51SXRlbXNcIlxyXG4gICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgID48L3AtbWVudT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIlxyXG4gICAgICBsZXQtY29sdW1uc1xyXG4gICAgPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRkXHJcbiAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnMubGVuZ3RoICsgMlwiXHJcbiAgICAgICAgICBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlclwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgTmVuaHVtIHJlZ2lzdHJvIGVuY29udHJhZG9cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbjwvZGl2PlxyXG5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9pY29uP2ZhbWlseT1NYXRlcmlhbCtJY29uc1wiXHJcbi8+XHJcblxyXG48bGlua1xyXG4gIHJlbD1cInN0eWxlc2hlZXRcIlxyXG4gIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU1hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREA0OCw0MDAsMCwwXCJcclxuLz4iXX0=