@bizdoc/core 3.0.5 → 3.2.1
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/assets/system/Workday.svg +37 -37
- package/assets/themes/brown.min.css +1 -1
- package/assets/themes/dark.min.css +1 -1
- package/assets/themes/deep-purple-light-blue.min.css +1 -1
- package/assets/themes/deep-purple-teal.min.css +1 -1
- package/assets/themes/default.min.css +44 -1
- package/assets/themes/green.min.css +1 -1
- package/assets/themes/indigo-amber.min.css +1 -1
- package/assets/themes/indigo.min.css +1 -1
- package/esm2022/bizdoc-core.mjs +1 -1
- package/esm2022/lib/admin/admin-dismiss.service.mjs +4 -4
- package/esm2022/lib/admin/admin-menu.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +10 -10
- package/esm2022/lib/admin/architecture/declarations.mjs +3 -2
- package/esm2022/lib/admin/architecture/designer-element.component.mjs +25 -22
- package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +6 -6
- package/esm2022/lib/admin/architecture/designer.base.mjs +11 -14
- package/esm2022/lib/admin/architecture/designer.component.mjs +9 -8
- package/esm2022/lib/admin/architecture/elements/action.component.mjs +4 -5
- package/esm2022/lib/admin/architecture/elements/analysis-view.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/analysis-widget.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/anomaly-rule.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/attribute.component.mjs +5 -6
- package/esm2022/lib/admin/architecture/elements/box-form.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/control.component.mjs +4 -7
- package/esm2022/lib/admin/architecture/elements/cube-index-utility.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/cube-view.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/cube.component.mjs +14 -15
- package/esm2022/lib/admin/architecture/elements/document-state-widget.component.mjs +6 -8
- package/esm2022/lib/admin/architecture/elements/documents-report.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/documents-widget.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/explore-view.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/folder.component.mjs +5 -6
- package/esm2022/lib/admin/architecture/elements/form-invite.dialog.mjs +9 -11
- package/esm2022/lib/admin/architecture/elements/form.component.mjs +13 -14
- package/esm2022/lib/admin/architecture/elements/guide.component.mjs +5 -6
- package/esm2022/lib/admin/architecture/elements/job.component.mjs +5 -6
- package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +6 -6
- package/esm2022/lib/admin/architecture/elements/node.component.mjs +4 -4
- package/esm2022/lib/admin/architecture/elements/parallel-view.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/performance-widget.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/pivot-view.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/policy.component.mjs +4 -4
- package/esm2022/lib/admin/architecture/elements/report.component.mjs +5 -6
- package/esm2022/lib/admin/architecture/elements/return-to-role-action.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/role.component.mjs +5 -6
- package/esm2022/lib/admin/architecture/elements/rule.component.mjs +4 -4
- package/esm2022/lib/admin/architecture/elements/source.component.mjs +4 -4
- package/esm2022/lib/admin/architecture/elements/state.component.mjs +4 -5
- package/esm2022/lib/admin/architecture/elements/sum-view.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/tasks-report.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/type.component.mjs +7 -8
- package/esm2022/lib/admin/architecture/elements/usage-report.component.mjs +6 -6
- package/esm2022/lib/admin/architecture/elements/utility.component.mjs +4 -4
- package/esm2022/lib/admin/architecture/elements/view.component.mjs +4 -4
- package/esm2022/lib/admin/architecture/elements/widget.component.mjs +5 -6
- package/esm2022/lib/admin/architecture/icon-picker.component.mjs +12 -7
- package/esm2022/lib/admin/core/ace.input.mjs +14 -13
- package/esm2022/lib/admin/core/color-picker.input.mjs +5 -5
- package/esm2022/lib/admin/core/localized-string.component.mjs +8 -7
- package/esm2022/lib/admin/core/search.input.mjs +5 -5
- package/esm2022/lib/admin/diff/configuration-diff.component.mjs +8 -7
- package/esm2022/lib/admin/document-trace/document-trace.component.mjs +19 -13
- package/esm2022/lib/admin/document-trace/reassign.dialog.mjs +5 -5
- package/esm2022/lib/admin/document-trace/timeline.mjs +1 -1
- package/esm2022/lib/admin/document-trace/trace-element.component.mjs +6 -6
- package/esm2022/lib/admin/form/designer/box-designer.component.mjs +6 -6
- package/esm2022/lib/admin/form/designer/declarations.mjs +1 -1
- package/esm2022/lib/admin/form/designer/design-control.component.mjs +4 -4
- package/esm2022/lib/admin/form/designer/properties.component.mjs +5 -5
- package/esm2022/lib/admin/form/designer/section.component.mjs +5 -5
- package/esm2022/lib/admin/form/designer/settings.component.mjs +4 -4
- package/esm2022/lib/admin/form/form.resolve.service.mjs +4 -4
- package/esm2022/lib/admin/form/workflow/node-ref.mjs +1 -1
- package/esm2022/lib/admin/form/workflow/node.component.mjs +35 -35
- package/esm2022/lib/admin/form/workflow/role-node.component.mjs +5 -5
- package/esm2022/lib/admin/form/workflow/workflow.component.mjs +10 -12
- package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +9 -9
- package/esm2022/lib/admin/patterns/patterns.component.mjs +5 -5
- package/esm2022/lib/admin/permissions/permissions.component.mjs +5 -5
- package/esm2022/lib/admin/positions/positions-popup.component.mjs +8 -7
- package/esm2022/lib/admin/positions/positions.component.mjs +9 -9
- package/esm2022/lib/admin/profiler/outofoffice.component.mjs +6 -6
- package/esm2022/lib/admin/profiler/profiler.component.mjs +7 -7
- package/esm2022/lib/admin/system.service.mjs +15 -11
- package/esm2022/lib/admin/utility-ref.mjs +7 -5
- package/esm2022/lib/admin/utility-wrapper.component.mjs +4 -4
- package/esm2022/lib/admin/utility.pane.component.mjs +4 -4
- package/esm2022/lib/app.component.mjs +7 -7
- package/esm2022/lib/bizdoc.module.mjs +5 -5
- package/esm2022/lib/browse/browse-items.component.mjs +34 -33
- package/esm2022/lib/browse/browse.mobile.component.mjs +11 -8
- package/esm2022/lib/browse/browse.pane.component.mjs +9 -9
- package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +12 -12
- package/esm2022/lib/browse/filter/filter.component.mjs +27 -39
- package/esm2022/lib/browse/folders-menu.component.mjs +5 -5
- package/esm2022/lib/chat/chat-info.mjs +9 -8
- package/esm2022/lib/chat/chat.mobile.component.mjs +5 -5
- package/esm2022/lib/chat/chat.service.mjs +6 -6
- package/esm2022/lib/chat/contacts.component.mjs +10 -9
- package/esm2022/lib/chat/contacts.pane.component.mjs +4 -4
- package/esm2022/lib/chat/conversation.component.mjs +8 -8
- package/esm2022/lib/chat/conversation.pane.component.mjs +4 -4
- package/esm2022/lib/compose/action/action-picker.component.mjs +7 -10
- package/esm2022/lib/compose/action/action-ref.mjs +1 -1
- package/esm2022/lib/compose/action/action.base.mjs +1 -1
- package/esm2022/lib/compose/action/action.dialog.mjs +5 -5
- package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +7 -7
- package/esm2022/lib/compose/action/assign-action.component.mjs +5 -5
- package/esm2022/lib/compose/action/moveto-action.component.mjs +6 -6
- package/esm2022/lib/compose/action/return-action.component.mjs +5 -5
- package/esm2022/lib/compose/attachments/attachments.component.mjs +5 -5
- package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +5 -5
- package/esm2022/lib/compose/attachments/progress-button.directive.mjs +4 -4
- package/esm2022/lib/compose/box/box.component.mjs +5 -5
- package/esm2022/lib/compose/box/control.component.mjs +4 -4
- package/esm2022/lib/compose/box/row.component.mjs +4 -4
- package/esm2022/lib/compose/can-deactivate-changes.service.mjs +4 -4
- package/esm2022/lib/compose/comments/comment.component.mjs +18 -15
- package/esm2022/lib/compose/comments/comments.component.mjs +7 -7
- package/esm2022/lib/compose/comments/comments.pane.component.mjs +5 -5
- package/esm2022/lib/compose/comments/edit-comment.component.mjs +4 -4
- package/esm2022/lib/compose/comments/edits.component.mjs +5 -5
- package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +6 -6
- package/esm2022/lib/compose/comments/votes.component.mjs +5 -5
- package/esm2022/lib/compose/compose-resolve.service.mjs +4 -4
- package/esm2022/lib/compose/compose.mobile.component.mjs +8 -8
- package/esm2022/lib/compose/compose.pane.component.mjs +11 -11
- package/esm2022/lib/compose/copy/copy.dialog.mjs +5 -5
- package/esm2022/lib/compose/dismiss.service.mjs +4 -4
- package/esm2022/lib/compose/document-resolve.service.mjs +7 -7
- package/esm2022/lib/compose/document-resolver.service.mjs +4 -4
- package/esm2022/lib/compose/document.component.mjs +4 -4
- package/esm2022/lib/compose/document.mobile.component.mjs +4 -4
- package/esm2022/lib/compose/document.pane.component.mjs +4 -4
- package/esm2022/lib/compose/events/events.component.mjs +5 -5
- package/esm2022/lib/compose/form-ref.mjs +1 -1
- package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +5 -5
- package/esm2022/lib/compose/form.component.mjs +59 -23
- package/esm2022/lib/compose/new-menu.component.mjs +8 -7
- package/esm2022/lib/compose/overlay.component.exp.mjs +4 -4
- package/esm2022/lib/compose/privilage.directive.mjs +7 -7
- package/esm2022/lib/compose/recipient-resolver.service.mjs +4 -4
- package/esm2022/lib/compose/state.component.mjs +4 -4
- package/esm2022/lib/compose/tag/tags.component.mjs +5 -5
- package/esm2022/lib/compose/trace/flow.component.mjs +16 -17
- package/esm2022/lib/compose/trace/people.component.mjs +14 -9
- package/esm2022/lib/compose/trace/trace.base.mjs +6 -7
- package/esm2022/lib/compose/trace/trace.component.mjs +5 -5
- package/esm2022/lib/compose/trace/trace.pane.component.mjs +4 -4
- package/esm2022/lib/compose/version-compare/version-compare.component.mjs +5 -4
- package/esm2022/lib/compose/version-compare/version-compare.directive.mjs +14 -14
- package/esm2022/lib/compose/version-compare/version.pane.component.mjs +5 -5
- package/esm2022/lib/core/account.service.mjs +4 -4
- package/esm2022/lib/core/animated-icon/animated-icon.directive.mjs +4 -4
- package/esm2022/lib/core/animations.mjs +1 -1
- package/esm2022/lib/core/authentication.mjs +1 -1
- package/esm2022/lib/core/avatar/avatar.component.mjs +52 -43
- package/esm2022/lib/core/base.mjs +1 -1
- package/esm2022/lib/core/checkbox.mjs +19 -19
- package/esm2022/lib/core/colors.mjs +1 -1
- package/esm2022/lib/core/component-factory-resolver.mjs +5 -5
- package/esm2022/lib/core/configuration.mjs +1 -1
- package/esm2022/lib/core/datasource.service.mjs +4 -4
- package/esm2022/lib/core/decorators.mjs +1 -1
- package/esm2022/lib/core/document-factory.service.mjs +4 -11
- package/esm2022/lib/core/fields/address.designer.mjs +4 -4
- package/esm2022/lib/core/fields/address.field.mjs +31 -31
- package/esm2022/lib/core/fields/autocomplete.field.mjs +65 -65
- package/esm2022/lib/core/fields/axes-picker.designer.mjs +25 -25
- package/esm2022/lib/core/fields/axes-picker.field.mjs +5 -5
- package/esm2022/lib/core/fields/checkbox.designer.mjs +4 -4
- package/esm2022/lib/core/fields/checkbox.field.mjs +5 -5
- package/esm2022/lib/core/fields/checklist.designer.mjs +59 -59
- package/esm2022/lib/core/fields/checklist.field.mjs +5 -5
- package/esm2022/lib/core/fields/date-range.designer.mjs +4 -4
- package/esm2022/lib/core/fields/date-range.field.mjs +5 -5
- package/esm2022/lib/core/fields/date.designer.mjs +4 -4
- package/esm2022/lib/core/fields/date.field.mjs +5 -5
- package/esm2022/lib/core/fields/expression.field.mjs +30 -30
- package/esm2022/lib/core/fields/file.designer.mjs +4 -4
- package/esm2022/lib/core/fields/file.field.mjs +5 -5
- package/esm2022/lib/core/fields/html.designer.mjs +4 -4
- package/esm2022/lib/core/fields/html.field.mjs +5 -5
- package/esm2022/lib/core/fields/input.designer.mjs +4 -4
- package/esm2022/lib/core/fields/input.field.mjs +5 -5
- package/esm2022/lib/core/fields/localized-string.field.mjs +7 -7
- package/esm2022/lib/core/fields/numeric.designer.mjs +4 -4
- package/esm2022/lib/core/fields/numeric.field.mjs +5 -5
- package/esm2022/lib/core/fields/options.base.mjs +8 -8
- package/esm2022/lib/core/fields/options.component.mjs +5 -5
- package/esm2022/lib/core/fields/radio-button.designer.mjs +5 -5
- package/esm2022/lib/core/fields/radio-button.field.mjs +5 -5
- package/esm2022/lib/core/fields/select.designer.mjs +63 -63
- package/esm2022/lib/core/fields/select.field.mjs +5 -5
- package/esm2022/lib/core/fields/signature.designer.mjs +4 -4
- package/esm2022/lib/core/fields/signature.field.mjs +5 -5
- package/esm2022/lib/core/fields/switch.field.mjs +5 -5
- package/esm2022/lib/core/fields/tags.designer.mjs +4 -4
- package/esm2022/lib/core/fields/tags.field.mjs +5 -5
- package/esm2022/lib/core/fields/textarea.designer.mjs +4 -4
- package/esm2022/lib/core/fields/textarea.field.mjs +5 -5
- package/esm2022/lib/core/fields/time.designer.mjs +4 -4
- package/esm2022/lib/core/fields/time.field.mjs +5 -5
- package/esm2022/lib/core/fields/timespan.field.mjs +30 -30
- package/esm2022/lib/core/fields/yesno.designer.mjs +23 -23
- package/esm2022/lib/core/fields/yesno.field.mjs +5 -5
- package/esm2022/lib/core/firebase.service.mjs +1 -1
- package/esm2022/lib/core/functions.mjs +4 -1
- package/esm2022/lib/core/guide/guide.component.mjs +5 -5
- package/esm2022/lib/core/guide/guide.service.mjs +11 -7
- package/esm2022/lib/core/guide/help-tip.component.mjs +22 -22
- package/esm2022/lib/core/http.interceptor.mjs +6 -6
- package/esm2022/lib/core/hub.service.mjs +4 -4
- package/esm2022/lib/core/identity/identity.component.mjs +5 -5
- package/esm2022/lib/core/info/attachment-info.service.mjs +4 -4
- package/esm2022/lib/core/info/document-info.service.mjs +4 -4
- package/esm2022/lib/core/info/location-info.component.mjs +4 -4
- package/esm2022/lib/core/info/map-info.mjs +4 -4
- package/esm2022/lib/core/inputs/address.input.mjs +21 -21
- package/esm2022/lib/core/inputs/auto-complete.input.mjs +38 -37
- package/esm2022/lib/core/inputs/combination-picker-body.mjs +10 -12
- package/esm2022/lib/core/inputs/combination-picker.mjs +4 -5
- package/esm2022/lib/core/inputs/combination-pool.mjs +7 -6
- package/esm2022/lib/core/inputs/file.input.mjs +30 -24
- package/esm2022/lib/core/inputs/select.input.mjs +37 -37
- package/esm2022/lib/core/inputs/signature.input.mjs +4 -4
- package/esm2022/lib/core/inputs/time-picker.mjs +8 -8
- package/esm2022/lib/core/inputs/timespan.input.mjs +7 -7
- package/esm2022/lib/core/layout.component.mjs +11 -5
- package/esm2022/lib/core/lottie-animation.exp.mjs +49 -0
- package/esm2022/lib/core/mailbox.service.mjs +20 -14
- package/esm2022/lib/core/models.mjs +2 -1
- package/esm2022/lib/core/none.component.mjs +15 -15
- package/esm2022/lib/core/pipes/action.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/calendar.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/date-format.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/daterange.pipe.mjs +7 -7
- package/esm2022/lib/core/pipes/difference.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/duration-format.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/duration.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/filter.pipe.mjs +25 -0
- package/esm2022/lib/core/pipes/form.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/join.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/localized-string.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/role.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/sanitize-html.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/sort.pipe.mjs +8 -30
- package/esm2022/lib/core/pipes/state.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/time-ago.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/to-now.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/translate.pipe.mjs +10 -10
- package/esm2022/lib/core/pipes/type-value.pipe.mjs +4 -4
- package/esm2022/lib/core/pipes/user-name.pipe.mjs +4 -4
- package/esm2022/lib/core/popup/popup-ref.mjs +1 -1
- package/esm2022/lib/core/popup/popup.component.mjs +4 -4
- package/esm2022/lib/core/popup/popup.service.mjs +7 -5
- package/esm2022/lib/core/popup/tooltip.directive.mjs +10 -11
- package/esm2022/lib/core/prompt/ask/ask.dialog.mjs +4 -4
- package/esm2022/lib/core/prompt/mask/mask.component.mjs +4 -4
- package/esm2022/lib/core/prompt.service.mjs +6 -6
- package/esm2022/lib/core/router.mjs +9 -9
- package/esm2022/lib/core/save-changes.dialog.mjs +4 -4
- package/esm2022/lib/core/session.service.mjs +18 -9
- package/esm2022/lib/core/slots/pane-ref.mjs +2 -2
- package/esm2022/lib/core/slots/router.directive.mjs +4 -4
- package/esm2022/lib/core/slots/router.service.mjs +6 -5
- package/esm2022/lib/core/slots/slots.component.mjs +26 -23
- package/esm2022/lib/core/sticky-toolbar.exp.mjs +9 -6
- package/esm2022/lib/core/tagging/documents.component.mjs +5 -5
- package/esm2022/lib/core/tagging/edit-input.component.mjs +17 -14
- package/esm2022/lib/core/tagging/emoji.component.mjs +4 -4
- package/esm2022/lib/core/tagging/tagging-item.directive.mjs +4 -4
- package/esm2022/lib/core/tagging/tagging.component-base.mjs +4 -4
- package/esm2022/lib/core/tagging/tagging.directive.mjs +5 -5
- package/esm2022/lib/core/tagging/tagging.pipe.mjs +4 -4
- package/esm2022/lib/core/tagging/users.component.mjs +5 -5
- package/esm2022/lib/core/translate.service.mjs +5 -4
- package/esm2022/lib/core/translations.mjs +8 -6
- package/esm2022/lib/core/virtual-tabs.component.exp.mjs +7 -7
- package/esm2022/lib/core/window-title.service.mjs +14 -6
- package/esm2022/lib/cube/accum/accum.component.mjs +4 -4
- package/esm2022/lib/cube/chart/chart.component.mjs +8 -7
- package/esm2022/lib/cube/cube-info.service.mjs +13 -10
- package/esm2022/lib/cube/cube-menu.component.mjs +5 -5
- package/esm2022/lib/cube/cube-view.component.mjs +5 -5
- package/esm2022/lib/cube/cube.service.mjs +21 -19
- package/esm2022/lib/cube/declarations.mjs +1 -1
- package/esm2022/lib/cube/explore/document-item.component.mjs +4 -4
- package/esm2022/lib/cube/explore/explore-item.component.mjs +4 -4
- package/esm2022/lib/cube/explore/explore-items.component.mjs +8 -8
- package/esm2022/lib/cube/explore/explore.pane.component.mjs +5 -5
- package/esm2022/lib/cube/explore/item-resolver.service.mjs +7 -7
- package/esm2022/lib/cube/explore/item.pane.component.mjs +5 -5
- package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +5 -5
- package/esm2022/lib/cube/filter/filter.component.mjs +14 -13
- package/esm2022/lib/cube/grid/grid.component.mjs +9 -8
- package/esm2022/lib/cube/matrix/matrix.base.mjs +20 -18
- package/esm2022/lib/cube/matrix/matrix.mobile.component.mjs +5 -5
- package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +6 -6
- package/esm2022/lib/cube/matrix/popup.component.mjs +5 -5
- package/esm2022/lib/cube/matrix/table.component.mjs +10 -9
- package/esm2022/lib/cube/parallel/item.mjs +1 -2
- package/esm2022/lib/cube/parallel/parallel.component.mjs +5 -5
- package/esm2022/lib/cube/pivot/pivot.component.mjs +16 -7
- package/esm2022/lib/cube/spreadsheet/spreadsheet.component.mjs +6 -6
- package/esm2022/lib/cube/spreadsheet/spreadsheet.container.exp.mjs +4 -4
- package/esm2022/lib/cube/sum/sum.component.mjs +20 -19
- package/esm2022/lib/cube/view-base.mjs +5 -5
- package/esm2022/lib/cube/view.mobile.component.mjs +6 -6
- package/esm2022/lib/cube/view.pane.component.mjs +5 -5
- package/esm2022/lib/dashboard/actions/actions.widget.mjs +7 -6
- package/esm2022/lib/dashboard/cube/accum-cube.widget.mjs +4 -8
- package/esm2022/lib/dashboard/cube/compare.widget.mjs +5 -7
- package/esm2022/lib/dashboard/cube/cube-analysis.base.mjs +8 -6
- package/esm2022/lib/dashboard/cube/cube-analysis.widget.mjs +4 -4
- package/esm2022/lib/dashboard/cube/cube-chart.widget.mjs +5 -4
- package/esm2022/lib/dashboard/cube/document-state.widget.mjs +6 -5
- package/esm2022/lib/dashboard/cube/documents.widget.mjs +4 -4
- package/esm2022/lib/dashboard/cube/filter/filter.component.mjs +4 -4
- package/esm2022/lib/dashboard/dashboard.component.mjs +5 -5
- package/esm2022/lib/dashboard/dashboard.pane.component.mjs +4 -4
- package/esm2022/lib/dashboard/recents/recents.widget.mjs +13 -16
- package/esm2022/lib/dashboard/score/activity.widget.mjs +7 -6
- package/esm2022/lib/dashboard/score/compare-groups.widget.mjs +12 -5
- package/esm2022/lib/dashboard/score/peers-performance.widget.mjs +9 -8
- package/esm2022/lib/dashboard/score/pending-results.widget.mjs +5 -5
- package/esm2022/lib/dashboard/score/personal-score.widget.mjs +19 -18
- package/esm2022/lib/dashboard/widget-item.component.mjs +4 -4
- package/esm2022/lib/dashboard/widget-ref.mjs +1 -1
- package/esm2022/lib/designer.module.mjs +5 -5
- package/esm2022/lib/desktop.module.mjs +8 -12
- package/esm2022/lib/home/about/about.dialog.mjs +6 -6
- package/esm2022/lib/home/home-base.component.mjs +18 -10
- package/esm2022/lib/home/home.desktop.component.mjs +12 -22
- package/esm2022/lib/home/home.mobile.component.mjs +29 -32
- package/esm2022/lib/home/notifications/notifications.component.mjs +22 -24
- package/esm2022/lib/home/outofoffice/outofoffice.component.mjs +10 -10
- package/esm2022/lib/home/sign/sign.component.mjs +17 -21
- package/esm2022/lib/impersonate/impersonate.component.mjs +36 -34
- package/esm2022/lib/mobile.module.mjs +8 -11
- package/esm2022/lib/modules/chart.module.mjs +13 -11
- package/esm2022/lib/modules/circular-gauge.module.mjs +9 -7
- package/esm2022/lib/modules/date.adapter.mjs +1 -1
- package/esm2022/lib/modules/datepicker.intl.mjs +4 -4
- package/esm2022/lib/modules/dayjs.module.mjs +5 -5
- package/esm2022/lib/modules/diagram.module.mjs +9 -7
- package/esm2022/lib/modules/gantt.module.mjs +11 -9
- package/esm2022/lib/modules/grid.module.mjs +9 -7
- package/esm2022/lib/modules/linear-gauge.module.mjs +5 -5
- package/esm2022/lib/modules/material.module.mjs +5 -5
- package/esm2022/lib/modules/paginator.intl.mjs +4 -4
- package/esm2022/lib/modules/pivot.module.mjs +9 -7
- package/esm2022/lib/modules/schedule.module.mjs +9 -7
- package/esm2022/lib/modules/spreadsheet.module.mjs +5 -5
- package/esm2022/lib/modules/stepper.intl.mjs +4 -4
- package/esm2022/lib/modules/texteditor.module.mjs +7 -6
- package/esm2022/lib/notifications/filter.component.mjs +4 -4
- package/esm2022/lib/notifications/notifications-table.component.mjs +7 -8
- package/esm2022/lib/notifications/notifications.component-base.mjs +1 -1
- package/esm2022/lib/notifications/notifications.mobile.component.mjs +4 -4
- package/esm2022/lib/notifications/notifications.pane.component.mjs +4 -4
- package/esm2022/lib/notifications/notifications.service.mjs +13 -6
- package/esm2022/lib/notifications/types/commented.notification.mjs +17 -17
- package/esm2022/lib/notifications/types/cube-anomaly.notification.mjs +4 -4
- package/esm2022/lib/notifications/types/escalated.notification.mjs +4 -4
- package/esm2022/lib/notifications/types/invite.notification.mjs +4 -4
- package/esm2022/lib/notifications/types/liked.notification.mjs +17 -17
- package/esm2022/lib/notifications/types/long-running-task.notification.mjs +4 -4
- package/esm2022/lib/notifications/types/notification-base.mjs +4 -4
- package/esm2022/lib/notifications/types/nudge.notification.mjs +4 -4
- package/esm2022/lib/notifications/types/state-changed.notification.mjs +4 -4
- package/esm2022/lib/notifications/types/tagged.notification.mjs +7 -7
- package/esm2022/lib/notifications/types/text.notification.mjs +4 -4
- package/esm2022/lib/notifications/types/upcoming-event.notification.mjs +4 -4
- package/esm2022/lib/options/options.component.mjs +91 -49
- package/esm2022/lib/options/options.desktop.component.mjs +26 -0
- package/esm2022/lib/options/options.mobile.component.mjs +23 -0
- package/esm2022/lib/reports/arguments-component.mjs +4 -4
- package/esm2022/lib/reports/cube/documents.component.mjs +4 -4
- package/esm2022/lib/reports/cube/grid-documents.component.mjs +4 -4
- package/esm2022/lib/reports/cube/performance-hilo.component.mjs +5 -5
- package/esm2022/lib/reports/cube/performance-wind.component.mjs +4 -4
- package/esm2022/lib/reports/cube/table-documents.component.mjs +7 -6
- package/esm2022/lib/reports/cube/usage-args.component.mjs +6 -5
- package/esm2022/lib/reports/cube/usage-base.mjs +8 -8
- package/esm2022/lib/reports/cube/usage-chart.component.mjs +5 -5
- package/esm2022/lib/reports/cube/usage-pivot.component.mjs +5 -5
- package/esm2022/lib/reports/cube/usage.component.mjs +4 -4
- package/esm2022/lib/reports/report-ref.mjs +1 -1
- package/esm2022/lib/reports/report-viewer.component.mjs +5 -5
- package/esm2022/lib/reports/report.mobile.component.mjs +5 -5
- package/esm2022/lib/reports/report.pane.component.mjs +5 -5
- package/esm2022/lib/reports/reports-menu.component.mjs +5 -5
- package/esm2022/lib/reports/substitution/substitution.component.mjs +5 -5
- package/esm2022/lib/reports/table/table-view.component.mjs +5 -5
- package/esm2022/lib/reports/tasks/tasks.component.mjs +4 -4
- package/esm2022/lib/routes.desktop.mjs +24 -5
- package/esm2022/lib/routes.mobile.mjs +12 -2
- package/esm2022/lib/scheduler/schedule.component.mjs +5 -5
- package/esm2022/lib/scheduler/scheduler.mobile.component.mjs +4 -4
- package/esm2022/lib/scheduler/scheduler.pane.component.mjs +4 -4
- package/esm2022/lib/search/cube.component.mjs +8 -9
- package/esm2022/lib/search/declarations.mjs +1 -1
- package/esm2022/lib/search/document.component.mjs +4 -4
- package/esm2022/lib/search/guide.component.mjs +4 -4
- package/esm2022/lib/search/path.component.mjs +15 -15
- package/esm2022/lib/search/search.service.mjs +5 -5
- package/esm2022/lib/shared.module.mjs +17 -17
- package/esm2022/lib/system.module.mjs +5 -5
- package/esm2022/lib/views/cube/chart.component.mjs +5 -5
- package/esm2022/lib/views/cube/cube-base.mjs +4 -4
- package/esm2022/lib/views/cube/explore.component.mjs +6 -6
- package/esm2022/lib/views/cube/matrix.component.mjs +7 -7
- package/esm2022/lib/views/cube/parallel.component.mjs +5 -5
- package/esm2022/lib/views/cube/pivot.component.mjs +5 -5
- package/esm2022/lib/views/cube/sum.component.mjs +5 -5
- package/esm2022/lib/views/cube/view.component.mjs +7 -7
- package/esm2022/lib/views/document-view-ref.mjs +1 -1
- package/esm2022/lib/views/timeline/timeline.component.mjs +7 -8
- package/esm2022/lib/views/view-item.component.mjs +4 -4
- package/esm2022/lib/views/views.component.mjs +5 -5
- package/esm2022/lib/views/views.mobile.component.mjs +6 -6
- package/esm2022/lib/views/views.pane.component.mjs +8 -8
- package/esm2022/public-api.mjs +4 -3
- package/fesm2022/bizdoc-core.mjs +3819 -3701
- package/fesm2022/bizdoc-core.mjs.map +1 -1
- package/lib/admin/architecture/cube-axes-filter.component.d.ts +4 -1
- package/lib/admin/architecture/declarations.d.ts +14 -9
- package/lib/admin/architecture/designer-element.component.d.ts +1 -0
- package/lib/admin/architecture/designer-privileges.component.d.ts +4 -2
- package/lib/admin/architecture/designer.base.d.ts +1 -4
- package/lib/admin/architecture/designer.component.d.ts +3 -3
- package/lib/admin/architecture/elements/action.component.d.ts +13 -13
- package/lib/admin/architecture/elements/analysis-view.component.d.ts +8 -8
- package/lib/admin/architecture/elements/analysis-widget.component.d.ts +7 -7
- package/lib/admin/architecture/elements/anomaly-rule.component.d.ts +3 -3
- package/lib/admin/architecture/elements/attribute.component.d.ts +1 -1
- package/lib/admin/architecture/elements/box-form.component.d.ts +5 -5
- package/lib/admin/architecture/elements/configuration-datasource.component.d.ts +1 -1
- package/lib/admin/architecture/elements/control.component.d.ts +1 -2
- package/lib/admin/architecture/elements/cube-index-utility.component.d.ts +3 -4
- package/lib/admin/architecture/elements/cube-view.component.d.ts +4 -4
- package/lib/admin/architecture/elements/cube.component.d.ts +9 -10
- package/lib/admin/architecture/elements/document-state-widget.component.d.ts +3 -6
- package/lib/admin/architecture/elements/documents-report.component.d.ts +4 -5
- package/lib/admin/architecture/elements/documents-widget.component.d.ts +5 -5
- package/lib/admin/architecture/elements/explore-view.component.d.ts +4 -4
- package/lib/admin/architecture/elements/folder.component.d.ts +2 -2
- package/lib/admin/architecture/elements/form-invite.dialog.d.ts +7 -7
- package/lib/admin/architecture/elements/form.component.d.ts +10 -9
- package/lib/admin/architecture/elements/guide.component.d.ts +1 -1
- package/lib/admin/architecture/elements/matrix-view.component.d.ts +16 -16
- package/lib/admin/architecture/elements/parallel-view.component.d.ts +9 -10
- package/lib/admin/architecture/elements/performance-report.component.d.ts +2 -3
- package/lib/admin/architecture/elements/performance-widget.component.d.ts +4 -5
- package/lib/admin/architecture/elements/pivot-view.component.d.ts +9 -10
- package/lib/admin/architecture/elements/report.component.d.ts +1 -1
- package/lib/admin/architecture/elements/return-to-role-action.component.d.ts +1 -1
- package/lib/admin/architecture/elements/role.component.d.ts +4 -4
- package/lib/admin/architecture/elements/source.component.d.ts +2 -3
- package/lib/admin/architecture/elements/state.component.d.ts +4 -4
- package/lib/admin/architecture/elements/sum-view.component.d.ts +7 -8
- package/lib/admin/architecture/elements/tasks-report.component.d.ts +4 -4
- package/lib/admin/architecture/elements/type.component.d.ts +8 -4
- package/lib/admin/architecture/elements/usage-report.component.d.ts +7 -7
- package/lib/admin/architecture/elements/widget.component.d.ts +1 -1
- package/lib/admin/architecture/icon-picker.component.d.ts +5 -3
- package/lib/admin/core/ace.input.d.ts +2 -5
- package/lib/admin/core/localized-string.component.d.ts +3 -2
- package/lib/admin/document-trace/document-trace.component.d.ts +6 -5
- package/lib/admin/document-trace/reassign.dialog.d.ts +2 -2
- package/lib/admin/document-trace/timeline.d.ts +2 -2
- package/lib/admin/form/designer/box-designer.component.d.ts +11 -11
- package/lib/admin/form/designer/section.component.d.ts +5 -5
- package/lib/admin/form/workflow/node-ref.d.ts +1 -1
- package/lib/admin/form/workflow/node.component.d.ts +3 -2
- package/lib/admin/form/workflow/role-node.component.d.ts +11 -11
- package/lib/admin/form/workflow/workflow.component.d.ts +5 -4
- package/lib/admin/indices/manage-cube-index.component.d.ts +3 -3
- package/lib/admin/patterns/patterns.component.d.ts +2 -2
- package/lib/admin/positions/positions-popup.component.d.ts +1 -1
- package/lib/admin/positions/positions.component.d.ts +6 -6
- package/lib/admin/profiler/outofoffice.component.d.ts +15 -15
- package/lib/admin/profiler/profiler.component.d.ts +3 -3
- package/lib/admin/system.service.d.ts +11 -12
- package/lib/admin/utility-ref.d.ts +2 -2
- package/lib/browse/browse-items.component.d.ts +6 -7
- package/lib/browse/browse.mobile.component.d.ts +2 -2
- package/lib/browse/browse.pane.component.d.ts +2 -2
- package/lib/browse/filter/filter.component.d.ts +10 -11
- package/lib/chat/chat-info.d.ts +1 -1
- package/lib/chat/chat.service.d.ts +1 -1
- package/lib/chat/conversation.component.d.ts +2 -2
- package/lib/compose/action/action.base.d.ts +2 -1
- package/lib/compose/action/assign-action.component.d.ts +5 -5
- package/lib/compose/action/moveto-action.component.d.ts +3 -3
- package/lib/compose/action/return-action.component.d.ts +4 -4
- package/lib/compose/box/box.component.d.ts +1 -1
- package/lib/compose/comments/comments.component.d.ts +4 -4
- package/lib/compose/compose.mobile.component.d.ts +5 -5
- package/lib/compose/compose.pane.component.d.ts +3 -3
- package/lib/compose/copy/copy.dialog.d.ts +1 -1
- package/lib/compose/form-ref.d.ts +5 -5
- package/lib/compose/form.component.d.ts +36 -2
- package/lib/compose/new-menu.component.d.ts +2 -1
- package/lib/compose/privilage.directive.d.ts +1 -1
- package/lib/compose/tag/tags.component.d.ts +1 -1
- package/lib/compose/trace/flow.component.d.ts +1 -0
- package/lib/compose/trace/people.component.d.ts +5 -2
- package/lib/compose/trace/trace.base.d.ts +1 -1
- package/lib/compose/version-compare/version-compare.directive.d.ts +1 -1
- package/lib/core/account.service.d.ts +1 -1
- package/lib/core/authentication.d.ts +1 -1
- package/lib/core/avatar/avatar.component.d.ts +14 -11
- package/lib/core/base.d.ts +9 -9
- package/lib/core/datasource.service.d.ts +1 -1
- package/lib/core/document-factory.service.d.ts +0 -1
- package/lib/core/fields/address.designer.d.ts +3 -3
- package/lib/core/fields/address.field.d.ts +1 -1
- package/lib/core/fields/autocomplete.field.d.ts +5 -5
- package/lib/core/fields/axes-picker.designer.d.ts +3 -3
- package/lib/core/fields/axes-picker.field.d.ts +1 -1
- package/lib/core/fields/checkbox.designer.d.ts +2 -2
- package/lib/core/fields/checkbox.field.d.ts +1 -1
- package/lib/core/fields/checklist.designer.d.ts +4 -4
- package/lib/core/fields/checklist.field.d.ts +1 -2
- package/lib/core/fields/date-range.designer.d.ts +6 -6
- package/lib/core/fields/date-range.field.d.ts +2 -2
- package/lib/core/fields/date.designer.d.ts +5 -5
- package/lib/core/fields/file.designer.d.ts +3 -3
- package/lib/core/fields/html.designer.d.ts +4 -4
- package/lib/core/fields/input.designer.d.ts +8 -9
- package/lib/core/fields/numeric.designer.d.ts +7 -7
- package/lib/core/fields/options.base.d.ts +1 -1
- package/lib/core/fields/radio-button.designer.d.ts +3 -3
- package/lib/core/fields/radio-button.field.d.ts +2 -3
- package/lib/core/fields/select.designer.d.ts +5 -5
- package/lib/core/fields/select.field.d.ts +1 -2
- package/lib/core/fields/signature.designer.d.ts +2 -2
- package/lib/core/fields/switch.field.d.ts +1 -1
- package/lib/core/fields/textarea.designer.d.ts +6 -6
- package/lib/core/fields/time.designer.d.ts +5 -5
- package/lib/core/fields/yesno.designer.d.ts +3 -3
- package/lib/core/fields/yesno.field.d.ts +1 -1
- package/lib/core/firebase.service.d.ts +1 -1
- package/lib/core/functions.d.ts +7 -4
- package/lib/core/guide/help-tip.component.d.ts +1 -1
- package/lib/core/http.interceptor.d.ts +1 -1
- package/lib/core/hub.service.d.ts +2 -2
- package/lib/core/inputs/address.input.d.ts +5 -4
- package/lib/core/inputs/auto-complete.input.d.ts +4 -4
- package/lib/core/inputs/combination-picker-body.d.ts +2 -2
- package/lib/core/inputs/file.input.d.ts +4 -4
- package/lib/core/inputs/time-picker.d.ts +2 -2
- package/lib/core/inputs/timespan.input.d.ts +7 -7
- package/lib/core/{lottie-animation.d.ts → lottie-animation.exp.d.ts} +0 -1
- package/lib/core/mailbox.service.d.ts +2 -3
- package/lib/core/models.d.ts +6 -5
- package/lib/core/pipes/filter.pipe.d.ts +7 -0
- package/lib/core/pipes/localized-string.pipe.d.ts +1 -1
- package/lib/core/pipes/sort.pipe.d.ts +1 -6
- package/lib/core/pipes/time-ago.pipe.d.ts +1 -1
- package/lib/core/pipes/user-name.pipe.d.ts +1 -1
- package/lib/core/popup/popup-ref.d.ts +4 -4
- package/lib/core/popup/tooltip.directive.d.ts +2 -3
- package/lib/core/router.d.ts +3 -3
- package/lib/core/session.service.d.ts +10 -7
- package/lib/core/slots/pane-ref.d.ts +18 -18
- package/lib/core/slots/router.directive.d.ts +2 -2
- package/lib/core/slots/router.service.d.ts +3 -3
- package/lib/core/slots/slots.component.d.ts +3 -3
- package/lib/core/sticky-toolbar.exp.d.ts +1 -0
- package/lib/core/tagging/edit-input.component.d.ts +5 -5
- package/lib/core/tagging/emoji.component.d.ts +1 -1
- package/lib/core/tagging/tagging.component-base.d.ts +1 -1
- package/lib/core/tagging/tagging.directive.d.ts +1 -1
- package/lib/core/tagging/tagging.pipe.d.ts +1 -1
- package/lib/core/translate.service.d.ts +2 -2
- package/lib/core/translations.d.ts +2 -1049
- package/lib/core/virtual-tabs.component.exp.d.ts +2 -2
- package/lib/core/window-title.service.d.ts +2 -1
- package/lib/cube/accum/accum.component.d.ts +1 -1
- package/lib/cube/chart/chart.component.d.ts +5 -5
- package/lib/cube/cube-info.service.d.ts +1 -1
- package/lib/cube/cube.service.d.ts +2 -2
- package/lib/cube/declarations.d.ts +3 -3
- package/lib/cube/explore/explore-items.component.d.ts +2 -2
- package/lib/cube/filter/filter.component.d.ts +1 -1
- package/lib/cube/grid/grid.component.d.ts +4 -4
- package/lib/cube/matrix/matrix.base.d.ts +9 -8
- package/lib/cube/matrix/matrix.pane.component.d.ts +2 -1
- package/lib/cube/matrix/table.component.d.ts +3 -3
- package/lib/cube/pivot/pivot.component.d.ts +6 -7
- package/lib/cube/spreadsheet/spreadsheet.component.d.ts +3 -3
- package/lib/cube/sum/sum.component.d.ts +5 -5
- package/lib/cube/view-base.d.ts +3 -2
- package/lib/cube/view.mobile.component.d.ts +1 -1
- package/lib/dashboard/cube/accum-cube.widget.d.ts +0 -1
- package/lib/dashboard/cube/cube-analysis.base.d.ts +9 -6
- package/lib/dashboard/cube/filter/filter.component.d.ts +3 -2
- package/lib/dashboard/recents/recents.widget.d.ts +5 -6
- package/lib/dashboard/score/activity.widget.d.ts +1 -0
- package/lib/dashboard/score/peers-performance.widget.d.ts +1 -0
- package/lib/dashboard/score/personal-score.widget.d.ts +2 -4
- package/lib/desktop.module.d.ts +5 -6
- package/lib/home/about/about.dialog.d.ts +2 -2
- package/lib/home/home-base.component.d.ts +2 -0
- package/lib/home/home.desktop.component.d.ts +6 -9
- package/lib/home/home.mobile.component.d.ts +4 -6
- package/lib/home/notifications/notifications.component.d.ts +3 -5
- package/lib/home/outofoffice/outofoffice.component.d.ts +3 -3
- package/lib/home/sign/sign.component.d.ts +4 -2
- package/lib/impersonate/impersonate.component.d.ts +11 -12
- package/lib/mobile.module.d.ts +3 -3
- package/lib/modules/chart.module.d.ts +1 -0
- package/lib/modules/circular-gauge.module.d.ts +1 -0
- package/lib/modules/diagram.module.d.ts +1 -0
- package/lib/modules/gantt.module.d.ts +1 -0
- package/lib/modules/grid.module.d.ts +1 -0
- package/lib/modules/pivot.module.d.ts +1 -0
- package/lib/modules/schedule.module.d.ts +1 -0
- package/lib/notifications/filter.component.d.ts +2 -2
- package/lib/options/options.component.d.ts +54 -31
- package/lib/options/options.desktop.component.d.ts +10 -0
- package/lib/options/options.mobile.component.d.ts +9 -0
- package/lib/reports/arguments-component.d.ts +2 -2
- package/lib/reports/cube/performance-hilo.component.d.ts +1 -1
- package/lib/reports/cube/performance-wind.component.d.ts +2 -2
- package/lib/reports/cube/usage-args.component.d.ts +3 -1
- package/lib/reports/cube/usage-base.d.ts +9 -7
- package/lib/reports/cube/usage-pivot.component.d.ts +1 -1
- package/lib/reports/report.mobile.component.d.ts +3 -1
- package/lib/search/cube.component.d.ts +1 -1
- package/lib/search/declarations.d.ts +2 -2
- package/lib/shared.module.d.ts +154 -153
- package/lib/views/cube/chart.component.d.ts +2 -2
- package/lib/views/cube/cube-base.d.ts +6 -6
- package/lib/views/cube/sum.component.d.ts +2 -2
- package/lib/views/timeline/timeline.component.d.ts +3 -2
- package/lib/views/views.component.d.ts +1 -1
- package/package.json +7 -7
- package/public-api.d.ts +3 -2
- package/assets/themes/readme.md +0 -0
- package/esm2022/lib/core/lottie-animation.mjs +0 -48
- package/esm2022/lib/home/options/options.component.mjs +0 -97
- package/esm2022/lib/options/options.service.mjs +0 -42
- package/lib/home/options/options.component.d.ts +0 -45
- package/lib/options/options.service.d.ts +0 -14
@@ -1,48 +1,64 @@
|
|
1
|
-
import { Component, ViewChild, InjectionToken, Inject,
|
2
|
-
import { Subject
|
3
|
-
import { debounceTime, takeUntil, filter, map, switchMap, tap } from 'rxjs/operators';
|
1
|
+
import { Component, ViewChild, InjectionToken, Inject, Input, HostListener } from '@angular/core';
|
2
|
+
import { Subject } from 'rxjs';
|
3
|
+
import { debounceTime, takeUntil, filter, map, switchMap, tap, startWith } from 'rxjs/operators';
|
4
4
|
import { MatChipInput } from '@angular/material/chips';
|
5
5
|
import { COMMA, ENTER, SEMICOLON } from '@angular/cdk/keycodes';
|
6
6
|
import { MatInput } from '@angular/material/input';
|
7
7
|
import { BIZDOC_CONFIG } from '../core/configuration';
|
8
8
|
import { isMobile, isString } from '../core/functions';
|
9
|
+
import { AvailableMode } from '../core/models';
|
9
10
|
import { verticalSwapAnimation } from '../core/animations';
|
11
|
+
import { HubConnectionState } from '@microsoft/signalr';
|
12
|
+
import { AboutDialog } from '../home/about/about.dialog';
|
10
13
|
import * as i0 from "@angular/core";
|
11
|
-
import * as i1 from "
|
12
|
-
import * as i2 from "
|
13
|
-
import * as i3 from "../core/
|
14
|
-
import * as i4 from "
|
15
|
-
import * as i5 from "
|
16
|
-
import * as i6 from "
|
17
|
-
import * as i7 from "
|
18
|
-
import * as i8 from "@angular/
|
19
|
-
import * as i9 from "@angular/material/
|
20
|
-
import * as i10 from "@angular/material/
|
21
|
-
import * as i11 from "@angular/material/
|
22
|
-
import * as i12 from "@angular/material/
|
23
|
-
import * as i13 from "@angular/material/
|
24
|
-
import * as i14 from "@angular/material/
|
25
|
-
import * as i15 from "@angular/material/
|
26
|
-
import * as i16 from "@angular/material/
|
27
|
-
import * as i17 from "
|
28
|
-
import * as i18 from "
|
29
|
-
import * as i19 from "
|
14
|
+
import * as i1 from "../core/prompt.service";
|
15
|
+
import * as i2 from "../core/guide/guide.service";
|
16
|
+
import * as i3 from "../core/hub.service";
|
17
|
+
import * as i4 from "@angular/material/dialog";
|
18
|
+
import * as i5 from "@angular/forms";
|
19
|
+
import * as i6 from "../core/account.service";
|
20
|
+
import * as i7 from "../core/session.service";
|
21
|
+
import * as i8 from "@angular/common";
|
22
|
+
import * as i9 from "@angular/material/chips";
|
23
|
+
import * as i10 from "@angular/material/datepicker";
|
24
|
+
import * as i11 from "@angular/material/badge";
|
25
|
+
import * as i12 from "@angular/material/list";
|
26
|
+
import * as i13 from "@angular/material/divider";
|
27
|
+
import * as i14 from "@angular/material/autocomplete";
|
28
|
+
import * as i15 from "@angular/material/core";
|
29
|
+
import * as i16 from "@angular/material/form-field";
|
30
|
+
import * as i17 from "@angular/material/slide-toggle";
|
31
|
+
import * as i18 from "@angular/material/button";
|
32
|
+
import * as i19 from "@angular/material/input";
|
33
|
+
import * as i20 from "@angular/material/icon";
|
34
|
+
import * as i21 from "@angular/material/menu";
|
35
|
+
import * as i22 from "../core/popup/tooltip.directive";
|
36
|
+
import * as i23 from "../core/pipes/translate.pipe";
|
37
|
+
import * as i24 from "../core/pipes/user-name.pipe";
|
30
38
|
export const OPTION_PANEL = new InjectionToken('options');
|
31
39
|
/** options component*/
|
32
40
|
export class OptionsComponent {
|
33
|
-
constructor(
|
41
|
+
constructor(_ps, _guide, _hub, _dialog, _fb, _accounts, _sb, _session, config) {
|
42
|
+
this._ps = _ps;
|
43
|
+
this._guide = _guide;
|
44
|
+
this._hub = _hub;
|
45
|
+
this._dialog = _dialog;
|
34
46
|
this._fb = _fb;
|
35
47
|
this._accounts = _accounts;
|
36
48
|
this._sb = _sb;
|
37
49
|
this._session = _session;
|
50
|
+
this.languages = this._session.languages;
|
51
|
+
this.themes = this._session.Themes;
|
52
|
+
this.modes = AvailableMode;
|
38
53
|
this.sectionIndex = 0;
|
39
54
|
this.saveing = false;
|
40
55
|
this._requiredValidator = (control) => {
|
41
56
|
const parent = control.parent;
|
42
|
-
if (parent && parent.controls
|
57
|
+
if (parent && parent.controls['active'].value && !control.value)
|
43
58
|
return {
|
44
59
|
required: true
|
45
60
|
};
|
61
|
+
return null;
|
46
62
|
};
|
47
63
|
this.grantUserIds = this._fb.control([]);
|
48
64
|
this.oooId = this._fb.control(null);
|
@@ -75,7 +91,7 @@ export class OptionsComponent {
|
|
75
91
|
}),
|
76
92
|
grantAccess: this._fb.group({
|
77
93
|
active: this._fb.control(false),
|
78
|
-
users: this._fb.control(
|
94
|
+
users: this._fb.control([], this._requiredValidator)
|
79
95
|
})
|
80
96
|
});
|
81
97
|
this.today = new Date();
|
@@ -86,17 +102,47 @@ export class OptionsComponent {
|
|
86
102
|
this.display = (item) => {
|
87
103
|
return item ? item.name : null;
|
88
104
|
};
|
89
|
-
this.
|
90
|
-
this.
|
105
|
+
this.guides = this._guide.guides.filter(g => g.mode !== 'Private');
|
106
|
+
this.languages = this._session.languages;
|
107
|
+
this.currentLanguage = this._session.language;
|
108
|
+
this.available = this._session.state;
|
109
|
+
this.theme = this._session.theme.name;
|
110
|
+
this.profile = this._session.profile;
|
111
|
+
this.voting = !config.comments || config.comments.voting !== false;
|
91
112
|
this.options = this._session.profile.options;
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
113
|
+
}
|
114
|
+
close() {
|
115
|
+
this.form.valid &&
|
116
|
+
this.save();
|
117
|
+
history.back();
|
118
|
+
}
|
119
|
+
revive() {
|
120
|
+
this._hub.start();
|
121
|
+
}
|
122
|
+
about() {
|
123
|
+
this._dialog.open(AboutDialog);
|
124
|
+
}
|
125
|
+
guide(guide) {
|
126
|
+
this.close();
|
127
|
+
this._guide.start(guide);
|
128
|
+
}
|
129
|
+
setAvailable(val) {
|
130
|
+
this.close();
|
131
|
+
this._session.state = val;
|
132
|
+
}
|
133
|
+
changeTheme(name) {
|
134
|
+
this._session.theme = name;
|
135
|
+
}
|
136
|
+
changeLanguage(code) {
|
137
|
+
this._session.language = code;
|
138
|
+
this._ps.mask('Refreshing');
|
139
|
+
location.reload();
|
98
140
|
}
|
99
141
|
ngOnInit() {
|
142
|
+
this._hub.state$.pipe(startWith(this._hub.state), takeUntil(this._destroy)).subscribe(s => this.online = s === HubConnectionState.Connected);
|
143
|
+
if (!this._session.isImpersonating) {
|
144
|
+
this.guidesCount = this.guides.filter(w => w.mode === 'Eager').length || null;
|
145
|
+
}
|
100
146
|
const { outOfOffice, grantAccess, notifications, emails } = this.form.controls;
|
101
147
|
this.form.patchValue(this.options, { emitEvent: false });
|
102
148
|
if (!this.options.notifications.active)
|
@@ -134,7 +180,7 @@ export class OptionsComponent {
|
|
134
180
|
else
|
135
181
|
this.oooId.disable();
|
136
182
|
this._toggle(outOfOffice, active, 'from');
|
137
|
-
this._toggle(outOfOffice, active && outOfOffice.controls.from.value, 'to');
|
183
|
+
this._toggle(outOfOffice, active && outOfOffice.controls.from.value != null, 'to');
|
138
184
|
});
|
139
185
|
outOfOffice.controls.from.valueChanges.pipe(takeUntil(this._destroy)).
|
140
186
|
subscribe(from => this._toggle(outOfOffice, from !== null, 'to'));
|
@@ -143,11 +189,11 @@ export class OptionsComponent {
|
|
143
189
|
exclude.push(this._session.profile.userId);
|
144
190
|
return r.filter(u => exclude.indexOf(u.id) < 0);
|
145
191
|
}));
|
146
|
-
this.susers$ = this.oooId.valueChanges.pipe(takeUntil(this._destroy), tap(v => !v && outOfOffice.controls.substitueId.setValue(null)), filter(v => isString(v)), switchMap(v => this._accounts.findAll(v)), map(r => r.filter(u => u.id !== this._session.profile.userId)));
|
192
|
+
this.susers$ = this.oooId.valueChanges.pipe(takeUntil(this._destroy), tap(v => !v && outOfOffice.controls.substitueId.setValue(null)), filter(v => isString(v) && v.length > 0), switchMap(v => this._accounts.findAll(v)), map(r => r.filter(u => u.id !== this._session.profile.userId)));
|
147
193
|
if (this.options.outOfOffice.substitueId)
|
148
194
|
this._accounts.get(this.options.outOfOffice.substitueId).subscribe(u => this.oooId.setValue(u, { emitEvent: false }));
|
149
195
|
// auto save
|
150
|
-
this.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(
|
196
|
+
this.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(350)).subscribe(() => this.form.valid && this.save());
|
151
197
|
switch (this.sectionName) {
|
152
198
|
case 'out_of_office':
|
153
199
|
this.sectionTmpl = this.oooTmpl;
|
@@ -231,20 +277,13 @@ export class OptionsComponent {
|
|
231
277
|
this._destroy.next();
|
232
278
|
this._destroy.complete();
|
233
279
|
}
|
234
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
235
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: OptionsComponent, selector: "bizdoc-options", inputs: { sectionName: ["section", "sectionName"] }, viewQueries: [{ propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }, { propertyName: "oooTmpl", first: true, predicate: ["oooTmpl"], descendants: true, static: true }, { propertyName: "notificationsTmpl", first: true, predicate: ["notificationsTmpl"], descendants: true, static: true }], ngImport: i0, template: "<!--<bizdoc-v-tabs [initialName]=\"sectionName\">\n <tab name=\"notifications\" title=\"Notifications\">\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n <div class=\"row\">\n <span class=\"divider\"></span>\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n </div>\n </tab>\n <tab name=\"emails\" title=\"Emails\">\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n </tab>\n <tab name=\"out_of_office\" title=\"OutOfOffice\">\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"oooSelected($event)\">\n @for (u of susers$ | async; track u.id) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\">\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n </mat-form-field>\n </div>\n </tab>\n <tab name=\"grant_access\" title=\"GrantAccess\">\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <mat-form-field>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u.id) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"grantUserIds\" placeholder=\"{{'Users'| translate}}\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u.id) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n </tab>\n <tab name=\"preferences\" title=\"Preferences\">\n <div class=\"column\">\n <mat-form-field>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Tags'|translate\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n </div>\n </tab>\n</bizdoc-v-tabs>-->\n<div class=\"row\">\n <mat-nav-list class=\"nav-list\">\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\n <span matListItemTitle>{{'Notifications' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\n <span matListItemTitle>{{'Emails' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\n <span matListItemTitle>{{'Preferences' | translate}}</span>\n </mat-list-item>\n </mat-nav-list>\n <div class=\"separator\"></div>\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\n </form>\n</div>\n<!--preferences-->\n<ng-template #preferencesTmpl>\n <div class=\"column\">\n <mat-form-field>\n <mat-label>{{'Tags'|translate}}</mat-label>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n </div>\n</ng-template>\n<!--notifications-->\n<ng-template #notificationsTmpl>\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n <div class=\"row\">\n <span class=\"divider\"></span>\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n </div>\n</ng-template>\n<!--emails-->\n<ng-template #emailsTmpl>\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n</ng-template>\n<!--ooo-->\n<ng-template #oooTmpl>\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"oooSelected($event)\">\n @for (u of susers$ | async; track u.id) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\">\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n </mat-form-field>\n </div>\n</ng-template>\n<!--grantAccess-->\n<ng-template #grantAccessTmpl>\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field>\n <mat-label>{{'Associates'| translate}}</mat-label>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u.id) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"grantUserIds\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u.id) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n</ng-template>\n", styles: [":host{max-width:80vw;min-width:420px}.separator{height:280px;width:1px;background-color:#0003}form{padding:20px 8px 0;min-width:320px}\n"], dependencies: [{ kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i8.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i8.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i8.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i8.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i8.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: i9.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i9.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i9.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i10.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i10.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i12.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i12.MatLabel, selector: "mat-label" }, { kind: "directive", type: i12.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i12.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i14.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i17.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }, { kind: "pipe", type: i19.UserNamePipe, name: "userName" }], animations: [verticalSwapAnimation] }); }
|
280
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: OptionsComponent, deps: [{ token: i1.PromptService }, { token: i2.GuideService }, { token: i3.HubService }, { token: i4.MatDialog }, { token: i5.FormBuilder }, { token: i6.AccountService }, { token: i1.PromptService }, { token: i7.SessionService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
|
281
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: OptionsComponent, selector: "bizdoc-options", inputs: { sectionName: ["section", "sectionName"] }, host: { listeners: { "document:keydown.escape": "close()" } }, viewQueries: [{ propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }, { propertyName: "oooTmpl", first: true, predicate: ["oooTmpl"], descendants: true, static: true }, { propertyName: "notificationsTmpl", first: true, predicate: ["notificationsTmpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"column\">\r\n <div class=\"profile-name\">\r\n <span class=\"mat-headline-6\">\r\n @if (profile.byName) {\r\n {{profile.byName}} \\\r\n }\r\n {{profile.name}}\r\n </span>\r\n </div>\r\n\r\n <mat-divider />\r\n\r\n <div class=\"row\">\r\n <mat-nav-list class=\"nav-list\">\r\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\r\n <span matListItemTitle>{{'Notifications' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\r\n <span matListItemTitle>{{'Emails' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\r\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\r\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\r\n <span matListItemTitle>{{'Preferences' | translate}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n <div class=\"separator\"></div>\r\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\r\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\r\n </form>\r\n </div>\r\n <mat-divider />\r\n <!--keys-->\r\n @if(!isMobile) {\r\n <dl class=\"keys mat-body-2\">\r\n <dt>Alt+n</dt>\r\n <dd>{{'AltNHelp'|translate}}</dd>\r\n <dt>Ctrl+s</dt>\r\n <dd>{{'CtrlSHelp'|translate}}</dd>\r\n <dt>Alt+s</dt>\r\n <dd>{{'AltSHelp'|translate}}</dd>\r\n <dt>Alt+q</dt>\r\n <dd>{{'AltQHelp'|translate}}</dd>\r\n <dt>Alt+a</dt>\r\n <dd>{{'AltAHelp'|translate}}</dd>\r\n <dt>Alt+h</dt>\r\n <dd>{{'AltHHelp'|translate}}</dd>\r\n <dt>Ctrl+.</dt>\r\n <dd>{{'CtrlDotHelp'|translate}}</dd>\r\n </dl>\r\n }\r\n <!--themes-->\r\n @if (themes.length > 1) {\r\n <div class=\"row center\">\r\n @for (t of themes; track t) {\r\n <button (click)=\"changeTheme(t)\" mat-icon-button class=\"theme\" [style.background]=\"t.color\" [class.active]=\"t.name === theme\" [class.dark]=\"t.dark\" [bizdocTooltip]=\"'Theme'|translate\"></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!--guide-->\r\n<mat-nav-list role=\"list\">\r\n <mat-divider></mat-divider>\r\n <h3 mat-subheader [matBadge]=\"guidesCount\" matBadgeColor=\"accent\" matBadgeOverlap=\"false\" matBadgeSize=\"small\">{{'Help'|translate}}</h3>\r\n @for (g of guides; track g) {\r\n <button mat-menu-item (click)=\"guide(g.name)\">{{g.title}}</button>\r\n }\r\n</mat-nav-list>\r\n<mat-divider></mat-divider>\r\n<!--footer-->\r\n<div class=\"row footer\">\r\n <button mat-button role=\"listitem\" [matMenuTriggerFor]=\"language\">\r\n {{currentLanguage | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n <mat-menu #language>\r\n @for (l of languages; track l) {\r\n <button mat-menu-item (click)=\"changeLanguage(l)\">{{l | translate}}</button>\r\n }\r\n </mat-menu>\r\n @if (online) {\r\n <button mat-button [matMenuTriggerFor]=\"availability\">\r\n {{'ShowAs' | translate : (available | translate | lowercase)}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #availability>\r\n @for (m of modes; track m) {\r\n <button mat-menu-item (click)=\"setAvailable(m)\">{{m | translate}}</button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <button mat-button role=\"listitem\" (click)=\"about()\">{{ 'About' | translate}}</button>\r\n @if (!online) {\r\n <button mat-icon-button (click)=\"revive()\" [bizdocTooltip]=\"'Connect'|translate\">\r\n <mat-icon>wifi_off</mat-icon>\r\n </button>\r\n }\r\n</div>\r\n<!--preferences-->\r\n<ng-template #preferencesTmpl>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Tags'|translate}}</mat-label>\r\n <mat-chip-grid #chips>\r\n @for (item of form.value.tags; track item) {\r\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--notifications-->\r\n<ng-template #notificationsTmpl>\r\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voting?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--emails-->\r\n<ng-template #emailsTmpl>\r\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\r\n </div>\r\n</ng-template>\r\n<!--ooo-->\r\n<ng-template #oooTmpl>\r\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"oooSelected($event)\">\r\n @for (u of susers$ | async; track u.id) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Dates'|translate}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"dates\">\r\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\r\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--grantAccess-->\r\n<ng-template #grantAccessTmpl>\r\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field>\r\n <mat-label>{{'Associates'| translate}}</mat-label>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n @for (u of form.value.grantAccess.users || []; track u.id) {\r\n <mat-chip-row (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [formControl]=\"grantUserIds\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n @for (u of gusers$ | async; track u.id) {\r\n <mat-option [value]=\"u.id\">\r\n {{u.name}}\r\n @if (u.email) {\r\n <span> - {{u.email}}</span>\r\n }\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{max-width:80vw;min-width:420px}.footer{align-items:center}.profile-name{margin:8px}.theme{height:22px!important;width:22px!important;-moz-border-radius:13px 13px!important;-webkit-border-radius:13px 13px!important;border-radius:13px!important;margin:4px!important}.theme.active.dark{border:2px solid #f4f4f4}.keys{padding:8px}.keys dt{width:72px;float:inline-start;clear:both;font-variant-caps:all-small-caps}.keys dd{float:inline-end;font-size:small;margin:0}.separator{height:280px;width:1px;background-color:#0003}form{padding:20px 8px 0;min-width:320px}\n"], dependencies: [{ kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i9.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i9.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i10.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i10.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i10.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i10.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i10.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: i11.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i12.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i12.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i12.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "component", type: i13.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i12.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i14.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i15.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i14.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i16.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i16.MatLabel, selector: "mat-label" }, { kind: "directive", type: i16.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i16.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i17.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i18.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i18.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i19.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i20.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i21.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i21.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i21.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i22.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i23.TranslatePipe, name: "translate" }, { kind: "pipe", type: i24.UserNamePipe, name: "userName" }], animations: [verticalSwapAnimation] }); }
|
236
282
|
}
|
237
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: OptionsComponent, decorators: [{
|
238
284
|
type: Component,
|
239
|
-
args: [{ selector: 'bizdoc-options', animations: [verticalSwapAnimation], template: "<!--<bizdoc-v-tabs [initialName]=\"sectionName\">\n <tab name=\"notifications\" title=\"Notifications\">\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n <div class=\"row\">\n <span class=\"divider\"></span>\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n </div>\n </tab>\n <tab name=\"emails\" title=\"Emails\">\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n </tab>\n <tab name=\"out_of_office\" title=\"OutOfOffice\">\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"oooSelected($event)\">\n @for (u of susers$ | async; track u.id) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\">\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n </mat-form-field>\n </div>\n </tab>\n <tab name=\"grant_access\" title=\"GrantAccess\">\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <mat-form-field>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u.id) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"grantUserIds\" placeholder=\"{{'Users'| translate}}\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u.id) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n </tab>\n <tab name=\"preferences\" title=\"Preferences\">\n <div class=\"column\">\n <mat-form-field>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Tags'|translate\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n </div>\n </tab>\n</bizdoc-v-tabs>-->\n<div class=\"row\">\n <mat-nav-list class=\"nav-list\">\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\n <span matListItemTitle>{{'Notifications' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\n <span matListItemTitle>{{'Emails' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\n <span matListItemTitle>{{'Preferences' | translate}}</span>\n </mat-list-item>\n </mat-nav-list>\n <div class=\"separator\"></div>\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\n </form>\n</div>\n<!--preferences-->\n<ng-template #preferencesTmpl>\n <div class=\"column\">\n <mat-form-field>\n <mat-label>{{'Tags'|translate}}</mat-label>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n </div>\n</ng-template>\n<!--notifications-->\n<ng-template #notificationsTmpl>\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n <div class=\"row\">\n <span class=\"divider\"></span>\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n </div>\n</ng-template>\n<!--emails-->\n<ng-template #emailsTmpl>\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n</ng-template>\n<!--ooo-->\n<ng-template #oooTmpl>\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"oooSelected($event)\">\n @for (u of susers$ | async; track u.id) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\">\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n </mat-form-field>\n </div>\n</ng-template>\n<!--grantAccess-->\n<ng-template #grantAccessTmpl>\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field>\n <mat-label>{{'Associates'| translate}}</mat-label>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u.id) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"grantUserIds\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u.id) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n</ng-template>\n", styles: [":host{max-width:80vw;min-width:420px}.separator{height:280px;width:1px;background-color:#0003}form{padding:20px 8px 0;min-width:320px}\n"] }]
|
240
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
241
|
-
type: Inject,
|
242
|
-
args: [OPTION_PANEL]
|
243
|
-
}, {
|
244
|
-
type: Optional
|
245
|
-
}] }, { type: i1.OverlayRef, decorators: [{
|
246
|
-
type: Optional
|
247
|
-
}] }, { type: i2.FormBuilder }, { type: i3.AccountService }, { type: i4.PromptService }, { type: i5.SessionService }, { type: undefined, decorators: [{
|
285
|
+
args: [{ selector: 'bizdoc-options', animations: [verticalSwapAnimation], template: "<div class=\"column\">\r\n <div class=\"profile-name\">\r\n <span class=\"mat-headline-6\">\r\n @if (profile.byName) {\r\n {{profile.byName}} \\\r\n }\r\n {{profile.name}}\r\n </span>\r\n </div>\r\n\r\n <mat-divider />\r\n\r\n <div class=\"row\">\r\n <mat-nav-list class=\"nav-list\">\r\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\r\n <span matListItemTitle>{{'Notifications' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\r\n <span matListItemTitle>{{'Emails' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\r\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\r\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\r\n </mat-list-item>\r\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\r\n <span matListItemTitle>{{'Preferences' | translate}}</span>\r\n </mat-list-item>\r\n </mat-nav-list>\r\n <div class=\"separator\"></div>\r\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\r\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\r\n </form>\r\n </div>\r\n <mat-divider />\r\n <!--keys-->\r\n @if(!isMobile) {\r\n <dl class=\"keys mat-body-2\">\r\n <dt>Alt+n</dt>\r\n <dd>{{'AltNHelp'|translate}}</dd>\r\n <dt>Ctrl+s</dt>\r\n <dd>{{'CtrlSHelp'|translate}}</dd>\r\n <dt>Alt+s</dt>\r\n <dd>{{'AltSHelp'|translate}}</dd>\r\n <dt>Alt+q</dt>\r\n <dd>{{'AltQHelp'|translate}}</dd>\r\n <dt>Alt+a</dt>\r\n <dd>{{'AltAHelp'|translate}}</dd>\r\n <dt>Alt+h</dt>\r\n <dd>{{'AltHHelp'|translate}}</dd>\r\n <dt>Ctrl+.</dt>\r\n <dd>{{'CtrlDotHelp'|translate}}</dd>\r\n </dl>\r\n }\r\n <!--themes-->\r\n @if (themes.length > 1) {\r\n <div class=\"row center\">\r\n @for (t of themes; track t) {\r\n <button (click)=\"changeTheme(t)\" mat-icon-button class=\"theme\" [style.background]=\"t.color\" [class.active]=\"t.name === theme\" [class.dark]=\"t.dark\" [bizdocTooltip]=\"'Theme'|translate\"></button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n<!--guide-->\r\n<mat-nav-list role=\"list\">\r\n <mat-divider></mat-divider>\r\n <h3 mat-subheader [matBadge]=\"guidesCount\" matBadgeColor=\"accent\" matBadgeOverlap=\"false\" matBadgeSize=\"small\">{{'Help'|translate}}</h3>\r\n @for (g of guides; track g) {\r\n <button mat-menu-item (click)=\"guide(g.name)\">{{g.title}}</button>\r\n }\r\n</mat-nav-list>\r\n<mat-divider></mat-divider>\r\n<!--footer-->\r\n<div class=\"row footer\">\r\n <button mat-button role=\"listitem\" [matMenuTriggerFor]=\"language\">\r\n {{currentLanguage | translate}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n <!--'ChangeLanguage'-->\r\n </button>\r\n <mat-menu #language>\r\n @for (l of languages; track l) {\r\n <button mat-menu-item (click)=\"changeLanguage(l)\">{{l | translate}}</button>\r\n }\r\n </mat-menu>\r\n @if (online) {\r\n <button mat-button [matMenuTriggerFor]=\"availability\">\r\n {{'ShowAs' | translate : (available | translate | lowercase)}}\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #availability>\r\n @for (m of modes; track m) {\r\n <button mat-menu-item (click)=\"setAvailable(m)\">{{m | translate}}</button>\r\n }\r\n </mat-menu>\r\n <span class=\"divider\"></span>\r\n <button mat-button role=\"listitem\" (click)=\"about()\">{{ 'About' | translate}}</button>\r\n @if (!online) {\r\n <button mat-icon-button (click)=\"revive()\" [bizdocTooltip]=\"'Connect'|translate\">\r\n <mat-icon>wifi_off</mat-icon>\r\n </button>\r\n }\r\n</div>\r\n<!--preferences-->\r\n<ng-template #preferencesTmpl>\r\n <div class=\"column\">\r\n <mat-form-field>\r\n <mat-label>{{'Tags'|translate}}</mat-label>\r\n <mat-chip-grid #chips>\r\n @for (item of form.value.tags; track item) {\r\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\r\n {{item}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [matChipInputFor]=\"chips\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\r\n [matChipInputAddOnBlur]=\"true\"\r\n (matChipInputTokenEnd)=\"addTag($event)\">\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--notifications-->\r\n<ng-template #notificationsTmpl>\r\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voting?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\r\n <div class=\"row\">\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!--emails-->\r\n<ng-template #emailsTmpl>\r\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\r\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\r\n </div>\r\n</ng-template>\r\n<!--ooo-->\r\n<ng-template #oooTmpl>\r\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field class=\"flex\">\r\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\r\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\r\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\r\n (optionSelected)=\"oooSelected($event)\">\r\n @for (u of susers$ | async; track u.id) {\r\n <mat-option [value]=\"u\">\r\n <span>{{u.name}}</span>\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>{{'Dates'|translate}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"dates\">\r\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\r\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\r\n </mat-date-range-input>\r\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n<!--grantAccess-->\r\n<ng-template #grantAccessTmpl>\r\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\r\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\r\n <br />\r\n <mat-form-field>\r\n <mat-label>{{'Associates'| translate}}</mat-label>\r\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\r\n @for (u of form.value.grantAccess.users || []; track u.id) {\r\n <mat-chip-row (removed)=\"removeGrant(u)\">\r\n {{u | userName | async}}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip-row>\r\n }\r\n </mat-chip-grid>\r\n <input [formControl]=\"grantUserIds\"\r\n #grantInput\r\n [matAutocomplete]=\"grantAuto\"\r\n [matChipInputFor]=\"grantList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\r\n @for (u of gusers$ | async; track u.id) {\r\n <mat-option [value]=\"u.id\">\r\n {{u.name}}\r\n @if (u.email) {\r\n <span> - {{u.email}}</span>\r\n }\r\n </mat-option>\r\n }\r\n </mat-autocomplete>\r\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n</ng-template>\r\n", styles: [":host{max-width:80vw;min-width:420px}.footer{align-items:center}.profile-name{margin:8px}.theme{height:22px!important;width:22px!important;-moz-border-radius:13px 13px!important;-webkit-border-radius:13px 13px!important;border-radius:13px!important;margin:4px!important}.theme.active.dark{border:2px solid #f4f4f4}.keys{padding:8px}.keys dt{width:72px;float:inline-start;clear:both;font-variant-caps:all-small-caps}.keys dd{float:inline-end;font-size:small;margin:0}.separator{height:280px;width:1px;background-color:#0003}form{padding:20px 8px 0;min-width:320px}\n"] }]
|
286
|
+
}], ctorParameters: () => [{ type: i1.PromptService }, { type: i2.GuideService }, { type: i3.HubService }, { type: i4.MatDialog }, { type: i5.FormBuilder }, { type: i6.AccountService }, { type: i1.PromptService }, { type: i7.SessionService }, { type: undefined, decorators: [{
|
248
287
|
type: Inject,
|
249
288
|
args: [BIZDOC_CONFIG]
|
250
289
|
}] }], propDecorators: { substitueInput: [{
|
@@ -262,5 +301,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
|
|
262
301
|
}], notificationsTmpl: [{
|
263
302
|
type: ViewChild,
|
264
303
|
args: ['notificationsTmpl', { static: true }]
|
304
|
+
}], close: [{
|
305
|
+
type: HostListener,
|
306
|
+
args: ['document:keydown.escape']
|
265
307
|
}] } });
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlILE9BQU8sRUFBRSxPQUFPLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxZQUFZLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUt2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSTNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBYSxTQUFTLENBQUMsQ0FBQztBQVd0RSx1QkFBdUI7QUFDdkIsTUFBTSxPQUFPLGdCQUFnQjtJQTBEM0IsWUFBOEMsT0FBbUIsRUFD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QyxRQUFROzswQkFLUixNQUFNOzJCQUFDLGFBQWE7eUNBL0QwQixjQUFjO3NCQUE5RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDRSxVQUFVO3NCQUExRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQzdCLFdBQVc7c0JBQTVCLEtBQUs7dUJBQUMsU0FBUztnQkFDd0IsT0FBTztzQkFBOUMsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNZLGlCQUFpQjtzQkFBbEUsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEluamVjdGlvblRva2VuLCBJbmplY3QsIE9wdGlvbmFsLCBUZW1wbGF0ZVJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXQsIE1hdENoaXBJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xyXG5pbXBvcnQgeyBDT01NQSwgRU5URVIsIFNFTUlDT0xPTiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgQklaRE9DX0NPTkZJRywgQml6RG9jQ29uZmlnIH0gZnJvbSAnLi4vY29yZS9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgaXNNb2JpbGUsIGlzU3RyaW5nIH0gZnJvbSAnLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBPcHRpb25zLCBVc2VySW5mbyB9IGZyb20gJy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IHZlcnRpY2FsU3dhcEFuaW1hdGlvbiB9IGZyb20gJy4uL2NvcmUvYW5pbWF0aW9ucyc7XHJcblxyXG5leHBvcnQgdHlwZSBPcHRpb25UeXBlID0gJ25vdGlmaWNhdGlvbnMnIHwgJ2VtYWlscycgfCAnb3V0X29mX29mZmljZScgfCAnZ3JhbnRfYWNjZXNzJyB8ICdwcmVmZXJlbmNlcyc7XHJcblxyXG5leHBvcnQgY29uc3QgT1BUSU9OX1BBTkVMID0gbmV3IEluamVjdGlvblRva2VuPE9wdGlvbkRhdGE+KCdvcHRpb25zJyk7XHJcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uRGF0YSB7XHJcbiAgc2VjdGlvbjogT3B0aW9uVHlwZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2Mtb3B0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL29wdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbdmVydGljYWxTd2FwQW5pbWF0aW9uXVxyXG59KVxyXG4vKiogb3B0aW9ucyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgT3B0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdzdWJzdGl0dWVJbnB1dCcsIHsgcmVhZDogTWF0SW5wdXQgfSkgc3Vic3RpdHVlSW5wdXQ6IE1hdElucHV0O1xyXG4gIEBWaWV3Q2hpbGQoJ2dyYW50SW5wdXQnLCB7IHJlYWQ6IE1hdENoaXBJbnB1dCB9KSBncmFudElucHV0OiBNYXRDaGlwSW5wdXQ7XHJcbiAgQElucHV0KCdzZWN0aW9uJykgc2VjdGlvbk5hbWU6IE9wdGlvblR5cGU7XHJcbiAgQFZpZXdDaGlsZCgnb29vVG1wbCcsIHsgc3RhdGljOiB0cnVlIH0pIG9vb1RtcGw6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnbm90aWZpY2F0aW9uc1RtcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBub3RpZmljYXRpb25zVG1wbDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBzZWN0aW9uSW5kZXggPSAwO1xyXG4gIHNlY3Rpb25UbXBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHNhdmVpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIF9yZXF1aXJlZFZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XHJcbiAgICBjb25zdCBwYXJlbnQgPSAoY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwKTtcclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmNvbnRyb2xzLmFjdGl2ZS52YWx1ZSAmJiAhY29udHJvbC52YWx1ZSkgcmV0dXJuIHtcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH1cclxuICB9XHJcbiAgcmVhZG9ubHkgZ3JhbnRVc2VySWRzID0gdGhpcy5fZmIuY29udHJvbChbXSk7XHJcbiAgcmVhZG9ubHkgb29vSWQgPSB0aGlzLl9mYi5jb250cm9sKG51bGwpO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBub3RpZmljYXRpb25zOiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIGFjdGl2ZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGxpa2VzOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgY29tbWVudE15RG9jdW1lbnQ6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjb21tZW50QW55RG9jdW1lbnQ6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICB1cGNvbWluZ0V2ZW50czogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHRhZ2dlZDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGFueURvY3VtZW50U3RhdGVDaGFuZ2U6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBteURvY3VtZW50U3RhdGVDaGFuZ2U6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjdWJlQW5vbWFseTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHNvdW5kOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgIH0pLFxyXG4gICAgdGFnczogdGhpcy5fZmIuY29udHJvbChudWxsKSxcclxuICAgIGVtYWlsczogdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBhY3RpdmU6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBtYWlsOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgY2hhdDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIG5vdGlmaWNhdGlvbnM6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBldmVudHM6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpXHJcbiAgICB9KSxcclxuICAgIG91dE9mT2ZmaWNlOiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIGFjdGl2ZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHN1YnN0aXR1ZUlkOiB0aGlzLl9mYi5jb250cm9sKG51bGwsIHRoaXMuX3JlcXVpcmVkVmFsaWRhdG9yKSxcclxuICAgICAgZnJvbTogdGhpcy5fZmIuY29udHJvbChudWxsKSxcclxuICAgICAgdG86IHRoaXMuX2ZiLmNvbnRyb2wobnVsbClcclxuICAgIH0pLFxyXG4gICAgZ3JhbnRBY2Nlc3M6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgdXNlcnM6IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgdGhpcy5fcmVxdWlyZWRWYWxpZGF0b3IpXHJcbiAgICB9KVxyXG4gIH0pO1xyXG4gIHN1c2VycyQ6IE9ic2VydmFibGU8VXNlckluZm9bXT47XHJcbiAgZ3VzZXJzJDogT2JzZXJ2YWJsZTxVc2VySW5mb1tdPjtcclxuICB2b2F0aW5nOiBib29sZWFuO1xyXG4gIHJlYWRvbmx5IG9wdGlvbnM6IE9wdGlvbnM7XHJcbiAgcmVhZG9ubHkgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gIHJlYWRvbmx5IGlzTW9iaWxlID0gaXNNb2JpbGUoKTtcclxuICByZWFkb25seSBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSLCBDT01NQSwgU0VNSUNPTE9OXTtcclxuICAvKiogb3B0aW9ucyBjdG9yICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoQEluamVjdChPUFRJT05fUEFORUwpIEBPcHRpb25hbCgpIG9wdGlvbnM6IE9wdGlvbkRhdGEsXHJcbiAgICBAT3B0aW9uYWwoKSBvdmVybGF5UmVmOiBPdmVybGF5UmVmLFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfYWNjb3VudHM6IEFjY291bnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIEBJbmplY3QoQklaRE9DX0NPTkZJRykgY29uZmlnOiBCaXpEb2NDb25maWcpIHtcclxuICAgIHRoaXMudm9hdGluZyA9ICFjb25maWcuY29tbWVudHMgfHwgY29uZmlnLmNvbW1lbnRzLnZvdGluZyAhPT0gZmFsc2U7XHJcbiAgICB0aGlzLnNlY3Rpb25OYW1lID0gb3B0aW9ucz8uc2VjdGlvbjtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5vcHRpb25zO1xyXG4gICAgb3ZlcmxheVJlZiAmJiBtZXJnZShvdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKGZpbHRlcihrID0+IGsua2V5ID09PSAnRXNjYXBlJykpLCBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnZhbGlkICYmXHJcbiAgICAgICAgICB0aGlzLnNhdmUoKTtcclxuICAgICAgICBvdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBvdXRPZk9mZmljZSwgZ3JhbnRBY2Nlc3MsIG5vdGlmaWNhdGlvbnMsIGVtYWlscyB9ID0gdGhpcy5mb3JtLmNvbnRyb2xzO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5vcHRpb25zLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5ub3RpZmljYXRpb25zLmFjdGl2ZSlcclxuICAgICAgdGhpcy5fdG9nZ2xlKG5vdGlmaWNhdGlvbnMsIGZhbHNlLCAnbGlrZXMnLFxyXG4gICAgICAgICdjb21tZW50TXlEb2N1bWVudCcsXHJcbiAgICAgICAgJ2NvbW1lbnRBbnlEb2N1bWVudCcsXHJcbiAgICAgICAgJ3VwY29taW5nRXZlbnRzJyxcclxuICAgICAgICAndGFnZ2VkJyxcclxuICAgICAgICAnYW55RG9jdW1lbnRTdGF0ZUNoYW5nZScsXHJcbiAgICAgICAgJ215RG9jdW1lbnRTdGF0ZUNoYW5nZScsXHJcbiAgICAgICAgJ2N1YmVBbm9tYWx5Jyk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5lbWFpbHMuYWN0aXZlKVxyXG4gICAgICB0aGlzLl90b2dnbGUoZW1haWxzLCBmYWxzZSwgJ21haWwnLFxyXG4gICAgICAgICdjaGF0JyxcclxuICAgICAgICAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgJ2V2ZW50cycpO1xyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZ3JhbnRBY2Nlc3MuYWN0aXZlKVxyXG4gICAgICB0aGlzLmdyYW50VXNlcklkcy5kaXNhYmxlKCk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5vdXRPZk9mZmljZS5hY3RpdmUpIHtcclxuICAgICAgdGhpcy5vb29JZC5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgZmFsc2UsICdmcm9tJywgJ3RvJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghdGhpcy5vcHRpb25zLm91dE9mT2ZmaWNlLmZyb20pXHJcbiAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgZmFsc2UsICd0bycpO1xyXG4gICAgLy8gY2hhbmdlXHJcbiAgICBub3RpZmljYXRpb25zLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+XHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlKG5vdGlmaWNhdGlvbnMsIGFjdGl2ZSwgJ2xpa2VzJyxcclxuICAgICAgICAgICdjb21tZW50TXlEb2N1bWVudCcsXHJcbiAgICAgICAgICAnY29tbWVudEFueURvY3VtZW50JyxcclxuICAgICAgICAgICd1cGNvbWluZ0V2ZW50cycsXHJcbiAgICAgICAgICAndGFnZ2VkJyxcclxuICAgICAgICAgICdhbnlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAgICdteURvY3VtZW50U3RhdGVDaGFuZ2UnLFxyXG4gICAgICAgICAgJ2N1YmVBbm9tYWx5JykpO1xyXG4gICAgZW1haWxzLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHRoaXMuX3RvZ2dsZShlbWFpbHMsIGFjdGl2ZSwgJ21haWwnLFxyXG4gICAgICAgICdjaGF0JyxcclxuICAgICAgICAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgJ2V2ZW50cycpKTtcclxuICAgIGdyYW50QWNjZXNzLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLmdyYW50VXNlcklkcy5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuZ3JhbnRJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuZ3JhbnRVc2VySWRzLmVuYWJsZSgpO1xyXG4gICAgICB9KTtcclxuICAgIG91dE9mT2ZmaWNlLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLm9vb0lkLmVuYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dWVJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLm9vb0lkLmRpc2FibGUoKTtcclxuICAgICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGFjdGl2ZSwgJ2Zyb20nKTtcclxuICAgICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGFjdGl2ZSAmJiBvdXRPZk9mZmljZS5jb250cm9scy5mcm9tLnZhbHVlLCAndG8nKTtcclxuICAgICAgfSk7XHJcbiAgICBvdXRPZk9mZmljZS5jb250cm9scy5mcm9tLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZShmcm9tID0+XHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlKG91dE9mT2ZmaWNlLCBmcm9tICE9PSBudWxsLCAndG8nKSk7XHJcbiAgICB0aGlzLmd1c2VycyQgPSB0aGlzLmdyYW50VXNlcklkcy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXHJcbiAgICAgIGZpbHRlcih2ID0+IGlzU3RyaW5nKHYpKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHRoaXMuX2FjY291bnRzLmZpbmRBbGwodiBhcyBhbnkpKSxcclxuICAgICAgbWFwKHIgPT4ge1xyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGUgPSAoZ3JhbnRBY2Nlc3MudmFsdWUudXNlcnMgYXMgc3RyaW5nW10pPy5zbGljZSgpIHx8IFtdO1xyXG4gICAgICAgIGV4Y2x1ZGUucHVzaCh0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKTtcclxuICAgICAgICByZXR1cm4gci5maWx0ZXIodSA9PiBleGNsdWRlLmluZGV4T2YodS5pZCkgPCAwKTtcclxuICAgICAgfSkpO1xyXG4gICAgdGhpcy5zdXNlcnMkID0gdGhpcy5vb29JZC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXHJcbiAgICAgIHRhcCh2ID0+XHJcbiAgICAgICAgIXYgJiYgb3V0T2ZPZmZpY2UuY29udHJvbHMuc3Vic3RpdHVlSWQuc2V0VmFsdWUobnVsbClcclxuICAgICAgKSxcclxuICAgICAgZmlsdGVyKHYgPT4gaXNTdHJpbmcodikpLFxyXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLl9hY2NvdW50cy5maW5kQWxsKHYpKSxcclxuICAgICAgbWFwKHIgPT4gci5maWx0ZXIodSA9PiB1LmlkICE9PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSkpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRPZk9mZmljZS5zdWJzdGl0dWVJZClcclxuICAgICAgdGhpcy5fYWNjb3VudHMuZ2V0KHRoaXMub3B0aW9ucy5vdXRPZk9mZmljZS5zdWJzdGl0dWVJZCkuc3Vic2NyaWJlKHUgPT5cclxuICAgICAgICB0aGlzLm9vb0lkLnNldFZhbHVlKHUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KSk7XHJcbiAgICAvLyBhdXRvIHNhdmVcclxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksIGRlYm91bmNlVGltZSg0MDApKS5zdWJzY3JpYmUoKCkgPT5cclxuICAgICAgdGhpcy5mb3JtLnZhbGlkICYmIHRoaXMuc2F2ZSgpXHJcbiAgICApO1xyXG4gICAgc3dpdGNoICh0aGlzLnNlY3Rpb25OYW1lKSB7XHJcbiAgICAgIGNhc2UgJ291dF9vZl9vZmZpY2UnOlxyXG4gICAgICAgIHRoaXMuc2VjdGlvblRtcGwgPSB0aGlzLm9vb1RtcGw7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uSW5kZXggPSAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdub3RpZmljYXRpb25zJzpcclxuICAgICAgICB0aGlzLnNlY3Rpb25UbXBsID0gdGhpcy5ub3RpZmljYXRpb25zVG1wbDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25JbmRleCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5hdihzZWN0aW9uTmFtZTogT3B0aW9uVHlwZSwgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sIGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VjdGlvbk5hbWUgPSBzZWN0aW9uTmFtZTtcclxuICAgIHRoaXMuc2VjdGlvblRtcGwgPSB0ZW1wbGF0ZTtcclxuICAgIHRoaXMuc2VjdGlvbkluZGV4ID0gaW5kZXg7XHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmVpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi51cGRhdGUodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpLFxyXG4gICAgICBlcnJvcjogKCkgPT4gdGhpcy5fc2IuZXJyb3IoKSxcclxuICAgICAgY29tcGxldGU6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zYXZlaW5nID0gZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF90b2dnbGUoZ3JvdXA6IEZvcm1Hcm91cCwgYWN0aXZlOiBib29sZWFuLCAuLi5jb250cm9sczogc3RyaW5nW10pIHtcclxuICAgIGNvbnRyb2xzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGlmICghYWN0aXZlKSBncm91cC5jb250cm9sc1tuYW1lXS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgZWxzZSBncm91cC5jb250cm9sc1tuYW1lXS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRvZ2dsZVNvdW5kKCkge1xyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLm5vdGlmaWNhdGlvbnMuY29udHJvbHMuc291bmQuc2V0VmFsdWUoIXRoaXMuZm9ybS5jb250cm9scy5ub3RpZmljYXRpb25zLmNvbnRyb2xzLnNvdW5kLnZhbHVlKTtcclxuICB9XHJcbiAgZGlzcGxheSA9IChpdGVtOiBVc2VySW5mbykgPT4ge1xyXG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLm5hbWUgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYWRkVGFnKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCkge1xyXG4gICAgY29uc3QgeyBjaGlwSW5wdXQsIHZhbHVlIH0gPSBldmVudDtcclxuXHJcbiAgICAvLyBBZGQgb3VyIGZydWl0XHJcbiAgICBpZiAoKHZhbHVlIHx8ICcnKS50cmltKCkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnRhZ3MucHVzaCh2YWx1ZS50cmltKCkpO1xyXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIGlucHV0IHZhbHVlIFxyXG4gICAgY2hpcElucHV0Py5jbGVhcigpO1xyXG4gIH1cclxuICByZW1vdmVUYWcodGFnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub3B0aW9ucy50YWdzLnJlbW92ZSh0YWcpO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe30pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gaWRcclxuICAgKi9cclxuICByZW1vdmVHcmFudChpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VycyA9IHRoaXMuZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyBhcyBzdHJpbmdbXTtcclxuICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuaW5kZXhPZihpZCk7XHJcblxyXG4gICAgaWYgKGluZGV4ID49IDApXHJcbiAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbnBcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBhZGRHcmFudChpbnA6IEhUTUxJbnB1dEVsZW1lbnQsIGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VycyA9IHRoaXMuZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyBhcyBzdHJpbmdbXTtcclxuICAgIGNvbnN0IGlkID0gZXZlbnQub3B0aW9uLnZhbHVlIGFzIHN0cmluZztcclxuICAgIGlmICghdXNlcnMpXHJcbiAgICAgICh0aGlzLmZvcm0uY29udHJvbHMuZ3JhbnRBY2Nlc3MpLmNvbnRyb2xzLnVzZXJzLnNldFZhbHVlKFtpZF0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB1c2Vycy5wdXNoKGlkKTtcclxuICAgIGlucC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe30pO1xyXG4gIH1cclxuICBvb29TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xyXG4gICAgKHRoaXMuZm9ybS5jb250cm9scy5vdXRPZk9mZmljZSkuY29udHJvbHMuc3Vic3RpdHVlSWQuc2V0VmFsdWUoKGV2ZW50Lm9wdGlvbi52YWx1ZSBhcyBVc2VySW5mbykuaWQpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5kaXJ0eSAmJiB0aGlzLnNhdmUoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tPGJpemRvYy12LXRhYnMgW2luaXRpYWxOYW1lXT1cInNlY3Rpb25OYW1lXCI+XG4gIDx0YWIgbmFtZT1cIm5vdGlmaWNhdGlvbnNcIiB0aXRsZT1cIk5vdGlmaWNhdGlvbnNcIj5cbiAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybS5jb250cm9scy5ub3RpZmljYXRpb25zXCIgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxiciAvPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibXlEb2N1bWVudFN0YXRlQ2hhbmdlXCI+e3snTXlTdGF0ZUNoYW5nZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFueURvY3VtZW50U3RhdGVDaGFuZ2VcIj57eydBbnlTdGF0ZUNoYW5nZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRNeURvY3VtZW50XCI+e3snQ29tbWVudE15RG9jdW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50QW55RG9jdW1lbnRcIj57eydDb21tZW50QW55RG9jdW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJsaWtlc1wiIFtzdHlsZS5kaXNwbGF5XT1cInZvYXRpbmc/Jyc6J25vbmUnXCI+e3snTGlrZWRDb21tZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwidGFnZ2VkXCI+e3snVGFnZ2VkSW5Db21tZW50cycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cInVwY29taW5nRXZlbnRzXCI+e3snVXBjb21pbmdFdmVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjdWJlQW5vbWFseVwiPnt7J0N1YmVBbm9tYWx5JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlU291bmQoKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWx1ZS5ub3RpZmljYXRpb25zLmFjdGl2ZVwiIFtiaXpkb2NUb29sdGlwXT1cIihmb3JtLnZhbHVlLm5vdGlmaWNhdGlvbnMuc291bmQgPyAnU291bmRPbic6ICdTb3VuZE9mZicpfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj57e2Zvcm0udmFsdWUubm90aWZpY2F0aW9ucy5zb3VuZCA/ICd2b2x1bWVfdXAnIDogJ3ZvbHVtZV9vZmYnfX08L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvdGFiPlxuICA8dGFiIG5hbWU9XCJlbWFpbHNcIiB0aXRsZT1cIkVtYWlsc1wiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtLmNvbnRyb2xzLmVtYWlsc1wiIGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8YnIgLz5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cIm1haWxcIj57eydNYWlscycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImNoYXRcIj57eydDb252ZXJzYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibm90aWZpY2F0aW9uc1wiPnt7J0VtYWlsTm90aWZpY2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImV2ZW50c1wiPnt7J0FsYXJtRXZlbnRzJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDwvZGl2PlxuICA8L3RhYj5cbiAgPHRhYiBuYW1lPVwib3V0X29mX29mZmljZVwiIHRpdGxlPVwiT3V0T2ZPZmZpY2VcIj5cbiAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybS5jb250cm9scy5vdXRPZk9mZmljZVwiIGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8YnIgLz5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJvb29JZFwiIHR5cGU9XCJzZWFyY2hcIiBbbWF0QXV0b2NvbXBsZXRlXT1cInNhdXRvXCIgI3N1YnN0aXR1ZUlucHV0XG4gICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Fzc29jaWF0ZScgfCB0cmFuc2xhdGVcIiBbcmVxdWlyZWRdPVwiZm9ybS52YWx1ZS5vdXRPZk9mZmljZS5hY3RpdmVcIiAvPlxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjc2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvb29TZWxlY3RlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgQGZvciAodSBvZiBzdXNlcnMkIHwgYXN5bmM7IHRyYWNrIHUuaWQpIHtcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidVwiPlxuICAgICAgICAgICAgPHNwYW4+e3t1Lm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgIDxtYXQtaGludD57eydPdXRPZk9mZmljZVRpcCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPnt7J0RhdGVzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cImRhdGVzXCI+XG4gICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJmcm9tXCIgW3BsYWNlaG9sZGVyXT1cIidGcm9tJ3x0cmFuc2xhdGVcIiBbbWluXT1cInRvZGF5XCI+XG4gICAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgZm9ybUNvbnRyb2xOYW1lPVwidG9cIiBbcGxhY2Vob2xkZXJdPVwiJ1RvJ3x0cmFuc2xhdGVcIj5cbiAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJkYXRlc1wiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNkYXRlcyBbdG91Y2hVaV09XCJpc01vYmlsZVwiPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC90YWI+XG4gIDx0YWIgbmFtZT1cImdyYW50X2FjY2Vzc1wiIHRpdGxlPVwiR3JhbnRBY2Nlc3NcIj5cbiAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybS5jb250cm9scy5ncmFudEFjY2Vzc1wiIGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtY2hpcC1ncmlkICNncmFudExpc3QgW2F0dHIuYXJpYS1sYWJlbF09XCJcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsdWUuZ3JhbnRBY2Nlc3MuYWN0aXZlXCI+XG4gICAgICAgICAgQGZvciAodSBvZiBmb3JtLnZhbHVlLmdyYW50QWNjZXNzLnVzZXJzIHx8IFtdOyB0cmFjayB1LmlkKSB7XG4gICAgICAgICAgPG1hdC1jaGlwLXJvdyAocmVtb3ZlZCk9XCJyZW1vdmVHcmFudCh1KVwiPlxuICAgICAgICAgICAge3t1IHwgdXNlck5hbWUgfCBhc3luY319XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWNoaXAtcm93PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuICAgICAgICA8aW5wdXQgW2Zvcm1Db250cm9sXT1cImdyYW50VXNlcklkc1wiIHBsYWNlaG9sZGVyPVwie3snVXNlcnMnfCB0cmFuc2xhdGV9fVwiXG4gICAgICAgICAgICAgICAjZ3JhbnRJbnB1dFxuICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJncmFudEF1dG9cIlxuICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJncmFudExpc3RcIlxuICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiPlxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjZ3JhbnRBdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cImFkZEdyYW50KGdyYW50SW5wdXQsICRldmVudClcIj5cbiAgICAgICAgICBAZm9yICh1IG9mIGd1c2VycyQgfCBhc3luYzsgdHJhY2sgdS5pZCkge1xuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ1LmlkXCI+XG4gICAgICAgICAgICB7e3UubmFtZX19XG4gICAgICAgICAgICBAaWYgKHUuZW1haWwpIHtcbiAgICAgICAgICAgIDxzcGFuPiZuYnNwOyAtIHt7dS5lbWFpbH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPG1hdC1oaW50Pnt7J0dyYW50VGlwJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGludD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvdGFiPlxuICA8dGFiIG5hbWU9XCJwcmVmZXJlbmNlc1wiIHRpdGxlPVwiUHJlZmVyZW5jZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtY2hpcC1ncmlkICNjaGlwcz5cbiAgICAgICAgICBAZm9yIChpdGVtIG9mIGZvcm0udmFsdWUudGFnczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxtYXQtY2hpcC1yb3cgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlVGFnKGl0ZW0pXCI+XG4gICAgICAgICAgICB7e2l0ZW19fVxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cbiAgICAgICAgPGlucHV0IFtwbGFjZWhvbGRlcl09XCInVGFncyd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcHNcIlxuICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiXG4gICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cImFkZFRhZygkZXZlbnQpXCI+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L3RhYj5cbjwvYml6ZG9jLXYtdGFicz4tLT5cbjxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgPG1hdC1uYXYtbGlzdCBjbGFzcz1cIm5hdi1saXN0XCI+XG4gICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm5hdignbm90aWZpY2F0aW9ucycsIG5vdGlmaWNhdGlvbnNUbXBsLCAwKVwiIFtjbGFzcy5hY3RpdmVdPVwic2VjdGlvbk5hbWUgPT09ICdub3RpZmljYXRpb25zJ1wiPlxuICAgICAgPHNwYW4gbWF0TGlzdEl0ZW1UaXRsZT57eydOb3RpZmljYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICA8bWF0LWxpc3QtaXRlbSAoY2xpY2spPVwibmF2KCdlbWFpbHMnLCBlbWFpbHNUbXBsLCAxKVwiIFtjbGFzcy5hY3RpdmVdPVwic2VjdGlvbk5hbWUgPT09ICdlbWFpbHMnXCI+XG4gICAgICA8c3BhbiBtYXRMaXN0SXRlbVRpdGxlPnt7J0VtYWlscycgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICA8L21hdC1saXN0LWl0ZW0+XG4gICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm5hdignb3V0X29mX29mZmljZScsIG9vb1RtcGwsIDIpXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWN0aW9uTmFtZSA9PT0gJ291dF9vZl9vZmZpY2UnXCI+XG4gICAgICA8c3BhbiBtYXRMaXN0SXRlbVRpdGxlPnt7J091dE9mT2ZmaWNlJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICA8bWF0LWxpc3QtaXRlbSAoY2xpY2spPVwibmF2KCdncmFudF9hY2Nlc3MnLCBncmFudEFjY2Vzc1RtcGwsIDMpXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWN0aW9uTmFtZSA9PT0gJ2dyYW50X2FjY2VzcydcIj5cbiAgICAgIDxzcGFuIG1hdExpc3RJdGVtVGl0bGU+e3snR3JhbnRBY2Nlc3MnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgIDxtYXQtbGlzdC1pdGVtIChjbGljayk9XCJuYXYoJ3ByZWZlcmVuY2VzJywgcHJlZmVyZW5jZXNUbXBsLCA0KVwiIFtjbGFzcy5hY3RpdmVdPVwic2VjdGlvbk5hbWUgPT09ICdwcmVmZXJlbmNlcydcIj5cbiAgICAgIDxzcGFuIG1hdExpc3RJdGVtVGl0bGU+e3snUHJlZmVyZW5jZXMnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgPC9tYXQtbGlzdC1pdGVtPlxuICA8L21hdC1uYXYtbGlzdD5cbiAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiPjwvZGl2PlxuICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbQHYtc3dhcGVdPVwic2VjdGlvbkluZGV4XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlY3Rpb25UbXBsXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZm9ybT5cbjwvZGl2PlxuPCEtLXByZWZlcmVuY2VzLS0+XG48bmctdGVtcGxhdGUgI3ByZWZlcmVuY2VzVG1wbD5cbiAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3snVGFncyd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtY2hpcC1ncmlkICNjaGlwcz5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBmb3JtLnZhbHVlLnRhZ3M7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgPG1hdC1jaGlwLXJvdyBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlZCk9XCJyZW1vdmVUYWcoaXRlbSlcIj5cbiAgICAgICAgICB7e2l0ZW19fVxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWNoaXAtcm93PlxuICAgICAgICB9XG4gICAgICA8L21hdC1jaGlwLWdyaWQ+XG4gICAgICA8aW5wdXQgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwc1wiXG4gICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiXG4gICAgICAgICAgICAgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkVGFnKCRldmVudClcIj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48IS0tbm90aWZpY2F0aW9ucy0tPlxuPG5nLXRlbXBsYXRlICNub3RpZmljYXRpb25zVG1wbD5cbiAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm0uY29udHJvbHMubm90aWZpY2F0aW9uc1wiIGNsYXNzPVwiY29sdW1uXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCI+e3snQWN0aXZlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxiciAvPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cIm15RG9jdW1lbnRTdGF0ZUNoYW5nZVwiPnt7J015U3RhdGVDaGFuZ2UnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYW55RG9jdW1lbnRTdGF0ZUNoYW5nZVwiPnt7J0FueVN0YXRlQ2hhbmdlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImNvbW1lbnRNeURvY3VtZW50XCI+e3snQ29tbWVudE15RG9jdW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudEFueURvY3VtZW50XCI+e3snQ29tbWVudEFueURvY3VtZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImxpa2VzXCIgW3N0eWxlLmRpc3BsYXldPVwidm9hdGluZz8nJzonbm9uZSdcIj57eydMaWtlZENvbW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwidGFnZ2VkXCI+e3snVGFnZ2VkSW5Db21tZW50cycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJ1cGNvbWluZ0V2ZW50c1wiPnt7J1VwY29taW5nRXZlbnRzJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImN1YmVBbm9tYWx5XCI+e3snQ3ViZUFub21hbHknIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVTb3VuZCgpXCIgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbHVlLm5vdGlmaWNhdGlvbnMuYWN0aXZlXCIgW2JpemRvY1Rvb2x0aXBdPVwiKGZvcm0udmFsdWUubm90aWZpY2F0aW9ucy5zb3VuZCA/ICdTb3VuZE9uJzogJ1NvdW5kT2ZmJyl8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnt7Zm9ybS52YWx1ZS5ub3RpZmljYXRpb25zLnNvdW5kID8gJ3ZvbHVtZV91cCcgOiAndm9sdW1lX29mZid9fTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS1lbWFpbHMtLT5cbjxuZy10ZW1wbGF0ZSAjZW1haWxzVG1wbD5cbiAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm0uY29udHJvbHMuZW1haWxzXCIgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPGJyIC8+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibWFpbFwiPnt7J01haWxzJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImNoYXRcIj57eydDb252ZXJzYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cIm5vdGlmaWNhdGlvbnNcIj57eydFbWFpbE5vdGlmaWNhdGlvbnMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiZXZlbnRzXCI+e3snQWxhcm1FdmVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS1vb28tLT5cbjxuZy10ZW1wbGF0ZSAjb29vVG1wbD5cbiAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm0uY29udHJvbHMub3V0T2ZPZmZpY2VcIiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8YnIgLz5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cIm9vb0lkXCIgdHlwZT1cInNlYXJjaFwiIFttYXRBdXRvY29tcGxldGVdPVwic2F1dG9cIiAjc3Vic3RpdHVlSW5wdXRcbiAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Fzc29jaWF0ZScgfCB0cmFuc2xhdGVcIiBbcmVxdWlyZWRdPVwiZm9ybS52YWx1ZS5vdXRPZk9mZmljZS5hY3RpdmVcIiAvPlxuICAgICAgPG1hdC1hdXRvY29tcGxldGUgI3NhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIm9vb1NlbGVjdGVkKCRldmVudClcIj5cbiAgICAgICAgQGZvciAodSBvZiBzdXNlcnMkIHwgYXN5bmM7IHRyYWNrIHUuaWQpIHtcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInVcIj5cbiAgICAgICAgICA8c3Bhbj57e3UubmFtZX19PC9zcGFuPlxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgIDxtYXQtaGludD57eydPdXRPZk9mZmljZVRpcCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPnt7J0RhdGVzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJkYXRlc1wiPlxuICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cImZyb21cIiBbcGxhY2Vob2xkZXJdPVwiJ0Zyb20nfHRyYW5zbGF0ZVwiIFttaW5dPVwidG9kYXlcIj5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgZm9ybUNvbnRyb2xOYW1lPVwidG9cIiBbcGxhY2Vob2xkZXJdPVwiJ1RvJ3x0cmFuc2xhdGVcIj5cbiAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGVzXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNkYXRlcyBbdG91Y2hVaV09XCJpc01vYmlsZVwiPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS1ncmFudEFjY2Vzcy0tPlxuPG5nLXRlbXBsYXRlICNncmFudEFjY2Vzc1RtcGw+XG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtLmNvbnRyb2xzLmdyYW50QWNjZXNzXCIgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPGJyIC8+XG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD57eydBc3NvY2lhdGVzJ3wgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtY2hpcC1ncmlkICNncmFudExpc3QgW2F0dHIuYXJpYS1sYWJlbF09XCJcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsdWUuZ3JhbnRBY2Nlc3MuYWN0aXZlXCI+XG4gICAgICAgIEBmb3IgKHUgb2YgZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyB8fCBbXTsgdHJhY2sgdS5pZCkge1xuICAgICAgICA8bWF0LWNoaXAtcm93IChyZW1vdmVkKT1cInJlbW92ZUdyYW50KHUpXCI+XG4gICAgICAgICAge3t1IHwgdXNlck5hbWUgfCBhc3luY319XG4gICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cbiAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwiZ3JhbnRVc2VySWRzXCJcbiAgICAgICAgICAgICAjZ3JhbnRJbnB1dFxuICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiZ3JhbnRBdXRvXCJcbiAgICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImdyYW50TGlzdFwiXG4gICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiPlxuICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2dyYW50QXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJhZGRHcmFudChncmFudElucHV0LCAkZXZlbnQpXCI+XG4gICAgICAgIEBmb3IgKHUgb2YgZ3VzZXJzJCB8IGFzeW5jOyB0cmFjayB1LmlkKSB7XG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ1LmlkXCI+XG4gICAgICAgICAge3t1Lm5hbWV9fVxuICAgICAgICAgIEBpZiAodS5lbWFpbCkge1xuICAgICAgICAgIDxzcGFuPiZuYnNwOyAtIHt7dS5lbWFpbH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICA8bWF0LWhpbnQ+e3snR3JhbnRUaXAnIHwgdHJhbnNsYXRlfX08L21hdC1oaW50PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvb3B0aW9ucy9vcHRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9vcHRpb25zL29wdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQXlCLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUksT0FBTyxFQUFFLE9BQU8sRUFBcUIsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpHLE9BQU8sRUFBRSxZQUFZLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQXFCLGFBQWEsRUFBcUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUkzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7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O3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1ksaUJBQWlCO3NCQUFsRSxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkF5RVAsS0FBSztzQkFBN0MsWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEluamVjdGlvblRva2VuLCBJbmplY3QsIE9wdGlvbmFsLCBUZW1wbGF0ZVJlZiwgSW5wdXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUsIG1lcmdlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgTWF0Q2hpcElucHV0LCBNYXRDaGlwSW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgQ09NTUEsIEVOVEVSLCBTRU1JQ09MT04gfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IEJJWkRPQ19DT05GSUcsIEJpekRvY0NvbmZpZywgVGhlbWUgfSBmcm9tICcuLi9jb3JlL2NvbmZpZ3VyYXRpb24nO1xyXG5pbXBvcnQgeyBpc01vYmlsZSwgaXNTdHJpbmcgfSBmcm9tICcuLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEF2YWlsYWJpbGl0eVN0YXRlLCBBdmFpbGFibGVNb2RlLCBHdWlkZSwgT3B0aW9ucywgUHJvZmlsZSwgVXNlckluZm8gfSBmcm9tICcuLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB2ZXJ0aWNhbFN3YXBBbmltYXRpb24gfSBmcm9tICcuLi9jb3JlL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBHdWlkZVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2d1aWRlL2d1aWRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdWJTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9odWIuc2VydmljZSc7XHJcbmltcG9ydCB7IEh1YkNvbm5lY3Rpb25TdGF0ZSB9IGZyb20gJ0BtaWNyb3NvZnQvc2lnbmFscic7XHJcbmltcG9ydCB7IEFib3V0RGlhbG9nIH0gZnJvbSAnLi4vaG9tZS9hYm91dC9hYm91dC5kaWFsb2cnO1xyXG5cclxuZXhwb3J0IHR5cGUgT3B0aW9uVHlwZSA9ICdub3RpZmljYXRpb25zJyB8ICdlbWFpbHMnIHwgJ291dF9vZl9vZmZpY2UnIHwgJ2dyYW50X2FjY2VzcycgfCAncHJlZmVyZW5jZXMnO1xyXG5cclxuZXhwb3J0IGNvbnN0IE9QVElPTl9QQU5FTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPcHRpb25EYXRhPignb3B0aW9ucycpO1xyXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbkRhdGEge1xyXG4gIHNlY3Rpb246IE9wdGlvblR5cGU7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLW9wdGlvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vcHRpb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9vcHRpb25zLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW3ZlcnRpY2FsU3dhcEFuaW1hdGlvbl1cclxufSlcclxuLyoqIG9wdGlvbnMgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIE9wdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgb25saW5lOiBib29sZWFuO1xyXG4gIHRoZW1lOiBzdHJpbmc7XHJcbiAgYXZhaWxhYmxlOiBBdmFpbGFiaWxpdHlTdGF0ZTtcclxuICBndWlkZXNDb3VudDogbnVtYmVyIHwgbnVsbDtcclxuICByZWFkb25seSBsYW5ndWFnZXMgPSB0aGlzLl9zZXNzaW9uLmxhbmd1YWdlcztcclxuICByZWFkb25seSB0aGVtZXMgPSB0aGlzLl9zZXNzaW9uLlRoZW1lcztcclxuICByZWFkb25seSBndWlkZXM6IEd1aWRlW107XHJcbiAgcmVhZG9ubHkgY3VycmVudExhbmd1YWdlOiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgcHJvZmlsZTogUHJvZmlsZTtcclxuICByZWFkb25seSBtb2RlcyA9IEF2YWlsYWJsZU1vZGU7XHJcbiAgQFZpZXdDaGlsZCgnc3Vic3RpdHVlSW5wdXQnLCB7IHJlYWQ6IE1hdElucHV0IH0pIHN1YnN0aXR1ZUlucHV0OiBNYXRJbnB1dDtcclxuICBAVmlld0NoaWxkKCdncmFudElucHV0JywgeyByZWFkOiBNYXRDaGlwSW5wdXQgfSkgZ3JhbnRJbnB1dDogTWF0Q2hpcElucHV0O1xyXG4gIEBJbnB1dCgnc2VjdGlvbicpIHNlY3Rpb25OYW1lOiBPcHRpb25UeXBlO1xyXG4gIEBWaWV3Q2hpbGQoJ29vb1RtcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBvb29UbXBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ25vdGlmaWNhdGlvbnNUbXBsJywgeyBzdGF0aWM6IHRydWUgfSkgbm90aWZpY2F0aW9uc1RtcGw6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgc2VjdGlvbkluZGV4ID0gMDtcclxuICBzZWN0aW9uVG1wbDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBzYXZlaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWRWYWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgY29uc3QgcGFyZW50ID0gKGNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cCk7XHJcbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5jb250cm9sc1snYWN0aXZlJ10udmFsdWUgJiYgIWNvbnRyb2wudmFsdWUpIHJldHVybiB7XHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgcmVhZG9ubHkgZ3JhbnRVc2VySWRzID0gdGhpcy5fZmIuY29udHJvbChbXSk7XHJcbiAgcmVhZG9ubHkgb29vSWQgPSB0aGlzLl9mYi5jb250cm9sPFVzZXJJbmZvIHwgc3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIG5vdGlmaWNhdGlvbnM6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgbGlrZXM6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjb21tZW50TXlEb2N1bWVudDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGNvbW1lbnRBbnlEb2N1bWVudDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHVwY29taW5nRXZlbnRzOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgdGFnZ2VkOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgYW55RG9jdW1lbnRTdGF0ZUNoYW5nZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIG15RG9jdW1lbnRTdGF0ZUNoYW5nZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGN1YmVBbm9tYWx5OiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgc291bmQ6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgfSksXHJcbiAgICB0YWdzOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZ1tdIHwgbnVsbD4obnVsbCksXHJcbiAgICBlbWFpbHM6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgbWFpbDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGNoYXQ6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBub3RpZmljYXRpb25zOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgZXZlbnRzOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKVxyXG4gICAgfSksXHJcbiAgICBvdXRPZk9mZmljZTogdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBhY3RpdmU6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBzdWJzdGl0dWVJZDogdGhpcy5fZmIuY29udHJvbDxVc2VySW5mbyB8IHN0cmluZyB8IG51bGw+KG51bGwsIHRoaXMuX3JlcXVpcmVkVmFsaWRhdG9yKSxcclxuICAgICAgZnJvbTogdGhpcy5fZmIuY29udHJvbDxEYXRlIHwgbnVsbD4obnVsbCksXHJcbiAgICAgIHRvOiB0aGlzLl9mYi5jb250cm9sPERhdGUgfCBudWxsPihudWxsKVxyXG4gICAgfSksXHJcbiAgICBncmFudEFjY2VzczogdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBhY3RpdmU6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICB1c2VyczogdGhpcy5fZmIuY29udHJvbDxzdHJpbmdbXT4oW10sIHRoaXMuX3JlcXVpcmVkVmFsaWRhdG9yKVxyXG4gICAgfSlcclxuICB9KTtcclxuICBzdXNlcnMkOiBPYnNlcnZhYmxlPFVzZXJJbmZvW10+O1xyXG4gIGd1c2VycyQ6IE9ic2VydmFibGU8VXNlckluZm9bXT47XHJcbiAgdm90aW5nOiBib29sZWFuO1xyXG4gIHJlYWRvbmx5IG9wdGlvbnM6IE9wdGlvbnM7XHJcbiAgcmVhZG9ubHkgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gIHJlYWRvbmx5IGlzTW9iaWxlID0gaXNNb2JpbGUoKTtcclxuICByZWFkb25seSBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSLCBDT01NQSwgU0VNSUNPTE9OXTtcclxuICAvKiogb3B0aW9ucyBjdG9yICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX2d1aWRlOiBHdWlkZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9odWI6IEh1YlNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX2ZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgX2FjY291bnRzOiBBY2NvdW50U2VydmljZSxcclxuICAgIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJJWkRPQ19DT05GSUcpIGNvbmZpZzogQml6RG9jQ29uZmlnKSB7XHJcbiAgICB0aGlzLmd1aWRlcyA9IHRoaXMuX2d1aWRlLmd1aWRlcy5maWx0ZXIoZyA9PiBnLm1vZGUgIT09ICdQcml2YXRlJyk7XHJcbiAgICB0aGlzLmxhbmd1YWdlcyA9IHRoaXMuX3Nlc3Npb24ubGFuZ3VhZ2VzO1xyXG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UgPSB0aGlzLl9zZXNzaW9uLmxhbmd1YWdlO1xyXG4gICAgdGhpcy5hdmFpbGFibGUgPSB0aGlzLl9zZXNzaW9uLnN0YXRlO1xyXG4gICAgdGhpcy50aGVtZSA9IHRoaXMuX3Nlc3Npb24udGhlbWUubmFtZTtcclxuICAgIHRoaXMucHJvZmlsZSA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZTtcclxuICAgIHRoaXMudm90aW5nID0gIWNvbmZpZy5jb21tZW50cyB8fCBjb25maWcuY29tbWVudHMudm90aW5nICE9PSBmYWxzZTtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5vcHRpb25zO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScpIGNsb3NlKCkge1xyXG4gICAgdGhpcy5mb3JtLnZhbGlkICYmXHJcbiAgICAgIHRoaXMuc2F2ZSgpO1xyXG4gICAgaGlzdG9yeS5iYWNrKCk7XHJcbiAgfVxyXG4gIHJldml2ZSgpIHtcclxuICAgIHRoaXMuX2h1Yi5zdGFydCgpO1xyXG4gIH1cclxuICBhYm91dCgpIHtcclxuICAgIHRoaXMuX2RpYWxvZy5vcGVuKEFib3V0RGlhbG9nKTtcclxuICB9XHJcbiAgZ3VpZGUoZ3VpZGU6IHN0cmluZykge1xyXG4gICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgdGhpcy5fZ3VpZGUuc3RhcnQoZ3VpZGUpO1xyXG4gIH1cclxuICBzZXRBdmFpbGFibGUodmFsOiBBdmFpbGFiaWxpdHlTdGF0ZSkge1xyXG4gICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi5zdGF0ZSA9IHZhbDtcclxuICB9XHJcbiAgY2hhbmdlVGhlbWUobmFtZTogVGhlbWUpIHtcclxuICAgIHRoaXMuX3Nlc3Npb24udGhlbWUgPSBuYW1lO1xyXG4gIH1cclxuICBjaGFuZ2VMYW5ndWFnZShjb2RlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3Nlc3Npb24ubGFuZ3VhZ2UgPSBjb2RlO1xyXG4gICAgdGhpcy5fcHMubWFzaygnUmVmcmVzaGluZycpO1xyXG4gICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5faHViLnN0YXRlJC5waXBlKHN0YXJ0V2l0aCh0aGlzLl9odWIuc3RhdGUpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShzID0+XHJcbiAgICAgIHRoaXMub25saW5lID0gcyA9PT0gSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RlZFxyXG4gICAgKTtcclxuICAgIGlmICghdGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpIHtcclxuICAgICAgdGhpcy5ndWlkZXNDb3VudCA9IHRoaXMuZ3VpZGVzLmZpbHRlcih3ID0+IHcubW9kZSA9PT0gJ0VhZ2VyJykubGVuZ3RoIHx8IG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCB7IG91dE9mT2ZmaWNlLCBncmFudEFjY2Vzcywgbm90aWZpY2F0aW9ucywgZW1haWxzIH0gPSB0aGlzLmZvcm0uY29udHJvbHM7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLm9wdGlvbnMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLm5vdGlmaWNhdGlvbnMhLmFjdGl2ZSlcclxuICAgICAgdGhpcy5fdG9nZ2xlKG5vdGlmaWNhdGlvbnMsIGZhbHNlLCAnbGlrZXMnLFxyXG4gICAgICAgICdjb21tZW50TXlEb2N1bWVudCcsXHJcbiAgICAgICAgJ2NvbW1lbnRBbnlEb2N1bWVudCcsXHJcbiAgICAgICAgJ3VwY29taW5nRXZlbnRzJyxcclxuICAgICAgICAndGFnZ2VkJyxcclxuICAgICAgICAnYW55RG9jdW1lbnRTdGF0ZUNoYW5nZScsXHJcbiAgICAgICAgJ215RG9jdW1lbnRTdGF0ZUNoYW5nZScsXHJcbiAgICAgICAgJ2N1YmVBbm9tYWx5Jyk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5lbWFpbHMhLmFjdGl2ZSlcclxuICAgICAgdGhpcy5fdG9nZ2xlKGVtYWlscywgZmFsc2UsICdtYWlsJyxcclxuICAgICAgICAnY2hhdCcsXHJcbiAgICAgICAgJ25vdGlmaWNhdGlvbnMnLFxyXG4gICAgICAgICdldmVudHMnKTtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLmdyYW50QWNjZXNzIS5hY3RpdmUpXHJcbiAgICAgIHRoaXMuZ3JhbnRVc2VySWRzLmRpc2FibGUoKTtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLm91dE9mT2ZmaWNlIS5hY3RpdmUpIHtcclxuICAgICAgdGhpcy5vb29JZC5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgZmFsc2UsICdmcm9tJywgJ3RvJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghdGhpcy5vcHRpb25zLm91dE9mT2ZmaWNlIS5mcm9tKVxyXG4gICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGZhbHNlLCAndG8nKTtcclxuICAgIC8vIGNoYW5nZVxyXG4gICAgbm90aWZpY2F0aW9ucy5jb250cm9scy5hY3RpdmUudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKGFjdGl2ZSA9PlxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZShub3RpZmljYXRpb25zLCBhY3RpdmUgYXMgYm9vbGVhbiwgJ2xpa2VzJyxcclxuICAgICAgICAgICdjb21tZW50TXlEb2N1bWVudCcsXHJcbiAgICAgICAgICAnY29tbWVudEFueURvY3VtZW50JyxcclxuICAgICAgICAgICd1cGNvbWluZ0V2ZW50cycsXHJcbiAgICAgICAgICAndGFnZ2VkJyxcclxuICAgICAgICAgICdhbnlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAgICdteURvY3VtZW50U3RhdGVDaGFuZ2UnLFxyXG4gICAgICAgICAgJ2N1YmVBbm9tYWx5JykpO1xyXG4gICAgZW1haWxzLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHRoaXMuX3RvZ2dsZShlbWFpbHMsIGFjdGl2ZSBhcyBib29sZWFuLCAnbWFpbCcsXHJcbiAgICAgICAgJ2NoYXQnLFxyXG4gICAgICAgICdub3RpZmljYXRpb25zJyxcclxuICAgICAgICAnZXZlbnRzJykpO1xyXG4gICAgZ3JhbnRBY2Nlc3MuY29udHJvbHMuYWN0aXZlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZShhY3RpdmUgPT4ge1xyXG4gICAgICAgIGlmIChhY3RpdmUpIHtcclxuICAgICAgICAgIHRoaXMuZ3JhbnRVc2VySWRzLmVuYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5ncmFudElucHV0LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5ncmFudFVzZXJJZHMuZW5hYmxlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgb3V0T2ZPZmZpY2UuY29udHJvbHMuYWN0aXZlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZShhY3RpdmUgPT4ge1xyXG4gICAgICAgIGlmIChhY3RpdmUpIHtcclxuICAgICAgICAgIHRoaXMub29vSWQuZW5hYmxlKCk7XHJcbiAgICAgICAgICB0aGlzLnN1YnN0aXR1ZUlucHV0LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMub29vSWQuZGlzYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgYWN0aXZlIGFzIGJvb2xlYW4sICdmcm9tJyk7XHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlKG91dE9mT2ZmaWNlLCAoYWN0aXZlIGFzIGJvb2xlYW4pICYmIG91dE9mT2ZmaWNlLmNvbnRyb2xzLmZyb20udmFsdWUgIT0gbnVsbCwgJ3RvJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgb3V0T2ZPZmZpY2UuY29udHJvbHMuZnJvbS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoZnJvbSA9PlxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgZnJvbSAhPT0gbnVsbCwgJ3RvJykpO1xyXG4gICAgdGhpcy5ndXNlcnMkID0gdGhpcy5ncmFudFVzZXJJZHMudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxyXG4gICAgICBmaWx0ZXIodiA9PiBpc1N0cmluZyh2KSksXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMDApLFxyXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLl9hY2NvdW50cy5maW5kQWxsKHYgYXMgYW55KSksXHJcbiAgICAgIG1hcChyID0+IHtcclxuICAgICAgICBjb25zdCBleGNsdWRlID0gKGdyYW50QWNjZXNzLnZhbHVlLnVzZXJzIGFzIHN0cmluZ1tdKT8uc2xpY2UoKSB8fCBbXTtcclxuICAgICAgICBleGNsdWRlLnB1c2godGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZCk7XHJcbiAgICAgICAgcmV0dXJuIHIuZmlsdGVyKHUgPT4gZXhjbHVkZS5pbmRleE9mKHUuaWQpIDwgMCk7XHJcbiAgICAgIH0pKTtcclxuICAgIHRoaXMuc3VzZXJzJCA9IHRoaXMub29vSWQudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpLFxyXG4gICAgICB0YXAodiA9PlxyXG4gICAgICAgICF2ICYmIG91dE9mT2ZmaWNlLmNvbnRyb2xzLnN1YnN0aXR1ZUlkLnNldFZhbHVlKG51bGwpXHJcbiAgICAgICksXHJcbiAgICAgIGZpbHRlcih2ID0+IGlzU3RyaW5nKHYpICYmIHYubGVuZ3RoID4gMCksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHRoaXMuX2FjY291bnRzLmZpbmRBbGwodiBhcyBzdHJpbmcpKSxcclxuICAgICAgbWFwKHIgPT4gci5maWx0ZXIodSA9PiB1LmlkICE9PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSkpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRPZk9mZmljZSEuc3Vic3RpdHVlSWQpXHJcbiAgICAgIHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm9wdGlvbnMub3V0T2ZPZmZpY2UhLnN1YnN0aXR1ZUlkKS5zdWJzY3JpYmUodSA9PlxyXG4gICAgICAgIHRoaXMub29vSWQuc2V0VmFsdWUodSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcclxuICAgIC8vIGF1dG8gc2F2ZVxyXG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSwgZGVib3VuY2VUaW1lKDM1MCkpLnN1YnNjcmliZSgoKSA9PlxyXG4gICAgICB0aGlzLmZvcm0udmFsaWQgJiYgdGhpcy5zYXZlKClcclxuICAgICk7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VjdGlvbk5hbWUpIHtcclxuICAgICAgY2FzZSAnb3V0X29mX29mZmljZSc6XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uVG1wbCA9IHRoaXMub29vVG1wbDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25JbmRleCA9IDI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ25vdGlmaWNhdGlvbnMnOlxyXG4gICAgICAgIHRoaXMuc2VjdGlvblRtcGwgPSB0aGlzLm5vdGlmaWNhdGlvbnNUbXBsO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbkluZGV4ID0gMDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgbmF2KHNlY3Rpb25OYW1lOiBPcHRpb25UeXBlLCB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWN0aW9uTmFtZSA9IHNlY3Rpb25OYW1lO1xyXG4gICAgdGhpcy5zZWN0aW9uVG1wbCA9IHRlbXBsYXRlO1xyXG4gICAgdGhpcy5zZWN0aW9uSW5kZXggPSBpbmRleDtcclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIHRoaXMuc2F2ZWluZyA9IHRydWU7XHJcbiAgICB0aGlzLl9zZXNzaW9uLnVwZGF0ZSh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSBhcyBhbnkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpLFxyXG4gICAgICBlcnJvcjogKCkgPT4gdGhpcy5fc2IuZXJyb3IoKSxcclxuICAgICAgY29tcGxldGU6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zYXZlaW5nID0gZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF90b2dnbGUoZ3JvdXA6IEZvcm1Hcm91cCwgYWN0aXZlOiBib29sZWFuLCAuLi5jb250cm9sczogc3RyaW5nW10pIHtcclxuICAgIGNvbnRyb2xzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGlmICghYWN0aXZlKSBncm91cC5jb250cm9sc1tuYW1lXS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgZWxzZSBncm91cC5jb250cm9sc1tuYW1lXS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRvZ2dsZVNvdW5kKCkge1xyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLm5vdGlmaWNhdGlvbnMuY29udHJvbHMuc291bmQuc2V0VmFsdWUoIXRoaXMuZm9ybS5jb250cm9scy5ub3RpZmljYXRpb25zLmNvbnRyb2xzLnNvdW5kLnZhbHVlKTtcclxuICB9XHJcbiAgZGlzcGxheSA9IChpdGVtOiBVc2VySW5mbykgPT4ge1xyXG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLm5hbWUgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYWRkVGFnKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCkge1xyXG4gICAgY29uc3QgeyBjaGlwSW5wdXQsIHZhbHVlIH0gPSBldmVudDtcclxuXHJcbiAgICAvLyBBZGQgb3VyIGZydWl0XHJcbiAgICBpZiAoKHZhbHVlIHx8ICcnKS50cmltKCkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnRhZ3MhLnB1c2godmFsdWUudHJpbSgpKTtcclxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc2V0IHRoZSBpbnB1dCB2YWx1ZSBcclxuICAgIGNoaXBJbnB1dD8uY2xlYXIoKTtcclxuICB9XHJcbiAgcmVtb3ZlVGFnKHRhZzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMudGFncyEucmVtb3ZlKHRhZyk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpZFxyXG4gICAqL1xyXG4gIHJlbW92ZUdyYW50KGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJzID0gdGhpcy5mb3JtLnZhbHVlLmdyYW50QWNjZXNzIS51c2VycyBhcyBzdHJpbmdbXTtcclxuICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuaW5kZXhPZihpZCk7XHJcblxyXG4gICAgaWYgKGluZGV4ID49IDApXHJcbiAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbnBcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBhZGRHcmFudChpbnA6IEhUTUxJbnB1dEVsZW1lbnQsIGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VycyA9IHRoaXMuZm9ybS52YWx1ZS5ncmFudEFjY2VzcyEudXNlcnMgYXMgc3RyaW5nW107XHJcbiAgICBjb25zdCBpZCA9IGV2ZW50Lm9wdGlvbi52YWx1ZSBhcyBzdHJpbmc7XHJcbiAgICBpZiAoIXVzZXJzKVxyXG4gICAgICAodGhpcy5mb3JtLmNvbnRyb2xzLmdyYW50QWNjZXNzKS5jb250cm9scy51c2Vycy5zZXRWYWx1ZShbaWRdKTtcclxuICAgIGVsc2VcclxuICAgICAgdXNlcnMucHVzaChpZCk7XHJcbiAgICBpbnAudmFsdWUgPSAnJztcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHt9KTtcclxuICB9XHJcbiAgb29vU2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpIHtcclxuICAgICh0aGlzLmZvcm0uY29udHJvbHMub3V0T2ZPZmZpY2UpLmNvbnRyb2xzLnN1YnN0aXR1ZUlkLnNldFZhbHVlKChldmVudC5vcHRpb24udmFsdWUgYXMgVXNlckluZm8pLmlkKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0uZGlydHkgJiYgdGhpcy5zYXZlKCk7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbHVtblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJwcm9maWxlLW5hbWVcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwibWF0LWhlYWRsaW5lLTZcIj5cclxuICAgICAgQGlmIChwcm9maWxlLmJ5TmFtZSkge1xyXG4gICAgICB7e3Byb2ZpbGUuYnlOYW1lfX0gXFxcclxuICAgICAgfVxyXG4gICAgICB7e3Byb2ZpbGUubmFtZX19XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtZGl2aWRlciAvPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8bWF0LW5hdi1saXN0IGNsYXNzPVwibmF2LWxpc3RcIj5cclxuICAgICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm5hdignbm90aWZpY2F0aW9ucycsIG5vdGlmaWNhdGlvbnNUbXBsLCAwKVwiIFtjbGFzcy5hY3RpdmVdPVwic2VjdGlvbk5hbWUgPT09ICdub3RpZmljYXRpb25zJ1wiPlxyXG4gICAgICAgIDxzcGFuIG1hdExpc3RJdGVtVGl0bGU+e3snTm90aWZpY2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPC9tYXQtbGlzdC1pdGVtPlxyXG4gICAgICA8bWF0LWxpc3QtaXRlbSAoY2xpY2spPVwibmF2KCdlbWFpbHMnLCBlbWFpbHNUbXBsLCAxKVwiIFtjbGFzcy5hY3RpdmVdPVwic2VjdGlvbk5hbWUgPT09ICdlbWFpbHMnXCI+XHJcbiAgICAgICAgPHNwYW4gbWF0TGlzdEl0ZW1UaXRsZT57eydFbWFpbHMnIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuICAgICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm5hdignb3V0X29mX29mZmljZScsIG9vb1RtcGwsIDIpXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWN0aW9uTmFtZSA9PT0gJ291dF9vZl9vZmZpY2UnXCI+XHJcbiAgICAgICAgPHNwYW4gbWF0TGlzdEl0ZW1UaXRsZT57eydPdXRPZk9mZmljZScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPC9tYXQtbGlzdC1pdGVtPlxyXG4gICAgICA8bWF0LWxpc3QtaXRlbSAoY2xpY2spPVwibmF2KCdncmFudF9hY2Nlc3MnLCBncmFudEFjY2Vzc1RtcGwsIDMpXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWN0aW9uTmFtZSA9PT0gJ2dyYW50X2FjY2VzcydcIj5cclxuICAgICAgICA8c3BhbiBtYXRMaXN0SXRlbVRpdGxlPnt7J0dyYW50QWNjZXNzJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L21hdC1saXN0LWl0ZW0+XHJcbiAgICAgIDxtYXQtbGlzdC1pdGVtIChjbGljayk9XCJuYXYoJ3ByZWZlcmVuY2VzJywgcHJlZmVyZW5jZXNUbXBsLCA0KVwiIFtjbGFzcy5hY3RpdmVdPVwic2VjdGlvbk5hbWUgPT09ICdwcmVmZXJlbmNlcydcIj5cclxuICAgICAgICA8c3BhbiBtYXRMaXN0SXRlbVRpdGxlPnt7J1ByZWZlcmVuY2VzJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L21hdC1saXN0LWl0ZW0+XHJcbiAgICA8L21hdC1uYXYtbGlzdD5cclxuICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIj48L2Rpdj5cclxuICAgIDxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtAdi1zd2FwZV09XCJzZWN0aW9uSW5kZXhcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlY3Rpb25UbXBsXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbiAgPG1hdC1kaXZpZGVyIC8+XHJcbiAgPCEtLWtleXMtLT5cclxuICBAaWYoIWlzTW9iaWxlKSB7XHJcbiAgPGRsIGNsYXNzPVwia2V5cyBtYXQtYm9keS0yXCI+XHJcbiAgICA8ZHQ+QWx0K248L2R0PlxyXG4gICAgPGRkPnt7J0FsdE5IZWxwJ3x0cmFuc2xhdGV9fTwvZGQ+XHJcbiAgICA8ZHQ+Q3RybCtzPC9kdD5cclxuICAgIDxkZD57eydDdHJsU0hlbHAnfHRyYW5zbGF0ZX19PC9kZD5cclxuICAgIDxkdD5BbHQrczwvZHQ+XHJcbiAgICA8ZGQ+e3snQWx0U0hlbHAnfHRyYW5zbGF0ZX19PC9kZD5cclxuICAgIDxkdD5BbHQrcTwvZHQ+XHJcbiAgICA8ZGQ+e3snQWx0UUhlbHAnfHRyYW5zbGF0ZX19PC9kZD5cclxuICAgIDxkdD5BbHQrYTwvZHQ+XHJcbiAgICA8ZGQ+e3snQWx0QUhlbHAnfHRyYW5zbGF0ZX19PC9kZD5cclxuICAgIDxkdD5BbHQraDwvZHQ+XHJcbiAgICA8ZGQ+e3snQWx0SEhlbHAnfHRyYW5zbGF0ZX19PC9kZD5cclxuICAgIDxkdD5DdHJsKy48L2R0PlxyXG4gICAgPGRkPnt7J0N0cmxEb3RIZWxwJ3x0cmFuc2xhdGV9fTwvZGQ+XHJcbiAgPC9kbD5cclxuICB9XHJcbiAgPCEtLXRoZW1lcy0tPlxyXG4gIEBpZiAodGhlbWVzLmxlbmd0aCA+IDEpIHtcclxuICA8ZGl2IGNsYXNzPVwicm93IGNlbnRlclwiPlxyXG4gICAgQGZvciAodCBvZiB0aGVtZXM7IHRyYWNrIHQpIHtcclxuICAgIDxidXR0b24gKGNsaWNrKT1cImNoYW5nZVRoZW1lKHQpXCIgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwidGhlbWVcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJ0LmNvbG9yXCIgW2NsYXNzLmFjdGl2ZV09XCJ0Lm5hbWUgPT09IHRoZW1lXCIgW2NsYXNzLmRhcmtdPVwidC5kYXJrXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1RoZW1lJ3x0cmFuc2xhdGVcIj48L2J1dHRvbj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuICB9XHJcbjwvZGl2PlxyXG48IS0tZ3VpZGUtLT5cclxuPG1hdC1uYXYtbGlzdCByb2xlPVwibGlzdFwiPlxyXG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gIDxoMyBtYXQtc3ViaGVhZGVyIFttYXRCYWRnZV09XCJndWlkZXNDb3VudFwiIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIiBtYXRCYWRnZU92ZXJsYXA9XCJmYWxzZVwiIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCI+e3snSGVscCd8dHJhbnNsYXRlfX08L2gzPlxyXG4gIEBmb3IgKGcgb2YgZ3VpZGVzOyB0cmFjayBnKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJndWlkZShnLm5hbWUpXCI+e3tnLnRpdGxlfX08L2J1dHRvbj5cclxuICB9XHJcbjwvbWF0LW5hdi1saXN0PlxyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuPCEtLWZvb3Rlci0tPlxyXG48ZGl2IGNsYXNzPVwicm93IGZvb3RlclwiPlxyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiByb2xlPVwibGlzdGl0ZW1cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibGFuZ3VhZ2VcIj5cclxuICAgIHt7Y3VycmVudExhbmd1YWdlIHwgdHJhbnNsYXRlfX1cclxuICAgIDxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxyXG4gICAgPCEtLSdDaGFuZ2VMYW5ndWFnZSctLT5cclxuICA8L2J1dHRvbj5cclxuICA8bWF0LW1lbnUgI2xhbmd1YWdlPlxyXG4gICAgQGZvciAobCBvZiBsYW5ndWFnZXM7IHRyYWNrIGwpIHtcclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hhbmdlTGFuZ3VhZ2UobClcIj57e2wgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgfVxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgQGlmIChvbmxpbmUpIHtcclxuICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImF2YWlsYWJpbGl0eVwiPlxyXG4gICAge3snU2hvd0FzJyB8IHRyYW5zbGF0ZSA6IChhdmFpbGFibGUgfCB0cmFuc2xhdGUgfCBsb3dlcmNhc2UpfX1cclxuICAgIDxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICA8bWF0LW1lbnUgI2F2YWlsYWJpbGl0eT5cclxuICAgIEBmb3IgKG0gb2YgbW9kZXM7IHRyYWNrIG0pIHtcclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2V0QXZhaWxhYmxlKG0pXCI+e3ttIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgIH1cclxuICA8L21hdC1tZW51PlxyXG4gIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICA8YnV0dG9uIG1hdC1idXR0b24gcm9sZT1cImxpc3RpdGVtXCIgKGNsaWNrKT1cImFib3V0KClcIj57eyAnQWJvdXQnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICBAaWYgKCFvbmxpbmUpIHtcclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmV2aXZlKClcIiBbYml6ZG9jVG9vbHRpcF09XCInQ29ubmVjdCd8dHJhbnNsYXRlXCI+XHJcbiAgICA8bWF0LWljb24+d2lmaV9vZmY8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuPC9kaXY+XHJcbjwhLS1wcmVmZXJlbmNlcy0tPlxyXG48bmctdGVtcGxhdGUgI3ByZWZlcmVuY2VzVG1wbD5cclxuICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtbGFiZWw+e3snVGFncyd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgPG1hdC1jaGlwLWdyaWQgI2NoaXBzPlxyXG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgZm9ybS52YWx1ZS50YWdzOyB0cmFjayBpdGVtKSB7XHJcbiAgICAgICAgPG1hdC1jaGlwLXJvdyBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlZCk9XCJyZW1vdmVUYWcoaXRlbSlcIj5cclxuICAgICAgICAgIHt7aXRlbX19XHJcbiAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbWF0LWNoaXAtcm93PlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtY2hpcC1ncmlkPlxyXG4gICAgICA8aW5wdXQgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwc1wiXHJcbiAgICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCJcclxuICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRBZGRPbkJsdXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkVGFnKCRldmVudClcIj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS1ub3RpZmljYXRpb25zLS0+XHJcbjxuZy10ZW1wbGF0ZSAjbm90aWZpY2F0aW9uc1RtcGw+XHJcbiAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm0uY29udHJvbHMubm90aWZpY2F0aW9uc1wiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8YnIgLz5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cIm15RG9jdW1lbnRTdGF0ZUNoYW5nZVwiPnt7J015U3RhdGVDaGFuZ2UnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhbnlEb2N1bWVudFN0YXRlQ2hhbmdlXCI+e3snQW55U3RhdGVDaGFuZ2UnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50TXlEb2N1bWVudFwiPnt7J0NvbW1lbnRNeURvY3VtZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudEFueURvY3VtZW50XCI+e3snQ29tbWVudEFueURvY3VtZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibGlrZXNcIiBbc3R5bGUuZGlzcGxheV09XCJ2b3Rpbmc/Jyc6J25vbmUnXCI+e3snTGlrZWRDb21tZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwidGFnZ2VkXCI+e3snVGFnZ2VkSW5Db21tZW50cycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cInVwY29taW5nRXZlbnRzXCI+e3snVXBjb21pbmdFdmVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjdWJlQW5vbWFseVwiPnt7J0N1YmVBbm9tYWx5JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlU291bmQoKVwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWx1ZS5ub3RpZmljYXRpb25zLmFjdGl2ZVwiIFtiaXpkb2NUb29sdGlwXT1cIihmb3JtLnZhbHVlLm5vdGlmaWNhdGlvbnMuc291bmQgPyAnU291bmRPbic6ICdTb3VuZE9mZicpfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj57e2Zvcm0udmFsdWUubm90aWZpY2F0aW9ucy5zb3VuZCA/ICd2b2x1bWVfdXAnIDogJ3ZvbHVtZV9vZmYnfX08L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS1lbWFpbHMtLT5cclxuPG5nLXRlbXBsYXRlICNlbWFpbHNUbXBsPlxyXG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtLmNvbnRyb2xzLmVtYWlsc1wiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8YnIgLz5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cIm1haWxcIj57eydNYWlscycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImNoYXRcIj57eydDb252ZXJzYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibm90aWZpY2F0aW9uc1wiPnt7J0VtYWlsTm90aWZpY2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImV2ZW50c1wiPnt7J0FsYXJtRXZlbnRzJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tb29vLS0+XHJcbjxuZy10ZW1wbGF0ZSAjb29vVG1wbD5cclxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybS5jb250cm9scy5vdXRPZk9mZmljZVwiIGNsYXNzPVwiY29sdW1uXCI+XHJcbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8YnIgLz5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJvb29JZFwiIHR5cGU9XCJzZWFyY2hcIiBbbWF0QXV0b2NvbXBsZXRlXT1cInNhdXRvXCIgI3N1YnN0aXR1ZUlucHV0XHJcbiAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0Fzc29jaWF0ZScgfCB0cmFuc2xhdGVcIiBbcmVxdWlyZWRdPVwiZm9ybS52YWx1ZS5vdXRPZk9mZmljZS5hY3RpdmVcIiAvPlxyXG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjc2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvb29TZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgQGZvciAodSBvZiBzdXNlcnMkIHwgYXN5bmM7IHRyYWNrIHUuaWQpIHtcclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidVwiPlxyXG4gICAgICAgICAgPHNwYW4+e3t1Lm5hbWV9fTwvc3Bhbj5cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgIDxtYXQtaGludD57eydPdXRPZk9mZmljZVRpcCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J0RhdGVzJ3x0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cImRhdGVzXCI+XHJcbiAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJmcm9tXCIgW3BsYWNlaG9sZGVyXT1cIidGcm9tJ3x0cmFuc2xhdGVcIiBbbWluXT1cInRvZGF5XCI+XHJcbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgZm9ybUNvbnRyb2xOYW1lPVwidG9cIiBbcGxhY2Vob2xkZXJdPVwiJ1RvJ3x0cmFuc2xhdGVcIj5cclxuICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cclxuICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJkYXRlc1wiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNkYXRlcyBbdG91Y2hVaV09XCJpc01vYmlsZVwiPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLWdyYW50QWNjZXNzLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZ3JhbnRBY2Nlc3NUbXBsPlxyXG4gIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtLmNvbnRyb2xzLmdyYW50QWNjZXNzXCIgY2xhc3M9XCJjb2x1bW5cIj5cclxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDxiciAvPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7J0Fzc29jaWF0ZXMnfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8bWF0LWNoaXAtZ3JpZCAjZ3JhbnRMaXN0IFthdHRyLmFyaWEtbGFiZWxdPVwiXCIgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbHVlLmdyYW50QWNjZXNzLmFjdGl2ZVwiPlxyXG4gICAgICAgIEBmb3IgKHUgb2YgZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyB8fCBbXTsgdHJhY2sgdS5pZCkge1xyXG4gICAgICAgIDxtYXQtY2hpcC1yb3cgKHJlbW92ZWQpPVwicmVtb3ZlR3JhbnQodSlcIj5cclxuICAgICAgICAgIHt7dSB8IHVzZXJOYW1lIHwgYXN5bmN9fVxyXG4gICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgICAgICA8L21hdC1jaGlwLXJvdz5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cclxuICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJncmFudFVzZXJJZHNcIlxyXG4gICAgICAgICAgICAgI2dyYW50SW5wdXRcclxuICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiZ3JhbnRBdXRvXCJcclxuICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiZ3JhbnRMaXN0XCJcclxuICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2Rlc109XCJzZXBhcmF0b3JLZXlzQ29kZXNcIj5cclxuICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2dyYW50QXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJhZGRHcmFudChncmFudElucHV0LCAkZXZlbnQpXCI+XHJcbiAgICAgICAgQGZvciAodSBvZiBndXNlcnMkIHwgYXN5bmM7IHRyYWNrIHUuaWQpIHtcclxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidS5pZFwiPlxyXG4gICAgICAgICAge3t1Lm5hbWV9fVxyXG4gICAgICAgICAgQGlmICh1LmVtYWlsKSB7XHJcbiAgICAgICAgICA8c3Bhbj4mbmJzcDsgLSB7e3UuZW1haWx9fTwvc3Bhbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgIDxtYXQtaGludD57eydHcmFudFRpcCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|