nuxeo-development-framework 5.3.6 → 5.3.8

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 (364) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +826 -366
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/ndf-config-editor/containers/monaco-editor.component.js +1 -2
  4. package/esm2015/lib/components/ndf-filters/base/base-aggregation-field.component.js +91 -0
  5. package/esm2015/lib/components/ndf-filters/base/base-checkbox-radio.component.js +66 -0
  6. package/esm2015/lib/components/ndf-filters/base/base-custom-field.component.js +46 -0
  7. package/esm2015/lib/components/ndf-filters/base/base-predicate-field.component.js +43 -0
  8. package/esm2015/lib/components/ndf-filters/base/base-value-accessor.component.js +34 -0
  9. package/esm2015/lib/components/ndf-filters/base/index.js +6 -0
  10. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/field-header.component.js +1 -1
  11. package/esm2015/lib/components/ndf-filters/components/__parts/filter-autocomplete-input/filter-autocomplete-input.component.js +97 -0
  12. package/esm2015/lib/components/ndf-filters/components/__parts/filter-autocomplete-input/filter-autocomplete.service.js +43 -0
  13. package/esm2015/lib/components/ndf-filters/components/__parts/filter-collapse-control/filter-collapse-control.component.js +44 -0
  14. package/esm2015/lib/components/ndf-filters/components/__parts/filter-date-range/filter-date-range.component.js +89 -0
  15. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-empty-message.component.js +1 -1
  16. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-option-text/filter-option-text.component.js +1 -1
  17. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-options-sort/filter-options-sort.component.js +1 -1
  18. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-search-input/filter-search-input.component.js +1 -1
  19. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/html-dialog/html-dialog.component.js +2 -2
  20. package/esm2015/lib/components/ndf-filters/components/__parts/index.js +10 -0
  21. package/esm2015/lib/components/ndf-filters/components/aggregation-autocomplete/aggregation-autocomplete.component.js +109 -0
  22. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-checkbox/aggregation-checkbox.component.js +1 -1
  23. package/esm2015/lib/components/ndf-filters/components/aggregation-custom/aggregation-custom.component.js +66 -0
  24. package/esm2015/lib/components/ndf-filters/components/aggregation-date-list/aggregation-date-list.component.js +219 -0
  25. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-radio/aggregation-radio.component.js +1 -1
  26. package/esm2015/lib/components/ndf-filters/components/aggregation-select/aggregation-select.component.js +83 -0
  27. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-switch/aggregation-switch.component.js +1 -1
  28. package/esm2015/lib/components/ndf-filters/components/index.js +11 -0
  29. package/esm2015/lib/components/ndf-filters/components/predicate-date-input/predicate-date-input.component.js +146 -0
  30. package/esm2015/lib/components/ndf-filters/components/predicate-text-input/predicate-text-input.component.js +144 -0
  31. package/esm2015/lib/components/ndf-filters/constants/common.js +4 -0
  32. package/esm2015/lib/components/ndf-filters/constants/field.js +6 -0
  33. package/esm2015/lib/components/ndf-filters/constants/index.js +5 -0
  34. package/esm2015/lib/components/ndf-filters/constants/operators.js +18 -0
  35. package/esm2015/lib/components/ndf-filters/constants/sort.js +23 -0
  36. package/esm2015/lib/components/ndf-filters/constants/type.js +26 -0
  37. package/esm2015/lib/components/ndf-filters/containers/aggregation-field/aggregation-field.component.js +78 -0
  38. package/esm2015/lib/components/ndf-filters/containers/base-field.js +62 -0
  39. package/esm2015/lib/components/ndf-filters/containers/custom-field/custom-field.component.js +73 -0
  40. package/esm2015/lib/components/ndf-filters/containers/filters-panel/base-filters-panel.js +55 -0
  41. package/esm2015/lib/components/ndf-filters/containers/filters-panel/filters-panel.component.js +127 -0
  42. package/esm2015/lib/components/ndf-filters/containers/index.js +5 -0
  43. package/esm2015/lib/components/ndf-filters/containers/predicate-field/predicate-field.component.js +71 -0
  44. package/esm2015/lib/components/ndf-filters/custom-components/active-user-switch/active-user-switch.component.js +55 -0
  45. package/esm2015/lib/components/ndf-filters/custom-components/active-user-switch/active-user.service.js +17 -0
  46. package/esm2015/lib/components/ndf-filters/custom-components/active-user-switch/user-types.js +2 -0
  47. package/esm2015/lib/components/ndf-filters/custom-components/index.js +2 -0
  48. package/esm2015/lib/components/ndf-filters/directives/autocomplete-template.directive.js +28 -0
  49. package/esm2015/lib/components/ndf-filters/directives/checkbox-template.directive.js +28 -0
  50. package/esm2015/lib/components/ndf-filters/directives/custom-template.directive.js +28 -0
  51. package/esm2015/lib/components/ndf-filters/directives/date-template.directive.js +28 -0
  52. package/esm2015/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/dropdown-label-template.directive.js +1 -1
  53. package/esm2015/lib/components/ndf-filters/directives/dropdown-template.directive.js +28 -0
  54. package/esm2015/lib/components/ndf-filters/directives/index.js +9 -0
  55. package/esm2015/lib/components/ndf-filters/directives/radio-template.directive.js +28 -0
  56. package/esm2015/lib/components/ndf-filters/directives/switch-template.directive.js +28 -0
  57. package/esm2015/lib/components/ndf-filters/index.js +2 -0
  58. package/esm2015/lib/components/ndf-filters/models/aggregation-field-config.js +2 -0
  59. package/esm2015/lib/components/ndf-filters/models/aggregation-response.model.js +2 -0
  60. package/esm2015/lib/components/ndf-filters/models/base-field-config.js +2 -0
  61. package/esm2015/lib/components/ndf-filters/models/common.js +2 -0
  62. package/esm2015/lib/components/ndf-filters/models/custom-field-config.js +2 -0
  63. package/esm2015/lib/components/ndf-filters/models/field-config.model.js +2 -0
  64. package/esm2015/lib/components/ndf-filters/models/field-options/autocomplete-options.js +2 -0
  65. package/esm2015/lib/components/ndf-filters/models/field-options/checkbox-options.js +2 -0
  66. package/esm2015/lib/components/ndf-filters/models/field-options/common-utils.js +2 -0
  67. package/esm2015/lib/components/ndf-filters/models/field-options/custom-fields-options.js +2 -0
  68. package/esm2015/lib/components/ndf-filters/models/field-options/custom-options.js +2 -0
  69. package/esm2015/lib/components/ndf-filters/models/field-options/date-list-options.js +2 -0
  70. package/esm2015/lib/components/ndf-filters/models/field-options/date-options.js +2 -0
  71. package/esm2015/lib/components/ndf-filters/models/field-options/dropdown-options.js +2 -0
  72. package/esm2015/lib/components/ndf-filters/models/field-options/index.js +12 -0
  73. package/esm2015/lib/components/ndf-filters/models/field-options/input-options.js +2 -0
  74. package/esm2015/lib/components/ndf-filters/models/field-options/radio-options.js +2 -0
  75. package/esm2015/lib/components/ndf-filters/models/field-options/switch-options.js +2 -0
  76. package/esm2015/lib/components/ndf-filters/models/filter-option.model.js +2 -0
  77. package/esm2015/lib/components/ndf-filters/models/form-query-request.js +2 -0
  78. package/esm2015/lib/components/ndf-filters/models/index.js +14 -0
  79. package/esm2015/lib/components/ndf-filters/models/operator-value-object.js +2 -0
  80. package/esm2015/lib/components/ndf-filters/models/predicate-field-config.js +2 -0
  81. package/esm2015/lib/components/ndf-filters/models/types-helper.js +2 -0
  82. package/esm2015/lib/components/ndf-filters/models/value-object.model.js +12 -0
  83. package/esm2015/lib/components/ndf-filters/ndf-filters-panel.module.js +207 -0
  84. package/esm2015/lib/components/ndf-filters/pipes/autocomplete-filter.pipe.js +27 -0
  85. package/esm2015/lib/components/ndf-filters/pipes/check-condition.pipe.js +32 -0
  86. package/esm2015/lib/components/ndf-filters/pipes/filter.pipe.js +27 -0
  87. package/esm2015/lib/components/ndf-filters/pipes/hash-translate.pipe.js +52 -0
  88. package/esm2015/lib/components/ndf-filters/pipes/index.js +10 -0
  89. package/esm2015/lib/components/ndf-filters/pipes/localized-label.pipe.js +28 -0
  90. package/esm2015/lib/components/ndf-filters/pipes/roles-filters.pipe.js +31 -0
  91. package/esm2015/lib/components/ndf-filters/pipes/sanitizer.pipe.js +34 -0
  92. package/esm2015/lib/components/ndf-filters/pipes/sort.pipe.js +40 -0
  93. package/esm2015/lib/components/ndf-filters/pipes/tooltip.pipe.js +69 -0
  94. package/esm2015/lib/components/ndf-filters/public-api.js +12 -0
  95. package/esm2015/lib/components/ndf-filters/services/aggregation-field.service.js +105 -0
  96. package/esm2015/lib/components/ndf-filters/services/dynamic-component-loader.service.js +59 -0
  97. package/esm2015/lib/components/ndf-filters/services/filters-mapper.service.js +60 -0
  98. package/esm2015/lib/components/ndf-filters/services/filters-query.service.js +117 -0
  99. package/esm2015/lib/components/ndf-filters/services/index.js +5 -0
  100. package/esm2015/lib/components/ndf-filters/utility/index.js +4 -0
  101. package/esm2015/lib/components/ndf-filters/utility/nxql-query.js +53 -0
  102. package/esm2015/lib/components/ndf-filters/utility/nxql.js +47 -0
  103. package/esm2015/lib/components/ndf-filters/utility/object.js +42 -0
  104. package/esm2015/lib/components/ndf-tabs/tab.type.js +1 -1
  105. package/esm2015/lib/components/reports/chart-panel.js +76 -0
  106. package/esm2015/lib/components/reports/index.js +2 -1
  107. package/esm2015/lib/components/reports/ndf-reports/components/_parts/chart-type-selector/chart-type-selector.component.js +23 -9
  108. package/esm2015/lib/components/reports/ndf-reports/components/_parts/graph-dialog/graph-dialog.component.js +1 -1
  109. package/esm2015/lib/components/reports/ndf-reports/components/_parts/index.js +2 -1
  110. package/esm2015/lib/components/reports/ndf-reports/components/_parts/report-actions/report-actions.component.js +45 -0
  111. package/esm2015/lib/components/reports/ndf-reports/components/digit-report/digit-report.component.js +5 -6
  112. package/esm2015/lib/components/reports/ndf-reports/components/dynamic-timeline-report/dynamic-timeline-report.component.js +2 -2
  113. package/esm2015/lib/components/reports/ndf-reports/components/graph-report/graph-report.component.js +8 -7
  114. package/esm2015/lib/components/reports/ndf-reports/components/index.js +1 -2
  115. package/esm2015/lib/components/reports/ndf-reports/containers/ndf-reports/ndf-reports.component.js +3 -3
  116. package/esm2015/lib/components/reports/ndf-reports/models/common.js +1 -1
  117. package/esm2015/lib/components/reports/ndf-reports/models/graph.js +1 -1
  118. package/esm2015/lib/components/reports/ndf-reports/models/ndf-reports.config.js +1 -1
  119. package/esm2015/lib/components/reports/ndf-reports/ndf-reports.module.js +17 -12
  120. package/esm2015/lib/components/reports/ndf-reports/services/report-config-mapper.service.js +1 -1
  121. package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +1 -1
  122. package/esm2015/lib/components/tables/ndf-table/components/text-search/text-search.component.js +2 -2
  123. package/esm2015/lib/components/tables/ndf-table/containers/ndf-table/ndf-table.component.js +26 -25
  124. package/esm2015/lib/components/tables/ndf-table/models/payload-types.js +1 -1
  125. package/esm2015/lib/components/tables/ndf-table/models/search.config.js +1 -1
  126. package/esm2015/lib/components/tables/ndf-table/models/table-mode.js +1 -1
  127. package/esm2015/lib/components/tables/ndf-table/models/table-options.js +1 -1
  128. package/esm2015/lib/components/tables/ndf-table/models/types.js +1 -1
  129. package/esm2015/lib/components/tables/ndf-table/ndf-table.module.js +5 -5
  130. package/esm2015/lib/components/tables/ndf-table/public-api.js +1 -2
  131. package/esm2015/lib/components/tables/ndf-table/services/index.js +1 -2
  132. package/esm2015/lib/shared/evaluator/evaluator.js +317 -0
  133. package/esm2015/lib/shared/evaluator/index.js +2 -0
  134. package/esm2015/lib/shared/evaluator/types.js +2 -0
  135. package/esm2015/lib/shared/models/index.js +2 -1
  136. package/esm2015/lib/shared/models/type-helpers.js +2 -0
  137. package/esm2015/public-api.js +3 -1
  138. package/fesm2015/nuxeo-development-framework.js +643 -229
  139. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  140. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/base/base-aggregation-field.component.d.ts +1 -1
  141. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/base/base-value-accessor.component.d.ts +1 -1
  142. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-autocomplete-input/filter-autocomplete-input.component.d.ts +1 -1
  143. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-autocomplete-input/filter-autocomplete.service.d.ts +3 -2
  144. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-date-range/filter-date-range.component.d.ts +1 -1
  145. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/html-dialog/html-dialog.component.d.ts +2 -1
  146. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/containers/filters-panel/base-filters-panel.d.ts +1 -1
  147. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/containers/filters-panel/filters-panel.component.d.ts +1 -0
  148. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/custom-components/active-user-switch/active-user.service.d.ts +1 -1
  149. package/lib/components/ndf-filters/index.d.ts +1 -0
  150. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/aggregation-field-config.d.ts +2 -1
  151. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/base-field-config.d.ts +3 -1
  152. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/custom-field-config.d.ts +2 -1
  153. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/autocomplete-options.d.ts +1 -1
  154. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/checkbox-options.d.ts +1 -1
  155. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/common-utils.d.ts +2 -1
  156. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/custom-fields-options.d.ts +1 -1
  157. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/date-list-options.d.ts +1 -1
  158. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/date-options.d.ts +1 -1
  159. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/dropdown-options.d.ts +1 -1
  160. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/input-options.d.ts +1 -1
  161. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/radio-options.d.ts +1 -1
  162. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/switch-options.d.ts +1 -1
  163. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/filter-option.model.d.ts +1 -1
  164. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/index.d.ts +1 -0
  165. package/lib/components/ndf-filters/models/operator-value-object.d.ts +6 -0
  166. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/predicate-field-config.d.ts +2 -1
  167. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/types-helper.d.ts +0 -11
  168. package/lib/components/ndf-filters/ndf-filters-panel.module.d.ts +66 -0
  169. package/lib/components/ndf-filters/pipes/check-condition.pipe.d.ts +12 -0
  170. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/pipes/index.d.ts +1 -0
  171. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/pipes/roles-filters.pipe.d.ts +1 -1
  172. package/lib/components/{tables/ndf-table/filters-panel/index.d.ts → ndf-filters/public-api.d.ts} +2 -1
  173. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/services/aggregation-field.service.d.ts +1 -1
  174. package/lib/components/{tables/ndf-table → ndf-filters}/services/filters-mapper.service.d.ts +1 -1
  175. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/services/index.d.ts +1 -0
  176. package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/utility/index.d.ts +1 -0
  177. package/lib/components/{tables/ndf-table/utils → ndf-filters/utility}/nxql-query.d.ts +4 -3
  178. package/lib/components/ndf-tabs/tab.type.d.ts +1 -1
  179. package/lib/components/reports/chart-panel.d.ts +19 -0
  180. package/lib/components/reports/index.d.ts +1 -0
  181. package/lib/components/reports/ndf-reports/base/base-report.d.ts +3 -3
  182. package/lib/components/reports/ndf-reports/components/_parts/chart-type-selector/chart-type-selector.component.d.ts +5 -2
  183. package/lib/components/reports/ndf-reports/components/_parts/index.d.ts +1 -0
  184. package/lib/components/reports/ndf-reports/components/_parts/report-actions/report-actions.component.d.ts +17 -0
  185. package/lib/components/reports/ndf-reports/components/index.d.ts +0 -1
  186. package/lib/components/reports/ndf-reports/containers/ndf-report/ndf-report.component.d.ts +1 -1
  187. package/lib/components/reports/ndf-reports/containers/ndf-reports/ndf-reports.component.d.ts +3 -2
  188. package/lib/components/reports/ndf-reports/models/common.d.ts +2 -2
  189. package/lib/components/reports/ndf-reports/models/graph.d.ts +9 -0
  190. package/lib/components/reports/ndf-reports/models/ndf-reports.config.d.ts +1 -1
  191. package/lib/components/reports/ndf-reports/ndf-reports.module.d.ts +7 -6
  192. package/lib/components/reports/ndf-reports/services/dynamic-timeline-report.service.d.ts +1 -1
  193. package/lib/components/tables/ndf-table/components/text-search/text-search.component.d.ts +1 -1
  194. package/lib/components/tables/ndf-table/containers/ndf-table/ndf-table.component.d.ts +3 -2
  195. package/lib/components/tables/ndf-table/models/payload-types.d.ts +0 -6
  196. package/lib/components/tables/ndf-table/models/search.config.d.ts +1 -1
  197. package/lib/components/tables/ndf-table/models/table-mode.d.ts +1 -1
  198. package/lib/components/tables/ndf-table/models/table-options.d.ts +1 -1
  199. package/lib/components/tables/ndf-table/models/types.d.ts +1 -1
  200. package/lib/components/tables/ndf-table/ndf-table.module.d.ts +2 -2
  201. package/lib/components/tables/ndf-table/public-api.d.ts +0 -1
  202. package/lib/components/tables/ndf-table/services/index.d.ts +0 -1
  203. package/lib/shared/evaluator/evaluator.d.ts +79 -0
  204. package/lib/shared/evaluator/index.d.ts +1 -0
  205. package/lib/shared/evaluator/types.d.ts +14 -0
  206. package/lib/shared/models/index.d.ts +1 -0
  207. package/lib/shared/models/type-helpers.d.ts +11 -0
  208. package/package.json +3 -2
  209. package/public-api.d.ts +2 -0
  210. package/src/docs/ndf-table.doc.md +281 -209
  211. package/esm2015/lib/components/reports/ndf-reports/components/chart-panel.component.js +0 -61
  212. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-aggregation-field.component.js +0 -91
  213. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-checkbox-radio.component.js +0 -66
  214. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-custom-field.component.js +0 -46
  215. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-predicate-field.component.js +0 -43
  216. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/base-value-accessor.component.js +0 -34
  217. package/esm2015/lib/components/tables/ndf-table/filters-panel/base/index.js +0 -6
  218. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-autocomplete-input/filter-autocomplete-input.component.js +0 -97
  219. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-autocomplete-input/filter-autocomplete.service.js +0 -43
  220. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-collapse-control/filter-collapse-control.component.js +0 -44
  221. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/filter-date-range/filter-date-range.component.js +0 -89
  222. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/__parts/index.js +0 -10
  223. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-autocomplete/aggregation-autocomplete.component.js +0 -109
  224. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-custom/aggregation-custom.component.js +0 -66
  225. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-date-list/aggregation-date-list.component.js +0 -219
  226. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/aggregation-select/aggregation-select.component.js +0 -83
  227. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/index.js +0 -11
  228. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/predicate-date-input/predicate-date-input.component.js +0 -146
  229. package/esm2015/lib/components/tables/ndf-table/filters-panel/components/predicate-text-input/predicate-text-input.component.js +0 -144
  230. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/common.js +0 -4
  231. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/field.js +0 -6
  232. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/index.js +0 -5
  233. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/operators.js +0 -18
  234. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/sort.js +0 -23
  235. package/esm2015/lib/components/tables/ndf-table/filters-panel/constants/type.js +0 -26
  236. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/aggregation-field/aggregation-field.component.js +0 -78
  237. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/base-field.js +0 -62
  238. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/custom-field/custom-field.component.js +0 -73
  239. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/filters-panel/base-filters-panel.js +0 -55
  240. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/filters-panel/filters-panel.component.js +0 -122
  241. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/index.js +0 -5
  242. package/esm2015/lib/components/tables/ndf-table/filters-panel/containers/predicate-field/predicate-field.component.js +0 -71
  243. package/esm2015/lib/components/tables/ndf-table/filters-panel/custom-components/active-user-switch/active-user-switch.component.js +0 -55
  244. package/esm2015/lib/components/tables/ndf-table/filters-panel/custom-components/active-user-switch/active-user.service.js +0 -17
  245. package/esm2015/lib/components/tables/ndf-table/filters-panel/custom-components/active-user-switch/user-types.js +0 -2
  246. package/esm2015/lib/components/tables/ndf-table/filters-panel/custom-components/index.js +0 -2
  247. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/autocomplete-template.directive.js +0 -28
  248. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/checkbox-template.directive.js +0 -28
  249. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/custom-template.directive.js +0 -28
  250. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/date-template.directive.js +0 -28
  251. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/dropdown-template.directive.js +0 -28
  252. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/index.js +0 -9
  253. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/radio-template.directive.js +0 -28
  254. package/esm2015/lib/components/tables/ndf-table/filters-panel/directives/switch-template.directive.js +0 -28
  255. package/esm2015/lib/components/tables/ndf-table/filters-panel/filters-panel.module.js +0 -205
  256. package/esm2015/lib/components/tables/ndf-table/filters-panel/index.js +0 -11
  257. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/aggregation-field-config.js +0 -2
  258. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/aggregation-response.model.js +0 -2
  259. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/base-field-config.js +0 -2
  260. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/common.js +0 -2
  261. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/custom-field-config.js +0 -2
  262. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-config.model.js +0 -2
  263. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/autocomplete-options.js +0 -2
  264. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/checkbox-options.js +0 -2
  265. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/common-utils.js +0 -2
  266. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/custom-fields-options.js +0 -2
  267. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/custom-options.js +0 -2
  268. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/date-list-options.js +0 -2
  269. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/date-options.js +0 -2
  270. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/dropdown-options.js +0 -2
  271. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/index.js +0 -12
  272. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/input-options.js +0 -2
  273. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/radio-options.js +0 -2
  274. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/field-options/switch-options.js +0 -2
  275. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/filter-option.model.js +0 -2
  276. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/form-query-request.js +0 -2
  277. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/index.js +0 -13
  278. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/predicate-field-config.js +0 -2
  279. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/types-helper.js +0 -2
  280. package/esm2015/lib/components/tables/ndf-table/filters-panel/models/value-object.model.js +0 -12
  281. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/autocomplete-filter.pipe.js +0 -27
  282. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/filter.pipe.js +0 -27
  283. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/hash-translate.pipe.js +0 -52
  284. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/index.js +0 -9
  285. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/localized-label.pipe.js +0 -28
  286. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/roles-filters.pipe.js +0 -31
  287. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/sanitizer.pipe.js +0 -34
  288. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/sort.pipe.js +0 -40
  289. package/esm2015/lib/components/tables/ndf-table/filters-panel/pipes/tooltip.pipe.js +0 -69
  290. package/esm2015/lib/components/tables/ndf-table/filters-panel/services/aggregation-field.service.js +0 -105
  291. package/esm2015/lib/components/tables/ndf-table/filters-panel/services/dynamic-component-loader.service.js +0 -59
  292. package/esm2015/lib/components/tables/ndf-table/filters-panel/services/filters-query.service.js +0 -117
  293. package/esm2015/lib/components/tables/ndf-table/filters-panel/services/index.js +0 -4
  294. package/esm2015/lib/components/tables/ndf-table/filters-panel/utility/index.js +0 -3
  295. package/esm2015/lib/components/tables/ndf-table/filters-panel/utility/nxql.js +0 -47
  296. package/esm2015/lib/components/tables/ndf-table/filters-panel/utility/object.js +0 -42
  297. package/esm2015/lib/components/tables/ndf-table/services/filters-mapper.service.js +0 -60
  298. package/esm2015/lib/components/tables/ndf-table/utils/index.js +0 -2
  299. package/esm2015/lib/components/tables/ndf-table/utils/nxql-query.js +0 -52
  300. package/lib/components/reports/ndf-reports/components/chart-panel.component.d.ts +0 -13
  301. package/lib/components/tables/ndf-table/filters-panel/filters-panel.module.d.ts +0 -65
  302. package/lib/components/tables/ndf-table/utils/index.d.ts +0 -1
  303. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/base/base-checkbox-radio.component.d.ts +0 -0
  304. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/base/base-custom-field.component.d.ts +0 -0
  305. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/base/base-predicate-field.component.d.ts +0 -0
  306. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/base/index.d.ts +0 -0
  307. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/field-header.component.d.ts +0 -0
  308. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-collapse-control/filter-collapse-control.component.d.ts +0 -0
  309. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-empty-message.component.d.ts +0 -0
  310. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-option-text/filter-option-text.component.d.ts +0 -0
  311. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-options-sort/filter-options-sort.component.d.ts +0 -0
  312. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/filter-search-input/filter-search-input.component.d.ts +0 -0
  313. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/__parts/index.d.ts +0 -0
  314. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-autocomplete/aggregation-autocomplete.component.d.ts +0 -0
  315. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-checkbox/aggregation-checkbox.component.d.ts +0 -0
  316. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-custom/aggregation-custom.component.d.ts +0 -0
  317. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-date-list/aggregation-date-list.component.d.ts +0 -0
  318. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-radio/aggregation-radio.component.d.ts +0 -0
  319. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-select/aggregation-select.component.d.ts +0 -0
  320. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/aggregation-switch/aggregation-switch.component.d.ts +0 -0
  321. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/index.d.ts +0 -0
  322. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/predicate-date-input/predicate-date-input.component.d.ts +0 -0
  323. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/components/predicate-text-input/predicate-text-input.component.d.ts +0 -0
  324. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/constants/common.d.ts +0 -0
  325. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/constants/field.d.ts +0 -0
  326. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/constants/index.d.ts +0 -0
  327. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/constants/operators.d.ts +0 -0
  328. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/constants/sort.d.ts +0 -0
  329. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/constants/type.d.ts +0 -0
  330. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/containers/aggregation-field/aggregation-field.component.d.ts +0 -0
  331. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/containers/base-field.d.ts +0 -0
  332. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/containers/custom-field/custom-field.component.d.ts +0 -0
  333. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/containers/index.d.ts +0 -0
  334. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/containers/predicate-field/predicate-field.component.d.ts +0 -0
  335. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/custom-components/active-user-switch/active-user-switch.component.d.ts +0 -0
  336. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/custom-components/active-user-switch/user-types.d.ts +0 -0
  337. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/custom-components/index.d.ts +0 -0
  338. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/autocomplete-template.directive.d.ts +0 -0
  339. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/checkbox-template.directive.d.ts +0 -0
  340. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/custom-template.directive.d.ts +0 -0
  341. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/date-template.directive.d.ts +0 -0
  342. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/dropdown-label-template.directive.d.ts +0 -0
  343. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/dropdown-template.directive.d.ts +0 -0
  344. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/index.d.ts +0 -0
  345. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/radio-template.directive.d.ts +0 -0
  346. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/directives/switch-template.directive.d.ts +0 -0
  347. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/aggregation-response.model.d.ts +0 -0
  348. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/common.d.ts +0 -0
  349. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-config.model.d.ts +0 -0
  350. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/custom-options.d.ts +0 -0
  351. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/field-options/index.d.ts +0 -0
  352. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/form-query-request.d.ts +0 -0
  353. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/models/value-object.model.d.ts +0 -0
  354. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/pipes/autocomplete-filter.pipe.d.ts +0 -0
  355. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/pipes/filter.pipe.d.ts +0 -0
  356. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/pipes/hash-translate.pipe.d.ts +0 -0
  357. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/pipes/localized-label.pipe.d.ts +0 -0
  358. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/pipes/sanitizer.pipe.d.ts +0 -0
  359. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/pipes/sort.pipe.d.ts +0 -0
  360. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/pipes/tooltip.pipe.d.ts +0 -0
  361. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/services/dynamic-component-loader.service.d.ts +0 -0
  362. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/services/filters-query.service.d.ts +0 -0
  363. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/utility/nxql.d.ts +0 -0
  364. /package/lib/components/{tables/ndf-table/filters-panel → ndf-filters}/utility/object.d.ts +0 -0
@@ -0,0 +1,317 @@
1
+ import _, { get, keys, set, trim, values } from 'lodash';
2
+ import stringHash from 'string-hash';
3
+ /**
4
+ * Creates a secure context for function evaluation that prevents access to the window object.
5
+ * @returns {Record<string, any>} A secure context object with safe properties.
6
+ */
7
+ function createSecureContext() {
8
+ // Create a secure context with only safe properties
9
+ return {
10
+ // Add any safe globals here that should be accessible
11
+ console: {
12
+ log: console.log,
13
+ warn: console.warn,
14
+ error: console.error
15
+ },
16
+ // Add other safe objects/functions as needed
17
+ Math,
18
+ Date,
19
+ Number,
20
+ String,
21
+ Boolean,
22
+ Array,
23
+ Object,
24
+ JSON,
25
+ // Prevent access to window
26
+ window: undefined,
27
+ self: undefined,
28
+ globalThis: undefined
29
+ };
30
+ }
31
+ /**
32
+ * A utility class for evaluating expressions, interpolating strings, and working with templates.
33
+ * This class provides static methods for dynamic evaluation of code, string interpolation,
34
+ * and template processing with caching capabilities.
35
+ */
36
+ export class Evaluator {
37
+ /**
38
+ * Creates a function from a string or returns the function if already provided.
39
+ * Uses a secure context to prevent access to the window object by default.
40
+ * @param {string|Function} func - The function or string to convert to a function.
41
+ * @param {...any} params - The parameters to pass to the function.
42
+ * @param {EvaluatorOptions} [options={}] - Optional configuration for the evaluation.
43
+ * @returns {Function} - The resulting function.
44
+ */
45
+ static evaluator(func, ...params) {
46
+ // Extract options if the last parameter is an options object
47
+ let options = {};
48
+ if (params.length > 0 &&
49
+ params[params.length - 1] &&
50
+ typeof params[params.length - 1] === 'object' &&
51
+ 'securityMode' in params[params.length - 1]) {
52
+ options = params.pop();
53
+ }
54
+ if (typeof func === 'function') {
55
+ return func;
56
+ }
57
+ if (typeof params[0] === 'object') {
58
+ params = keys(params[0]);
59
+ }
60
+ // Check if we should use secure mode (default) or unsafe mode
61
+ const securityMode = options.securityMode || 'secure';
62
+ if (securityMode === 'unsafe') {
63
+ // In unsafe mode, create a function with access to all globals
64
+ return new Function(...params, func);
65
+ }
66
+ const sandbox = createSecureContext();
67
+ const sandboxKeys = Object.keys(sandbox);
68
+ const sandboxAssignments = sandboxKeys.map((key) => `const ${key} = sandbox.${key};`).join('');
69
+ const wrapper = new Function(...params, 'sandbox', `${sandboxAssignments}${func}`);
70
+ return (...args) => wrapper(...args, sandbox);
71
+ }
72
+ /**
73
+ * Replaces template expressions in a string with values from data.
74
+ * Supports function calls within templates and fallback values using || syntax.
75
+ * By default, ensures evaluation happens in a secure context to prevent access to window object.
76
+ * @param {string} rawTemplate - The template string containing expressions to interpolate.
77
+ * @param {Record<string, any>} data - The data object containing values to use for interpolation.
78
+ * @param {EvaluatorOptions} [options={}] - Optional configuration for the interpolation process.
79
+ * @returns {string} - The interpolated string with all expressions replaced with actual values.
80
+ */
81
+ static interpolateString(rawTemplate, data, options = {}) {
82
+ if (!rawTemplate) {
83
+ return '';
84
+ }
85
+ if (typeof rawTemplate !== 'string') {
86
+ return rawTemplate.toString();
87
+ }
88
+ // Check if we should use secure mode (default) or unsafe mode
89
+ const securityMode = options.securityMode || 'secure';
90
+ // Create a secure data object if needed
91
+ const secureData = securityMode === 'unsafe'
92
+ ? data
93
+ : Object.assign(Object.assign(Object.assign({}, createSecureContext()), data), {
94
+ // Ensure these remain undefined
95
+ window: undefined, self: undefined, globalThis: undefined });
96
+ return rawTemplate.replace(/({{\s*(.*?)\s*}})/g, (match, $1, expression) => {
97
+ if (expression.indexOf('(') !== -1) {
98
+ return expression.replace(/([^(]+)\(([^)]+)\s*\);?/, (_, fnName, argsStr) => {
99
+ fnName = trim(fnName);
100
+ const func = get(secureData, fnName);
101
+ if (func) {
102
+ if (argsStr) {
103
+ const args = argsStr.split(',').map((arg) => {
104
+ const trimmed = trim(arg);
105
+ if (/^['"]/.test(trimmed))
106
+ return trimmed.slice(1, -1);
107
+ return get(secureData, trimmed);
108
+ });
109
+ return Evaluator.evaluate(func, args, '', false, secureData, options);
110
+ }
111
+ return Evaluator.evaluate(func, [], '', false, secureData, options);
112
+ }
113
+ return '';
114
+ });
115
+ }
116
+ else {
117
+ let dataPath = expression;
118
+ if (expression.indexOf('?') !== -1) {
119
+ dataPath = expression.replace(/\?\./g, '.');
120
+ }
121
+ const parts = dataPath.split('||').map((item) => item.trim());
122
+ let value = '';
123
+ let path = '';
124
+ for (let i = 0; i < parts.length; i++) {
125
+ path = parts[i];
126
+ if (_.has(secureData, path)) {
127
+ value = _.get(secureData, path);
128
+ break;
129
+ }
130
+ }
131
+ if (options.data) {
132
+ set(options.data, path, value);
133
+ }
134
+ return value;
135
+ }
136
+ });
137
+ }
138
+ /**
139
+ * Performs an evaluation using the evaluation context of this component.
140
+ * By default, ensures evaluation happens in a secure context to prevent access to window object.
141
+ * @param {string|Function|object} func - The function or string to evaluate.
142
+ * @param {object} args - The arguments to pass to the evaluation.
143
+ * @param {string} ret - The name of the variable within the evaluation context to return.
144
+ * @param {boolean} interpolate - Determines if it should replace all {{ }} token references with actual data.
145
+ * @param {object} context - - The evaluation context.
146
+ * @param {EvaluatorOptions } options - The options to pass to the evaluation.
147
+ * @returns {*} - The result of the evaluation.
148
+ */
149
+ static evaluate(func, args = {}, ret = 'show', interpolate = false, context = {}, options = {}) {
150
+ let returnVal = null;
151
+ const field = args.field ? args.field : { key: 'unknown' };
152
+ const fieldKey = field.key;
153
+ if (typeof func === 'string') {
154
+ if (ret) {
155
+ func = `var ${ret};${func};return ${ret}`;
156
+ }
157
+ if (interpolate) {
158
+ func = Evaluator.interpolate(func, args, options);
159
+ }
160
+ try {
161
+ // Pass the security mode option to the evaluator
162
+ const evaluatorOptions = { securityMode: options.securityMode || 'secure' };
163
+ func = Evaluator.evaluator(func, args, context, evaluatorOptions);
164
+ args = Array.isArray(args) ? args : values(args);
165
+ }
166
+ catch (err) {
167
+ console.warn(`An error occured within the custom function for ${fieldKey}`, err);
168
+ returnVal = null;
169
+ func = false;
170
+ }
171
+ }
172
+ if (typeof func === 'function') {
173
+ try {
174
+ returnVal = Evaluator.execute(func, args, context, options);
175
+ }
176
+ catch (err) {
177
+ returnVal = null;
178
+ console.warn(`An error occured within custom function for ${fieldKey}`, err);
179
+ }
180
+ }
181
+ else if (func) {
182
+ console.warn(`Unknown function type for ${fieldKey}`);
183
+ }
184
+ return returnVal;
185
+ }
186
+ /**
187
+ * Executes a function with provided arguments and context.
188
+ * By default, ensures execution happens in a secure context to prevent access to window object.
189
+ * @param {Function} func - The function to execute.
190
+ * @param {any[]|Record<string, any>} args - The arguments to pass to the function, either as an array or object.
191
+ * @param {Record<string, any>} [context={}] - The context (this) to use when executing the function.
192
+ * @param {EvaluatorOptions} [options={}] - Optional configuration for the execution.
193
+ * @returns {any} - The result of the function execution.
194
+ */
195
+ static execute(func, args, context = {}, options = {}) {
196
+ // Check if we should use secure mode (default) or unsafe mode
197
+ const securityMode = options.securityMode || 'secure';
198
+ if (securityMode === 'unsafe') {
199
+ // In unsafe mode, execute with the original context
200
+ return Array.isArray(args) ? func.apply(context, args) : func.call(context, args);
201
+ }
202
+ else {
203
+ // In secure mode, create a secure context by merging the provided context with our secure context
204
+ const secureContext = Object.assign(Object.assign(Object.assign({}, createSecureContext()), context), {
205
+ // Ensure these remain undefined even if they were in the provided context
206
+ window: undefined, self: undefined, globalThis: undefined });
207
+ // Execute the function with the secure context
208
+ return Array.isArray(args) ? func.apply(secureContext, args) : func.call(secureContext, args);
209
+ }
210
+ }
211
+ /**
212
+ * Creates a template function from a string with caching for performance.
213
+ * By default, ensures the template function executes in a secure context.
214
+ * @param {string} template - The template string to compile into a function.
215
+ * @param {string} [hash] - Optional hash to use as cache key. If not provided, a hash will be generated from the template.
216
+ * @param {EvaluatorOptions} [options={}] - Optional configuration for the template.
217
+ * @returns {Function|undefined} - The compiled template function, or undefined if compilation fails.
218
+ */
219
+ static template(template, hash, options = {}) {
220
+ hash = hash || stringHash(template).toString();
221
+ // If hash contains options object, extract it
222
+ if (typeof hash === 'object' && 'securityMode' in hash) {
223
+ options = hash;
224
+ hash = stringHash(template).toString();
225
+ }
226
+ // Check if we have a cached version
227
+ const cacheKey = hash + (options.securityMode || 'secure');
228
+ if (Evaluator.cache[cacheKey]) {
229
+ return Evaluator.cache[cacheKey];
230
+ }
231
+ try {
232
+ template = template.replace(/ctx\./g, '');
233
+ // Create the template function using lodash
234
+ const templateFunc = _.template(template, Evaluator.templateSettings);
235
+ // Check if we should use secure mode (default) or unsafe mode
236
+ const securityMode = options.securityMode || 'secure';
237
+ if (securityMode === 'unsafe') {
238
+ // In unsafe mode, return the original template function
239
+ return (Evaluator.cache[cacheKey] = templateFunc);
240
+ }
241
+ else {
242
+ // In secure mode, wrap the template function to ensure it runs in a secure context
243
+ const secureTemplateFunc = (data) => {
244
+ // Create a secure context for the template
245
+ const secureData = Object.assign(Object.assign(Object.assign({}, createSecureContext()), data), {
246
+ // Ensure these remain undefined
247
+ window: undefined, self: undefined, globalThis: undefined });
248
+ return templateFunc(secureData);
249
+ };
250
+ // Cache and return the secure template function
251
+ return (Evaluator.cache[cacheKey] = secureTemplateFunc);
252
+ }
253
+ }
254
+ catch (err) {
255
+ console.warn('Error while processing template', err, template);
256
+ return undefined;
257
+ }
258
+ }
259
+ /**
260
+ * Interpolates a template with data, handling both function templates and string templates.
261
+ * By default, ensures interpolation happens in a secure context to prevent access to window object.
262
+ * @param {string|Function} rawTemplate - The template to interpolate, either as a string or a function.
263
+ * @param {Record<string, any>} data - The data object to use for interpolation.
264
+ * @param {EvaluatorOptions} options - Options for the interpolation process.
265
+ * @returns {string|any} - The result of the interpolation, typically a string but could be any type depending on the template.
266
+ */
267
+ static interpolate(rawTemplate, data, options = {}) {
268
+ if (typeof rawTemplate === 'function') {
269
+ try {
270
+ // If the template is a function, execute it with the data
271
+ // We can't directly secure a provided function, but we can use execute
272
+ // to run it in a secure context if needed
273
+ if (options.securityMode !== 'unsafe') {
274
+ const secureData = Object.assign(Object.assign(Object.assign({}, createSecureContext()), data), { window: undefined, self: undefined, globalThis: undefined });
275
+ return rawTemplate(secureData);
276
+ }
277
+ else {
278
+ return rawTemplate(data);
279
+ }
280
+ }
281
+ catch (err) {
282
+ console.warn('Error interpolating template', err, data);
283
+ return err.message;
284
+ }
285
+ }
286
+ rawTemplate = String(rawTemplate);
287
+ // Pass the security mode option to the template method
288
+ const template = Evaluator.template(rawTemplate, undefined, options);
289
+ if (typeof template === 'function') {
290
+ try {
291
+ return template(data);
292
+ }
293
+ catch (err) {
294
+ console.warn('Error interpolating template', err, rawTemplate, data);
295
+ return err.message;
296
+ }
297
+ }
298
+ return template;
299
+ }
300
+ }
301
+ /**
302
+ * Cache for storing compiled template functions to improve performance.
303
+ * Keys are string hashes of the template, values are the compiled functions.
304
+ */
305
+ Evaluator.cache = {};
306
+ /**
307
+ * Settings for template processing, defining regex patterns for different template operations.
308
+ * - interpolate: Pattern for variable interpolation ({{ variable }})
309
+ * - evaluate: Pattern for code evaluation ({% code %})
310
+ * - escape: Pattern for HTML escaping ({{{ variable }}})
311
+ */
312
+ Evaluator.templateSettings = {
313
+ interpolate: /{{([\s\S]+?)}}/g,
314
+ evaluate: /\{%([\s\S]+?)%\}/g,
315
+ escape: /\{\{\{([\s\S]+?)\}\}\}/g
316
+ };
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvc2hhcmVkL2V2YWx1YXRvci9ldmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pELE9BQU8sVUFBVSxNQUFNLGFBQWEsQ0FBQztBQUlyQzs7O0dBR0c7QUFDSCxTQUFTLG1CQUFtQjtJQUMzQixvREFBb0Q7SUFDcEQsT0FBTztRQUNOLHNEQUFzRDtRQUN0RCxPQUFPLEVBQUU7WUFDUixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDaEIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1lBQ2xCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztTQUNwQjtRQUNELDZDQUE2QztRQUM3QyxJQUFJO1FBQ0osSUFBSTtRQUNKLE1BQU07UUFDTixNQUFNO1FBQ04sT0FBTztRQUNQLEtBQUs7UUFDTCxNQUFNO1FBQ04sSUFBSTtRQUNKLDJCQUEyQjtRQUMzQixNQUFNLEVBQUUsU0FBUztRQUNqQixJQUFJLEVBQUUsU0FBUztRQUNmLFVBQVUsRUFBRSxTQUFTO0tBQ3JCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBbUJyQjs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUF1QixFQUFFLEdBQUcsTUFBYTtRQUN6RCw2REFBNkQ7UUFDN0QsSUFBSSxPQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUNuQyxJQUNDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNqQixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDekIs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QkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JFLE9BQVEsR0FBYSxDQUFDLE9BQU8sQ0FBQzthQUM5QjtTQUNEO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQzs7QUF0VkQ7OztHQUdHO0FBQ0ksZUFBSyxHQUE2QixFQUFFLENBQUM7QUFFNUM7Ozs7O0dBS0c7QUFDSSwwQkFBZ0IsR0FBcUI7SUFDM0MsV0FBVyxFQUFFLGlCQUFpQjtJQUM5QixRQUFRLEVBQUUsbUJBQW1CO0lBQzdCLE1BQU0sRUFBRSx5QkFBeUI7Q0FDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfLCB7IGdldCwga2V5cywgc2V0LCB0cmltLCB2YWx1ZXMgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgc3RyaW5nSGFzaCBmcm9tICdzdHJpbmctaGFzaCc7XHJcblxyXG5pbXBvcnQgeyBFdmFsdWF0b3JPcHRpb25zLCBUZW1wbGF0ZVNldHRpbmdzIH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHNlY3VyZSBjb250ZXh0IGZvciBmdW5jdGlvbiBldmFsdWF0aW9uIHRoYXQgcHJldmVudHMgYWNjZXNzIHRvIHRoZSB3aW5kb3cgb2JqZWN0LlxyXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgYW55Pn0gQSBzZWN1cmUgY29udGV4dCBvYmplY3Qgd2l0aCBzYWZlIHByb3BlcnRpZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVTZWN1cmVDb250ZXh0KCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG5cdC8vIENyZWF0ZSBhIHNlY3VyZSBjb250ZXh0IHdpdGggb25seSBzYWZlIHByb3BlcnRpZXNcclxuXHRyZXR1cm4ge1xyXG5cdFx0Ly8gQWRkIGFueSBzYWZlIGdsb2JhbHMgaGVyZSB0aGF0IHNob3VsZCBiZSBhY2Nlc3NpYmxlXHJcblx0XHRjb25zb2xlOiB7XHJcblx0XHRcdGxvZzogY29uc29sZS5sb2csXHJcblx0XHRcdHdhcm46IGNvbnNvbGUud2FybixcclxuXHRcdFx0ZXJyb3I6IGNvbnNvbGUuZXJyb3JcclxuXHRcdH0sXHJcblx0XHQvLyBBZGQgb3RoZXIgc2FmZSBvYmplY3RzL2Z1bmN0aW9ucyBhcyBuZWVkZWRcclxuXHRcdE1hdGgsXHJcblx0XHREYXRlLFxyXG5cdFx0TnVtYmVyLFxyXG5cdFx0U3RyaW5nLFxyXG5cdFx0Qm9vbGVhbixcclxuXHRcdEFycmF5LFxyXG5cdFx0T2JqZWN0LFxyXG5cdFx0SlNPTixcclxuXHRcdC8vIFByZXZlbnQgYWNjZXNzIHRvIHdpbmRvd1xyXG5cdFx0d2luZG93OiB1bmRlZmluZWQsXHJcblx0XHRzZWxmOiB1bmRlZmluZWQsXHJcblx0XHRnbG9iYWxUaGlzOiB1bmRlZmluZWRcclxuXHR9O1xyXG59XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IGNsYXNzIGZvciBldmFsdWF0aW5nIGV4cHJlc3Npb25zLCBpbnRlcnBvbGF0aW5nIHN0cmluZ3MsIGFuZCB3b3JraW5nIHdpdGggdGVtcGxhdGVzLlxyXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHN0YXRpYyBtZXRob2RzIGZvciBkeW5hbWljIGV2YWx1YXRpb24gb2YgY29kZSwgc3RyaW5nIGludGVycG9sYXRpb24sXHJcbiAqIGFuZCB0ZW1wbGF0ZSBwcm9jZXNzaW5nIHdpdGggY2FjaGluZyBjYXBhYmlsaXRpZXMuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRXZhbHVhdG9yIHtcclxuXHQvKipcclxuXHQgKiBDYWNoZSBmb3Igc3RvcmluZyBjb21waWxlZCB0ZW1wbGF0ZSBmdW5jdGlvbnMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS5cclxuXHQgKiBLZXlzIGFyZSBzdHJpbmcgaGFzaGVzIG9mIHRoZSB0ZW1wbGF0ZSwgdmFsdWVzIGFyZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25zLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBjYWNoZTogUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHRpbmdzIGZvciB0ZW1wbGF0ZSBwcm9jZXNzaW5nLCBkZWZpbmluZyByZWdleCBwYXR0ZXJucyBmb3IgZGlmZmVyZW50IHRlbXBsYXRlIG9wZXJhdGlvbnMuXHJcblx0ICogLSBpbnRlcnBvbGF0ZTogUGF0dGVybiBmb3IgdmFyaWFibGUgaW50ZXJwb2xhdGlvbiAoe3sgdmFyaWFibGUgfX0pXHJcblx0ICogLSBldmFsdWF0ZTogUGF0dGVybiBmb3IgY29kZSBldmFsdWF0aW9uICh7JSBjb2RlICV9KVxyXG5cdCAqIC0gZXNjYXBlOiBQYXR0ZXJuIGZvciBIVE1MIGVzY2FwaW5nICh7e3sgdmFyaWFibGUgfX19KVxyXG5cdCAqL1xyXG5cdHN0YXRpYyB0ZW1wbGF0ZVNldHRpbmdzOiBUZW1wbGF0ZVNldHRpbmdzID0ge1xyXG5cdFx0aW50ZXJwb2xhdGU6IC97eyhbXFxzXFxTXSs/KX19L2csXHJcblx0XHRldmFsdWF0ZTogL1xceyUoW1xcc1xcU10rPyklXFx9L2csXHJcblx0XHRlc2NhcGU6IC9cXHtcXHtcXHsoW1xcc1xcU10rPylcXH1cXH1cXH0vZ1xyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgYSBmdW5jdGlvbiBmcm9tIGEgc3RyaW5nIG9yIHJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGFscmVhZHkgcHJvdmlkZWQuXHJcblx0ICogVXNlcyBhIHNlY3VyZSBjb250ZXh0IHRvIHByZXZlbnQgYWNjZXNzIHRvIHRoZSB3aW5kb3cgb2JqZWN0IGJ5IGRlZmF1bHQuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IGZ1bmMgLSBUaGUgZnVuY3Rpb24gb3Igc3RyaW5nIHRvIGNvbnZlcnQgdG8gYSBmdW5jdGlvbi5cclxuXHQgKiBAcGFyYW0gey4uLmFueX0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uXHJcblx0ICogQHBhcmFtIHtFdmFsdWF0b3JPcHRpb25zfSBbb3B0aW9ucz17fV0gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZXZhbHVhdGlvbi5cclxuXHQgKiBAcmV0dXJucyB7RnVuY3Rpb259IC0gVGhlIHJlc3VsdGluZyBmdW5jdGlvbi5cclxuXHQgKi9cclxuXHRzdGF0aWMgZXZhbHVhdG9yKGZ1bmM6IHN0cmluZyB8IEZ1bmN0aW9uLCAuLi5wYXJhbXM6IGFueVtdKTogRnVuY3Rpb24ge1xyXG5cdFx0Ly8gRXh0cmFjdCBvcHRpb25zIGlmIHRoZSBsYXN0IHBhcmFtZXRlciBpcyBhbiBvcHRpb25zIG9iamVjdFxyXG5cdFx0bGV0IG9wdGlvbnM6IEV2YWx1YXRvck9wdGlvbnMgPSB7fTtcclxuXHRcdGlmIChcclxuXHRcdFx0cGFyYW1zLmxlbmd0aCA+IDAgJiZcclxuXHRcdFx0cGFyYW1zW3BhcmFtcy5sZW5ndGggLSAxXSAmJlxyXG5cdFx0XHR0eXBlb2YgcGFyYW1zW3BhcmFtcy5sZW5ndGggLSAxXSA9PT0gJ29iamVjdCcgJiZcclxuXHRcdFx0J3NlY3VyaXR5TW9kZScgaW4gcGFyYW1zW3BhcmFtcy5sZW5ndGggLSAxXVxyXG5cdFx0KSB7XHJcblx0XHRcdG9wdGlvbnMgPSBwYXJhbXMucG9wKCkgYXMgRXZhbHVhdG9yT3B0aW9ucztcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0cmV0dXJuIGZ1bmM7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBwYXJhbXNbMF0gPT09ICdvYmplY3QnKSB7XHJcblx0XHRcdHBhcmFtcyA9IGtleXMocGFyYW1zWzBdKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDaGVjayBpZiB3ZSBzaG91bGQgdXNlIHNlY3VyZSBtb2RlIChkZWZhdWx0KSBvciB1bnNhZmUgbW9kZVxyXG5cdFx0Y29uc3Qgc2VjdXJpdHlNb2RlID0gb3B0aW9ucy5zZWN1cml0eU1vZGUgfHwgJ3NlY3VyZSc7XHJcblxyXG5cdFx0aWYgKHNlY3VyaXR5TW9kZSA9PT0gJ3Vuc2FmZScpIHtcclxuXHRcdFx0Ly8gSW4gdW5zYWZlIG1vZGUsIGNyZWF0ZSBhIGZ1bmN0aW9uIHdpdGggYWNjZXNzIHRvIGFsbCBnbG9iYWxzXHJcblx0XHRcdHJldHVybiBuZXcgRnVuY3Rpb24oLi4ucGFyYW1zLCBmdW5jIGFzIHN0cmluZyk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBzYW5kYm94ID0gY3JlYXRlU2VjdXJlQ29udGV4dCgpO1xyXG5cdFx0Y29uc3Qgc2FuZGJveEtleXMgPSBPYmplY3Qua2V5cyhzYW5kYm94KTtcclxuXHRcdGNvbnN0IHNhbmRib3hBc3NpZ25tZW50cyA9IHNhbmRib3hLZXlzLm1hcCgoa2V5KSA9PiBgY29uc3QgJHtrZXl9ID0gc2FuZGJveC4ke2tleX07YCkuam9pbignJyk7XHJcblxyXG5cdFx0Y29uc3Qgd3JhcHBlciA9IG5ldyBGdW5jdGlvbiguLi5wYXJhbXMsICdzYW5kYm94JywgYCR7c2FuZGJveEFzc2lnbm1lbnRzfSR7ZnVuYyBhcyBzdHJpbmd9YCk7XHJcblxyXG5cdFx0cmV0dXJuICguLi5hcmdzOiBhbnlbXSkgPT4gd3JhcHBlciguLi5hcmdzLCBzYW5kYm94KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlcGxhY2VzIHRlbXBsYXRlIGV4cHJlc3Npb25zIGluIGEgc3RyaW5nIHdpdGggdmFsdWVzIGZyb20gZGF0YS5cclxuXHQgKiBTdXBwb3J0cyBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGVtcGxhdGVzIGFuZCBmYWxsYmFjayB2YWx1ZXMgdXNpbmcgfHwgc3ludGF4LlxyXG5cdCAqIEJ5IGRlZmF1bHQsIGVuc3VyZXMgZXZhbHVhdGlvbiBoYXBwZW5zIGluIGEgc2VjdXJlIGNvbnRleHQgdG8gcHJldmVudCBhY2Nlc3MgdG8gd2luZG93IG9iamVjdC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcmF3VGVtcGxhdGUgLSBUaGUgdGVtcGxhdGUgc3RyaW5nIGNvbnRhaW5pbmcgZXhwcmVzc2lvbnMgdG8gaW50ZXJwb2xhdGUuXHJcblx0ICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgdmFsdWVzIHRvIHVzZSBmb3IgaW50ZXJwb2xhdGlvbi5cclxuXHQgKiBAcGFyYW0ge0V2YWx1YXRvck9wdGlvbnN9IFtvcHRpb25zPXt9XSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBpbnRlcnBvbGF0aW9uIHByb2Nlc3MuXHJcblx0ICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgaW50ZXJwb2xhdGVkIHN0cmluZyB3aXRoIGFsbCBleHByZXNzaW9ucyByZXBsYWNlZCB3aXRoIGFjdHVhbCB2YWx1ZXMuXHJcblx0ICovXHJcblx0c3RhdGljIGludGVycG9sYXRlU3RyaW5nKHJhd1RlbXBsYXRlOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdGlvbnM6IEV2YWx1YXRvck9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XHJcblx0XHRpZiAoIXJhd1RlbXBsYXRlKSB7XHJcblx0XHRcdHJldHVybiAnJztcclxuXHRcdH1cclxuXHRcdGlmICh0eXBlb2YgcmF3VGVtcGxhdGUgIT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdHJldHVybiAocmF3VGVtcGxhdGUgYXMgYW55KS50b1N0cmluZygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIENoZWNrIGlmIHdlIHNob3VsZCB1c2Ugc2VjdXJlIG1vZGUgKGRlZmF1bHQpIG9yIHVuc2FmZSBtb2RlXHJcblx0XHRjb25zdCBzZWN1cml0eU1vZGUgPSBvcHRpb25zLnNlY3VyaXR5TW9kZSB8fCAnc2VjdXJlJztcclxuXHJcblx0XHQvLyBDcmVhdGUgYSBzZWN1cmUgZGF0YSBvYmplY3QgaWYgbmVlZGVkXHJcblx0XHRjb25zdCBzZWN1cmVEYXRhID1cclxuXHRcdFx0c2VjdXJpdHlNb2RlID09PSAndW5zYWZlJ1xyXG5cdFx0XHRcdD8gZGF0YVxyXG5cdFx0XHRcdDoge1xyXG5cdFx0XHRcdFx0XHQuLi5jcmVhdGVTZWN1cmVDb250ZXh0KCksXHJcblx0XHRcdFx0XHRcdC4uLmRhdGEsXHJcblx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGVzZSByZW1haW4gdW5kZWZpbmVkXHJcblx0XHRcdFx0XHRcdHdpbmRvdzogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0XHRzZWxmOiB1bmRlZmluZWQsXHJcblx0XHRcdFx0XHRcdGdsb2JhbFRoaXM6IHVuZGVmaW5lZFxyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRyZXR1cm4gcmF3VGVtcGxhdGUucmVwbGFjZSgvKHt7XFxzKiguKj8pXFxzKn19KS9nLCAobWF0Y2g6IHN0cmluZywgJDE6IHN0cmluZywgZXhwcmVzc2lvbjogc3RyaW5nKSA9PiB7XHJcblx0XHRcdGlmIChleHByZXNzaW9uLmluZGV4T2YoJygnKSAhPT0gLTEpIHtcclxuXHRcdFx0XHRyZXR1cm4gZXhwcmVzc2lvbi5yZXBsYWNlKC8oW14oXSspXFwoKFteKV0rKVxccypcXCk7Py8sIChfOiBzdHJpbmcsIGZuTmFtZTogc3RyaW5nLCBhcmdzU3RyOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdGZuTmFtZSA9IHRyaW0oZm5OYW1lKTtcclxuXHRcdFx0XHRcdGNvbnN0IGZ1bmMgPSBnZXQoc2VjdXJlRGF0YSwgZm5OYW1lKTtcclxuXHJcblx0XHRcdFx0XHRpZiAoZnVuYykge1xyXG5cdFx0XHRcdFx0XHRpZiAoYXJnc1N0cikge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFyZ3MgPSBhcmdzU3RyLnNwbGl0KCcsJykubWFwKChhcmc6IHN0cmluZykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgdHJpbW1lZCA9IHRyaW0oYXJnKTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmICgvXlsnXCJdLy50ZXN0KHRyaW1tZWQpKSByZXR1cm4gdHJpbW1lZC5zbGljZSgxLCAtMSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZ2V0KHNlY3VyZURhdGEsIHRyaW1tZWQpO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiBFdmFsdWF0b3IuZXZhbHVhdGUoZnVuYywgYXJncywgJycsIGZhbHNlLCBzZWN1cmVEYXRhLCBvcHRpb25zKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRyZXR1cm4gRXZhbHVhdG9yLmV2YWx1YXRlKGZ1bmMsIFtdLCAnJywgZmFsc2UsIHNlY3VyZURhdGEsIG9wdGlvbnMpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGxldCBkYXRhUGF0aCA9IGV4cHJlc3Npb247XHJcblx0XHRcdFx0aWYgKGV4cHJlc3Npb24uaW5kZXhPZignPycpICE9PSAtMSkge1xyXG5cdFx0XHRcdFx0ZGF0YVBhdGggPSBleHByZXNzaW9uLnJlcGxhY2UoL1xcP1xcLi9nLCAnLicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBwYXJ0cyA9IGRhdGFQYXRoLnNwbGl0KCd8fCcpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBpdGVtLnRyaW0oKSk7XHJcblx0XHRcdFx0bGV0IHZhbHVlID0gJyc7XHJcblx0XHRcdFx0bGV0IHBhdGggPSAnJztcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRwYXRoID0gcGFydHNbaV07XHJcblx0XHRcdFx0XHRpZiAoXy5oYXMoc2VjdXJlRGF0YSwgcGF0aCkpIHtcclxuXHRcdFx0XHRcdFx0dmFsdWUgPSBfLmdldChzZWN1cmVEYXRhLCBwYXRoKTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChvcHRpb25zLmRhdGEpIHtcclxuXHRcdFx0XHRcdHNldChvcHRpb25zLmRhdGEsIHBhdGgsIHZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBlcmZvcm1zIGFuIGV2YWx1YXRpb24gdXNpbmcgdGhlIGV2YWx1YXRpb24gY29udGV4dCBvZiB0aGlzIGNvbXBvbmVudC5cclxuXHQgKiBCeSBkZWZhdWx0LCBlbnN1cmVzIGV2YWx1YXRpb24gaGFwcGVucyBpbiBhIHNlY3VyZSBjb250ZXh0IHRvIHByZXZlbnQgYWNjZXNzIHRvIHdpbmRvdyBvYmplY3QuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb258b2JqZWN0fSBmdW5jIC0gVGhlIGZ1bmN0aW9uIG9yIHN0cmluZyB0byBldmFsdWF0ZS5cclxuXHQgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZXZhbHVhdGlvbi5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcmV0IC0gVGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHdpdGhpbiB0aGUgZXZhbHVhdGlvbiBjb250ZXh0IHRvIHJldHVybi5cclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGludGVycG9sYXRlIC0gRGV0ZXJtaW5lcyBpZiBpdCBzaG91bGQgcmVwbGFjZSBhbGwge3sgfX0gdG9rZW4gcmVmZXJlbmNlcyB3aXRoIGFjdHVhbCBkYXRhLlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IC0gICAtIFRoZSBldmFsdWF0aW9uIGNvbnRleHQuXHJcblx0ICogQHBhcmFtIHtFdmFsdWF0b3JPcHRpb25zIH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIGV2YWx1YXRpb24uXHJcblx0ICogQHJldHVybnMgeyp9IC0gVGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbi5cclxuXHQgKi9cclxuXHRzdGF0aWMgZXZhbHVhdGUoXHJcblx0XHRmdW5jOiBhbnksXHJcblx0XHRhcmdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXHJcblx0XHRyZXQ6IHN0cmluZyA9ICdzaG93JyxcclxuXHRcdGludGVycG9sYXRlOiBib29sZWFuID0gZmFsc2UsXHJcblx0XHRjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXHJcblx0XHRvcHRpb25zOiBFdmFsdWF0b3JPcHRpb25zID0ge31cclxuXHQpOiBhbnkge1xyXG5cdFx0bGV0IHJldHVyblZhbCA9IG51bGw7XHJcblxyXG5cdFx0Y29uc3QgZmllbGQgPSBhcmdzLmZpZWxkID8gYXJncy5maWVsZCA6IHsga2V5OiAndW5rbm93bicgfTtcclxuXHRcdGNvbnN0IGZpZWxkS2V5ID0gZmllbGQua2V5O1xyXG5cclxuXHRcdGlmICh0eXBlb2YgZnVuYyA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0aWYgKHJldCkge1xyXG5cdFx0XHRcdGZ1bmMgPSBgdmFyICR7cmV0fTske2Z1bmN9O3JldHVybiAke3JldH1gO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoaW50ZXJwb2xhdGUpIHtcclxuXHRcdFx0XHRmdW5jID0gRXZhbHVhdG9yLmludGVycG9sYXRlKGZ1bmMsIGFyZ3MsIG9wdGlvbnMpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIFBhc3MgdGhlIHNlY3VyaXR5IG1vZGUgb3B0aW9uIHRvIHRoZSBldmFsdWF0b3JcclxuXHRcdFx0XHRjb25zdCBldmFsdWF0b3JPcHRpb25zID0geyBzZWN1cml0eU1vZGU6IG9wdGlvbnMuc2VjdXJpdHlNb2RlIHx8ICdzZWN1cmUnIH07XHJcblx0XHRcdFx0ZnVuYyA9IEV2YWx1YXRvci5ldmFsdWF0b3IoZnVuYywgYXJncywgY29udGV4dCwgZXZhbHVhdG9yT3B0aW9ucyk7XHJcblx0XHRcdFx0YXJncyA9IEFycmF5LmlzQXJyYXkoYXJncykgPyBhcmdzIDogdmFsdWVzKGFyZ3MpO1xyXG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oYEFuIGVycm9yIG9jY3VyZWQgd2l0aGluIHRoZSBjdXN0b20gZnVuY3Rpb24gZm9yICR7ZmllbGRLZXl9YCwgZXJyKTtcclxuXHRcdFx0XHRyZXR1cm5WYWwgPSBudWxsO1xyXG5cdFx0XHRcdGZ1bmMgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0eXBlb2YgZnVuYyA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHJldHVyblZhbCA9IEV2YWx1YXRvci5leGVjdXRlKGZ1bmMsIGFyZ3MsIGNvbnRleHQsIG9wdGlvbnMpO1xyXG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcclxuXHRcdFx0XHRyZXR1cm5WYWwgPSBudWxsO1xyXG5cdFx0XHRcdGNvbnNvbGUud2FybihgQW4gZXJyb3Igb2NjdXJlZCB3aXRoaW4gY3VzdG9tIGZ1bmN0aW9uIGZvciAke2ZpZWxkS2V5fWAsIGVycik7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoZnVuYykge1xyXG5cdFx0XHRjb25zb2xlLndhcm4oYFVua25vd24gZnVuY3Rpb24gdHlwZSBmb3IgJHtmaWVsZEtleX1gKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXR1cm5WYWw7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFeGVjdXRlcyBhIGZ1bmN0aW9uIHdpdGggcHJvdmlkZWQgYXJndW1lbnRzIGFuZCBjb250ZXh0LlxyXG5cdCAqIEJ5IGRlZmF1bHQsIGVuc3VyZXMgZXhlY3V0aW9uIGhhcHBlbnMgaW4gYSBzZWN1cmUgY29udGV4dCB0byBwcmV2ZW50IGFjY2VzcyB0byB3aW5kb3cgb2JqZWN0LlxyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cclxuXHQgKiBAcGFyYW0ge2FueVtdfFJlY29yZDxzdHJpbmcsIGFueT59IGFyZ3MgLSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLCBlaXRoZXIgYXMgYW4gYXJyYXkgb3Igb2JqZWN0LlxyXG5cdCAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW2NvbnRleHQ9e31dIC0gVGhlIGNvbnRleHQgKHRoaXMpIHRvIHVzZSB3aGVuIGV4ZWN1dGluZyB0aGUgZnVuY3Rpb24uXHJcblx0ICogQHBhcmFtIHtFdmFsdWF0b3JPcHRpb25zfSBbb3B0aW9ucz17fV0gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgZXhlY3V0aW9uLlxyXG5cdCAqIEByZXR1cm5zIHthbnl9IC0gVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gZXhlY3V0aW9uLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBleGVjdXRlKFxyXG5cdFx0ZnVuYzogRnVuY3Rpb24sXHJcblx0XHRhcmdzOiBhbnlbXSB8IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcblx0XHRjb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30sXHJcblx0XHRvcHRpb25zOiBFdmFsdWF0b3JPcHRpb25zID0ge31cclxuXHQpOiBhbnkge1xyXG5cdFx0Ly8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHVzZSBzZWN1cmUgbW9kZSAoZGVmYXVsdCkgb3IgdW5zYWZlIG1vZGVcclxuXHRcdGNvbnN0IHNlY3VyaXR5TW9kZSA9IG9wdGlvbnMuc2VjdXJpdHlNb2RlIHx8ICdzZWN1cmUnO1xyXG5cclxuXHRcdGlmIChzZWN1cml0eU1vZGUgPT09ICd1bnNhZmUnKSB7XHJcblx0XHRcdC8vIEluIHVuc2FmZSBtb2RlLCBleGVjdXRlIHdpdGggdGhlIG9yaWdpbmFsIGNvbnRleHRcclxuXHRcdFx0cmV0dXJuIEFycmF5LmlzQXJyYXkoYXJncykgPyBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogZnVuYy5jYWxsKGNvbnRleHQsIGFyZ3MpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gSW4gc2VjdXJlIG1vZGUsIGNyZWF0ZSBhIHNlY3VyZSBjb250ZXh0IGJ5IG1lcmdpbmcgdGhlIHByb3ZpZGVkIGNvbnRleHQgd2l0aCBvdXIgc2VjdXJlIGNvbnRleHRcclxuXHRcdFx0Y29uc3Qgc2VjdXJlQ29udGV4dCA9IHtcclxuXHRcdFx0XHQuLi5jcmVhdGVTZWN1cmVDb250ZXh0KCksXHJcblx0XHRcdFx0Li4uY29udGV4dCxcclxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlc2UgcmVtYWluIHVuZGVmaW5lZCBldmVuIGlmIHRoZXkgd2VyZSBpbiB0aGUgcHJvdmlkZWQgY29udGV4dFxyXG5cdFx0XHRcdHdpbmRvdzogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdHNlbGY6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRnbG9iYWxUaGlzOiB1bmRlZmluZWRcclxuXHRcdFx0fTtcclxuXHJcblx0XHRcdC8vIEV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHNlY3VyZSBjb250ZXh0XHJcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KGFyZ3MpID8gZnVuYy5hcHBseShzZWN1cmVDb250ZXh0LCBhcmdzKSA6IGZ1bmMuY2FsbChzZWN1cmVDb250ZXh0LCBhcmdzKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgYSB0ZW1wbGF0ZSBmdW5jdGlvbiBmcm9tIGEgc3RyaW5nIHdpdGggY2FjaGluZyBmb3IgcGVyZm9ybWFuY2UuXHJcblx0ICogQnkgZGVmYXVsdCwgZW5zdXJlcyB0aGUgdGVtcGxhdGUgZnVuY3Rpb24gZXhlY3V0ZXMgaW4gYSBzZWN1cmUgY29udGV4dC5cclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGUgLSBUaGUgdGVtcGxhdGUgc3RyaW5nIHRvIGNvbXBpbGUgaW50byBhIGZ1bmN0aW9uLlxyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbaGFzaF0gLSBPcHRpb25hbCBoYXNoIHRvIHVzZSBhcyBjYWNoZSBrZXkuIElmIG5vdCBwcm92aWRlZCwgYSBoYXNoIHdpbGwgYmUgZ2VuZXJhdGVkIGZyb20gdGhlIHRlbXBsYXRlLlxyXG5cdCAqIEBwYXJhbSB7RXZhbHVhdG9yT3B0aW9uc30gW29wdGlvbnM9e31dIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxyXG5cdCAqIEByZXR1cm5zIHtGdW5jdGlvbnx1bmRlZmluZWR9IC0gVGhlIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uLCBvciB1bmRlZmluZWQgaWYgY29tcGlsYXRpb24gZmFpbHMuXHJcblx0ICovXHJcblx0c3RhdGljIHRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcsIGhhc2g/OiBzdHJpbmcsIG9wdGlvbnM6IEV2YWx1YXRvck9wdGlvbnMgPSB7fSk6IEZ1bmN0aW9uIHwgdW5kZWZpbmVkIHtcclxuXHRcdGhhc2ggPSBoYXNoIHx8IHN0cmluZ0hhc2godGVtcGxhdGUpLnRvU3RyaW5nKCk7XHJcblxyXG5cdFx0Ly8gSWYgaGFzaCBjb250YWlucyBvcHRpb25zIG9iamVjdCwgZXh0cmFjdCBpdFxyXG5cdFx0aWYgKHR5cGVvZiBoYXNoID09PSAnb2JqZWN0JyAmJiAnc2VjdXJpdHlNb2RlJyBpbiBoYXNoKSB7XHJcblx0XHRcdG9wdGlvbnMgPSBoYXNoIGFzIHVua25vd24gYXMgRXZhbHVhdG9yT3B0aW9ucztcclxuXHRcdFx0aGFzaCA9IHN0cmluZ0hhc2godGVtcGxhdGUpLnRvU3RyaW5nKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGNhY2hlZCB2ZXJzaW9uXHJcblx0XHRjb25zdCBjYWNoZUtleSA9IGhhc2ggKyAob3B0aW9ucy5zZWN1cml0eU1vZGUgfHwgJ3NlY3VyZScpO1xyXG5cdFx0aWYgKEV2YWx1YXRvci5jYWNoZVtjYWNoZUtleV0pIHtcclxuXHRcdFx0cmV0dXJuIEV2YWx1YXRvci5jYWNoZVtjYWNoZUtleV07XHJcblx0XHR9XHJcblxyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGVtcGxhdGUgPSB0ZW1wbGF0ZS5yZXBsYWNlKC9jdHhcXC4vZywgJycpO1xyXG5cclxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSB0ZW1wbGF0ZSBmdW5jdGlvbiB1c2luZyBsb2Rhc2hcclxuXHRcdFx0Y29uc3QgdGVtcGxhdGVGdW5jID0gXy50ZW1wbGF0ZSh0ZW1wbGF0ZSwgRXZhbHVhdG9yLnRlbXBsYXRlU2V0dGluZ3MpO1xyXG5cclxuXHRcdFx0Ly8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHVzZSBzZWN1cmUgbW9kZSAoZGVmYXVsdCkgb3IgdW5zYWZlIG1vZGVcclxuXHRcdFx0Y29uc3Qgc2VjdXJpdHlNb2RlID0gb3B0aW9ucy5zZWN1cml0eU1vZGUgfHwgJ3NlY3VyZSc7XHJcblxyXG5cdFx0XHRpZiAoc2VjdXJpdHlNb2RlID09PSAndW5zYWZlJykge1xyXG5cdFx0XHRcdC8vIEluIHVuc2FmZSBtb2RlLCByZXR1cm4gdGhlIG9yaWdpbmFsIHRlbXBsYXRlIGZ1bmN0aW9uXHJcblx0XHRcdFx0cmV0dXJuIChFdmFsdWF0b3IuY2FjaGVbY2FjaGVLZXldID0gdGVtcGxhdGVGdW5jKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyBJbiBzZWN1cmUgbW9kZSwgd3JhcCB0aGUgdGVtcGxhdGUgZnVuY3Rpb24gdG8gZW5zdXJlIGl0IHJ1bnMgaW4gYSBzZWN1cmUgY29udGV4dFxyXG5cdFx0XHRcdGNvbnN0IHNlY3VyZVRlbXBsYXRlRnVuYyA9IChkYXRhOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhIHNlY3VyZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGVcclxuXHRcdFx0XHRcdGNvbnN0IHNlY3VyZURhdGEgPSB7XHJcblx0XHRcdFx0XHRcdC4uLmNyZWF0ZVNlY3VyZUNvbnRleHQoKSxcclxuXHRcdFx0XHRcdFx0Li4uZGF0YSxcclxuXHRcdFx0XHRcdFx0Ly8gRW5zdXJlIHRoZXNlIHJlbWFpbiB1bmRlZmluZWRcclxuXHRcdFx0XHRcdFx0d2luZG93OiB1bmRlZmluZWQsXHJcblx0XHRcdFx0XHRcdHNlbGY6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRcdFx0Z2xvYmFsVGhpczogdW5kZWZpbmVkXHJcblx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdHJldHVybiB0ZW1wbGF0ZUZ1bmMoc2VjdXJlRGF0YSk7XHJcblx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0Ly8gQ2FjaGUgYW5kIHJldHVybiB0aGUgc2VjdXJlIHRlbXBsYXRlIGZ1bmN0aW9uXHJcblx0XHRcdFx0cmV0dXJuIChFdmFsdWF0b3IuY2FjaGVbY2FjaGVLZXldID0gc2VjdXJlVGVtcGxhdGVGdW5jKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZXJyKSB7XHJcblx0XHRcdGNvbnNvbGUud2FybignRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyB0ZW1wbGF0ZScsIGVyciwgdGVtcGxhdGUpO1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW50ZXJwb2xhdGVzIGEgdGVtcGxhdGUgd2l0aCBkYXRhLCBoYW5kbGluZyBib3RoIGZ1bmN0aW9uIHRlbXBsYXRlcyBhbmQgc3RyaW5nIHRlbXBsYXRlcy5cclxuXHQgKiBCeSBkZWZhdWx0LCBlbnN1cmVzIGludGVycG9sYXRpb24gaGFwcGVucyBpbiBhIHNlY3VyZSBjb250ZXh0IHRvIHByZXZlbnQgYWNjZXNzIHRvIHdpbmRvdyBvYmplY3QuXHJcblx0ICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IHJhd1RlbXBsYXRlIC0gVGhlIHRlbXBsYXRlIHRvIGludGVycG9sYXRlLCBlaXRoZXIgYXMgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbi5cclxuXHQgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgdG8gdXNlIGZvciBpbnRlcnBvbGF0aW9uLlxyXG5cdCAqIEBwYXJhbSB7RXZhbHVhdG9yT3B0aW9uc30gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBpbnRlcnBvbGF0aW9uIHByb2Nlc3MuXHJcblx0ICogQHJldHVybnMge3N0cmluZ3xhbnl9IC0gVGhlIHJlc3VsdCBvZiB0aGUgaW50ZXJwb2xhdGlvbiwgdHlwaWNhbGx5IGEgc3RyaW5nIGJ1dCBjb3VsZCBiZSBhbnkgdHlwZSBkZXBlbmRpbmcgb24gdGhlIHRlbXBsYXRlLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBpbnRlcnBvbGF0ZShcclxuXHRcdHJhd1RlbXBsYXRlOiBzdHJpbmcgfCBGdW5jdGlvbixcclxuXHRcdGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcblx0XHRvcHRpb25zOiBFdmFsdWF0b3JPcHRpb25zID0ge31cclxuXHQpOiBzdHJpbmcgfCBhbnkge1xyXG5cdFx0aWYgKHR5cGVvZiByYXdUZW1wbGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdC8vIElmIHRoZSB0ZW1wbGF0ZSBpcyBhIGZ1bmN0aW9uLCBleGVjdXRlIGl0IHdpdGggdGhlIGRhdGFcclxuXHRcdFx0XHQvLyBXZSBjYW4ndCBkaXJlY3RseSBzZWN1cmUgYSBwcm92aWRlZCBmdW5jdGlvbiwgYnV0IHdlIGNhbiB1c2UgZXhlY3V0ZVxyXG5cdFx0XHRcdC8vIHRvIHJ1biBpdCBpbiBhIHNlY3VyZSBjb250ZXh0IGlmIG5lZWRlZFxyXG5cdFx0XHRcdGlmIChvcHRpb25zLnNlY3VyaXR5TW9kZSAhPT0gJ3Vuc2FmZScpIHtcclxuXHRcdFx0XHRcdGNvbnN0IHNlY3VyZURhdGEgPSB7XHJcblx0XHRcdFx0XHRcdC4uLmNyZWF0ZVNlY3VyZUNvbnRleHQoKSxcclxuXHRcdFx0XHRcdFx0Li4uZGF0YSxcclxuXHRcdFx0XHRcdFx0d2luZG93OiB1bmRlZmluZWQsXHJcblx0XHRcdFx0XHRcdHNlbGY6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRcdFx0Z2xvYmFsVGhpczogdW5kZWZpbmVkXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0cmV0dXJuIHJhd1RlbXBsYXRlKHNlY3VyZURhdGEpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcmF3VGVtcGxhdGUoZGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGNhdGNoIChlcnIpIHtcclxuXHRcdFx0XHRjb25zb2xlLndhcm4oJ0Vycm9yIGludGVycG9sYXRpbmcgdGVtcGxhdGUnLCBlcnIsIGRhdGEpO1xyXG5cdFx0XHRcdHJldHVybiAoZXJyIGFzIEVycm9yKS5tZXNzYWdlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmF3VGVtcGxhdGUgPSBTdHJpbmcocmF3VGVtcGxhdGUpO1xyXG5cdFx0Ly8gUGFzcyB0aGUgc2VjdXJpdHkgbW9kZSBvcHRpb24gdG8gdGhlIHRlbXBsYXRlIG1ldGhvZFxyXG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBFdmFsdWF0b3IudGVtcGxhdGUocmF3VGVtcGxhdGUsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdHJldHVybiB0ZW1wbGF0ZShkYXRhKTtcclxuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XHJcblx0XHRcdFx0Y29uc29sZS53YXJuKCdFcnJvciBpbnRlcnBvbGF0aW5nIHRlbXBsYXRlJywgZXJyLCByYXdUZW1wbGF0ZSwgZGF0YSk7XHJcblx0XHRcdFx0cmV0dXJuIChlcnIgYXMgRXJyb3IpLm1lc3NhZ2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGVtcGxhdGU7XHJcblx0fVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './evaluator';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9zaGFyZWQvZXZhbHVhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9ldmFsdWF0b3InO1xyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9zaGFyZWQvZXZhbHVhdG9yL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBFdmFsdWF0b3JPcHRpb25zID0ge1xyXG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIHRoZSBzZWN1cml0eSBsZXZlbCBvZiBldmFsdWF0aW9uLlxyXG4gICAqIC0gJ3NlY3VyZScgKGRlZmF1bHQpOiBQcmV2ZW50cyBhY2Nlc3MgdG8gd2luZG93IG9iamVjdCBhbmQgb3RoZXIgZ2xvYmFsIG9iamVjdHNcclxuICAgKiAtICd1bnNhZmUnOiBBbGxvd3MgYWNjZXNzIHRvIGFsbCBnbG9iYWwgb2JqZWN0cyAodXNlIHdpdGggY2F1dGlvbilcclxuICAgKi9cclxuICBzZWN1cml0eU1vZGU/OiAnc2VjdXJlJyB8ICd1bnNhZmUnO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgVGVtcGxhdGVTZXR0aW5ncyA9IHtcclxuXHRpbnRlcnBvbGF0ZTogUmVnRXhwO1xyXG5cdGV2YWx1YXRlOiBSZWdFeHA7XHJcblx0ZXNjYXBlOiBSZWdFeHA7XHJcbn07XHJcbiJdfQ==
@@ -2,4 +2,5 @@ export * from './mapper/index';
2
2
  export * from './nuxeo-response.model';
3
3
  export * from './task.model';
4
4
  export * from './ndf-request.model';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9zaGFyZWQvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tYXBwZXIvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL251eGVvLXJlc3BvbnNlLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi90YXNrLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9uZGYtcmVxdWVzdC5tb2RlbCc7XHJcbiJdfQ==
5
+ export * from './type-helpers';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9zaGFyZWQvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZ0JBQWdCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21hcHBlci9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbnV4ZW8tcmVzcG9uc2UubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL3Rhc2subW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL25kZi1yZXF1ZXN0Lm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi90eXBlLWhlbHBlcnMnXHJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrL3NyYy9saWIvc2hhcmVkL21vZGVscy90eXBlLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gQmFzaWMgVXRpbGl0eSBUeXBlc1xyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbmV4cG9ydCB0eXBlIFN0cmluZ09yTnVtYmVyID0gc3RyaW5nIHwgbnVtYmVyO1xyXG5leHBvcnQgdHlwZSBTdHJpY3RPbWl0PEssIFQgZXh0ZW5kcyBrZXlvZiBLPiA9IE9taXQ8SywgVD47XHJcbmV4cG9ydCB0eXBlIExvY2FsaXplZFZhbHVlID0geyBhcjogc3RyaW5nOyBlbjogc3RyaW5nIH07XHJcbmV4cG9ydCB0eXBlIFByZXR0aWZ5PFQ+ID0ge1xyXG4gIFtrIGluIGtleW9mIFRdOiBUW2tdO1xyXG59ICYge307XHJcblxyXG5cclxuXHJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLy8gU3BlY2lhbCBTdHJpbmcgVHlwZXNcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5leHBvcnQgdHlwZSBFdmFsdWF0ZWRTdHJpbmcgPSBgJHtzdHJpbmd9e3ske3N0cmluZ319fSR7c3RyaW5nfWA7XHJcbmV4cG9ydCB0eXBlIFRyYW5zbGF0ZUtleSA9IHN0cmluZztcclxuIl19
@@ -248,7 +248,9 @@ export * from './lib/components/ndf-tabs';
248
248
  export * from './lib/components/no-data-found';
249
249
  export * from './lib/components/reports/charts';
250
250
  export * from './lib/components/reports/ndf-reports';
251
+ export * from './lib/components/reports/chart-panel';
251
252
  export * from './lib/components/skeleton';
252
253
  export * from './lib/components/tables';
253
254
  export * from './lib/components/ndf-config-editor';
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDJDQUEyQyxDQUFDO0FBRTFELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLHdCQUF3QjtBQUN4QixjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxrRkFBa0YsQ0FBQztBQUNqRyxjQUFjLG9GQUFvRixDQUFDO0FBQ25HLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHlFQUF5RSxDQUFDO0FBQ3hGLGNBQWMsd0ZBQXdGLENBQUM7QUFDdkcsY0FBYywrR0FBK0csQ0FBQztBQUU5SCxjQUFjLHVJQUF1SSxDQUFDO0FBQ3RKLGNBQWMsaUZBQWlGLENBQUM7QUFDaEcsY0FBYyx5RUFBeUUsQ0FBQztBQUN4RixjQUFjLG9GQUFvRixDQUFDO0FBQ25HLGNBQWMsd0VBQXdFLENBQUM7QUFDdkYsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLHNFQUFzRSxDQUFDO0FBQ3JGLGNBQWMsd0ZBQXdGLENBQUM7QUFDdkcsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYywrREFBK0QsQ0FBQztBQUM5RSxjQUFjLG1GQUFtRixDQUFDO0FBQ2xHLGNBQWMs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LENBQUM7QUFDbEUsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHVDQUF1QyxDQUFDO0FBRXRELDBCQUEwQjtBQUMxQixjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsNkNBQTZDLENBQUM7QUFFNUQsT0FBTztBQUNQLGNBQWMsZ0RBQWdELENBQUM7QUFFL0QsY0FBYyx3REFBd0QsQ0FBQztBQUV2RSxjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrXHJcbiAqL1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsuc2VydmljZSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvY29tcG9uZW50cy9pbmRleCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC9tb2RlbHMvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvc2VydmljZXMvaW5kZXgnO1xyXG5cclxuLy8gZXhwb3J0IGFsbCBjb21wb25lbnRzXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXZhdGFyL2F2YXRhci5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2F2YXRhci9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2FyZC9jYXJkLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29tbWVudHMvY29tbWVudHMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb21tZW50cy9jb21wb25lbnRzL2NvbW1lbnRzLWRhc2hsZXQvY29tbWVudHMtZGFzaGxldC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbW1lbnRzL2NvbXBvbmVudHMvZWRpdC1kZWxldGUtbW9kYWwvZWRpdC1kZWxldGUtbW9kYWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb25maXJtLWNhbGxlci9jb25maXJtLWNhbGxlci5kaWFsb2cnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbmZpcm0tY2FsbGVyL2NvbmZpcm0tY2FsbGVyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29uZmlybS1jYWxsZXIvY29uZmlybS1kaWFsb2cvY29uZmlybS1kaWFsb2cuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvcnJlc3BvbmRlbmNlLXJlbGF0aW9uL2NvbXBvbmVudHMvY29ycmVzcG9uZGVuY2UtcmVsYXRpb24vY29ycmVzcG9uZGVuY2UtcmVsYXRpb24uY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29ycmVzcG9uZGVuY2UtcmVsYXRpb24vY29tcG9uZW50cy9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi1jcmVhdGUtZm9ybS9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi1jcmVhdGUtZm9ybS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvcnJlc3BvbmRlbmNlLXJlbGF0aW9uL2NvbXBvbmVudHMvdmVyc2lvbnMvdmVyc2lvbnMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvcnJlc3BvbmRlbmNlLXJlbGF0aW9uL3NlcnZpY2VzL2NvcnJlc3BvbmRlbmNlLXJlYWxhdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi9zZXJ2aWNlcy92aWV3ZXItZmlsZXMuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY3JlYXRlLWVudGl0eS9jcmVhdGUtZW50aXR5Lm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY3JlYXRlLWVudGl0eS9jcmVhdGUtZW50aXR5L2NyZWF0ZS1lbnRpdHkuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jdHMtdGFncy9jb21wb25lbnRzL2NvcnJlc3BvbmRlbmNlLXRhZ3MvY29ycmVzcG9uZGVuY2UtdGFncy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2N0cy10YWdzL2N0cy10YWdzLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY3RzLXRhZ3Mvc2VydmljZXMvdGFncy1hcGkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY3VzdG9tLXRvYXN0ci9jdXN0b20tdG9hc3RyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY3VzdG9tLXRvYXN0ci9zZXJ2aWNlcy9jdXN0b20tdG9hc3RyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb21wb25lbnRzL2F0dGFjaG1lbnRzLWxpc3QvYXR0YWNobWVudHMtbGlzdC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb21wb25lbnRzL2F0dGFjaG1lbnRzLXBhZ2UtcHJvdmlkZXIvYXR0YWNobWVudHMtcGFnZS1wcm92aWRlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb21wb25lbnRzL2RvY3VtZW50LWxpc3QvZG9jdW1lbnRzLWxpc3QuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvY29tcG9uZW50cy9kb2N1bWVudC1zY2FuL2RvY3VtZW50LXNjYW4uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvY29tcG9uZW50cy9kb2N1bWVudC1zY2FuL2RvY3VtZW50LXNjYW4uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZG9jdW1lbnRzL2NvbXBvbmVudHMvZG9jdW1lbnQtdXBsb2FkL2RvY3VtZW50LXVwbG9hZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb21wb25lbnRzL2RvY3VtZW50cy9kb2N1bWVudHMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvY29uc3RhbnRzL2RvY3VtZW50LXRlbXBsYXRlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZG9jdW1lbnRzL2NvbnN0YW50cy9kb2N1bWVudHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9kb2N1bWVudHMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvc2VydmljZXMvZG9jdW1lbnQtdGVtcGxhdGVzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9zZXJ2aWNlcy9kb2N1bWVudHMuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1jaGFydC9keW5hbWljLWNoYXJ0Lm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1jaGFydC9keW5hbWljLWNoYXJ0L2R5bmFtaWMtY2hhcnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWNoYXJ0L3NlcnZpY2VzL2NoYXJ0LWRhdGEuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1maWx0ZXIvZHluYW1pYy1maWx0ZXIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZpbHRlci9keW5hbWljLWZpbHRlci9keW5hbWljLWZpbHRlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2RlcGFydG1lbnQtZm9ybS9kZXBhcnRtZW50LWZvcm0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tYm9vbGl0ZW0vZHluYW1pYy1mb3JtLWJvb2xpdGVtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLWJ1aWxkZXIvZHluYW1pYy1mb3JtLWJ1aWxkZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tY2hlY2tib3gtaXRlbS9keW5hbWljLWZvcm0tY2hlY2tib3gtaXRlbS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1kYXRlaXRlbS9keW5hbWljLWZvcm0tZGF0ZWl0ZW0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tZGVwYXJ0bWVudC9keW5hbWljLWZvcm0tZGVwYXJ0bWVudC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1kZXBhcnRtZW50L3NlcnZpY2VzL2RlcGFydG1lbnQtYXBpLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1maWVsZC9keW5hbWljLWZvcm0tZmllbGQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0taGlqcmktZGF0ZWl0ZW0vZHluYW1pYy1mb3JtLWhpanJpLWRhdGVpdGVtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLW1hcGl0ZW0vZHluYW1pYy1mb3JtLW1hcGl0ZW0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tb3B0aW9ucy9keW5hbWljLWZvcm0tb3B0aW9ucy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1zZWxlY3QtdGFnL2R5bmFtaWMtZm9ybS1zZWxlY3QtdGFnLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLXNlbGVjdC11c2VyLWZpbHRlci9keW5hbWljLWZvcm0tc2VsZWN0LXVzZXItZmlsdGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLXNlbGVjdC11c2Vycy9keW5hbWljLWZvcm0tc2VsZWN0LXVzZXJzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLXNlbGVjdGl0ZW0vZHluYW1pYy1mb3JtLXNlbGVjdGl0ZW0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbS9keW5hbWljLWZvcm0tc2xpZGUtdG9nZ2xlaXRlbS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS10ZXh0YXJlYS9keW5hbWljLWZvcm0tdGV4dGFyZWEuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tdGV4dGl0ZW0vZHluYW1pYy1mb3JtLXRleHRpdGVtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLXRyZWV2aWV3LXNlbGVjdC9kcm9wZG93bi10cmVldmlldy1zZWxlY3QuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tdmlld2VyL2R5bmFtaWMtZm9ybS12aWV3ZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtL2R5bmFtaWMtZm9ybS12b2NhYnVsYXJ5LWl0ZW0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0vZHluYW1pYy1mb3JtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2Zvcm0tYnVpbGRlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vZHluYW1pYy1mb3JtLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1zZWFyY2gvZHluYW1pYy1zZWFyY2gubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC9keW5hbWljLXNlYXJjaC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdmlldy9ib29sZWFuLXZpZXdlci9ib29sZWFuLXZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdmlldy9jdXN0b20tZG9jdW1lbnQtdmlld2VyL2N1c3RvbS1kb2N1bWVudC12aWV3ZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLXZpZXcvY3VzdG9tLXBwLXZpZXdlci9jdXN0b20tcHAtdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy12aWV3L2N1dG9tZS12b2Mtdmlld2VyL2N1dG9tZS12b2Mtdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy12aWV3L2RhdGEtdmlld2VyL2RhdGEtdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy12aWV3L2RhdGUtdmlld2VyL2RhdGUtdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy12aWV3L2RlcGFydG1lbnQtdmlld2VyL2RlcGFydG1lbnQtdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy12aWV3L2Ryb3Bkb3duLXZpZXdlci9kcm9wZG93bi12aWV3ZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLXZpZXcvZHluYW1pYy12aWV3Lm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy12aWV3L2xpc3Qtdmlld2VyL2xpc3Qtdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9hZGQtdG8tY29sbGVjdGlvbi9hZGQtdG8tY29sbGVjdGlvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvY2xpcGJvYXJkL2NsaXBib2FyZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvY29weS9jb3B5LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtZGlyZWN0b3J5L2NyZWF0ZS1kaXJlY3RvcnkuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL2NyZWF0ZS1tb2RhbC9jcmVhdGUtbW9kYWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL2NyZWF0aW9uLXR5cGUvY3JlYXRpb24tdHlwZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvZGVsZXRlL2RlbGV0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvZm9sZGVyLW1vZGFsL2ZvbGRlci1tb2RhbC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvbG9hbi1yZXF1ZXN0L2xvYW4tcmVxdWVzdC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvbW92ZS9tb3ZlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9wdWJsaXNoLWRpYWxvZy9wdWJsaXNoLWRpYWxvZy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvcmVuYW1lL3JlbmFtZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvc2Nhbi1tb2RhbC9zY2FuLW1vZGFsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaWRlcGFuZWwvc2lkZXBhbmVsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy90ZW1wbGF0ZS1tb2RhbC90ZW1wbGF0ZS1tb2RhbC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvdHJhbnNmZXItZG9jL3RyYW5zZmVyLWRvYy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvdXBkYXRlLW1vZGFsL3VwZGF0ZS1tb2RhbC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2RpcmVjdGl2ZXMvZmlsZS1ncmlkLWluZmluaXRlLXNjcm9sbC5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2ZpbGUtbWFuYWdlci5hYnN0cmFjdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvZmlsZS1tYW5nZXIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9tb2RlbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyL2ZpbHRlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL2dyZWdvcmlhbi1kYXRlcGlja2VyL2dyZWdvcmlhbi1kYXRlcGlja2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIvaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIvaGlqcmktZGF0ZXBpY2tlci9oaWpyaS1kYXRlcGlja2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIvaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIvaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9uZ3gtaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9zZXJ2aWNlcy9kYXRlLWZvcm1hdHRlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9zZXJ2aWNlcy9kYXRlLWhlbHBlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9sYXRlc3QtYWN0aXZpdHkvY29tcG9uZW50cy9hY3Rpdml0eS1saW5lL2FjdGl2aXR5LWxpbmUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9sYXRlc3QtYWN0aXZpdHkvY29tcG9uZW50cy9sYXRlc3QtYWN0aXZpdHkvbGF0ZXN0LWFjdGl2aXR5LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGF0ZXN0LWFjdGl2aXR5L2NvbXBvbmVudHMvc2luZ2xlLWFjdGl2aXR5L3NpbmdsZS1hY3Rpdml0eS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xhdGVzdC1hY3Rpdml0eS9sYXRlc3QtYWN0aXZpdHkubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZi10cm9uLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcGRmLXRyb24vcGRmdHJvbi9wZGZ0cm9uLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcGRmLXRyb24vcGRmdHJvbi9wZGZ0cm9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vc2lsZW50LXBkZnRyb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdXNlcnMtY2FyZC91c2Vycy1jYXJkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdXNlcnMtY2FyZC91c2Vycy1jYXJkLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmlld2VyLWxvZy9jb21wb25lbnRzL3ZpZXdlci1sb2cvdmlld2VyLWxvZy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZpZXdlci1sb2cvdmlld2VyLWxvZy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZvY2FidWxhcnkvaW50ZXJmYWNlcy9vcC10eXBlLmludGVyZmFjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdm9jYWJ1bGFyeS9zZXJ2aWNlcy92b2NhYnVsYXJ5LWFwaS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92b2NhYnVsYXJ5L3RyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3QvdHJhbnNsYXRlZC12b2NhYnVsYXJ5LXNlbGVjdC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZvY2FidWxhcnkvdm9jYWJ1bGFyeS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZvY2FidWxhcnkvdm9jYWJ1bGFyeS92b2NhYnVsYXJ5LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvY29yZS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLmFkYXB0ZXInO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kaXNwbGF5LXN1aXRhYmxlLWljb24vZGlzcGxheS1zdWl0YWJsZS1pY29uLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGlzcGxheS1zdWl0YWJsZS1pY29uL2Rpc3BsYXktc3VpdGFibGUtaWNvbi9kaXNwbGF5LXN1aXRhYmxlLWljb24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kaXNwbGF5LXN1aXRhYmxlLWljb24vZGlzcGxheS1zdWl0YWJsZS1pY29uL2ljb24uc2VydmljZSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2F0dGFjaG1lbnQtaXRlbS9hdHRhY2htZW50LWl0ZW0ubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hdHRhY2htZW50LWl0ZW0vYXR0YWNobWVudC1pdGVtL2F0dGFjaG1lbnQtaXRlbS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NlbGVjdC11c2Vycy1ieS1kZXBhcnRtZW50L3NlbGVjdC11c2Vycy1ieS1kZXBhcnRtZW50Lm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnQvc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnRzL2RlcGFydG1lbnQtbWFuYWdlbWVudC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudC9zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudHMvc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnRzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc3BlbGwtY2hlY2tlci1maWVsZC9zcGVsbC1jaGVja2VyLWZpZWxkLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc3BlbGwtY2hlY2tlci1maWVsZC9zcGVsbC1jaGVja2VyLXRleHQtZmllbGQvc3BlbGwtY2hlY2tlci10ZXh0LWZpZWxkLmNvbXBvbmVudCc7XHJcblxyXG4vLyBzZXJ2aWNlcyBmcm9tIGZpbGUgbWFuZ2VyXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy9kaWFsb2ctbWFuZ21lbnQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy9keW5hbWljLWZvcm0uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy9maWxlLW1hbmFnZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy9nbG9iYWwtcGRmdHJvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkLXNlcnZpY2VzL21haW5mb2xkZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy9wdWJsaXNoaW5nLWRvY3VtZW50LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvcmVjZW50bHktdmlld2VkLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvc2hhcmVkLWRvY3Muc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy91cGxvYWQtZmlsZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkLXNlcnZpY2VzL3VwbG9hZC1tYW5hZ21lbnQuc2VydmljZSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGl2aXRpZXMtbG9nL2FjdGl2aXRpZXMtbG9nLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYWN0aXZpdGllcy1sb2cvYWN0aXZpdGllcy1sb2cvYWN0aXZpdGllcy1sb2cuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLXRhYnMvZHluYW1pYy10YWJzLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy10YWJzL2R5bmFtaWMtdGFicy9keW5hbWljLXRhYnMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9tdXRpcGxlLWR5bmFtaWMtZm9ybS12aWV3ZXIvbXVsdGlwbGUtZHluYW1pYy1mb3JtLXZpZXdlci9tdWx0aXBsZS1keW5hbWljLWZvcm0tdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbXV0aXBsZS1keW5hbWljLWZvcm0tdmlld2VyL211dGlwbGUtZHluYW1pYy1mb3JtLXZpZXdlci5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cvYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMtdGVtcGxhdGUvcGVybWlzc2lvbnMtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdXNlci91c2VyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdXNlci91c2VyL3VzZXIuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXR0YWNobWVudC1tb2RhbC9hdHRhY2htZW50LW1vZGFsLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXR0YWNobWVudC1tb2RhbC9hdHRhY2htZW50cy9hdHRhY2htZW50cy5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kaWFncmFtcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbm90aWZpY2F0aW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdG9hc3RzJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1maWVsZHMtcmVuZGVyZXIvZHluYW1pYy1maWVsZHMtcmVuZGVyZXIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZpZWxkcy1yZW5kZXJlci9keW5hbWljLWZpZWxkcy1yZW5kZXJlci9keW5hbWljLWZpZWxkcy1yZW5kZXJlci5jb21wb25lbnQnO1xyXG5cclxuLy8gZXhwb3J0IGFsbCBmcm9tIHNoYXJlZCBtb2R1bGVcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbXBvbmVudHMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvY29tcG9uZW50cy9pdGVtLWxpc3QvaXRlbS1saXN0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC9jb21wb25lbnRzL25vLWRhdGEvbm8tZGF0YS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvY29tcG9uZW50cy9yZWFkLW1vcmUvcmVhZC1tb3JlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC9jb21wb25lbnRzL3NlYXJjaC1hdXRvY29tcGxldGUvc2VhcmNoLWF1dG9jb21wbGV0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvY29tcG9uZW50cy9zcGlubmVyL3NwaW5uZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbXBvbmVudHMvdXNlci1jYXJkL3VzZXItY2FyZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvbGlicmFyeVNoYXJlZC5tb2R1bGUnO1xyXG5cclxuLy8gZXhwb3J0IGFsbCBmcm9tIHNoYXJlZCBzZXJ2aWNlcyBtb2R1bGVcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkLXNlcnZpY2VzL2dsb2JhbC1hZG1pbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkLXNlcnZpY2VzL3NoYXJlZC1zZXJ2aWNlcy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkLXNlcnZpY2VzL2FwaXMtZXJyb3JzLW1lc3NhZ2VzLnNlcnZpY2UnO1xyXG5cclxuLy8gZXhwb3J0IGFsbCBmcm9tIGNvcmUgbW9kdWxlXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvYWRhcHRlcnMvYWRhcHRlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9lbnVtcy9sYW5ndWFnZS5lbnVtJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9lbnYvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL21vZGVscyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9jYWxsQXBpL2NhbGwtYXBpLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2V4dGVuc2lvbi9hY3Rpb24uZXh0ZW5zaW9ucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvZXh0ZW5zaW9uL2NvbXBvbmVudC1yZWdpc3Rlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9leHRlbnNpb24vZXh0ZW5pb24tdXRpbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2V4dGVuc2lvbi9leHRlbnNpb24tZWxlbWVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvZXh0ZW5zaW9uL2V4dGVuc2lvbi1sb2FkZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvZXh0ZW5zaW9uL2V4dGVuc2lvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9pbml0aWFsaXphdGlvbi9pbml0aWFsaXphdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9sb2NhbFN0b3JhZy9sb2NhbC1zdG9yYWcuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvbnV4ZW8vbnV4ZW8uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvcm9sZXMvcm9sZXMuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvdHJhbnNsYXRpb24vdHJhbnNsYXRlLWxvYWRlci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy91c2VyL3VzZXItcHJlZmVyZW5jZXMuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvdXRpbGl0aWVzL21vbWVudC1kYXRlLWFkYXB0ZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3V0aWxpdGllcy91dGlsaXR5LnNlcnZpY2UnO1xyXG5cclxuLy8gZXhwb3J0IGFsbCBwaXBlc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9maWxlLXNpemUucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL2hpanJpLWRhdGUucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL2xvY2FsaXplZC1kYXRlLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9tdWx0aS12YWx1ZS5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvcGlwZXMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvc2VjdXJlLWh0bWwucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL3NlY3VyZS5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvdGltZS1hZ28ucGlwZSc7XHJcblxyXG4vL2V4cG9ydCBhbGwgZGlyZWN0aXZlc1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmUvYXBwLWhhcy1yb2xlL2FwcC1oYXMtcm9sZS5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmUvY2xpY2tPdXRTaWRlL2NsaWNrLW91dHNpZGUuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlL2RpcmVjdGl2ZS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmUvZHJhZy1hbmQtZHJvcC9kcmFnLWFuZC1kcm9wLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZS9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmUvcnRsL3NldC1kaXItcnRsLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZS9ydGwvc2V0LXJ0bC5kaXJlY3RpdmUnO1xyXG5cclxuLy9leHBvcnQgYWxsIGNvbmZpZ3VyYXRpb25cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uZmlndXJhdGlvbi9hcHAtY29uZmlnLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb25maWd1cmF0aW9uL2hlbHBlcnMvYXBwLWluaXRpYWxpemVyJztcclxuXHJcbi8vIEV2YWxcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlL3Blcm1pc3Npb25zL2V2YWx1YXRvcnMuc2VydmljZSc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbW1lbnRzL3NlcnZpY2VzL2NvbW1lbnQtYXBpLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2RpcmVjdGl2ZXMnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvdG9rZW5zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9uZGYtZGF0ZXBpY2tlcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbmRmLXBhbmVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9uZGYtdGFicyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbm8tZGF0YS1mb3VuZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcmVwb3J0cy9jaGFydHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3JlcG9ydHMvbmRmLXJlcG9ydHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NrZWxldG9uJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25kZi1jb25maWctZWRpdG9yJztcclxuIl19
255
+ export * from './lib/components/ndf-filters';
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDJDQUEyQyxDQUFDO0FBRTFELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDZCQUE2QixDQUFDO0FBRTVDLHdCQUF3QjtBQUN4QixjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxrRkFBa0YsQ0FBQztBQUNqRyxjQUFjLG9GQUFvRixDQUFDO0FBQ25HLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHlFQUF5RSxDQUFDO0FBQ3hGLGNBQWMsd0ZBQXdGLENBQUM7QUFDdkcsY0FBYywrR0FBK0csQ0FBQztBQUU5SCxjQUFjLHVJQUF1SSxDQUFDO0FBQ3RKLGNBQWMsaUZBQWlGLENBQUM7QUFDaEcsY0FBYyx5RUFBeUUsQ0FBQztBQUN4RixjQUFjLG9GQUFvRixDQUFDO0FBQ25HLGNBQWMsd0VBQXdFLENBQUM7QUFDdkYsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLHNFQUFzRSxDQUFDO0FBQ3JGLGNBQWMsd0ZBQXdGLENBQUM7QUFDdkcsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMscURBQXFELENBQUM7QUFDcEUsY0FBYywrREFBK0QsQ0FBQztBQUM5RSxjQUFjLG1GQUFtRixDQUFDO0FBQ2xHLGNBQWMscUdBQXFHLENBQUM7QUFDcEgsY0FBYyw4RUFBOEUsQ0FBQztBQUM3RixjQUFjLDZFQUE2RSxDQUFDO0FBQzVGLGNBQWMsMkVBQTJFLENBQUM7QUFDMUYsY0FBYyxpRkFBaUYsQ0FBQztBQUNoRyxjQUFjLHFFQUFxRSxDQUFDO0FBQ3BGLGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyxnREFBZ0QsQ0FBQztBQUMvRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsZ0VBQWdFLENBQUM7QUFDL0UsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsc0VBQXNFLENBQUM7QUFDckYsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMseUVBQXlFLENBQUM7QUFDeEYsY0FBYyxvRkFBb0YsQ0FBQztBQUNuRyxjQUFjLGdHQUFnRyxDQUFDO0FBQy9HLGNBQWMsOEZBQThGLENBQUM7QUFDN0csY0FBYywwR0FBMEcsQ0FBQztBQUN6SCxjQUFjLGdHQUFnRyxDQUFDO0FBQy9HLGNBQWMsb0dBQW9HLENBQUM7QUFDbkgsY0FBYyxrR0FBa0csQ0FBQztBQUNqSCxjQUFjLDBGQUEwRixDQUFDO0FBQ3pHLGNBQWMsNEdBQTRHLENBQUM7QUFDM0gsY0FBYyw4RkFBOEYsQ0FBQztBQUM3RyxjQUFjLDhGQUE4RixDQUFDO0FBQzdHLGNBQWMsb0dBQW9HLENBQUM7QUFDbkgsY0FBYyxvSEFBb0gsQ0FBQztBQUNuSSxjQUFjLHdHQUF3RyxDQUFDO0FBQ3ZILGNBQWMsb0dBQW9HLENBQUM7QUFDbkgsY0FBYyxnSEFBZ0gsQ0FBQztBQUMvSCxjQUFjLGdHQUFnRyxDQUFDO0FBQy9HLGNBQWMsZ0dBQWdHLENBQUM7QUFDL0csY0FBYywwR0FBMEcsQ0FBQztBQUN6SCxjQUFjLDRGQUE0RixDQUFDO0FBQzNHLGNBQWMsOEdBQThHLENBQUM7QUFDN0gsY0FBYyw4RUFBOEUsQ0FBQztBQUM3RixjQUFjLDRFQUE0RSxDQUFDO0FBQzNGLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHlFQUF5RSxDQUFDO0FBQ3hGLGNBQWMsdUVBQXVFLENBQUM7QUFDdEYsY0FBYyx1RkFBdUYsQ0FBQztBQUN0RyxjQUFjLDJFQUEyRSxDQUFDO0FBQzFGLGNBQWMsNkVBQTZFLENBQUM7QUFDNUYsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsNkVBQTZFLENBQUM7QUFDNUYsY0FBYyx5RUFBeUUsQ0FBQztBQUN4RixjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsaUVBQWlFLENBQUM7QUFDaEYsY0FBYyx1RkFBdUYsQ0FBQztBQUN0RyxjQUFjLHVFQUF1RSxDQUFDO0FBQ3RGLGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYyxxRkFBcUYsQ0FBQztBQUNwRyxjQUFjLDZFQUE2RSxDQUFDO0FBQzVGLGNBQWMsK0VBQStFLENBQUM7QUFDOUYsY0FBYyxpRUFBaUUsQ0FBQztBQUNoRixjQUFjLDZFQUE2RSxDQUFDO0FBQzVGLGNBQWMsNkVBQTZFLENBQUM7QUFDNUYsY0FBYyw2REFBNkQsQ0FBQztBQUM1RSxjQUFjLGlGQUFpRixDQUFDO0FBQ2hHLGNBQWMsaUVBQWlFLENBQUM7QUFDaEYsY0FBYyx5RUFBeUUsQ0FBQztBQUN4RixjQUFjLDZFQUE2RSxDQUFDO0FBQzVGLGNBQWMsdUVBQXVFLENBQUM7QUFDdEYsY0FBYyxpRkFBaUYsQ0FBQztBQUNoRyxjQUFjLDZFQUE2RSxDQUFDO0FBQzVGLGNBQWMsNkVBQTZFLENBQUM7QUFDNUYsY0FBYyw2RUFBNkUsQ0FBQztBQUM1RixjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyw0SEFBNEgsQ0FBQztBQUMzSSxjQUFjLG9IQUFvSCxDQUFDO0FBQ25JLGNBQWMsNkdBQTZHLENBQUM7QUFDNUgsY0FBYyxtRkFBbUYsQ0FBQztBQUNsRyxjQUFjLDZFQUE2RSxDQUFDO0FBQzVGLGNBQWMsMEVBQTBFLENBQUM7QUFDekYsY0FBYyxtRkFBbUYsQ0FBQztBQUNsRyxjQUFjLHVGQUF1RixDQUFDO0FBQ3RHLGNBQWMsdUZBQXVGLENBQUM7QUFDdEcsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsd0VBQXdFLENBQUM7QUFDdkYsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYyxpR0FBaUcsQ0FBQztBQUNoSCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsNkRBQTZELENBQUM7QUFDNUUsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDRDQUE0QyxDQUFDO0FBRTNELGNBQWMscUVBQXFFLENBQUM7QUFDcEYsY0FBYyw4RkFBOEYsQ0FBQztBQUM3RyxjQUFjLDJFQUEyRSxDQUFDO0FBRTFGLGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyw0RUFBNEUsQ0FBQztBQUMzRixjQUFjLCtFQUErRSxDQUFDO0FBQzlGLGNBQWMsdUdBQXVHLENBQUM7QUFDdEgsY0FBYywrR0FBK0csQ0FBQztBQUM5SCxjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsa0dBQWtHLENBQUM7QUFFakgsNEJBQTRCO0FBQzVCLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsZ0RBQWdELENBQUM7QUFFL0QsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLHlFQUF5RSxDQUFDO0FBQ3hGLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyxtRUFBbUUsQ0FBQztBQUNsRixjQUFjLGtIQUFrSCxDQUFDO0FBQ2pJLGNBQWMsaUZBQWlGLENBQUM7QUFDaEcsY0FBYyxzRkFBc0YsQ0FBQztBQUNyRyxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsa0ZBQWtGLENBQUM7QUFDakcsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLGdFQUFnRSxDQUFDO0FBQy9FLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywyQ0FBMkMsQ0FBQztBQUUxRCxjQUFjLGlFQUFpRSxDQUFDO0FBQ2hGLGNBQWMsd0ZBQXdGLENBQUM7QUFFdkcsY0FBYywyREFBMkQsQ0FBQztBQUMxRSxjQUFjLHFFQUFxRSxDQUFDO0FBRXBGLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHlCQUF5QixDQUFDO0FBRXhDLGNBQWMseUVBQXlFLENBQUM7QUFDeEYsY0FBYyxvR0FBb0csQ0FBQztBQUVuSCxnQ0FBZ0M7QUFDaEMsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLDJFQUEyRSxDQUFDO0FBQzFGLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx1REFBdUQsQ0FBQztBQUN0RSxjQUFjLG1DQUFtQyxDQUFDO0FBRWxELHlDQUF5QztBQUN6QyxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLG9EQUFvRCxDQUFDO0FBRW5FLDhCQUE4QjtBQUM5QixjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLGlEQUFpRCxDQUFDO0FBQ2hFLGNBQWMsd0RBQXdELENBQUM7QUFDdkUsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDJEQUEyRCxDQUFDO0FBQzFFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxzQ0FBc0MsQ0FBQztBQUVyRCxtQkFBbUI7QUFDbkIsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDJCQUEyQixDQUFDO0FBRTFDLHVCQUF1QjtBQUN2QixjQUFjLHFEQUFxRCxDQUFDO0FBQ3BFLGNBQWMsc0RBQXNELENBQUM7QUFDckUsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHVDQUF1QyxDQUFDO0FBRXRELDBCQUEwQjtBQUMxQixjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsNkNBQTZDLENBQUM7QUFFNUQsT0FBTztBQUNQLGNBQWMsZ0RBQWdELENBQUM7QUFFL0QsY0FBYyx3REFBd0QsQ0FBQztBQUV2RSxjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDhCQUE4QixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG51eGVvLWRldmVsb3BtZW50LWZyYW1ld29ya1xyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbnV4ZW8tZGV2ZWxvcG1lbnQtZnJhbWV3b3JrLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbXBvbmVudHMvaW5kZXgnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvbW9kZWxzL2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL3NlcnZpY2VzL2luZGV4JztcclxuXHJcbi8vIGV4cG9ydCBhbGwgY29tcG9uZW50c1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2F2YXRhci9hdmF0YXIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hdmF0YXIvYXZhdGFyL2F2YXRhci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQvY2FyZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQvY2FyZC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbW1lbnRzL2NvbW1lbnRzLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29tbWVudHMvY29tcG9uZW50cy9jb21tZW50cy1kYXNobGV0L2NvbW1lbnRzLWRhc2hsZXQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb21tZW50cy9jb21wb25lbnRzL2VkaXQtZGVsZXRlLW1vZGFsL2VkaXQtZGVsZXRlLW1vZGFsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29uZmlybS1jYWxsZXIvY29uZmlybS1jYWxsZXIuZGlhbG9nJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb25maXJtLWNhbGxlci9jb25maXJtLWNhbGxlci5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbmZpcm0tY2FsbGVyL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi9jb21wb25lbnRzL2NvcnJlc3BvbmRlbmNlLXJlbGF0aW9uL2NvcnJlc3BvbmRlbmNlLXJlbGF0aW9uLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvcnJlc3BvbmRlbmNlLXJlbGF0aW9uL2NvbXBvbmVudHMvY29ycmVzcG9uZGVuY2UtcmVsYXRpb24tY3JlYXRlLWZvcm0vY29ycmVzcG9uZGVuY2UtcmVsYXRpb24tY3JlYXRlLWZvcm0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi9jb21wb25lbnRzL3ZlcnNpb25zL3ZlcnNpb25zLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29ycmVzcG9uZGVuY2UtcmVsYXRpb24vY29ycmVzcG9uZGVuY2UtcmVsYXRpb24ubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb3JyZXNwb25kZW5jZS1yZWxhdGlvbi9zZXJ2aWNlcy9jb3JyZXNwb25kZW5jZS1yZWFsYXRpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29ycmVzcG9uZGVuY2UtcmVsYXRpb24vc2VydmljZXMvdmlld2VyLWZpbGVzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NyZWF0ZS1lbnRpdHkvY3JlYXRlLWVudGl0eS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NyZWF0ZS1lbnRpdHkvY3JlYXRlLWVudGl0eS9jcmVhdGUtZW50aXR5LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY3RzLXRhZ3MvY29tcG9uZW50cy9jb3JyZXNwb25kZW5jZS10YWdzL2NvcnJlc3BvbmRlbmNlLXRhZ3MuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jdHMtdGFncy9jdHMtdGFncy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2N0cy10YWdzL3NlcnZpY2VzL3RhZ3MtYXBpLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2N1c3RvbS10b2FzdHIvY3VzdG9tLXRvYXN0ci5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvY29tcG9uZW50cy9hdHRhY2htZW50cy1saXN0L2F0dGFjaG1lbnRzLWxpc3QuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvY29tcG9uZW50cy9hdHRhY2htZW50cy1wYWdlLXByb3ZpZGVyL2F0dGFjaG1lbnRzLXBhZ2UtcHJvdmlkZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvY29tcG9uZW50cy9kb2N1bWVudC1saXN0L2RvY3VtZW50cy1saXN0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZG9jdW1lbnRzL2NvbXBvbmVudHMvZG9jdW1lbnQtc2Nhbi9kb2N1bWVudC1zY2FuLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZG9jdW1lbnRzL2NvbXBvbmVudHMvZG9jdW1lbnQtc2Nhbi9kb2N1bWVudC1zY2FuLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb21wb25lbnRzL2RvY3VtZW50LXVwbG9hZC9kb2N1bWVudC11cGxvYWQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvY29tcG9uZW50cy9kb2N1bWVudHMvZG9jdW1lbnRzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZG9jdW1lbnRzL2NvbnN0YW50cy9kb2N1bWVudC10ZW1wbGF0ZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RvY3VtZW50cy9jb25zdGFudHMvZG9jdW1lbnRzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvZG9jdW1lbnRzLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZG9jdW1lbnRzL3NlcnZpY2VzL2RvY3VtZW50LXRlbXBsYXRlcy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kb2N1bWVudHMvc2VydmljZXMvZG9jdW1lbnRzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtY2hhcnQvZHluYW1pYy1jaGFydC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtY2hhcnQvZHluYW1pYy1jaGFydC9keW5hbWljLWNoYXJ0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1jaGFydC9zZXJ2aWNlcy9jaGFydC1kYXRhLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZmlsdGVyL2R5bmFtaWMtZmlsdGVyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1maWx0ZXIvZHluYW1pYy1maWx0ZXIvZHluYW1pYy1maWx0ZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9kZXBhcnRtZW50LWZvcm0vZGVwYXJ0bWVudC1mb3JtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLWJvb2xpdGVtL2R5bmFtaWMtZm9ybS1ib29saXRlbS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1idWlsZGVyL2R5bmFtaWMtZm9ybS1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLWNoZWNrYm94LWl0ZW0vZHluYW1pYy1mb3JtLWNoZWNrYm94LWl0ZW0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tZGF0ZWl0ZW0vZHluYW1pYy1mb3JtLWRhdGVpdGVtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLWRlcGFydG1lbnQvZHluYW1pYy1mb3JtLWRlcGFydG1lbnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tZGVwYXJ0bWVudC9zZXJ2aWNlcy9kZXBhcnRtZW50LWFwaS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tZmllbGQvZHluYW1pYy1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLWhpanJpLWRhdGVpdGVtL2R5bmFtaWMtZm9ybS1oaWpyaS1kYXRlaXRlbS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1tYXBpdGVtL2R5bmFtaWMtZm9ybS1tYXBpdGVtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLW9wdGlvbnMvZHluYW1pYy1mb3JtLW9wdGlvbnMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tc2VsZWN0LXRhZy9keW5hbWljLWZvcm0tc2VsZWN0LXRhZy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1zZWxlY3QtdXNlci1maWx0ZXIvZHluYW1pYy1mb3JtLXNlbGVjdC11c2VyLWZpbHRlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1zZWxlY3QtdXNlcnMvZHluYW1pYy1mb3JtLXNlbGVjdC11c2Vycy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS1zZWxlY3RpdGVtL2R5bmFtaWMtZm9ybS1zZWxlY3RpdGVtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLXNsaWRlLXRvZ2dsZWl0ZW0vZHluYW1pYy1mb3JtLXNsaWRlLXRvZ2dsZWl0ZW0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLWZvcm0vY29tcG9uZW50cy9keW5hbWljLWZvcm0tdGV4dGFyZWEvZHluYW1pYy1mb3JtLXRleHRhcmVhLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLXRleHRpdGVtL2R5bmFtaWMtZm9ybS10ZXh0aXRlbS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS10cmVldmlldy1zZWxlY3QvZHJvcGRvd24tdHJlZXZpZXctc2VsZWN0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLXZpZXdlci9keW5hbWljLWZvcm0tdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtLXZvY2FidWxhcnktaXRlbS9keW5hbWljLWZvcm0tdm9jYWJ1bGFyeS1pdGVtLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9mb3JtLWJ1aWxkZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtc2VhcmNoL2R5bmFtaWMtc2VhcmNoLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1zZWFyY2gvZHluYW1pYy1zZWFyY2gvZHluYW1pYy1zZWFyY2guY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLXZpZXcvYm9vbGVhbi12aWV3ZXIvYm9vbGVhbi12aWV3ZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9keW5hbWljLXZpZXcvY3VzdG9tLWRvY3VtZW50LXZpZXdlci9jdXN0b20tZG9jdW1lbnQtdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy12aWV3L2N1c3RvbS1wcC12aWV3ZXIvY3VzdG9tLXBwLXZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdmlldy9jdXRvbWUtdm9jLXZpZXdlci9jdXRvbWUtdm9jLXZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdmlldy9kYXRhLXZpZXdlci9kYXRhLXZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdmlldy9kYXRlLXZpZXdlci9kYXRlLXZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdmlldy9kZXBhcnRtZW50LXZpZXdlci9kZXBhcnRtZW50LXZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdmlldy9kcm9wZG93bi12aWV3ZXIvZHJvcGRvd24tdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy12aWV3L2R5bmFtaWMtdmlldy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdmlldy9saXN0LXZpZXdlci9saXN0LXZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvYWRkLXRvLWNvbGxlY3Rpb24vYWRkLXRvLWNvbGxlY3Rpb24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL2NsaXBib2FyZC9jbGlwYm9hcmQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL2NvcHkvY29weS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvY3JlYXRlLWRpcmVjdG9yeS9jcmVhdGUtZGlyZWN0b3J5LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGUtbW9kYWwvY3JlYXRlLW1vZGFsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9jcmVhdGlvbi10eXBlL2NyZWF0aW9uLXR5cGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL2RlbGV0ZS9kZWxldGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL2ZvbGRlci1tb2RhbC9mb2xkZXItbW9kYWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL2xvYW4tcmVxdWVzdC9sb2FuLXJlcXVlc3QuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL21vdmUvbW92ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvcHVibGlzaC1kaWFsb2cvcHVibGlzaC1kaWFsb2cuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL3JlbmFtZS9yZW5hbWUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL3NjYW4tbW9kYWwvc2Nhbi1tb2RhbC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvc2hhcmUtZGlhbG9nL3NoYXJlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvc2lkZXBhbmVsL3NpZGVwYW5lbC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvdGVtcGxhdGUtbW9kYWwvdGVtcGxhdGUtbW9kYWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL3RyYW5zZmVyLWRvYy90cmFuc2Zlci1kb2MuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9jb21wb25lbnRzL3VwZGF0ZS1tb2RhbC91cGRhdGUtbW9kYWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9kaXJlY3RpdmVzL2ZpbGUtZ3JpZC1pbmZpbml0ZS1zY3JvbGwuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWxlLW1hbmdlci9maWxlLW1hbmFnZXIuYWJzdHJhY3QnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2ZpbGUtbWFuZ2VyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvbW9kZWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9oaWpyaS1ncmVnb3JpYW4tZGF0ZXBpY2tlci9ncmVnb3JpYW4tZGF0ZXBpY2tlci9ncmVnb3JpYW4tZGF0ZXBpY2tlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL2hpanJpLWRhdGVwaWNrZXIvaGlqcmktZGF0ZXBpY2tlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyL2hpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIvbmd4LWhpanJpLWdyZWdvcmlhbi1kYXRlcGlja2VyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIvc2VydmljZXMvZGF0ZS1mb3JtYXR0ZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaGlqcmktZ3JlZ29yaWFuLWRhdGVwaWNrZXIvc2VydmljZXMvZGF0ZS1oZWxwZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGF0ZXN0LWFjdGl2aXR5L2NvbXBvbmVudHMvYWN0aXZpdHktbGluZS9hY3Rpdml0eS1saW5lLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbGF0ZXN0LWFjdGl2aXR5L2NvbXBvbmVudHMvbGF0ZXN0LWFjdGl2aXR5L2xhdGVzdC1hY3Rpdml0eS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xhdGVzdC1hY3Rpdml0eS9jb21wb25lbnRzL3NpbmdsZS1hY3Rpdml0eS9zaW5nbGUtYWN0aXZpdHkuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9sYXRlc3QtYWN0aXZpdHkvbGF0ZXN0LWFjdGl2aXR5Lm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wZGYtdHJvbi9wZGYtdHJvbi5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BkZi10cm9uL3BkZnRyb24vcGRmdHJvbi5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wZGYtdHJvbi9wZGZ0cm9uL3NpbGVudC1wZGZ0cm9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zZWxlY3Qvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VzZXJzLWNhcmQvdXNlcnMtY2FyZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VzZXJzLWNhcmQvdXNlcnMtY2FyZC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZpZXdlci1sb2cvY29tcG9uZW50cy92aWV3ZXItbG9nL3ZpZXdlci1sb2cuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92aWV3ZXItbG9nL3ZpZXdlci1sb2cubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92b2NhYnVsYXJ5L2ludGVyZmFjZXMvb3AtdHlwZS5pbnRlcmZhY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZvY2FidWxhcnkvc2VydmljZXMvdm9jYWJ1bGFyeS1hcGkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdm9jYWJ1bGFyeS90cmFuc2xhdGVkLXZvY2FidWxhcnktc2VsZWN0L3RyYW5zbGF0ZWQtdm9jYWJ1bGFyeS1zZWxlY3QuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92b2NhYnVsYXJ5L3ZvY2FidWxhcnkubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92b2NhYnVsYXJ5L3ZvY2FidWxhcnkvdm9jYWJ1bGFyeS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL2NvcmUubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkLXNlcnZpY2VzL2ZpbGUtbWFuYWdlci5hZGFwdGVyJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGlzcGxheS1zdWl0YWJsZS1pY29uL2Rpc3BsYXktc3VpdGFibGUtaWNvbi5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Rpc3BsYXktc3VpdGFibGUtaWNvbi9kaXNwbGF5LXN1aXRhYmxlLWljb24vZGlzcGxheS1zdWl0YWJsZS1pY29uLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGlzcGxheS1zdWl0YWJsZS1pY29uL2Rpc3BsYXktc3VpdGFibGUtaWNvbi9pY29uLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hdHRhY2htZW50LWl0ZW0vYXR0YWNobWVudC1pdGVtLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYXR0YWNobWVudC1pdGVtL2F0dGFjaG1lbnQtaXRlbS9hdHRhY2htZW50LWl0ZW0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudC9zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NlbGVjdC11c2Vycy1ieS1kZXBhcnRtZW50L3NlbGVjdC11c2Vycy1ieS1kZXBhcnRtZW50cy9kZXBhcnRtZW50LW1hbmFnZW1lbnQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnQvc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnRzL3NlbGVjdC11c2Vycy1ieS1kZXBhcnRtZW50cy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NwZWxsLWNoZWNrZXItZmllbGQvc3BlbGwtY2hlY2tlci1maWVsZC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NwZWxsLWNoZWNrZXItZmllbGQvc3BlbGwtY2hlY2tlci10ZXh0LWZpZWxkL3NwZWxsLWNoZWNrZXItdGV4dC1maWVsZC5jb21wb25lbnQnO1xyXG5cclxuLy8gc2VydmljZXMgZnJvbSBmaWxlIG1hbmdlclxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvZGlhbG9nLW1hbmdtZW50LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvZ2xvYmFsLXBkZnRyb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy9tYWluZm9sZGVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvcHVibGlzaGluZy1kb2N1bWVudC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkLXNlcnZpY2VzL3JlY2VudGx5LXZpZXdlZC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkLXNlcnZpY2VzL3NoYXJlZC1kb2NzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQtc2VydmljZXMvdXBsb2FkLWZpbGUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy91cGxvYWQtbWFuYWdtZW50LnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hY3Rpdml0aWVzLWxvZy9hY3Rpdml0aWVzLWxvZy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2FjdGl2aXRpZXMtbG9nL2FjdGl2aXRpZXMtbG9nL2FjdGl2aXRpZXMtbG9nLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy10YWJzL2R5bmFtaWMtdGFicy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtdGFicy9keW5hbWljLXRhYnMvZHluYW1pYy10YWJzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbXV0aXBsZS1keW5hbWljLWZvcm0tdmlld2VyL211bHRpcGxlLWR5bmFtaWMtZm9ybS12aWV3ZXIvbXVsdGlwbGUtZHluYW1pYy1mb3JtLXZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL211dGlwbGUtZHluYW1pYy1mb3JtLXZpZXdlci9tdXRpcGxlLWR5bmFtaWMtZm9ybS12aWV3ZXIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9hZGQtcGVybWlzc2lvbnMtZGlhbG9nL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL3Blcm1pc3Npb25zLXRlbXBsYXRlL3Blcm1pc3Npb25zLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VzZXIvdXNlci5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3VzZXIvdXNlci91c2VyLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2F0dGFjaG1lbnQtbW9kYWwvYXR0YWNobWVudC1tb2RhbC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2F0dGFjaG1lbnQtbW9kYWwvYXR0YWNobWVudHMvYXR0YWNobWVudHMuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGlhZ3JhbXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RvYXN0cyc7XHJcblxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZmllbGRzLXJlbmRlcmVyL2R5bmFtaWMtZmllbGRzLXJlbmRlcmVyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHluYW1pYy1maWVsZHMtcmVuZGVyZXIvZHluYW1pYy1maWVsZHMtcmVuZGVyZXIvZHluYW1pYy1maWVsZHMtcmVuZGVyZXIuY29tcG9uZW50JztcclxuXHJcbi8vIGV4cG9ydCBhbGwgZnJvbSBzaGFyZWQgbW9kdWxlXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC9jb21wb25lbnRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbXBvbmVudHMvaXRlbS1saXN0L2l0ZW0tbGlzdC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvY29tcG9uZW50cy9uby1kYXRhL25vLWRhdGEuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbXBvbmVudHMvcmVhZC1tb3JlL3JlYWQtbW9yZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQvY29tcG9uZW50cy9zZWFyY2gtYXV0b2NvbXBsZXRlL3NlYXJjaC1hdXRvY29tcGxldGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2NvbXBvbmVudHMvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC9jb21wb25lbnRzL3VzZXItY2FyZC91c2VyLWNhcmQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkL2xpYnJhcnlTaGFyZWQubW9kdWxlJztcclxuXHJcbi8vIGV4cG9ydCBhbGwgZnJvbSBzaGFyZWQgc2VydmljZXMgbW9kdWxlXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy9nbG9iYWwtYWRtaW4uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy9zaGFyZWQtc2VydmljZXMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkLXNlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC1zZXJ2aWNlcy9hcGlzLWVycm9ycy1tZXNzYWdlcy5zZXJ2aWNlJztcclxuXHJcbi8vIGV4cG9ydCBhbGwgZnJvbSBjb3JlIG1vZHVsZVxyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL2FkYXB0ZXJzL2FkYXB0ZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvZW51bXMvbGFuZ3VhZ2UuZW51bSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvZW52L2luZGV4JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9tb2RlbHMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzLyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvY2FsbEFwaS9jYWxsLWFwaS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9leHRlbnNpb24vYWN0aW9uLmV4dGVuc2lvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2V4dGVuc2lvbi9jb21wb25lbnQtcmVnaXN0ZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvZXh0ZW5zaW9uL2V4dGVuaW9uLXV0aWxzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS9zZXJ2aWNlcy9leHRlbnNpb24vZXh0ZW5zaW9uLWVsZW1lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2V4dGVuc2lvbi9leHRlbnNpb24tbG9hZGVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL2V4dGVuc2lvbi9leHRlbnNpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvaW5pdGlhbGl6YXRpb24vaW5pdGlhbGl6YXRpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvbG9jYWxTdG9yYWcvbG9jYWwtc3RvcmFnLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL251eGVvL251eGVvLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL3JvbGVzL3JvbGVzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0ZS1sb2FkZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvdHJhbnNsYXRpb24vdHJhbnNsYXRpb24uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvcmUvc2VydmljZXMvdXNlci91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3V0aWxpdGllcy9tb21lbnQtZGF0ZS1hZGFwdGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29yZS91dGlsaXRpZXMvdXRpbGl0eS5zZXJ2aWNlJztcclxuXHJcbi8vIGV4cG9ydCBhbGwgcGlwZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvZmlsZS1zaXplLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9oaWpyaS1kYXRlLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9sb2NhbGl6ZWQtZGF0ZS5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMvbXVsdGktdmFsdWUucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL3BpcGVzLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL3NlY3VyZS1odG1sLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlcy9zZWN1cmUucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzL3RpbWUtYWdvLnBpcGUnO1xyXG5cclxuLy9leHBvcnQgYWxsIGRpcmVjdGl2ZXNcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlL2FwcC1oYXMtcm9sZS9hcHAtaGFzLXJvbGUuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlL2NsaWNrT3V0U2lkZS9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZS9kaXJlY3RpdmUubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlL2RyYWctYW5kLWRyb3AvZHJhZy1hbmQtZHJvcC5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmUvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlL3J0bC9zZXQtZGlyLXJ0bC5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmUvcnRsL3NldC1ydGwuZGlyZWN0aXZlJztcclxuXHJcbi8vZXhwb3J0IGFsbCBjb25maWd1cmF0aW9uXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbmZpZ3VyYXRpb24vYXBwLWNvbmZpZy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29uZmlndXJhdGlvbi9oZWxwZXJzL2FwcC1pbml0aWFsaXplcic7XHJcblxyXG4vLyBFdmFsXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZS9wZXJtaXNzaW9ucy9ldmFsdWF0b3JzLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jb21tZW50cy9zZXJ2aWNlcy9jb21tZW50LWFwaS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZC9kaXJlY3RpdmVzJ1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb3JlL3Rva2Vucyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbmRmLWRhdGVwaWNrZXInO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25kZi1wYW5lbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbmRmLXRhYnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25vLWRhdGEtZm91bmQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3JlcG9ydHMvY2hhcnRzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9yZXBvcnRzL25kZi1yZXBvcnRzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9yZXBvcnRzL2NoYXJ0LXBhbmVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9za2VsZXRvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGVzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9uZGYtY29uZmlnLWVkaXRvcic7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbmRmLWZpbHRlcnMnXHJcbiJdfQ==