@acorex/modules 18.2.3 → 19.0.0
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.
- package/auth/lib/account/app-chooser/app-chooser-slot.component.d.ts +1 -1
- package/fesm2022/{acorex-modules-application-management-module-designer.component-B6WPz0N8.mjs → acorex-modules-application-management-module-designer.component-1pXIvIeG.mjs} +9 -23
- package/fesm2022/acorex-modules-application-management-module-designer.component-1pXIvIeG.mjs.map +1 -0
- package/fesm2022/acorex-modules-application-management.mjs +46 -50
- package/fesm2022/acorex-modules-application-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-auth-acorex-modules-auth-utPX4yb_.mjs → acorex-modules-auth-acorex-modules-auth-CtWwcZOU.mjs} +49 -56
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-CtWwcZOU.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-app-chooser.component-TeYGIm6k.mjs → acorex-modules-auth-app-chooser.component-BK4Hs5OP.mjs} +7 -13
- package/fesm2022/acorex-modules-auth-app-chooser.component-BK4Hs5OP.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-blank.layout-Bq822Iz4.mjs → acorex-modules-auth-blank.layout-B1a0710P.mjs} +5 -5
- package/fesm2022/acorex-modules-auth-blank.layout-B1a0710P.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-login.module-CJwYNVRQ.mjs → acorex-modules-auth-login.module-Cvr3l9wl.mjs} +8 -24
- package/fesm2022/acorex-modules-auth-login.module-Cvr3l9wl.mjs.map +1 -0
- package/fesm2022/acorex-modules-auth-master.layout-4jTF1Xhx.mjs +23 -0
- package/fesm2022/acorex-modules-auth-master.layout-4jTF1Xhx.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-password.component-DZb3bTWc.mjs → acorex-modules-auth-password.component-C5soTmv9.mjs} +8 -16
- package/fesm2022/acorex-modules-auth-password.component-C5soTmv9.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-password.component-DWnYxb-x.mjs → acorex-modules-auth-password.component-DeCK_glZ.mjs} +6 -19
- package/fesm2022/acorex-modules-auth-password.component-DeCK_glZ.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-routes-CP1BJb5A.mjs → acorex-modules-auth-routes-DqgtVe9G.mjs} +2 -2
- package/fesm2022/{acorex-modules-auth-routes-CP1BJb5A.mjs.map → acorex-modules-auth-routes-DqgtVe9G.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-auth-tenant-chooser.component-6qDoCUBo.mjs → acorex-modules-auth-tenant-chooser.component-CorZ4Z7h.mjs} +6 -6
- package/fesm2022/acorex-modules-auth-tenant-chooser.component-CorZ4Z7h.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-two-factor-code.component-BJKmvI7y.mjs → acorex-modules-auth-two-factor-code.component-BEsTVMeC.mjs} +6 -6
- package/fesm2022/acorex-modules-auth-two-factor-code.component-BEsTVMeC.mjs.map +1 -0
- package/fesm2022/{acorex-modules-auth-two-factor.module-JsnQJZvC.mjs → acorex-modules-auth-two-factor.module-C99NYq3o.mjs} +7 -23
- package/fesm2022/acorex-modules-auth-two-factor.module-C99NYq3o.mjs.map +1 -0
- package/fesm2022/acorex-modules-auth.mjs +1 -19
- package/fesm2022/acorex-modules-auth.mjs.map +1 -1
- package/fesm2022/acorex-modules-backend.mjs +36 -35
- package/fesm2022/acorex-modules-backend.mjs.map +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +50 -51
- package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
- package/fesm2022/acorex-modules-form-template-management-category.entity-xUkZHVgy.mjs +195 -0
- package/fesm2022/acorex-modules-form-template-management-category.entity-xUkZHVgy.mjs.map +1 -0
- package/fesm2022/{acorex-modules-form-template-management-designer.page-NhIPhsRs.mjs → acorex-modules-form-template-management-designer.page-BLbPLLdP.mjs} +8 -5
- package/fesm2022/acorex-modules-form-template-management-designer.page-BLbPLLdP.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-D_FkgF0W.mjs +123 -0
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-D_FkgF0W.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-template-management-template-widget-edit.component-Bgx5YRBc.mjs +111 -0
- package/fesm2022/acorex-modules-form-template-management-template-widget-edit.component-Bgx5YRBc.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-template-management-template.entity-CGhbmYel.mjs +470 -0
- package/fesm2022/acorex-modules-form-template-management-template.entity-CGhbmYel.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-template-management.mjs +422 -754
- package/fesm2022/acorex-modules-form-template-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-localization-management.mjs +43 -45
- package/fesm2022/acorex-modules-localization-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-notification-management.mjs +37 -38
- package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +80 -87
- package/fesm2022/acorex-modules-platform-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-scheduler-job-management.mjs +36 -25
- package/fesm2022/acorex-modules-scheduler-job-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-text-template-management.mjs +25 -25
- package/fesm2022/acorex-modules-text-template-management.mjs.map +1 -1
- package/form-template-management/index.d.ts +4 -0
- package/form-template-management/lib/components/widgets/template/index.d.ts +4 -0
- package/form-template-management/lib/components/widgets/template/template-picker/template-picker.component.d.ts +30 -0
- package/form-template-management/lib/components/widgets/template/template-widget-designer.component.d.ts +25 -0
- package/form-template-management/lib/components/widgets/template/template-widget-edit.component.d.ts +13 -0
- package/form-template-management/lib/components/widgets/template/template-widget-view.component.d.ts +11 -0
- package/form-template-management/lib/components/widgets/template/template-widget.config.d.ts +5 -0
- package/form-template-management/lib/components/widgets/template/template.provider.d.ts +30 -0
- package/form-template-management/lib/entities/category/category.types.d.ts +0 -1
- package/form-template-management/lib/entities/category/index.d.ts +0 -1
- package/form-template-management/lib/entities/template/index.d.ts +0 -1
- package/form-template-management/lib/entities/template/template.types.d.ts +11 -0
- package/form-template-management/lib/form-template-management.module.d.ts +6 -7
- package/form-template-management/lib/pages/designer/designer.page.d.ts +1 -0
- package/form-template-management/lib/services/designer-connector.service.d.ts +8 -3
- package/form-template-management/lib/services/template.provider.d.ts +3 -4
- package/package.json +5 -33
- package/platform-management/lib/common/{entity.loader.d.ts → entity.provider.d.ts} +3 -3
- package/platform-management/lib/common/index.d.ts +1 -2
- package/scheduler-job-management/index.d.ts +1 -0
- package/esm2022/acorex-modules.mjs +0 -5
- package/esm2022/application-management/acorex-modules-application-management.mjs +0 -5
- package/esm2022/application-management/index.mjs +0 -14
- package/esm2022/application-management/lib/application-management-mock-data.mjs +0 -109
- package/esm2022/application-management/lib/application-management.module.mjs +0 -117
- package/esm2022/application-management/lib/application-management.route.mjs +0 -29
- package/esm2022/application-management/lib/application-management.service.mjs +0 -66
- package/esm2022/application-management/lib/application-management.source.mjs +0 -9
- package/esm2022/application-management/lib/application-management.types.mjs +0 -2
- package/esm2022/application-management/lib/const.mjs +0 -6
- package/esm2022/application-management/lib/entities/application-module.entity.mjs +0 -270
- package/esm2022/application-management/lib/entities/applications.entity.mjs +0 -311
- package/esm2022/application-management/lib/entities/edition.entity.mjs +0 -281
- package/esm2022/application-management/lib/entities/entity.entity.mjs +0 -295
- package/esm2022/application-management/lib/entities/feature.entity.mjs +0 -281
- package/esm2022/application-management/lib/entities/modules.entity.mjs +0 -321
- package/esm2022/application-management/lib/entities/permission.entity.mjs +0 -281
- package/esm2022/application-management/lib/entities/property.entity.mjs +0 -447
- package/esm2022/application-management/lib/entity.loader.mjs +0 -46
- package/esm2022/application-management/lib/layouts/index.mjs +0 -2
- package/esm2022/application-management/lib/layouts/module-entity-detail-view/module-entity-detail-view.component.mjs +0 -84
- package/esm2022/application-management/lib/menu.provider.mjs +0 -28
- package/esm2022/application-management/lib/module-designer/module-designer.component.mjs +0 -150
- package/esm2022/application-management/lib/module-designer/module-designer.service.mjs +0 -3
- package/esm2022/application-management/lib/module-designer/module-designer.type.mjs +0 -2
- package/esm2022/application-management/lib/services/application-management.service.mjs +0 -17
- package/esm2022/application-management/lib/services/application-module-management.service.mjs +0 -17
- package/esm2022/application-management/lib/services/context-menu.service.mjs +0 -166
- package/esm2022/application-management/lib/services/edition-management.service.mjs +0 -17
- package/esm2022/application-management/lib/services/entity-management.service.mjs +0 -17
- package/esm2022/application-management/lib/services/feature-management.service.mjs +0 -17
- package/esm2022/application-management/lib/services/module-management.service.mjs +0 -17
- package/esm2022/application-management/lib/services/permission-management.service.mjs +0 -17
- package/esm2022/application-management/lib/services/property-management.service.mjs +0 -17
- package/esm2022/application-management/lib/workflows/create-module-entity.workflow.mjs +0 -66
- package/esm2022/application-management/lib/workflows/index.mjs +0 -3
- package/esm2022/application-management/lib/workflows/show-module-entity-details.workflow.mjs +0 -9
- package/esm2022/auth/acorex-modules-auth.mjs +0 -5
- package/esm2022/auth/index.mjs +0 -5
- package/esm2022/auth/lib/account/account.module.mjs +0 -110
- package/esm2022/auth/lib/account/app-chooser/app-chooser-list.component.mjs +0 -31
- package/esm2022/auth/lib/account/app-chooser/app-chooser-slot.component.mjs +0 -42
- package/esm2022/auth/lib/account/app-chooser/app-chooser.component.mjs +0 -62
- package/esm2022/auth/lib/account/profile/profile-slot.component.mjs +0 -108
- package/esm2022/auth/lib/account/tenant-chooser/tenant-chooser-dropdown.component.mjs +0 -26
- package/esm2022/auth/lib/account/tenant-chooser/tenant-chooser.component.mjs +0 -80
- package/esm2022/auth/lib/auth.config.mjs +0 -23
- package/esm2022/auth/lib/auth.module.mjs +0 -51
- package/esm2022/auth/lib/auth.routes.mjs +0 -39
- package/esm2022/auth/lib/error-handler.mjs +0 -47
- package/esm2022/auth/lib/forgot/password/password.component.mjs +0 -56
- package/esm2022/auth/lib/forgot/routes.mjs +0 -7
- package/esm2022/auth/lib/login/login.module.mjs +0 -52
- package/esm2022/auth/lib/login/password/password.component.mjs +0 -118
- package/esm2022/auth/lib/menu.provider.mjs +0 -41
- package/esm2022/auth/lib/shared/layouts/blank/blank.layout.mjs +0 -15
- package/esm2022/auth/lib/shared/layouts/master/master.layout.mjs +0 -20
- package/esm2022/auth/lib/shared/services/idle.service.mjs +0 -42
- package/esm2022/auth/lib/shared/services/index.mjs +0 -2
- package/esm2022/auth/lib/store/auth.effects.mjs +0 -90
- package/esm2022/auth/lib/store/index.mjs +0 -3
- package/esm2022/auth/lib/two-factor/two-factor-code/two-factor-code.component.mjs +0 -37
- package/esm2022/auth/lib/two-factor/two-factor.module.mjs +0 -42
- package/esm2022/backend/acorex-modules-backend.mjs +0 -5
- package/esm2022/backend/index.mjs +0 -5
- package/esm2022/backend/lib/auth/oidc/application.loader.mjs +0 -54
- package/esm2022/backend/lib/auth/oidc/configuration.service.mjs +0 -52
- package/esm2022/backend/lib/auth/oidc/feature.loader.mjs +0 -21
- package/esm2022/backend/lib/auth/oidc/index.mjs +0 -7
- package/esm2022/backend/lib/auth/oidc/oidc.strategy.mjs +0 -217
- package/esm2022/backend/lib/auth/oidc/permission.loader.mjs +0 -34
- package/esm2022/backend/lib/auth/oidc/signincallback.component.mjs +0 -43
- package/esm2022/backend/lib/auth/oidc/tenant.loader.mjs +0 -34
- package/esm2022/backend/lib/backend.configs.mjs +0 -2
- package/esm2022/backend/lib/backend.module.mjs +0 -130
- package/esm2022/backend/lib/data/api/comment.service.mjs +0 -46
- package/esm2022/backend/lib/data/api/data-provider.mjs +0 -165
- package/esm2022/backend/lib/data/api/file.service.mjs +0 -101
- package/esm2022/backend/lib/data/api/module-designer.service.mjs +0 -95
- package/esm2022/backend/lib/data/index.mjs +0 -5
- package/esm2022/conversation/acorex-modules-conversation.mjs +0 -5
- package/esm2022/conversation/index.mjs +0 -17
- package/esm2022/conversation/lib/const.mjs +0 -8
- package/esm2022/conversation/lib/conversation.module.mjs +0 -17
- package/esm2022/conversation/lib/entities/chat/chat.module.mjs +0 -141
- package/esm2022/conversation/lib/entities/chat/chat.service.mjs +0 -23
- package/esm2022/conversation/lib/entities/chat/chat.type.mjs +0 -2
- package/esm2022/conversation/lib/entities/chat/components/chat-item/chat-item.component.mjs +0 -53
- package/esm2022/conversation/lib/entities/chat/components/chat-item-footer/chat-item-footer.component.mjs +0 -13
- package/esm2022/conversation/lib/entities/chat/components/chat-item-header/chat-item-header.component.mjs +0 -28
- package/esm2022/conversation/lib/entities/chat/components/chat-preview/chat-preview.component.mjs +0 -124
- package/esm2022/conversation/lib/entities/chat/components/chat-preview-header/chat-preview-header.component.mjs +0 -22
- package/esm2022/conversation/lib/entities/chat/pages/chat/chat.component.mjs +0 -80
- package/esm2022/conversation/lib/entities/comments/comment.module.mjs +0 -100
- package/esm2022/conversation/lib/entities/comments/comments.service.mjs +0 -21
- package/esm2022/conversation/lib/entities/comments/comments.type.mjs +0 -2
- package/esm2022/conversation/lib/entities/comments/pages/comment-list-view.component.mjs +0 -392
- package/esm2022/conversation/lib/entities/comments/pages/comment-lookup-popup.component.mjs +0 -56
- package/esm2022/form-template-management/acorex-modules-form-template-management.mjs +0 -5
- package/esm2022/form-template-management/index.mjs +0 -2
- package/esm2022/form-template-management/lib/components/widgets/template-designer/index.mjs +0 -3
- package/esm2022/form-template-management/lib/components/widgets/template-designer/template-designer-widget-view.component.mjs +0 -44
- package/esm2022/form-template-management/lib/components/widgets/template-designer/template-designer-widget.config.mjs +0 -23
- package/esm2022/form-template-management/lib/const.mjs +0 -8
- package/esm2022/form-template-management/lib/entities/category/category.entity.mjs +0 -241
- package/esm2022/form-template-management/lib/entities/category/category.module.mjs +0 -28
- package/esm2022/form-template-management/lib/entities/category/category.service.mjs +0 -17
- package/esm2022/form-template-management/lib/entities/category/category.types.mjs +0 -2
- package/esm2022/form-template-management/lib/entities/category/index.mjs +0 -5
- package/esm2022/form-template-management/lib/entities/template/index.mjs +0 -5
- package/esm2022/form-template-management/lib/entities/template/template.entity.mjs +0 -434
- package/esm2022/form-template-management/lib/entities/template/template.module.mjs +0 -28
- package/esm2022/form-template-management/lib/entities/template/template.service.mjs +0 -17
- package/esm2022/form-template-management/lib/entities/template/template.types.mjs +0 -2
- package/esm2022/form-template-management/lib/entity.provider.mjs +0 -25
- package/esm2022/form-template-management/lib/form-template-management.module.mjs +0 -133
- package/esm2022/form-template-management/lib/menu.provider.mjs +0 -32
- package/esm2022/form-template-management/lib/pages/designer/designer.page.mjs +0 -29
- package/esm2022/form-template-management/lib/services/designer-connector.service.mjs +0 -33
- package/esm2022/form-template-management/lib/services/template.provider.mjs +0 -31
- package/esm2022/form-template-management/lib/workflows/create-template.workflow.mjs +0 -40
- package/esm2022/form-template-management/lib/workflows/design-template.workflow.mjs +0 -32
- package/esm2022/index.mjs +0 -2
- package/esm2022/localization-management/acorex-modules-localization-management.mjs +0 -5
- package/esm2022/localization-management/index.mjs +0 -8
- package/esm2022/localization-management/lib/const.mjs +0 -9
- package/esm2022/localization-management/lib/culture/culture.entity.mjs +0 -239
- package/esm2022/localization-management/lib/culture/culture.service.mjs +0 -17
- package/esm2022/localization-management/lib/culture/culture.types.mjs +0 -2
- package/esm2022/localization-management/lib/culture/index.mjs +0 -4
- package/esm2022/localization-management/lib/entity.loader.mjs +0 -36
- package/esm2022/localization-management/lib/language/index.mjs +0 -4
- package/esm2022/localization-management/lib/language/language-slot/language-slot.component.mjs +0 -30
- package/esm2022/localization-management/lib/language/language.entity.mjs +0 -239
- package/esm2022/localization-management/lib/language/language.service.mjs +0 -17
- package/esm2022/localization-management/lib/language/language.types.mjs +0 -2
- package/esm2022/localization-management/lib/localization-management.module.mjs +0 -99
- package/esm2022/localization-management/lib/localization-management.source.mjs +0 -4
- package/esm2022/localization-management/lib/localization-store.service.mjs +0 -34
- package/esm2022/localization-management/lib/menu.provider.mjs +0 -44
- package/esm2022/localization-management/lib/time-zone/index.mjs +0 -4
- package/esm2022/localization-management/lib/time-zone/time-zone.entity.mjs +0 -256
- package/esm2022/localization-management/lib/time-zone/time-zone.service.mjs +0 -17
- package/esm2022/localization-management/lib/time-zone/time-zone.types.mjs +0 -2
- package/esm2022/notification-management/acorex-modules-notification-management.mjs +0 -5
- package/esm2022/notification-management/index.mjs +0 -9
- package/esm2022/notification-management/lib/admin-notification-slot/admin-notification-item/admin-notification-item.component.mjs +0 -39
- package/esm2022/notification-management/lib/admin-notification-slot/admin-notification-panel/admin-notification-panel.component.mjs +0 -155
- package/esm2022/notification-management/lib/admin-notification-slot/admin-notification-slot/admin-notification-slot.component.mjs +0 -36
- package/esm2022/notification-management/lib/const.mjs +0 -9
- package/esm2022/notification-management/lib/entities/my-notification.mjs +0 -236
- package/esm2022/notification-management/lib/entities/notification-channel.entity.mjs +0 -344
- package/esm2022/notification-management/lib/entities/notification-log.entity.mjs +0 -180
- package/esm2022/notification-management/lib/entities/notification-template.entity.mjs +0 -298
- package/esm2022/notification-management/lib/entities/notification.entity.mjs +0 -207
- package/esm2022/notification-management/lib/entity.loader.mjs +0 -41
- package/esm2022/notification-management/lib/menu.provider.mjs +0 -54
- package/esm2022/notification-management/lib/notification-management-mock-data.mjs +0 -55
- package/esm2022/notification-management/lib/notification-management.module.mjs +0 -61
- package/esm2022/notification-management/lib/notification-management.service.mjs +0 -39
- package/esm2022/notification-management/lib/notification-management.type.mjs +0 -2
- package/esm2022/notification-management/lib/notification.service.mjs +0 -3
- package/esm2022/platform-management/acorex-modules-platform-management.mjs +0 -5
- package/esm2022/platform-management/index.mjs +0 -4
- package/esm2022/platform-management/lib/common/common.module.mjs +0 -65
- package/esm2022/platform-management/lib/common/common.source.mjs +0 -5
- package/esm2022/platform-management/lib/common/country/country-datasource.provider.mjs +0 -27
- package/esm2022/platform-management/lib/common/country/country.entity.mjs +0 -696
- package/esm2022/platform-management/lib/common/country/country.service.mjs +0 -17
- package/esm2022/platform-management/lib/common/country/country.types.mjs +0 -2
- package/esm2022/platform-management/lib/common/country/index.mjs +0 -4
- package/esm2022/platform-management/lib/common/currency/currency.entity.mjs +0 -283
- package/esm2022/platform-management/lib/common/currency/currency.service.mjs +0 -17
- package/esm2022/platform-management/lib/common/currency/currency.types.mjs +0 -2
- package/esm2022/platform-management/lib/common/currency/index.mjs +0 -4
- package/esm2022/platform-management/lib/common/entity.loader.mjs +0 -36
- package/esm2022/platform-management/lib/common/index.mjs +0 -5
- package/esm2022/platform-management/lib/common/province/index.mjs +0 -4
- package/esm2022/platform-management/lib/common/province/province.entity.mjs +0 -307
- package/esm2022/platform-management/lib/common/province/province.service.mjs +0 -17
- package/esm2022/platform-management/lib/common/province/province.types.mjs +0 -2
- package/esm2022/platform-management/lib/const.mjs +0 -12
- package/esm2022/platform-management/lib/global-variables/entities/global-variable.entity.mjs +0 -346
- package/esm2022/platform-management/lib/global-variables/entity.loader.mjs +0 -23
- package/esm2022/platform-management/lib/global-variables/global-variables.service.mjs +0 -16
- package/esm2022/platform-management/lib/global-variables/global-variables.types.mjs +0 -2
- package/esm2022/platform-management/lib/global-variables/index.mjs +0 -5
- package/esm2022/platform-management/lib/menu.provider.mjs +0 -74
- package/esm2022/platform-management/lib/platform-management.module.mjs +0 -61
- package/esm2022/scheduler-job-management/acorex-modules-scheduler-job-management.mjs +0 -5
- package/esm2022/scheduler-job-management/index.mjs +0 -5
- package/esm2022/scheduler-job-management/lib/const.mjs +0 -8
- package/esm2022/scheduler-job-management/lib/entities/index.mjs +0 -2
- package/esm2022/scheduler-job-management/lib/entities/scheduler-job/index.mjs +0 -5
- package/esm2022/scheduler-job-management/lib/entities/scheduler-job/scheduler-job.entity.mjs +0 -333
- package/esm2022/scheduler-job-management/lib/entities/scheduler-job/scheduler-job.module.mjs +0 -28
- package/esm2022/scheduler-job-management/lib/entities/scheduler-job/scheduler-job.service.mjs +0 -17
- package/esm2022/scheduler-job-management/lib/entities/scheduler-job/scheduler-job.types.mjs +0 -2
- package/esm2022/scheduler-job-management/lib/entity.provider.mjs +0 -25
- package/esm2022/scheduler-job-management/lib/menu.provider.mjs +0 -31
- package/esm2022/scheduler-job-management/lib/scheduler-job-management.module.mjs +0 -44
- package/esm2022/setting-management/acorex-modules-setting-management.mjs +0 -5
- package/esm2022/setting-management/index.mjs +0 -5
- package/esm2022/setting-management/lib/const.mjs +0 -7
- package/esm2022/setting-management/lib/entities/index.mjs +0 -2
- package/esm2022/setting-management/lib/entities/setting/index.mjs +0 -5
- package/esm2022/setting-management/lib/entities/setting/setting.entity.mjs +0 -244
- package/esm2022/setting-management/lib/entities/setting/setting.module.mjs +0 -28
- package/esm2022/setting-management/lib/entities/setting/setting.service.mjs +0 -17
- package/esm2022/setting-management/lib/entities/setting/setting.types.mjs +0 -2
- package/esm2022/setting-management/lib/entity.provider.mjs +0 -25
- package/esm2022/setting-management/lib/menu.provider.mjs +0 -32
- package/esm2022/setting-management/lib/setting-management.module.mjs +0 -44
- package/esm2022/text-template-management/acorex-modules-text-template-management.mjs +0 -5
- package/esm2022/text-template-management/index.mjs +0 -6
- package/esm2022/text-template-management/lib/const.mjs +0 -8
- package/esm2022/text-template-management/lib/entities/category/category.entity.mjs +0 -262
- package/esm2022/text-template-management/lib/entities/category/category.module.mjs +0 -28
- package/esm2022/text-template-management/lib/entities/category/category.service.mjs +0 -17
- package/esm2022/text-template-management/lib/entities/category/category.types.mjs +0 -2
- package/esm2022/text-template-management/lib/entities/category/index.mjs +0 -5
- package/esm2022/text-template-management/lib/entities/index.mjs +0 -3
- package/esm2022/text-template-management/lib/entities/template/index.mjs +0 -5
- package/esm2022/text-template-management/lib/entities/template/template.entity.mjs +0 -405
- package/esm2022/text-template-management/lib/entities/template/template.module.mjs +0 -28
- package/esm2022/text-template-management/lib/entities/template/template.service.mjs +0 -17
- package/esm2022/text-template-management/lib/entities/template/template.types.mjs +0 -2
- package/esm2022/text-template-management/lib/entity.provider.mjs +0 -29
- package/esm2022/text-template-management/lib/menu.provider.mjs +0 -37
- package/esm2022/text-template-management/lib/setting.provider.mjs +0 -308
- package/esm2022/text-template-management/lib/text-template-management.module.mjs +0 -56
- package/fesm2022/acorex-modules-application-management-module-designer.component-B6WPz0N8.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-acorex-modules-auth-utPX4yb_.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-app-chooser.component-TeYGIm6k.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-blank.layout-Bq822Iz4.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-login.module-CJwYNVRQ.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-master.layout-CTC5upRa.mjs +0 -38
- package/fesm2022/acorex-modules-auth-master.layout-CTC5upRa.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-password.component-DWnYxb-x.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-password.component-DZb3bTWc.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-tenant-chooser.component-6qDoCUBo.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-two-factor-code.component-BJKmvI7y.mjs.map +0 -1
- package/fesm2022/acorex-modules-auth-two-factor.module-JsnQJZvC.mjs.map +0 -1
- package/fesm2022/acorex-modules-form-template-management-designer.page-NhIPhsRs.mjs.map +0 -1
- package/fesm2022/acorex-modules-setting-management.mjs +0 -393
- package/fesm2022/acorex-modules-setting-management.mjs.map +0 -1
- package/platform-management/lib/common/common.source.d.ts +0 -4
- package/setting-management/README.md +0 -3
- package/setting-management/index.d.ts +0 -4
- package/setting-management/lib/const.d.ts +0 -6
- package/setting-management/lib/entities/index.d.ts +0 -1
- package/setting-management/lib/entities/setting/index.d.ts +0 -4
- package/setting-management/lib/entities/setting/setting.entity.d.ts +0 -3
- package/setting-management/lib/entities/setting/setting.module.d.ts +0 -6
- package/setting-management/lib/entities/setting/setting.service.d.ts +0 -10
- package/setting-management/lib/entities/setting/setting.types.d.ts +0 -5
- package/setting-management/lib/entity.provider.d.ts +0 -9
- package/setting-management/lib/menu.provider.d.ts +0 -5
- package/setting-management/lib/setting-management.module.d.ts +0 -7
@@ -1,392 +0,0 @@
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed, inject, signal, viewChild } from '@angular/core';
|
2
|
-
import { ActivatedRoute } from '@angular/router';
|
3
|
-
import { AXDialogService } from '@acorex/components/dialog';
|
4
|
-
import { AXPopupService } from '@acorex/components/popup';
|
5
|
-
import { AXToastService } from '@acorex/components/toast';
|
6
|
-
import { AXPlatform } from '@acorex/core/platform';
|
7
|
-
import { AXPHtmlUtils } from '@acorex/platform/core';
|
8
|
-
import { AXMCommentService } from '../comments.service';
|
9
|
-
import { AXMCommentLookupPopup } from './comment-lookup-popup.component';
|
10
|
-
import * as i0 from "@angular/core";
|
11
|
-
import * as i1 from "@angular/forms";
|
12
|
-
import * as i2 from "@acorex/components/decorators";
|
13
|
-
import * as i3 from "@acorex/components/wysiwyg";
|
14
|
-
import * as i4 from "@acorex/components/button";
|
15
|
-
import * as i5 from "@acorex/components/avatar";
|
16
|
-
import * as i6 from "@acorex/components/image";
|
17
|
-
import * as i7 from "@acorex/components/form";
|
18
|
-
import * as i8 from "@acorex/components/loading";
|
19
|
-
import * as i9 from "@acorex/components/dropdown-button";
|
20
|
-
import * as i10 from "@acorex/components/dropdown";
|
21
|
-
import * as i11 from "@acorex/components/skeleton";
|
22
|
-
import * as i12 from "@acorex/components/comment";
|
23
|
-
import * as i13 from "@angular/common";
|
24
|
-
import * as i14 from "@acorex/core/format";
|
25
|
-
export class AXMCommentListViewComponent {
|
26
|
-
constructor() {
|
27
|
-
this.hasCooldown = signal(false);
|
28
|
-
this.commentContent = signal('');
|
29
|
-
this.isSubmitting = signal(false);
|
30
|
-
this.isReplyingMode = signal(false);
|
31
|
-
this.isEditingMode = signal(false);
|
32
|
-
this.isLoading = signal(true);
|
33
|
-
this.failedImageIds = signal([]);
|
34
|
-
this.activeReplyComment = signal(undefined);
|
35
|
-
this.activeEditComment = signal(undefined);
|
36
|
-
this.wysiwygEditor = viewChild.required('w');
|
37
|
-
this.commentService = inject(AXMCommentService);
|
38
|
-
this.platform = inject(AXPlatform);
|
39
|
-
this.route = inject(ActivatedRoute);
|
40
|
-
this.popupService = inject(AXPopupService);
|
41
|
-
this.toastService = inject(AXToastService);
|
42
|
-
this.dialogService = inject(AXDialogService);
|
43
|
-
this.htmlUtils = inject(AXPHtmlUtils);
|
44
|
-
this.routeParams = this.route.snapshot;
|
45
|
-
this.getPayload = computed(() => ({
|
46
|
-
params: this.payload(),
|
47
|
-
skip: 0,
|
48
|
-
take: 10,
|
49
|
-
}));
|
50
|
-
this.payload = computed(() => ({
|
51
|
-
roomType: 'default',
|
52
|
-
entityId: this.routeParams.params?.['module'] + '.' + this.routeParams.params?.['entity'],
|
53
|
-
instanceId: this.routeParams.params?.['id'],
|
54
|
-
}));
|
55
|
-
this.comments = signal([]);
|
56
|
-
this.wysiwyg = viewChild('w');
|
57
|
-
this.wysiwygOptions = signal({
|
58
|
-
look: 'solid',
|
59
|
-
});
|
60
|
-
this.avatarConfig = signal({
|
61
|
-
color: 'primary',
|
62
|
-
look: 'rounded',
|
63
|
-
type: 'solid', // 'image' | 'text' | 'icon' | 'default'
|
64
|
-
});
|
65
|
-
this.validateContent = (content) => {
|
66
|
-
let isValid = true;
|
67
|
-
if (!content || content === '<p><br></p>') {
|
68
|
-
isValid = false;
|
69
|
-
}
|
70
|
-
return {
|
71
|
-
rule: 'callback',
|
72
|
-
result: isValid,
|
73
|
-
message: isValid ? '' : 'Please fill the content',
|
74
|
-
value: content,
|
75
|
-
};
|
76
|
-
};
|
77
|
-
}
|
78
|
-
ngOnInit() {
|
79
|
-
this.loadComments();
|
80
|
-
}
|
81
|
-
sanitizeHtml(htmlContent) {
|
82
|
-
return this.htmlUtils.getSafeHTMLfromHTML(htmlContent);
|
83
|
-
}
|
84
|
-
handleImageError(imageId) {
|
85
|
-
this.failedImageIds.update((ids) => [...ids, imageId]);
|
86
|
-
}
|
87
|
-
checkImageExists(imageId) {
|
88
|
-
return !this.failedImageIds().includes(imageId);
|
89
|
-
}
|
90
|
-
extractInitials(name) {
|
91
|
-
const words = name.split(' ');
|
92
|
-
const initials = words.map((word) => word.charAt(0).toUpperCase());
|
93
|
-
return initials.join('');
|
94
|
-
}
|
95
|
-
async loadComments() {
|
96
|
-
this.isLoading.set(true);
|
97
|
-
// const response = await this.commentService.get(this.payload());
|
98
|
-
const response = await this.commentService.query(this.getPayload());
|
99
|
-
this.comments.set(response.items);
|
100
|
-
setTimeout(() => {
|
101
|
-
this.isLoading.set(false);
|
102
|
-
}, 250);
|
103
|
-
}
|
104
|
-
editMessage(comment, reply) {
|
105
|
-
this.isReplyingMode.set(false);
|
106
|
-
this.activeReplyComment.set(undefined);
|
107
|
-
this.isEditingMode.set(true);
|
108
|
-
this.activeEditComment.set(comment);
|
109
|
-
const contentToEdit = reply ? reply.content : comment.content;
|
110
|
-
this.commentContent.set(contentToEdit);
|
111
|
-
document.getElementsByClassName('ql-editor')[0].innerHTML = contentToEdit;
|
112
|
-
this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });
|
113
|
-
}
|
114
|
-
replyMessage(comment, reply) {
|
115
|
-
this.isEditingMode.set(false);
|
116
|
-
this.activeEditComment.set(undefined);
|
117
|
-
this.isReplyingMode.set(true);
|
118
|
-
this.activeReplyComment.set(comment);
|
119
|
-
if (reply) {
|
120
|
-
const mention = `<a data-id="${reply.id}">@${reply.user?.userName}</a> `;
|
121
|
-
this.commentContent.set(mention);
|
122
|
-
this.wysiwyg()?.focus();
|
123
|
-
document.getElementsByClassName('ql-editor')[0].innerHTML = mention;
|
124
|
-
}
|
125
|
-
this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });
|
126
|
-
}
|
127
|
-
async deleteComment(comment) {
|
128
|
-
const dialog = this.dialogService.open({
|
129
|
-
icon: 'fa-regular fa-warning',
|
130
|
-
content: 'Are you sure you want to delete this comment?',
|
131
|
-
title: 'Delete Comment',
|
132
|
-
type: 'danger',
|
133
|
-
orientation: 'horizontal',
|
134
|
-
buttons: [
|
135
|
-
{
|
136
|
-
text: 'Delete',
|
137
|
-
color: 'danger',
|
138
|
-
onClick: async (e) => {
|
139
|
-
e.handled = true;
|
140
|
-
e.source.text = 'Deleting...';
|
141
|
-
e.source.disabled = true;
|
142
|
-
e.source.loading = true;
|
143
|
-
try {
|
144
|
-
await this.commentService.deleteOne(comment.id);
|
145
|
-
this.removeMessageById(comment.id);
|
146
|
-
this.toastService.show({
|
147
|
-
content: 'Comment deleted successfully.',
|
148
|
-
color: 'success',
|
149
|
-
location: 'bottom-center',
|
150
|
-
closeButton: true,
|
151
|
-
timeOut: 3000,
|
152
|
-
timeOutProgress: true,
|
153
|
-
});
|
154
|
-
(this.isEditingMode() && this.activeEditComment()?.id === comment.id) || this.resetReplyEditState;
|
155
|
-
dialog.close();
|
156
|
-
}
|
157
|
-
catch (error) {
|
158
|
-
this.toastService.show({
|
159
|
-
content: typeof error === 'string' ? error : 'Failed to delete comment!',
|
160
|
-
color: 'danger',
|
161
|
-
location: 'bottom-center',
|
162
|
-
closeButton: true,
|
163
|
-
timeOut: 3000,
|
164
|
-
timeOutProgress: true,
|
165
|
-
});
|
166
|
-
}
|
167
|
-
},
|
168
|
-
},
|
169
|
-
{
|
170
|
-
text: 'Cancel',
|
171
|
-
color: 'ghost',
|
172
|
-
autofocus: true,
|
173
|
-
onClick: (e) => {
|
174
|
-
dialog.close();
|
175
|
-
},
|
176
|
-
},
|
177
|
-
],
|
178
|
-
closeButton: false,
|
179
|
-
});
|
180
|
-
}
|
181
|
-
async deleteReply(comment, reply) {
|
182
|
-
const dialog = this.dialogService.open({
|
183
|
-
icon: 'fa-regular fa-warning',
|
184
|
-
content: 'Are you sure you want to delete this reply?',
|
185
|
-
title: 'Delete Reply',
|
186
|
-
type: 'danger',
|
187
|
-
orientation: 'horizontal',
|
188
|
-
buttons: [
|
189
|
-
{
|
190
|
-
text: 'Delete',
|
191
|
-
color: 'danger',
|
192
|
-
onClick: async (e) => {
|
193
|
-
e.handled = true;
|
194
|
-
e.source.text = 'Deleting...';
|
195
|
-
e.source.disabled = true;
|
196
|
-
e.source.loading = true;
|
197
|
-
try {
|
198
|
-
await this.commentService.deleteOne(comment.id);
|
199
|
-
this.removeMessageById(comment.id, reply.id);
|
200
|
-
this.toastService.show({
|
201
|
-
content: 'Comment deleted successfully.',
|
202
|
-
color: 'success',
|
203
|
-
location: 'bottom-center',
|
204
|
-
closeButton: true,
|
205
|
-
timeOut: 3000,
|
206
|
-
timeOutProgress: true,
|
207
|
-
});
|
208
|
-
dialog.close();
|
209
|
-
}
|
210
|
-
catch (error) {
|
211
|
-
this.toastService.show({
|
212
|
-
content: typeof error === 'string' ? error : 'Failed to delete comment!',
|
213
|
-
color: 'danger',
|
214
|
-
location: 'bottom-center',
|
215
|
-
closeButton: true,
|
216
|
-
timeOut: 3000,
|
217
|
-
timeOutProgress: true,
|
218
|
-
});
|
219
|
-
}
|
220
|
-
},
|
221
|
-
},
|
222
|
-
{
|
223
|
-
text: 'Cancel',
|
224
|
-
color: 'ghost',
|
225
|
-
autofocus: true,
|
226
|
-
onClick: (e) => {
|
227
|
-
dialog.close();
|
228
|
-
},
|
229
|
-
},
|
230
|
-
],
|
231
|
-
closeButton: false,
|
232
|
-
});
|
233
|
-
}
|
234
|
-
resetReplyEditState() {
|
235
|
-
this.isEditingMode.set(false);
|
236
|
-
this.activeEditComment.set(undefined);
|
237
|
-
this.isReplyingMode.set(false);
|
238
|
-
this.activeReplyComment.set(undefined);
|
239
|
-
}
|
240
|
-
async toggleLike(comment, reply) {
|
241
|
-
if (reply) {
|
242
|
-
this.updateLikeStatus(comment.id, reply.id);
|
243
|
-
const payload = {
|
244
|
-
messageId: reply.id,
|
245
|
-
type: 'like',
|
246
|
-
};
|
247
|
-
try {
|
248
|
-
await this.commentService.like(payload);
|
249
|
-
}
|
250
|
-
catch (error) {
|
251
|
-
this.updateLikeStatus(comment.id, reply.id);
|
252
|
-
}
|
253
|
-
}
|
254
|
-
else {
|
255
|
-
this.updateLikeStatus(comment.id);
|
256
|
-
const payload = {
|
257
|
-
messageId: comment.id,
|
258
|
-
type: 'like',
|
259
|
-
};
|
260
|
-
try {
|
261
|
-
await this.commentService.like(payload);
|
262
|
-
}
|
263
|
-
catch (error) {
|
264
|
-
this.updateLikeStatus(comment.id);
|
265
|
-
}
|
266
|
-
}
|
267
|
-
}
|
268
|
-
updateLikeStatus(commentId, replyId) {
|
269
|
-
this.comments.update((commentsList) => {
|
270
|
-
return commentsList.map((comment) => {
|
271
|
-
if (comment.id === commentId) {
|
272
|
-
if (replyId) {
|
273
|
-
const updatedReplies = comment.replies?.map((reply) => reply.id === replyId
|
274
|
-
? {
|
275
|
-
...reply,
|
276
|
-
isLiked: !reply.isLiked,
|
277
|
-
reactionsCount: reply.isLiked ? --reply.reactionsCount : ++reply.reactionsCount,
|
278
|
-
}
|
279
|
-
: reply);
|
280
|
-
return {
|
281
|
-
...comment,
|
282
|
-
replies: updatedReplies,
|
283
|
-
};
|
284
|
-
}
|
285
|
-
else {
|
286
|
-
return {
|
287
|
-
...comment,
|
288
|
-
isLiked: !comment.isLiked,
|
289
|
-
reactionsCount: comment.isLiked ? --comment.reactionsCount : ++comment.reactionsCount,
|
290
|
-
};
|
291
|
-
}
|
292
|
-
}
|
293
|
-
return comment;
|
294
|
-
});
|
295
|
-
});
|
296
|
-
}
|
297
|
-
removeMessageById(commentId, replyId) {
|
298
|
-
this.comments.update((commentsList) => commentsList
|
299
|
-
.map((comment) => {
|
300
|
-
if (comment.id === commentId) {
|
301
|
-
if (replyId) {
|
302
|
-
return {
|
303
|
-
...comment,
|
304
|
-
replies: comment.replies?.filter((reply) => reply.id !== replyId),
|
305
|
-
};
|
306
|
-
}
|
307
|
-
return null;
|
308
|
-
}
|
309
|
-
return comment;
|
310
|
-
})
|
311
|
-
.filter((comment) => comment !== null));
|
312
|
-
}
|
313
|
-
async submitComment(isPrivate = false) {
|
314
|
-
if (!this.validateContent(this.commentContent()).result) {
|
315
|
-
return;
|
316
|
-
}
|
317
|
-
let memberLookup;
|
318
|
-
if (isPrivate) {
|
319
|
-
const popupConfig = {
|
320
|
-
header: true,
|
321
|
-
size: 'md',
|
322
|
-
draggable: true,
|
323
|
-
hasBackdrop: true,
|
324
|
-
closeButton: true,
|
325
|
-
closeOnBackdropClick: false,
|
326
|
-
};
|
327
|
-
const popup = await this.popupService.open(AXMCommentLookupPopup, popupConfig);
|
328
|
-
memberLookup = popup.data?.data?.lookup;
|
329
|
-
}
|
330
|
-
if (this.isEditingMode()) {
|
331
|
-
const payload = {
|
332
|
-
content: this.commentContent(),
|
333
|
-
};
|
334
|
-
//todo why ? need not nullable id !-!
|
335
|
-
await this.commentService.updateOne(this.activeEditComment()?.id, payload);
|
336
|
-
this.isSubmitting.set(true);
|
337
|
-
this.hasCooldown.set(true);
|
338
|
-
this.isEditingMode.set(false);
|
339
|
-
this.activeEditComment.set(undefined);
|
340
|
-
}
|
341
|
-
else {
|
342
|
-
const payload = {
|
343
|
-
...this.payload(),
|
344
|
-
content: this.commentContent(),
|
345
|
-
contentType: 'text',
|
346
|
-
isPrivate: isPrivate,
|
347
|
-
replyId: this.activeReplyComment()?.id ?? null,
|
348
|
-
//members: isPrivate ? [memberLookup] : [],
|
349
|
-
};
|
350
|
-
await this.commentService.insertOne(payload);
|
351
|
-
this.isSubmitting.set(true);
|
352
|
-
this.hasCooldown.set(true);
|
353
|
-
this.isReplyingMode.set(false);
|
354
|
-
this.activeReplyComment.set(undefined);
|
355
|
-
}
|
356
|
-
const response = await this.commentService.query(this.getPayload());
|
357
|
-
this.comments.set(response.items);
|
358
|
-
this.commentContent.set('');
|
359
|
-
document.getElementsByClassName('ql-editor')[0].innerHTML = '';
|
360
|
-
this.isSubmitting.set(false);
|
361
|
-
setTimeout(() => {
|
362
|
-
this.hasCooldown.set(false);
|
363
|
-
}, 1000);
|
364
|
-
}
|
365
|
-
scrollMain() {
|
366
|
-
console.log('clicked');
|
367
|
-
//
|
368
|
-
const comment = this.isReplyingMode() ? this.activeReplyComment() : this.activeEditComment();
|
369
|
-
const el = document.getElementById(comment.id);
|
370
|
-
if (el) {
|
371
|
-
el.scrollIntoView({ behavior: 'smooth', block: 'center' });
|
372
|
-
const content = el?.firstElementChild?.children[1];
|
373
|
-
const prevBg = content.style.background;
|
374
|
-
content.style.borderRadius = '0.25rem';
|
375
|
-
content.style.transition = 'background 1s ease-in-out';
|
376
|
-
content.style.background = `rgba(var(--ax-color-on-surface), var(--tw-bg-opacity))`;
|
377
|
-
setTimeout(() => {
|
378
|
-
content.style.background = prevBg || 'rgba(0, 0, 0, 0)';
|
379
|
-
}, 1000);
|
380
|
-
}
|
381
|
-
}
|
382
|
-
calcDefrenetTime(date) {
|
383
|
-
return date ? Date.now() - date.getTime() : undefined;
|
384
|
-
}
|
385
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMCommentListViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
386
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMCommentListViewComponent, selector: "axm-comment-list-view", viewQueries: [{ propertyName: "wysiwygEditor", first: true, predicate: ["w"], descendants: true, isSignal: true }, { propertyName: "wysiwyg", first: true, predicate: ["w"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"ax-mt-2\">\n <ax-comment-container>\n @if(isLoading()){\n <div class=\"ax-flex ax-items-center ax-py-12 ax-bg-surface ax-px-5\">\n <ax-skeleton class=\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8/12 ax-h-2 ax-rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if(!isLoading() && comments().length > 0){\n <ax-comment-view class=\"ax-bg-surface\">\n @for(comment of comments(); track comment.id){\n <ax-comment-item [id]=\"comment.id!\" [replyCount]=\"comment.replies?.length ?? 0\">\n <ax-avatar [color]=\"avatarConfig().color\" [look]=\"avatarConfig().look\">\n @if(checkImageExists(comment.id!) && comment.user && comment.user.picture){\n <ax-image (onError)=\"handleImageError(comment.id!)\" [src]=\"comment.user!.picture\">\n <ax-loading></ax-loading>\n </ax-image>\n }@else{\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{\n extractInitials(comment.user?.firstName + ' ' + comment.user?.lastName)\n }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ comment.user?.firstName + ' ' + comment.user?.lastName }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(comment.createdAt) | format : 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"secondary\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"secondary\" (click)=\"editMessage(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteComment(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment)\" [liked]=\"comment.isLiked\">\n {{ comment.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment)\"></ax-comment-reply-text>\n @for(reply of comment.replies; track reply.id){\n <ax-comment-item [id]=\"reply.id\">\n <ax-avatar [color]=\"avatarConfig().color\" [look]=\"avatarConfig().look\">\n @if(reply && checkImageExists(reply.id!) && reply.user && reply.user.picture){\n <ax-image (onError)=\"handleImageError(reply!.id!)\" [src]=\"reply.user!.picture\">\n <ax-loading></ax-loading>\n </ax-image>\n }@else{\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{\n extractInitials(reply.user?.firstName + ' ' + reply.user?.lastName)\n }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ (reply?.user?.firstName ?? '') + ' ' + (reply?.user?.lastName ?? '') }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(reply.createdAt) | format : 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"secondary\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"secondary\" (click)=\"editMessage(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteReply(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment, reply)\" [liked]=\"reply.isLiked\">\n {{ reply.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment, reply)\"></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n } </ax-comment-view\n >} @else{\n <div>\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\">\n <svg\n class=\"ax-mx-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"154\"\n height=\"161\"\n viewBox=\"0 0 154 161\"\n fill=\"none\"\n >\n <path\n d=\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\"\n fill=\"#EEF2FF\"\n />\n <path\n d=\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\"\n fill=\"white\"\n stroke=\"#E5E7EB\"\n />\n <ellipse cx=\"80.0618\" cy=\"81\" rx=\"28.0342\" ry=\"28.0342\" fill=\"#EEF2FF\" />\n <path\n d=\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\"\n fill=\"#A5B4FC\"\n stroke=\"#818CF8\"\n />\n <path\n d=\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\"\n fill=\"#4F46E5\"\n />\n <rect x=\"38.3522\" y=\"21.5128\" width=\"41.0256\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <rect x=\"38.3522\" y=\"133.65\" width=\"54.7009\" height=\"5.47009\" rx=\"2.73504\" fill=\"#A5B4FC\" />\n <rect x=\"38.3522\" y=\"29.7179\" width=\"13.6752\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"56.13\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"61.6001\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"67.0702\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n </svg>\n <div>\n <h2 class=\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\">\n There is no Comment!\n </h2>\n </div>\n </div>\n </div>\n }\n </ax-comment-container>\n <ax-form>\n <ax-form-field>\n <div>\n @if(isReplyingMode() || isEditingMode()){\n <div\n class=\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-b-0 ax-rounded-lg ax-bg-on-surface ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div (click)=\"scrollMain()\" class=\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-solid ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\"\n ></i>\n <div\n class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\"\n >\n <p class=\"ax-text-primary-500 dark:ax-text-primary-300\">\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\n <span class=\"ax-font-bold\">\n {{\n isReplyingMode()\n ? activeReplyComment()?.user?.firstName + ' ' + activeReplyComment()?.user?.lastName\n : ''\n }}\n </span>\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.content ?? '')\n : sanitizeHtml(activeEditComment()?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n <ax-suffix>\n <ax-dropdown-button\n [disabled]=\"hasCooldown()\"\n type=\"submit\"\n color=\"primary\"\n mode=\"split\"\n text=\"Send\"\n (onClick)=\"submitComment()\"\n >\n @if(isSubmitting()){ <ax-loading></ax-loading> }\n <ax-button-item-list>\n <ax-button-item (click)=\"submitComment(true)\" text=\"Send Private ...\" name=\"private\" data=\"private\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-user-secret\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </ax-suffix>\n </ax-wysiwyg-toolbar>\n <ax-validation-rule rule=\"callback\" [options]=\"{ validate: validateContent }\"></ax-validation-rule>\n </ax-wysiwyg-container>\n </div>\n </ax-form-field>\n </ax-form>\n</div>\n", styles: ["ax-wysiwyg-container .ax-editor-container{border-top-left-radius:0!important;border-top-right-radius:0!important}ax-wysiwyg-container .ax-error-message{padding-left:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.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: i3.AXWysiwygContainerComponent, selector: "ax-wysiwyg-container", inputs: ["look", "placeHolder"], outputs: ["onValueChanged"] }, { kind: "component", type: i3.AXWysiwygViewComponent, selector: "ax-wysiwyg-view", inputs: ["class"] }, { kind: "component", type: i3.AXWysiwygToolbarComponent, selector: "ax-wysiwyg-toolbar" }, { kind: "component", type: i3.AXWysiwygAlignmentComponent, selector: "ax-wysiwyg-alignment" }, { kind: "component", type: i3.AXWysiwygColorsComponent, selector: "ax-wysiwyg-colors" }, { kind: "component", type: i3.AXWysiwygFontStyleComponent, selector: "ax-wysiwyg-font-style" }, { kind: "component", type: i3.AXWysiwygHistoryComponent, selector: "ax-wysiwyg-history" }, { kind: "component", type: i3.AXWysiwygListComponent, selector: "ax-wysiwyg-list" }, { kind: "component", type: i4.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: i4.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i4.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "component", type: i5.AXAvatarComponent, selector: "ax-avatar", inputs: ["color", "size", "look"], outputs: ["sizeChange"] }, { kind: "component", type: i6.AXImageComponent, selector: "ax-image", inputs: ["overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "component", type: i7.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i7.AXFormComponent, selector: "ax-form", inputs: ["labelMode", "look", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "directive", type: i7.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message"] }, { kind: "component", type: i8.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: i9.AXDropdownButtonComponent, selector: "ax-dropdown-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "type", "mode"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "lookChange", "colorChange", "disabledChange"] }, { kind: "component", type: i10.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i11.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: i12.AXCommentViewComponent, selector: "ax-comment-view" }, { kind: "component", type: i12.AXCommentContainerComponent, selector: "ax-comment-container" }, { kind: "component", type: i12.AxCommentItemComponent, selector: "ax-comment-item", inputs: ["replyCount"] }, { kind: "component", type: i12.AXCommentLikeComponent, selector: "ax-comment-like", inputs: ["liked"] }, { kind: "component", type: i12.AXMenuOptionsComponent, selector: "ax-comment-menu-options" }, { kind: "component", type: i12.AXCommentReplyTextComponent, selector: "ax-comment-reply-text" }, { kind: "component", type: i12.AXCommentDateComponent, selector: "ax-comment-date" }, { kind: "pipe", type: i13.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
387
|
-
}
|
388
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMCommentListViewComponent, decorators: [{
|
389
|
-
type: Component,
|
390
|
-
args: [{ selector: 'axm-comment-list-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-mt-2\">\n <ax-comment-container>\n @if(isLoading()){\n <div class=\"ax-flex ax-items-center ax-py-12 ax-bg-surface ax-px-5\">\n <ax-skeleton class=\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\"></ax-skeleton>\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-w-full\">\n <ax-skeleton class=\"ax-w-full ax-h-6 ax-rounded\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-full ax-h-2 ax-rounded-full\"></ax-skeleton>\n <ax-skeleton class=\"ax-w-8/12 ax-h-2 ax-rounded-full\"></ax-skeleton>\n </div>\n </div>\n } @else if(!isLoading() && comments().length > 0){\n <ax-comment-view class=\"ax-bg-surface\">\n @for(comment of comments(); track comment.id){\n <ax-comment-item [id]=\"comment.id!\" [replyCount]=\"comment.replies?.length ?? 0\">\n <ax-avatar [color]=\"avatarConfig().color\" [look]=\"avatarConfig().look\">\n @if(checkImageExists(comment.id!) && comment.user && comment.user.picture){\n <ax-image (onError)=\"handleImageError(comment.id!)\" [src]=\"comment.user!.picture\">\n <ax-loading></ax-loading>\n </ax-image>\n }@else{\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{\n extractInitials(comment.user?.firstName + ' ' + comment.user?.lastName)\n }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ comment.user?.firstName + ' ' + comment.user?.lastName }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(comment.createdAt) | format : 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"secondary\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"secondary\" (click)=\"editMessage(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteComment(comment)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(comment.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment)\" [liked]=\"comment.isLiked\">\n {{ comment.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment)\"></ax-comment-reply-text>\n @for(reply of comment.replies; track reply.id){\n <ax-comment-item [id]=\"reply.id\">\n <ax-avatar [color]=\"avatarConfig().color\" [look]=\"avatarConfig().look\">\n @if(reply && checkImageExists(reply.id!) && reply.user && reply.user.picture){\n <ax-image (onError)=\"handleImageError(reply!.id!)\" [src]=\"reply.user!.picture\">\n <ax-loading></ax-loading>\n </ax-image>\n }@else{\n <ax-text>\n <span class=\"ax-text-base ax-overflow-hidden\">{{\n extractInitials(reply.user?.firstName + ' ' + reply.user?.lastName)\n }}</span>\n </ax-text>\n }\n </ax-avatar>\n <ax-title>{{ (reply?.user?.firstName ?? '') + ' ' + (reply?.user?.lastName ?? '') }}</ax-title>\n <ax-comment-date>{{ calcDefrenetTime(reply.createdAt) | format : 'timeleft' | async }} </ax-comment-date>\n <ax-comment-menu-options>\n <ax-button class=\"ax-sm\" look=\"blank\" color=\"secondary\">\n <ax-icon icon=\"ax-icon ax-icon-solid ax-icon-more-horizontal\"></ax-icon>\n </ax-button>\n\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Edit\" color=\"secondary\" (click)=\"editMessage(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item text=\"Delete\" color=\"danger\" (click)=\"deleteReply(comment, reply)\">\n <ax-prefix>\n <ax-icon icon=\"fa-solid fa-trash-can\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-comment-menu-options>\n <ax-content [innerHTML]=\"sanitizeHtml(reply.content)\"></ax-content>\n <ax-comment-like (click)=\"toggleLike(comment, reply)\" [liked]=\"reply.isLiked\">\n {{ reply.reactionsCount }}\n </ax-comment-like>\n <ax-comment-reply-text (click)=\"replyMessage(comment, reply)\"></ax-comment-reply-text>\n </ax-comment-item>\n }\n </ax-comment-item>\n } </ax-comment-view\n >} @else{\n <div>\n <div class=\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\">\n <svg\n class=\"ax-mx-auto\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"154\"\n height=\"161\"\n viewBox=\"0 0 154 161\"\n fill=\"none\"\n >\n <path\n d=\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\"\n fill=\"#EEF2FF\"\n />\n <path\n d=\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\"\n fill=\"white\"\n stroke=\"#E5E7EB\"\n />\n <ellipse cx=\"80.0618\" cy=\"81\" rx=\"28.0342\" ry=\"28.0342\" fill=\"#EEF2FF\" />\n <path\n d=\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\"\n stroke=\"#E5E7EB\"\n />\n <path\n d=\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\"\n fill=\"#A5B4FC\"\n stroke=\"#818CF8\"\n />\n <path\n d=\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\"\n fill=\"#4F46E5\"\n />\n <path\n d=\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\"\n fill=\"#4F46E5\"\n />\n <rect x=\"38.3522\" y=\"21.5128\" width=\"41.0256\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <rect x=\"38.3522\" y=\"133.65\" width=\"54.7009\" height=\"5.47009\" rx=\"2.73504\" fill=\"#A5B4FC\" />\n <rect x=\"38.3522\" y=\"29.7179\" width=\"13.6752\" height=\"2.73504\" rx=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"56.13\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"61.6001\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n <circle cx=\"67.0702\" cy=\"31.0854\" r=\"1.36752\" fill=\"#4F46E5\" />\n </svg>\n <div>\n <h2 class=\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\">\n There is no Comment!\n </h2>\n </div>\n </div>\n </div>\n }\n </ax-comment-container>\n <ax-form>\n <ax-form-field>\n <div>\n @if(isReplyingMode() || isEditingMode()){\n <div\n class=\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-b-0 ax-rounded-lg ax-bg-on-surface ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\"\n >\n <div (click)=\"scrollMain()\" class=\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\">\n <i\n [class]=\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\"\n class=\"fa-solid ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\"\n ></i>\n <div\n class=\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\"\n >\n <p class=\"ax-text-primary-500 dark:ax-text-primary-300\">\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\n <span class=\"ax-font-bold\">\n {{\n isReplyingMode()\n ? activeReplyComment()?.user?.firstName + ' ' + activeReplyComment()?.user?.lastName\n : ''\n }}\n </span>\n </p>\n <div\n class=\"ax-truncate\"\n [innerHTML]=\"\n isReplyingMode()\n ? sanitizeHtml(activeReplyComment()?.content ?? '')\n : sanitizeHtml(activeEditComment()?.content ?? '')\n \"\n ></div>\n </div>\n </div>\n <div><i (click)=\"resetReplyEditState()\" class=\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\"></i></div>\n </div>\n }\n <ax-wysiwyg-container #w [look]=\"wysiwygOptions().look\" [(ngModel)]=\"commentContent\">\n <ax-wysiwyg-view class=\"ax-min-h-28\"></ax-wysiwyg-view>\n <ax-wysiwyg-toolbar>\n <ax-wysiwyg-history></ax-wysiwyg-history>\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\n <ax-wysiwyg-list></ax-wysiwyg-list>\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\n <ax-suffix>\n <ax-dropdown-button\n [disabled]=\"hasCooldown()\"\n type=\"submit\"\n color=\"primary\"\n mode=\"split\"\n text=\"Send\"\n (onClick)=\"submitComment()\"\n >\n @if(isSubmitting()){ <ax-loading></ax-loading> }\n <ax-button-item-list>\n <ax-button-item (click)=\"submitComment(true)\" text=\"Send Private ...\" name=\"private\" data=\"private\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-user-secret\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </ax-suffix>\n </ax-wysiwyg-toolbar>\n <ax-validation-rule rule=\"callback\" [options]=\"{ validate: validateContent }\"></ax-validation-rule>\n </ax-wysiwyg-container>\n </div>\n </ax-form-field>\n </ax-form>\n</div>\n", styles: ["ax-wysiwyg-container .ax-editor-container{border-top-left-radius:0!important;border-top-right-radius:0!important}ax-wysiwyg-container .ax-error-message{padding-left:.5rem}\n"] }]
|
391
|
-
}] });
|
392
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1saXN0LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2VudGl0aWVzL2NvbW1lbnRzL3BhZ2VzL2NvbW1lbnQtbGlzdC12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9lbnRpdGllcy9jb21tZW50cy9wYWdlcy9jb21tZW50LWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBaUIsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQnpFLE1BQU0sT0FBTywyQkFBMkI7SUFoQnhDO1FBaUJZLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekIsbUJBQWMsR0FBRyxNQUFNLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDdEMsdUJBQWtCLEdBQUcsTUFBTSxDQUFvQyxTQUFTLENBQUMsQ0FBQztRQUMxRSxzQkFBaUIsR0FBRyxNQUFNLENBQW9DLFNBQVMsQ0FBQyxDQUFDO1FBQ3pFLGtCQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBOEIsR0FBRyxDQUFDLENBQUM7UUFFdkUsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyxhQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlCLFVBQUssR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0IsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV4QixnQkFBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQzNDLGVBQVUsR0FBRyxRQUFRLENBQzNCLEdBQUcsRUFBRSxDQUNILENBQUM7WUFDQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN0QixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxFQUFFO1NBQ1csQ0FBQSxDQUN4QixDQUFDO1FBQ0YsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3hCLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztZQUN6RixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDNUMsQ0FBQyxDQUFDLENBQUM7UUFFTSxhQUFRLEdBQUcsTUFBTSxDQUEwQixFQUFFLENBQUMsQ0FBQztRQUNqRCxZQUFPLEdBQUcsU0FBUyxDQUE4QixHQUFHLENBQUMsQ0FBQztRQU1wRCxtQkFBYyxHQUFHLE1BQU0sQ0FFOUI7WUFDRCxJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztRQUVPLGlCQUFZLEdBQUcsTUFBTSxDQUk1QjtZQUNELEtBQUssRUFBRSxTQUFTO1lBQ2hCLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLE9BQU8sRUFBRSx3Q0FBd0M7U0FDeEQsQ0FBQyxDQUFDO1FBRUgsb0JBQWUsR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO1lBQ3BDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztZQUVuQixJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNsQixDQUFDO1lBQ0QsT0FBTztnQkFDTCxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7Z0JBQ2pELEtBQUssRUFBRSxPQUFPO2FBQ2YsQ0FBQztRQUNKLENBQUMsQ0FBQztLQW9VSDtJQXBXQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFnQ0QsWUFBWSxDQUFDLFdBQW1CO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBZTtRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFlO1FBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxlQUFlLENBQUMsSUFBWTtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNuRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLG1FQUFtRTtRQUNuRSxNQUFNLFFBQVEsR0FBOEMsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUUvRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBOEIsRUFBRSxLQUE2QjtRQUN2RSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDO1FBQzFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBOEIsRUFBRSxLQUE2QjtRQUN4RSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sT0FBTyxHQUFHLGVBQWUsS0FBSyxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsT0FBTyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN4QixRQUFRLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztRQUN0RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLGNBQWMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBOEI7UUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDckMsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixPQUFPLEVBQUUsK0NBQStDO1lBQ3hELEtBQUssRUFBRSxnQkFBZ0I7WUFDdkIsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsWUFBWTtZQUN6QixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsS0FBSyxFQUFFLFFBQVE7b0JBQ2YsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFNLEVBQUUsRUFBRTt3QkFDeEIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQ2pCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQzt3QkFDOUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO3dCQUN6QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7d0JBQ3hCLElBQUksQ0FBQzs0QkFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFHLENBQUMsQ0FBQzs0QkFDakQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFHLENBQUMsQ0FBQzs0QkFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0NBQ3JCLE9BQU8sRUFBRSwrQkFBK0I7Z0NBQ3hDLEtBQUssRUFBRSxTQUFTO2dDQUNoQixRQUFRLEVBQUUsZUFBZTtnQ0FDekIsV0FBVyxFQUFFLElBQUk7Z0NBQ2pCLE9BQU8sRUFBRSxJQUFJO2dDQUNiLGVBQWUsRUFBRSxJQUFJOzZCQUN0QixDQUFDLENBQUM7NEJBQ0gsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUM7NEJBQ2xHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDakIsQ0FBQzt3QkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDOzRCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dDQUNyQixPQUFPLEVBQUUsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtnQ0FDeEUsS0FBSyxFQUFFLFFBQVE7Z0NBQ2YsUUFBUSxFQUFFLGVBQWU7Z0NBQ3pCLFdBQVcsRUFBRSxJQUFJO2dDQUNqQixPQUFPLEVBQUUsSUFBSTtnQ0FDYixlQUFlLEVBQUUsSUFBSTs2QkFDdEIsQ0FBQyxDQUFDO3dCQUNMLENBQUM7b0JBQ0gsQ0FBQztpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsUUFBUTtvQkFDZCxLQUFLLEVBQUUsT0FBTztvQkFDZCxTQUFTLEVBQUUsSUFBSTtvQkFDZixPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTt3QkFDYixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2pCLENBQUM7aUJBQ0Y7YUFDRjtZQUNELFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQThCLEVBQUUsS0FBNEI7UUFDNUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDckMsSUFBSSxFQUFFLHVCQUF1QjtZQUM3QixPQUFPLEVBQUUsNkNBQTZDO1lBQ3RELEtBQUssRUFBRSxjQUFjO1lBQ3JCLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLFlBQVk7WUFDekIsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxRQUFRO29CQUNmLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBTSxFQUFFLEVBQUU7d0JBQ3hCLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7d0JBQzlCLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUN4QixJQUFJLENBQUM7NEJBQ0gsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRyxDQUFDLENBQUM7NEJBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0NBQ3JCLE9BQU8sRUFBRSwrQkFBK0I7Z0NBQ3hDLEtBQUssRUFBRSxTQUFTO2dDQUNoQixRQUFRLEVBQUUsZUFBZTtnQ0FDekIsV0FBVyxFQUFFLElBQUk7Z0NBQ2pCLE9BQU8sRUFBRSxJQUFJO2dDQUNiLGVBQWUsRUFBRSxJQUFJOzZCQUN0QixDQUFDLENBQUM7NEJBQ0gsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNqQixDQUFDO3dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7NEJBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0NBQ3JCLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsMkJBQTJCO2dDQUN4RSxLQUFLLEVBQUUsUUFBUTtnQ0FDZixRQUFRLEVBQUUsZUFBZTtnQ0FDekIsV0FBVyxFQUFFLElBQUk7Z0NBQ2pCLE9BQU8sRUFBRSxJQUFJO2dDQUNiLGVBQWUsRUFBRSxJQUFJOzZCQUN0QixDQUFDLENBQUM7d0JBQ0wsQ0FBQztvQkFDSCxDQUFDO2lCQUNGO2dCQUNEO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxPQUFPO29CQUNkLFNBQVMsRUFBRSxJQUFJO29CQUNmLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNiLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDakIsQ0FBQztpQkFDRjthQUNGO1lBQ0QsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBOEIsRUFBRSxLQUE2QjtRQUM1RSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sT0FBTyxHQUFrQztnQkFDN0MsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFHO2dCQUNwQixJQUFJLEVBQUUsTUFBTTthQUNiLENBQUM7WUFFRixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFHLENBQUMsQ0FBQztZQUNuQyxNQUFNLE9BQU8sR0FBa0M7Z0JBQzdDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRztnQkFDdEIsSUFBSSxFQUFFLE1BQU07YUFDYixDQUFDO1lBRUYsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFHLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLE9BQWdCO1FBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDcEMsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDWixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3BELEtBQUssQ0FBQyxFQUFFLEtBQUssT0FBTzs0QkFDbEIsQ0FBQyxDQUFDO2dDQUNFLEdBQUcsS0FBSztnQ0FDUixPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTztnQ0FDdkIsY0FBYyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGNBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsY0FBZTs2QkFDbEY7NEJBQ0gsQ0FBQyxDQUFDLEtBQUssQ0FDVixDQUFDO3dCQUVGLE9BQU87NEJBQ0wsR0FBRyxPQUFPOzRCQUNWLE9BQU8sRUFBRSxjQUFjO3lCQUN4QixDQUFDO29CQUNKLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixPQUFPOzRCQUNMLEdBQUcsT0FBTzs0QkFDVixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTzs0QkFDekIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLGNBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsY0FBZTt5QkFDeEYsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLE9BQWdCO1FBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FDcEMsWUFBWTthQUNULEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2YsSUFBSSxPQUFPLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE9BQU87d0JBQ0wsR0FBRyxPQUFPO3dCQUNWLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUM7cUJBQ2xFLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQXFCLEtBQUs7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLFlBQVksQ0FBQztRQUNqQixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxXQUFXLEdBQWtCO2dCQUNqQyxNQUFNLEVBQUUsSUFBSTtnQkFDWixJQUFJLEVBQUUsSUFBSTtnQkFDVixTQUFTLEVBQUUsSUFBSTtnQkFDZixXQUFXLEVBQUUsSUFBSTtnQkFDakIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLG9CQUFvQixFQUFFLEtBQUs7YUFDNUIsQ0FBQztZQUNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDL0UsWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztRQUMxQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRztnQkFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRTthQUMvQixDQUFDO1lBQ0YscUNBQXFDO1lBQ3JDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsRUFBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBNEI7Z0JBQ3ZDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzlCLFdBQVcsRUFBRSxNQUFNO2dCQUNuQixTQUFTLEVBQUUsU0FBUztnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJO2dCQUM5QywyQ0FBMkM7YUFDNUMsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQThDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDL0csSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsVUFBVTtRQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkIsRUFBRTtRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzdGLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUUsT0FBaUMsQ0FBQyxFQUFHLENBQUMsQ0FBQztRQUMzRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDM0QsTUFBTSxPQUFPLEdBQUcsRUFBRSxFQUFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQWdCLENBQUM7WUFDbEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLDJCQUEyQixDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLHdEQUF3RCxDQUFDO1lBQ3BGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxJQUFJLGtCQUFrQixDQUFDO1lBQzFELENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNYLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBc0I7UUFDckMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN4RCxDQUFDOzhHQTNZVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixnUkM5QnhDLHF4WkE2T0E7OzJGRC9NYSwyQkFBMkI7a0JBaEJ2QyxTQUFTOytCQUVFLHVCQUF1QixtQkFZaEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYV3lzaXd5Z0NvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy93eXNpd3lnJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIE9uSW5pdCwgc2lnbmFsLCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgQVhTdHlsZUxvb2tUeXBlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBBWERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGlhbG9nJztcbmltcG9ydCB7IEFYUG9wdXBDb25maWcsIEFYUG9wdXBTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcHVwJztcbmltcG9ydCB7IEFYVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RvYXN0JztcbmltcG9ydCB7IEFYUGxhdGZvcm0gfSBmcm9tICdAYWNvcmV4L2NvcmUvcGxhdGZvcm0nO1xuaW1wb3J0IHsgQVhQUGFnZWRMaXN0UmVzdWx0LCBBWFBRdWVyeVJlcXVlc3QgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBIdG1sVXRpbHMgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhNQ29tbWVudFNlcnZpY2UgfSBmcm9tICcuLi9jb21tZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNvbW1lbnRDcmVhdGVSZXF1ZXN0LCBBWE1Db21tZW50RW50aXR5TW9kZWwsIEFYTU1lc3NhZ2VSZWFjdGlvbkVudGl0eU1vZGVsIH0gZnJvbSAnLi4vY29tbWVudHMudHlwZSc7XG5pbXBvcnQgeyBBWE1Db21tZW50TG9va3VwUG9wdXAgfSBmcm9tICcuL2NvbW1lbnQtbG9va3VwLXBvcHVwLmNvbXBvbmVudCc7XG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQtbGlzdC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc2VsZWN0b3I6ICdheG0tY29tbWVudC1saXN0LXZpZXcnLFxuXG4gIHN0eWxlczogYGF4LXd5c2l3eWctY29udGFpbmVye1xuICAgIC5heC1lZGl0b3ItY29udGFpbmVye1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMCAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLmF4LWVycm9yLW1lc3NhZ2V7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuNXJlbTtcbiAgICB9XG5cbiAgfWAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50TGlzdFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcm90ZWN0ZWQgaGFzQ29vbGRvd24gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgY29tbWVudENvbnRlbnQgPSBzaWduYWwoJycpO1xuXG4gIHByb3RlY3RlZCBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNSZXBseWluZ01vZGUgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNFZGl0aW5nTW9kZSA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBpc0xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG5cbiAgcHJvdGVjdGVkIGZhaWxlZEltYWdlSWRzID0gc2lnbmFsPHN0cmluZ1tdPihbXSk7XG4gIHByb3RlY3RlZCBhY3RpdmVSZXBseUNvbW1lbnQgPSBzaWduYWw8dW5kZWZpbmVkIHwgQVhNQ29tbWVudEVudGl0eU1vZGVsPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgYWN0aXZlRWRpdENvbW1lbnQgPSBzaWduYWw8dW5kZWZpbmVkIHwgQVhNQ29tbWVudEVudGl0eU1vZGVsPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgd3lzaXd5Z0VkaXRvciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxBWFd5c2l3eWdDb250YWluZXJDb21wb25lbnQ+KCd3Jyk7XG5cbiAgcHJpdmF0ZSBjb21tZW50U2VydmljZSA9IGluamVjdChBWE1Db21tZW50U2VydmljZSk7XG4gIHByaXZhdGUgcGxhdGZvcm0gPSBpbmplY3QoQVhQbGF0Zm9ybSk7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHBvcHVwU2VydmljZSA9IGluamVjdChBWFBvcHVwU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KEFYVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFYRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgaHRtbFV0aWxzID0gaW5qZWN0KEFYUEh0bWxVdGlscyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZVBhcmFtcyA9IHRoaXMucm91dGUuc25hcHNob3Q7XG4gIHByaXZhdGUgZ2V0UGF5bG9hZCA9IGNvbXB1dGVkKFxuICAgICgpID0+XG4gICAgICAoe1xuICAgICAgICBwYXJhbXM6IHRoaXMucGF5bG9hZCgpLFxuICAgICAgICBza2lwOiAwLFxuICAgICAgICB0YWtlOiAxMCxcbiAgICAgIH0gYXMgQVhQUXVlcnlSZXF1ZXN0KVxuICApO1xuICBwYXlsb2FkID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICByb29tVHlwZTogJ2RlZmF1bHQnLFxuICAgIGVudGl0eUlkOiB0aGlzLnJvdXRlUGFyYW1zLnBhcmFtcz8uWydtb2R1bGUnXSArICcuJyArIHRoaXMucm91dGVQYXJhbXMucGFyYW1zPy5bJ2VudGl0eSddLFxuICAgIGluc3RhbmNlSWQ6IHRoaXMucm91dGVQYXJhbXMucGFyYW1zPy5bJ2lkJ10sXG4gIH0pKTtcblxuICBwcm90ZWN0ZWQgY29tbWVudHMgPSBzaWduYWw8QVhNQ29tbWVudEVudGl0eU1vZGVsW10+KFtdKTtcbiAgcHJpdmF0ZSB3eXNpd3lnID0gdmlld0NoaWxkPEFYV3lzaXd5Z0NvbnRhaW5lckNvbXBvbmVudD4oJ3cnKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRDb21tZW50cygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHd5c2l3eWdPcHRpb25zID0gc2lnbmFsPHtcbiAgICBsb29rOiBBWFN0eWxlTG9va1R5cGU7XG4gIH0+KHtcbiAgICBsb29rOiAnc29saWQnLFxuICB9KTtcblxuICBwcm90ZWN0ZWQgYXZhdGFyQ29uZmlnID0gc2lnbmFsPHtcbiAgICBjb2xvcjogc3RyaW5nO1xuICAgIGxvb2s6ICdzaGFycCcgfCAnc29mdCcgfCAncm91bmRlZCc7XG4gICAgdHlwZTogc3RyaW5nO1xuICB9Pih7XG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBsb29rOiAncm91bmRlZCcsXG4gICAgdHlwZTogJ3NvbGlkJywgLy8gJ2ltYWdlJyB8ICd0ZXh0JyB8ICdpY29uJyB8ICdkZWZhdWx0J1xuICB9KTtcblxuICB2YWxpZGF0ZUNvbnRlbnQgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xuXG4gICAgaWYgKCFjb250ZW50IHx8IGNvbnRlbnQgPT09ICc8cD48YnI+PC9wPicpIHtcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bGU6ICdjYWxsYmFjaycsXG4gICAgICByZXN1bHQ6IGlzVmFsaWQsXG4gICAgICBtZXNzYWdlOiBpc1ZhbGlkID8gJycgOiAnUGxlYXNlIGZpbGwgdGhlIGNvbnRlbnQnLFxuICAgICAgdmFsdWU6IGNvbnRlbnQsXG4gICAgfTtcbiAgfTtcblxuICBzYW5pdGl6ZUh0bWwoaHRtbENvbnRlbnQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0bWxVdGlscy5nZXRTYWZlSFRNTGZyb21IVE1MKGh0bWxDb250ZW50KTtcbiAgfVxuXG4gIGhhbmRsZUltYWdlRXJyb3IoaW1hZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5mYWlsZWRJbWFnZUlkcy51cGRhdGUoKGlkcykgPT4gWy4uLmlkcywgaW1hZ2VJZF0pO1xuICB9XG5cbiAgY2hlY2tJbWFnZUV4aXN0cyhpbWFnZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZmFpbGVkSW1hZ2VJZHMoKS5pbmNsdWRlcyhpbWFnZUlkKTtcbiAgfVxuXG4gIGV4dHJhY3RJbml0aWFscyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHdvcmRzID0gbmFtZS5zcGxpdCgnICcpO1xuICAgIGNvbnN0IGluaXRpYWxzID0gd29yZHMubWFwKCh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpKTtcbiAgICByZXR1cm4gaW5pdGlhbHMuam9pbignJyk7XG4gIH1cblxuICBhc3luYyBsb2FkQ29tbWVudHMoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIC8vICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZ2V0KHRoaXMucGF5bG9hZCgpKTtcbiAgICBjb25zdCByZXNwb25zZTogQVhQUGFnZWRMaXN0UmVzdWx0PEFYTUNvbW1lbnRFbnRpdHlNb2RlbD4gPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLnF1ZXJ5KHRoaXMuZ2V0UGF5bG9hZCgpKTtcblxuICAgIHRoaXMuY29tbWVudHMuc2V0KHJlc3BvbnNlLml0ZW1zKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgfSwgMjUwKTtcbiAgfVxuXG4gIGVkaXRNZXNzYWdlKGNvbW1lbnQ6IEFYTUNvbW1lbnRFbnRpdHlNb2RlbCwgcmVwbHk/OiBBWE1Db21tZW50RW50aXR5TW9kZWwpIHtcbiAgICB0aGlzLmlzUmVwbHlpbmdNb2RlLnNldChmYWxzZSk7XG4gICAgdGhpcy5hY3RpdmVSZXBseUNvbW1lbnQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5pc0VkaXRpbmdNb2RlLnNldCh0cnVlKTtcbiAgICB0aGlzLmFjdGl2ZUVkaXRDb21tZW50LnNldChjb21tZW50KTtcbiAgICBjb25zdCBjb250ZW50VG9FZGl0ID0gcmVwbHkgPyByZXBseS5jb250ZW50IDogY29tbWVudC5jb250ZW50O1xuICAgIHRoaXMuY29tbWVudENvbnRlbnQuc2V0KGNvbnRlbnRUb0VkaXQpO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3FsLWVkaXRvcicpWzBdLmlubmVySFRNTCA9IGNvbnRlbnRUb0VkaXQ7XG4gICAgdGhpcy53eXNpd3lnRWRpdG9yKCkuZ2V0SG9zdEVsZW1lbnQoKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7XG4gIH1cblxuICByZXBseU1lc3NhZ2UoY29tbWVudDogQVhNQ29tbWVudEVudGl0eU1vZGVsLCByZXBseT86IEFYTUNvbW1lbnRFbnRpdHlNb2RlbCkge1xuICAgIHRoaXMuaXNFZGl0aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlRWRpdENvbW1lbnQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5pc1JlcGx5aW5nTW9kZS5zZXQodHJ1ZSk7XG4gICAgdGhpcy5hY3RpdmVSZXBseUNvbW1lbnQuc2V0KGNvbW1lbnQpO1xuICAgIGlmIChyZXBseSkge1xuICAgICAgY29uc3QgbWVudGlvbiA9IGA8YSBkYXRhLWlkPVwiJHtyZXBseS5pZH1cIj5AJHtyZXBseS51c2VyPy51c2VyTmFtZX08L2E+IGA7XG4gICAgICB0aGlzLmNvbW1lbnRDb250ZW50LnNldChtZW50aW9uKTtcbiAgICAgIHRoaXMud3lzaXd5ZygpPy5mb2N1cygpO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncWwtZWRpdG9yJylbMF0uaW5uZXJIVE1MID0gbWVudGlvbjtcbiAgICB9XG4gICAgdGhpcy53eXNpd3lnRWRpdG9yKCkuZ2V0SG9zdEVsZW1lbnQoKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVDb21tZW50KGNvbW1lbnQ6IEFYTUNvbW1lbnRFbnRpdHlNb2RlbCkge1xuICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKHtcbiAgICAgIGljb246ICdmYS1yZWd1bGFyIGZhLXdhcm5pbmcnLFxuICAgICAgY29udGVudDogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBjb21tZW50PycsXG4gICAgICB0aXRsZTogJ0RlbGV0ZSBDb21tZW50JyxcbiAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgb3JpZW50YXRpb246ICdob3Jpem9udGFsJyxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICdEZWxldGUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgICAgICAgICBvbkNsaWNrOiBhc3luYyAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICBlLmhhbmRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZS5zb3VyY2UudGV4dCA9ICdEZWxldGluZy4uLic7XG4gICAgICAgICAgICBlLnNvdXJjZS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBlLnNvdXJjZS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZGVsZXRlT25lKGNvbW1lbnQuaWQhKTtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVNZXNzYWdlQnlJZChjb21tZW50LmlkISk7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdDb21tZW50IGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LicsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ2JvdHRvbS1jZW50ZXInLFxuICAgICAgICAgICAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRpbWVPdXQ6IDMwMDAsXG4gICAgICAgICAgICAgICAgdGltZU91dFByb2dyZXNzOiB0cnVlLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgKHRoaXMuaXNFZGl0aW5nTW9kZSgpICYmIHRoaXMuYWN0aXZlRWRpdENvbW1lbnQoKT8uaWQgPT09IGNvbW1lbnQuaWQpIHx8IHRoaXMucmVzZXRSZXBseUVkaXRTdGF0ZTtcbiAgICAgICAgICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnID8gZXJyb3IgOiAnRmFpbGVkIHRvIGRlbGV0ZSBjb21tZW50IScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgdGltZU91dDogMzAwMCxcbiAgICAgICAgICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgICBjb2xvcjogJ2dob3N0JyxcbiAgICAgICAgICBhdXRvZm9jdXM6IHRydWUsXG4gICAgICAgICAgb25DbGljazogKGUpID0+IHtcbiAgICAgICAgICAgIGRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgY2xvc2VCdXR0b246IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlUmVwbHkoY29tbWVudDogQVhNQ29tbWVudEVudGl0eU1vZGVsLCByZXBseTogQVhNQ29tbWVudEVudGl0eU1vZGVsKSB7XG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oe1xuICAgICAgaWNvbjogJ2ZhLXJlZ3VsYXIgZmEtd2FybmluZycsXG4gICAgICBjb250ZW50OiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlcGx5PycsXG4gICAgICB0aXRsZTogJ0RlbGV0ZSBSZXBseScsXG4gICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnRGVsZXRlJyxcbiAgICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgICAgb25DbGljazogYXN5bmMgKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgZS5oYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuc291cmNlLnRleHQgPSAnRGVsZXRpbmcuLi4nO1xuICAgICAgICAgICAgZS5zb3VyY2UuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgZS5zb3VyY2UubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmRlbGV0ZU9uZShjb21tZW50LmlkISk7XG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVzc2FnZUJ5SWQoY29tbWVudC5pZCEsIHJlcGx5LmlkKTtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgICAgICAgY29udGVudDogJ0NvbW1lbnQgZGVsZXRlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgdGltZU91dDogMzAwMCxcbiAgICAgICAgICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgPyBlcnJvciA6ICdGYWlsZWQgdG8gZGVsZXRlIGNvbW1lbnQhJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246ICdib3R0b20tY2VudGVyJyxcbiAgICAgICAgICAgICAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0aW1lT3V0OiAzMDAwLFxuICAgICAgICAgICAgICAgIHRpbWVPdXRQcm9ncmVzczogdHJ1ZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICdDYW5jZWwnLFxuICAgICAgICAgIGNvbG9yOiAnZ2hvc3QnLFxuICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZSxcbiAgICAgICAgICBvbkNsaWNrOiAoZSkgPT4ge1xuICAgICAgICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjbG9zZUJ1dHRvbjogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICByZXNldFJlcGx5RWRpdFN0YXRlKCkge1xuICAgIHRoaXMuaXNFZGl0aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlRWRpdENvbW1lbnQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5pc1JlcGx5aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlUmVwbHlDb21tZW50LnNldCh1bmRlZmluZWQpO1xuICB9XG5cbiAgYXN5bmMgdG9nZ2xlTGlrZShjb21tZW50OiBBWE1Db21tZW50RW50aXR5TW9kZWwsIHJlcGx5PzogQVhNQ29tbWVudEVudGl0eU1vZGVsKSB7XG4gICAgaWYgKHJlcGx5KSB7XG4gICAgICB0aGlzLnVwZGF0ZUxpa2VTdGF0dXMoY29tbWVudC5pZCEsIHJlcGx5LmlkKTtcbiAgICAgIGNvbnN0IHBheWxvYWQ6IEFYTU1lc3NhZ2VSZWFjdGlvbkVudGl0eU1vZGVsID0ge1xuICAgICAgICBtZXNzYWdlSWQ6IHJlcGx5LmlkISxcbiAgICAgICAgdHlwZTogJ2xpa2UnLFxuICAgICAgfTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5saWtlKHBheWxvYWQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy51cGRhdGVMaWtlU3RhdHVzKGNvbW1lbnQuaWQhLCByZXBseS5pZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlTGlrZVN0YXR1cyhjb21tZW50LmlkISk7XG4gICAgICBjb25zdCBwYXlsb2FkOiBBWE1NZXNzYWdlUmVhY3Rpb25FbnRpdHlNb2RlbCA9IHtcbiAgICAgICAgbWVzc2FnZUlkOiBjb21tZW50LmlkISxcbiAgICAgICAgdHlwZTogJ2xpa2UnLFxuICAgICAgfTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5saWtlKHBheWxvYWQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy51cGRhdGVMaWtlU3RhdHVzKGNvbW1lbnQuaWQhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpa2VTdGF0dXMoY29tbWVudElkOiBzdHJpbmcsIHJlcGx5SWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbW1lbnRzLnVwZGF0ZSgoY29tbWVudHNMaXN0KSA9PiB7XG4gICAgICByZXR1cm4gY29tbWVudHNMaXN0Lm1hcCgoY29tbWVudCkgPT4ge1xuICAgICAgICBpZiAoY29tbWVudC5pZCA9PT0gY29tbWVudElkKSB7XG4gICAgICAgICAgaWYgKHJlcGx5SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRSZXBsaWVzID0gY29tbWVudC5yZXBsaWVzPy5tYXAoKHJlcGx5KSA9PlxuICAgICAgICAgICAgICByZXBseS5pZCA9PT0gcmVwbHlJZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZXBseSxcbiAgICAgICAgICAgICAgICAgICAgaXNMaWtlZDogIXJlcGx5LmlzTGlrZWQsXG4gICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uc0NvdW50OiByZXBseS5pc0xpa2VkID8gLS1yZXBseS5yZWFjdGlvbnNDb3VudCEgOiArK3JlcGx5LnJlYWN0aW9uc0NvdW50ISxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHJlcGx5XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb21tZW50LFxuICAgICAgICAgICAgICByZXBsaWVzOiB1cGRhdGVkUmVwbGllcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbW1lbnQsXG4gICAgICAgICAgICAgIGlzTGlrZWQ6ICFjb21tZW50LmlzTGlrZWQsXG4gICAgICAgICAgICAgIHJlYWN0aW9uc0NvdW50OiBjb21tZW50LmlzTGlrZWQgPyAtLWNvbW1lbnQucmVhY3Rpb25zQ291bnQhIDogKytjb21tZW50LnJlYWN0aW9uc0NvdW50ISxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21tZW50O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU1lc3NhZ2VCeUlkKGNvbW1lbnRJZDogc3RyaW5nLCByZXBseUlkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5jb21tZW50cy51cGRhdGUoKGNvbW1lbnRzTGlzdCkgPT5cbiAgICAgIGNvbW1lbnRzTGlzdFxuICAgICAgICAubWFwKChjb21tZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbW1lbnQuaWQgPT09IGNvbW1lbnRJZCkge1xuICAgICAgICAgICAgaWYgKHJlcGx5SWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5jb21tZW50LFxuICAgICAgICAgICAgICAgIHJlcGxpZXM6IGNvbW1lbnQucmVwbGllcz8uZmlsdGVyKChyZXBseSkgPT4gcmVwbHkuaWQgIT09IHJlcGx5SWQpLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb21tZW50O1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChjb21tZW50KSA9PiBjb21tZW50ICE9PSBudWxsKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBzdWJtaXRDb21tZW50KGlzUHJpdmF0ZTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQ29udGVudCh0aGlzLmNvbW1lbnRDb250ZW50KCkpLnJlc3VsdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBtZW1iZXJMb29rdXA7XG4gICAgaWYgKGlzUHJpdmF0ZSkge1xuICAgICAgY29uc3QgcG9wdXBDb25maWc6IEFYUG9wdXBDb25maWcgPSB7XG4gICAgICAgIGhlYWRlcjogdHJ1ZSxcbiAgICAgICAgc2l6ZTogJ21kJyxcbiAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBjb25zdCBwb3B1cCA9IGF3YWl0IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oQVhNQ29tbWVudExvb2t1cFBvcHVwLCBwb3B1cENvbmZpZyk7XG4gICAgICBtZW1iZXJMb29rdXAgPSBwb3B1cC5kYXRhPy5kYXRhPy5sb29rdXA7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzRWRpdGluZ01vZGUoKSkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgY29udGVudDogdGhpcy5jb21tZW50Q29udGVudCgpLFxuICAgICAgfTtcbiAgICAgIC8vdG9kbyB3aHkgPyBuZWVkIG5vdCBudWxsYWJsZSBpZCAhLSFcbiAgICAgIGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UudXBkYXRlT25lKHRoaXMuYWN0aXZlRWRpdENvbW1lbnQoKT8uaWQhLCBwYXlsb2FkKTtcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuaGFzQ29vbGRvd24uc2V0KHRydWUpO1xuICAgICAgdGhpcy5pc0VkaXRpbmdNb2RlLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmFjdGl2ZUVkaXRDb21tZW50LnNldCh1bmRlZmluZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXlsb2FkOiBBWE1Db21tZW50Q3JlYXRlUmVxdWVzdCA9IHtcbiAgICAgICAgLi4udGhpcy5wYXlsb2FkKCksXG4gICAgICAgIGNvbnRlbnQ6IHRoaXMuY29tbWVudENvbnRlbnQoKSxcbiAgICAgICAgY29udGVudFR5cGU6ICd0ZXh0JyxcbiAgICAgICAgaXNQcml2YXRlOiBpc1ByaXZhdGUsXG4gICAgICAgIHJlcGx5SWQ6IHRoaXMuYWN0aXZlUmVwbHlDb21tZW50KCk/LmlkID8/IG51bGwsXG4gICAgICAgIC8vbWVtYmVyczogaXNQcml2YXRlID8gW21lbWJlckxvb2t1cF0gOiBbXSxcbiAgICAgIH07XG4gICAgICBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmluc2VydE9uZShwYXlsb2FkKTtcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuaGFzQ29vbGRvd24uc2V0KHRydWUpO1xuXG4gICAgICB0aGlzLmlzUmVwbHlpbmdNb2RlLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmFjdGl2ZVJlcGx5Q29tbWVudC5zZXQodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2U6IEFYUFBhZ2VkTGlzdFJlc3VsdDxBWE1Db21tZW50RW50aXR5TW9kZWw+ID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5xdWVyeSh0aGlzLmdldFBheWxvYWQoKSk7XG4gICAgdGhpcy5jb21tZW50cy5zZXQocmVzcG9uc2UuaXRlbXMpO1xuICAgIHRoaXMuY29tbWVudENvbnRlbnQuc2V0KCcnKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbC1lZGl0b3InKVswXS5pbm5lckhUTUwgPSAnJztcbiAgICB0aGlzLmlzU3VibWl0dGluZy5zZXQoZmFsc2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oYXNDb29sZG93bi5zZXQoZmFsc2UpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgc2Nyb2xsTWFpbigpIHtcbiAgICBjb25zb2xlLmxvZygnY2xpY2tlZCcpO1xuICAgIC8vXG4gICAgY29uc3QgY29tbWVudCA9IHRoaXMuaXNSZXBseWluZ01vZGUoKSA/IHRoaXMuYWN0aXZlUmVwbHlDb21tZW50KCkgOiB0aGlzLmFjdGl2ZUVkaXRDb21tZW50KCk7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgoY29tbWVudCBhcyBBWE1Db21tZW50RW50aXR5TW9kZWwpLmlkISk7XG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgY29uc3QgY29udGVudCA9IGVsPy5maXJzdEVsZW1lbnRDaGlsZD8uY2hpbGRyZW5bMV0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBwcmV2QmcgPSBjb250ZW50LnN0eWxlLmJhY2tncm91bmQ7XG4gICAgICBjb250ZW50LnN0eWxlLmJvcmRlclJhZGl1cyA9ICcwLjI1cmVtJztcbiAgICAgIGNvbnRlbnQuc3R5bGUudHJhbnNpdGlvbiA9ICdiYWNrZ3JvdW5kIDFzIGVhc2UtaW4tb3V0JztcbiAgICAgIGNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZCA9IGByZ2JhKHZhcigtLWF4LWNvbG9yLW9uLXN1cmZhY2UpLCB2YXIoLS10dy1iZy1vcGFjaXR5KSlgO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZCA9IHByZXZCZyB8fCAncmdiYSgwLCAwLCAwLCAwKSc7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gIH1cblxuICBjYWxjRGVmcmVuZXRUaW1lKGRhdGU6IERhdGUgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGF0ZSA/IERhdGUubm93KCkgLSBkYXRlLmdldFRpbWUoKSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LW10LTJcIj5cbiAgPGF4LWNvbW1lbnQtY29udGFpbmVyPlxuICAgIEBpZihpc0xvYWRpbmcoKSl7XG4gICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LXB5LTEyIGF4LWJnLXN1cmZhY2UgYXgtcHgtNVwiPlxuICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtbWluLXctMTYgYXgtaC0xNiBheC1yb3VuZGVkLWZ1bGwgYXgtbWUtNFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtMiBheC13LWZ1bGxcIj5cbiAgICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtNiBheC1yb3VuZGVkXCI+PC9heC1za2VsZXRvbj5cbiAgICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtMiBheC1yb3VuZGVkLWZ1bGxcIj48L2F4LXNrZWxldG9uPlxuICAgICAgICA8YXgtc2tlbGV0b24gY2xhc3M9XCJheC13LWZ1bGwgYXgtaC0yIGF4LXJvdW5kZWQtZnVsbFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctOC8xMiBheC1oLTIgYXgtcm91bmRlZC1mdWxsXCI+PC9heC1za2VsZXRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIH0gQGVsc2UgaWYoIWlzTG9hZGluZygpICYmIGNvbW1lbnRzKCkubGVuZ3RoID4gMCl7XG4gICAgPGF4LWNvbW1lbnQtdmlldyBjbGFzcz1cImF4LWJnLXN1cmZhY2VcIj5cbiAgICAgIEBmb3IoY29tbWVudCBvZiBjb21tZW50cygpOyB0cmFjayBjb21tZW50LmlkKXtcbiAgICAgIDxheC1jb21tZW50LWl0ZW0gW2lkXT1cImNvbW1lbnQuaWQhXCIgW3JlcGx5Q291bnRdPVwiY29tbWVudC5yZXBsaWVzPy5sZW5ndGggPz8gMFwiPlxuICAgICAgICA8YXgtYXZhdGFyIFtjb2xvcl09XCJhdmF0YXJDb25maWcoKS5jb2xvclwiIFtsb29rXT1cImF2YXRhckNvbmZpZygpLmxvb2tcIj5cbiAgICAgICAgICBAaWYoY2hlY2tJbWFnZUV4aXN0cyhjb21tZW50LmlkISkgJiYgY29tbWVudC51c2VyICYmIGNvbW1lbnQudXNlci5waWN0dXJlKXtcbiAgICAgICAgICA8YXgtaW1hZ2UgKG9uRXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcihjb21tZW50LmlkISlcIiBbc3JjXT1cImNvbW1lbnQudXNlciEucGljdHVyZVwiPlxuICAgICAgICAgICAgPGF4LWxvYWRpbmc+PC9heC1sb2FkaW5nPlxuICAgICAgICAgIDwvYXgtaW1hZ2U+XG4gICAgICAgICAgfUBlbHNle1xuICAgICAgICAgIDxheC10ZXh0PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LWJhc2UgYXgtb3ZlcmZsb3ctaGlkZGVuXCI+e3tcbiAgICAgICAgICAgICAgZXh0cmFjdEluaXRpYWxzKGNvbW1lbnQudXNlcj8uZmlyc3ROYW1lICsgJyAnICsgY29tbWVudC51c2VyPy5sYXN0TmFtZSlcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgIDwvYXgtdGV4dD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvYXgtYXZhdGFyPlxuICAgICAgICA8YXgtdGl0bGU+e3sgY29tbWVudC51c2VyPy5maXJzdE5hbWUgKyAnICcgKyBjb21tZW50LnVzZXI/Lmxhc3ROYW1lIH19PC9heC10aXRsZT5cbiAgICAgICAgPGF4LWNvbW1lbnQtZGF0ZT57eyBjYWxjRGVmcmVuZXRUaW1lKGNvbW1lbnQuY3JlYXRlZEF0KSB8IGZvcm1hdCA6ICd0aW1lbGVmdCcgfCBhc3luYyB9fSA8L2F4LWNvbW1lbnQtZGF0ZT5cbiAgICAgICAgPGF4LWNvbW1lbnQtbWVudS1vcHRpb25zPlxuICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiIGxvb2s9XCJibGFua1wiIGNvbG9yPVwic2Vjb25kYXJ5XCI+XG4gICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiYXgtaWNvbiBheC1pY29uLXNvbGlkIGF4LWljb24tbW9yZS1ob3Jpem9udGFsXCI+PC9heC1pY29uPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuXG4gICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRWRpdFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImVkaXRNZXNzYWdlKGNvbW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1zb2xpZCBmYS1lZGl0XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuXG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRGVsZXRlXCIgY29sb3I9XCJkYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlQ29tbWVudChjb21tZW50KVwiPlxuICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtdHJhc2gtY2FuXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgIDwvYXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgIDwvYXgtY29tbWVudC1tZW51LW9wdGlvbnM+XG4gICAgICAgIDxheC1jb250ZW50IFtpbm5lckhUTUxdPVwic2FuaXRpemVIdG1sKGNvbW1lbnQuY29udGVudClcIj48L2F4LWNvbnRlbnQ+XG4gICAgICAgIDxheC1jb21tZW50LWxpa2UgKGNsaWNrKT1cInRvZ2dsZUxpa2UoY29tbWVudClcIiBbbGlrZWRdPVwiY29tbWVudC5pc0xpa2VkXCI+XG4gICAgICAgICAge3sgY29tbWVudC5yZWFjdGlvbnNDb3VudCB9fVxuICAgICAgICA8L2F4LWNvbW1lbnQtbGlrZT5cbiAgICAgICAgPGF4LWNvbW1lbnQtcmVwbHktdGV4dCAoY2xpY2spPVwicmVwbHlNZXNzYWdlKGNvbW1lbnQpXCI+PC9heC1jb21tZW50LXJlcGx5LXRleHQ+XG4gICAgICAgIEBmb3IocmVwbHkgb2YgY29tbWVudC5yZXBsaWVzOyB0cmFjayByZXBseS5pZCl7XG4gICAgICAgIDxheC1jb21tZW50LWl0ZW0gW2lkXT1cInJlcGx5LmlkXCI+XG4gICAgICAgICAgPGF4LWF2YXRhciBbY29sb3JdPVwiYXZhdGFyQ29uZmlnKCkuY29sb3JcIiBbbG9va109XCJhdmF0YXJDb25maWcoKS5sb29rXCI+XG4gICAgICAgICAgICBAaWYocmVwbHkgJiYgY2hlY2tJbWFnZUV4aXN0cyhyZXBseS5pZCEpICYmIHJlcGx5LnVzZXIgJiYgcmVwbHkudXNlci5waWN0dXJlKXtcbiAgICAgICAgICAgIDxheC1pbWFnZSAob25FcnJvcik9XCJoYW5kbGVJbWFnZUVycm9yKHJlcGx5IS5pZCEpXCIgW3NyY109XCJyZXBseS51c2VyIS5waWN0dXJlXCI+XG4gICAgICAgICAgICAgIDxheC1sb2FkaW5nPjwvYXgtbG9hZGluZz5cbiAgICAgICAgICAgIDwvYXgtaW1hZ2U+XG4gICAgICAgICAgICB9QGVsc2V7XG4gICAgICAgICAgICA8YXgtdGV4dD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LWJhc2UgYXgtb3ZlcmZsb3ctaGlkZGVuXCI+e3tcbiAgICAgICAgICAgICAgICBleHRyYWN0SW5pdGlhbHMocmVwbHkudXNlcj8uZmlyc3ROYW1lICsgJyAnICsgcmVwbHkudXNlcj8ubGFzdE5hbWUpXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9heC10ZXh0PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYXZhdGFyPlxuICAgICAgICAgIDxheC10aXRsZT57eyAocmVwbHk/LnVzZXI/LmZpcnN0TmFtZSA/PyAnJykgKyAnICcgKyAocmVwbHk/LnVzZXI/Lmxhc3ROYW1lID8/ICcnKSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgPGF4LWNvbW1lbnQtZGF0ZT57eyBjYWxjRGVmcmVuZXRUaW1lKHJlcGx5LmNyZWF0ZWRBdCkgfCBmb3JtYXQgOiAndGltZWxlZnQnIHwgYXN5bmMgfX0gPC9heC1jb21tZW50LWRhdGU+XG4gICAgICAgICAgPGF4LWNvbW1lbnQtbWVudS1vcHRpb25zPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCIgbG9vaz1cImJsYW5rXCIgY29sb3I9XCJzZWNvbmRhcnlcIj5cbiAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImF4LWljb24gYXgtaWNvbi1zb2xpZCBheC1pY29uLW1vcmUtaG9yaXpvbnRhbFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuXG4gICAgICAgICAgICA8YXgtZHJvcGRvd24tcGFuZWw+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRWRpdFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImVkaXRNZXNzYWdlKGNvbW1lbnQsIHJlcGx5KVwiPlxuICAgICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLXNvbGlkIGZhLWVkaXRcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRGVsZXRlXCIgY29sb3I9XCJkYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlUmVwbHkoY29tbWVudCwgcmVwbHkpXCI+XG4gICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtdHJhc2gtY2FuXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICA8L2F4LWNvbW1lbnQtbWVudS1vcHRpb25zPlxuICAgICAgICAgIDxheC1jb250ZW50IFtpbm5lckhUTUxdPVwic2FuaXRpemVIdG1sKHJlcGx5LmNvbnRlbnQpXCI+PC9heC1jb250ZW50PlxuICAgICAgICAgIDxheC1jb21tZW50LWxpa2UgKGNsaWNrKT1cInRvZ2dsZUxpa2UoY29tbWVudCwgcmVwbHkpXCIgW2xpa2VkXT1cInJlcGx5LmlzTGlrZWRcIj5cbiAgICAgICAgICAgIHt7IHJlcGx5LnJlYWN0aW9uc0NvdW50IH19XG4gICAgICAgICAgPC9heC1jb21tZW50LWxpa2U+XG4gICAgICAgICAgPGF4LWNvbW1lbnQtcmVwbHktdGV4dCAoY2xpY2spPVwicmVwbHlNZXNzYWdlKGNvbW1lbnQsIHJlcGx5KVwiPjwvYXgtY29tbWVudC1yZXBseS10ZXh0PlxuICAgICAgICA8L2F4LWNvbW1lbnQtaXRlbT5cbiAgICAgICAgfVxuICAgICAgPC9heC1jb21tZW50LWl0ZW0+XG4gICAgICB9IDwvYXgtY29tbWVudC12aWV3XG4gICAgPn0gQGVsc2V7XG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC00IGF4LWp1c3RpZnktY2VudGVyIGF4LWl0ZW1zLWNlbnRlciBheC1wLTEwXCI+XG4gICAgICAgIDxzdmdcbiAgICAgICAgICBjbGFzcz1cImF4LW14LWF1dG9cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHdpZHRoPVwiMTU0XCJcbiAgICAgICAgICBoZWlnaHQ9XCIxNjFcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTU0IDE2MVwiXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICA+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMC4wNjE2NDU1IDg0LjQyNjhDMC4wNjE2NDU1IDQyLjAyMTMgMzQuNDM1IDcuODM3NjUgNzYuNjUwNyA3LjgzNzY1QzExOC44MDMgNy44Mzc2NSAxNTMuMjI0IDQyLjAwNTUgMTUzLjIyNCA4NC40MjY4QzE1My4yMjQgMTAyLjQyIDE0Ny4wMjYgMTE4Ljk3NCAxMzYuNjIyIDEzMi4wMzRDMTIyLjI4MiAxNTAuMTM4IDEwMC4zNjcgMTYxIDc2LjY1MDcgMTYxQzUyLjc3NTkgMTYxIDMwLjk4ODIgMTUwLjA1OSAxNi42NjMzIDEzMi4wMzRDNi4yNTk2MSAxMTguOTc0IDAuMDYxNjQ1NSAxMDIuNDIgMC4wNjE2NDU1IDg0LjQyNjhaXCJcbiAgICAgICAgICAgIGZpbGw9XCIjRUVGMkZGXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTk2LjgxODkgMC42MzI0OThMOTYuODE4OSAwLjYzMjM4NEw5Ni44MDgzIDAuNjMwOTU0Qzk2LjIwMzQgMC41NDk1ODEgOTUuNTkzMSAwLjUgOTQuOTc4NyAwLjVIMjkuMzM4QzIyLjcxMTIgMC41IDE3LjMzOTQgNS44NDQ1NSAxNy4zMzk0IDEyLjQ0NzNWMTQyLjcxNUMxNy4zMzk0IDE0OS4zMTggMjIuNzExMiAxNTQuNjYyIDI5LjMzOCAxNTQuNjYySDEyMy45NDhDMTMwLjU5MSAxNTQuNjYyIDEzNS45NDYgMTQ5LjMxNyAxMzUuOTQ2IDE0Mi43MTVWMzguOTMwOUMxMzUuOTQ2IDM4LjAyNDQgMTM1Ljg0NyAzNy4xMzM0IDEzNS42NDggMzYuMjU4NkwxMzUuNjQ4IDM2LjI1ODRDMTM1LjExNyAzMy45MzA5IDEzMy44NzQgMzEuNzY4NiAxMzIuMDY2IDMwLjEzMzNDMTMyLjA2NiAzMC4xMzMxIDEzMi4wNjUgMzAuMTMyOSAxMzIuMDY1IDMwLjEzMjdMMTAzLjA2OCAzLjY1MjAzQzEwMy4wNjggMy42NTE5IDEwMy4wNjcgMy42NTE3NyAxMDMuMDY3IDMuNjUxNjRDMTAxLjMxMSAyLjAzNTI2IDk5LjEzOTYgMC45OTU1NTIgOTYuODE4OSAwLjYzMjQ5OFpcIlxuICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiNFNUU3RUJcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGVsbGlwc2UgY3g9XCI4MC4wNjE4XCIgY3k9XCI4MVwiIHJ4PVwiMjguMDM0MlwiIHJ5PVwiMjguMDM0MlwiIGZpbGw9XCIjRUVGMkZGXCIgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZD1cIk05OS4yMzkzIDYxLjMwNjFMOTkuMjM5MSA2MS4zMDU4Qzg4LjQ5OCA1MC41ODA4IDcxLjEwOTIgNTAuNTgwNCA2MC4zODM1IDYxLjMwNjFDNDkuNjQyMyA3Mi4wMzE2IDQ5LjY0MjIgODkuNDM2MSA2MC4zODMyIDEwMC4xNjJDNzEuMTA5IDExMC45MDMgODguNDk4MiAxMTAuOTAzIDk5LjIzOTMgMTAwLjE2MkMxMDkuOTY1IDg5LjQzNjMgMTA5Ljk2NSA3Mi4wMzE3IDk5LjIzOTMgNjEuMzA2MVpNMTA1Ljg2MyA1NC42ODMyQzEyMC4yNDkgNjkuMDY5NSAxMjAuMjQ5IDkyLjM5ODUgMTA1Ljg2MyAxMDYuNzg1QzkxLjQ2MDUgMTIxLjE3MSA2OC4xNDY4IDEyMS4xNzEgNTMuNzQ0NiAxMDYuNzg1QzM5LjM1ODIgOTIuMzk4NyAzOS4zNTgyIDY5LjA2OTMgNTMuNzQ0NiA1NC42ODNDNjguMTQ2OCA0MC4yOTY1IDkxLjQ2MDUgNDAuMjk2NiAxMDUuODYzIDU0LjY4MzJaXCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiNFNUU3RUJcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMTEwLjc4MiAxMTkuMjY3TDEwMi4wMTYgMTEwLjQ5MkMxMDQuODg4IDEwOC4yNjcgMTA3LjQ3NiAxMDUuNjUxIDEwOS41NjQgMTAyLjk1NUwxMTguMzI5IDExMS43MjlMMTEwLjc4MiAxMTkuMjY3WlwiXG4gICAgICAgICAgICBzdHJva2U9XCIjRTVFN0VCXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTEzOS4xMjIgMTI1Ljc4MUwxMzkuMTIyIDEyNS43OEwxMjMuMzEzIDEwOS45ODhDMTIzLjMxMyAxMDkuOTg3IDEyMy4zMTMgMTA5Ljk4NyAxMjMuMzEyIDEwOS45ODZDMTIxLjk5NiAxMDguNjUzIDExOS44NDkgMTA4LjY1NyAxMTguNTIxIDEwOS45ODVMMTE4Ljg3MSAxMTAuMzM1TDExOC41MjEgMTA5Ljk4NUwxMDkuMDQ3IDExOS40NTlDMTA3LjczMSAxMjAuNzc1IDEwNy43MzUgMTIyLjkxOCAxMDkuMDQ0IDEyNC4yNDdMMTA5LjA0NyAxMjQuMjQ5TDEyNC44NTggMTQwLjA2QzEyOC43ODkgMTQzLjk5MiAxMzUuMTkxIDE0My45OTIgMTM5LjEyMiAxNDAuMDZDMTQzLjA2OSAxMzYuMTEzIDE0My4wNjkgMTI5LjcyOCAxMzkuMTIyIDEyNS43ODFaXCJcbiAgICAgICAgICAgIGZpbGw9XCIjQTVCNEZDXCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiM4MThDRjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNODMuMTg1IDg3LjIyODVDODIuNTM4NyA4Ny4yMjg1IDgyLjAwMjcgODYuNjkyNiA4Mi4wMDI3IDg2LjAzMDVDODIuMDAyNyA4My4zODIxIDc3Ljk5ODcgODMuMzgyMSA3Ny45OTg3IDg2LjAzMDVDNzcuOTk4NyA4Ni42OTI2IDc3LjQ2MjcgODcuMjI4NSA3Ni44MDA2IDg3LjIyODVDNzYuMTU0MyA4Ny4yMjg1IDc1LjYxODMgODYuNjkyNiA3NS42MTgzIDg2LjAzMDVDNzUuNjE4MyA4MC4yMjk0IDg0LjM4MzEgODAuMjQ1MSA4NC4zODMxIDg2LjAzMDVDODQuMzgzMSA4Ni42OTI2IDgzLjg0NzEgODcuMjI4NSA4My4xODUgODcuMjI4NVpcIlxuICAgICAgICAgICAgZmlsbD1cIiM0RjQ2RTVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNOTMuMzUyOCA3Ny4wOTI2SDg4LjQwM0M4Ny43NDA5IDc3LjA5MjYgODcuMjA0OSA3Ni41NTY3IDg3LjIwNDkgNzUuODk0NkM4Ny4yMDQ5IDc1LjI0ODMgODcuNzQwOSA3NC43MTIzIDg4LjQwMyA3NC43MTIzSDkzLjM1MjhDOTQuMDE0OSA3NC43MTIzIDk0LjU1MDkgNzUuMjQ4MyA5NC41NTA5IDc1Ljg5NDZDOTQuNTUwOSA3Ni41NTY3IDk0LjAxNDkgNzcuMDkyNiA5My4zNTI4IDc3LjA5MjZaXCJcbiAgICAgICAgICAgIGZpbGw9XCIjNEY0NkU1XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTcxLjU5ODcgNzcuMDkyNUg2Ni42NDg4QzY1Ljk4NjcgNzcuMDkyNSA2NS40NTA3IDc2LjU1NjUgNjUuNDUwNyA3NS44OTQ1QzY1LjQ1MDcgNzUuMjQ4MSA2NS45ODY3IDc0LjcxMjIgNjYuNjQ4OCA3NC43MTIySDcxLjU5ODdDNzIuMjQ1IDc0LjcxMjIgNzIuNzgxIDc1LjI0ODEgNzIuNzgxIDc1Ljg5NDVDNzIuNzgxIDc2LjU1NjUgNzIuMjQ1IDc3LjA5MjUgNzEuNTk4NyA3Ny4wOTI1WlwiXG4gICAgICAgICAgICBmaWxsPVwiIzRGNDZFNVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cmVjdCB4PVwiMzguMzUyMlwiIHk9XCIyMS41MTI4XCIgd2lkdGg9XCI0MS4wMjU2XCIgaGVpZ2h0PVwiMi43MzUwNFwiIHJ4PVwiMS4zNjc1MlwiIGZpbGw9XCIjNEY0NkU1XCIgLz5cbiAgICAgICAgICA8cmVjdCB4PVwiMzguMzUyMlwiIHk9XCIxMzMuNjVcIiB3aWR0aD1cIjU0LjcwMDlcIiBoZWlnaHQ9XCI1LjQ3MDA5XCIgcng9XCIyLjczNTA0XCIgZmlsbD1cIiNBNUI0RkNcIiAvPlxuICAgICAgICAgIDxyZWN0IHg9XCIzOC4zNTIyXCIgeT1cIjI5LjcxNzlcIiB3aWR0aD1cIjEzLjY3NTJcIiBoZWlnaHQ9XCIyLjczNTA0XCIgcng9XCIxLjM2NzUyXCIgZmlsbD1cIiM0RjQ2RTVcIiAvPlxuICAgICAgICAgIDxjaXJjbGUgY3g9XCI1Ni4xM1wiIGN5PVwiMzEuMDg1NFwiIHI9XCIxLjM2NzUyXCIgZmlsbD1cIiM0RjQ2RTVcIiAvPlxuICAgICAgICAgIDxjaXJjbGUgY3g9XCI2MS42MDAxXCIgY3k9XCIzMS4wODU0XCIgcj1cIjEuMzY3NTJcIiBmaWxsPVwiIzRGNDZFNVwiIC8+XG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjY3LjA3MDJcIiBjeT1cIjMxLjA4NTRcIiByPVwiMS4zNjc1MlwiIGZpbGw9XCIjNEY0NkU1XCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGgyIGNsYXNzPVwiYXgtdGV4dC1jZW50ZXIgYXgtdGV4dC1uZXV0cmFsLTYwMCBheC1mb250LXNlbWlib2xkIGF4LWxlYWRpbmctbG9vc2UgYXgtcGItMlwiPlxuICAgICAgICAgICAgVGhlcmUgaXMgbm8gQ29tbWVudCFcbiAgICAgICAgICA8L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIH1cbiAgPC9heC1jb21tZW50LWNvbnRhaW5lcj5cbiAgPGF4LWZvcm0+XG4gICAgPGF4LWZvcm0tZmllbGQ+XG4gICAgICA8ZGl2PlxuICAgICAgICBAaWYoaXNSZXBseWluZ01vZGUoKSB8fCBpc0VkaXRpbmdNb2RlKCkpe1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWp1c3RpZnktYmV0d2VlbiBheC1yb3VuZGVkLWItbm9uZSBheC1ib3JkZXIgYXgtYm9yZGVyLWItMCBheC1yb3VuZGVkLWxnIGF4LWJnLW9uLXN1cmZhY2UgYXgtcHgtNiBheC1weS0zIGF4LXctZnVsbCBheC1pdGVtcy1jZW50ZXIgYXgtb3ZlcmZsb3ctaGlkZGVuIGF4LXRleHQtc20gYXgtbGVhZGluZy1ub25lXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInNjcm9sbE1haW4oKVwiIGNsYXNzPVwiYXgtZmxleCBheC1qdXN0aWZ5LXN0YXJ0IGF4LWl0ZW1zLWNlbnRlciBheC1jdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImlzUmVwbHlpbmdNb2RlKCkgPyAnZmEtcmVwbHknIDogJ2ZhLXBlbidcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZhLXNvbGlkIGF4LXRleHQtcHJpbWFyeS01MDAgZGFyazpheC10ZXh0LXByaW1hcnktMzAwIGF4LXRleHQtMnhsIGF4LW1lLTRcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0yIGF4LWp1c3RpZnktYmV0d2VlbiBheC1hbGlnbi1taWRkbGUgYXgtbGVhZGluZy00IGF4LW92ZXJmbG93LWhpZGRlblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXgtdGV4dC1wcmltYXJ5LTUwMCBkYXJrOmF4LXRleHQtcHJpbWFyeS0zMDBcIj5cbiAgICAgICAgICAgICAgICB7eyBpc1JlcGx5aW5nTW9kZSgpID8gJ1JlcGx5IHRvICcgOiAnRWRpdCBNZXNzYWdlJyB9fVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtZm9udC1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBpc1JlcGx5aW5nTW9kZSgpXG4gICAgICAgICAgICAgICAgICAgICAgPyBhY3RpdmVSZXBseUNvbW1lbnQoKT8udXNlcj8uZmlyc3ROYW1lICsgJyAnICsgYWN0aXZlUmVwbHlDb21tZW50KCk/LnVzZXI/Lmxhc3ROYW1lXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICBpc1JlcGx5aW5nTW9kZSgpXG4gICAgICAgICAgICAgICAgICAgID8gc2FuaXRpemVIdG1sKGFjdGl2ZVJlcGx5Q29tbWVudCgpPy5jb250ZW50ID8/ICcnKVxuICAgICAgICAgICAgICAgICAgICA6IHNhbml0aXplSHRtbChhY3RpdmVFZGl0Q29tbWVudCgpPy5jb250ZW50ID8/ICcnKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXY+PGkgKGNsaWNrKT1cInJlc2V0UmVwbHlFZGl0U3RhdGUoKVwiIGNsYXNzPVwiZmEtc29saWQgYXgtdGV4dC0yeGwgZmEteG1hcmsgYXgtY3Vyc29yLXBvaW50ZXJcIj48L2k+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxheC13eXNpd3lnLWNvbnRhaW5lciAjdyBbbG9va109XCJ3eXNpd3lnT3B0aW9ucygpLmxvb2tcIiBbKG5nTW9kZWwpXT1cImNvbW1lbnRDb250ZW50XCI+XG4gICAgICAgICAgPGF4LXd5c2l3eWctdmlldyBjbGFzcz1cImF4LW1pbi1oLTI4XCI+PC9heC13eXNpd3lnLXZpZXc+XG4gICAgICAgICAgPGF4LXd5c2l3eWctdG9vbGJhcj5cbiAgICAgICAgICAgIDxheC13eXNpd3lnLWhpc3Rvcnk+PC9heC13eXNpd3lnLWhpc3Rvcnk+XG4gICAgICAgICAgICA8YXgtd3lzaXd5Zy1mb250LXN0eWxlPjwvYXgtd3lzaXd5Zy1mb250LXN0eWxlPlxuICAgICAgICAgICAgPGF4LXd5c2l3eWctY29sb3JzPjwvYXgtd3lzaXd5Zy1jb2xvcnM+XG4gICAgICAgICAgICA8YXgtd3lzaXd5Zy1saXN0PjwvYXgtd3lzaXd5Zy1saXN0PlxuICAgICAgICAgICAgPGF4LXd5c2l3eWctYWxpZ25tZW50PjwvYXgtd3lzaXd5Zy1hbGlnbm1lbnQ+XG4gICAgICAgICAgICA8YXgtc3VmZml4PlxuICAgICAgICAgICAgICA8YXgtZHJvcGRvd24tYnV0dG9uXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImhhc0Nvb2xkb3duKClcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgbW9kZT1cInNwbGl0XCJcbiAgICAgICAgICAgICAgICB0ZXh0PVwiU2VuZFwiXG4gICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwic3VibWl0Q29tbWVudCgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZihpc1N1Ym1pdHRpbmcoKSl7IDxheC1sb2FkaW5nPjwvYXgtbG9hZGluZz4gfVxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIChjbGljayk9XCJzdWJtaXRDb21tZW50KHRydWUpXCIgdGV4dD1cIlNlbmQgUHJpdmF0ZSAuLi5cIiBuYW1lPVwicHJpdmF0ZVwiIGRhdGE9XCJwcml2YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImZhLXJlZ3VsYXIgZmEtdXNlci1zZWNyZXRcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgIDwvYXgtZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgPC9heC13eXNpd3lnLXRvb2xiYXI+XG4gICAgICAgICAgPGF4LXZhbGlkYXRpb24tcnVsZSBydWxlPVwiY2FsbGJhY2tcIiBbb3B0aW9uc109XCJ7IHZhbGlkYXRlOiB2YWxpZGF0ZUNvbnRlbnQgfVwiPjwvYXgtdmFsaWRhdGlvbi1ydWxlPlxuICAgICAgICA8L2F4LXd5c2l3eWctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9heC1mb3JtLWZpZWxkPlxuICA8L2F4LWZvcm0+XG48L2Rpdj5cbiJdfQ==
|