@acorex/platform 18.1.4 → 18.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (485) hide show
  1. package/common/lib/app/app-startup.service.d.ts +16 -0
  2. package/common/lib/app/application.types.d.ts +4 -2
  3. package/common/lib/app/index.d.ts +1 -0
  4. package/common/lib/common.module.d.ts +4 -1
  5. package/common/lib/configs/app.config.d.ts +1 -0
  6. package/common/lib/data/data-provider.types.d.ts +1 -0
  7. package/common/lib/data/data.types.d.ts +14 -0
  8. package/common/lib/data/dexie-storage.service.d.ts +7 -5
  9. package/common/lib/data/entity-data-seeder.d.ts +12 -0
  10. package/common/lib/data/entity-storage-service.d.ts +66 -0
  11. package/common/lib/data/index.d.ts +3 -2
  12. package/common/lib/layout/menu/index.d.ts +2 -0
  13. package/common/lib/layout/menu/menu.provider.d.ts +15 -0
  14. package/common/lib/layout/menu/menu.service.d.ts +12 -0
  15. package/common/lib/layout/menu/menu.types.d.ts +8 -1
  16. package/common/lib/layout/theme/components/slots/index.d.ts +0 -1
  17. package/common/lib/layout/theme/store/admin-layout.actions.d.ts +0 -1
  18. package/common/lib/layout/theme/store/admin-layout.effects.d.ts +1 -2
  19. package/common/lib/layout/theme/store/admin-layout.reducers.d.ts +0 -5
  20. package/common/lib/layout/theme/store/admin-layout.selectors.d.ts +0 -1
  21. package/common/lib/layout/theme/store/admin-layout.state.d.ts +0 -3
  22. package/common/lib/schema/widgets/common-widget-filter/boolean-widget-filter.component.d.ts +1 -1
  23. package/common/lib/schema/widgets/dateTime/dateTime-widget-filter.component.d.ts +2 -0
  24. package/common/lib/schema/widgets/lookup/lookup-widget-edit.component.d.ts +1 -0
  25. package/common/lib/settings/index.d.ts +1 -1
  26. package/common/lib/settings/settings.provider.d.ts +7 -0
  27. package/common/lib/settings/settings.service.d.ts +8 -4
  28. package/common/lib/settings/settings.types.d.ts +2 -3
  29. package/common/lib/store/common.actions.d.ts +1 -2
  30. package/common/lib/store/common.effects.d.ts +5 -3
  31. package/common/lib/workflows/common.workflow.d.ts +2 -0
  32. package/core/utils/data-conditioner.d.ts +2 -5
  33. package/esm2022/common/lib/app/app-startup.service.mjs +40 -0
  34. package/esm2022/common/lib/app/application.types.mjs +1 -1
  35. package/esm2022/common/lib/app/index.mjs +2 -1
  36. package/esm2022/common/lib/common.module.mjs +56 -19
  37. package/esm2022/common/lib/configs/app.config.mjs +2 -1
  38. package/esm2022/common/lib/data/data-provider.types.mjs +1 -1
  39. package/esm2022/common/lib/data/data.types.mjs +2 -0
  40. package/esm2022/common/lib/data/dexie-storage.service.mjs +98 -4
  41. package/esm2022/common/lib/data/entity-data-seeder.mjs +25 -0
  42. package/esm2022/common/lib/data/entity-storage-service.mjs +63 -0
  43. package/esm2022/common/lib/data/index.mjs +4 -3
  44. package/esm2022/common/lib/layout/menu/index.mjs +3 -1
  45. package/esm2022/common/lib/layout/menu/menu.provider.mjs +60 -0
  46. package/esm2022/common/lib/layout/menu/menu.service.mjs +73 -0
  47. package/esm2022/common/lib/layout/menu/menu.types.mjs +1 -1
  48. package/esm2022/common/lib/layout/theme/components/slots/index.mjs +1 -2
  49. package/esm2022/common/lib/layout/theme/store/admin-layout.actions.mjs +1 -2
  50. package/esm2022/common/lib/layout/theme/store/admin-layout.effects.mjs +6 -14
  51. package/esm2022/common/lib/layout/theme/store/admin-layout.reducers.mjs +24 -21
  52. package/esm2022/common/lib/layout/theme/store/admin-layout.selectors.mjs +1 -2
  53. package/esm2022/common/lib/layout/theme/store/admin-layout.state.mjs +1 -4
  54. package/esm2022/common/lib/schema/widgets/avatar/avatar-widget-edit.component.mjs +8 -2
  55. package/esm2022/common/lib/schema/widgets/common-widget-filter/boolean-widget-filter.component.mjs +15 -9
  56. package/esm2022/common/lib/schema/widgets/common-widget-filter/number-widget-filter.component.mjs +2 -2
  57. package/esm2022/common/lib/schema/widgets/common-widget-filter/string-widget-filter.component.mjs +2 -2
  58. package/esm2022/common/lib/schema/widgets/dateTime/dateTime-widget-filter.component.mjs +64 -15
  59. package/esm2022/common/lib/schema/widgets/gallery/gallery-widget-edit.component.mjs +3 -3
  60. package/esm2022/common/lib/schema/widgets/gallery/gallery-widget-view.component.mjs +3 -3
  61. package/esm2022/common/lib/schema/widgets/lookup/lookup-widget-edit.component.mjs +2 -2
  62. package/esm2022/common/lib/schema/widgets/lookup/lookup-widget-filter.component.mjs +44 -16
  63. package/esm2022/common/lib/schema/widgets/number/number-widget-edit.component.mjs +2 -2
  64. package/esm2022/common/lib/schema/widgets/selection-list/selection-list-widget-filter.component.mjs +10 -6
  65. package/esm2022/common/lib/settings/index.mjs +2 -2
  66. package/esm2022/common/lib/settings/settings.provider.mjs +35 -0
  67. package/esm2022/common/lib/settings/settings.service.mjs +40 -7
  68. package/esm2022/common/lib/settings/settings.types.mjs +1 -1
  69. package/esm2022/common/lib/store/common.actions.mjs +2 -3
  70. package/esm2022/common/lib/store/common.effects.mjs +13 -10
  71. package/esm2022/common/lib/workflows/common.workflow.mjs +7 -4
  72. package/esm2022/core/utils/data-conditioner.mjs +3 -3
  73. package/esm2022/layout/builder/lib/builder/builder.service.mjs +11 -6
  74. package/esm2022/layout/builder/lib/builder/widget-catalog.mjs +2 -1
  75. package/esm2022/layout/builder/lib/builder/widget-container.component.mjs +12 -8
  76. package/esm2022/layout/builder/lib/builder/widget-renderer.component.directive.mjs +34 -11
  77. package/esm2022/layout/builder/lib/builder/widget.types.mjs +21 -19
  78. package/esm2022/layout/designer/index.mjs +3 -1
  79. package/esm2022/layout/designer/lib/designer/components/add-widget-button/add-widget-line-button.component.mjs +49 -0
  80. package/esm2022/layout/designer/lib/designer/components/add-widget-button/add-widget-mini-button.component.mjs +53 -0
  81. package/esm2022/layout/designer/lib/designer/components/add-widget-button/index.mjs +4 -0
  82. package/esm2022/layout/designer/lib/designer/components/board/board.component.mjs +11 -3
  83. package/esm2022/layout/designer/lib/designer/components/drawers/data-sources/data-sources.component.mjs +1 -1
  84. package/esm2022/layout/designer/lib/designer/components/header-menu/header-menu.component.mjs +66 -5
  85. package/esm2022/layout/designer/lib/designer/components/size-mode/view-size-toolbar.component.mjs +54 -0
  86. package/esm2022/layout/designer/lib/designer/components/widget-picker/widget-picker.component.mjs +40 -16
  87. package/esm2022/layout/designer/lib/designer/designer.component.mjs +18 -57
  88. package/esm2022/layout/designer/lib/designer/index.mjs +3 -3
  89. package/esm2022/layout/designer/lib/designer/shared/designer-connector.service.mjs +1 -1
  90. package/esm2022/layout/designer/lib/designer/shared/designer.service.mjs +28 -8
  91. package/esm2022/layout/designer/lib/designer/shared/designer.types.mjs +6 -0
  92. package/esm2022/layout/designer/lib/designer/shared/widget-designer-renderer.directive.mjs +2 -3
  93. package/esm2022/layout/designer/lib/preview/preview-frame.component.mjs +75 -0
  94. package/esm2022/layout/designer/lib/preview/preview-viewer.component.mjs +58 -0
  95. package/esm2022/layout/designer/lib/preview/preview.component.mjs +67 -9
  96. package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +3 -3
  97. package/esm2022/layout/entity/lib/entity-detail-list.viewmodel.mjs +48 -36
  98. package/esm2022/layout/entity/lib/entity-master-list.viewmodel.mjs +5 -6
  99. package/esm2022/layout/entity/lib/entity-master-single.viewmodel.mjs +1 -2
  100. package/esm2022/layout/entity/lib/entity-registery.service.mjs +5 -5
  101. package/esm2022/layout/entity/lib/entity.config.mjs +28 -2
  102. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.mjs +5 -5
  103. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.component.mjs +45 -9
  104. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.viewmodel.mjs +2 -2
  105. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.mjs +4 -4
  106. package/esm2022/layout/entity/lib/widgets/widget-selector/widget-selector-widget.config.mjs +2 -1
  107. package/esm2022/layout/entity/lib/workflows/create-entity.workflow.mjs +3 -3
  108. package/esm2022/layout/entity/lib/workflows/delete-entity.workflow.mjs +18 -9
  109. package/esm2022/layout/entity/lib/workflows/modify-section.workflow.mjs +7 -5
  110. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/entity-details-view.component.mjs +3 -3
  111. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/entity-custom-view/entity-custom-view.component.mjs +1 -1
  112. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-conditions/list-view-option-conditions.component.mjs +1 -1
  113. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +3 -3
  114. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/list-view.config.mjs +9 -5
  115. package/esm2022/layouts/lib/admin/entity-layout/workflows/delete-entity.workflow.mjs +2 -2
  116. package/esm2022/layouts/lib/admin/entity-layout/workflows/modify-entity.workflow.mjs +5 -3
  117. package/esm2022/themes/default/lib/default.module.mjs +7 -3
  118. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.mjs +10 -7
  119. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +27 -10
  120. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-modify-view/entity-master-modify-view.component.mjs +3 -3
  121. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.mjs +11 -8
  122. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/overview/entity-single-overview.component.mjs +1 -1
  123. package/esm2022/themes/default/lib/layouts/root-layout/components/header/header.component.mjs +3 -3
  124. package/esm2022/themes/default/lib/layouts/root-layout/components/menu/root-menu.component.mjs +39 -0
  125. package/esm2022/themes/default/lib/layouts/root-layout/index.mjs +2 -1
  126. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.component.mjs +13 -26
  127. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.module.mjs +5 -2
  128. package/esm2022/themes/shared/index.mjs +3 -1
  129. package/esm2022/themes/shared/lib/comments/comment-list-view.component.mjs +28 -20
  130. package/esm2022/themes/shared/lib/comments/comments.service.mjs +3 -2
  131. package/esm2022/themes/shared/lib/comments/comments.type.mjs +1 -1
  132. package/esm2022/themes/shared/lib/components/theme-slot.component.mjs +114 -0
  133. package/esm2022/themes/shared/lib/services/theme.service.mjs +86 -0
  134. package/esm2022/themes/shared/lib/shared.module.mjs +9 -7
  135. package/esm2022/widgets/lib/widgets/actions/button/button-widget-designer.component.mjs +2 -2
  136. package/esm2022/widgets/lib/widgets/actions/button/button-widget-view.component.mjs +1 -2
  137. package/esm2022/widgets/lib/widgets/actions/button/button-widget.config.mjs +3 -2
  138. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-edit.component.mjs +3 -3
  139. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-view.component.mjs +3 -3
  140. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.mjs +4 -4
  141. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.mjs +1 -1
  142. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-view.component.mjs +35 -23
  143. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-column.component.mjs +26 -5
  144. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-designer.component.mjs +3 -2
  145. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-edit.component.mjs +3 -2
  146. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-print.component.mjs +3 -3
  147. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-view.component.mjs +4 -3
  148. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-column.component.mjs +18 -4
  149. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-edit.component.mjs +20 -23
  150. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget.config.mjs +6 -29
  151. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.mjs +18 -8
  152. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-print.component.mjs +3 -3
  153. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-edit.component.mjs +1 -1
  154. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-view.component.mjs +1 -1
  155. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-edit.component.mjs +5 -4
  156. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-view.component.mjs +5 -5
  157. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.mjs +16 -11
  158. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-view.component.mjs +15 -19
  159. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget.config.mjs +3 -2
  160. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-edit.component.mjs +3 -3
  161. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-print.component.mjs +3 -2
  162. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-view.component.mjs +68 -28
  163. package/esm2022/widgets/lib/widgets/index.mjs +2 -1
  164. package/esm2022/widgets/lib/widgets/layout/block/block-widget-designer.component.mjs +7 -8
  165. package/esm2022/widgets/lib/widgets/layout/block/block-widget-view.component.mjs +36 -15
  166. package/esm2022/widgets/lib/widgets/layout/block/block-widget.config.mjs +3 -2
  167. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.mjs +11 -10
  168. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.mjs +3 -3
  169. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget.config.mjs +6 -2
  170. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-designer.component.mjs +7 -7
  171. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-view.component.mjs +5 -4
  172. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-designer.component.mjs +8 -19
  173. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.mjs +5 -4
  174. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-designer.component.mjs +2 -1
  175. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-view.component.mjs +5 -4
  176. package/esm2022/widgets/lib/widgets/layout/page/page-widget-designer.component.mjs +95 -9
  177. package/esm2022/widgets/lib/widgets/layout/page/page-widget-view.component.mjs +3 -3
  178. package/esm2022/widgets/lib/widgets/layout/page/page-widget.config.mjs +18 -3
  179. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-designer.component.mjs +10 -10
  180. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-edit.component.mjs +56 -17
  181. package/esm2022/widgets/lib/widgets/layout/template/index.mjs +5 -0
  182. package/esm2022/widgets/lib/widgets/layout/template/template-widget-designer.component.mjs +70 -0
  183. package/esm2022/widgets/lib/widgets/layout/template/template-widget-edit.component.mjs +55 -0
  184. package/esm2022/widgets/lib/widgets/layout/template/template-widget-view.component.mjs +56 -0
  185. package/esm2022/widgets/lib/widgets/layout/template/template-widget.config.mjs +30 -0
  186. package/esm2022/widgets/lib/widgets/layout/template/template.provider.mjs +41 -0
  187. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget.config.mjs +3 -2
  188. package/esm2022/widgets/lib/widgets.module.mjs +4 -1
  189. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  190. package/fesm2022/{acorex-platform-common-avatar-widget-edit.component-CfqY7kKi.mjs → acorex-platform-common-avatar-widget-edit.component-WAlG5E_9.mjs} +17 -8
  191. package/fesm2022/acorex-platform-common-avatar-widget-edit.component-WAlG5E_9.mjs.map +1 -0
  192. package/fesm2022/{acorex-platform-common-avatar-widget-view.component-DXC7INdQ.mjs → acorex-platform-common-avatar-widget-view.component-DRyB3UWf.mjs} +8 -6
  193. package/fesm2022/acorex-platform-common-avatar-widget-view.component-DRyB3UWf.mjs.map +1 -0
  194. package/fesm2022/{acorex-platform-common-boolean-widget-filter.component-DLGnsXy4.mjs → acorex-platform-common-boolean-widget-filter.component-DY4oTjC-.mjs} +19 -12
  195. package/fesm2022/acorex-platform-common-boolean-widget-filter.component-DY4oTjC-.mjs.map +1 -0
  196. package/fesm2022/{acorex-platform-common-change-password.component-BBPFxmB6.mjs → acorex-platform-common-change-password.component-Djd4SeNv.mjs} +6 -6
  197. package/fesm2022/{acorex-platform-common-change-password.component-BBPFxmB6.mjs.map → acorex-platform-common-change-password.component-Djd4SeNv.mjs.map} +1 -1
  198. package/fesm2022/{acorex-platform-common-checkbox-widget-column.component-Ch2bdAjo.mjs → acorex-platform-common-checkbox-widget-column.component-NSXcrUwU.mjs} +10 -8
  199. package/fesm2022/{acorex-platform-common-checkbox-widget-column.component-Ch2bdAjo.mjs.map → acorex-platform-common-checkbox-widget-column.component-NSXcrUwU.mjs.map} +1 -1
  200. package/fesm2022/{acorex-platform-common-checkbox-widget-edit.component-DOGMfGby.mjs → acorex-platform-common-checkbox-widget-edit.component-BU7qV5Cm.mjs} +8 -6
  201. package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-BU7qV5Cm.mjs.map +1 -0
  202. package/fesm2022/{acorex-platform-common-checkbox-widget-view.component-BhGOtblX.mjs → acorex-platform-common-checkbox-widget-view.component-2Du2IzDS.mjs} +10 -8
  203. package/fesm2022/{acorex-platform-common-checkbox-widget-view.component-BhGOtblX.mjs.map → acorex-platform-common-checkbox-widget-view.component-2Du2IzDS.mjs.map} +1 -1
  204. package/fesm2022/{acorex-platform-common-dateTime-widget-column.component-BkUDt0Kj.mjs → acorex-platform-common-dateTime-widget-column.component-Dd7fgwu3.mjs} +8 -6
  205. package/fesm2022/acorex-platform-common-dateTime-widget-column.component-Dd7fgwu3.mjs.map +1 -0
  206. package/fesm2022/{acorex-platform-common-dateTime-widget-edit.component-DEqsapFH.mjs → acorex-platform-common-dateTime-widget-edit.component-B4AelVJp.mjs} +11 -8
  207. package/fesm2022/{acorex-platform-common-dateTime-widget-edit.component-DEqsapFH.mjs.map → acorex-platform-common-dateTime-widget-edit.component-B4AelVJp.mjs.map} +1 -1
  208. package/fesm2022/{acorex-platform-common-dateTime-widget-filter.component-CqddjYjP.mjs → acorex-platform-common-dateTime-widget-filter.component-Ytm-TwOP.mjs} +68 -18
  209. package/fesm2022/acorex-platform-common-dateTime-widget-filter.component-Ytm-TwOP.mjs.map +1 -0
  210. package/fesm2022/{acorex-platform-common-dateTime-widget-view.component-BKUPKE9M.mjs → acorex-platform-common-dateTime-widget-view.component-BKdqOPkb.mjs} +8 -6
  211. package/fesm2022/{acorex-platform-common-dateTime-widget-view.component-BKUPKE9M.mjs.map → acorex-platform-common-dateTime-widget-view.component-BKdqOPkb.mjs.map} +1 -1
  212. package/fesm2022/{acorex-platform-common-email-widget-column.component-BOer2nZi.mjs → acorex-platform-common-email-widget-column.component-CDKqwlPD.mjs} +8 -6
  213. package/fesm2022/acorex-platform-common-email-widget-column.component-CDKqwlPD.mjs.map +1 -0
  214. package/fesm2022/{acorex-platform-common-email-widget-edit.component-BoKsGiEI.mjs → acorex-platform-common-email-widget-edit.component-BT2rJjaW.mjs} +11 -8
  215. package/fesm2022/acorex-platform-common-email-widget-edit.component-BT2rJjaW.mjs.map +1 -0
  216. package/fesm2022/{acorex-platform-common-email-widget-view.component-BZtK5dMd.mjs → acorex-platform-common-email-widget-view.component-DbhRWpB1.mjs} +8 -6
  217. package/fesm2022/{acorex-platform-common-email-widget-view.component-BZtK5dMd.mjs.map → acorex-platform-common-email-widget-view.component-DbhRWpB1.mjs.map} +1 -1
  218. package/fesm2022/{acorex-platform-common-file-widget-column.component-DpcUmwAT.mjs → acorex-platform-common-file-widget-column.component-8U76QgEQ.mjs} +7 -5
  219. package/fesm2022/acorex-platform-common-file-widget-column.component-8U76QgEQ.mjs.map +1 -0
  220. package/fesm2022/{acorex-platform-common-file-widget-edit.component-CNLXguLn.mjs → acorex-platform-common-file-widget-edit.component-OFmiYz_5.mjs} +10 -7
  221. package/fesm2022/{acorex-platform-common-file-widget-edit.component-CNLXguLn.mjs.map → acorex-platform-common-file-widget-edit.component-OFmiYz_5.mjs.map} +1 -1
  222. package/fesm2022/{acorex-platform-common-file-widget-filter.component-Dwt-LYWG.mjs → acorex-platform-common-file-widget-filter.component-ZLnpXMXK.mjs} +8 -6
  223. package/fesm2022/acorex-platform-common-file-widget-filter.component-ZLnpXMXK.mjs.map +1 -0
  224. package/fesm2022/{acorex-platform-common-file-widget-view.component-CjDhjHQR.mjs → acorex-platform-common-file-widget-view.component-BcrM4XrO.mjs} +10 -7
  225. package/fesm2022/{acorex-platform-common-file-widget-view.component-CjDhjHQR.mjs.map → acorex-platform-common-file-widget-view.component-BcrM4XrO.mjs.map} +1 -1
  226. package/fesm2022/{acorex-platform-common-gallery-widget-edit.component-CzKFKaPH.mjs → acorex-platform-common-gallery-widget-edit.component-pBBjrjDP.mjs} +14 -11
  227. package/fesm2022/{acorex-platform-common-gallery-widget-edit.component-CzKFKaPH.mjs.map → acorex-platform-common-gallery-widget-edit.component-pBBjrjDP.mjs.map} +1 -1
  228. package/fesm2022/{acorex-platform-common-gallery-widget-filter.component-B-KxKtY4.mjs → acorex-platform-common-gallery-widget-filter.component-Cp7t9ovC.mjs} +8 -6
  229. package/fesm2022/acorex-platform-common-gallery-widget-filter.component-Cp7t9ovC.mjs.map +1 -0
  230. package/fesm2022/{acorex-platform-common-gallery-widget-view.component-ca-JB8qW.mjs → acorex-platform-common-gallery-widget-view.component-CPS-h3cq.mjs} +13 -10
  231. package/fesm2022/{acorex-platform-common-gallery-widget-view.component-ca-JB8qW.mjs.map → acorex-platform-common-gallery-widget-view.component-CPS-h3cq.mjs.map} +1 -1
  232. package/fesm2022/{acorex-platform-common-largetext-widget-edit.component-DD7S5j12.mjs → acorex-platform-common-largetext-widget-edit.component-DA6r3rVA.mjs} +8 -6
  233. package/fesm2022/acorex-platform-common-largetext-widget-edit.component-DA6r3rVA.mjs.map +1 -0
  234. package/fesm2022/{acorex-platform-common-lookup-widget-column.component-BEZNLQZi.mjs → acorex-platform-common-lookup-widget-column.component-Cxv1yZvE.mjs} +8 -6
  235. package/fesm2022/acorex-platform-common-lookup-widget-column.component-Cxv1yZvE.mjs.map +1 -0
  236. package/fesm2022/{acorex-platform-common-lookup-widget-edit.component-D50jPeKP.mjs → acorex-platform-common-lookup-widget-edit.component-CUtGoAGX.mjs} +9 -7
  237. package/fesm2022/acorex-platform-common-lookup-widget-edit.component-CUtGoAGX.mjs.map +1 -0
  238. package/fesm2022/{acorex-platform-common-lookup-widget-filter.component-CZHDDnR3.mjs → acorex-platform-common-lookup-widget-filter.component-DJZqB3vj.mjs} +47 -17
  239. package/fesm2022/acorex-platform-common-lookup-widget-filter.component-DJZqB3vj.mjs.map +1 -0
  240. package/fesm2022/{acorex-platform-common-lookup-widget-view.component-CQCvJxgi.mjs → acorex-platform-common-lookup-widget-view.component-CghJK1C4.mjs} +8 -6
  241. package/fesm2022/acorex-platform-common-lookup-widget-view.component-CghJK1C4.mjs.map +1 -0
  242. package/fesm2022/{acorex-platform-common-map-widget-edit.component-OanYRQ3B.mjs → acorex-platform-common-map-widget-edit.component-oSb3kVMc.mjs} +8 -6
  243. package/fesm2022/acorex-platform-common-map-widget-edit.component-oSb3kVMc.mjs.map +1 -0
  244. package/fesm2022/{acorex-platform-common-map-widget-view.component-BWdndMYJ.mjs → acorex-platform-common-map-widget-view.component-BrYwr914.mjs} +8 -6
  245. package/fesm2022/{acorex-platform-common-map-widget-view.component-BWdndMYJ.mjs.map → acorex-platform-common-map-widget-view.component-BrYwr914.mjs.map} +1 -1
  246. package/fesm2022/{acorex-platform-common-messenger-widget-column.component-BHP6R3OI.mjs → acorex-platform-common-messenger-widget-column.component-DIJAffxy.mjs} +8 -6
  247. package/fesm2022/acorex-platform-common-messenger-widget-column.component-DIJAffxy.mjs.map +1 -0
  248. package/fesm2022/{acorex-platform-common-messenger-widget-edit.component-B7ycb6tX.mjs → acorex-platform-common-messenger-widget-edit.component-DpGvbM4a.mjs} +10 -7
  249. package/fesm2022/{acorex-platform-common-messenger-widget-edit.component-B7ycb6tX.mjs.map → acorex-platform-common-messenger-widget-edit.component-DpGvbM4a.mjs.map} +1 -1
  250. package/fesm2022/{acorex-platform-common-messenger-widget-view.component-Dz5X-FS5.mjs → acorex-platform-common-messenger-widget-view.component-CeuDEI-j.mjs} +8 -6
  251. package/fesm2022/{acorex-platform-common-messenger-widget-view.component-Dz5X-FS5.mjs.map → acorex-platform-common-messenger-widget-view.component-CeuDEI-j.mjs.map} +1 -1
  252. package/fesm2022/{acorex-platform-common-number-widget-edit.component-XSWI6466.mjs → acorex-platform-common-number-widget-edit.component-B1YGwr60.mjs} +11 -9
  253. package/fesm2022/acorex-platform-common-number-widget-edit.component-B1YGwr60.mjs.map +1 -0
  254. package/fesm2022/{acorex-platform-common-number-widget-filter.component-BOT9wPJ5.mjs → acorex-platform-common-number-widget-filter.component-BmmgPy1w.mjs} +12 -9
  255. package/fesm2022/acorex-platform-common-number-widget-filter.component-BmmgPy1w.mjs.map +1 -0
  256. package/fesm2022/{acorex-platform-common-number-widget-view.component-CP5aboLU.mjs → acorex-platform-common-number-widget-view.component-bqylVHOz.mjs} +8 -6
  257. package/fesm2022/acorex-platform-common-number-widget-view.component-bqylVHOz.mjs.map +1 -0
  258. package/fesm2022/{acorex-platform-common-password-widget-column.component-CGxTbd_S.mjs → acorex-platform-common-password-widget-column.component-DVdZh7s4.mjs} +8 -6
  259. package/fesm2022/{acorex-platform-common-password-widget-column.component-CGxTbd_S.mjs.map → acorex-platform-common-password-widget-column.component-DVdZh7s4.mjs.map} +1 -1
  260. package/fesm2022/{acorex-platform-common-password-widget-edit.component-CHQ_Kp4t.mjs → acorex-platform-common-password-widget-edit.component-OjHwMT5d.mjs} +12 -10
  261. package/fesm2022/acorex-platform-common-password-widget-edit.component-OjHwMT5d.mjs.map +1 -0
  262. package/fesm2022/{acorex-platform-common-password-widget-view.component-BQ9jlt6g.mjs → acorex-platform-common-password-widget-view.component-BeSk1OgU.mjs} +9 -6
  263. package/fesm2022/{acorex-platform-common-password-widget-view.component-BQ9jlt6g.mjs.map → acorex-platform-common-password-widget-view.component-BeSk1OgU.mjs.map} +1 -1
  264. package/fesm2022/{acorex-platform-common-phone-widget-column.component-RJp6wHul.mjs → acorex-platform-common-phone-widget-column.component-DOfzGKBi.mjs} +8 -6
  265. package/fesm2022/acorex-platform-common-phone-widget-column.component-DOfzGKBi.mjs.map +1 -0
  266. package/fesm2022/{acorex-platform-common-phone-widget-edit.component-BB5wTbjd.mjs → acorex-platform-common-phone-widget-edit.component-BJ-iEyLP.mjs} +10 -8
  267. package/fesm2022/{acorex-platform-common-phone-widget-edit.component-BB5wTbjd.mjs.map → acorex-platform-common-phone-widget-edit.component-BJ-iEyLP.mjs.map} +1 -1
  268. package/fesm2022/{acorex-platform-common-phone-widget-view.component-SIzFWfjV.mjs → acorex-platform-common-phone-widget-view.component-DW4AHCE6.mjs} +8 -6
  269. package/fesm2022/{acorex-platform-common-phone-widget-view.component-SIzFWfjV.mjs.map → acorex-platform-common-phone-widget-view.component-DW4AHCE6.mjs.map} +1 -1
  270. package/fesm2022/{acorex-platform-common-rich-text-widget-column.component-Ced0WqvI.mjs → acorex-platform-common-rich-text-widget-column.component-2zZBG6Ze.mjs} +8 -6
  271. package/fesm2022/{acorex-platform-common-rich-text-widget-column.component-Ced0WqvI.mjs.map → acorex-platform-common-rich-text-widget-column.component-2zZBG6Ze.mjs.map} +1 -1
  272. package/fesm2022/{acorex-platform-common-rich-text-widget-edit.component-Do3YcmKg.mjs → acorex-platform-common-rich-text-widget-edit.component-BJveJgHZ.mjs} +8 -5
  273. package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-BJveJgHZ.mjs.map +1 -0
  274. package/fesm2022/{acorex-platform-common-rich-text-widget-view.component-BIRyPRtw.mjs → acorex-platform-common-rich-text-widget-view.component-CiViWpBX.mjs} +8 -6
  275. package/fesm2022/acorex-platform-common-rich-text-widget-view.component-CiViWpBX.mjs.map +1 -0
  276. package/fesm2022/{acorex-platform-common-selection-list-widget-column.component-DxeK2RPc.mjs → acorex-platform-common-selection-list-widget-column.component-D9lsVFgo.mjs} +8 -6
  277. package/fesm2022/acorex-platform-common-selection-list-widget-column.component-D9lsVFgo.mjs.map +1 -0
  278. package/fesm2022/{acorex-platform-common-selection-list-widget-edit.component-CBLEeILz.mjs → acorex-platform-common-selection-list-widget-edit.component-ocEwyUP7.mjs} +10 -8
  279. package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-ocEwyUP7.mjs.map +1 -0
  280. package/fesm2022/{acorex-platform-common-selection-list-widget-filter.component-B01t7mso.mjs → acorex-platform-common-selection-list-widget-filter.component-CS0f_jCx.mjs} +16 -12
  281. package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-CS0f_jCx.mjs.map +1 -0
  282. package/fesm2022/{acorex-platform-common-selection-list-widget-view.component-QJMp11dd.mjs → acorex-platform-common-selection-list-widget-view.component-C65lbpo_.mjs} +8 -6
  283. package/fesm2022/acorex-platform-common-selection-list-widget-view.component-C65lbpo_.mjs.map +1 -0
  284. package/fesm2022/{acorex-platform-common-signature-pad-widget-edit.component-BQiY7RIp.mjs → acorex-platform-common-signature-pad-widget-edit.component-DbfQSGxm.mjs} +10 -7
  285. package/fesm2022/{acorex-platform-common-signature-pad-widget-edit.component-BQiY7RIp.mjs.map → acorex-platform-common-signature-pad-widget-edit.component-DbfQSGxm.mjs.map} +1 -1
  286. package/fesm2022/{acorex-platform-common-signature-pad-widget-view.component-CEhRqgEn.mjs → acorex-platform-common-signature-pad-widget-view.component-CDY3JdP-.mjs} +8 -6
  287. package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-CDY3JdP-.mjs.map +1 -0
  288. package/fesm2022/{acorex-platform-common-string-widget-filter.component--L4PeRCB.mjs → acorex-platform-common-string-widget-filter.component-BW2ehdOx.mjs} +12 -9
  289. package/fesm2022/acorex-platform-common-string-widget-filter.component-BW2ehdOx.mjs.map +1 -0
  290. package/fesm2022/{acorex-platform-common-text-widget-column.component-ytX4OqZX.mjs → acorex-platform-common-text-widget-column.component-bhx0QWAX.mjs} +8 -6
  291. package/fesm2022/acorex-platform-common-text-widget-column.component-bhx0QWAX.mjs.map +1 -0
  292. package/fesm2022/{acorex-platform-common-text-widget-edit.component-CN7OyTfJ.mjs → acorex-platform-common-text-widget-edit.component-Cb1k59hs.mjs} +10 -7
  293. package/fesm2022/acorex-platform-common-text-widget-edit.component-Cb1k59hs.mjs.map +1 -0
  294. package/fesm2022/{acorex-platform-common-text-widget-view.component-B-R4-5Ra.mjs → acorex-platform-common-text-widget-view.component-CGwY9c2O.mjs} +8 -6
  295. package/fesm2022/{acorex-platform-common-text-widget-view.component-B-R4-5Ra.mjs.map → acorex-platform-common-text-widget-view.component-CGwY9c2O.mjs.map} +1 -1
  296. package/fesm2022/{acorex-platform-common-toggle-widget-column.component-B5NFRPgX.mjs → acorex-platform-common-toggle-widget-column.component-BxAwa7jw.mjs} +10 -8
  297. package/fesm2022/{acorex-platform-common-toggle-widget-column.component-B5NFRPgX.mjs.map → acorex-platform-common-toggle-widget-column.component-BxAwa7jw.mjs.map} +1 -1
  298. package/fesm2022/{acorex-platform-common-toggle-widget-edit.component-CLWHwf8V.mjs → acorex-platform-common-toggle-widget-edit.component-CT2fRAKm.mjs} +8 -5
  299. package/fesm2022/acorex-platform-common-toggle-widget-edit.component-CT2fRAKm.mjs.map +1 -0
  300. package/fesm2022/{acorex-platform-common-toggle-widget-view.component-Di2S7vub.mjs → acorex-platform-common-toggle-widget-view.component-9tquFHhE.mjs} +10 -8
  301. package/fesm2022/{acorex-platform-common-toggle-widget-view.component-Di2S7vub.mjs.map → acorex-platform-common-toggle-widget-view.component-9tquFHhE.mjs.map} +1 -1
  302. package/fesm2022/acorex-platform-common.mjs +652 -302
  303. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  304. package/fesm2022/acorex-platform-core.mjs +2 -2
  305. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  306. package/fesm2022/acorex-platform-layout-builder.mjs +71 -36
  307. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  308. package/fesm2022/acorex-platform-layout-designer.mjs +476 -72
  309. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  310. package/fesm2022/acorex-platform-layout-entity.mjs +149 -68
  311. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  312. package/fesm2022/acorex-platform-layouts-entity-create-view.component-CPGbLM4C.mjs.map +1 -1
  313. package/fesm2022/acorex-platform-layouts-entity-import-view.component-CZpEcVi9.mjs.map +1 -1
  314. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs.map +1 -1
  315. package/fesm2022/acorex-platform-layouts.mjs +16 -11
  316. package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
  317. package/fesm2022/acorex-platform-mocks.mjs.map +1 -1
  318. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  319. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-Q8eTfAVx.mjs → acorex-platform-themes-default-entity-master-create-view.component-i6vjEhti.mjs} +3 -3
  320. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-Q8eTfAVx.mjs.map → acorex-platform-themes-default-entity-master-create-view.component-i6vjEhti.mjs.map} +1 -1
  321. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-fZ6QEYcd.mjs → acorex-platform-themes-default-entity-master-list-view.component-BGKWaCth.mjs} +37 -20
  322. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BGKWaCth.mjs.map +1 -0
  323. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-BijYXMme.mjs → acorex-platform-themes-default-entity-master-modify-view.component-B3phYOIw.mjs} +5 -5
  324. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-B3phYOIw.mjs.map +1 -0
  325. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-Bnrabotu.mjs → acorex-platform-themes-default-entity-master-single-view.component-DyZHE0o-.mjs} +16 -13
  326. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DyZHE0o-.mjs.map +1 -0
  327. package/fesm2022/acorex-platform-themes-default-error-401.component-D5QQ2HAv.mjs.map +1 -1
  328. package/fesm2022/acorex-platform-themes-default-error-404.component-DSY_D3Iq.mjs.map +1 -1
  329. package/fesm2022/acorex-platform-themes-default-error-offline.component-B6wSkMdd.mjs.map +1 -1
  330. package/fesm2022/acorex-platform-themes-default.mjs +83 -56
  331. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  332. package/fesm2022/acorex-platform-themes-shared.mjs +225 -27
  333. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  334. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-B9bfVuC4.mjs → acorex-platform-widgets-button-widget-designer.component-M_JuDPbt.mjs} +2 -2
  335. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-M_JuDPbt.mjs.map +1 -0
  336. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-j1jG8pCr.mjs.map +1 -1
  337. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-DzGg-uFi.mjs.map +1 -1
  338. package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-tPk6Gylo.mjs → acorex-platform-widgets-checkbox-widget-view.component-CDA7Jwov.mjs} +35 -23
  339. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-CDA7Jwov.mjs.map +1 -0
  340. package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-Bb3aXCNZ.mjs → acorex-platform-widgets-color-box-widget-designer.component-DIvi0BtT.mjs} +3 -2
  341. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-DIvi0BtT.mjs.map +1 -0
  342. package/fesm2022/acorex-platform-widgets-contact-widget-filter.component-GTwK51nJ.mjs.map +1 -1
  343. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-BL_EAwUs.mjs +153 -0
  344. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-BL_EAwUs.mjs.map +1 -0
  345. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs.map +1 -1
  346. package/fesm2022/acorex-platform-widgets-template-widget-edit.component-gvAh-gH1.mjs +96 -0
  347. package/fesm2022/acorex-platform-widgets-template-widget-edit.component-gvAh-gH1.mjs.map +1 -0
  348. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-Bi9hlpvB.mjs.map +1 -1
  349. package/fesm2022/acorex-platform-widgets.mjs +563 -235
  350. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  351. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  352. package/layout/builder/lib/builder/builder.service.d.ts +1 -1
  353. package/layout/builder/lib/builder/widget-container.component.d.ts +3 -2
  354. package/layout/builder/lib/builder/widget-renderer.component.directive.d.ts +5 -1
  355. package/layout/builder/lib/builder/widget.types.d.ts +8 -5
  356. package/layout/designer/index.d.ts +2 -0
  357. package/layout/designer/lib/designer/components/add-widget-button/add-widget-line-button.component.d.ts +8 -0
  358. package/layout/designer/lib/designer/components/add-widget-button/add-widget-mini-button.component.d.ts +9 -0
  359. package/layout/designer/lib/designer/components/add-widget-button/index.d.ts +3 -0
  360. package/layout/designer/lib/designer/components/board/board.component.d.ts +2 -0
  361. package/layout/designer/lib/designer/components/drawers/data-sources/data-sources.component.d.ts +1 -1
  362. package/layout/designer/lib/designer/components/header-menu/header-menu.component.d.ts +1 -0
  363. package/layout/designer/lib/designer/components/size-mode/view-size-toolbar.component.d.ts +6 -0
  364. package/layout/designer/lib/designer/components/widget-picker/widget-picker.component.d.ts +4 -2
  365. package/layout/designer/lib/designer/designer.component.d.ts +1 -1
  366. package/layout/designer/lib/designer/index.d.ts +2 -2
  367. package/layout/designer/lib/designer/shared/designer-connector.service.d.ts +1 -1
  368. package/layout/designer/lib/designer/shared/designer.service.d.ts +8 -3
  369. package/layout/designer/lib/preview/preview-frame.component.d.ts +8 -0
  370. package/layout/designer/lib/preview/preview-viewer.component.d.ts +14 -0
  371. package/layout/designer/lib/preview/preview.component.d.ts +17 -3
  372. package/layout/entity/lib/entity-detail-list.viewmodel.d.ts +4 -4
  373. package/layout/entity/lib/entity-master-create.viewmodel.d.ts +1 -1
  374. package/layout/entity/lib/entity-master-list.viewmodel.d.ts +2 -1
  375. package/layout/entity/lib/entity-master-single.viewmodel.d.ts +1 -5
  376. package/layout/entity/lib/entity-master-update.viewmodel.d.ts +1 -1
  377. package/layout/entity/lib/entity-registery.service.d.ts +1 -1
  378. package/layout/entity/lib/entity.config.d.ts +7 -0
  379. package/layout/entity/lib/entity.viewmodel.d.ts +1 -1
  380. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.d.ts +2 -1
  381. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.d.ts +2 -1
  382. package/layout/entity/lib/workflows/delete-entity.workflow.d.ts +1 -0
  383. package/layout/entity/lib/workflows/modify-section.workflow.d.ts +1 -0
  384. package/layouts/lib/admin/entity-layout/workflows/modify-entity.workflow.d.ts +1 -0
  385. package/package.json +13 -13
  386. package/themes/default/lib/default.module.d.ts +2 -1
  387. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.d.ts +3 -1
  388. package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.d.ts +1 -1
  389. package/themes/default/lib/layouts/root-layout/components/menu/root-menu.component.d.ts +22 -0
  390. package/themes/default/lib/layouts/root-layout/index.d.ts +1 -0
  391. package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +1 -4
  392. package/themes/default/lib/layouts/root-layout/root-layout.module.d.ts +17 -16
  393. package/themes/shared/index.d.ts +2 -0
  394. package/themes/shared/lib/comments/comment-list-view.component.d.ts +16 -11
  395. package/themes/shared/lib/comments/comments.service.d.ts +4 -7
  396. package/themes/shared/lib/comments/comments.type.d.ts +24 -20
  397. package/themes/shared/lib/components/theme-slot.component.d.ts +23 -0
  398. package/themes/shared/lib/services/theme.service.d.ts +21 -0
  399. package/themes/shared/lib/shared.module.d.ts +5 -4
  400. package/widgets/lib/widgets/advance/map/map-box-widget-view.component.d.ts +1 -1
  401. package/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.d.ts +1 -1
  402. package/widgets/lib/widgets/advance/signature/signature-pad-widget-view.component.d.ts +1 -1
  403. package/widgets/lib/widgets/editors/color/color-box-widget-column.component.d.ts +3 -0
  404. package/widgets/lib/widgets/editors/color/color-box-widget-designer.component.d.ts +1 -1
  405. package/widgets/lib/widgets/editors/color/color-box-widget-edit.component.d.ts +1 -1
  406. package/widgets/lib/widgets/editors/color/color-box-widget-view.component.d.ts +1 -1
  407. package/widgets/lib/widgets/editors/contact/contact-widget-column.component.d.ts +2 -0
  408. package/widgets/lib/widgets/editors/contact/contact-widget-edit.component.d.ts +1 -1
  409. package/widgets/lib/widgets/editors/contact/contact-widget-view.component.d.ts +1 -1
  410. package/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.d.ts +3 -0
  411. package/widgets/lib/widgets/editors/number/number-box-widget-edit.component.d.ts +1 -0
  412. package/widgets/lib/widgets/editors/number/number-box-widget-view.component.d.ts +1 -1
  413. package/widgets/lib/widgets/editors/password/password-box-widget-view.component.d.ts +1 -1
  414. package/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.d.ts +3 -2
  415. package/widgets/lib/widgets/editors/toggle/toggle-widget-edit.component.d.ts +1 -1
  416. package/widgets/lib/widgets/editors/toggle/toggle-widget-print.component.d.ts +1 -1
  417. package/widgets/lib/widgets/editors/toggle/toggle-widget-view.component.d.ts +1 -1
  418. package/widgets/lib/widgets/index.d.ts +1 -0
  419. package/widgets/lib/widgets/layout/block/block-widget-view.component.d.ts +4 -2
  420. package/widgets/lib/widgets/layout/grid/grid-widget-view.component.d.ts +1 -1
  421. package/widgets/lib/widgets/layout/grid-item/grid-item-widget-designer.component.d.ts +0 -2
  422. package/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.d.ts +1 -1
  423. package/widgets/lib/widgets/layout/grid-row/grid-row-widget-view.component.d.ts +1 -1
  424. package/widgets/lib/widgets/layout/page/page-widget-designer.component.d.ts +11 -1
  425. package/widgets/lib/widgets/layout/repeater/repeater-widget-edit.component.d.ts +4 -3
  426. package/widgets/lib/widgets/layout/template/index.d.ts +4 -0
  427. package/widgets/lib/widgets/layout/template/template-widget-designer.component.d.ts +11 -0
  428. package/widgets/lib/widgets/layout/template/template-widget-edit.component.d.ts +10 -0
  429. package/widgets/lib/widgets/layout/template/template-widget-view.component.d.ts +10 -0
  430. package/widgets/lib/widgets/layout/template/template-widget.config.d.ts +7 -0
  431. package/widgets/lib/widgets/layout/template/template.provider.d.ts +21 -0
  432. package/common/lib/data/entity-data-provider.d.ts +0 -14
  433. package/common/lib/data/storage-service.d.ts +0 -22
  434. package/common/lib/layout/theme/components/slots/theme-slot.component.d.ts +0 -8
  435. package/common/lib/settings/settings.loader.d.ts +0 -8
  436. package/esm2022/common/lib/data/entity-data-provider.mjs +0 -26
  437. package/esm2022/common/lib/data/storage-service.mjs +0 -5
  438. package/esm2022/common/lib/layout/theme/components/slots/theme-slot.component.mjs +0 -48
  439. package/esm2022/common/lib/settings/settings.loader.mjs +0 -17
  440. package/esm2022/layout/designer/lib/designer/shared/designer.typs.mjs +0 -6
  441. package/fesm2022/acorex-platform-common-avatar-widget-edit.component-CfqY7kKi.mjs.map +0 -1
  442. package/fesm2022/acorex-platform-common-avatar-widget-view.component-DXC7INdQ.mjs.map +0 -1
  443. package/fesm2022/acorex-platform-common-boolean-widget-filter.component-DLGnsXy4.mjs.map +0 -1
  444. package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-DOGMfGby.mjs.map +0 -1
  445. package/fesm2022/acorex-platform-common-dateTime-widget-column.component-BkUDt0Kj.mjs.map +0 -1
  446. package/fesm2022/acorex-platform-common-dateTime-widget-filter.component-CqddjYjP.mjs.map +0 -1
  447. package/fesm2022/acorex-platform-common-email-widget-column.component-BOer2nZi.mjs.map +0 -1
  448. package/fesm2022/acorex-platform-common-email-widget-edit.component-BoKsGiEI.mjs.map +0 -1
  449. package/fesm2022/acorex-platform-common-file-widget-column.component-DpcUmwAT.mjs.map +0 -1
  450. package/fesm2022/acorex-platform-common-file-widget-filter.component-Dwt-LYWG.mjs.map +0 -1
  451. package/fesm2022/acorex-platform-common-gallery-widget-filter.component-B-KxKtY4.mjs.map +0 -1
  452. package/fesm2022/acorex-platform-common-largetext-widget-edit.component-DD7S5j12.mjs.map +0 -1
  453. package/fesm2022/acorex-platform-common-lookup-widget-column.component-BEZNLQZi.mjs.map +0 -1
  454. package/fesm2022/acorex-platform-common-lookup-widget-edit.component-D50jPeKP.mjs.map +0 -1
  455. package/fesm2022/acorex-platform-common-lookup-widget-filter.component-CZHDDnR3.mjs.map +0 -1
  456. package/fesm2022/acorex-platform-common-lookup-widget-view.component-CQCvJxgi.mjs.map +0 -1
  457. package/fesm2022/acorex-platform-common-map-widget-edit.component-OanYRQ3B.mjs.map +0 -1
  458. package/fesm2022/acorex-platform-common-messenger-widget-column.component-BHP6R3OI.mjs.map +0 -1
  459. package/fesm2022/acorex-platform-common-number-widget-edit.component-XSWI6466.mjs.map +0 -1
  460. package/fesm2022/acorex-platform-common-number-widget-filter.component-BOT9wPJ5.mjs.map +0 -1
  461. package/fesm2022/acorex-platform-common-number-widget-view.component-CP5aboLU.mjs.map +0 -1
  462. package/fesm2022/acorex-platform-common-password-widget-edit.component-CHQ_Kp4t.mjs.map +0 -1
  463. package/fesm2022/acorex-platform-common-phone-widget-column.component-RJp6wHul.mjs.map +0 -1
  464. package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-Do3YcmKg.mjs.map +0 -1
  465. package/fesm2022/acorex-platform-common-rich-text-widget-view.component-BIRyPRtw.mjs.map +0 -1
  466. package/fesm2022/acorex-platform-common-selection-list-widget-column.component-DxeK2RPc.mjs.map +0 -1
  467. package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-CBLEeILz.mjs.map +0 -1
  468. package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-B01t7mso.mjs.map +0 -1
  469. package/fesm2022/acorex-platform-common-selection-list-widget-view.component-QJMp11dd.mjs.map +0 -1
  470. package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-CEhRqgEn.mjs.map +0 -1
  471. package/fesm2022/acorex-platform-common-string-widget-filter.component--L4PeRCB.mjs.map +0 -1
  472. package/fesm2022/acorex-platform-common-text-widget-column.component-ytX4OqZX.mjs.map +0 -1
  473. package/fesm2022/acorex-platform-common-text-widget-edit.component-CN7OyTfJ.mjs.map +0 -1
  474. package/fesm2022/acorex-platform-common-toggle-widget-edit.component-CLWHwf8V.mjs.map +0 -1
  475. package/fesm2022/acorex-platform-layout-designer-preview.component-CaRHf4x_.mjs +0 -23
  476. package/fesm2022/acorex-platform-layout-designer-preview.component-CaRHf4x_.mjs.map +0 -1
  477. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-fZ6QEYcd.mjs.map +0 -1
  478. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BijYXMme.mjs.map +0 -1
  479. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Bnrabotu.mjs.map +0 -1
  480. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-B9bfVuC4.mjs.map +0 -1
  481. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-tPk6Gylo.mjs.map +0 -1
  482. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-Bb3aXCNZ.mjs.map +0 -1
  483. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-6BMZ0qRw.mjs +0 -67
  484. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-6BMZ0qRw.mjs.map +0 -1
  485. /package/layout/designer/lib/designer/shared/{designer.typs.d.ts → designer.types.d.ts} +0 -0
@@ -280,11 +280,11 @@ export class AXPEntityListViewComponent {
280
280
  this.dataSource.reset();
281
281
  }
282
282
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPEntityListViewComponent, deps: [{ token: i1.AXActionSheetService }, { token: i2.AXUnsubscriber }, { token: i3.AXPlatform }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
283
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPEntityListViewComponent, selector: "ng-component", providers: [AXUnsubscriber], viewQueries: [{ propertyName: "viewsTemplate", first: true, predicate: ["viewsTemplate"], descendants: true }, { propertyName: "grid", first: true, predicate: ["grid"], descendants: true }, { propertyName: "entityViewDrawer", first: true, predicate: ["entityViewDrawer"], descendants: true }], ngImport: i0, template: "<ax-drawer-container>\n <!-- <ax-drawer #drawer location=\"start\" [collapsed]=\"true\" [mode]=\"platform.is('SM') ? 'overlay' : 'push'\">\n <ax-content class=\"ax-w-64 ax-border-e\">\n <div class=\"ax-p-6 ax-py-4 ax-gap-6 ax-flex ax-flex-col\">\n <p class=\"ax-text-2xl ax-font-bold\">Folders</p>\n <ax-side-menu>\n <ng-container *ngFor=\"let node of menuItems\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ax-side-menu>\n <ng-template #sideMenu let-item>\n <ax-side-menu-item [text]=\"item.text\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-folder ax-text-warning-500\"></ax-icon>\n </ax-prefix>\n <ng-container *ngIf=\"item.children\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ng-container>\n </ax-side-menu-item>\n </ng-template>\n </div>\n </ax-content>\n </ax-drawer> -->\n <ax-content class=\"ax-flex ax-flex-col ax-overflow-hidden\">\n <div\n class=\"ax-flex ax-flex-col ax-gap-0 md:ax-gap-4 ax-px-4 ax-py-3 md:ax-py-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\"\n >\n @if(platform.is('MD')){\n <div class=\"ax-flex ax-justify-between ax-mb-4\">\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-text-xl ax-font-bold\">{{ title }}</div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canCreate) {\n <ax-button color=\"primary\" class=\"ax-sm\" (onClick)=\"handleCreateClick()\">\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span\n (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\"\n >Clear Items</span\n >\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canDelete) {\n <ax-button color=\"danger\" class=\"ax-sm\" (onClick)=\"handleCommandClick('delete')\">\n <ax-icon class=\"fa-solid fa-trash\"> </ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n </ax-button>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" [text]=\"(view$ | async)?.title\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-eye ax-text-neutral-400\"> </ax-icon>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">{{ 'entity.public-view' | translate | async }}</ax-title>\n <ax-button-item\n *ngFor=\"let v of publicViews$ | async\"\n [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\"\n (onClick)=\"loader.setView(v.name)\"\n ></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item\n *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\"\n (onClick)=\"loader.setView(v.name)\"\n ></ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item\n (onClick)=\"addCustomViewPopup()\"\n text=\"Add Custom View\"\n class=\"ax-font-semibold ax-text-primary\"\n ></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <div class=\"ax-flex ax-gap-2\">\n @if(searchBoxTitle){\n <ax-button (onClick)=\"toggleSearchBox()\" [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-search ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n }\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"columnsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n <ax-button\n [disabled]=\"this.grid?.selectedRows?.length != 0\"\n color=\"ghost\"\n (onClick)=\"conditionsDrawer.open()\"\n >\n <ax-icon class=\"fa-solid fa-sliders ax-text-neutral-400\"> </ax-icon>\n @if ((conditionsCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars-sort ax-text-neutral-400\"> </ax-icon>\n @if ((sortCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n </div>\n </div>\n <div [class.collapsed-search-box]=\"searchBoxCollapsed\" class=\"ax-transition-all ax-mt-4\">\n <ax-search-box\n [title]=\"searchBoxTitle\"\n [placeholder]=\"('widget.lookup.search' | translate | async) + searchBoxPlaceholder\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </div>\n } @else {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-3\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold ax-mb-2\">{{ title }}</div>\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-flex ax-gap-3\">\n @if(canCreate) {\n <ax-button [text]=\"'create-new' | translate | async\" color=\"primary\" (onClick)=\"handleCreateClick()\">\n <ax-prefix>\n <i class=\"fa-solid fa-add\"></i>\n </ax-prefix>\n </ax-button>\n } @if(canImport){\n <ax-button [text]=\"'entity.actions' | translate | async\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item (onClick)=\"handleImportClick()\" text=\"Import\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-import\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n <!-- <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item> -->\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }@else {\n <div class=\"ax-flex ax-gap-3\">\n @if(canDelete) {\n <ax-button text=\"Delete Items\" color=\"danger\" (onClick)=\"handleCommandClick('delete')\">\n <ax-prefix>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-prefix>\n </ax-button>\n }\n <ax-button [text]=\"'entity.actions' | translate | async\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <!----------------------- View Mode --------------------->\n @if(this.grid?.selectedRows?.length==0) {\n <div class=\"ax-flex ax-w-full ax-justify-between ax-gap-3\">\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"(view$ | async)?.title\" #views color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-eye\"></i>\n </ax-prefix>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">{{\n 'entity.public-view' | translate | async\n }}</ax-title>\n <ax-button-item\n *ngFor=\"let v of publicViews$ | async\"\n [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\"\n (onClick)=\"loader.setView(v.name)\"\n ></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item\n class=\"ax-pe-4 ax-flex ax-justify-between\"\n *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\"\n (onClick)=\"loader.setView(v.name)\"\n >\n <ax-suffix>\n <ax-button (onClick)=\"updateViewPopup($event, v)\" class=\"ax-xs\" look=\"none\">\n <ax-icon class=\"far fa-edit\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item\n text=\"Add Custom View\"\n (onClick)=\"addCustomViewPopup()\"\n class=\"ax-font-semibold ax-text-primary\"\n ></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if(searchBoxTitle){\n <div class=\"ax-w-72\">\n <ax-search-box\n [title]=\"searchBoxTitle\"\n [(ngModel)]=\"searchValue\"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n [placeholder]=\"('widget.lookup.search' | translate | async) + searchBoxPlaceholder\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-gap-3\">\n <ax-button\n [text]=\"'entity.columns' | translate | async\"\n color=\"ghost\"\n #columns\n (onClick)=\"columnsDrawer.open()\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-bars\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ columnsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Filters\" color=\"ghost\" (onClick)=\"conditionsDrawer.open()\" #conditions>\n <ax-prefix>\n <i class=\"fa-solid fa-sliders\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ conditionsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button [text]=\"'entity.sort' | translate | async\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars-sort\"></i>\n </ax-prefix>\n <ax-suffix *ngIf=\"(sortCount$ | async)! > 0\">\n <ax-badge text=\"{{ sortCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n\n } @else{\n <!----------------------- Selection Mode --------------------->\n <div>\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-h-10\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span\n (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\"\n >Clear Items</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ax-flex-1 ax-px-6 ax-py-4 ax-flex ax-overflow-auto\">\n <ax-data-table\n #grid\n [showFooter]=\"false\"\n class=\"ax-flex-1\"\n [dataSource]=\"dataSource\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <!-- <ax-index-column *ngIf=\"!platform.is('SM')\" [width]=\"'85px'\"></ax-index-column> -->\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n @for(col of (columns$ | async);track col.name) {\n <axp-widget-column-renderer\n *ngIf=\"col.visible\"\n [schema]=\"col.schema\"\n [dataField]=\"col.name\"\n [caption]=\"col.title\"\n [options]=\"col.options\"\n [displayFormat]=\"col.displayFormat\"\n [width]=\"'180px'\"\n [allowSorting]=\"false\"\n >\n </axp-widget-column-renderer>\n }\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n <ax-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getInlineRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n </div>\n </ax-content>\n <ax-drawer (collapsedChange)=\"closeDrawer('columns', $event)\" #columnsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-columns [loader]=\"loader\" (onClosed)=\"columnsDrawer.close()\"></axp-list-view-option-columns>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('conditions', $event)\" #conditionsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[25vw] ax-border-e\">\n <axp-list-view-option-conditions\n [loader]=\"loader\"\n (onClosed)=\"conditionsDrawer.close()\"\n ></axp-list-view-option-conditions>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('sorts', $event)\" #sortsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-sorting (onClosed)=\"sortsDrawer.close()\" [loader]=\"loader\"></axp-list-view-option-sorting>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n", styles: [".cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "rowTemplate", "emptyTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged"] }, { kind: "component", type: i6.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i6.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i6.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i7.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i7.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i7.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "component", type: i8.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i8.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i8.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i9.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "component", type: i10.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i11.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "collapsed", "closeOthers"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i11.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "component", type: i12.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: i13.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["width", "caption", "headerTemplate", "allowSorting", "fixed", "footerTemplate", "cellTemplate", "options", "dataField", "displayFormat", "schema"] }, { kind: "directive", type: i14.AXPFeatureDirective, selector: "[feature]", inputs: ["feature", "featureElse"] }, { kind: "component", type: i15.AXPListViewOptionsColumnsComponent, selector: "axp-list-view-option-columns", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "component", type: i16.AXPListViewOptionConditionsComponent, selector: "axp-list-view-option-conditions", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "component", type: i17.AXPListViewOptionSortingComponent, selector: "axp-list-view-option-sorting", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
283
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPEntityListViewComponent, selector: "ng-component", providers: [AXUnsubscriber], viewQueries: [{ propertyName: "viewsTemplate", first: true, predicate: ["viewsTemplate"], descendants: true }, { propertyName: "grid", first: true, predicate: ["grid"], descendants: true }, { propertyName: "entityViewDrawer", first: true, predicate: ["entityViewDrawer"], descendants: true }], ngImport: i0, template: "<ax-drawer-container>\n <!-- <ax-drawer #drawer location=\"start\" [collapsed]=\"true\" [mode]=\"platform.is('SM') ? 'overlay' : 'push'\">\n <ax-content class=\"ax-w-64 ax-border-e\">\n <div class=\"ax-p-6 ax-py-4 ax-gap-6 ax-flex ax-flex-col\">\n <p class=\"ax-text-2xl ax-font-bold\">Folders</p>\n <ax-side-menu>\n <ng-container *ngFor=\"let node of menuItems\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ax-side-menu>\n <ng-template #sideMenu let-item>\n <ax-side-menu-item [text]=\"item.text\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-folder ax-text-warning-500\"></ax-icon>\n </ax-prefix>\n <ng-container *ngIf=\"item.children\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ng-container>\n </ax-side-menu-item>\n </ng-template>\n </div>\n </ax-content>\n </ax-drawer> -->\n <ax-content class=\"ax-flex ax-flex-col ax-overflow-hidden\">\n <div\n class=\"ax-flex ax-flex-col ax-gap-0 md:ax-gap-4 ax-px-4 ax-py-3 md:ax-py-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\">\n @if(platform.is('MD')){\n <div class=\"ax-flex ax-justify-between ax-mb-4\">\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-text-xl ax-font-bold\">{{ title }}</div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canCreate) {\n <ax-button color=\"primary\" class=\"ax-sm\" (onClick)=\"handleCreateClick()\">\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canDelete) {\n <ax-button color=\"danger\" class=\"ax-sm\" (onClick)=\"handleCommandClick('delete')\">\n <ax-icon class=\"fa-solid fa-trash\"> </ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n </ax-button>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" [text]=\"(view$ | async)?.title\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-eye ax-text-neutral-400\"> </ax-icon>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">{{ 'entity.public-view' | translate | async }}</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item *ngFor=\"let v of customViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item (onClick)=\"addCustomViewPopup()\" text=\"Add Custom View\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <div class=\"ax-flex ax-gap-2\">\n @if(searchBoxTitle){\n <ax-button (onClick)=\"toggleSearchBox()\" [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-search ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n }\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"columnsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\"\n (onClick)=\"conditionsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-sliders ax-text-neutral-400\"> </ax-icon>\n @if ((conditionsCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars-sort ax-text-neutral-400\"> </ax-icon>\n @if ((sortCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n </div>\n </div>\n <div [class.collapsed-search-box]=\"searchBoxCollapsed\" class=\"ax-transition-all ax-mt-4\">\n <ax-search-box [title]=\"searchBoxTitle\"\n [placeholder]=\"('widget.lookup.search' | translate | async) + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n } @else {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-3\">\n <div class=\"ax-text-xl md:ax-text-2xl ax-font-bold ax-mb-2\">{{ title }}</div>\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-flex ax-gap-3\">\n @if(canCreate) {\n <ax-button [text]=\"'create-new' | translate | async\" color=\"primary\" (onClick)=\"handleCreateClick()\">\n <ax-prefix>\n <i class=\"fa-solid fa-add\"></i>\n </ax-prefix>\n </ax-button>\n } @if(canImport){\n <ax-button [text]=\"'entity.actions' | translate | async\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item (onClick)=\"handleImportClick()\" text=\"Import\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-import\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n <!-- <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item> -->\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }@else {\n <div class=\"ax-flex ax-gap-3\">\n @if(canDelete) {\n <ax-button text=\"Delete Items\" color=\"danger\" (onClick)=\"handleCommandClick('delete')\">\n <ax-prefix>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-prefix>\n </ax-button>\n }\n <ax-button [text]=\"'entity.actions' | translate | async\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <!----------------------- View Mode --------------------->\n @if(this.grid?.selectedRows?.length==0) {\n <div class=\"ax-flex ax-w-full ax-justify-between ax-gap-3\">\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"(view$ | async)?.title\" #views color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-eye\"></i>\n </ax-prefix>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">{{\n 'entity.public-view' | translate | async\n }}</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item class=\"ax-pe-4 ax-flex ax-justify-between\" *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\" [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\">\n <ax-suffix>\n <ax-button (onClick)=\"updateViewPopup($event, v)\" class=\"ax-xs\" look=\"none\">\n <ax-icon class=\"far fa-edit\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item text=\"Add Custom View\" (onClick)=\"addCustomViewPopup()\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if(searchBoxTitle){\n <div class=\"ax-w-72\">\n <ax-search-box [title]=\"searchBoxTitle\" [(ngModel)]=\"searchValue\"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n [placeholder]=\"('widget.lookup.search' | translate | async) + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"'entity.columns' | translate | async\" color=\"ghost\" #columns\n (onClick)=\"columnsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ columnsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Filters\" color=\"ghost\" (onClick)=\"conditionsDrawer.open()\" #conditions>\n <ax-prefix>\n <i class=\"fa-solid fa-sliders\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ conditionsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button [text]=\"'entity.sort' | translate | async\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars-sort\"></i>\n </ax-prefix>\n <ax-suffix *ngIf=\"(sortCount$ | async)! > 0\">\n <ax-badge text=\"{{ sortCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n\n } @else{\n <!----------------------- Selection Mode --------------------->\n <div>\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-h-10\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ax-flex-1 ax-px-6 ax-py-4 ax-flex ax-overflow-auto\">\n <ax-data-table #grid [showFooter]=\"false\" class=\"ax-flex-1\" [dataSource]=\"dataSource\" [paging]=\"true\"\n [fetchDataMode]=\"'manual'\" (onRowDbClick)=\"handleRowDbClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\">\n <!-- <ax-index-column *ngIf=\"!platform.is('SM')\" [width]=\"'85px'\"></ax-index-column> -->\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n @for(col of (columns$ | async);track col.name) {\n <axp-widget-column-renderer *ngIf=\"col.visible\" [schema]=\"col.schema\" [dataField]=\"col.name\"\n [caption]=\"col.title\" [options]=\"col.options\" [displayFormat]=\"col.displayFormat\" [width]=\"'180px'\"\n [allowSorting]=\"false\">\n </axp-widget-column-renderer>\n }\n <ax-dropdown-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-dropdown-command-column>\n <ax-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getInlineRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-command-column>\n </ax-data-table>\n </div>\n </ax-content>\n <ax-drawer (collapsedChange)=\"closeDrawer('columns', $event)\" #columnsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-columns [loader]=\"loader\" (onClosed)=\"columnsDrawer.close()\"></axp-list-view-option-columns>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('conditions', $event)\" #conditionsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[25vw] ax-border-e\">\n <axp-list-view-option-conditions [loader]=\"loader\"\n (onClosed)=\"conditionsDrawer.close()\"></axp-list-view-option-conditions>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('sorts', $event)\" #sortsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-sorting (onClosed)=\"sortsDrawer.close()\" [loader]=\"loader\"></axp-list-view-option-sorting>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "rowTemplate", "emptyTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged"] }, { kind: "component", type: i6.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "component", type: i6.AXRowCommandColumnComponent, selector: "ax-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i6.AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: ["width", "caption", "fixed", "footerTemplate", "items"], outputs: ["onItemClick"] }, { kind: "component", type: i7.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i7.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i7.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "component", type: i8.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i8.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i8.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i9.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "component", type: i10.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i11.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "closeOthers", "collapsed"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i11.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "component", type: i12.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: i13.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["width", "caption", "headerTemplate", "allowSorting", "fixed", "footerTemplate", "cellTemplate", "options", "dataField", "displayFormat", "schema"] }, { kind: "directive", type: i14.AXPFeatureDirective, selector: "[feature]", inputs: ["feature", "featureElse"] }, { kind: "component", type: i15.AXPListViewOptionsColumnsComponent, selector: "axp-list-view-option-columns", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "component", type: i16.AXPListViewOptionConditionsComponent, selector: "axp-list-view-option-conditions", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "component", type: i17.AXPListViewOptionSortingComponent, selector: "axp-list-view-option-sorting", inputs: ["loader"], outputs: ["onClosed"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
284
284
  }
285
285
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPEntityListViewComponent, decorators: [{
286
286
  type: Component,
287
- args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [AXUnsubscriber], template: "<ax-drawer-container>\n <!-- <ax-drawer #drawer location=\"start\" [collapsed]=\"true\" [mode]=\"platform.is('SM') ? 'overlay' : 'push'\">\n <ax-content class=\"ax-w-64 ax-border-e\">\n <div class=\"ax-p-6 ax-py-4 ax-gap-6 ax-flex ax-flex-col\">\n <p class=\"ax-text-2xl ax-font-bold\">Folders</p>\n <ax-side-menu>\n <ng-container *ngFor=\"let node of menuItems\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ax-side-menu>\n <ng-template #sideMenu let-item>\n <ax-side-menu-item [text]=\"item.text\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-folder ax-text-warning-500\"></ax-icon>\n </ax-prefix>\n <ng-container *ngIf=\"item.children\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ng-container>\n </ax-side-menu-item>\n </ng-template>\n </div>\n </ax-content>\n </ax-drawer> -->\n <ax-content class=\"ax-flex ax-flex-col ax-overflow-hidden\">\n <div\n class=\"ax-flex ax-flex-col ax-gap-0 md:ax-gap-4 ax-px-4 ax-py-3 md:ax-py-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\"\n >\n @if(platform.is('MD')){\n <div class=\"ax-flex ax-justify-between ax-mb-4\">\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-text-xl ax-font-bold\">{{ title }}</div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canCreate) {\n <ax-button color=\"primary\" class=\"ax-sm\" (onClick)=\"handleCreateClick()\">\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span\n (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\"\n >Clear Items</span\n >\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canDelete) {\n <ax-button color=\"danger\" class=\"ax-sm\" (onClick)=\"handleCommandClick('delete')\">\n <ax-icon class=\"fa-solid fa-trash\"> </ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n </ax-button>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" [text]=\"(view$ | async)?.title\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-eye ax-text-neutral-400\"> </ax-icon>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">{{ 'entity.public-view' | translate | async }}</ax-title>\n <ax-button-item\n *ngFor=\"let v of publicViews$ | async\"\n [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\"\n (onClick)=\"loader.setView(v.name)\"\n ></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item\n *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\"\n (onClick)=\"loader.setView(v.name)\"\n ></ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item\n (onClick)=\"addCustomViewPopup()\"\n text=\"Add Custom View\"\n class=\"ax-font-semibold ax-text-primary\"\n ></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <div class=\"ax-flex ax-gap-2\">\n @if(searchBoxTitle){\n <ax-button (onClick)=\"toggleSearchBox()\" [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-search ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n }\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"columnsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n <ax-button\n [disabled]=\"this.grid?.selectedRows?.length != 0\"\n color=\"ghost\"\n (onClick)=\"conditionsDrawer.open()\"\n >\n <ax-icon class=\"fa-solid fa-sliders ax-text-neutral-400\"> </ax-icon>\n @if ((conditionsCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars-sort ax-text-neutral-400\"> </ax-icon>\n @if ((sortCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n </div>\n </div>\n <div [class.collapsed-search-box]=\"searchBoxCollapsed\" class=\"ax-transition-all ax-mt-4\">\n <ax-search-box\n [title]=\"searchBoxTitle\"\n [placeholder]=\"('widget.lookup.search' | translate | async) + searchBoxPlaceholder\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </div>\n } @else {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-3\">\n <div class=\"ax-text-xl md:ax-text-3xl ax-font-bold ax-mb-2\">{{ title }}</div>\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-flex ax-gap-3\">\n @if(canCreate) {\n <ax-button [text]=\"'create-new' | translate | async\" color=\"primary\" (onClick)=\"handleCreateClick()\">\n <ax-prefix>\n <i class=\"fa-solid fa-add\"></i>\n </ax-prefix>\n </ax-button>\n } @if(canImport){\n <ax-button [text]=\"'entity.actions' | translate | async\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item (onClick)=\"handleImportClick()\" text=\"Import\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-import\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n <!-- <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item> -->\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }@else {\n <div class=\"ax-flex ax-gap-3\">\n @if(canDelete) {\n <ax-button text=\"Delete Items\" color=\"danger\" (onClick)=\"handleCommandClick('delete')\">\n <ax-prefix>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-prefix>\n </ax-button>\n }\n <ax-button [text]=\"'entity.actions' | translate | async\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <!----------------------- View Mode --------------------->\n @if(this.grid?.selectedRows?.length==0) {\n <div class=\"ax-flex ax-w-full ax-justify-between ax-gap-3\">\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"(view$ | async)?.title\" #views color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-eye\"></i>\n </ax-prefix>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">{{\n 'entity.public-view' | translate | async\n }}</ax-title>\n <ax-button-item\n *ngFor=\"let v of publicViews$ | async\"\n [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\"\n (onClick)=\"loader.setView(v.name)\"\n ></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item\n class=\"ax-pe-4 ax-flex ax-justify-between\"\n *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\"\n (onClick)=\"loader.setView(v.name)\"\n >\n <ax-suffix>\n <ax-button (onClick)=\"updateViewPopup($event, v)\" class=\"ax-xs\" look=\"none\">\n <ax-icon class=\"far fa-edit\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item\n text=\"Add Custom View\"\n (onClick)=\"addCustomViewPopup()\"\n class=\"ax-font-semibold ax-text-primary\"\n ></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if(searchBoxTitle){\n <div class=\"ax-w-72\">\n <ax-search-box\n [title]=\"searchBoxTitle\"\n [(ngModel)]=\"searchValue\"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n [placeholder]=\"('widget.lookup.search' | translate | async) + searchBoxPlaceholder\"\n ><ax-clear-button></ax-clear-button\n ></ax-search-box>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-gap-3\">\n <ax-button\n [text]=\"'entity.columns' | translate | async\"\n color=\"ghost\"\n #columns\n (onClick)=\"columnsDrawer.open()\"\n >\n <ax-prefix>\n <i class=\"fa-solid fa-bars\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ columnsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Filters\" color=\"ghost\" (onClick)=\"conditionsDrawer.open()\" #conditions>\n <ax-prefix>\n <i class=\"fa-solid fa-sliders\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ conditionsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button [text]=\"'entity.sort' | translate | async\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars-sort\"></i>\n </ax-prefix>\n <ax-suffix *ngIf=\"(sortCount$ | async)! > 0\">\n <ax-badge text=\"{{ sortCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n\n } @else{\n <!----------------------- Selection Mode --------------------->\n <div>\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-h-10\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span\n (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\"\n >Clear Items</span\n >\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ax-flex-1 ax-px-6 ax-py-4 ax-flex ax-overflow-auto\">\n <ax-data-table\n #grid\n [showFooter]=\"false\"\n class=\"ax-flex-1\"\n [dataSource]=\"dataSource\"\n [paging]=\"true\"\n [fetchDataMode]=\"'manual'\"\n (onRowDbClick)=\"handleRowDbClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\"\n >\n <!-- <ax-index-column *ngIf=\"!platform.is('SM')\" [width]=\"'85px'\"></ax-index-column> -->\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n @for(col of (columns$ | async);track col.name) {\n <axp-widget-column-renderer\n *ngIf=\"col.visible\"\n [schema]=\"col.schema\"\n [dataField]=\"col.name\"\n [caption]=\"col.title\"\n [options]=\"col.options\"\n [displayFormat]=\"col.displayFormat\"\n [width]=\"'180px'\"\n [allowSorting]=\"false\"\n >\n </axp-widget-column-renderer>\n }\n <ax-dropdown-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-dropdown-command-column>\n <ax-command-column\n fixed=\"end\"\n [width]=\"'60px'\"\n [items]=\"getInlineRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"\n ></ax-command-column>\n </ax-data-table>\n </div>\n </ax-content>\n <ax-drawer (collapsedChange)=\"closeDrawer('columns', $event)\" #columnsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-columns [loader]=\"loader\" (onClosed)=\"columnsDrawer.close()\"></axp-list-view-option-columns>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('conditions', $event)\" #conditionsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[25vw] ax-border-e\">\n <axp-list-view-option-conditions\n [loader]=\"loader\"\n (onClosed)=\"conditionsDrawer.close()\"\n ></axp-list-view-option-conditions>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('sorts', $event)\" #sortsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-sorting (onClosed)=\"sortsDrawer.close()\" [loader]=\"loader\"></axp-list-view-option-sorting>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n", styles: [".cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}\n"] }]
287
+ args: [{ encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [AXUnsubscriber], template: "<ax-drawer-container>\n <!-- <ax-drawer #drawer location=\"start\" [collapsed]=\"true\" [mode]=\"platform.is('SM') ? 'overlay' : 'push'\">\n <ax-content class=\"ax-w-64 ax-border-e\">\n <div class=\"ax-p-6 ax-py-4 ax-gap-6 ax-flex ax-flex-col\">\n <p class=\"ax-text-2xl ax-font-bold\">Folders</p>\n <ax-side-menu>\n <ng-container *ngFor=\"let node of menuItems\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n </ax-side-menu>\n <ng-template #sideMenu let-item>\n <ax-side-menu-item [text]=\"item.text\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-folder ax-text-warning-500\"></ax-icon>\n </ax-prefix>\n <ng-container *ngIf=\"item.children\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ng-container>\n </ax-side-menu-item>\n </ng-template>\n </div>\n </ax-content>\n </ax-drawer> -->\n <ax-content class=\"ax-flex ax-flex-col ax-overflow-hidden\">\n <div\n class=\"ax-flex ax-flex-col ax-gap-0 md:ax-gap-4 ax-px-4 ax-py-3 md:ax-py-4 md:ax-px-6 ax-bg-surface ax-border-b md:ax-border-0 md:ax-bg-default\">\n @if(platform.is('MD')){\n <div class=\"ax-flex ax-justify-between ax-mb-4\">\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-text-xl ax-font-bold\">{{ title }}</div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canCreate) {\n <ax-button color=\"primary\" class=\"ax-sm\" (onClick)=\"handleCreateClick()\">\n <ax-icon class=\"fa-solid fa-add\"></ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n </div>\n }@else {\n <div class=\"ax-flex ax-items-center ax-gap-3\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n @if(canDelete) {\n <ax-button color=\"danger\" class=\"ax-sm\" (onClick)=\"handleCommandClick('delete')\">\n <ax-icon class=\"fa-solid fa-trash\"> </ax-icon>\n </ax-button>\n }\n <ax-button color=\"ghost\" class=\"ax-sm\" #more>\n <ax-icon class=\"fa-solid fa-ellipsis-vertical\"> </ax-icon>\n </ax-button>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" [text]=\"(view$ | async)?.title\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-eye ax-text-neutral-400\"> </ax-icon>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">{{ 'entity.public-view' | translate | async }}</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item *ngFor=\"let v of customViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item (onClick)=\"addCustomViewPopup()\" text=\"Add Custom View\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <div class=\"ax-flex ax-gap-2\">\n @if(searchBoxTitle){\n <ax-button (onClick)=\"toggleSearchBox()\" [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\">\n <ax-icon class=\"fa-solid fa-search ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n }\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"columnsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars ax-text-neutral-400\"> </ax-icon>\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\"\n (onClick)=\"conditionsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-sliders ax-text-neutral-400\"> </ax-icon>\n @if ((conditionsCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n <ax-button [disabled]=\"this.grid?.selectedRows?.length != 0\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-icon class=\"fa-solid fa-bars-sort ax-text-neutral-400\"> </ax-icon>\n @if ((sortCount$ | async)) {\n <ax-suffix>\n <ax-badge [color]=\"'primary'\"></ax-badge>\n </ax-suffix>\n }\n </ax-button>\n </div>\n </div>\n <div [class.collapsed-search-box]=\"searchBoxCollapsed\" class=\"ax-transition-all ax-mt-4\">\n <ax-search-box [title]=\"searchBoxTitle\"\n [placeholder]=\"('widget.lookup.search' | translate | async) + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n } @else {\n <div class=\"ax-flex ax-items-center ax-justify-between ax-gap-3\">\n <div class=\"ax-text-xl md:ax-text-2xl ax-font-bold ax-mb-2\">{{ title }}</div>\n @if(this.grid?.selectedRows?.length==0){\n <div class=\"ax-flex ax-gap-3\">\n @if(canCreate) {\n <ax-button [text]=\"'create-new' | translate | async\" color=\"primary\" (onClick)=\"handleCreateClick()\">\n <ax-prefix>\n <i class=\"fa-solid fa-add\"></i>\n </ax-prefix>\n </ax-button>\n } @if(canImport){\n <ax-button [text]=\"'entity.actions' | translate | async\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list>\n <ax-button-item (onClick)=\"handleImportClick()\" text=\"Import\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-import\"> </ax-icon>\n </ax-prefix>\n </ax-button-item>\n <!-- <ax-button-item text=\"Export\" class=\"ax-font-semibold\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-file-export\"> </ax-icon>\n </ax-prefix>\n </ax-button-item> -->\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n </div>\n }@else {\n <div class=\"ax-flex ax-gap-3\">\n @if(canDelete) {\n <ax-button text=\"Delete Items\" color=\"danger\" (onClick)=\"handleCommandClick('delete')\">\n <ax-prefix>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-prefix>\n </ax-button>\n }\n <ax-button [text]=\"'entity.actions' | translate | async\" color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-ellipsis-vertical\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n <div class=\"ax-flex ax-items-center ax-justify-between\">\n <!----------------------- View Mode --------------------->\n @if(this.grid?.selectedRows?.length==0) {\n <div class=\"ax-flex ax-w-full ax-justify-between ax-gap-3\">\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"(view$ | async)?.title\" #views color=\"ghost\">\n <ax-prefix>\n <i class=\"fa-solid fa-eye\"></i>\n </ax-prefix>\n <ax-suffix>\n <i class=\"fa-solid fa-caret-down\"></i>\n </ax-suffix>\n <ax-dropdown-panel [adaptivityEnabled]=\"true\">\n <ax-button-item-list class=\"ax-bg-surface\">\n <ax-title class=\"ax-font-bold ax-opacity-100\">{{\n 'entity.public-view' | translate | async\n }}</ax-title>\n <ax-button-item *ngFor=\"let v of publicViews$ | async\" [text]=\"v.title\"\n [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\"></ax-button-item>\n <ax-title class=\"ax-font-bold ax-opacity-100\" *ngIf=\"hasCustomViews$ | async\">Created by me</ax-title>\n <ax-button-item class=\"ax-pe-4 ax-flex ax-justify-between\" *ngFor=\"let v of customViews$ | async\"\n [text]=\"v.title\" [class.ax-bg-on-surface]=\"(view$ | async) == v\" (onClick)=\"loader.setView(v.name)\">\n <ax-suffix>\n <ax-button (onClick)=\"updateViewPopup($event, v)\" class=\"ax-xs\" look=\"none\">\n <ax-icon class=\"far fa-edit\"> </ax-icon>\n </ax-button>\n </ax-suffix>\n </ax-button-item>\n <ng-container *feature=\"'axp-entity-list-custom-view'\">\n <ax-divider></ax-divider>\n <ax-button-item text=\"Add Custom View\" (onClick)=\"addCustomViewPopup()\"\n class=\"ax-font-semibold ax-text-primary\"></ax-button-item>\n </ng-container>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if(searchBoxTitle){\n <div class=\"ax-w-72\">\n <ax-search-box [title]=\"searchBoxTitle\" [(ngModel)]=\"searchValue\"\n (onValueChanged)=\"handleChangeSearchValue($event)\"\n [placeholder]=\"('widget.lookup.search' | translate | async) + searchBoxPlaceholder\"><ax-clear-button></ax-clear-button></ax-search-box>\n </div>\n }\n </div>\n\n <div class=\"ax-flex ax-gap-3\">\n <ax-button [text]=\"'entity.columns' | translate | async\" color=\"ghost\" #columns\n (onClick)=\"columnsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ columnsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button text=\"Filters\" color=\"ghost\" (onClick)=\"conditionsDrawer.open()\" #conditions>\n <ax-prefix>\n <i class=\"fa-solid fa-sliders\"></i>\n </ax-prefix>\n <ax-suffix>\n <ax-badge text=\"{{ conditionsCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n <ax-button [text]=\"'entity.sort' | translate | async\" color=\"ghost\" (onClick)=\"sortsDrawer.open()\">\n <ax-prefix>\n <i class=\"fa-solid fa-bars-sort\"></i>\n </ax-prefix>\n <ax-suffix *ngIf=\"(sortCount$ | async)! > 0\">\n <ax-badge text=\"{{ sortCount$ | async }}\" color=\"primary\"></ax-badge>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n\n } @else{\n <!----------------------- Selection Mode --------------------->\n <div>\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-h-10\">\n <span class=\"ax-text-xl ax-font-bold\"> {{ this.grid?.selectedRows?.length }} Items Selected </span>\n <span (click)=\"clearSelectedItems()\"\n class=\"ax-text-sm ax-text-primary dark:ax-text-primary-300 ax-underline ax-cursor-pointer\">Clear\n Items</span>\n </div>\n </div>\n }\n </div>\n }\n </div>\n <div class=\"ax-flex-1 ax-px-6 ax-py-4 ax-flex ax-overflow-auto\">\n <ax-data-table #grid [showFooter]=\"false\" class=\"ax-flex-1\" [dataSource]=\"dataSource\" [paging]=\"true\"\n [fetchDataMode]=\"'manual'\" (onRowDbClick)=\"handleRowDbClick($event)\"\n [loading]=\"{ enabled: true, animation: true }\">\n <!-- <ax-index-column *ngIf=\"!platform.is('SM')\" [width]=\"'85px'\"></ax-index-column> -->\n <ax-select-column fixed=\"start\" [width]=\"'50px'\"></ax-select-column>\n @for(col of (columns$ | async);track col.name) {\n <axp-widget-column-renderer *ngIf=\"col.visible\" [schema]=\"col.schema\" [dataField]=\"col.name\"\n [caption]=\"col.title\" [options]=\"col.options\" [displayFormat]=\"col.displayFormat\" [width]=\"'180px'\"\n [allowSorting]=\"false\">\n </axp-widget-column-renderer>\n }\n <ax-dropdown-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getDropdownRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-dropdown-command-column>\n <ax-command-column fixed=\"end\" [width]=\"'60px'\" [items]=\"getInlineRowItems\"\n (onItemClick)=\"handleRowCommandClick($event)\"></ax-command-column>\n </ax-data-table>\n </div>\n </ax-content>\n <ax-drawer (collapsedChange)=\"closeDrawer('columns', $event)\" #columnsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-columns [loader]=\"loader\" (onClosed)=\"columnsDrawer.close()\"></axp-list-view-option-columns>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('conditions', $event)\" #conditionsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[25vw] ax-border-e\">\n <axp-list-view-option-conditions [loader]=\"loader\"\n (onClosed)=\"conditionsDrawer.close()\"></axp-list-view-option-conditions>\n </ax-content>\n </ax-drawer>\n <ax-drawer (collapsedChange)=\"closeDrawer('sorts', $event)\" #sortsDrawer location=\"end\" [mode]=\"'overlay'\">\n <ax-content class=\"ax-w-[85vw] md:ax-w-[45vw] lg:ax-w-[35vw] 2xl:ax-w-[20vw] ax-border-e\">\n <axp-list-view-option-sorting (onClosed)=\"sortsDrawer.close()\" [loader]=\"loader\"></axp-list-view-option-sorting>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}\n"] }]
288
288
  }], ctorParameters: () => [{ type: i1.AXActionSheetService }, { type: i2.AXUnsubscriber }, { type: i3.AXPlatform }, { type: i0.ChangeDetectorRef }], propDecorators: { viewsTemplate: [{
289
289
  type: ViewChild,
290
290
  args: ['viewsTemplate']
@@ -295,4 +295,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
295
295
  type: ViewChild,
296
296
  args: ['entityViewDrawer']
297
297
  }] } });
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dHMvc3JjL2xpYi9hZG1pbi9lbnRpdHktbGF5b3V0L2VudGl0eS1saXN0LXZpZXcvZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dHMvc3JjL2xpYi9hZG1pbi9lbnRpdHktbGF5b3V0L2VudGl0eS1saXN0LXZpZXcvZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQWdELE1BQU0sK0JBQStCLENBQUM7QUFDbkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXBDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBRUwsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsMEJBQTBCLEdBQzNCLE1BQU0seUJBQXlCLENBQUM7QUFDakMs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LEVBQUUsQ0FBQztJQUMxQixDQUFDOzhHQXBSVSwwQkFBMEI7a0dBQTFCLDBCQUEwQix1Q0FGMUIsQ0FBQyxjQUFjLENBQUMsZ1VDL0I3QiwwNWdCQTZXQTs7MkZENVVhLDBCQUEwQjtrQkFQdEMsU0FBUztvQ0FHTyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsY0FBYyxDQUFDOytLQXVDQyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBRVAsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQUNjLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEFjdGlvblNoZWV0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9hY3Rpb24tc2hlZXQnO1xuaW1wb3J0IHsgQVhEYXRhVGFibGVDb21wb25lbnQsIEFYUm93Q29tbWFuZEl0ZW0sIEFYUm93Q29tbWFuZEl0ZW1DbGlja0V2ZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHsgQVhEcmF3ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJhd2VyJztcbmltcG9ydCB7IEFYUG9wdXBTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcHVwJztcbmltcG9ydCB7IEFYUGxhdGZvcm0gfSBmcm9tICdAYWNvcmV4L2NvcmUvcGxhdGZvcm0nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuXG5pbXBvcnQgeyBBWENsaWNrRXZlbnQsIEFYVmFsdWVDaGFuZ2VkRXZlbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IEFYRGF0YVRhYmxlUm93RGJDbGljayB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kYXRhLXRhYmxlL2xpYi9iYXNlLWRhdGEtdGFibGUuY2xhc3MnO1xuaW1wb3J0IHsgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQVhQQWRtaW5MYXlvdXRTdGF0ZSxcbiAgQVhQTGF5b3V0Q2hpbGREcmF3ZXJUb2dnbGUsXG4gIEFYUExheW91dFNlcnZpY2UsXG4gIEFYUF9NRU5VX0xPQURFUixcbiAgY29udmVydFByb3BlcnRpZXNUb0NvbHVtbnMsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUFdvcmtmbG93U2VydmljZSwgb2ZUeXBlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5pbXBvcnQgeyBBWFBFbnRpdHlDcmVhdGVFdmVudCB9IGZyb20gJy4uLy4uL2VudGl0eS1sYXlvdXQvd29ya2Zsb3dzL2NyZWF0ZS1lbnRpdHkud29ya2Zsb3cnO1xuaW1wb3J0IHsgQVhQRW50aXR5RGVsZXRlZEV2ZW50IH0gZnJvbSAnLi4vLi4vZW50aXR5LWxheW91dC93b3JrZmxvd3MvZGVsZXRlLWVudGl0eS53b3JrZmxvdyc7XG5pbXBvcnQgeyBBWFBJbXBvcnRFbnRpdHlFdmVudCB9IGZyb20gJy4uL3dvcmtmbG93cy9pbXBvcnQtZW50aXR5LndvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eUNyZWF0ZUN1c3RvbVZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZW50aXR5LWN1c3RvbS12aWV3L2VudGl0eS1jdXN0b20tdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhQTGlzdFZpZXdMb2FkZXIgfSBmcm9tICcuL2xpc3Qtdmlldy5jb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdlbnRpdHktbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2VudGl0eS1saXN0LXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW0FYVW5zdWJzY3JpYmVyXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5TGlzdFZpZXdDb21wb25lbnQge1xuICBwcml2YXRlIHN0b3JlID0gaW5qZWN0KFN0b3JlPEFYUEFkbWluTGF5b3V0U3RhdGU+KTtcbiAgcHJpdmF0ZSB3b3JrZmxvdyA9IGluamVjdChBWFBXb3JrZmxvd1NlcnZpY2UpO1xuICBwcml2YXRlIGxheW91dCA9IGluamVjdChBWFBMYXlvdXRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgbWFudUxvYWRlciA9IGluamVjdChBWFBfTUVOVV9MT0FERVIpO1xuXG4gIHByb3RlY3RlZCBsb2FkZXIgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ2xvYWRlciddIGFzIEFYUExpc3RWaWV3TG9hZGVyO1xuICBwcm90ZWN0ZWQgdGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoQm94UGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoQm94VGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoQm94Q29sbGFwc2VkOiBib29sZWFuID0gdHJ1ZTtcblxuICBwcm90ZWN0ZWQgcHVibGljVmlld3MkID0gdGhpcy5sb2FkZXIucHVibGljVmlld3MkO1xuICBwcm90ZWN0ZWQgY3VzdG9tVmlld3MkID0gdGhpcy5sb2FkZXIuY3VzdG9tVmlld3MkO1xuICBwcm90ZWN0ZWQgaGFzQ3VzdG9tVmlld3MkID0gdGhpcy5sb2FkZXIuaGFzQ3VzdG9tVmlld3MkO1xuICBwcm90ZWN0ZWQgdmlldyQgPSB0aGlzLmxvYWRlci52aWV3JDtcbiAgLy9cbiAgcHJvdGVjdGVkIGNvbmRpdGlvbnMkID0gdGhpcy5sb2FkZXIuY29uZGl0aW9ucyQ7XG4gIHByb3RlY3RlZCBjb25kaXRpb25zQ291bnQkID0gdGhpcy5sb2FkZXIuY29uZGl0aW9uc0NvdW50JDtcbiAgLy9cbiAgcHJvdGVjdGVkIGNvbHVtbnMkID0gdGhpcy5sb2FkZXIuZGlzcGxheUNvbHVtbnMkO1xuICBwcm90ZWN0ZWQgY29sdW1uc0NvdW50JCA9IHRoaXMubG9hZGVyLmRpc3BsYXlDb2x1bW5zQ291bnQkO1xuICAvL1xuICBwcm90ZWN0ZWQgc29ydCQgPSB0aGlzLmxvYWRlci5zb3J0cyQ7XG4gIHByb3RlY3RlZCBzb3J0Q291bnQkID0gdGhpcy5sb2FkZXIuc29ydHNDb3VudCQ7XG4gIC8vXG4gIHByb3RlY3RlZCBkYXRhU291cmNlID0gdGhpcy5sb2FkZXIuZGF0YVNvdXJjZTtcbiAgLy9cbiAgcHJvdGVjdGVkIGNhbkRlbGV0ZSA9IHRoaXMubG9hZGVyLmVudGl0eS5lZGl0T3B0aW9ucz8uZGVsZXRlID8/IHRydWU7XG4gIHByb3RlY3RlZCBjYW5DcmVhdGUgPSB0aGlzLmxvYWRlci5lbnRpdHkuZWRpdE9wdGlvbnM/LmNyZWF0ZSA/PyB0cnVlO1xuICBwcm90ZWN0ZWQgY2FuVXBkYXRlID0gdGhpcy5sb2FkZXIuZW50aXR5LmVkaXRPcHRpb25zPy51cGRhdGUgPz8gdHJ1ZTtcbiAgcHJvdGVjdGVkIGNhbkltcG9ydCA9IHRoaXMubG9hZGVyLmVudGl0eS5lZGl0T3B0aW9ucz8uaW1wb3J0ID8/IGZhbHNlO1xuICAvL1xuICBwcm90ZWN0ZWQgZm9jdXNlZFJvdzogYW55O1xuICAvL1xuICBAVmlld0NoaWxkKCd2aWV3c1RlbXBsYXRlJykgdmlld3NUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICAvLyBAVmlld0NoaWxkKCdncmlkJykgZ3JpZCE6IEFYRGF0YVRhYmxlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZCE6IEFYRGF0YVRhYmxlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdlbnRpdHlWaWV3RHJhd2VyJykgZW50aXR5Vmlld0RyYXdlciE6IEFYRHJhd2VyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgcG9wdXBTZXJ2aWNlID0gaW5qZWN0KEFYUG9wdXBTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGlvblNoZWV0U2VydmljZTogQVhBY3Rpb25TaGVldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZXI6IEFYVW5zdWJzY3JpYmVyLFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogQVhQbGF0Zm9ybSxcbiAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICAvL1RPRE86IG5hbWVzcGFjZSwgbW9kdWxlIG5hbWUgaXNzdWVzXG4gICAgdGhpcy50aXRsZSA9IHRoaXMubWFudUxvYWRlci5jdXJyZW50TWVudUl0ZW0oKT8udGV4dCA/PyB0aGlzLmxvYWRlci5lbnRpdHkuZm9ybWF0cz8ubGlzdCA/PyB0aGlzLmxvYWRlci5lbnRpdHkuZm9ybWF0cz8uZGVmYXVsdCA/PyAnVGl0bGUnO1xuICAgIC8vXG5cbiAgICB0aGlzLndvcmtmbG93LmV2ZW50cyRcbiAgICAgIC5waXBlKG9mVHlwZShBWFBFbnRpdHlEZWxldGVkRXZlbnQsIEFYUEVudGl0eUNyZWF0ZUV2ZW50LCBBWFBJbXBvcnRFbnRpdHlFdmVudCksIHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQucGF5bG9hZC5lbnRpdHkgPT0gdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUgJiYgZXZlbnQucGF5bG9hZC5tb2R1bGUgPT0gdGhpcy5sb2FkZXIuZW50aXR5Lm1vZHVsZSkge1xuICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgICB0aGlzLmdyaWQ/LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgLy9cbiAgICB0aGlzLmRhdGFTb3VyY2Uub25Mb2FkaW5nQ2hhbmdlZC5waXBlKHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0LnNldE5hdmlnYXRpb25Mb2FkaW5nKHZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9nZXRJbmxpbmVDb25kaXRpb25UaXRsZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmxvYWRlci5zZXREZWZhdWx0VmlldygpO1xuICB9XG5cbiAgX2dldElubGluZUNvbmRpdGlvblRpdGxlcygpIHtcbiAgICBjb25zdCB0aXRsZXMgPSB0aGlzLmxvYWRlci5nZXRJbmxpbmVGaWx0ZXJUaXRsZXMoKTtcbiAgICB0aGlzLnNlYXJjaEJveFRpdGxlID0gdGl0bGVzLmpvaW4oJywgJyk7XG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAyKSB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGl0bGVzLnNsaWNlKDAsIDIpLmpvaW4oJywgJykgKyAnIC4uLic7XG4gICAgZWxzZSB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGl0bGVzLmpvaW4oJywgJyk7XG4gIH1cblxuICBfaGFuZGxlVmlld3NQb3BvdmVyKCkge1xuICAgIHRoaXMuYWN0aW9uU2hlZXRTZXJ2aWNlLm9wZW4oeyBjb250ZW50OiB0aGlzLnZpZXdzVGVtcGxhdGUgfSk7XG4gIH1cblxuICBoYW5kbGVEcmF3ZXJDbGljaygpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFYUExheW91dENoaWxkRHJhd2VyVG9nZ2xlKCkpO1xuICB9XG5cbiAgdG9nZ2xlU2VhcmNoQm94KCkge1xuICAgIHRoaXMuc2VhcmNoQm94Q29sbGFwc2VkID0gIXRoaXMuc2VhcmNoQm94Q29sbGFwc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBkcm9wZG93blJvd0l0ZW1zOiBBWFJvd0NvbW1hbmRJdGVtW10gPSBbXG4gICAge1xuICAgICAgdGV4dDogJ0RldGFpbHMnLFxuICAgICAgaWNvbjogJ2ZhLXNvbGlkIGZhLWV5ZScsXG4gICAgICBuYW1lOiAnZWRpdCcsXG4gICAgICBkaXZpZGVkOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgdGV4dDogJ0RlbGV0ZScsXG4gICAgICBpY29uOiAnZmEtc29saWQgZmEtdHJhc2gtY2FuJyxcbiAgICAgIG5hbWU6ICdkZWxldGUnLFxuICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgZGlzYWJsZWQ6ICF0aGlzLmNhbkRlbGV0ZSxcbiAgICB9LFxuICBdO1xuXG4gIHByaXZhdGUgaW5saW5lUm93SXRlbXM6IEFYUm93Q29tbWFuZEl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICB0ZXh0OiAnVmlldycsXG4gICAgICBpY29uOiAnZmEtc29saWQgIGZhLWV5ZScsXG4gICAgICBuYW1lOiAndmlldycsXG4gICAgICBkaXZpZGVkOiB0cnVlLFxuICAgIH0sXG4gIF07XG5cbiAgcHJvdGVjdGVkIGdldERyb3Bkb3duUm93SXRlbXMgPSAocm93RGF0YTogdW5rbm93bik6IFByb21pc2U8QVhSb3dDb21tYW5kSXRlbVtdPiA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmRyb3Bkb3duUm93SXRlbXMpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXRJbmxpbmVSb3dJdGVtcyA9IChyb3dEYXRhOiB1bmtub3duKTogQVhSb3dDb21tYW5kSXRlbVtdID0+IHtcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVSb3dJdGVtcztcbiAgfTtcblxuICBwcm90ZWN0ZWQgaGFuZGxlUm93RGJDbGljayhlOiBBWERhdGFUYWJsZVJvd0RiQ2xpY2spIHtcbiAgICBjb25zdCBkOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogZS5jb21wb25lbnQsXG4gICAgICBuYW1lOiB0aGlzLmRyb3Bkb3duUm93SXRlbXNbMF0ubmFtZSxcbiAgICAgIGRhdGE6IGUuZGF0YSxcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlUm93Q29tbWFuZENsaWNrKGQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVJvd0NvbW1hbmRDbGljayhlOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCkge1xuICAgIHN3aXRjaCAoZS5uYW1lKSB7XG4gICAgICBjYXNlICd2aWV3Jzoge1xuICAgICAgICBhd2FpdCB0aGlzLndvcmtmbG93LmV4ZWN1dGUoJ3Nob3ctcXVpY2stdmlldycsIHtcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgICBlbnRpdHk6IHRoaXMubG9hZGVyLmVudGl0eS5uYW1lLFxuICAgICAgICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2VkaXQnOiB7XG4gICAgICAgIGF3YWl0IHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnc2hvdy1kZXRhaWxzJywge1xuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIG1vZHVsZTogdGhpcy5sb2FkZXIuZW50aXR5Lm1vZHVsZSxcbiAgICAgICAgICAgIGVudGl0eTogdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpZDogZS5kYXRhLmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdkZWxldGUnOiB7XG4gICAgICAgIGF3YWl0IHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnZGVsZXRlLWVudGl0eScsIHtcbiAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgZW50aXR5OiB0aGlzLmxvYWRlci5lbnRpdHkubmFtZSxcbiAgICAgICAgICBpZHM6IFtlLmRhdGEuaWRdLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNyZWF0ZUNsaWNrKCkge1xuICAgIHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnY3JlYXRlLWVudGl0eScsIHtcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgbW9kdWxlOiB0aGlzLmxvYWRlci5lbnRpdHkubW9kdWxlLFxuICAgICAgICBlbnRpdHk6IHRoaXMubG9hZGVyLmVudGl0eS5uYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlSW1wb3J0Q2xpY2soKSB7XG4gICAgdGhpcy53b3JrZmxvdy5leGVjdXRlKCdpbXBvcnQtZW50aXR5Jywge1xuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgIGVudGl0eTogdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNvbW1hbmRDbGljayhjb21tYW5kOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKGNvbW1hbmQpIHtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnZGVsZXRlLWVudGl0eScsIHtcbiAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgZW50aXR5OiB0aGlzLmxvYWRlci5lbnRpdHkubmFtZSxcbiAgICAgICAgICBpZHM6IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3MubWFwKChjKSA9PiAoYyBhcyBhbnkpWydpZCddKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFyU2VsZWN0ZWRJdGVtcygpIHtcbiAgICB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VEcmF3ZXIobmFtZTogc3RyaW5nLCBjb2xsYXBzZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoY29sbGFwc2VkICE9IGZhbHNlKSB7XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSAnY29uZGl0aW9ucyc6XG4gICAgICAgICAgdGhpcy5sb2FkZXIucmVzZXRDb25kaXRpb25zKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NvbHVtbnMnOlxuICAgICAgICAgIHRoaXMubG9hZGVyLnJlc2V0Q29sdW1ucygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzb3J0cyc6XG4gICAgICAgICAgdGhpcy5sb2FkZXIucmVzZXRTb3J0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2hhbmdlU2VhcmNoVmFsdWUoZTogQVhWYWx1ZUNoYW5nZWRFdmVudCkge1xuICAgIGlmIChlLmlzVXNlckludGVyYWN0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRlci5oYW5kbGVJbmxpbmVTZWFyY2goZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZEN1c3RvbVZpZXdQb3B1cCgpIHtcbiAgICBjb25zdCBuZXdWaWV3ID0ge1xuICAgICAgbmFtZTogJ2N1c3RvbS12aWV3JyxcbiAgICAgIHRpdGxlOiAnQ3VzdG9tIFZpZXcnLFxuICAgICAgZml4ZWQ6IGZhbHNlLFxuICAgICAgc29ydHM6IFtdLFxuICAgICAgY29sdW1uczogY29udmVydFByb3BlcnRpZXNUb0NvbHVtbnMoLi4udGhpcy5sb2FkZXIuZW50aXR5LnByb3BlcnRpZXMpLFxuICAgICAgY29uZGl0aW9uczogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHBvcHVwID0gYXdhaXQgdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihBWFBFbnRpdHlDcmVhdGVDdXN0b21WaWV3Q29tcG9uZW50LCB7XG4gICAgICB0aXRsZTogJ0NyZWF0ZSBDdXN0b20gVmlldycsXG4gICAgICBzaXplOiB0aGlzLnBsYXRmb3JtLmlzKCdNb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdTTScpID8gJ2Z1bGwnIDogJ21kJyxcbiAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbG9hZGVyOiB0aGlzLmxvYWRlcixcbiAgICAgICAgc2VsZWN0ZWRWaWV3OiBuZXdWaWV3LFxuICAgICAgICBtb2RlOiAnY3JlYXRlJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKHBvcHVwLmRhdGE/LnNhdmUgPT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWRWaWV3OiAnLCBwb3B1cC5kYXRhLnVwZGF0ZWRWaWV3KTtcbiAgICAgIHRoaXMubG9hZGVyLmNyZWF0ZVZpZXcocG9wdXAuZGF0YS51cGRhdGVkVmlldyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVWaWV3UG9wdXAoZTogQVhDbGlja0V2ZW50LCBzZWxlY3RlZFZpZXc6IGFueSkge1xuICAgIC8vIChlLm5hdGl2ZUV2ZW50IGFzIFVJRXZlbnQpLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IHBvcHVwID0gYXdhaXQgdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihBWFBFbnRpdHlDcmVhdGVDdXN0b21WaWV3Q29tcG9uZW50LCB7XG4gICAgICB0aXRsZTogJ01vZGlmeSBDdXN0b20gVmlldycsXG4gICAgICBzaXplOiB0aGlzLnBsYXRmb3JtLmlzKCdNb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdTTScpID8gJ2Z1bGwnIDogJ21kJyxcbiAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbG9hZGVyOiB0aGlzLmxvYWRlcixcbiAgICAgICAgc2VsZWN0ZWRWaWV3LFxuICAgICAgICBtb2RlOiAnZWRpdCcsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChwb3B1cC5kYXRhPy5kZWxldGUgPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5sb2FkZXIuZGVsZXRlVmlldyhwb3B1cC5kYXRhLnZpZXdOYW1lKTtcbiAgICB9XG4gICAgaWYgKHBvcHVwLmRhdGE/LnNhdmUgPT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWRWaWV3OiAnLCBwb3B1cC5kYXRhLnVwZGF0ZWRWaWV3KTtcbiAgICAgIHRoaXMubG9hZGVyLnVwZGF0ZVZpZXcocG9wdXAuZGF0YS51cGRhdGVkVmlldyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLnJlc2V0KCk7XG4gIH1cbn1cbiIsIjxheC1kcmF3ZXItY29udGFpbmVyPlxuICA8IS0tIDxheC1kcmF3ZXIgI2RyYXdlciBsb2NhdGlvbj1cInN0YXJ0XCIgW2NvbGxhcHNlZF09XCJ0cnVlXCIgW21vZGVdPVwicGxhdGZvcm0uaXMoJ1NNJykgPyAnb3ZlcmxheScgOiAncHVzaCdcIj5cbiAgICA8YXgtY29udGVudCBjbGFzcz1cImF4LXctNjQgYXgtYm9yZGVyLWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1wLTYgYXgtcHktNCBheC1nYXAtNiBheC1mbGV4IGF4LWZsZXgtY29sXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiYXgtdGV4dC0yeGwgYXgtZm9udC1ib2xkXCI+Rm9sZGVyczwvcD5cbiAgICAgICAgPGF4LXNpZGUtbWVudT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBub2RlIG9mIG1lbnVJdGVtc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpZGVNZW51XCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYXgtc2lkZS1tZW51PlxuICAgICAgICA8bmctdGVtcGxhdGUgI3NpZGVNZW51IGxldC1pdGVtPlxuICAgICAgICAgIDxheC1zaWRlLW1lbnUtaXRlbSBbdGV4dF09XCJpdGVtLnRleHRcIj5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZm9sZGVyIGF4LXRleHQtd2FybmluZy01MDBcIj48L2F4LWljb24+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW5cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzaWRlTWVudVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjaGlsZCB9XCI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9heC1zaWRlLW1lbnUtaXRlbT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvYXgtY29udGVudD5cbiAgPC9heC1kcmF3ZXI+IC0tPlxuICA8YXgtY29udGVudCBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0wIG1kOmF4LWdhcC00IGF4LXB4LTQgYXgtcHktMyBtZDpheC1weS00IG1kOmF4LXB4LTYgYXgtYmctc3VyZmFjZSBheC1ib3JkZXItYiBtZDpheC1ib3JkZXItMCBtZDpheC1iZy1kZWZhdWx0XCJcbiAgICA+XG4gICAgICBAaWYocGxhdGZvcm0uaXMoJ01EJykpe1xuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1iZXR3ZWVuIGF4LW1iLTRcIj5cbiAgICAgICAgQGlmKHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGg9PTApe1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdGV4dC14bCBheC1mb250LWJvbGRcIj57eyB0aXRsZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTJcIj5cbiAgICAgICAgICBAaWYoY2FuQ3JlYXRlKSB7XG4gICAgICAgICAgPGF4LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImF4LXNtXCIgKG9uQ2xpY2spPVwiaGFuZGxlQ3JlYXRlQ2xpY2soKVwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1hZGRcIj48L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b24gY29sb3I9XCJnaG9zdFwiIGNsYXNzPVwiYXgtc21cIiAjbW9yZT5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZWxsaXBzaXMtdmVydGljYWxcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsIFthZGFwdGl2aXR5RW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRXhwb3J0XCIgY2xhc3M9XCJheC1mb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtZmlsZS1leHBvcnRcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1AZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtM1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC14bCBheC1mb250LWJvbGRcIj4ge3sgdGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCB9fSBJdGVtcyBTZWxlY3RlZCA8L3NwYW4+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkSXRlbXMoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImF4LXRleHQtc20gYXgtdGV4dC1wcmltYXJ5IGRhcms6YXgtdGV4dC1wcmltYXJ5LTMwMCBheC11bmRlcmxpbmUgYXgtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgPkNsZWFyIEl0ZW1zPC9zcGFuXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0yXCI+XG4gICAgICAgICAgQGlmKGNhbkRlbGV0ZSkge1xuICAgICAgICAgIDxheC1idXR0b24gY29sb3I9XCJkYW5nZXJcIiBjbGFzcz1cImF4LXNtXCIgKG9uQ2xpY2spPVwiaGFuZGxlQ29tbWFuZENsaWNrKCdkZWxldGUnKVwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiPiA8L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b24gY29sb3I9XCJnaG9zdFwiIGNsYXNzPVwiYXgtc21cIiAjbW9yZT5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZWxsaXBzaXMtdmVydGljYWxcIj4gPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgPGF4LWJ1dHRvbiBbZGlzYWJsZWRdPVwidGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCAhPSAwXCIgW3RleHRdPVwiKHZpZXckIHwgYXN5bmMpPy50aXRsZVwiIGNvbG9yPVwiZ2hvc3RcIj5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWV5ZSBheC10ZXh0LW5ldXRyYWwtNDAwXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jYXJldC1kb3duXCI+PC9pPlxuICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgIDxheC1kcm9wZG93bi1wYW5lbCBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3QgY2xhc3M9XCJheC1iZy1zdXJmYWNlXCI+XG4gICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiPnt7ICdlbnRpdHkucHVibGljLXZpZXcnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2F4LXRpdGxlPlxuICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdiBvZiBwdWJsaWNWaWV3cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwidi50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LWJnLW9uLXN1cmZhY2VdPVwiKHZpZXckIHwgYXN5bmMpID09IHZcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImxvYWRlci5zZXRWaWV3KHYubmFtZSlcIlxuICAgICAgICAgICAgICA+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlIGNsYXNzPVwiYXgtZm9udC1ib2xkIGF4LW9wYWNpdHktMTAwXCIgKm5nSWY9XCJoYXNDdXN0b21WaWV3cyQgfCBhc3luY1wiPkNyZWF0ZWQgYnkgbWU8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdiBvZiBjdXN0b21WaWV3cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwidi50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LWJnLW9uLXN1cmZhY2VdPVwiKHZpZXckIHwgYXN5bmMpID09IHZcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImxvYWRlci5zZXRWaWV3KHYubmFtZSlcIlxuICAgICAgICAgICAgICA+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZmVhdHVyZT1cIidheHAtZW50aXR5LWxpc3QtY3VzdG9tLXZpZXcnXCI+XG4gICAgICAgICAgICAgICAgPGF4LWRpdmlkZXI+PC9heC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWRkQ3VzdG9tVmlld1BvcHVwKClcIlxuICAgICAgICAgICAgICAgICAgdGV4dD1cIkFkZCBDdXN0b20gVmlld1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICA+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0yXCI+XG4gICAgICAgICAgQGlmKHNlYXJjaEJveFRpdGxlKXtcbiAgICAgICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cInRvZ2dsZVNlYXJjaEJveCgpXCIgW2Rpc2FibGVkXT1cInRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggIT0gMFwiIGNvbG9yPVwiZ2hvc3RcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtc2VhcmNoIGF4LXRleHQtbmV1dHJhbC00MDBcIj4gPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8YXgtYnV0dG9uIFtkaXNhYmxlZF09XCJ0aGlzLmdyaWQ/LnNlbGVjdGVkUm93cz8ubGVuZ3RoICE9IDBcIiBjb2xvcj1cImdob3N0XCIgKG9uQ2xpY2spPVwiY29sdW1uc0RyYXdlci5vcGVuKClcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtYmFycyBheC10ZXh0LW5ldXRyYWwtNDAwXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCAhPSAwXCJcbiAgICAgICAgICAgIGNvbG9yPVwiZ2hvc3RcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwiY29uZGl0aW9uc0RyYXdlci5vcGVuKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtc2xpZGVycyBheC10ZXh0LW5ldXRyYWwtNDAwXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgIEBpZiAoKGNvbmRpdGlvbnNDb3VudCQgfCBhc3luYykpIHtcbiAgICAgICAgICAgIDxheC1zdWZmaXg+XG4gICAgICAgICAgICAgIDxheC1iYWRnZSBbY29sb3JdPVwiJ3ByaW1hcnknXCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIDxheC1idXR0b24gW2Rpc2FibGVkXT1cInRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggIT0gMFwiIGNvbG9yPVwiZ2hvc3RcIiAob25DbGljayk9XCJzb3J0c0RyYXdlci5vcGVuKClcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtYmFycy1zb3J0IGF4LXRleHQtbmV1dHJhbC00MDBcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgQGlmICgoc29ydENvdW50JCB8IGFzeW5jKSkge1xuICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgPGF4LWJhZGdlIFtjb2xvcl09XCIncHJpbWFyeSdcIj48L2F4LWJhZGdlPlxuICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtjbGFzcy5jb2xsYXBzZWQtc2VhcmNoLWJveF09XCJzZWFyY2hCb3hDb2xsYXBzZWRcIiBjbGFzcz1cImF4LXRyYW5zaXRpb24tYWxsIGF4LW10LTRcIj5cbiAgICAgICAgPGF4LXNlYXJjaC1ib3hcbiAgICAgICAgICBbdGl0bGVdPVwic2VhcmNoQm94VGl0bGVcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIoJ3dpZGdldC5sb29rdXAuc2VhcmNoJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSArIHNlYXJjaEJveFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICA+PGF4LWNsZWFyLWJ1dHRvbj48L2F4LWNsZWFyLWJ1dHRvblxuICAgICAgICA+PC9heC1zZWFyY2gtYm94PlxuICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW4gYXgtZ2FwLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXRleHQteGwgbWQ6YXgtdGV4dC0zeGwgYXgtZm9udC1ib2xkIGF4LW1iLTJcIj57eyB0aXRsZSB9fTwvZGl2PlxuICAgICAgICBAaWYodGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aD09MCl7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0zXCI+XG4gICAgICAgICAgQGlmKGNhbkNyZWF0ZSkge1xuICAgICAgICAgIDxheC1idXR0b24gW3RleHRdPVwiJ2NyZWF0ZS1uZXcnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIiBjb2xvcj1cInByaW1hcnlcIiAob25DbGljayk9XCJoYW5kbGVDcmVhdGVDbGljaygpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWFkZFwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIH0gQGlmKGNhbkltcG9ydCl7XG4gICAgICAgICAgPGF4LWJ1dHRvbiBbdGV4dF09XCInZW50aXR5LmFjdGlvbnMnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIiBjb2xvcj1cImdob3N0XCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWVsbGlwc2lzLXZlcnRpY2FsXCI+PC9pPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICA8YXgtZHJvcGRvd24tcGFuZWwgW2FkYXB0aXZpdHlFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIChvbkNsaWNrKT1cImhhbmRsZUltcG9ydENsaWNrKClcIiB0ZXh0PVwiSW1wb3J0XCIgY2xhc3M9XCJheC1mb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtZmlsZS1pbXBvcnRcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgICA8IS0tIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRXhwb3J0XCIgY2xhc3M9XCJheC1mb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtZmlsZS1leHBvcnRcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT4gLS0+XG4gICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfUBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTNcIj5cbiAgICAgICAgICBAaWYoY2FuRGVsZXRlKSB7XG4gICAgICAgICAgPGF4LWJ1dHRvbiB0ZXh0PVwiRGVsZXRlIEl0ZW1zXCIgY29sb3I9XCJkYW5nZXJcIiAob25DbGljayk9XCJoYW5kbGVDb21tYW5kQ2xpY2soJ2RlbGV0ZScpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCI+PC9pPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b24gW3RleHRdPVwiJ2VudGl0eS5hY3Rpb25zJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCIgY29sb3I9XCJnaG9zdFwiPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFZpZXcgTW9kZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgQGlmKHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGg9PTApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtdy1mdWxsIGF4LWp1c3RpZnktYmV0d2VlbiBheC1nYXAtM1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0zXCI+XG4gICAgICAgICAgICA8YXgtYnV0dG9uIFt0ZXh0XT1cIih2aWV3JCB8IGFzeW5jKT8udGl0bGVcIiAjdmlld3MgY29sb3I9XCJnaG9zdFwiPlxuICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtZXllXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNhcmV0LWRvd25cIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgICAgICA8YXgtZHJvcGRvd24tcGFuZWwgW2FkYXB0aXZpdHlFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdCBjbGFzcz1cImF4LWJnLXN1cmZhY2VcIj5cbiAgICAgICAgICAgICAgICAgIDxheC10aXRsZSBjbGFzcz1cImF4LWZvbnQtYm9sZCBheC1vcGFjaXR5LTEwMFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICdlbnRpdHkucHVibGljLXZpZXcnIHwgdHJhbnNsYXRlIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgIH19PC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgdiBvZiBwdWJsaWNWaWV3cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInYudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtYmctb24tc3VyZmFjZV09XCIodmlldyQgfCBhc3luYykgPT0gdlwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImxvYWRlci5zZXRWaWV3KHYubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgPjwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1mb250LWJvbGQgYXgtb3BhY2l0eS0xMDBcIiAqbmdJZj1cImhhc0N1c3RvbVZpZXdzJCB8IGFzeW5jXCI+Q3JlYXRlZCBieSBtZTwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC1wZS00IGF4LWZsZXggYXgtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHYgb2YgY3VzdG9tVmlld3MkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ2LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmF4LWJnLW9uLXN1cmZhY2VdPVwiKHZpZXckIHwgYXN5bmMpID09IHZcIlxuICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJsb2FkZXIuc2V0Vmlldyh2Lm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cInVwZGF0ZVZpZXdQb3B1cCgkZXZlbnQsIHYpXCIgY2xhc3M9XCJheC14c1wiIGxvb2s9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhciBmYS1lZGl0XCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZmVhdHVyZT1cIidheHAtZW50aXR5LWxpc3QtY3VzdG9tLXZpZXcnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxheC1kaXZpZGVyPjwvYXgtZGl2aWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dD1cIkFkZCBDdXN0b20gVmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWRkQ3VzdG9tVmlld1BvcHVwKClcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZm9udC1zZW1pYm9sZCBheC10ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICA+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgQGlmKHNlYXJjaEJveFRpdGxlKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC13LTcyXCI+XG4gICAgICAgICAgICAgIDxheC1zZWFyY2gtYm94XG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInNlYXJjaEJveFRpdGxlXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiaGFuZGxlQ2hhbmdlU2VhcmNoVmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIignd2lkZ2V0Lmxvb2t1cC5zZWFyY2gnIHwgdHJhbnNsYXRlIHwgYXN5bmMpICsgc2VhcmNoQm94UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgID48YXgtY2xlYXItYnV0dG9uPjwvYXgtY2xlYXItYnV0dG9uXG4gICAgICAgICAgICAgID48L2F4LXNlYXJjaC1ib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0zXCI+XG4gICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIidlbnRpdHkuY29sdW1ucycgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgIGNvbG9yPVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAjY29sdW1uc1xuICAgICAgICAgICAgICAob25DbGljayk9XCJjb2x1bW5zRHJhd2VyLm9wZW4oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1iYXJzXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8YXgtYmFkZ2UgdGV4dD1cInt7IGNvbHVtbnNDb3VudCQgfCBhc3luYyB9fVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvYXgtYmFkZ2U+XG4gICAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgICA8YXgtYnV0dG9uIHRleHQ9XCJGaWx0ZXJzXCIgY29sb3I9XCJnaG9zdFwiIChvbkNsaWNrKT1cImNvbmRpdGlvbnNEcmF3ZXIub3BlbigpXCIgI2NvbmRpdGlvbnM+XG4gICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1zbGlkZXJzXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8YXgtYmFkZ2UgdGV4dD1cInt7IGNvbmRpdGlvbnNDb3VudCQgfCBhc3luYyB9fVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvYXgtYmFkZ2U+XG4gICAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgICA8YXgtYnV0dG9uIFt0ZXh0XT1cIidlbnRpdHkuc29ydCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiIGNvbG9yPVwiZ2hvc3RcIiAob25DbGljayk9XCJzb3J0c0RyYXdlci5vcGVuKClcIj5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWJhcnMtc29ydFwiPjwvaT5cbiAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxheC1zdWZmaXggKm5nSWY9XCIoc29ydENvdW50JCB8IGFzeW5jKSEgPiAwXCI+XG4gICAgICAgICAgICAgICAgPGF4LWJhZGdlIHRleHQ9XCJ7eyBzb3J0Q291bnQkIHwgYXN5bmMgfX1cIiBjb2xvcj1cInByaW1hcnlcIj48L2F4LWJhZGdlPlxuICAgICAgICAgICAgICA8L2F4LXN1ZmZpeD5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB9IEBlbHNle1xuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBTZWxlY3Rpb24gTW9kZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1nYXAtMyBheC1pdGVtcy1jZW50ZXIgYXgtaC0xMFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LXhsIGF4LWZvbnQtYm9sZFwiPiB7eyB0aGlzLmdyaWQ/LnNlbGVjdGVkUm93cz8ubGVuZ3RoIH19IEl0ZW1zIFNlbGVjdGVkIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclNlbGVjdGVkSXRlbXMoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtdGV4dC1zbSBheC10ZXh0LXByaW1hcnkgZGFyazpheC10ZXh0LXByaW1hcnktMzAwIGF4LXVuZGVybGluZSBheC1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgID5DbGVhciBJdGVtczwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImF4LWZsZXgtMSBheC1weC02IGF4LXB5LTQgYXgtZmxleCBheC1vdmVyZmxvdy1hdXRvXCI+XG4gICAgICA8YXgtZGF0YS10YWJsZVxuICAgICAgICAjZ3JpZFxuICAgICAgICBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiXG4gICAgICAgIGNsYXNzPVwiYXgtZmxleC0xXCJcbiAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgIFtwYWdpbmddPVwidHJ1ZVwiXG4gICAgICAgIFtmZXRjaERhdGFNb2RlXT1cIidtYW51YWwnXCJcbiAgICAgICAgKG9uUm93RGJDbGljayk9XCJoYW5kbGVSb3dEYkNsaWNrKCRldmVudClcIlxuICAgICAgICBbbG9hZGluZ109XCJ7IGVuYWJsZWQ6IHRydWUsIGFuaW1hdGlvbjogdHJ1ZSB9XCJcbiAgICAgID5cbiAgICAgICAgPCEtLSA8YXgtaW5kZXgtY29sdW1uICpuZ0lmPVwiIXBsYXRmb3JtLmlzKCdTTScpXCIgW3dpZHRoXT1cIic4NXB4J1wiPjwvYXgtaW5kZXgtY29sdW1uPiAtLT5cbiAgICAgICAgPGF4LXNlbGVjdC1jb2x1bW4gZml4ZWQ9XCJzdGFydFwiIFt3aWR0aF09XCInNTBweCdcIj48L2F4LXNlbGVjdC1jb2x1bW4+XG4gICAgICAgIEBmb3IoY29sIG9mIChjb2x1bW5zJCB8IGFzeW5jKTt0cmFjayBjb2wubmFtZSkge1xuICAgICAgICA8YXhwLXdpZGdldC1jb2x1bW4tcmVuZGVyZXJcbiAgICAgICAgICAqbmdJZj1cImNvbC52aXNpYmxlXCJcbiAgICAgICAgICBbc2NoZW1hXT1cImNvbC5zY2hlbWFcIlxuICAgICAgICAgIFtkYXRhRmllbGRdPVwiY29sLm5hbWVcIlxuICAgICAgICAgIFtjYXB0aW9uXT1cImNvbC50aXRsZVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwiY29sLm9wdGlvbnNcIlxuICAgICAgICAgIFtkaXNwbGF5Rm9ybWF0XT1cImNvbC5kaXNwbGF5Rm9ybWF0XCJcbiAgICAgICAgICBbd2lkdGhdPVwiJzE4MHB4J1wiXG4gICAgICAgICAgW2FsbG93U29ydGluZ109XCJmYWxzZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9heHAtd2lkZ2V0LWNvbHVtbi1yZW5kZXJlcj5cbiAgICAgICAgfVxuICAgICAgICA8YXgtZHJvcGRvd24tY29tbWFuZC1jb2x1bW5cbiAgICAgICAgICBmaXhlZD1cImVuZFwiXG4gICAgICAgICAgW3dpZHRoXT1cIic2MHB4J1wiXG4gICAgICAgICAgW2l0ZW1zXT1cImdldERyb3Bkb3duUm93SXRlbXNcIlxuICAgICAgICAgIChvbkl0ZW1DbGljayk9XCJoYW5kbGVSb3dDb21tYW5kQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgID48L2F4LWRyb3Bkb3duLWNvbW1hbmQtY29sdW1uPlxuICAgICAgICA8YXgtY29tbWFuZC1jb2x1bW5cbiAgICAgICAgICBmaXhlZD1cImVuZFwiXG4gICAgICAgICAgW3dpZHRoXT1cIic2MHB4J1wiXG4gICAgICAgICAgW2l0ZW1zXT1cImdldElubGluZVJvd0l0ZW1zXCJcbiAgICAgICAgICAob25JdGVtQ2xpY2spPVwiaGFuZGxlUm93Q29tbWFuZENsaWNrKCRldmVudClcIlxuICAgICAgICA+PC9heC1jb21tYW5kLWNvbHVtbj5cbiAgICAgIDwvYXgtZGF0YS10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9heC1jb250ZW50PlxuICA8YXgtZHJhd2VyIChjb2xsYXBzZWRDaGFuZ2UpPVwiY2xvc2VEcmF3ZXIoJ2NvbHVtbnMnLCAkZXZlbnQpXCIgI2NvbHVtbnNEcmF3ZXIgbG9jYXRpb249XCJlbmRcIiBbbW9kZV09XCInb3ZlcmxheSdcIj5cbiAgICA8YXgtY29udGVudCBjbGFzcz1cImF4LXctWzg1dnddIG1kOmF4LXctWzQ1dnddIGxnOmF4LXctWzM1dnddIDJ4bDpheC13LVsyMHZ3XSBheC1ib3JkZXItZVwiPlxuICAgICAgPGF4cC1saXN0LXZpZXctb3B0aW9uLWNvbHVtbnMgW2xvYWRlcl09XCJsb2FkZXJcIiAob25DbG9zZWQpPVwiY29sdW1uc0RyYXdlci5jbG9zZSgpXCI+PC9heHAtbGlzdC12aWV3LW9wdGlvbi1jb2x1bW5zPlxuICAgIDwvYXgtY29udGVudD5cbiAgPC9heC1kcmF3ZXI+XG4gIDxheC1kcmF3ZXIgKGNvbGxhcHNlZENoYW5nZSk9XCJjbG9zZURyYXdlcignY29uZGl0aW9ucycsICRldmVudClcIiAjY29uZGl0aW9uc0RyYXdlciBsb2NhdGlvbj1cImVuZFwiIFttb2RlXT1cIidvdmVybGF5J1wiPlxuICAgIDxheC1jb250ZW50IGNsYXNzPVwiYXgtdy1bODV2d10gbWQ6YXgtdy1bNDV2d10gbGc6YXgtdy1bMzV2d10gMnhsOmF4LXctWzI1dnddIGF4LWJvcmRlci1lXCI+XG4gICAgICA8YXhwLWxpc3Qtdmlldy1vcHRpb24tY29uZGl0aW9uc1xuICAgICAgICBbbG9hZGVyXT1cImxvYWRlclwiXG4gICAgICAgIChvbkNsb3NlZCk9XCJjb25kaXRpb25zRHJhd2VyLmNsb3NlKClcIlxuICAgICAgPjwvYXhwLWxpc3Qtdmlldy1vcHRpb24tY29uZGl0aW9ucz5cbiAgICA8L2F4LWNvbnRlbnQ+XG4gIDwvYXgtZHJhd2VyPlxuICA8YXgtZHJhd2VyIChjb2xsYXBzZWRDaGFuZ2UpPVwiY2xvc2VEcmF3ZXIoJ3NvcnRzJywgJGV2ZW50KVwiICNzb3J0c0RyYXdlciBsb2NhdGlvbj1cImVuZFwiIFttb2RlXT1cIidvdmVybGF5J1wiPlxuICAgIDxheC1jb250ZW50IGNsYXNzPVwiYXgtdy1bODV2d10gbWQ6YXgtdy1bNDV2d10gbGc6YXgtdy1bMzV2d10gMnhsOmF4LXctWzIwdnddIGF4LWJvcmRlci1lXCI+XG4gICAgICA8YXhwLWxpc3Qtdmlldy1vcHRpb24tc29ydGluZyAob25DbG9zZWQpPVwic29ydHNEcmF3ZXIuY2xvc2UoKVwiIFtsb2FkZXJdPVwibG9hZGVyXCI+PC9heHAtbGlzdC12aWV3LW9wdGlvbi1zb3J0aW5nPlxuICAgIDwvYXgtY29udGVudD5cbiAgPC9heC1kcmF3ZXI+XG48L2F4LWRyYXdlci1jb250YWluZXI+XG4iXX0=
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dHMvc3JjL2xpYi9hZG1pbi9lbnRpdHktbGF5b3V0L2VudGl0eS1saXN0LXZpZXcvZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dHMvc3JjL2xpYi9hZG1pbi9lbnRpdHktbGF5b3V0L2VudGl0eS1saXN0LXZpZXcvZW50aXR5LWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQWdELE1BQU0sK0JBQStCLENBQUM7QUFDbkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXBDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBRUwsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsMEJBQTBCLEdBQzNCLE1BQU0seUJBQXlCLENBQUM7QUFDakMs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LEVBQUUsQ0FBQztJQUMxQixDQUFDOzhHQXBSVSwwQkFBMEI7a0dBQTFCLDBCQUEwQix1Q0FGMUIsQ0FBQyxjQUFjLENBQUMsZ1VDL0I3Qix3K2VBMFNzQjs7MkZEelFULDBCQUEwQjtrQkFQdEMsU0FBUztvQ0FHTyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsY0FBYyxDQUFDOytLQXVDQyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBRVAsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNO2dCQUNjLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEFjdGlvblNoZWV0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9hY3Rpb24tc2hlZXQnO1xuaW1wb3J0IHsgQVhEYXRhVGFibGVDb21wb25lbnQsIEFYUm93Q29tbWFuZEl0ZW0sIEFYUm93Q29tbWFuZEl0ZW1DbGlja0V2ZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuaW1wb3J0IHsgQVhEcmF3ZXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJhd2VyJztcbmltcG9ydCB7IEFYUG9wdXBTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcHVwJztcbmltcG9ydCB7IEFYUGxhdGZvcm0gfSBmcm9tICdAYWNvcmV4L2NvcmUvcGxhdGZvcm0nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuXG5pbXBvcnQgeyBBWENsaWNrRXZlbnQsIEFYVmFsdWVDaGFuZ2VkRXZlbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IEFYRGF0YVRhYmxlUm93RGJDbGljayB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kYXRhLXRhYmxlL2xpYi9iYXNlLWRhdGEtdGFibGUuY2xhc3MnO1xuaW1wb3J0IHsgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQVhQQWRtaW5MYXlvdXRTdGF0ZSxcbiAgQVhQTGF5b3V0Q2hpbGREcmF3ZXJUb2dnbGUsXG4gIEFYUExheW91dFNlcnZpY2UsXG4gIEFYUF9NRU5VX0xPQURFUixcbiAgY29udmVydFByb3BlcnRpZXNUb0NvbHVtbnMsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUFdvcmtmbG93U2VydmljZSwgb2ZUeXBlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5pbXBvcnQgeyBBWFBFbnRpdHlDcmVhdGVFdmVudCB9IGZyb20gJy4uLy4uL2VudGl0eS1sYXlvdXQvd29ya2Zsb3dzL2NyZWF0ZS1lbnRpdHkud29ya2Zsb3cnO1xuaW1wb3J0IHsgQVhQRW50aXR5RGVsZXRlZEV2ZW50IH0gZnJvbSAnLi4vLi4vZW50aXR5LWxheW91dC93b3JrZmxvd3MvZGVsZXRlLWVudGl0eS53b3JrZmxvdyc7XG5pbXBvcnQgeyBBWFBJbXBvcnRFbnRpdHlFdmVudCB9IGZyb20gJy4uL3dvcmtmbG93cy9pbXBvcnQtZW50aXR5LndvcmtmbG93JztcbmltcG9ydCB7IEFYUEVudGl0eUNyZWF0ZUN1c3RvbVZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZW50aXR5LWN1c3RvbS12aWV3L2VudGl0eS1jdXN0b20tdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhQTGlzdFZpZXdMb2FkZXIgfSBmcm9tICcuL2xpc3Qtdmlldy5jb25maWcnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdlbnRpdHktbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2VudGl0eS1saXN0LXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW0FYVW5zdWJzY3JpYmVyXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5TGlzdFZpZXdDb21wb25lbnQge1xuICBwcml2YXRlIHN0b3JlID0gaW5qZWN0KFN0b3JlPEFYUEFkbWluTGF5b3V0U3RhdGU+KTtcbiAgcHJpdmF0ZSB3b3JrZmxvdyA9IGluamVjdChBWFBXb3JrZmxvd1NlcnZpY2UpO1xuICBwcml2YXRlIGxheW91dCA9IGluamVjdChBWFBMYXlvdXRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgbWFudUxvYWRlciA9IGluamVjdChBWFBfTUVOVV9MT0FERVIpO1xuXG4gIHByb3RlY3RlZCBsb2FkZXIgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGFbJ2xvYWRlciddIGFzIEFYUExpc3RWaWV3TG9hZGVyO1xuICBwcm90ZWN0ZWQgdGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoQm94UGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoQm94VGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcm90ZWN0ZWQgc2VhcmNoQm94Q29sbGFwc2VkOiBib29sZWFuID0gdHJ1ZTtcblxuICBwcm90ZWN0ZWQgcHVibGljVmlld3MkID0gdGhpcy5sb2FkZXIucHVibGljVmlld3MkO1xuICBwcm90ZWN0ZWQgY3VzdG9tVmlld3MkID0gdGhpcy5sb2FkZXIuY3VzdG9tVmlld3MkO1xuICBwcm90ZWN0ZWQgaGFzQ3VzdG9tVmlld3MkID0gdGhpcy5sb2FkZXIuaGFzQ3VzdG9tVmlld3MkO1xuICBwcm90ZWN0ZWQgdmlldyQgPSB0aGlzLmxvYWRlci52aWV3JDtcbiAgLy9cbiAgcHJvdGVjdGVkIGNvbmRpdGlvbnMkID0gdGhpcy5sb2FkZXIuY29uZGl0aW9ucyQ7XG4gIHByb3RlY3RlZCBjb25kaXRpb25zQ291bnQkID0gdGhpcy5sb2FkZXIuY29uZGl0aW9uc0NvdW50JDtcbiAgLy9cbiAgcHJvdGVjdGVkIGNvbHVtbnMkID0gdGhpcy5sb2FkZXIuZGlzcGxheUNvbHVtbnMkO1xuICBwcm90ZWN0ZWQgY29sdW1uc0NvdW50JCA9IHRoaXMubG9hZGVyLmRpc3BsYXlDb2x1bW5zQ291bnQkO1xuICAvL1xuICBwcm90ZWN0ZWQgc29ydCQgPSB0aGlzLmxvYWRlci5zb3J0cyQ7XG4gIHByb3RlY3RlZCBzb3J0Q291bnQkID0gdGhpcy5sb2FkZXIuc29ydHNDb3VudCQ7XG4gIC8vXG4gIHByb3RlY3RlZCBkYXRhU291cmNlID0gdGhpcy5sb2FkZXIuZGF0YVNvdXJjZTtcbiAgLy9cbiAgcHJvdGVjdGVkIGNhbkRlbGV0ZSA9IHRoaXMubG9hZGVyLmVudGl0eS5lZGl0T3B0aW9ucz8uZGVsZXRlID8/IHRydWU7XG4gIHByb3RlY3RlZCBjYW5DcmVhdGUgPSB0aGlzLmxvYWRlci5lbnRpdHkuZWRpdE9wdGlvbnM/LmNyZWF0ZSA/PyB0cnVlO1xuICBwcm90ZWN0ZWQgY2FuVXBkYXRlID0gdGhpcy5sb2FkZXIuZW50aXR5LmVkaXRPcHRpb25zPy51cGRhdGUgPz8gdHJ1ZTtcbiAgcHJvdGVjdGVkIGNhbkltcG9ydCA9IHRoaXMubG9hZGVyLmVudGl0eS5lZGl0T3B0aW9ucz8uaW1wb3J0ID8/IGZhbHNlO1xuICAvL1xuICBwcm90ZWN0ZWQgZm9jdXNlZFJvdzogYW55O1xuICAvL1xuICBAVmlld0NoaWxkKCd2aWV3c1RlbXBsYXRlJykgdmlld3NUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICAvLyBAVmlld0NoaWxkKCdncmlkJykgZ3JpZCE6IEFYRGF0YVRhYmxlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdncmlkJykgZ3JpZCE6IEFYRGF0YVRhYmxlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdlbnRpdHlWaWV3RHJhd2VyJykgZW50aXR5Vmlld0RyYXdlciE6IEFYRHJhd2VyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgcG9wdXBTZXJ2aWNlID0gaW5qZWN0KEFYUG9wdXBTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGlvblNoZWV0U2VydmljZTogQVhBY3Rpb25TaGVldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZXI6IEFYVW5zdWJzY3JpYmVyLFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogQVhQbGF0Zm9ybSxcbiAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICAvL1RPRE86IG5hbWVzcGFjZSwgbW9kdWxlIG5hbWUgaXNzdWVzXG4gICAgdGhpcy50aXRsZSA9IHRoaXMubWFudUxvYWRlci5jdXJyZW50TWVudUl0ZW0oKT8udGV4dCA/PyB0aGlzLmxvYWRlci5lbnRpdHkuZm9ybWF0cz8ubGlzdCA/PyB0aGlzLmxvYWRlci5lbnRpdHkuZm9ybWF0cz8uZGVmYXVsdCA/PyAnVGl0bGUnO1xuICAgIC8vXG5cbiAgICB0aGlzLndvcmtmbG93LmV2ZW50cyRcbiAgICAgIC5waXBlKG9mVHlwZShBWFBFbnRpdHlEZWxldGVkRXZlbnQsIEFYUEVudGl0eUNyZWF0ZUV2ZW50LCBBWFBJbXBvcnRFbnRpdHlFdmVudCksIHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQucGF5bG9hZC5lbnRpdHkgPT0gdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUgJiYgZXZlbnQucGF5bG9hZC5tb2R1bGUgPT0gdGhpcy5sb2FkZXIuZW50aXR5Lm1vZHVsZSkge1xuICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgICB0aGlzLmdyaWQ/LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgLy9cbiAgICB0aGlzLmRhdGFTb3VyY2Uub25Mb2FkaW5nQ2hhbmdlZC5waXBlKHRoaXMudW5zdWJzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRoaXMubGF5b3V0LnNldE5hdmlnYXRpb25Mb2FkaW5nKHZhbHVlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9nZXRJbmxpbmVDb25kaXRpb25UaXRsZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmxvYWRlci5zZXREZWZhdWx0VmlldygpO1xuICB9XG5cbiAgX2dldElubGluZUNvbmRpdGlvblRpdGxlcygpIHtcbiAgICBjb25zdCB0aXRsZXMgPSB0aGlzLmxvYWRlci5nZXRJbmxpbmVGaWx0ZXJUaXRsZXMoKTtcbiAgICB0aGlzLnNlYXJjaEJveFRpdGxlID0gdGl0bGVzLmpvaW4oJywgJyk7XG4gICAgaWYgKHRpdGxlcy5sZW5ndGggPiAyKSB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGl0bGVzLnNsaWNlKDAsIDIpLmpvaW4oJywgJykgKyAnIC4uLic7XG4gICAgZWxzZSB0aGlzLnNlYXJjaEJveFBsYWNlaG9sZGVyID0gdGl0bGVzLmpvaW4oJywgJyk7XG4gIH1cblxuICBfaGFuZGxlVmlld3NQb3BvdmVyKCkge1xuICAgIHRoaXMuYWN0aW9uU2hlZXRTZXJ2aWNlLm9wZW4oeyBjb250ZW50OiB0aGlzLnZpZXdzVGVtcGxhdGUgfSk7XG4gIH1cblxuICBoYW5kbGVEcmF3ZXJDbGljaygpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEFYUExheW91dENoaWxkRHJhd2VyVG9nZ2xlKCkpO1xuICB9XG5cbiAgdG9nZ2xlU2VhcmNoQm94KCkge1xuICAgIHRoaXMuc2VhcmNoQm94Q29sbGFwc2VkID0gIXRoaXMuc2VhcmNoQm94Q29sbGFwc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBkcm9wZG93blJvd0l0ZW1zOiBBWFJvd0NvbW1hbmRJdGVtW10gPSBbXG4gICAge1xuICAgICAgdGV4dDogJ0RldGFpbHMnLFxuICAgICAgaWNvbjogJ2ZhLXNvbGlkIGZhLWV5ZScsXG4gICAgICBuYW1lOiAnZWRpdCcsXG4gICAgICBkaXZpZGVkOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgdGV4dDogJ0RlbGV0ZScsXG4gICAgICBpY29uOiAnZmEtc29saWQgZmEtdHJhc2gtY2FuJyxcbiAgICAgIG5hbWU6ICdkZWxldGUnLFxuICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgZGlzYWJsZWQ6ICF0aGlzLmNhbkRlbGV0ZSxcbiAgICB9LFxuICBdO1xuXG4gIHByaXZhdGUgaW5saW5lUm93SXRlbXM6IEFYUm93Q29tbWFuZEl0ZW1bXSA9IFtcbiAgICB7XG4gICAgICB0ZXh0OiAnVmlldycsXG4gICAgICBpY29uOiAnZmEtc29saWQgIGZhLWV5ZScsXG4gICAgICBuYW1lOiAndmlldycsXG4gICAgICBkaXZpZGVkOiB0cnVlLFxuICAgIH0sXG4gIF07XG5cbiAgcHJvdGVjdGVkIGdldERyb3Bkb3duUm93SXRlbXMgPSAocm93RGF0YTogdW5rbm93bik6IFByb21pc2U8QVhSb3dDb21tYW5kSXRlbVtdPiA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmRyb3Bkb3duUm93SXRlbXMpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBnZXRJbmxpbmVSb3dJdGVtcyA9IChyb3dEYXRhOiB1bmtub3duKTogQVhSb3dDb21tYW5kSXRlbVtdID0+IHtcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVSb3dJdGVtcztcbiAgfTtcblxuICBwcm90ZWN0ZWQgaGFuZGxlUm93RGJDbGljayhlOiBBWERhdGFUYWJsZVJvd0RiQ2xpY2spIHtcbiAgICBjb25zdCBkOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogZS5jb21wb25lbnQsXG4gICAgICBuYW1lOiB0aGlzLmRyb3Bkb3duUm93SXRlbXNbMF0ubmFtZSxcbiAgICAgIGRhdGE6IGUuZGF0YSxcbiAgICB9O1xuICAgIHRoaXMuaGFuZGxlUm93Q29tbWFuZENsaWNrKGQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVJvd0NvbW1hbmRDbGljayhlOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCkge1xuICAgIHN3aXRjaCAoZS5uYW1lKSB7XG4gICAgICBjYXNlICd2aWV3Jzoge1xuICAgICAgICBhd2FpdCB0aGlzLndvcmtmbG93LmV4ZWN1dGUoJ3Nob3ctcXVpY2stdmlldycsIHtcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgICBlbnRpdHk6IHRoaXMubG9hZGVyLmVudGl0eS5uYW1lLFxuICAgICAgICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2VkaXQnOiB7XG4gICAgICAgIGF3YWl0IHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnc2hvdy1kZXRhaWxzJywge1xuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIG1vZHVsZTogdGhpcy5sb2FkZXIuZW50aXR5Lm1vZHVsZSxcbiAgICAgICAgICAgIGVudGl0eTogdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpZDogZS5kYXRhLmlkLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdkZWxldGUnOiB7XG4gICAgICAgIGF3YWl0IHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnZGVsZXRlLWVudGl0eScsIHtcbiAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgZW50aXR5OiB0aGlzLmxvYWRlci5lbnRpdHkubmFtZSxcbiAgICAgICAgICBpZHM6IFtlLmRhdGEuaWRdLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNyZWF0ZUNsaWNrKCkge1xuICAgIHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnY3JlYXRlLWVudGl0eScsIHtcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgbW9kdWxlOiB0aGlzLmxvYWRlci5lbnRpdHkubW9kdWxlLFxuICAgICAgICBlbnRpdHk6IHRoaXMubG9hZGVyLmVudGl0eS5uYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgaGFuZGxlSW1wb3J0Q2xpY2soKSB7XG4gICAgdGhpcy53b3JrZmxvdy5leGVjdXRlKCdpbXBvcnQtZW50aXR5Jywge1xuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgIGVudGl0eTogdGhpcy5sb2FkZXIuZW50aXR5Lm5hbWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNvbW1hbmRDbGljayhjb21tYW5kOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKGNvbW1hbmQpIHtcbiAgICAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgICAgIHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnZGVsZXRlLWVudGl0eScsIHtcbiAgICAgICAgICBtb2R1bGU6IHRoaXMubG9hZGVyLmVudGl0eS5tb2R1bGUsXG4gICAgICAgICAgZW50aXR5OiB0aGlzLmxvYWRlci5lbnRpdHkubmFtZSxcbiAgICAgICAgICBpZHM6IHRoaXMuZ3JpZC5zZWxlY3RlZFJvd3MubWFwKChjKSA9PiAoYyBhcyBhbnkpWydpZCddKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNsZWFyU2VsZWN0ZWRJdGVtcygpIHtcbiAgICB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VEcmF3ZXIobmFtZTogc3RyaW5nLCBjb2xsYXBzZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoY29sbGFwc2VkICE9IGZhbHNlKSB7XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSAnY29uZGl0aW9ucyc6XG4gICAgICAgICAgdGhpcy5sb2FkZXIucmVzZXRDb25kaXRpb25zKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NvbHVtbnMnOlxuICAgICAgICAgIHRoaXMubG9hZGVyLnJlc2V0Q29sdW1ucygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzb3J0cyc6XG4gICAgICAgICAgdGhpcy5sb2FkZXIucmVzZXRTb3J0KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2hhbmdlU2VhcmNoVmFsdWUoZTogQVhWYWx1ZUNoYW5nZWRFdmVudCkge1xuICAgIGlmIChlLmlzVXNlckludGVyYWN0aW9uKSB7XG4gICAgICB0aGlzLmxvYWRlci5oYW5kbGVJbmxpbmVTZWFyY2goZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGFkZEN1c3RvbVZpZXdQb3B1cCgpIHtcbiAgICBjb25zdCBuZXdWaWV3ID0ge1xuICAgICAgbmFtZTogJ2N1c3RvbS12aWV3JyxcbiAgICAgIHRpdGxlOiAnQ3VzdG9tIFZpZXcnLFxuICAgICAgZml4ZWQ6IGZhbHNlLFxuICAgICAgc29ydHM6IFtdLFxuICAgICAgY29sdW1uczogY29udmVydFByb3BlcnRpZXNUb0NvbHVtbnMoLi4udGhpcy5sb2FkZXIuZW50aXR5LnByb3BlcnRpZXMpLFxuICAgICAgY29uZGl0aW9uczogW10sXG4gICAgfTtcblxuICAgIGNvbnN0IHBvcHVwID0gYXdhaXQgdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihBWFBFbnRpdHlDcmVhdGVDdXN0b21WaWV3Q29tcG9uZW50LCB7XG4gICAgICB0aXRsZTogJ0NyZWF0ZSBDdXN0b20gVmlldycsXG4gICAgICBzaXplOiB0aGlzLnBsYXRmb3JtLmlzKCdNb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdTTScpID8gJ2Z1bGwnIDogJ21kJyxcbiAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbG9hZGVyOiB0aGlzLmxvYWRlcixcbiAgICAgICAgc2VsZWN0ZWRWaWV3OiBuZXdWaWV3LFxuICAgICAgICBtb2RlOiAnY3JlYXRlJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKHBvcHVwLmRhdGE/LnNhdmUgPT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWRWaWV3OiAnLCBwb3B1cC5kYXRhLnVwZGF0ZWRWaWV3KTtcbiAgICAgIHRoaXMubG9hZGVyLmNyZWF0ZVZpZXcocG9wdXAuZGF0YS51cGRhdGVkVmlldyk7XG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBhc3luYyB1cGRhdGVWaWV3UG9wdXAoZTogQVhDbGlja0V2ZW50LCBzZWxlY3RlZFZpZXc6IGFueSkge1xuICAgIC8vIChlLm5hdGl2ZUV2ZW50IGFzIFVJRXZlbnQpLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IHBvcHVwID0gYXdhaXQgdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihBWFBFbnRpdHlDcmVhdGVDdXN0b21WaWV3Q29tcG9uZW50LCB7XG4gICAgICB0aXRsZTogJ01vZGlmeSBDdXN0b20gVmlldycsXG4gICAgICBzaXplOiB0aGlzLnBsYXRmb3JtLmlzKCdNb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdTTScpID8gJ2Z1bGwnIDogJ21kJyxcbiAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbG9hZGVyOiB0aGlzLmxvYWRlcixcbiAgICAgICAgc2VsZWN0ZWRWaWV3LFxuICAgICAgICBtb2RlOiAnZWRpdCcsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChwb3B1cC5kYXRhPy5kZWxldGUgPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5sb2FkZXIuZGVsZXRlVmlldyhwb3B1cC5kYXRhLnZpZXdOYW1lKTtcbiAgICB9XG4gICAgaWYgKHBvcHVwLmRhdGE/LnNhdmUgPT0gdHJ1ZSkge1xuICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWRWaWV3OiAnLCBwb3B1cC5kYXRhLnVwZGF0ZWRWaWV3KTtcbiAgICAgIHRoaXMubG9hZGVyLnVwZGF0ZVZpZXcocG9wdXAuZGF0YS51cGRhdGVkVmlldyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLnJlc2V0KCk7XG4gIH1cbn1cbiIsIjxheC1kcmF3ZXItY29udGFpbmVyPlxuICA8IS0tIDxheC1kcmF3ZXIgI2RyYXdlciBsb2NhdGlvbj1cInN0YXJ0XCIgW2NvbGxhcHNlZF09XCJ0cnVlXCIgW21vZGVdPVwicGxhdGZvcm0uaXMoJ1NNJykgPyAnb3ZlcmxheScgOiAncHVzaCdcIj5cbiAgICA8YXgtY29udGVudCBjbGFzcz1cImF4LXctNjQgYXgtYm9yZGVyLWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1wLTYgYXgtcHktNCBheC1nYXAtNiBheC1mbGV4IGF4LWZsZXgtY29sXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiYXgtdGV4dC0yeGwgYXgtZm9udC1ib2xkXCI+Rm9sZGVyczwvcD5cbiAgICAgICAgPGF4LXNpZGUtbWVudT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBub2RlIG9mIG1lbnVJdGVtc1wiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpZGVNZW51XCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYXgtc2lkZS1tZW51PlxuICAgICAgICA8bmctdGVtcGxhdGUgI3NpZGVNZW51IGxldC1pdGVtPlxuICAgICAgICAgIDxheC1zaWRlLW1lbnUtaXRlbSBbdGV4dF09XCJpdGVtLnRleHRcIj5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZm9sZGVyIGF4LXRleHQtd2FybmluZy01MDBcIj48L2F4LWljb24+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW5cIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzaWRlTWVudVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjaGlsZCB9XCI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9heC1zaWRlLW1lbnUtaXRlbT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvYXgtY29udGVudD5cbiAgPC9heC1kcmF3ZXI+IC0tPlxuICA8YXgtY29udGVudCBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0wIG1kOmF4LWdhcC00IGF4LXB4LTQgYXgtcHktMyBtZDpheC1weS00IG1kOmF4LXB4LTYgYXgtYmctc3VyZmFjZSBheC1ib3JkZXItYiBtZDpheC1ib3JkZXItMCBtZDpheC1iZy1kZWZhdWx0XCI+XG4gICAgICBAaWYocGxhdGZvcm0uaXMoJ01EJykpe1xuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1iZXR3ZWVuIGF4LW1iLTRcIj5cbiAgICAgICAgQGlmKHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGg9PTApe1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdGV4dC14bCBheC1mb250LWJvbGRcIj57eyB0aXRsZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTJcIj5cbiAgICAgICAgICBAaWYoY2FuQ3JlYXRlKSB7XG4gICAgICAgICAgPGF4LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImF4LXNtXCIgKG9uQ2xpY2spPVwiaGFuZGxlQ3JlYXRlQ2xpY2soKVwiPlxuICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1hZGRcIj48L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b24gY29sb3I9XCJnaG9zdFwiIGNsYXNzPVwiYXgtc21cIiAjbW9yZT5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtZWxsaXBzaXMtdmVydGljYWxcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsIFthZGFwdGl2aXR5RW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRXhwb3J0XCIgY2xhc3M9XCJheC1mb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtZmlsZS1leHBvcnRcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1AZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtM1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC14bCBheC1mb250LWJvbGRcIj4ge3sgdGhpcy5ncmlkPy5zZWxlY3RlZFJvd3M/Lmxlbmd0aCB9fSBJdGVtcyBTZWxlY3RlZCA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWRJdGVtcygpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdGV4dC1zbSBheC10ZXh0LXByaW1hcnkgZGFyazpheC10ZXh0LXByaW1hcnktMzAwIGF4LXVuZGVybGluZSBheC1jdXJzb3ItcG9pbnRlclwiPkNsZWFyXG4gICAgICAgICAgICBJdGVtczwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMlwiPlxuICAgICAgICAgIEBpZihjYW5EZWxldGUpIHtcbiAgICAgICAgICA8YXgtYnV0dG9uIGNvbG9yPVwiZGFuZ2VyXCIgY2xhc3M9XCJheC1zbVwiIChvbkNsaWNrKT1cImhhbmRsZUNvbW1hbmRDbGljaygnZGVsZXRlJylcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIj4gPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8YXgtYnV0dG9uIGNvbG9yPVwiZ2hvc3RcIiBjbGFzcz1cImF4LXNtXCIgI21vcmU+XG4gICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWVsbGlwc2lzLXZlcnRpY2FsXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgIDxheC1idXR0b24gW2Rpc2FibGVkXT1cInRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggIT0gMFwiIFt0ZXh0XT1cIih2aWV3JCB8IGFzeW5jKT8udGl0bGVcIiBjb2xvcj1cImdob3N0XCI+XG4gICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1leWUgYXgtdGV4dC1uZXV0cmFsLTQwMFwiPiA8L2F4LWljb24+XG4gICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2FyZXQtZG93blwiPjwvaT5cbiAgICAgICAgICA8L2F4LXN1ZmZpeD5cbiAgICAgICAgICA8YXgtZHJvcGRvd24tcGFuZWwgW2FkYXB0aXZpdHlFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0IGNsYXNzPVwiYXgtYmctc3VyZmFjZVwiPlxuICAgICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1mb250LWJvbGQgYXgtb3BhY2l0eS0xMDBcIj57eyAnZW50aXR5LnB1YmxpYy12aWV3JyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9heC10aXRsZT5cbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtICpuZ0Zvcj1cImxldCB2IG9mIHB1YmxpY1ZpZXdzJCB8IGFzeW5jXCIgW3RleHRdPVwidi50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmF4LWJnLW9uLXN1cmZhY2VdPVwiKHZpZXckIHwgYXN5bmMpID09IHZcIiAob25DbGljayk9XCJsb2FkZXIuc2V0Vmlldyh2Lm5hbWUpXCI+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPGF4LXRpdGxlIGNsYXNzPVwiYXgtZm9udC1ib2xkIGF4LW9wYWNpdHktMTAwXCIgKm5nSWY9XCJoYXNDdXN0b21WaWV3cyQgfCBhc3luY1wiPkNyZWF0ZWQgYnkgbWU8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gKm5nRm9yPVwibGV0IHYgb2YgY3VzdG9tVmlld3MkIHwgYXN5bmNcIiBbdGV4dF09XCJ2LnRpdGxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXgtYmctb24tc3VyZmFjZV09XCIodmlldyQgfCBhc3luYykgPT0gdlwiIChvbkNsaWNrKT1cImxvYWRlci5zZXRWaWV3KHYubmFtZSlcIj48L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpmZWF0dXJlPVwiJ2F4cC1lbnRpdHktbGlzdC1jdXN0b20tdmlldydcIj5cbiAgICAgICAgICAgICAgICA8YXgtZGl2aWRlcj48L2F4LWRpdmlkZXI+XG4gICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIChvbkNsaWNrKT1cImFkZEN1c3RvbVZpZXdQb3B1cCgpXCIgdGV4dD1cIkFkZCBDdXN0b20gVmlld1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1wcmltYXJ5XCI+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0yXCI+XG4gICAgICAgICAgQGlmKHNlYXJjaEJveFRpdGxlKXtcbiAgICAgICAgICA8YXgtYnV0dG9uIChvbkNsaWNrKT1cInRvZ2dsZVNlYXJjaEJveCgpXCIgW2Rpc2FibGVkXT1cInRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggIT0gMFwiIGNvbG9yPVwiZ2hvc3RcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtc2VhcmNoIGF4LXRleHQtbmV1dHJhbC00MDBcIj4gPC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8YXgtYnV0dG9uIFtkaXNhYmxlZF09XCJ0aGlzLmdyaWQ/LnNlbGVjdGVkUm93cz8ubGVuZ3RoICE9IDBcIiBjb2xvcj1cImdob3N0XCIgKG9uQ2xpY2spPVwiY29sdW1uc0RyYXdlci5vcGVuKClcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtYmFycyBheC10ZXh0LW5ldXRyYWwtNDAwXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICA8YXgtYnV0dG9uIFtkaXNhYmxlZF09XCJ0aGlzLmdyaWQ/LnNlbGVjdGVkUm93cz8ubGVuZ3RoICE9IDBcIiBjb2xvcj1cImdob3N0XCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImNvbmRpdGlvbnNEcmF3ZXIub3BlbigpXCI+XG4gICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLXNsaWRlcnMgYXgtdGV4dC1uZXV0cmFsLTQwMFwiPiA8L2F4LWljb24+XG4gICAgICAgICAgICBAaWYgKChjb25kaXRpb25zQ291bnQkIHwgYXN5bmMpKSB7XG4gICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICA8YXgtYmFkZ2UgW2NvbG9yXT1cIidwcmltYXJ5J1wiPjwvYXgtYmFkZ2U+XG4gICAgICAgICAgICA8L2F4LXN1ZmZpeD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICA8YXgtYnV0dG9uIFtkaXNhYmxlZF09XCJ0aGlzLmdyaWQ/LnNlbGVjdGVkUm93cz8ubGVuZ3RoICE9IDBcIiBjb2xvcj1cImdob3N0XCIgKG9uQ2xpY2spPVwic29ydHNEcmF3ZXIub3BlbigpXCI+XG4gICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLXNvbGlkIGZhLWJhcnMtc29ydCBheC10ZXh0LW5ldXRyYWwtNDAwXCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgIEBpZiAoKHNvcnRDb3VudCQgfCBhc3luYykpIHtcbiAgICAgICAgICAgIDxheC1zdWZmaXg+XG4gICAgICAgICAgICAgIDxheC1iYWRnZSBbY29sb3JdPVwiJ3ByaW1hcnknXCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBbY2xhc3MuY29sbGFwc2VkLXNlYXJjaC1ib3hdPVwic2VhcmNoQm94Q29sbGFwc2VkXCIgY2xhc3M9XCJheC10cmFuc2l0aW9uLWFsbCBheC1tdC00XCI+XG4gICAgICAgIDxheC1zZWFyY2gtYm94IFt0aXRsZV09XCJzZWFyY2hCb3hUaXRsZVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIignd2lkZ2V0Lmxvb2t1cC5zZWFyY2gnIHwgdHJhbnNsYXRlIHwgYXN5bmMpICsgc2VhcmNoQm94UGxhY2Vob2xkZXJcIj48YXgtY2xlYXItYnV0dG9uPjwvYXgtY2xlYXItYnV0dG9uPjwvYXgtc2VhcmNoLWJveD5cbiAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWdhcC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LXhsIG1kOmF4LXRleHQtMnhsIGF4LWZvbnQtYm9sZCBheC1tYi0yXCI+e3sgdGl0bGUgfX08L2Rpdj5cbiAgICAgICAgQGlmKHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGg9PTApe1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1nYXAtM1wiPlxuICAgICAgICAgIEBpZihjYW5DcmVhdGUpIHtcbiAgICAgICAgICA8YXgtYnV0dG9uIFt0ZXh0XT1cIidjcmVhdGUtbmV3JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCIgY29sb3I9XCJwcmltYXJ5XCIgKG9uQ2xpY2spPVwiaGFuZGxlQ3JlYXRlQ2xpY2soKVwiPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1hZGRcIj48L2k+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICB9IEBpZihjYW5JbXBvcnQpe1xuICAgICAgICAgIDxheC1idXR0b24gW3RleHRdPVwiJ2VudGl0eS5hY3Rpb25zJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCIgY29sb3I9XCJnaG9zdFwiPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsIFthZGFwdGl2aXR5RW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSAob25DbGljayk9XCJoYW5kbGVJbXBvcnRDbGljaygpXCIgdGV4dD1cIkltcG9ydFwiIGNsYXNzPVwiYXgtZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLXNvbGlkIGZhLWZpbGUtaW1wb3J0XCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgPCEtLSA8YXgtYnV0dG9uLWl0ZW0gdGV4dD1cIkV4cG9ydFwiIGNsYXNzPVwiYXgtZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLXNvbGlkIGZhLWZpbGUtZXhwb3J0XCI+IDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+IC0tPlxuICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1AZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0zXCI+XG4gICAgICAgICAgQGlmKGNhbkRlbGV0ZSkge1xuICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIkRlbGV0ZSBJdGVtc1wiIGNvbG9yPVwiZGFuZ2VyXCIgKG9uQ2xpY2spPVwiaGFuZGxlQ29tbWFuZENsaWNrKCdkZWxldGUnKVwiPlxuICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8YXgtYnV0dG9uIFt0ZXh0XT1cIidlbnRpdHkuYWN0aW9ucycgfCB0cmFuc2xhdGUgfCBhc3luY1wiIGNvbG9yPVwiZ2hvc3RcIj5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtZWxsaXBzaXMtdmVydGljYWxcIj48L2k+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBWaWV3IE1vZGUgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgIEBpZih0aGlzLmdyaWQ/LnNlbGVjdGVkUm93cz8ubGVuZ3RoPT0wKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LXctZnVsbCBheC1qdXN0aWZ5LWJldHdlZW4gYXgtZ2FwLTNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1nYXAtM1wiPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbiBbdGV4dF09XCIodmlldyQgfCBhc3luYyk/LnRpdGxlXCIgI3ZpZXdzIGNvbG9yPVwiZ2hvc3RcIj5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWV5ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxheC1zdWZmaXg+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jYXJldC1kb3duXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsIFthZGFwdGl2aXR5RW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3QgY2xhc3M9XCJheC1iZy1zdXJmYWNlXCI+XG4gICAgICAgICAgICAgICAgICA8YXgtdGl0bGUgY2xhc3M9XCJheC1mb250LWJvbGQgYXgtb3BhY2l0eS0xMDBcIj57e1xuICAgICAgICAgICAgICAgICAgICAnZW50aXR5LnB1YmxpYy12aWV3JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgIH19PC9heC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSAqbmdGb3I9XCJsZXQgdiBvZiBwdWJsaWNWaWV3cyQgfCBhc3luY1wiIFt0ZXh0XT1cInYudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtYmctb24tc3VyZmFjZV09XCIodmlldyQgfCBhc3luYykgPT0gdlwiIChvbkNsaWNrKT1cImxvYWRlci5zZXRWaWV3KHYubmFtZSlcIj48L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgPGF4LXRpdGxlIGNsYXNzPVwiYXgtZm9udC1ib2xkIGF4LW9wYWNpdHktMTAwXCIgKm5nSWY9XCJoYXNDdXN0b21WaWV3cyQgfCBhc3luY1wiPkNyZWF0ZWQgYnkgbWU8L2F4LXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIGNsYXNzPVwiYXgtcGUtNCBheC1mbGV4IGF4LWp1c3RpZnktYmV0d2VlblwiICpuZ0Zvcj1cImxldCB2IG9mIGN1c3RvbVZpZXdzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwidi50aXRsZVwiIFtjbGFzcy5heC1iZy1vbi1zdXJmYWNlXT1cIih2aWV3JCB8IGFzeW5jKSA9PSB2XCIgKG9uQ2xpY2spPVwibG9hZGVyLnNldFZpZXcodi5uYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICAgICAgICAgIDxheC1idXR0b24gKG9uQ2xpY2spPVwidXBkYXRlVmlld1BvcHVwKCRldmVudCwgdilcIiBjbGFzcz1cImF4LXhzXCIgbG9vaz1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmFyIGZhLWVkaXRcIj4gPC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpmZWF0dXJlPVwiJ2F4cC1lbnRpdHktbGlzdC1jdXN0b20tdmlldydcIj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWRpdmlkZXI+PC9heC1kaXZpZGVyPlxuICAgICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gdGV4dD1cIkFkZCBDdXN0b20gVmlld1wiIChvbkNsaWNrKT1cImFkZEN1c3RvbVZpZXdQb3B1cCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1wcmltYXJ5XCI+PC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgQGlmKHNlYXJjaEJveFRpdGxlKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC13LTcyXCI+XG4gICAgICAgICAgICAgIDxheC1zZWFyY2gtYm94IFt0aXRsZV09XCJzZWFyY2hCb3hUaXRsZVwiIFsobmdNb2RlbCldPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVDaGFuZ2VTZWFyY2hWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKCd3aWRnZXQubG9va3VwLnNlYXJjaCcgfCB0cmFuc2xhdGUgfCBhc3luYykgKyBzZWFyY2hCb3hQbGFjZWhvbGRlclwiPjxheC1jbGVhci1idXR0b24+PC9heC1jbGVhci1idXR0b24+PC9heC1zZWFyY2gtYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1nYXAtM1wiPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbiBbdGV4dF09XCInZW50aXR5LmNvbHVtbnMnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIiBjb2xvcj1cImdob3N0XCIgI2NvbHVtbnNcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiY29sdW1uc0RyYXdlci5vcGVuKClcIj5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWJhcnNcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICAgIDxheC1iYWRnZSB0ZXh0PVwie3sgY29sdW1uc0NvdW50JCB8IGFzeW5jIH19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gdGV4dD1cIkZpbHRlcnNcIiBjb2xvcj1cImdob3N0XCIgKG9uQ2xpY2spPVwiY29uZGl0aW9uc0RyYXdlci5vcGVuKClcIiAjY29uZGl0aW9ucz5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXNsaWRlcnNcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICAgIDxheC1iYWRnZSB0ZXh0PVwie3sgY29uZGl0aW9uc0NvdW50JCB8IGFzeW5jIH19XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gW3RleHRdPVwiJ2VudGl0eS5zb3J0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCIgY29sb3I9XCJnaG9zdFwiIChvbkNsaWNrKT1cInNvcnRzRHJhd2VyLm9wZW4oKVwiPlxuICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtYmFycy1zb3J0XCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgPGF4LXN1ZmZpeCAqbmdJZj1cIihzb3J0Q291bnQkIHwgYXN5bmMpISA+IDBcIj5cbiAgICAgICAgICAgICAgICA8YXgtYmFkZ2UgdGV4dD1cInt7IHNvcnRDb3VudCQgfCBhc3luYyB9fVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvYXgtYmFkZ2U+XG4gICAgICAgICAgICAgIDwvYXgtc3VmZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIH0gQGVsc2V7XG4gICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFNlbGVjdGlvbiBNb2RlICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0zIGF4LWl0ZW1zLWNlbnRlciBheC1oLTEwXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRleHQteGwgYXgtZm9udC1ib2xkXCI+IHt7IHRoaXMuZ3JpZD8uc2VsZWN0ZWRSb3dzPy5sZW5ndGggfX0gSXRlbXMgU2VsZWN0ZWQgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNsZWFyU2VsZWN0ZWRJdGVtcygpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC10ZXh0LXNtIGF4LXRleHQtcHJpbWFyeSBkYXJrOmF4LXRleHQtcHJpbWFyeS0zMDAgYXgtdW5kZXJsaW5lIGF4LWN1cnNvci1wb2ludGVyXCI+Q2xlYXJcbiAgICAgICAgICAgICAgSXRlbXM8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleC0xIGF4LXB4LTYgYXgtcHktNCBheC1mbGV4IGF4LW92ZXJmbG93LWF1dG9cIj5cbiAgICAgIDxheC1kYXRhLXRhYmxlICNncmlkIFtzaG93Rm9vdGVyXT1cImZhbHNlXCIgY2xhc3M9XCJheC1mbGV4LTFcIiBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3BhZ2luZ109XCJ0cnVlXCJcbiAgICAgICAgW2ZldGNoRGF0YU1vZGVdPVwiJ21hbnVhbCdcIiAob25Sb3dEYkNsaWNrKT1cImhhbmRsZVJvd0RiQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIFtsb2FkaW5nXT1cInsgZW5hYmxlZDogdHJ1ZSwgYW5pbWF0aW9uOiB0cnVlIH1cIj5cbiAgICAgICAgPCEtLSA8YXgtaW5kZXgtY29sdW1uICpuZ0lmPVwiIXBsYXRmb3JtLmlzKCdTTScpXCIgW3dpZHRoXT1cIic4NXB4J1wiPjwvYXgtaW5kZXgtY29sdW1uPiAtLT5cbiAgICAgICAgPGF4LXNlbGVjdC1jb2x1bW4gZml4ZWQ9XCJzdGFydFwiIFt3aWR0aF09XCInNTBweCdcIj48L2F4LXNlbGVjdC1jb2x1bW4+XG4gICAgICAgIEBmb3IoY29sIG9mIChjb2x1bW5zJCB8IGFzeW5jKTt0cmFjayBjb2wubmFtZSkge1xuICAgICAgICA8YXhwLXdpZGdldC1jb2x1bW4tcmVuZGVyZXIgKm5nSWY9XCJjb2wudmlzaWJsZVwiIFtzY2hlbWFdPVwiY29sLnNjaGVtYVwiIFtkYXRhRmllbGRdPVwiY29sLm5hbWVcIlxuICAgICAgICAgIFtjYXB0aW9uXT1cImNvbC50aXRsZVwiIFtvcHRpb25zXT1cImNvbC5vcHRpb25zXCIgW2Rpc3BsYXlGb3JtYXRdPVwiY29sLmRpc3BsYXlGb3JtYXRcIiBbd2lkdGhdPVwiJzE4MHB4J1wiXG4gICAgICAgICAgW2FsbG93U29ydGluZ109XCJmYWxzZVwiPlxuICAgICAgICA8L2F4cC13aWRnZXQtY29sdW1uLXJlbmRlcmVyPlxuICAgICAgICB9XG4gICAgICAgIDxheC1kcm9wZG93bi1jb21tYW5kLWNvbHVtbiBmaXhlZD1cImVuZFwiIFt3aWR0aF09XCInNjBweCdcIiBbaXRlbXNdPVwiZ2V0RHJvcGRvd25Sb3dJdGVtc1wiXG4gICAgICAgICAgKG9uSXRlbUNsaWNrKT1cImhhbmRsZVJvd0NvbW1hbmRDbGljaygkZXZlbnQpXCI+PC9heC1kcm9wZG93bi1jb21tYW5kLWNvbHVtbj5cbiAgICAgICAgPGF4LWNvbW1hbmQtY29sdW1uIGZpeGVkPVwiZW5kXCIgW3dpZHRoXT1cIic2MHB4J1wiIFtpdGVtc109XCJnZXRJbmxpbmVSb3dJdGVtc1wiXG4gICAgICAgICAgKG9uSXRlbUNsaWNrKT1cImhhbmRsZVJvd0NvbW1hbmRDbGljaygkZXZlbnQpXCI+PC9heC1jb21tYW5kLWNvbHVtbj5cbiAgICAgIDwvYXgtZGF0YS10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9heC1jb250ZW50PlxuICA8YXgtZHJhd2VyIChjb2xsYXBzZWRDaGFuZ2UpPVwiY2xvc2VEcmF3ZXIoJ2NvbHVtbnMnLCAkZXZlbnQpXCIgI2NvbHVtbnNEcmF3ZXIgbG9jYXRpb249XCJlbmRcIiBbbW9kZV09XCInb3ZlcmxheSdcIj5cbiAgICA8YXgtY29udGVudCBjbGFzcz1cImF4LXctWzg1dnddIG1kOmF4LXctWzQ1dnddIGxnOmF4LXctWzM1dnddIDJ4bDpheC13LVsyMHZ3XSBheC1ib3JkZXItZVwiPlxuICAgICAgPGF4cC1saXN0LXZpZXctb3B0aW9uLWNvbHVtbnMgW2xvYWRlcl09XCJsb2FkZXJcIiAob25DbG9zZWQpPVwiY29sdW1uc0RyYXdlci5jbG9zZSgpXCI+PC9heHAtbGlzdC12aWV3LW9wdGlvbi1jb2x1bW5zPlxuICAgIDwvYXgtY29udGVudD5cbiAgPC9heC1kcmF3ZXI+XG4gIDxheC1kcmF3ZXIgKGNvbGxhcHNlZENoYW5nZSk9XCJjbG9zZURyYXdlcignY29uZGl0aW9ucycsICRldmVudClcIiAjY29uZGl0aW9uc0RyYXdlciBsb2NhdGlvbj1cImVuZFwiIFttb2RlXT1cIidvdmVybGF5J1wiPlxuICAgIDxheC1jb250ZW50IGNsYXNzPVwiYXgtdy1bODV2d10gbWQ6YXgtdy1bNDV2d10gbGc6YXgtdy1bMzV2d10gMnhsOmF4LXctWzI1dnddIGF4LWJvcmRlci1lXCI+XG4gICAgICA8YXhwLWxpc3Qtdmlldy1vcHRpb24tY29uZGl0aW9ucyBbbG9hZGVyXT1cImxvYWRlclwiXG4gICAgICAgIChvbkNsb3NlZCk9XCJjb25kaXRpb25zRHJhd2VyLmNsb3NlKClcIj48L2F4cC1saXN0LXZpZXctb3B0aW9uLWNvbmRpdGlvbnM+XG4gICAgPC9heC1jb250ZW50PlxuICA8L2F4LWRyYXdlcj5cbiAgPGF4LWRyYXdlciAoY29sbGFwc2VkQ2hhbmdlKT1cImNsb3NlRHJhd2VyKCdzb3J0cycsICRldmVudClcIiAjc29ydHNEcmF3ZXIgbG9jYXRpb249XCJlbmRcIiBbbW9kZV09XCInb3ZlcmxheSdcIj5cbiAgICA8YXgtY29udGVudCBjbGFzcz1cImF4LXctWzg1dnddIG1kOmF4LXctWzQ1dnddIGxnOmF4LXctWzM1dnddIDJ4bDpheC13LVsyMHZ3XSBheC1ib3JkZXItZVwiPlxuICAgICAgPGF4cC1saXN0LXZpZXctb3B0aW9uLXNvcnRpbmcgKG9uQ2xvc2VkKT1cInNvcnRzRHJhd2VyLmNsb3NlKClcIiBbbG9hZGVyXT1cImxvYWRlclwiPjwvYXhwLWxpc3Qtdmlldy1vcHRpb24tc29ydGluZz5cbiAgICA8L2F4LWNvbnRlbnQ+XG4gIDwvYXgtZHJhd2VyPlxuPC9heC1kcmF3ZXItY29udGFpbmVyPiJdfQ==