@bizdoc/core 1.14.15 → 1.15.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/themes/brown.min.css +3 -3
- package/assets/themes/dark.min.css +3 -3
- package/assets/themes/deep-purple-light-blue.min.css +4 -4
- package/assets/themes/deep-purple-teal.min.css +4 -4
- package/assets/themes/default.min.css +4 -4
- package/assets/themes/green.min.css +3 -3
- package/assets/themes/indigo.min.css +3 -3
- package/esm2020/lib/admin/admin-dismiss.service.mjs +3 -3
- package/esm2020/lib/admin/admin-menu.component.mjs +9 -9
- package/esm2020/lib/admin/core/ace.input.mjs +5 -12
- package/esm2020/lib/admin/core/color-picker.input.mjs +7 -7
- package/esm2020/lib/admin/core/search.input.mjs +9 -16
- package/esm2020/lib/admin/diff/configuration-diff.component.mjs +17 -17
- package/esm2020/lib/admin/document-trace/document-trace.component.mjs +22 -22
- package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +13 -13
- package/esm2020/lib/admin/document-trace/trace-element.component.mjs +12 -12
- package/esm2020/lib/admin/form/form.resolve.service.mjs +3 -3
- package/esm2020/lib/admin/form/form.service.mjs +4 -4
- package/esm2020/lib/admin/form/workflow/node.component.mjs +11 -11
- package/esm2020/lib/admin/form/workflow/role-node.component.mjs +15 -15
- package/esm2020/lib/admin/form/workflow/workflow.component.mjs +12 -12
- package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +13 -13
- package/esm2020/lib/admin/patterns/patterns.component.mjs +19 -19
- package/esm2020/lib/admin/permissions/permissions.component.mjs +12 -12
- package/esm2020/lib/admin/positions/positions-popup.component.mjs +13 -13
- package/esm2020/lib/admin/positions/positions.component.mjs +21 -21
- package/esm2020/lib/admin/profiler/outofoffice.component.mjs +21 -21
- package/esm2020/lib/admin/profiler/profiler.component.mjs +19 -19
- package/esm2020/lib/admin/utility-wrapper.component.mjs +3 -3
- package/esm2020/lib/admin/utility.pane.component.mjs +3 -3
- package/esm2020/lib/app.component.mjs +6 -6
- package/esm2020/lib/bizdoc.module.mjs +11 -13
- package/esm2020/lib/browse/browse-items.component.mjs +25 -25
- package/esm2020/lib/browse/browse.mobile.component.mjs +17 -17
- package/esm2020/lib/browse/browse.pane.component.mjs +17 -17
- package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +13 -13
- package/esm2020/lib/browse/filter/filter.component.mjs +13 -13
- package/esm2020/lib/browse/folders-menu.component.mjs +12 -12
- package/esm2020/lib/chat/chat-info.mjs +3 -3
- package/esm2020/lib/chat/chat.mobile.component.mjs +7 -7
- package/esm2020/lib/chat/chat.service.mjs +3 -3
- package/esm2020/lib/chat/contacts.component.mjs +23 -23
- package/esm2020/lib/chat/contacts.pane.component.mjs +3 -3
- package/esm2020/lib/chat/conversation.component.mjs +11 -11
- package/esm2020/lib/chat/conversation.pane.component.mjs +6 -12
- package/esm2020/lib/compose/action/action-picker.component.mjs +9 -9
- package/esm2020/lib/compose/action/action.dialog.mjs +7 -7
- package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +5 -5
- package/esm2020/lib/compose/action/assign-action.component.mjs +12 -12
- package/esm2020/lib/compose/action/moveto-action.component.mjs +10 -10
- package/esm2020/lib/compose/action/return-action.component.mjs +12 -12
- package/esm2020/lib/compose/attachments/attachments.component.mjs +10 -10
- package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +8 -8
- package/esm2020/lib/compose/attachments/progress-button.directive.mjs +3 -3
- package/esm2020/lib/compose/can-deactivate-changes.service.mjs +3 -3
- package/esm2020/lib/compose/comments/comment.component.mjs +15 -15
- package/esm2020/lib/compose/comments/comments.component.mjs +7 -7
- package/esm2020/lib/compose/comments/{Comments.pane.component.mjs → comments.pane.component.mjs} +6 -14
- package/esm2020/lib/compose/comments/edit-comment.component.mjs +3 -3
- package/esm2020/lib/compose/comments/edits.component.mjs +10 -10
- package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +5 -5
- package/esm2020/lib/compose/comments/votes.component.mjs +10 -10
- package/esm2020/lib/compose/compose-resolve.service.mjs +6 -6
- package/esm2020/lib/compose/compose.mobile.component.mjs +17 -17
- package/esm2020/lib/compose/compose.pane.component.mjs +13 -13
- package/esm2020/lib/compose/copy/copy.dialog.mjs +8 -8
- package/esm2020/lib/compose/dismiss.service.mjs +3 -3
- package/esm2020/lib/compose/document-resolver.service.mjs +3 -3
- package/esm2020/lib/compose/document.component.mjs +3 -3
- package/esm2020/lib/compose/document.mobile.component.mjs +3 -3
- package/esm2020/lib/compose/document.pane.component.mjs +3 -3
- package/esm2020/lib/compose/events/events.component.mjs +8 -8
- package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +8 -8
- package/esm2020/lib/compose/form.component.mjs +7 -7
- package/esm2020/lib/compose/new-menu.component.mjs +9 -9
- package/esm2020/lib/compose/privilage.directive.mjs +6 -6
- package/esm2020/lib/compose/recipient-resolver.service.mjs +3 -3
- package/esm2020/lib/compose/state.component.mjs +3 -3
- package/esm2020/lib/compose/tag/tags.component.mjs +8 -8
- package/esm2020/lib/compose/trace/flow.component.mjs +63 -82
- package/esm2020/lib/compose/trace/people.component.mjs +5 -5
- package/esm2020/lib/compose/trace/trace.base.mjs +16 -7
- package/esm2020/lib/compose/trace/trace.component.mjs +16 -24
- package/esm2020/lib/compose/trace/trace.pane.component.mjs +3 -3
- package/esm2020/lib/compose/version-compare/version-compare.component.mjs +3 -3
- package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +9 -9
- package/esm2020/lib/compose/version-compare/version.pane.component.mjs +11 -11
- package/esm2020/lib/core/NgComponentOutlet.mjs +3 -3
- package/esm2020/lib/core/account.service.mjs +3 -3
- package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
- package/esm2020/lib/core/avatar/avatar.component.mjs +3 -3
- package/esm2020/lib/core/component-factory-resolver.mjs +3 -3
- package/esm2020/lib/core/controls/address.input.mjs +11 -17
- package/esm2020/lib/core/controls/auto-complete.input.mjs +11 -11
- package/esm2020/lib/core/controls/combination-picker-body.mjs +11 -11
- package/esm2020/lib/core/controls/combination-picker.mjs +3 -3
- package/esm2020/lib/core/controls/combination-pool.mjs +7 -7
- package/esm2020/lib/core/controls/file.input.mjs +10 -10
- package/esm2020/lib/core/controls/select.input.mjs +6 -6
- package/esm2020/lib/core/controls/time-picker.mjs +9 -9
- package/esm2020/lib/core/controls/timespan.input.mjs +8 -35
- package/esm2020/lib/core/datasource.service.mjs +3 -3
- package/esm2020/lib/core/guide/guide.component.mjs +10 -10
- package/esm2020/lib/core/guide/guide.service.mjs +3 -3
- package/esm2020/lib/core/guide/help-tip.component.mjs +11 -23
- package/esm2020/lib/core/http.interceptor.mjs +3 -3
- package/esm2020/lib/core/hub.service.mjs +3 -3
- package/esm2020/lib/core/identity/identity.component.mjs +5 -5
- package/esm2020/lib/core/info/attachment-info.service.mjs +3 -3
- package/esm2020/lib/core/info/document-info.service.mjs +3 -3
- package/esm2020/lib/core/info/location-info.component.mjs +3 -3
- package/esm2020/lib/core/info/map-info.mjs +3 -3
- package/esm2020/lib/core/layout/autocomplete.field.mjs +8 -8
- package/esm2020/lib/core/layout/checkbox.field.mjs +7 -7
- package/esm2020/lib/core/layout/checkbox.mjs +6 -6
- package/esm2020/lib/core/layout/date-range.field.mjs +6 -6
- package/esm2020/lib/core/layout/date.field.mjs +9 -9
- package/esm2020/lib/core/layout/expression.field.mjs +8 -8
- package/esm2020/lib/core/layout/file.field.mjs +11 -9
- package/esm2020/lib/core/layout/html.field.mjs +8 -8
- package/esm2020/lib/core/layout/input.base.mjs +4 -5
- package/esm2020/lib/core/layout/input.field.mjs +8 -8
- package/esm2020/lib/core/layout/layout.component.mjs +3 -3
- package/esm2020/lib/core/layout/numeric.field.mjs +8 -8
- package/esm2020/lib/core/layout/select.field.mjs +10 -10
- package/esm2020/lib/core/layout/switch.field.mjs +7 -7
- package/esm2020/lib/core/layout/textarea.field.mjs +8 -8
- package/esm2020/lib/core/layout/timespan.field.mjs +9 -9
- package/esm2020/lib/core/lottie-animation.mjs +3 -3
- package/esm2020/lib/core/mailbox.service.mjs +3 -3
- package/esm2020/lib/core/models.mjs +1 -1
- package/esm2020/lib/core/none.component.mjs +7 -7
- package/esm2020/lib/core/pipes/action.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/calendar.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/date-format.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/daterange.pipe.mjs +6 -6
- package/esm2020/lib/core/pipes/difference.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/duration-format.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/duration.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/form.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/join.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/role.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/sort.pipe.mjs +6 -6
- package/esm2020/lib/core/pipes/state.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/time-ago.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/translate.pipe.mjs +6 -6
- package/esm2020/lib/core/pipes/type-value.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/user-name.pipe.mjs +3 -3
- package/esm2020/lib/core/popup/popup.component.mjs +3 -3
- package/esm2020/lib/core/popup/popup.service.mjs +3 -3
- package/esm2020/lib/core/popup/tooltip.directive.mjs +6 -6
- package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +5 -5
- package/esm2020/lib/core/prompt/mask/mask.component.mjs +3 -3
- package/esm2020/lib/core/prompt.service.mjs +3 -3
- package/esm2020/lib/core/router.mjs +6 -6
- package/esm2020/lib/core/save-changes.dialog.mjs +5 -5
- package/esm2020/lib/core/session.service.mjs +3 -3
- package/esm2020/lib/core/slots/router.directive.mjs +3 -3
- package/esm2020/lib/core/slots/router.service.mjs +3 -3
- package/esm2020/lib/core/slots/slots.component.mjs +14 -14
- package/esm2020/lib/core/tagging/documents.component.mjs +7 -7
- package/esm2020/lib/core/tagging/edit-input.component.mjs +10 -10
- package/esm2020/lib/core/tagging/emoji.component.mjs +4 -4
- package/esm2020/lib/core/tagging/tagging-item.directive.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging.component-base.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging.directive.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging.pipe.mjs +3 -3
- package/esm2020/lib/core/tagging/users.component.mjs +7 -7
- package/esm2020/lib/core/translate.service.mjs +3 -3
- package/esm2020/lib/core/window-title.service.mjs +3 -3
- package/esm2020/lib/cube/accum/accum.component.mjs +3 -3
- package/esm2020/lib/cube/chart/chart.component.mjs +3 -3
- package/esm2020/lib/cube/cube-info.service.mjs +3 -3
- package/esm2020/lib/cube/cube-menu.component.mjs +10 -10
- package/esm2020/lib/cube/cube-view.component.mjs +3 -3
- package/esm2020/lib/cube/cube.service.mjs +3 -3
- package/esm2020/lib/cube/explore/document-item.component.mjs +3 -3
- package/esm2020/lib/cube/explore/explore-item.component.mjs +3 -3
- package/esm2020/lib/cube/explore/explore-items.component.mjs +8 -8
- package/esm2020/lib/cube/explore/explore.pane.component.mjs +12 -15
- package/esm2020/lib/cube/explore/item-resolver.service.mjs +6 -6
- package/esm2020/lib/cube/explore/item.pane.component.mjs +3 -3
- package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +7 -7
- package/esm2020/lib/cube/filter/filter.component.mjs +11 -11
- package/esm2020/lib/cube/grid/grid.component.mjs +3 -3
- package/esm2020/lib/cube/grid/spreadsheet.component.mjs +3 -3
- package/esm2020/lib/cube/matrix/matrix.base.mjs +6 -10
- package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +20 -16
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +20 -16
- package/esm2020/lib/cube/matrix/popup.component.mjs +11 -11
- package/esm2020/lib/cube/matrix/table.component.mjs +4 -4
- package/esm2020/lib/cube/parallel/parallel.component.mjs +5 -5
- package/esm2020/lib/cube/pivot/pivot.component.mjs +6 -11
- package/esm2020/lib/cube/sum/sum.component.mjs +6 -6
- package/esm2020/lib/cube/view-base.mjs +6 -10
- package/esm2020/lib/cube/view.mobile.component.mjs +14 -14
- package/esm2020/lib/cube/view.pane.component.mjs +13 -13
- package/esm2020/lib/dashboard/actions/actions.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +4 -4
- package/esm2020/lib/dashboard/cube/compare.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +3 -3
- package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +4 -4
- package/esm2020/lib/dashboard/cube/documents.widget.mjs +4 -4
- package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +3 -3
- package/esm2020/lib/dashboard/dashboard.component.mjs +11 -11
- package/esm2020/lib/dashboard/dashboard.pane.component.mjs +5 -11
- package/esm2020/lib/dashboard/recents/recents.widget.mjs +9 -9
- package/esm2020/lib/dashboard/score/activity.widget.mjs +3 -3
- package/esm2020/lib/dashboard/score/compare-groups.widget.mjs +3 -3
- package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +3 -3
- package/esm2020/lib/dashboard/score/pending-results.widget.mjs +12 -12
- package/esm2020/lib/dashboard/score/personal-score.widget.mjs +3 -3
- package/esm2020/lib/dashboard/widget-item.component.mjs +3 -3
- package/esm2020/lib/desktop.module.mjs +11 -13
- package/esm2020/lib/home/about/about.dialog.mjs +7 -7
- package/esm2020/lib/home/home-base.component.mjs +3 -3
- package/esm2020/lib/home/home.desktop.component.mjs +19 -19
- package/esm2020/lib/home/home.mobile.component.mjs +16 -16
- package/esm2020/lib/home/notifications/notifications.component.mjs +12 -12
- package/esm2020/lib/home/options/options.component.mjs +11 -11
- package/esm2020/lib/home/outofoffice/outofoffice.component.mjs +8 -8
- package/esm2020/lib/home/search.service.mjs +3 -3
- package/esm2020/lib/home/sign/sign.component.mjs +6 -6
- package/esm2020/lib/home/tools.component.mjs +13 -13
- package/esm2020/lib/impersonate/impersonate.component.mjs +10 -10
- package/esm2020/lib/mobile.module.mjs +11 -13
- package/esm2020/lib/modules/chart.module.mjs +6 -6
- package/esm2020/lib/modules/circular-gauge.module.mjs +5 -5
- package/esm2020/lib/modules/date.adapter.mjs +1 -1
- package/esm2020/lib/modules/datepicker.intl.mjs +4 -4
- package/esm2020/lib/modules/dayjs.module.mjs +5 -5
- package/esm2020/lib/modules/diagram.module.mjs +7 -9
- package/esm2020/lib/modules/gantt.module.mjs +5 -5
- package/esm2020/lib/modules/grid.module.mjs +6 -6
- package/esm2020/lib/modules/material.module.mjs +20 -22
- package/esm2020/lib/modules/paginator.intl.mjs +4 -4
- package/esm2020/lib/modules/pivot.module.mjs +5 -7
- package/esm2020/lib/modules/schedule.module.mjs +6 -6
- package/esm2020/lib/modules/spreadsheet.module.mjs +7 -9
- package/esm2020/lib/modules/stepper.intl.mjs +4 -4
- package/esm2020/lib/modules/texteditor.module.mjs +6 -8
- package/esm2020/lib/notifications/filter.component.mjs +8 -8
- package/esm2020/lib/notifications/notifications-table.component.mjs +16 -16
- package/esm2020/lib/notifications/notifications.mobile.component.mjs +3 -3
- package/esm2020/lib/notifications/notifications.pane.component.mjs +3 -3
- package/esm2020/lib/notifications/notifications.service.mjs +3 -3
- package/esm2020/lib/notifications/types/commented.notification.mjs +5 -5
- package/esm2020/lib/notifications/types/cube-anomaly.notification.mjs +5 -5
- package/esm2020/lib/notifications/types/escalated.notification.mjs +6 -6
- package/esm2020/lib/notifications/types/liked.notification.mjs +5 -5
- package/esm2020/lib/notifications/types/long-running-task.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/notification-base.mjs +3 -3
- package/esm2020/lib/notifications/types/nudge.notification.mjs +6 -6
- package/esm2020/lib/notifications/types/state-changed.notification.mjs +6 -6
- package/esm2020/lib/notifications/types/tagged.notification.mjs +5 -5
- package/esm2020/lib/notifications/types/text.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +5 -5
- package/esm2020/lib/options/options.component.mjs +15 -15
- package/esm2020/lib/options/options.service.mjs +3 -3
- package/esm2020/lib/reports/arguments-component.mjs +3 -3
- package/esm2020/lib/reports/cube/documents.component.mjs +3 -3
- package/esm2020/lib/reports/cube/grid-documents.component.mjs +9 -9
- package/esm2020/lib/reports/cube/table-documents.component.mjs +10 -10
- package/esm2020/lib/reports/cube/usage-args.component.mjs +3 -3
- package/esm2020/lib/reports/cube/usage-base.mjs +3 -3
- package/esm2020/lib/reports/cube/usage-chart.component.mjs +4 -4
- package/esm2020/lib/reports/cube/usage-pivot.component.mjs +4 -4
- package/esm2020/lib/reports/cube/usage.component.mjs +3 -3
- package/esm2020/lib/reports/report-viewer.component.mjs +3 -3
- package/esm2020/lib/reports/report.mobile.component.mjs +12 -12
- package/esm2020/lib/reports/report.pane.component.mjs +11 -11
- package/esm2020/lib/reports/reports-menu.component.mjs +9 -9
- package/esm2020/lib/reports/substitution/substitution.component.mjs +12 -12
- package/esm2020/lib/reports/table/table-view.component.mjs +8 -8
- package/esm2020/lib/reports/tasks/tasks.component.mjs +3 -3
- package/esm2020/lib/routes.desktop.mjs +1 -1
- package/esm2020/lib/scheduler/schedule.component.mjs +13 -13
- package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +3 -3
- package/esm2020/lib/scheduler/scheduler.pane.component.mjs +3 -3
- package/esm2020/lib/shared.module.mjs +24 -26
- package/esm2020/lib/system.module.mjs +13 -15
- package/esm2020/lib/views/cube/chart.component.mjs +7 -7
- package/esm2020/lib/views/cube/cube-base.mjs +3 -3
- package/esm2020/lib/views/cube/explore.component.mjs +9 -9
- package/esm2020/lib/views/cube/matrix.component.mjs +12 -12
- package/esm2020/lib/views/cube/parallel.component.mjs +5 -5
- package/esm2020/lib/views/cube/pivot.component.mjs +5 -5
- package/esm2020/lib/views/cube/sum.component.mjs +10 -10
- package/esm2020/lib/views/cube/view.component.mjs +9 -9
- package/esm2020/lib/views/timeline/timeline.component.exp.mjs +3 -3
- package/esm2020/lib/views/view-item.component.mjs +3 -3
- package/esm2020/lib/views/views.component.mjs +5 -5
- package/esm2020/lib/views/views.mobile.component.mjs +3 -3
- package/esm2020/lib/views/views.pane.component.mjs +5 -10
- package/fesm2015/bizdoc-core.mjs +1617 -1745
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +1587 -1717
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/{bizdoc-core.d.ts → index.d.ts} +0 -0
- package/lib/admin/admin-menu.component.d.ts +1 -1
- package/lib/admin/core/ace.input.d.ts +1 -1
- package/lib/admin/core/color-picker.input.d.ts +1 -1
- package/lib/admin/core/search.input.d.ts +2 -2
- package/lib/admin/diff/configuration-diff.component.d.ts +1 -1
- package/lib/admin/document-trace/document-trace.component.d.ts +5 -2
- package/lib/admin/document-trace/reassign.dialog.d.ts +6 -3
- package/lib/admin/document-trace/trace-element.component.d.ts +1 -1
- package/lib/admin/form/form.service.d.ts +1 -1
- package/lib/admin/form/workflow/node.component.d.ts +5 -2
- package/lib/admin/form/workflow/role-node.component.d.ts +14 -2
- package/lib/admin/form/workflow/workflow.component.d.ts +1 -1
- package/lib/admin/indices/manage-cube-index.component.d.ts +1 -1
- package/lib/admin/patterns/patterns.component.d.ts +7 -3
- package/lib/admin/permissions/permissions.component.d.ts +1 -1
- package/lib/admin/positions/positions-popup.component.d.ts +2 -2
- package/lib/admin/positions/positions.component.d.ts +14 -6
- package/lib/admin/profiler/outofoffice.component.d.ts +26 -7
- package/lib/admin/profiler/profiler.component.d.ts +3 -3
- package/lib/admin/utility-wrapper.component.d.ts +1 -1
- package/lib/admin/utility.pane.component.d.ts +1 -1
- package/lib/app.component.d.ts +2 -2
- package/lib/browse/browse-items.component.d.ts +1 -1
- package/lib/browse/browse.mobile.component.d.ts +1 -1
- package/lib/browse/browse.pane.component.d.ts +2 -2
- package/lib/browse/expanded-item/expanded-item.component.d.ts +1 -1
- package/lib/browse/filter/filter.component.d.ts +10 -3
- package/lib/browse/folders-menu.component.d.ts +1 -1
- package/lib/chat/chat.mobile.component.d.ts +1 -1
- package/lib/chat/contacts.component.d.ts +3 -3
- package/lib/chat/contacts.pane.component.d.ts +1 -1
- package/lib/chat/conversation.component.d.ts +1 -1
- package/lib/chat/conversation.pane.component.d.ts +1 -1
- package/lib/compose/action/action-picker.component.d.ts +1 -1
- package/lib/compose/action/action.dialog.d.ts +1 -1
- package/lib/compose/action/action.pane.dialog.exp.d.ts +1 -1
- package/lib/compose/action/assign-action.component.d.ts +8 -3
- package/lib/compose/action/moveto-action.component.d.ts +6 -3
- package/lib/compose/action/return-action.component.d.ts +5 -2
- package/lib/compose/attachments/attachments.component.d.ts +1 -1
- package/lib/compose/attachments/preview/attachment-preview.component.d.ts +1 -1
- package/lib/compose/attachments/progress-button.directive.d.ts +1 -1
- package/lib/compose/comments/comment.component.d.ts +1 -1
- package/lib/compose/comments/comments.component.d.ts +1 -1
- package/lib/compose/comments/{Comments.pane.component.d.ts → comments.pane.component.d.ts} +1 -1
- package/lib/compose/comments/edit-comment.component.d.ts +1 -1
- package/lib/compose/comments/edits.component.d.ts +1 -1
- package/lib/compose/comments/quick-comment.component.exp.d.ts +1 -1
- package/lib/compose/comments/votes.component.d.ts +1 -1
- package/lib/compose/compose.mobile.component.d.ts +1 -1
- package/lib/compose/compose.pane.component.d.ts +1 -1
- package/lib/compose/copy/copy.dialog.d.ts +2 -2
- package/lib/compose/document.component.d.ts +1 -1
- package/lib/compose/document.mobile.component.d.ts +1 -1
- package/lib/compose/document.pane.component.d.ts +1 -1
- package/lib/compose/events/events.component.d.ts +1 -1
- package/lib/compose/form-selector/form-selector.sheet.d.ts +1 -1
- package/lib/compose/form.component.d.ts +1 -1
- package/lib/compose/new-menu.component.d.ts +2 -2
- package/lib/compose/privilage.directive.d.ts +2 -2
- package/lib/compose/state.component.d.ts +1 -1
- package/lib/compose/tag/tags.component.d.ts +2 -2
- package/lib/compose/trace/flow.component.d.ts +11 -8
- package/lib/compose/trace/people.component.d.ts +1 -1
- package/lib/compose/trace/trace.base.d.ts +8 -3
- package/lib/compose/trace/trace.component.d.ts +5 -8
- package/lib/compose/trace/trace.pane.component.d.ts +1 -1
- package/lib/compose/version-compare/version-compare.component.d.ts +1 -1
- package/lib/compose/version-compare/version-compare.directive.d.ts +3 -3
- package/lib/compose/version-compare/version.pane.component.d.ts +1 -1
- package/lib/core/NgComponentOutlet.d.ts +1 -1
- package/lib/core/animated-icon/animated-icon.directive.d.ts +1 -1
- package/lib/core/avatar/avatar.component.d.ts +1 -1
- package/lib/core/controls/address.input.d.ts +2 -2
- package/lib/core/controls/auto-complete.input.d.ts +2 -2
- package/lib/core/controls/combination-picker-body.d.ts +2 -2
- package/lib/core/controls/combination-picker.d.ts +1 -1
- package/lib/core/controls/combination-pool.d.ts +1 -1
- package/lib/core/controls/file.input.d.ts +1 -1
- package/lib/core/controls/select.input.d.ts +2 -2
- package/lib/core/controls/time-picker.d.ts +2 -2
- package/lib/core/controls/timespan.input.d.ts +6 -2
- package/lib/core/guide/guide.component.d.ts +1 -1
- package/lib/core/guide/help-tip.component.d.ts +1 -1
- package/lib/core/identity/identity.component.d.ts +1 -1
- package/lib/core/info/location-info.component.d.ts +1 -1
- package/lib/core/layout/autocomplete.field.d.ts +2 -2
- package/lib/core/layout/checkbox.d.ts +1 -1
- package/lib/core/layout/checkbox.field.d.ts +2 -2
- package/lib/core/layout/date-range.field.d.ts +5 -2
- package/lib/core/layout/date.field.d.ts +2 -2
- package/lib/core/layout/expression.field.d.ts +2 -2
- package/lib/core/layout/file.field.d.ts +3 -2
- package/lib/core/layout/html.field.d.ts +2 -2
- package/lib/core/layout/input.base.d.ts +2 -2
- package/lib/core/layout/input.field.d.ts +2 -2
- package/lib/core/layout/layout.component.d.ts +1 -1
- package/lib/core/layout/numeric.field.d.ts +2 -2
- package/lib/core/layout/select.field.d.ts +2 -2
- package/lib/core/layout/switch.field.d.ts +2 -2
- package/lib/core/layout/textarea.field.d.ts +2 -2
- package/lib/core/layout/timespan.field.d.ts +2 -2
- package/lib/core/lottie-animation.d.ts +1 -1
- package/lib/core/none.component.d.ts +1 -1
- package/lib/core/pipes/action.pipe.d.ts +1 -1
- package/lib/core/pipes/calendar.pipe.d.ts +1 -1
- package/lib/core/pipes/date-format.pipe.d.ts +1 -1
- package/lib/core/pipes/daterange.pipe.d.ts +2 -2
- package/lib/core/pipes/difference.pipe.d.ts +1 -1
- package/lib/core/pipes/duration-format.pipe.d.ts +1 -1
- package/lib/core/pipes/duration.pipe.d.ts +1 -1
- package/lib/core/pipes/form.pipe.d.ts +1 -1
- package/lib/core/pipes/join.pipe.d.ts +1 -1
- package/lib/core/pipes/role.pipe.d.ts +1 -1
- package/lib/core/pipes/sanitize-html.pipe.d.ts +1 -1
- package/lib/core/pipes/sort.pipe.d.ts +2 -2
- package/lib/core/pipes/state.pipe.d.ts +1 -1
- package/lib/core/pipes/time-ago.pipe.d.ts +1 -1
- package/lib/core/pipes/translate.pipe.d.ts +2 -2
- package/lib/core/pipes/type-value.pipe.d.ts +1 -1
- package/lib/core/pipes/user-name.pipe.d.ts +1 -1
- package/lib/core/popup/popup.component.d.ts +1 -1
- package/lib/core/popup/tooltip.directive.d.ts +2 -2
- package/lib/core/prompt/ask/ask.dialog.d.ts +1 -1
- package/lib/core/prompt/mask/mask.component.d.ts +1 -1
- package/lib/core/save-changes.dialog.d.ts +1 -1
- package/lib/core/slots/router.directive.d.ts +1 -1
- package/lib/core/slots/slots.component.d.ts +2 -2
- package/lib/core/tagging/documents.component.d.ts +1 -1
- package/lib/core/tagging/edit-input.component.d.ts +1 -1
- package/lib/core/tagging/emoji.component.d.ts +1 -1
- package/lib/core/tagging/tagging-item.directive.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/tagging/users.component.d.ts +1 -1
- package/lib/cube/accum/accum.component.d.ts +1 -1
- package/lib/cube/chart/chart.component.d.ts +1 -1
- package/lib/cube/cube-menu.component.d.ts +1 -1
- package/lib/cube/cube-view.component.d.ts +1 -1
- package/lib/cube/explore/document-item.component.d.ts +1 -1
- package/lib/cube/explore/explore-item.component.d.ts +1 -1
- package/lib/cube/explore/explore-items.component.d.ts +1 -1
- package/lib/cube/explore/explore.pane.component.d.ts +1 -1
- package/lib/cube/explore/item.pane.component.d.ts +1 -1
- package/lib/cube/filter/filter-tags.component.exp.d.ts +1 -1
- package/lib/cube/filter/filter.component.d.ts +1 -1
- package/lib/cube/grid/grid.component.d.ts +1 -1
- package/lib/cube/grid/spreadsheet.component.d.ts +1 -1
- package/lib/cube/matrix/matrix.base.d.ts +2 -2
- package/lib/cube/matrix/matrix.mobile.component.d.ts +3 -1
- package/lib/cube/matrix/matrix.pane.component.d.ts +3 -2
- package/lib/cube/matrix/popup.component.d.ts +1 -1
- package/lib/cube/matrix/table.component.d.ts +1 -1
- package/lib/cube/parallel/parallel.component.d.ts +1 -1
- package/lib/cube/pivot/pivot.component.d.ts +1 -1
- package/lib/cube/sum/sum.component.d.ts +1 -1
- package/lib/cube/view-base.d.ts +2 -2
- package/lib/cube/view.mobile.component.d.ts +1 -2
- package/lib/cube/view.pane.component.d.ts +1 -1
- package/lib/dashboard/actions/actions.widget.d.ts +1 -1
- package/lib/dashboard/cube/accum-cube.widget.d.ts +1 -1
- package/lib/dashboard/cube/compare.widget.d.ts +1 -1
- package/lib/dashboard/cube/cube-analysis.base.d.ts +1 -1
- package/lib/dashboard/cube/cube-analysis.widget.d.ts +1 -1
- package/lib/dashboard/cube/cube-chart.widget.d.ts +1 -1
- package/lib/dashboard/cube/documents.widget.d.ts +1 -1
- package/lib/dashboard/cube/filter/filter.component.d.ts +1 -1
- package/lib/dashboard/dashboard.component.d.ts +1 -1
- package/lib/dashboard/dashboard.pane.component.d.ts +1 -1
- package/lib/dashboard/recents/recents.widget.d.ts +2 -2
- package/lib/dashboard/score/activity.widget.d.ts +1 -1
- package/lib/dashboard/score/compare-groups.widget.d.ts +1 -1
- package/lib/dashboard/score/peers-performance.widget.d.ts +1 -1
- package/lib/dashboard/score/pending-results.widget.d.ts +1 -1
- package/lib/dashboard/score/personal-score.widget.d.ts +1 -1
- package/lib/dashboard/widget-item.component.d.ts +1 -1
- package/lib/desktop.module.d.ts +1 -1
- package/lib/home/about/about.dialog.d.ts +1 -1
- package/lib/home/home-base.component.d.ts +1 -1
- package/lib/home/home.desktop.component.d.ts +1 -1
- package/lib/home/home.mobile.component.d.ts +1 -1
- package/lib/home/notifications/notifications.component.d.ts +1 -1
- package/lib/home/options/options.component.d.ts +1 -1
- package/lib/home/outofoffice/outofoffice.component.d.ts +1 -1
- package/lib/home/sign/sign.component.d.ts +1 -1
- package/lib/home/tools.component.d.ts +2 -2
- package/lib/impersonate/impersonate.component.d.ts +2 -2
- package/lib/notifications/filter.component.d.ts +5 -2
- package/lib/notifications/notifications-table.component.d.ts +1 -1
- package/lib/notifications/notifications.mobile.component.d.ts +1 -1
- package/lib/notifications/notifications.pane.component.d.ts +1 -1
- package/lib/notifications/types/commented.notification.d.ts +1 -1
- package/lib/notifications/types/cube-anomaly.notification.d.ts +1 -1
- package/lib/notifications/types/escalated.notification.d.ts +1 -1
- package/lib/notifications/types/liked.notification.d.ts +1 -1
- package/lib/notifications/types/long-running-task.notification.d.ts +1 -1
- package/lib/notifications/types/notification-base.d.ts +1 -1
- package/lib/notifications/types/nudge.notification.d.ts +1 -1
- package/lib/notifications/types/state-changed.notification.d.ts +1 -1
- package/lib/notifications/types/tagged.notification.d.ts +1 -1
- package/lib/notifications/types/text.notification.d.ts +1 -1
- package/lib/notifications/types/upcoming-event.notification.d.ts +1 -1
- package/lib/options/options.component.d.ts +37 -6
- package/lib/reports/arguments-component.d.ts +1 -1
- package/lib/reports/cube/documents.component.d.ts +1 -1
- package/lib/reports/cube/grid-documents.component.d.ts +1 -1
- package/lib/reports/cube/table-documents.component.d.ts +1 -1
- package/lib/reports/cube/usage-args.component.d.ts +1 -1
- package/lib/reports/cube/usage-base.d.ts +1 -1
- package/lib/reports/cube/usage-chart.component.d.ts +1 -1
- package/lib/reports/cube/usage-pivot.component.d.ts +1 -1
- package/lib/reports/cube/usage.component.d.ts +1 -1
- package/lib/reports/report-viewer.component.d.ts +1 -1
- package/lib/reports/report.mobile.component.d.ts +1 -1
- package/lib/reports/report.pane.component.d.ts +1 -1
- package/lib/reports/reports-menu.component.d.ts +1 -1
- package/lib/reports/substitution/substitution.component.d.ts +1 -1
- package/lib/reports/table/table-view.component.d.ts +1 -1
- package/lib/reports/tasks/tasks.component.d.ts +1 -1
- package/lib/scheduler/schedule.component.d.ts +1 -1
- package/lib/scheduler/scheduler.mobile.component.d.ts +1 -1
- package/lib/scheduler/scheduler.pane.component.d.ts +1 -1
- package/lib/views/cube/chart.component.d.ts +1 -1
- package/lib/views/cube/cube-base.d.ts +1 -1
- package/lib/views/cube/explore.component.d.ts +1 -1
- package/lib/views/cube/matrix.component.d.ts +1 -1
- package/lib/views/cube/parallel.component.d.ts +1 -1
- package/lib/views/cube/pivot.component.d.ts +1 -1
- package/lib/views/cube/sum.component.d.ts +1 -2
- package/lib/views/cube/view.component.d.ts +1 -1
- package/lib/views/timeline/timeline.component.exp.d.ts +1 -1
- package/lib/views/view-item.component.d.ts +1 -1
- package/lib/views/views.component.d.ts +1 -1
- package/lib/views/views.mobile.component.d.ts +1 -1
- package/lib/views/views.pane.component.d.ts +1 -1
- package/package.json +28 -28
- package/assets/.gitkeep +0 -0
@@ -17,10 +17,9 @@ FYI_PATH = 'M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1
|
|
17
17
|
/** flow-view component*/
|
18
18
|
export class FlowViewComponent extends TraceBase {
|
19
19
|
/** workflow-view ctor */
|
20
|
-
constructor(_accounts,
|
21
|
-
super(hub);
|
20
|
+
constructor(_accounts, session, _translate, _duration, _elementRef, hub) {
|
21
|
+
super(session, hub);
|
22
22
|
this._accounts = _accounts;
|
23
|
-
this._session = _session;
|
24
23
|
this._translate = _translate;
|
25
24
|
this._duration = _duration;
|
26
25
|
this._elementRef = _elementRef;
|
@@ -36,16 +35,13 @@ export class FlowViewComponent extends TraceBase {
|
|
36
35
|
horizontalSpacing: 50,
|
37
36
|
enableRouting: true,
|
38
37
|
verticalSpacing: 50,
|
39
|
-
//connectionDirection: 'Orientation',
|
40
38
|
orientation: this._session.inverse ? 'RightToLeft' : 'LeftToRight',
|
41
39
|
};
|
42
40
|
this.scrollSettings = {
|
43
41
|
minZoom: .5,
|
44
42
|
scrollLimit: 'Diagram',
|
45
|
-
canAutoScroll: true,
|
46
43
|
currentZoom: 1.2,
|
47
44
|
padding: { top: 0, bottom: 0 },
|
48
|
-
autoScrollBorder: { top: 0, bottom: 0 },
|
49
45
|
maxZoom: 2.5
|
50
46
|
};
|
51
47
|
this.snapSettings = {
|
@@ -55,15 +51,13 @@ export class FlowViewComponent extends TraceBase {
|
|
55
51
|
this._configuration = {};
|
56
52
|
this._accentColor = this._session.getAccent();
|
57
53
|
this._session.profile.nodes.forEach(n => this._configuration[n.name] = n);
|
58
|
-
|
54
|
+
session.themeChange.pipe(takeUntil(this._destroy)).
|
59
55
|
subscribe(() => {
|
60
56
|
this._accentColor = this._session.getAccent();
|
61
57
|
this.refresh();
|
62
58
|
});
|
63
59
|
}
|
64
|
-
|
65
|
-
this._initialize();
|
66
|
-
}
|
60
|
+
//readonly diagramSettings = { inversedAlignment: this._session.inverse } as DiagramSettingsModel;
|
67
61
|
async _initialize() {
|
68
62
|
const { connectors, nodes, indicators } = await this._prepare();
|
69
63
|
this.diagram && this.diagram.destroy();
|
@@ -74,6 +68,7 @@ export class FlowViewComponent extends TraceBase {
|
|
74
68
|
connectors,
|
75
69
|
layout: this.layout,
|
76
70
|
tool: this.tool,
|
71
|
+
//diagramSettings: this.diagramSettings,
|
77
72
|
backgroundColor: 'transparent',
|
78
73
|
scrollSettings: this.scrollSettings,
|
79
74
|
snapSettings: this.snapSettings,
|
@@ -438,9 +433,9 @@ export class FlowViewComponent extends TraceBase {
|
|
438
433
|
}
|
439
434
|
_tooltip(obj) {
|
440
435
|
const { note, role, substituting, escalation, duration, standardTime, estimatedTime, error, fyi } = obj;
|
441
|
-
const
|
436
|
+
const elements = [note, substituting, escalation, duration, fyi, role, error, standardTime, estimatedTime];
|
442
437
|
let div;
|
443
|
-
|
438
|
+
elements.forEach(r => {
|
444
439
|
if (!r)
|
445
440
|
return;
|
446
441
|
if (!div)
|
@@ -453,50 +448,48 @@ export class FlowViewComponent extends TraceBase {
|
|
453
448
|
});
|
454
449
|
return div;
|
455
450
|
}
|
451
|
+
/** */
|
456
452
|
async _startNode() {
|
457
453
|
let note, role;
|
458
|
-
const
|
454
|
+
const ago = dayjs(this.model.issued).fromNow();
|
459
455
|
if (this.model.ownerById) {
|
460
456
|
if (this.model.ownerById === this._session.userId) {
|
461
457
|
if (this.model.ownerId === this._session.profile.userId)
|
462
|
-
note = this._translate.personalize('YouSubmittedNoteBy', this._session.profile.byGender, this._session.profile.name,
|
458
|
+
note = this._translate.personalize('YouSubmittedNoteBy', this._session.profile.byGender, this._session.profile.name, ago);
|
463
459
|
else {
|
464
460
|
const who = await this._accounts.get(this.model.ownerId).toPromise();
|
465
|
-
note = this._translate.personalize('YouSubmittedNoteBy', this._session.profile.byGender, who.name,
|
461
|
+
note = this._translate.personalize('YouSubmittedNoteBy', this._session.profile.byGender, who.name, ago);
|
466
462
|
}
|
467
463
|
}
|
468
464
|
else {
|
469
465
|
const by = await this._accounts.get(this.model.ownerById).toPromise();
|
470
466
|
if (this.model.ownerId === this._session.userId)
|
471
|
-
note = this._translate.personalize('SubmittedNoteYouBy', by.gender, by.name,
|
472
|
-
else if (this.model.ownerId === this._session.profile.userId)
|
473
|
-
note = this._translate.personalize('SubmittedNoteBy', by.gender, by.name, this._session.profile.name,
|
474
|
-
}
|
467
|
+
note = this._translate.personalize('SubmittedNoteYouBy', by.gender, by.name, ago);
|
468
|
+
else if (this.model.ownerId === this._session.profile.userId)
|
469
|
+
note = this._translate.personalize('SubmittedNoteBy', by.gender, by.name, this._session.profile.name, ago);
|
475
470
|
else {
|
476
471
|
const who = await this._accounts.get(this.model.ownerId).toPromise();
|
477
|
-
note =
|
478
|
-
this._translate.personalize('SubmittedNoteBy', by.gender, by.name, who.name, time);
|
472
|
+
note = this._translate.personalize('SubmittedNoteBy', by.gender, by.name, who.name, ago);
|
479
473
|
}
|
480
474
|
if (by.role)
|
481
475
|
role = `- ${by.role}`;
|
482
476
|
}
|
483
477
|
}
|
478
|
+
else if (this.model.ownerId === this._session.userId)
|
479
|
+
note = this._translate.get('YouSubmittedNote', ago);
|
484
480
|
else {
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
note = this._translate.get('YouSubmittedNote', time);
|
490
|
-
}
|
491
|
-
else {
|
492
|
-
const who = await this._accounts.get(this.model.ownerId).toPromise();
|
493
|
-
note = this._translate.personalize('SubmittedNote', who.gender, who.name, time);
|
494
|
-
if (who.role)
|
495
|
-
role = `- ${who.role}`;
|
496
|
-
}
|
481
|
+
const who = await this._accounts.get(this.model.ownerId).toPromise();
|
482
|
+
note = this._translate.personalize('SubmittedNote', who.gender, who.name, ago);
|
483
|
+
if (who.role)
|
484
|
+
role = `- ${who.role}`;
|
497
485
|
}
|
498
486
|
return { note, role };
|
499
487
|
}
|
488
|
+
/**
|
489
|
+
*
|
490
|
+
* @param node
|
491
|
+
* @param recipient
|
492
|
+
*/
|
500
493
|
async _note(node, recipient) {
|
501
494
|
const tooltip = {};
|
502
495
|
let annotation;
|
@@ -507,9 +500,8 @@ export class FlowViewComponent extends TraceBase {
|
|
507
500
|
else
|
508
501
|
annotation = this._translate.get('You');
|
509
502
|
if (recipient.role) {
|
510
|
-
const role = this.
|
511
|
-
|
512
|
-
tooltip.role = `- ${role.title}`;
|
503
|
+
const role = this._roleName(recipient.role);
|
504
|
+
tooltip.role = `- ${role}`;
|
513
505
|
}
|
514
506
|
}
|
515
507
|
else
|
@@ -520,13 +512,12 @@ export class FlowViewComponent extends TraceBase {
|
|
520
512
|
if (who.role)
|
521
513
|
tooltip.role = `- ${who.role}`;
|
522
514
|
else if (recipient.role) {
|
523
|
-
const role = this.
|
524
|
-
|
525
|
-
tooltip.role = `- ${role.title}`;
|
515
|
+
const role = this._roleName(recipient.role);
|
516
|
+
tooltip.role = `- ${role}`;
|
526
517
|
}
|
527
518
|
}
|
528
519
|
if (recipient.replied) {
|
529
|
-
const
|
520
|
+
const ago = dayjs(recipient.replied).fromNow();
|
530
521
|
const targets = this.model.recipients.filter(r => r.originId === recipient.id), to = [];
|
531
522
|
if (targets.length)
|
532
523
|
for (let sibling of targets) {
|
@@ -538,36 +529,34 @@ export class FlowViewComponent extends TraceBase {
|
|
538
529
|
const action = this._action(recipient.action, this._session.profile.byGender);
|
539
530
|
if (to.length) {
|
540
531
|
if (recipient.userId === this._session.profile.userId)
|
541
|
-
tooltip.note = this._translate.get('ActionTakenByYouTo', action, this._translate.join(to), this._session.profile.name,
|
532
|
+
tooltip.note = this._translate.get('ActionTakenByYouTo', action, this._translate.join(to), this._session.profile.name, ago);
|
542
533
|
else {
|
543
534
|
const who = await this._accounts.get(recipient.userId).toPromise();
|
544
|
-
tooltip.note = this._translate.get('ActionTakenByYouTo', action, this._translate.join(to), who.name,
|
535
|
+
tooltip.note = this._translate.get('ActionTakenByYouTo', action, this._translate.join(to), who.name, ago);
|
545
536
|
}
|
546
537
|
}
|
547
538
|
else if (recipient.userId === this._session.profile.userId)
|
548
|
-
tooltip.note = this._translate.get('ActionTakenByYou', action, this._session.profile.name,
|
539
|
+
tooltip.note = this._translate.get('ActionTakenByYou', action, this._session.profile.name, ago);
|
549
540
|
else {
|
550
541
|
const who = await this._accounts.get(recipient.userId).toPromise();
|
551
|
-
tooltip.note = this._translate.get('ActionTakenByYou', action, who.name,
|
542
|
+
tooltip.note = this._translate.get('ActionTakenByYou', action, who.name, ago);
|
552
543
|
}
|
553
544
|
}
|
554
545
|
else {
|
555
546
|
const by = await this._accounts.get(recipient.byId).toPromise();
|
556
547
|
const action = this._action(recipient.action, by.gender);
|
557
548
|
if (recipient.userId === this._session.profile.userId) {
|
558
|
-
if (to.length)
|
559
|
-
tooltip.note = this._translate.get('YouTakenActionByTo', by.name, action, this._translate.join(to),
|
560
|
-
}
|
549
|
+
if (to.length)
|
550
|
+
tooltip.note = this._translate.get('YouTakenActionByTo', by.name, action, this._translate.join(to), ago);
|
561
551
|
else
|
562
|
-
tooltip.note = this._translate.get('YouTakenActionBy', by.name, action,
|
552
|
+
tooltip.note = this._translate.get('YouTakenActionBy', by.name, action, ago);
|
563
553
|
}
|
564
554
|
else {
|
565
555
|
const who = await this._accounts.get(recipient.userId).toPromise();
|
566
|
-
if (to.length)
|
567
|
-
tooltip.note = this._translate.get('ActionTakenByTo', by.name, action, this._translate.join(to), who.name,
|
568
|
-
}
|
556
|
+
if (to.length)
|
557
|
+
tooltip.note = this._translate.get('ActionTakenByTo', by.name, action, this._translate.join(to), who.name, ago);
|
569
558
|
else
|
570
|
-
tooltip.note = this._translate.get('ActionTakenBy', by.name, action, who.name,
|
559
|
+
tooltip.note = this._translate.get('ActionTakenBy', by.name, action, who.name, ago);
|
571
560
|
}
|
572
561
|
}
|
573
562
|
}
|
@@ -575,9 +564,9 @@ export class FlowViewComponent extends TraceBase {
|
|
575
564
|
if (recipient.userId === this._session.profile.userId) {
|
576
565
|
const action = this._action(recipient.action, this._session.profile.gender);
|
577
566
|
if (this._session.isImpersonating)
|
578
|
-
tooltip.note = this._translate.get('ActionTakenTo', this._session.profile.name, action, this._translate.join(to),
|
567
|
+
tooltip.note = this._translate.get('ActionTakenTo', this._session.profile.name, action, this._translate.join(to), ago);
|
579
568
|
else
|
580
|
-
tooltip.note = this._translate.get('YouTakenActionTo', action, this._translate.join(to),
|
569
|
+
tooltip.note = this._translate.get('YouTakenActionTo', action, this._translate.join(to), ago);
|
581
570
|
}
|
582
571
|
else {
|
583
572
|
const who = await this._accounts.get(recipient.userId).toPromise();
|
@@ -587,29 +576,29 @@ export class FlowViewComponent extends TraceBase {
|
|
587
576
|
}
|
588
577
|
else if (this._session.isImpersonating) {
|
589
578
|
const action = this._action(recipient.action, this._session.profile.gender);
|
590
|
-
tooltip.note = this._translate.get('ActionTaken', this._session.profile.name, action,
|
579
|
+
tooltip.note = this._translate.get('ActionTaken', this._session.profile.name, action, ago);
|
591
580
|
}
|
592
581
|
else if (recipient.userId === this._session.profile.userId) {
|
593
582
|
const action = this._action(recipient.action, You);
|
594
|
-
tooltip.note = this._translate.get('YouTakenAction', action,
|
583
|
+
tooltip.note = this._translate.get('YouTakenAction', action, ago);
|
595
584
|
}
|
596
585
|
else {
|
597
586
|
const who = await this._accounts.get(recipient.userId).toPromise();
|
598
587
|
const action = this._action(recipient.action, who.gender);
|
599
|
-
tooltip.note = this._translate.get('ActionTaken', who.name, action,
|
588
|
+
tooltip.note = this._translate.get('ActionTaken', who.name, action, ago);
|
600
589
|
}
|
601
590
|
}
|
602
591
|
else if (!recipient.estimate) {
|
603
|
-
const
|
592
|
+
const ago = dayjs(recipient.received).fromNow();
|
604
593
|
if (recipient.userId === this._session.userId) {
|
605
594
|
if (this._session.isImpersonating)
|
606
|
-
tooltip.note = this._translate.personalize('ReceivedBy', this._session.profile.gender, this._session.profile.name,
|
595
|
+
tooltip.note = this._translate.personalize('ReceivedBy', this._session.profile.gender, this._session.profile.name, ago);
|
607
596
|
else
|
608
|
-
tooltip.note = this._translate.get('YouReceived',
|
597
|
+
tooltip.note = this._translate.get('YouReceived', ago);
|
609
598
|
}
|
610
599
|
else {
|
611
600
|
const who = await this._accounts.get(recipient.userId).toPromise();
|
612
|
-
tooltip.note = this._translate.personalize('ReceivedTime', who.gender,
|
601
|
+
tooltip.note = this._translate.personalize('ReceivedTime', who.gender, ago);
|
613
602
|
}
|
614
603
|
}
|
615
604
|
if (recipient.substituteId) {
|
@@ -662,39 +651,31 @@ export class FlowViewComponent extends TraceBase {
|
|
662
651
|
}
|
663
652
|
_action(name, gender) {
|
664
653
|
const action = this._session.profile.actions.find(a => a.name === name);
|
665
|
-
if (!action)
|
666
|
-
return name;
|
667
654
|
if (gender === You) {
|
668
|
-
const gender = this._session.gender,
|
669
|
-
gender === 'Female' ?
|
670
|
-
|
671
|
-
return (
|
672
|
-
action.past ||
|
673
|
-
action.title).toLowerCase();
|
655
|
+
const gender = this._session.gender, you = gender === 'Male' ? action?.youMale :
|
656
|
+
gender === 'Female' ? action?.youFemale :
|
657
|
+
null;
|
658
|
+
return (you || action?.you || action?.past || action?.title || name).toLowerCase();
|
674
659
|
}
|
675
|
-
const past =
|
676
|
-
gender === 'Female' ?
|
677
|
-
|
678
|
-
return past;
|
679
|
-
}
|
680
|
-
_fromNow(date) {
|
681
|
-
return dayjs(date).fromNow();
|
660
|
+
const past = gender === 'Male' ? action?.pastMale :
|
661
|
+
gender === 'Female' ? action?.pastFemale : null;
|
662
|
+
return (past || action?.past || action?.title || name).toLowerCase();
|
682
663
|
}
|
683
664
|
ngOnDestroy() {
|
684
|
-
super.ngOnDestroy();
|
685
665
|
this.diagram && this.diagram.destroy();
|
666
|
+
super.ngOnDestroy();
|
686
667
|
}
|
687
668
|
}
|
688
|
-
FlowViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
689
|
-
FlowViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
690
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
669
|
+
FlowViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FlowViewComponent, deps: [{ token: i1.AccountService }, { token: i2.SessionService }, { token: i3.TranslateService }, { token: i4.DurationFormatPipe }, { token: i0.ElementRef }, { token: i5.HubService }], target: i0.ɵɵFactoryTarget.Component });
|
670
|
+
FlowViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: FlowViewComponent, selector: "bizdoc-flow", inputs: { model: "model", connectorType: "connectorType" }, host: { attributes: { "dir": "ltr" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [""], viewProviders: [ComplexHierarchicalTreeService] });
|
671
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: FlowViewComponent, decorators: [{
|
691
672
|
type: Component,
|
692
673
|
args: [{ selector: 'bizdoc-flow', template: '', viewProviders: [ComplexHierarchicalTreeService], host: {
|
693
674
|
dir: 'ltr'
|
694
|
-
}
|
675
|
+
} }]
|
695
676
|
}], ctorParameters: function () { return [{ type: i1.AccountService }, { type: i2.SessionService }, { type: i3.TranslateService }, { type: i4.DurationFormatPipe }, { type: i0.ElementRef }, { type: i5.HubService }]; }, propDecorators: { model: [{
|
696
677
|
type: Input
|
697
678
|
}], connectorType: [{
|
698
679
|
type: Input
|
699
680
|
}] } });
|
700
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvbXBvc2UvdHJhY2UvZmxvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBMEMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBMkIsOEJBQThCLEVBQTRKLHFCQUFxQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQW9CLE1BQU0sa0NBQWtDLENBQUM7QUFDbmEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7QUFPMUQ7QUFDRSwrQ0FBK0M7QUFDL0MsUUFBUSxHQUFHLGtHQUFrRyxFQUM3RyxjQUFjLEdBQUcsbVFBQW1RLEVBQ3BSLGFBQWEsR0FBRyxzVEFBc1QsQ0FBQztBQVd6VSx5QkFBeUI7QUFDekIsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFNBQVM7SUFvQzlDLHlCQUF5QjtJQUN6QixZQUFvQixTQUF5QixFQUFVLFFBQXdCLEVBQVUsVUFBNEIsRUFDM0csU0FBNkIsRUFDN0IsV0FBdUMsRUFDL0MsR0FBZTtRQUNmLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUpPLGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUMzRyxjQUFT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QUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3ZFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxRQUFRLENBQUMsSUFBVTtRQUN6QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0QsV0FBVztRQUNULEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQzs7OEdBbnJCVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixtTUFSbEIsRUFBRSwrQ0FFRyxDQUFDLDhCQUE4QixDQUFDOzJGQU1wQyxpQkFBaUI7a0JBVjdCLFNBQVM7K0JBQ0UsYUFBYSxZQUNiLEVBQUUsaUJBRUcsQ0FBQyw4QkFBOEIsQ0FBQyxRQUN6Qzt3QkFDSixHQUFHLEVBQUUsS0FBSztxQkFDWDtvUEFJUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5vZGVNb2RlbCwgQ29ubmVjdG9yTW9kZWwsIExheW91dE1vZGVsLCBEaWFncmFtVG9vbHMsIERpYWdyYW0sIERpYWdyYW1Db25zdHJhaW50cywgQ29tcGxleEhpZXJhcmNoaWNhbFRyZWUsIENvbXBsZXhIaWVyYXJjaGljYWxUcmVlU2VydmljZSwgQ29ubmVjdG9yQnJpZGdpbmcsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsIFNjcm9sbFNldHRpbmdzTW9kZWwsIFNuYXBTZXR0aW5nc01vZGVsLCBTZWdtZW50cywgTGluZVJvdXRpbmcsIFRyZWVJbmZvLCBJTW91c2VFdmVudEFyZ3MsIExpbmVEaXN0cmlidXRpb24sIENvbm5lY3Rpb25Qb2ludE9yaWdpbiwgU25hcENvbnN0cmFpbnRzLCBOb2RlQ29uc3RyYWludHMsIENoaWxkQXJyYW5nZW1lbnQgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYW5ndWxhci1kaWFncmFtcyc7XHJcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcclxuaW1wb3J0IHsgRG9jdW1lbnRNb2RlbCwgUmVjaXBpZW50LCBOb2RlSW5mbywgR2VuZGVyLCBGbG93Tm9kZSwgVXNlckluZm8sIFN0YXRlIH0gZnJvbSBcIi4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IGdldFdhcm4gfSBmcm9tICcuLi8uLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFRyYWNlQmFzZSwgWW91LCBTVEFSVF9OT0RFIH0gZnJvbSAnLi90cmFjZS5iYXNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEh1YlNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2h1Yi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHVyYXRpb25Gb3JtYXRQaXBlIH0gZnJvbSAnLi4vLi4vY29yZS9waXBlcy9kdXJhdGlvbi1mb3JtYXQucGlwZSc7XHJcblxyXG5jb25zdFxyXG4gIC8vRUxMSVBTSVMgPSAnTSA2NTAsIDE1MCBhIDc1LDE1MCAwIDEsMCAxLDAgeicsXHJcbiAgRllJX1BBVEggPSAnTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6JyxcclxuICBFU0NBTEFURURfUEFUSCA9ICdNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eicsXHJcbiAgV0FSTk5JTkdfUEFUSCA9ICdNIDEzLjc2MzczNSwxLjg0MzM3MzUgSCA2LjMwMzczNDkgbCAtNS4yNyw1LjI3IHYgNy40NTk5OTk1IGwgNS4yNyw1LjI3IGggNy40NjAwMDAxIGwgNS4yNywtNS4yNyBWIDcuMTEzMzczNSBaIG0gLTMuNzMsMTQuMjk5OTk5NSBjIC0wLjcyMDAwMDEsMCAtMS4zMDAwMDAxLC0wLjU4IC0xLjMwMDAwMDEsLTEuMyAwLC0wLjcyIDAuNTgsLTEuMyAxLjMwMDAwMDEsLTEuMyAwLjcyLDAgMS4zLDAuNTggMS4zLDEuMyAwLDAuNzIgLTAuNTgsMS4zIC0xLjMsMS4zIHogbSAxLC00LjMgSCA5LjAzMzczNDkgViA1Ljg0MzM3MzUgaCAyLjAwMDAwMDEgeic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1mbG93JyxcclxuICB0ZW1wbGF0ZTogJycsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmxvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFtDb21wbGV4SGllcmFyY2hpY2FsVHJlZVNlcnZpY2VdLFxyXG4gIGhvc3Q6IHtcclxuICAgIGRpcjogJ2x0cidcclxuICB9XHJcbn0pXHJcbi8qKiBmbG93LXZpZXcgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIEZsb3dWaWV3Q29tcG9uZW50IGV4dGVuZHMgVHJhY2VCYXNlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIG1vZGVsOiBEb2N1bWVudE1vZGVsPGFueT47XHJcbiAgQElucHV0KCkgY29ubmVjdG9yVHlwZTogU2VnbWVudHMgPSAnT3J0aG9nb25hbCc7XHJcbiAgZGlhZ3JhbTogRGlhZ3JhbTtcclxuICByZWFkb25seSB0b29sOiBEaWFncmFtVG9vbHMgPSBEaWFncmFtVG9vbHMuWm9vbVBhbjtcclxuICByZWFkb25seSBkaWFncmFtQ29uc3RyYWludHM6IERpYWdyYW1Db25zdHJhaW50cyA9XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuRGVmYXVsdCB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuUGFuIHxcclxuICAgIERpYWdyYW1Db25zdHJhaW50cy5MaW5lUm91dGluZyB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuWm9vbTtcclxuICBwdWJsaWMgcmVhZG9ubHkgbGF5b3V0ID0ge1xyXG4gICAgdHlwZTogJ0NvbXBsZXhIaWVyYXJjaGljYWxUcmVlJyxcclxuICAgIGNvbm5lY3Rpb25Qb2ludE9yaWdpbjogQ29ubmVjdGlvblBvaW50T3JpZ2luLkRpZmZlcmVudFBvaW50LFxyXG4gICAgaG9yaXpvbnRhbFNwYWNpbmc6IDUwLFxyXG4gICAgZW5hYmxlUm91dGluZzogdHJ1ZSxcclxuICAgIHZlcnRpY2FsU3BhY2luZzogNTAsXHJcbiAgICAvL2Nvbm5lY3Rpb25EaXJlY3Rpb246ICdPcmllbnRhdGlvbicsXHJcbiAgICBvcmllbnRhdGlvbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1JpZ2h0VG9MZWZ0JyA6ICdMZWZ0VG9SaWdodCcsXHJcbiAgfSBhcyBMYXlvdXRNb2RlbDtcclxuXHJcbiAgcmVhZG9ubHkgc2Nyb2xsU2V0dGluZ3MgPSB7XHJcbiAgICBtaW5ab29tOiAuNSxcclxuICAgIHNjcm9sbExpbWl0OiAnRGlhZ3JhbScsXHJcbiAgICBjYW5BdXRvU2Nyb2xsOiB0cnVlLFxyXG4gICAgY3VycmVudFpvb206IDEuMixcclxuICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBib3R0b206IDAgfSxcclxuICAgIGF1dG9TY3JvbGxCb3JkZXI6IHsgdG9wOiAwLCBib3R0b206IDAgfSxcclxuICAgIG1heFpvb206IDIuNVxyXG4gIH0gYXMgU2Nyb2xsU2V0dGluZ3NNb2RlbDtcclxuXHJcbiAgcmVhZG9ubHkgc25hcFNldHRpbmdzID0ge1xyXG4gICAgY29uc3RyYWludHM6IFNuYXBDb25zdHJhaW50cy5Ob25lLFxyXG4gICAgZ3JpZFR5cGU6ICdEb3RzJ1xyXG4gIH0gYXMgU25hcFNldHRpbmdzTW9kZWw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlndXJhdGlvbjogeyBbbmFtZTogc3RyaW5nXTogRmxvd05vZGUgfSA9IHt9O1xyXG4gIHByaXZhdGUgX2FjY2VudENvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICAvKiogd29ya2Zsb3ctdmlldyBjdG9yICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYWNjb3VudHM6IEFjY291bnRTZXJ2aWNlLCBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSwgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHVyYXRpb246IER1cmF0aW9uRm9ybWF0UGlwZSxcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxyXG4gICAgaHViOiBIdWJTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihodWIpO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5vZGVzLmZvckVhY2gobiA9PlxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uW24ubmFtZV0gPSBuKTtcclxuICAgIF9zZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9hY2NlbnRDb2xvciA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhfY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5faW5pdGlhbGl6ZSgpO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9pbml0aWFsaXplKCkge1xyXG4gICAgY29uc3QgeyBjb25uZWN0b3JzLCBub2RlcywgaW5kaWNhdG9ycyB9ID0gYXdhaXQgdGhpcy5fcHJlcGFyZSgpO1xyXG4gICAgdGhpcy5kaWFncmFtICYmIHRoaXMuZGlhZ3JhbS5kZXN0cm95KCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gPSBuZXcgRGlhZ3JhbSh7XHJcbiAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgIGhlaWdodDogMzgwLFxyXG4gICAgICBub2RlcyxcclxuICAgICAgY29ubmVjdG9ycyxcclxuICAgICAgbGF5b3V0OiB0aGlzLmxheW91dCxcclxuICAgICAgdG9vbDogdGhpcy50b29sLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgIHNjcm9sbFNldHRpbmdzOiB0aGlzLnNjcm9sbFNldHRpbmdzLFxyXG4gICAgICBzbmFwU2V0dGluZ3M6IHRoaXMuc25hcFNldHRpbmdzLFxyXG4gICAgICBjb25zdHJhaW50czogdGhpcy5kaWFncmFtQ29uc3RyYWludHMsXHJcbiAgICAgIGdldENvbm5lY3RvckRlZmF1bHRzOiB0aGlzLmNvbm5EZWZhdWx0cy5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXROb2RlRGVmYXVsdHM6IHRoaXMubm9kZURlZmF1bHRzLmJpbmQodGhpcyksXHJcbiAgICB9LCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5kaWFncmFtLmRvTGF5b3V0KCk7XHJcbiAgICBpbmRpY2F0b3JzLmZvckVhY2goKG4sIGkpID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5kaWFncmFtLmdldE5vZGVPYmplY3QoKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5wYXJlbnRJZCk7XHJcbiAgICAgIG4ub2Zmc2V0WCA9IHBhcmVudC5vZmZzZXRYICsgKHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/IC0yNSA6IDI1KTtcclxuICAgICAgbi5vZmZzZXRZID0gcGFyZW50Lm9mZnNldFkgKyAyNTtcclxuICAgICAgbi56SW5kZXggPSAxMDAwICsgaTtcclxuICAgICAgdGhpcy5kaWFncmFtLmFkZChuKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFncmFtLmZpdFRvUGFnZSgpO1xyXG4gICAgaW50ZXJ2YWwoNjAwMDApLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoXHJcbiAgICAgIHRoaXMuX3JlZnJlc2guYmluZCh0aGlzKVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcmVmcmVzaCgpIHtcclxuICAgIHN1cGVyLnJlc2V0RXN0aW1hdGVUaW1lKCk7XHJcbiAgICB0aGlzLmRpYWdyYW0ubm9kZXMuZm9yRWFjaChuID0+IHtcclxuICAgICAgY29uc3QgeyBub2RlLCByZWNpcGllbnQgfSA9IG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsO1xyXG4gICAgICBpZiAocmVjaXBpZW50KSB7XHJcbiAgICAgICAgaWYgKCFyZWNpcGllbnQucmVwbGllZCAmJiByZWNpcGllbnQucGVuZGluZykge1xyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5lc3RpbWF0ZSkgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSk7XHJcbiAgICAgICAgICBlbHNlIGlmIChub2RlLnN0YW5kYXJkVGltZSkge1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmID0gbm9kZS5zdGFuZGFyZFRpbWUgLSBkYXlqcygpLmRpZmYobm9kZS50aW1lLCAncycpO1xyXG4gICAgICAgICAgICBpZiAoZGlmZiA+IDApXHJcbiAgICAgICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZGlmZikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbi50b29sdGlwLmNvbnRlbnQgPSB0aGlzLl90b29sdGlwKChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpZiAobm9kZSAmJiBub2RlLmVzdGltYXRlKVxyXG4gICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSksXHJcbiAgICAgICAgICAgIG4udG9vbHRpcC5jb250ZW50ID0gdGhpcy5fdG9vbHRpcCgobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXApO1xyXG4gICAgfSk7XHJcbiAgIC8vIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gb2JqXHJcbiAgICovXHJcbiAgcHVibGljIG5vZGVEZWZhdWx0cyhvYmo6IE5vZGVNb2RlbCk6IE5vZGVNb2RlbCB7XHJcbiAgICBjb25zdCB7IHJlY2lwaWVudCwgbm9kZSwgaW5kaWNhdG9yIH0gPSBvYmouYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsO1xyXG5cclxuICAgIGlmIChpbmRpY2F0b3IpIHtcclxuICAgICAgb2JqLndpZHRoID0gb2JqLmhlaWdodCA9IDE1O1xyXG4gICAgICBvYmouc3R5bGUuc3Ryb2tlV2lkdGggPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIG9iai53aWR0aCA9IG9iai5oZWlnaHQgPSA1MDtcclxuICAgICAgaWYgKG9iai5hbm5vdGF0aW9ucyAmJiBvYmouYW5ub3RhdGlvbnMubGVuZ3RoKSBvYmouYW5ub3RhdGlvbnNbMF0uc3R5bGUuY29sb3IgPSB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgaWYgKG5vZGUgJiYgbm9kZS5lc3RpbWF0ZSkge1xyXG4gICAgICAgIG9iai5zdHlsZS5zdHJva2VDb2xvciA9IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snO1xyXG4gICAgICAgIG9iai5zdHlsZS5vcGFjaXR5ID0gb2JqLmFubm90YXRpb25zWzBdLnN0eWxlLm9wYWNpdHkgPSAuNjtcclxuICAgICAgICBvYmouc3R5bGUuZmlsbCA9ICd0cmFuc3BhcmVudCc7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgb2JqLnN0eWxlLnN0cm9rZUNvbG9yID0gdGhpcy5fYWNjZW50Q29sb3I7XHJcbiAgICAgICAgb2JqLnN0eWxlLmZpbGwgPSByZWNpcGllbnQgJiYgcmVjaXBpZW50LnBlbmRpbmcgP1xyXG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQgPyA1MDAgOiA0MDApIDogJ3RyYW5zcGFyZW50JztcclxuICAgICAgfVxyXG4gICAgICBvYmouc3R5bGUuc3Ryb2tlV2lkdGggPSAyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbm5lY3RvclxyXG4gICAqL1xyXG4gIHB1YmxpYyBjb25uRGVmYXVsdHMoY29ubmVjdG9yOiBDb25uZWN0b3JNb2RlbCkge1xyXG4gICAgY29ubmVjdG9yLnR5cGUgPSB0aGlzLmNvbm5lY3RvclR5cGU7XHJcbiAgICBjb25uZWN0b3IuY29ybmVyUmFkaXVzID0gNjtcclxuICAgIGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3IuaGVpZ2h0ID0gNztcclxuICAgIGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iud2lkdGggPSA3O1xyXG4gICAgaWYgKChjb25uZWN0b3IuYWRkSW5mbyBhcyBDb25uZWN0b3JJbmZvTW9kZWwpLmVzdGltYXRlKSB7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VEYXNoQXJyYXkgPSAnMiAyJztcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZUNvbG9yID1cclxuICAgICAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLmZpbGwgPVxyXG4gICAgICAgIGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iuc3R5bGUuc3Ryb2tlQ29sb3IgPVxyXG4gICAgICAgIHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snO1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlV2lkdGggPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VDb2xvciA9IGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iuc3R5bGUuc3Ryb2tlQ29sb3IgPSBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLmZpbGwgPSB0aGlzLl9hY2NlbnRDb2xvcjtcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZVdpZHRoID0gMjtcclxuICAgIH1cclxuICAgIGNvbm5lY3Rvci50YXJnZXREZWNvcmF0b3Iuc2hhcGUgPSAnTm9uZSc7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3ByZXBhcmUoKTogUHJvbWlzZTx7IG5vZGVzOiBOb2RlTW9kZWxbXTsgY29ubmVjdG9yczogQ29ubmVjdG9yTW9kZWxbXTsgaW5kaWNhdG9yczogTm9kZU1vZGVsW10gfT4ge1xyXG4gICAgY29uc3QgeyBjb25uZWN0b3JzOiBkY29ubmVjdG9ycywgbm9kZXM6IGRub2RlcyB9ID0gdGhpcy5tb2RlbC53b3JrZmxvdztcclxuICAgIGNvbnN0IGluZGljYXRvcnM6IE5vZGVNb2RlbFtdID0gW10sIGNvbm5lY3RvcnM6IENvbm5lY3Rvck1vZGVsW10gPSBbXSwgbm9kZXM6IE5vZGVNb2RlbFtdID0gW107XHJcbiAgICBsZXQgekluZGV4ID0gNTAwO1xyXG4gICAgZm9yIChsZXQgbm9kZSBvZiBkbm9kZXMpIHtcclxuICAgICAgaWYgKG5vZGVzLmZpbmQobiA9PiBuLmlkID09IG5vZGUuaWQpKSBjb250aW51ZTtcclxuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB0aGlzLl9jb25maWd1cmF0aW9uW25vZGUudHlwZV07XHJcbiAgICAgIGxldCByZWNpcGllbnRzID0gdGhpcy5tb2RlbC5yZWNpcGllbnRzLlxyXG4gICAgICAgIGZpbHRlcihyID0+IHIubm9kZUlkID09PSBub2RlLmlkICYmXHJcbiAgICAgICAgICAoIXRoaXMubW9kZWwuaXNzdWVkIHx8IHIucmVjZWl2ZWQgPj0gdGhpcy5tb2RlbC5pc3N1ZWQpKVxyXG4gICAgICAgIC5zb3J0KChyMCwgcjEpID0+XHJcbiAgICAgICAgICByMC5yZWNlaXZlZCA+IHIxLnJlY2VpdmVkID8gMSA6IC0xKTtcclxuICAgICAgaWYgKHJlY2lwaWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHIgPSAwO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgIHZhciByZWNpcGllbnQgPSByZWNpcGllbnRzW3JdO1xyXG4gICAgICAgICAgbGV0IGV4aXN0cyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZSB1c2VyIHJlY2lwaWVudCBvbiBzYW1lIG5vZGVcclxuICAgICAgICAgIGxldCBqID0gMDtcclxuICAgICAgICAgIHdoaWxlIChqIDwgciAmJiAhZXhpc3RzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWNpcGllbnRzW2pdLnVzZXJJZCA9PT0gcmVjaXBpZW50LnVzZXJJZCkgZXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICAgICAgZWxzZSBqKys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZXhpc3RzKVxyXG4gICAgICAgICAgICByZWNpcGllbnRzLnNwbGljZShyZWNpcGllbnQuZXN0aW1hdGUgPyByIDogaiwgMSk7XHJcbiAgICAgICAgICBlbHNlIHIrKztcclxuICAgICAgICB9IHdoaWxlIChyIDwgcmVjaXBpZW50cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICBmb3IgKHIgPSAwOyByIDwgcmVjaXBpZW50cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgbGV0IHJlY2lwaWVudCA9IHJlY2lwaWVudHNbcl07XHJcbiAgICAgICAgICBjb25zdCB7IGFubm90YXRpb24sIHRvb2x0aXAgfSA9IGF3YWl0IHRoaXMuX25vdGUobm9kZSwgcmVjaXBpZW50KTtcclxuICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLl90b29sdGlwKHRvb2x0aXApO1xyXG4gICAgICAgICAgY29uc3Qgbm9kID0ge1xyXG4gICAgICAgICAgICBpZDogciA9PT0gMCA/IG5vZGUuaWQgOiBub2RlLmlkICsgci50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBzaGFwZTogdGhpcy5fY29uZmlndXJhdGlvbltub2RlLnR5cGVdLnNoYXBlLFxyXG4gICAgICAgICAgICB6SW5kZXg6IHpJbmRleCsrLFxyXG4gICAgICAgICAgICB0b29sdGlwOiB7XHJcbiAgICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ1RvcENlbnRlcidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29uc3RyYWludHM6IGNvbnRlbnQgP1xyXG4gICAgICAgICAgICAgIE5vZGVDb25zdHJhaW50cy5EZWZhdWx0IHwgTm9kZUNvbnN0cmFpbnRzLlRvb2x0aXAgOlxyXG4gICAgICAgICAgICAgIE5vZGVDb25zdHJhaW50cy5EZWZhdWx0LFxyXG4gICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgICByZWNpcGllbnQsXHJcbiAgICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWwsXHJcbiAgICAgICAgICAgIGFubm90YXRpb25zOiBbe1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogNCB9LFxyXG4gICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAnVG9wJyxcclxuICAgICAgICAgICAgICBvZmZzZXQ6IHtcclxuICAgICAgICAgICAgICAgIHk6IDEsXHJcbiAgICAgICAgICAgICAgICB4OiAuNVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgbm9kZXMucHVzaChub2QpO1xyXG4gICAgICAgICAgLy8gYWRkIGFjdGlvbiBpbmRpY2F0b3JcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQuYWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5hY3Rpb25zLmZpbmQoYSA9PiBhLm5hbWUgPT09IHJlY2lwaWVudC5hY3Rpb24pO1xyXG4gICAgICAgICAgICBpZiAoYWN0aW9uLnNoYXBlICYmICFyZWNpcGllbnQucGVuZGluZykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkluZGljYXRvciA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBub2QuaWQgKyAnYWN0aW9uJyxcclxuICAgICAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgICAgZGF0YTogYWN0aW9uLnNoYXBlLFxyXG4gICAgICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCcsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgZmlsbDogYWN0aW9uLmNvbG9yIHx8IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KDkwMClcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlTW9kZWw7XHJcbiAgICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKGFjdGlvbkluZGljYXRvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIGZ5aSBpbmRpY2F0b3JcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQuZnlpKVxyXG4gICAgICAgICAgICBpbmRpY2F0b3JzLnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBub2QuaWQgKyAnZnlpJyxcclxuICAgICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogRllJX1BBVEgsXHJcbiAgICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICBmaWxsOiAnIzE5NzZkMidcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2QuaWRcclxuICAgICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgICAgfSBhcyBOb2RlTW9kZWxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIGVzY2FsYXRlIGluZGljYXRvclxyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5lc2NhbGF0ZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZXNjYWxhdGVJbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAgICAgaWQ6IG5vZC5pZCArICdlc2NhbGF0ZScsXHJcbiAgICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IEVTQ0FMQVRFRF9QQVRILFxyXG4gICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgZmlsbDogdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoOTAwKVxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZC5pZFxyXG4gICAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVNb2RlbDtcclxuICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKGVzY2FsYXRlSW5kaWNhdG9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgeyBzdGF0ZSwgYW5ub3RhdGlvbiwgdG9vbHRpcCB9ID0gYXdhaXQgdGhpcy5fc2hhcGUobm9kZSk7XHJcbiAgICAgICAgY29uc3QgeyBzaGFwZSB9ID0gY29uZmlndXJhdGlvbjtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fdG9vbHRpcCh0b29sdGlwKTtcclxuICAgICAgICBub2Rlcy5wdXNoKHtcclxuICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgc2hhcGUsLy86IHt0eXBlOiAnUGF0aCcsIGRhdGE6IEVMTElQU0lTIH0sXHJcbiAgICAgICAgICB6SW5kZXg6IHpJbmRleCsrLFxyXG4gICAgICAgICAgdG9vbHRpcDoge1xyXG4gICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJ1RvcENlbnRlcidcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb25zdHJhaW50czogY29udGVudCA/XHJcbiAgICAgICAgICAgIE5vZGVDb25zdHJhaW50cy5EZWZhdWx0IHwgTm9kZUNvbnN0cmFpbnRzLlRvb2x0aXAgOlxyXG4gICAgICAgICAgICBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCxcclxuICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgdG9vbHRpcCxcclxuICAgICAgICAgICAgbm9kZVxyXG4gICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsLFxyXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IFt7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGFubm90YXRpb24sXHJcbiAgICAgICAgICAgIG9mZnNldDogc2hhcGUudHlwZSA9PT0gJ1BhdGgnID8ge1xyXG4gICAgICAgICAgICAgIHk6IDFcclxuICAgICAgICAgICAgfSA6IHsgeDogLjUgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IHNoYXBlLnR5cGUgPT09ICdQYXRoJyA/ICdUb3AnIDogJ0NlbnRlcidcclxuICAgICAgICAgIH1dXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLnNoYXBlICYmICFub2RlLmVzdGltYXRlKVxyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnc3RhdGUnLFxyXG4gICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICBkYXRhOiBzdGF0ZS5zaGFwZSxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNYXhZTWF4JyA6ICdYTWluWU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBzdGF0ZS5jb2xvciB8fCAnYmxhY2snXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgbm9kZTogbm9kZVxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChub2RlLmVycm9yKSB7XHJcbiAgICAgICAgICBjb25zdCB3YXJubmluZ0luZGljYXRvciA9IHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQgKyAnZXhjZXB0aW9uJyxcclxuICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgZGF0YTogV0FSTk5JTkdfUEFUSCxcclxuICAgICAgICAgICAgICBhbGlnbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1hNaW5ZTWF4JyA6ICdYTWF4WU1heCdcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICBmaWxsOiBnZXRXYXJuKDgwMClcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5pZFxyXG4gICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHdhcm5uaW5nSW5kaWNhdG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFRPRE9cclxuICAgIC8vIGxvbmdlc3QgcGF0aCwgcmVtb3ZlIHNob3J0IHBhdGggY29ubmVjdG9yc1xyXG4gICAgZnVuY3Rpb24gZGVlcGVuKG5vZGVJZDogc3RyaW5nLCBkZXB0aCA9IDApIHtcclxuICAgICAgbm9kZXMuZmlsdGVyKG4gPT4gKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5ub2RlLmlkID09PSBub2RlSWQpLlxyXG4gICAgICAgIGZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICBjb25zdCB7IGRlcHRoOiBub2RlRGVwdGggfSA9IG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsO1xyXG4gICAgICAgICAgaWYgKG5vZGVEZXB0aCkge1xyXG4gICAgICAgICAgICBpZiAobm9kZURlcHRoIDwgZGVwdGgpIHtcclxuICAgICAgICAgICAgICBkY29ubmVjdG9ycy5maWx0ZXIoYyA9PiBjLnRhcmdldElkID09PSBub2RlSWQgJiZcclxuICAgICAgICAgICAgICAgIG5vZGVzLmZpbHRlcihuID0+IChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkubm9kZS5pZCA9PT0gYy5zb3VyY2VJZCAmJlxyXG4gICAgICAgICAgICAgICAgICAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLmRlcHRoID09PSBub2RlRGVwdGggLSAxKS5sZW5ndGgpLlxyXG4gICAgICAgICAgICAgICAgZm9yRWFjaChjID0+XHJcbiAgICAgICAgICAgICAgICAgIGRjb25uZWN0b3JzLnJlbW92ZShjKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLmRlcHRoID0gZGVwdGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZURlcHRoID4gZGVwdGgpXHJcbiAgICAgICAgICAgICAgZGNvbm5lY3RvcnMuZmlsdGVyKGMgPT4gYy5zb3VyY2VJZCA9PT0gbm9kZUlkKS5mb3JFYWNoKGMgPT4gZGNvbm5lY3RvcnMucmVtb3ZlKGMpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkuZGVwdGggPSBkZXB0aDtcclxuICAgICAgICAgICAgZGNvbm5lY3RvcnMuZmlsdGVyKGMgPT4gYy5zb3VyY2VJZCA9PT0gbm9kZUlkKS5mb3JFYWNoKGMgPT4gXHJcbiAgICAgICAgICAgICAgZGVlcGVuKGMudGFyZ2V0SWQsIGRlcHRoICsgMSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGNvbm5lY3RvciBvZiBkY29ubmVjdG9ycykge1xyXG4gICAgICBsZXQgc291cmNlcyA9IG5vZGVzLmZpbHRlcihuID0+IChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkubm9kZS5pZCA9PT0gY29ubmVjdG9yLnNvdXJjZUlkKSxcclxuICAgICAgICB0YXJnZXRzID0gbm9kZXMuZmlsdGVyKG4gPT4gKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5ub2RlLmlkID09PSBjb25uZWN0b3IudGFyZ2V0SWQpO1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcylcclxuICAgICAgICBmb3IgKGxldCB0YXJnZXQgb2YgdGFyZ2V0cykge1xyXG4gICAgICAgICAgY29ubmVjdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZS5pZCxcclxuICAgICAgICAgICAgdGFyZ2V0SUQ6IHRhcmdldC5pZCxcclxuICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgIGVzdGltYXRlOiBjb25uZWN0b3IuZXN0aW1hdGUsXHJcbiAgICAgICAgICAgICAgdGltZTogY29ubmVjdG9yLnRpbWVcclxuICAgICAgICAgICAgfSBhcyBDb25uZWN0b3JJbmZvTW9kZWxcclxuICAgICAgICAgIH0gYXMgQ29ubmVjdG9yTW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IGNvbm5lY3RvcnMsIG5vZGVzLCBpbmRpY2F0b3JzIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBub2RlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2hhcGUobm9kZTogTm9kZUluZm8pOiBQcm9taXNlPHsgc3RhdGU6IFN0YXRlOyBhbm5vdGF0aW9uOiBzdHJpbmc7IHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWw7IH0+IHtcclxuICAgIGNvbnN0IHRvb2x0aXAgPSB7fSBhcyBOb2RlVG9vbHRpcE1vZGVsO1xyXG4gICAgaWYgKG5vZGUuZXJyb3IpIHRvb2x0aXAuZXJyb3IgPSBub2RlLmVycm9yO1xyXG4gICAgbGV0IGFubm90YXRpb246IHN0cmluZywgc3RhdGU6IFN0YXRlO1xyXG4gICAgY29uc3QgbG9nID0gdGhpcy5tb2RlbC5sb2cuZmlsdGVyKGwgPT4gbC5ub2RlSWQgPT09IG5vZGUuaWQgJiYgKCF0aGlzLm1vZGVsLmlzc3VlZCB8fCBsLnRpbWUgPj0gdGhpcy5tb2RlbC5pc3N1ZWQpKTtcclxuICAgIGNvbnN0IHN0YXRlTG9nID0gbG9nLmZpbmQobCA9PiBsLnR5cGUgPT09ICdTdGF0ZUNoYW5nZScpO1xyXG4gICAgaWYgKHN0YXRlTG9nKSB7XHJcbiAgICAgIHN0YXRlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnN0YXRlcy5maW5kKHMgPT4gcy5uYW1lID09PSBzdGF0ZUxvZy5zdGF0ZSk7XHJcblxyXG4gICAgICBpZiAoc3RhdGVMb2cuZHVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGRheWpzLmR1cmF0aW9uKHN0YXRlTG9nLmR1cmF0aW9uLCAncycpO1xyXG4gICAgICAgIHRvb2x0aXAuZHVyYXRpb24gPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEdXJhdGlvblRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZHVyYXRpb24pKTtcclxuICAgICAgfVxyXG4gICAgICBhbm5vdGF0aW9uID0gKG5vZGUuZXN0aW1hdGUgPyBzdGF0ZS5mdXR1cmUgOiBzdGF0ZS5wYXN0KSB8fCBzdGF0ZS50aXRsZTtcclxuICAgIH1cclxuICAgIGlmIChub2RlLnR5cGUgPT09IFNUQVJUX05PREUpIHtcclxuICAgICAgaWYgKCFub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgY29uc3QgeyBub3RlLCByb2xlIH0gPSBhd2FpdCB0aGlzLl9zdGFydE5vZGUoKTtcclxuICAgICAgICB0b29sdGlwLm5vdGUgPSBub3RlLFxyXG4gICAgICAgICAgdG9vbHRpcC5yb2xlID0gcm9sZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChub2RlLm5vdGUpXHJcbiAgICAgICAgYW5ub3RhdGlvbiA9IG5vZGUubm90ZTtcclxuICAgICAgaWYgKG5vZGUuZXN0aW1hdGUpXHJcbiAgICAgICAgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgc3RhdGUsIHRvb2x0aXAsIGFubm90YXRpb24gfTtcclxuICB9XHJcbiAgcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhZ3JhbSkgdGhpcy5kaWFncmFtLndpZHRoID0gJ2F1dG8nO1xyXG4gIH1cclxuICBwcml2YXRlIF90aW1lRXN0aW1hdGUobm9kZTogTm9kZUluZm8pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gc3VwZXIuX2VzdGltYXRlVGltZShub2RlKTtcclxuICAgIGlmIChtYXgpXHJcbiAgICAgIHJldHVybiAhbWluIHx8IG1pbiA9PT0gbWF4ID9cclxuICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCBkYXlqcy5kdXJhdGlvbihtYXgsICdzJykuaHVtYW5pemUoKSkgOlxyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZVJhbmdlJywgZGF5anMuZHVyYXRpb24obWluLCAncycpLmh1bWFuaXplKCksIGRheWpzLmR1cmF0aW9uKG1heCwgJ3MnKS5odW1hbml6ZSgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG9vbHRpcChvYmo6IE5vZGVUb29sdGlwTW9kZWwpIHtcclxuICAgIGNvbnN0IHsgbm90ZSwgcm9sZSwgc3Vic3RpdHV0aW5nLCBlc2NhbGF0aW9uLCBkdXJhdGlvbiwgc3RhbmRhcmRUaW1lLCBlc3RpbWF0ZWRUaW1lLCBlcnJvciwgZnlpIH0gPSBvYmpcclxuICAgIGNvbnN0IHJvd3MgPSBbbm90ZSwgc3Vic3RpdHV0aW5nLCBlc2NhbGF0aW9uLCBkdXJhdGlvbiwgZnlpLCByb2xlLCBlcnJvciwgc3RhbmRhcmRUaW1lLCBlc3RpbWF0ZWRUaW1lXTtcclxuICAgIGxldCBkaXY6IEhUTUxEaXZFbGVtZW50O1xyXG4gICAgcm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBpZiAoIXIpIHJldHVybjtcclxuICAgICAgaWYgKCFkaXYpIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLmlubmVyVGV4dCA9IHI7XHJcbiAgICAgIGRpdi5hcHBlbmQoc3Bhbik7XHJcbiAgICAgIGNvbnN0IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKTtcclxuICAgICAgZGl2LmFwcGVuZChicik7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkaXY7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXJ0Tm9kZSgpOiBQcm9taXNlPHsgbm90ZTogc3RyaW5nLCByb2xlOiBzdHJpbmc7IH0+IHtcclxuICAgIGxldCBub3RlOiBzdHJpbmcsIHJvbGU6IHN0cmluZztcclxuICAgIGNvbnN0IHRpbWUgPSB0aGlzLl9mcm9tTm93KHRoaXMubW9kZWwuaXNzdWVkKTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbC5vd25lckJ5SWQpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZWwub3duZXJCeUlkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLm93bmVySWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQpXHJcbiAgICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdZb3VTdWJtaXR0ZWROb3RlQnknLFxyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYnlHZW5kZXIsXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCB0aW1lKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm93bmVySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgbm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnWW91U3VibWl0dGVkTm90ZUJ5JyxcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmJ5R2VuZGVyLFxyXG4gICAgICAgICAgICB3aG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGJ5ID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHRoaXMubW9kZWwub3duZXJCeUlkKS50b1Byb21pc2UoKTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5vd25lcklkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZClcclxuICAgICAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1Ym1pdHRlZE5vdGVZb3VCeScsIGJ5LmdlbmRlcixcclxuICAgICAgICAgICAgYnkubmFtZSxcclxuICAgICAgICAgICAgdGltZSk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5tb2RlbC5vd25lcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSB7XHJcbiAgICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJtaXR0ZWROb3RlQnknLCBieS5nZW5kZXIsXHJcbiAgICAgICAgICAgIGJ5Lm5hbWUsXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLFxyXG4gICAgICAgICAgICB0aW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQodGhpcy5tb2RlbC5vd25lcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgIG5vdGUgPVxyXG4gICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1Ym1pdHRlZE5vdGVCeScsXHJcbiAgICAgICAgICAgICAgYnkuZ2VuZGVyLFxyXG4gICAgICAgICAgICAgIGJ5Lm5hbWUsXHJcbiAgICAgICAgICAgICAgd2hvLm5hbWUsXHJcbiAgICAgICAgICAgICAgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChieS5yb2xlKVxyXG4gICAgICAgICAgcm9sZSA9IGAtICR7Ynkucm9sZX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMubW9kZWwub3duZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5pc0ltcGVyc29uYXRpbmcpXHJcbiAgICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJtaXR0ZWROb3RlJywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlciwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIG5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VTdWJtaXR0ZWROb3RlJywgdGltZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHRoaXMubW9kZWwub3duZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgbm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnU3VibWl0dGVkTm90ZScsIHdoby5nZW5kZXIsIHdoby5uYW1lLCB0aW1lKTtcclxuICAgICAgICBpZiAod2hvLnJvbGUpXHJcbiAgICAgICAgICByb2xlID0gYC0gJHt3aG8ucm9sZX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgbm90ZSwgcm9sZSB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfbm90ZShub2RlOiBOb2RlSW5mbywgcmVjaXBpZW50OiBSZWNpcGllbnQpOiBQcm9taXNlPHsgYW5ub3RhdGlvbjogc3RyaW5nOyB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsIH0+IHtcclxuICAgIGNvbnN0IHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWwgPSB7fTtcclxuXHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8vIHlvdVxyXG4gICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZylcclxuICAgICAgICBhbm5vdGF0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWU7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBhbm5vdGF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91Jyk7XHJcbiAgICAgIGlmIChyZWNpcGllbnQucm9sZSkge1xyXG4gICAgICAgIGNvbnN0IHJvbGUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUucm9sZXMuZmluZChvID0+IG8ubmFtZSA9PT0gcmVjaXBpZW50LnJvbGUpO1xyXG4gICAgICAgIGlmIChyb2xlKSB0b29sdGlwLnJvbGUgPSBgLSAke3JvbGUudGl0bGV9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgLy8gc29tZW9uZSBlbHNlXHJcbiAgICB7XHJcbiAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgYW5ub3RhdGlvbiA9IHdoby5uYW1lO1xyXG4gICAgICBpZiAod2hvLnJvbGUpIHRvb2x0aXAucm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnJvbGUpIHtcclxuICAgICAgICBjb25zdCByb2xlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnJvbGVzLmZpbmQobyA9PiBvLm5hbWUgPT09IHJlY2lwaWVudC5yb2xlKTtcclxuICAgICAgICBpZiAocm9sZSkgdG9vbHRpcC5yb2xlID0gYC0gJHtyb2xlLnRpdGxlfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICBjb25zdCB0aW1lID0gdGhpcy5fZnJvbU5vdyhyZWNpcGllbnQucmVwbGllZCk7XHJcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLm1vZGVsLnJlY2lwaWVudHMuZmlsdGVyKHIgPT4gci5vcmlnaW5JZCA9PT0gcmVjaXBpZW50LmlkKSwgdG8gPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgaWYgKHRhcmdldHMubGVuZ3RoKSBmb3IgKGxldCBzaWJsaW5nIG9mIHRhcmdldHMpIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQoc2libGluZy51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvLnB1c2god2hvLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnQuYnlJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmJ5SWQpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYnlHZW5kZXIpO1xyXG4gICAgICAgICAgaWYgKHRvLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZClcclxuICAgICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91VG8nLCBhY3Rpb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuam9pbih0byksIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnlZb3VUbycsIGFjdGlvbixcclxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgd2hvLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKVxyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91JywgYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91JywgYWN0aW9uLCB3aG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgYnkgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LmJ5SWQpLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9hY3Rpb24ocmVjaXBpZW50LmFjdGlvbiwgYnkuZ2VuZGVyKTtcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSB7XHJcbiAgICAgICAgICAgIGlmICh0by5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VUYWtlbkFjdGlvbkJ5VG8nLCBieS5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uQnknLCBieS5uYW1lLCBhY3Rpb24sIHRpbWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQudXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgaWYgKHRvLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnlUbycsIGJ5Lm5hbWUsIGFjdGlvbiwgdGhpcy5fdHJhbnNsYXRlLmpvaW4odG8pLCB3aG8ubmFtZSwgdGltZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnknLCBieS5uYW1lLCBhY3Rpb24sIHdoby5uYW1lLCB0aW1lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodG8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuZ2VuZGVyKTtcclxuICAgICAgICAgIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZylcclxuICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5UbycsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgdGltZSk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uVG8nLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgdGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHdoby5nZW5kZXIpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5UbycsIHdoby5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5nZW5kZXIpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuJywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIGFjdGlvbiwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZCkge1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCBZb3UpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uJywgYWN0aW9uLCB0aW1lKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHdoby5nZW5kZXIpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuJywgd2hvLm5hbWUsIGFjdGlvbiwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFyZWNpcGllbnQuZXN0aW1hdGUpIHtcclxuICAgICAgY29uc3QgdGltZSA9IHRoaXMuX2Zyb21Ob3cocmVjaXBpZW50LnJlY2VpdmVkKTtcclxuICAgICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKVxyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdSZWNlaXZlZEJ5JywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmdlbmRlciwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIHRpbWUpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVJlY2VpdmVkJywgdGltZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnUmVjZWl2ZWRUaW1lJywgd2hvLmdlbmRlciwgdGltZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0ZUlkKSB7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuc3Vic3RpdHV0ZUlkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZClcclxuICAgICAgICB0b29sdGlwLnN1YnN0aXR1dGluZyA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnU3Vic3RpdHV0aW5nWW91JywgdGhpcy5fc2Vzc2lvbi5nZW5kZXIpO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpbmcgPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnN1YnN0aXR1dGVJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1YnN0aXR1dGluZ0ZvcicsIHN1YnN0aXR1dGluZy5nZW5kZXIsIHN1YnN0aXR1dGluZy5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlY2lwaWVudC5vcmlnaW5JZCAmJiAhcmVjaXBpZW50LnJlcGxpZWQpIHtcclxuICAgICAgY29uc3Qgb3JpZ2luID0gdGhpcy5tb2RlbC5yZWNpcGllbnRzLmZpbmQociA9PiByLmlkID09PSByZWNpcGllbnQub3JpZ2luSWQpO1xyXG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSBvcmlnaW4uYWN0aW9uKSxcclxuICAgICAgICBhZGplY3RpdmUgPSBhY3Rpb24uYWRqZWN0aXZlIHx8IGFjdGlvbi5wYXN0IHx8IGFjdGlvbi50aXRsZTtcclxuICAgICAgaWYgKChvcmlnaW4uYnlJZCB8fCBvcmlnaW4udXNlcklkKSA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25CeVlvdScsIGFkamVjdGl2ZSk7XHJcbiAgICAgIGVsc2UgaWYgKG9yaWdpbi5ieUlkKSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KG9yaWdpbi51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGNvbnN0IGJ5ID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KG9yaWdpbi5ieUlkKS50b1Byb21pc2UoKTtcclxuICAgICAgICB0b29sdGlwLnN1YnN0aXR1dGluZyA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvbkJ5QnknLCBhZGplY3RpdmUsIGJ5Lm5hbWUsIHdoby5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQob3JpZ2luLnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25CeScsIGFkamVjdGl2ZSwgd2hvLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmVjaXBpZW50LmVzY2FsYXRlZCkge1xyXG4gICAgICBjb25zdCBlc2NhbGF0aW9uID0gdGhpcy5tb2RlbC5sb2cuZmluZChsID0+IGwudHlwZSA9PT0gJ0VzY2FsYXRpb24nICYmIGwucmVjaXBpZW50SWQgPT09IHJlY2lwaWVudC5vcmlnaW5JZCk7XHJcbiAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChlc2NhbGF0aW9uLnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRheWpzLmR1cmF0aW9uKGVzY2FsYXRpb24uZHVyYXRpb24sICdzJykpO1xyXG4gICAgICB0b29sdGlwLmVzY2FsYXRpb24gPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc2NhbGF0ZWRGcm9tJywgd2hvLm5hbWUsIGR1cmF0aW9uKTtcclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQucmVwbGllZCkge1xyXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGRheWpzKHJlY2lwaWVudC5yZXBsaWVkKS5kaWZmKHJlY2lwaWVudC5yZWNlaXZlZCwgJ3MnKTtcclxuICAgICAgdG9vbHRpcC5kdXJhdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0R1cmF0aW9uVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkdXJhdGlvbikpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAocmVjaXBpZW50LnBlbmRpbmcpIHtcclxuICAgICAgaWYgKHJlY2lwaWVudC5lc3RpbWF0ZSkgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpO1xyXG4gICAgICBlbHNlIGlmIChub2RlLnN0YW5kYXJkVGltZSkge1xyXG4gICAgICAgIGNvbnN0IGRpZmYgPSBub2RlLnN0YW5kYXJkVGltZSAtIGRheWpzKCkuZGlmZihub2RlLnRpbWUsICdzJyk7XHJcbiAgICAgICAgaWYgKGRpZmYgPiAwKVxyXG4gICAgICAgICAgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRXN0aW1hdGVUaW1lJywgdGhpcy5fZHVyYXRpb24udHJhbnNmb3JtKGRpZmYpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAobm9kZS5zdGFuZGFyZFRpbWUpXHJcbiAgICAgIHRvb2x0aXAuc3RhbmRhcmRUaW1lID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnTm9kZVN0YW5kYXJkVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShub2RlLnN0YW5kYXJkVGltZSkpO1xyXG4gICAgaWYgKHJlY2lwaWVudC5meWkpXHJcbiAgICAgIHRvb2x0aXAuZnlpID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRllJJyk7XHJcbiAgICByZXR1cm4geyBhbm5vdGF0aW9uLCB0b29sdGlwIH07XHJcbiAgfVxyXG4gIHByaXZhdGUgX2FjdGlvbihuYW1lOiBzdHJpbmcsIGdlbmRlcj86IEdlbmRlciB8ICd5b3UnKSB7XHJcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSBuYW1lKTtcclxuICAgIGlmICghYWN0aW9uKSByZXR1cm4gbmFtZTtcclxuICAgIGlmIChnZW5kZXIgPT09IFlvdSkge1xyXG4gICAgICBjb25zdCBnZW5kZXIgPSB0aGlzLl9zZXNzaW9uLmdlbmRlciwgcGVyc29uYWwgPVxyXG4gICAgICAgIChnZW5kZXIgPT09ICdNYWxlJyA/IChhY3Rpb24ueW91TWFsZSB8fCBhY3Rpb24ueW91KSA6XHJcbiAgICAgICAgICBnZW5kZXIgPT09ICdGZW1hbGUnID8gKGFjdGlvbi55b3VGZW1hbGUgfHwgYWN0aW9uLnlvdSkgOlxyXG4gICAgICAgICAgICBhY3Rpb24ueW91KTtcclxuICAgICAgcmV0dXJuIChwZXJzb25hbCB8fFxyXG4gICAgICAgIGFjdGlvbi5wYXN0IHx8XHJcbiAgICAgICAgYWN0aW9uLnRpdGxlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFzdCA9ICgoZ2VuZGVyID09PSAnTWFsZScgPyAoYWN0aW9uLnBhc3RNYWxlIHx8IGFjdGlvbi5wYXN0KSA6XHJcbiAgICAgIGdlbmRlciA9PT0gJ0ZlbWFsZScgPyAoYWN0aW9uLnBhc3RGZW1hbGUgfHwgYWN0aW9uLnBhc3QpIDogYWN0aW9uLnBhc3QpIHx8XHJcbiAgICAgIGFjdGlvbi50aXRsZSkudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBwYXN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZnJvbU5vdyhkYXRlOiBEYXRlKSB7XHJcbiAgICByZXR1cm4gZGF5anMoZGF0ZSkuZnJvbU5vdygpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gJiYgdGhpcy5kaWFncmFtLmRlc3Ryb3koKTtcclxuICB9XHJcbn1cclxuaW50ZXJmYWNlIENvbm5lY3RvckluZm9Nb2RlbCB7XHJcbiAgZXN0aW1hdGU/OiBib29sZWFuO1xyXG4gIHBhcmVudElkOiBzdHJpbmc7XHJcbiAgdGltZTogRGF0ZVxyXG59XHJcbmludGVyZmFjZSBOb2RlSW5mb01vZGVsIHtcclxuICB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsO1xyXG4gIG5vZGU6IE5vZGVJbmZvO1xyXG4gIGRlcHRoPzogbnVtYmVyO1xyXG4gIHJlY2lwaWVudDogUmVjaXBpZW50XHJcbiAgaW5kaWNhdG9yPzogYm9vbGVhbjtcclxuICBwYXJlbnRJZD86IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgTm9kZVRvb2x0aXBNb2RlbCB7XHJcbiAgZnlpPzogc3RyaW5nO1xyXG4gIGVycm9yPzogc3RyaW5nO1xyXG4gIG5vdGU/OiBzdHJpbmc7XHJcbiAgcm9sZT86IHN0cmluZztcclxuICBmcm9tPzogc3RyaW5nO1xyXG4gIHN1YnN0aXR1dGluZz86IHN0cmluZztcclxuICBlc2NhbGF0aW9uPzogc3RyaW5nO1xyXG4gIHN0YW5kYXJkVGltZT86IHN0cmluZztcclxuICBkdXJhdGlvbj86IHN0cmluZztcclxuICBlc3RpbWF0ZWRUaW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|
681
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2NvbXBvc2UvdHJhY2UvZmxvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXlCLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBMEMsWUFBWSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSw4QkFBOEIsRUFBb0QscUJBQXFCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hSLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7O0FBTzFEO0FBQ0UsK0NBQStDO0FBQy9DLFFBQVEsR0FBRyxrR0FBa0csRUFDN0csY0FBYyxHQUFHLG1RQUFtUSxFQUNwUixhQUFhLEdBQUcsc1RBQXNULENBQUM7QUFXelUseUJBQXlCO0FBQ3pCLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxTQUFTO0lBZ0M5Qyx5QkFBeUI7SUFDekIsWUFBb0IsU0FBeUIsRUFBRSxPQUF1QixFQUFVLFVBQTRCLEVBQ2xHLFNBQTZCLEVBQzdCLFdBQXVDLEVBQy9DLEdBQWU7UUFDZixLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBSkYsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBbUMsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDbEcsY0FBUyxHQUFULFNBQVMsQ0FBb0I7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LE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDcEY7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDakQsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFDUSxXQUFXO1FBQ2xCLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2QyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEIsQ0FBQzs7OEdBOXBCVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiw4S0FSbEIsRUFBRSwrQ0FFRyxDQUFDLDhCQUE4QixDQUFDOzJGQU1wQyxpQkFBaUI7a0JBVjdCLFNBQVM7K0JBQ0UsYUFBYSxZQUNiLEVBQUUsaUJBRUcsQ0FBQyw4QkFBOEIsQ0FBQyxRQUN6Qzt3QkFDSixHQUFHLEVBQUUsS0FBSztxQkFDWDtvUEFJUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOb2RlTW9kZWwsIENvbm5lY3Rvck1vZGVsLCBMYXlvdXRNb2RlbCwgRGlhZ3JhbVRvb2xzLCBEaWFncmFtLCBEaWFncmFtQ29uc3RyYWludHMsIENvbXBsZXhIaWVyYXJjaGljYWxUcmVlU2VydmljZSwgU2Nyb2xsU2V0dGluZ3NNb2RlbCwgU25hcFNldHRpbmdzTW9kZWwsIFNlZ21lbnRzLCBDb25uZWN0aW9uUG9pbnRPcmlnaW4sIFNuYXBDb25zdHJhaW50cywgTm9kZUNvbnN0cmFpbnRzIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItZGlhZ3JhbXMnO1xyXG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IERvY3VtZW50TW9kZWwsIFJlY2lwaWVudCwgTm9kZUluZm8sIEdlbmRlciwgRmxvd05vZGUsIFN0YXRlIH0gZnJvbSBcIi4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IGdldFdhcm4gfSBmcm9tICcuLi8uLi9jb3JlL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFRyYWNlQmFzZSwgWW91LCBTVEFSVF9OT0RFIH0gZnJvbSAnLi90cmFjZS5iYXNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEh1YlNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2h1Yi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHVyYXRpb25Gb3JtYXRQaXBlIH0gZnJvbSAnLi4vLi4vY29yZS9waXBlcy9kdXJhdGlvbi1mb3JtYXQucGlwZSc7XHJcblxyXG5jb25zdFxyXG4gIC8vRUxMSVBTSVMgPSAnTSA2NTAsIDE1MCBhIDc1LDE1MCAwIDEsMCAxLDAgeicsXHJcbiAgRllJX1BBVEggPSAnTTEyIDJDNi40OCAyIDIgNi40OCAyIDEyczQuNDggMTAgMTAgMTAgMTAtNC40OCAxMC0xMFMxNy41MiAyIDEyIDJ6bTEgMTVoLTJ2LTZoMnY2em0wLThoLTJWN2gydjJ6JyxcclxuICBFU0NBTEFURURfUEFUSCA9ICdNMjIgNS43MmwtNC42LTMuODYtMS4yOSAxLjUzIDQuNiAzLjg2TDIyIDUuNzJ6TTcuODggMy4zOUw2LjYgMS44NiAyIDUuNzFsMS4yOSAxLjUzIDQuNTktMy44NXpNMTIuNSA4SDExdjZsNC43NSAyLjg1Ljc1LTEuMjMtNC0yLjM3Vjh6TTEyIDRjLTQuOTcgMC05IDQuMDMtOSA5czQuMDIgOSA5IDljNC45NyAwIDktNC4wMyA5LTlzLTQuMDMtOS05LTl6bTAgMTZjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eicsXHJcbiAgV0FSTk5JTkdfUEFUSCA9ICdNIDEzLjc2MzczNSwxLjg0MzM3MzUgSCA2LjMwMzczNDkgbCAtNS4yNyw1LjI3IHYgNy40NTk5OTk1IGwgNS4yNyw1LjI3IGggNy40NjAwMDAxIGwgNS4yNywtNS4yNyBWIDcuMTEzMzczNSBaIG0gLTMuNzMsMTQuMjk5OTk5NSBjIC0wLjcyMDAwMDEsMCAtMS4zMDAwMDAxLC0wLjU4IC0xLjMwMDAwMDEsLTEuMyAwLC0wLjcyIDAuNTgsLTEuMyAxLjMwMDAwMDEsLTEuMyAwLjcyLDAgMS4zLDAuNTggMS4zLDEuMyAwLDAuNzIgLTAuNTgsMS4zIC0xLjMsMS4zIHogbSAxLC00LjMgSCA5LjAzMzczNDkgViA1Ljg0MzM3MzUgaCAyLjAwMDAwMDEgeic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1mbG93JyxcclxuICB0ZW1wbGF0ZTogJycsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmxvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHZpZXdQcm92aWRlcnM6IFtDb21wbGV4SGllcmFyY2hpY2FsVHJlZVNlcnZpY2VdLFxyXG4gIGhvc3Q6IHtcclxuICAgIGRpcjogJ2x0cidcclxuICB9XHJcbn0pXHJcbi8qKiBmbG93LXZpZXcgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIEZsb3dWaWV3Q29tcG9uZW50IGV4dGVuZHMgVHJhY2VCYXNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBtb2RlbDogRG9jdW1lbnRNb2RlbDxhbnk+O1xyXG4gIEBJbnB1dCgpIGNvbm5lY3RvclR5cGU6IFNlZ21lbnRzID0gJ09ydGhvZ29uYWwnO1xyXG4gIGRpYWdyYW06IERpYWdyYW07XHJcbiAgcmVhZG9ubHkgdG9vbDogRGlhZ3JhbVRvb2xzID0gRGlhZ3JhbVRvb2xzLlpvb21QYW47XHJcbiAgcmVhZG9ubHkgZGlhZ3JhbUNvbnN0cmFpbnRzOiBEaWFncmFtQ29uc3RyYWludHMgPVxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLkRlZmF1bHQgfFxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLlBhbiB8XHJcbiAgICBEaWFncmFtQ29uc3RyYWludHMuTGluZVJvdXRpbmcgfFxyXG4gICAgRGlhZ3JhbUNvbnN0cmFpbnRzLlpvb207XHJcbiAgcmVhZG9ubHkgbGF5b3V0ID0ge1xyXG4gICAgdHlwZTogJ0NvbXBsZXhIaWVyYXJjaGljYWxUcmVlJyxcclxuICAgIGNvbm5lY3Rpb25Qb2ludE9yaWdpbjogQ29ubmVjdGlvblBvaW50T3JpZ2luLkRpZmZlcmVudFBvaW50LFxyXG4gICAgaG9yaXpvbnRhbFNwYWNpbmc6IDUwLFxyXG4gICAgZW5hYmxlUm91dGluZzogdHJ1ZSxcclxuICAgIHZlcnRpY2FsU3BhY2luZzogNTAsXHJcbiAgICBvcmllbnRhdGlvbjogdGhpcy5fc2Vzc2lvbi5pbnZlcnNlID8gJ1JpZ2h0VG9MZWZ0JyA6ICdMZWZ0VG9SaWdodCcsXHJcbiAgfSBhcyBMYXlvdXRNb2RlbDtcclxuICByZWFkb25seSBzY3JvbGxTZXR0aW5ncyA9IHtcclxuICAgIG1pblpvb206IC41LFxyXG4gICAgc2Nyb2xsTGltaXQ6ICdEaWFncmFtJyxcclxuICAgIGN1cnJlbnRab29tOiAxLjIsXHJcbiAgICBwYWRkaW5nOiB7IHRvcDogMCwgYm90dG9tOiAwIH0sXHJcbiAgICBtYXhab29tOiAyLjVcclxuICB9IGFzIFNjcm9sbFNldHRpbmdzTW9kZWw7XHJcblxyXG4gIHJlYWRvbmx5IHNuYXBTZXR0aW5ncyA9IHtcclxuICAgIGNvbnN0cmFpbnRzOiBTbmFwQ29uc3RyYWludHMuTm9uZSxcclxuICAgIGdyaWRUeXBlOiAnRG90cydcclxuICB9IGFzIFNuYXBTZXR0aW5nc01vZGVsO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZ3VyYXRpb246IHsgW25hbWU6IHN0cmluZ106IEZsb3dOb2RlIH0gPSB7fTtcclxuICBwcml2YXRlIF9hY2NlbnRDb2xvciA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgLyoqIHdvcmtmbG93LXZpZXcgY3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjY291bnRzOiBBY2NvdW50U2VydmljZSwgc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2R1cmF0aW9uOiBEdXJhdGlvbkZvcm1hdFBpcGUsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcclxuICAgIGh1YjogSHViU2VydmljZSkge1xyXG4gICAgc3VwZXIoc2Vzc2lvbiwgaHViKTtcclxuICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5ub2Rlcy5mb3JFYWNoKG4gPT5cclxuICAgICAgdGhpcy5fY29uZmlndXJhdGlvbltuLm5hbWVdID0gbik7XHJcbiAgICBzZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9hY2NlbnRDb2xvciA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvL3JlYWRvbmx5IGRpYWdyYW1TZXR0aW5ncyA9IHsgaW52ZXJzZWRBbGlnbm1lbnQ6IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSB9IGFzIERpYWdyYW1TZXR0aW5nc01vZGVsO1xyXG4gIHByb3RlY3RlZCBhc3luYyBfaW5pdGlhbGl6ZSgpIHtcclxuICAgIGNvbnN0IHsgY29ubmVjdG9ycywgbm9kZXMsIGluZGljYXRvcnMgfSA9IGF3YWl0IHRoaXMuX3ByZXBhcmUoKTtcclxuICAgIHRoaXMuZGlhZ3JhbSAmJiB0aGlzLmRpYWdyYW0uZGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaWFncmFtID0gbmV3IERpYWdyYW0oe1xyXG4gICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICBoZWlnaHQ6IDM4MCxcclxuICAgICAgbm9kZXMsXHJcbiAgICAgIGNvbm5lY3RvcnMsXHJcbiAgICAgIGxheW91dDogdGhpcy5sYXlvdXQsXHJcbiAgICAgIHRvb2w6IHRoaXMudG9vbCxcclxuICAgICAgLy9kaWFncmFtU2V0dGluZ3M6IHRoaXMuZGlhZ3JhbVNldHRpbmdzLFxyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgIHNjcm9sbFNldHRpbmdzOiB0aGlzLnNjcm9sbFNldHRpbmdzLFxyXG4gICAgICBzbmFwU2V0dGluZ3M6IHRoaXMuc25hcFNldHRpbmdzLFxyXG4gICAgICBjb25zdHJhaW50czogdGhpcy5kaWFncmFtQ29uc3RyYWludHMsXHJcbiAgICAgIGdldENvbm5lY3RvckRlZmF1bHRzOiB0aGlzLmNvbm5EZWZhdWx0cy5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXROb2RlRGVmYXVsdHM6IHRoaXMubm9kZURlZmF1bHRzLmJpbmQodGhpcyksXHJcbiAgICB9LCB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5kaWFncmFtLmRvTGF5b3V0KCk7XHJcbiAgICBpbmRpY2F0b3JzLmZvckVhY2goKG4sIGkpID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5kaWFncmFtLmdldE5vZGVPYmplY3QoKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5wYXJlbnRJZCk7XHJcbiAgICAgIG4ub2Zmc2V0WCA9IHBhcmVudC5vZmZzZXRYICsgKHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/IC0yNSA6IDI1KTtcclxuICAgICAgbi5vZmZzZXRZID0gcGFyZW50Lm9mZnNldFkgKyAyNTtcclxuICAgICAgbi56SW5kZXggPSAxMDAwICsgaTtcclxuICAgICAgdGhpcy5kaWFncmFtLmFkZChuKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaWFncmFtLmZpdFRvUGFnZSgpO1xyXG4gICAgaW50ZXJ2YWwoNjAwMDApLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoXHJcbiAgICAgIHRoaXMuX3JlZnJlc2guYmluZCh0aGlzKVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcmVmcmVzaCgpIHtcclxuICAgIHN1cGVyLnJlc2V0RXN0aW1hdGVUaW1lKCk7XHJcbiAgICB0aGlzLmRpYWdyYW0ubm9kZXMuZm9yRWFjaChuID0+IHtcclxuICAgICAgY29uc3QgeyBub2RlLCByZWNpcGllbnQgfSA9IG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsO1xyXG4gICAgICBpZiAocmVjaXBpZW50KSB7XHJcbiAgICAgICAgaWYgKCFyZWNpcGllbnQucmVwbGllZCAmJiByZWNpcGllbnQucGVuZGluZykge1xyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC5lc3RpbWF0ZSkgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSk7XHJcbiAgICAgICAgICBlbHNlIGlmIChub2RlLnN0YW5kYXJkVGltZSkge1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmID0gbm9kZS5zdGFuZGFyZFRpbWUgLSBkYXlqcygpLmRpZmYobm9kZS50aW1lLCAncycpO1xyXG4gICAgICAgICAgICBpZiAoZGlmZiA+IDApXHJcbiAgICAgICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZGlmZikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbi50b29sdGlwLmNvbnRlbnQgPSB0aGlzLl90b29sdGlwKChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkudG9vbHRpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpZiAobm9kZSAmJiBub2RlLmVzdGltYXRlKVxyXG4gICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS50b29sdGlwLmVzdGltYXRlZFRpbWUgPSB0aGlzLl90aW1lRXN0aW1hdGUobm9kZSksXHJcbiAgICAgICAgICAgIG4udG9vbHRpcC5jb250ZW50ID0gdGhpcy5fdG9vbHRpcCgobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLnRvb2x0aXApO1xyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLmRpYWdyYW0uZGF0YUJpbmQoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG9ialxyXG4gICAqL1xyXG4gIHB1YmxpYyBub2RlRGVmYXVsdHMob2JqOiBOb2RlTW9kZWwpOiBOb2RlTW9kZWwge1xyXG4gICAgY29uc3QgeyByZWNpcGllbnQsIG5vZGUsIGluZGljYXRvciB9ID0gb2JqLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbDtcclxuXHJcbiAgICBpZiAoaW5kaWNhdG9yKSB7XHJcbiAgICAgIG9iai53aWR0aCA9IG9iai5oZWlnaHQgPSAxNTtcclxuICAgICAgb2JqLnN0eWxlLnN0cm9rZVdpZHRoID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBvYmoud2lkdGggPSBvYmouaGVpZ2h0ID0gNTA7XHJcbiAgICAgIGlmIChvYmouYW5ub3RhdGlvbnMgJiYgb2JqLmFubm90YXRpb25zLmxlbmd0aCkgb2JqLmFubm90YXRpb25zWzBdLnN0eWxlLmNvbG9yID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgIGlmIChub2RlICYmIG5vZGUuZXN0aW1hdGUpIHtcclxuICAgICAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgICBvYmouc3R5bGUub3BhY2l0eSA9IG9iai5hbm5vdGF0aW9uc1swXS5zdHlsZS5vcGFjaXR5ID0gLjY7XHJcbiAgICAgICAgb2JqLnN0eWxlLmZpbGwgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG9iai5zdHlsZS5zdHJva2VDb2xvciA9IHRoaXMuX2FjY2VudENvbG9yO1xyXG4gICAgICAgIG9iai5zdHlsZS5maWxsID0gcmVjaXBpZW50ICYmIHJlY2lwaWVudC5wZW5kaW5nID9cclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkID8gNTAwIDogNDAwKSA6ICd0cmFuc3BhcmVudCc7XHJcbiAgICAgIH1cclxuICAgICAgb2JqLnN0eWxlLnN0cm9rZVdpZHRoID0gMjtcclxuICAgIH1cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb25uZWN0b3JcclxuICAgKi9cclxuICBwdWJsaWMgY29ubkRlZmF1bHRzKGNvbm5lY3RvcjogQ29ubmVjdG9yTW9kZWwpIHtcclxuICAgIGNvbm5lY3Rvci50eXBlID0gdGhpcy5jb25uZWN0b3JUeXBlO1xyXG4gICAgY29ubmVjdG9yLmNvcm5lclJhZGl1cyA9IDY7XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLmhlaWdodCA9IDc7XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLndpZHRoID0gNztcclxuICAgIGlmICgoY29ubmVjdG9yLmFkZEluZm8gYXMgQ29ubmVjdG9ySW5mb01vZGVsKS5lc3RpbWF0ZSkge1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlRGFzaEFycmF5ID0gJzIgMic7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VDb2xvciA9XHJcbiAgICAgICAgY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5maWxsID1cclxuICAgICAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLnN0cm9rZUNvbG9yID1cclxuICAgICAgICB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICAgICAgY29ubmVjdG9yLnN0eWxlLnN0cm9rZVdpZHRoID0gMTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25uZWN0b3Iuc3R5bGUuc3Ryb2tlQ29sb3IgPSBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnN0eWxlLnN0cm9rZUNvbG9yID0gY29ubmVjdG9yLnRhcmdldERlY29yYXRvci5zdHlsZS5maWxsID0gdGhpcy5fYWNjZW50Q29sb3I7XHJcbiAgICAgIGNvbm5lY3Rvci5zdHlsZS5zdHJva2VXaWR0aCA9IDI7XHJcbiAgICB9XHJcbiAgICBjb25uZWN0b3IudGFyZ2V0RGVjb3JhdG9yLnNoYXBlID0gJ05vbmUnO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlKCk6IFByb21pc2U8eyBub2RlczogTm9kZU1vZGVsW107IGNvbm5lY3RvcnM6IENvbm5lY3Rvck1vZGVsW107IGluZGljYXRvcnM6IE5vZGVNb2RlbFtdIH0+IHtcclxuICAgIGNvbnN0IHsgY29ubmVjdG9yczogZGNvbm5lY3RvcnMsIG5vZGVzOiBkbm9kZXMgfSA9IHRoaXMubW9kZWwud29ya2Zsb3c7XHJcbiAgICBjb25zdCBpbmRpY2F0b3JzOiBOb2RlTW9kZWxbXSA9IFtdLCBjb25uZWN0b3JzOiBDb25uZWN0b3JNb2RlbFtdID0gW10sIG5vZGVzOiBOb2RlTW9kZWxbXSA9IFtdO1xyXG4gICAgbGV0IHpJbmRleCA9IDUwMDtcclxuICAgIGZvciAobGV0IG5vZGUgb2YgZG5vZGVzKSB7XHJcbiAgICAgIGlmIChub2Rlcy5maW5kKG4gPT4gbi5pZCA9PSBub2RlLmlkKSkgY29udGludWU7XHJcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvbltub2RlLnR5cGVdO1xyXG4gICAgICBsZXQgcmVjaXBpZW50cyA9IHRoaXMubW9kZWwucmVjaXBpZW50cy5cclxuICAgICAgICBmaWx0ZXIociA9PiByLm5vZGVJZCA9PT0gbm9kZS5pZCAmJlxyXG4gICAgICAgICAgKCF0aGlzLm1vZGVsLmlzc3VlZCB8fCByLnJlY2VpdmVkID49IHRoaXMubW9kZWwuaXNzdWVkKSlcclxuICAgICAgICAuc29ydCgocjAsIHIxKSA9PlxyXG4gICAgICAgICAgcjAucmVjZWl2ZWQgPiByMS5yZWNlaXZlZCA/IDEgOiAtMSk7XHJcbiAgICAgIGlmIChyZWNpcGllbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCByID0gMDtcclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICB2YXIgcmVjaXBpZW50ID0gcmVjaXBpZW50c1tyXTtcclxuICAgICAgICAgIGxldCBleGlzdHMgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIHJlbW92ZSBkdXBsaWNhdGUgdXNlciByZWNpcGllbnQgb24gc2FtZSBub2RlXHJcbiAgICAgICAgICBsZXQgaiA9IDA7XHJcbiAgICAgICAgICB3aGlsZSAoaiA8IHIgJiYgIWV4aXN0cykge1xyXG4gICAgICAgICAgICBpZiAocmVjaXBpZW50c1tqXS51c2VySWQgPT09IHJlY2lwaWVudC51c2VySWQpIGV4aXN0cyA9IHRydWU7XHJcbiAgICAgICAgICAgIGVsc2UgaisrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGV4aXN0cylcclxuICAgICAgICAgICAgcmVjaXBpZW50cy5zcGxpY2UocmVjaXBpZW50LmVzdGltYXRlID8gciA6IGosIDEpO1xyXG4gICAgICAgICAgZWxzZSByKys7XHJcbiAgICAgICAgfSB3aGlsZSAociA8IHJlY2lwaWVudHMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgZm9yIChyID0gMDsgciA8IHJlY2lwaWVudHMubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgIGxldCByZWNpcGllbnQgPSByZWNpcGllbnRzW3JdO1xyXG4gICAgICAgICAgY29uc3QgeyBhbm5vdGF0aW9uLCB0b29sdGlwIH0gPSBhd2FpdCB0aGlzLl9ub3RlKG5vZGUsIHJlY2lwaWVudCk7XHJcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fdG9vbHRpcCh0b29sdGlwKTtcclxuICAgICAgICAgIGNvbnN0IG5vZCA9IHtcclxuICAgICAgICAgICAgaWQ6IHIgPT09IDAgPyBub2RlLmlkIDogbm9kZS5pZCArIHIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2hhcGU6IHRoaXMuX2NvbmZpZ3VyYXRpb25bbm9kZS50eXBlXS5zaGFwZSxcclxuICAgICAgICAgICAgekluZGV4OiB6SW5kZXgrKyxcclxuICAgICAgICAgICAgdG9vbHRpcDoge1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgcG9zaXRpb246ICdUb3BDZW50ZXInXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzOiBjb250ZW50ID9cclxuICAgICAgICAgICAgICBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Ub29sdGlwIDpcclxuICAgICAgICAgICAgICBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCxcclxuICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgIHRvb2x0aXAsXHJcbiAgICAgICAgICAgICAgcmVjaXBpZW50LFxyXG4gICAgICAgICAgICAgIG5vZGVcclxuICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsLFxyXG4gICAgICAgICAgICBhbm5vdGF0aW9uczogW3tcclxuICAgICAgICAgICAgICBjb250ZW50OiBhbm5vdGF0aW9uLFxyXG4gICAgICAgICAgICAgIG1hcmdpbjogeyB0b3A6IDQgfSxcclxuICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogJ1RvcCcsXHJcbiAgICAgICAgICAgICAgb2Zmc2V0OiB7XHJcbiAgICAgICAgICAgICAgICB5OiAxLFxyXG4gICAgICAgICAgICAgICAgeDogLjVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICB9IGFzIE5vZGVNb2RlbDtcclxuICAgICAgICAgIG5vZGVzLnB1c2gobm9kKTtcclxuICAgICAgICAgIC8vIGFkZCBhY3Rpb24gaW5kaWNhdG9yXHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmFjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucy5maW5kKGEgPT4gYS5uYW1lID09PSByZWNpcGllbnQuYWN0aW9uKTtcclxuICAgICAgICAgICAgaWYgKGFjdGlvbi5zaGFwZSAmJiAhcmVjaXBpZW50LnBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICBjb25zdCBhY3Rpb25JbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ2FjdGlvbicsXHJcbiAgICAgICAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGFjdGlvbi5zaGFwZSxcclxuICAgICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IGFjdGlvbi5jb2xvciB8fCB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCg5MDApXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2QuaWRcclxuICAgICAgICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbFxyXG4gICAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsO1xyXG4gICAgICAgICAgICAgIGluZGljYXRvcnMucHVzaChhY3Rpb25JbmRpY2F0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBmeWkgaW5kaWNhdG9yXHJcbiAgICAgICAgICBpZiAocmVjaXBpZW50LmZ5aSlcclxuICAgICAgICAgICAgaW5kaWNhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogbm9kLmlkICsgJ2Z5aScsXHJcbiAgICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdQYXRoJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IEZZSV9QQVRILFxyXG4gICAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgICAgICAgZmlsbDogJyMxOTc2ZDInXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kLmlkXHJcbiAgICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICAgIH0gYXMgTm9kZU1vZGVsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyBlc2NhbGF0ZSBpbmRpY2F0b3JcclxuICAgICAgICAgIGlmIChyZWNpcGllbnQuZXNjYWxhdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVzY2FsYXRlSW5kaWNhdG9yID0ge1xyXG4gICAgICAgICAgICAgIGlkOiBub2QuaWQgKyAnZXNjYWxhdGUnLFxyXG4gICAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBFU0NBTEFURURfUEFUSCxcclxuICAgICAgICAgICAgICAgIGFsaWduOiB0aGlzLl9zZXNzaW9uLmludmVyc2UgPyAnWE1pbllNYXgnIDogJ1hNYXhZTWF4J1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgIGZpbGw6IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KDkwMClcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICAgIGluZGljYXRvcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2QuaWRcclxuICAgICAgICAgICAgICB9IGFzIE5vZGVJbmZvTW9kZWxcclxuICAgICAgICAgICAgfSBhcyBOb2RlTW9kZWw7XHJcbiAgICAgICAgICAgIGluZGljYXRvcnMucHVzaChlc2NhbGF0ZUluZGljYXRvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHsgc3RhdGUsIGFubm90YXRpb24sIHRvb2x0aXAgfSA9IGF3YWl0IHRoaXMuX3NoYXBlKG5vZGUpO1xyXG4gICAgICAgIGNvbnN0IHsgc2hhcGUgfSA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuX3Rvb2x0aXAodG9vbHRpcCk7XHJcbiAgICAgICAgbm9kZXMucHVzaCh7XHJcbiAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgIHNoYXBlLC8vOiB7dHlwZTogJ1BhdGgnLCBkYXRhOiBFTExJUFNJUyB9LFxyXG4gICAgICAgICAgekluZGV4OiB6SW5kZXgrKyxcclxuICAgICAgICAgIHRvb2x0aXA6IHtcclxuICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgcG9zaXRpb246ICdUb3BDZW50ZXInXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29uc3RyYWludHM6IGNvbnRlbnQgP1xyXG4gICAgICAgICAgICBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Ub29sdGlwIDpcclxuICAgICAgICAgICAgTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQsXHJcbiAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgIHRvb2x0aXAsXHJcbiAgICAgICAgICAgIG5vZGVcclxuICAgICAgICAgIH0gYXMgTm9kZUluZm9Nb2RlbCxcclxuICAgICAgICAgIGFubm90YXRpb25zOiBbe1xyXG4gICAgICAgICAgICBjb250ZW50OiBhbm5vdGF0aW9uLFxyXG4gICAgICAgICAgICBvZmZzZXQ6IHNoYXBlLnR5cGUgPT09ICdQYXRoJyA/IHtcclxuICAgICAgICAgICAgICB5OiAxXHJcbiAgICAgICAgICAgIH0gOiB7IHg6IC41IH0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBzaGFwZS50eXBlID09PSAnUGF0aCcgPyAnVG9wJyA6ICdDZW50ZXInXHJcbiAgICAgICAgICB9XVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS5zaGFwZSAmJiAhbm9kZS5lc3RpbWF0ZSlcclxuICAgICAgICAgIGluZGljYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIGlkOiBub2RlLmlkICsgJ3N0YXRlJyxcclxuICAgICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgICB0eXBlOiAnUGF0aCcsXHJcbiAgICAgICAgICAgICAgZGF0YTogc3RhdGUuc2hhcGUsXHJcbiAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWF4WU1heCcgOiAnWE1pbllNYXgnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgZmlsbDogc3RhdGUuY29sb3IgfHwgJ2JsYWNrJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgIG5vZGU6IG5vZGVcclxuICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBpZiAobm9kZS5lcnJvcikge1xyXG4gICAgICAgICAgY29uc3Qgd2Fybm5pbmdJbmRpY2F0b3IgPSB7XHJcbiAgICAgICAgICAgIGlkOiBub2RlLmlkICsgJ2V4Y2VwdGlvbicsXHJcbiAgICAgICAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ1BhdGgnLFxyXG4gICAgICAgICAgICAgIGRhdGE6IFdBUk5OSU5HX1BBVEgsXHJcbiAgICAgICAgICAgICAgYWxpZ246IHRoaXMuX3Nlc3Npb24uaW52ZXJzZSA/ICdYTWluWU1heCcgOiAnWE1heFlNYXgnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgZmlsbDogZ2V0V2Fybig4MDApXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUuaWRcclxuICAgICAgICAgICAgfSBhcyBOb2RlSW5mb01vZGVsXHJcbiAgICAgICAgICB9IGFzIE5vZGVNb2RlbDtcclxuICAgICAgICAgIGluZGljYXRvcnMucHVzaCh3YXJubmluZ0luZGljYXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPXHJcbiAgICAvLyBsb25nZXN0IHBhdGgsIHJlbW92ZSBzaG9ydCBwYXRoIGNvbm5lY3RvcnNcclxuICAgIGZ1bmN0aW9uIGRlZXBlbihub2RlSWQ6IHN0cmluZywgZGVwdGggPSAwKSB7XHJcbiAgICAgIG5vZGVzLmZpbHRlcihuID0+IChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkubm9kZS5pZCA9PT0gbm9kZUlkKS5cclxuICAgICAgICBmb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgY29uc3QgeyBkZXB0aDogbm9kZURlcHRoIH0gPSBuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbDtcclxuICAgICAgICAgIGlmIChub2RlRGVwdGgpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGVEZXB0aCA8IGRlcHRoKSB7XHJcbiAgICAgICAgICAgICAgZGNvbm5lY3RvcnMuZmlsdGVyKGMgPT4gYy50YXJnZXRJZCA9PT0gbm9kZUlkICYmXHJcbiAgICAgICAgICAgICAgICBub2Rlcy5maWx0ZXIobiA9PiAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLm5vZGUuaWQgPT09IGMuc291cmNlSWQgJiZcclxuICAgICAgICAgICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5kZXB0aCA9PT0gbm9kZURlcHRoIC0gMSkubGVuZ3RoKS5cclxuICAgICAgICAgICAgICAgIGZvckVhY2goYyA9PlxyXG4gICAgICAgICAgICAgICAgICBkY29ubmVjdG9ycy5yZW1vdmUoYylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5kZXB0aCA9IGRlcHRoO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGVEZXB0aCA+IGRlcHRoKVxyXG4gICAgICAgICAgICAgIGRjb25uZWN0b3JzLmZpbHRlcihjID0+IGMuc291cmNlSWQgPT09IG5vZGVJZCkuZm9yRWFjaChjID0+IGRjb25uZWN0b3JzLnJlbW92ZShjKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAobi5hZGRJbmZvIGFzIE5vZGVJbmZvTW9kZWwpLmRlcHRoID0gZGVwdGg7XHJcbiAgICAgICAgICAgIGRjb25uZWN0b3JzLmZpbHRlcihjID0+IGMuc291cmNlSWQgPT09IG5vZGVJZCkuZm9yRWFjaChjID0+XHJcbiAgICAgICAgICAgICAgZGVlcGVuKGMudGFyZ2V0SWQsIGRlcHRoICsgMSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGNvbm5lY3RvciBvZiBkY29ubmVjdG9ycykge1xyXG4gICAgICBsZXQgc291cmNlcyA9IG5vZGVzLmZpbHRlcihuID0+IChuLmFkZEluZm8gYXMgTm9kZUluZm9Nb2RlbCkubm9kZS5pZCA9PT0gY29ubmVjdG9yLnNvdXJjZUlkKSxcclxuICAgICAgICB0YXJnZXRzID0gbm9kZXMuZmlsdGVyKG4gPT4gKG4uYWRkSW5mbyBhcyBOb2RlSW5mb01vZGVsKS5ub2RlLmlkID09PSBjb25uZWN0b3IudGFyZ2V0SWQpO1xyXG4gICAgICBmb3IgKGxldCBzb3VyY2Ugb2Ygc291cmNlcylcclxuICAgICAgICBmb3IgKGxldCB0YXJnZXQgb2YgdGFyZ2V0cykge1xyXG4gICAgICAgICAgY29ubmVjdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZS5pZCxcclxuICAgICAgICAgICAgdGFyZ2V0SUQ6IHRhcmdldC5pZCxcclxuICAgICAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgICAgIGVzdGltYXRlOiBjb25uZWN0b3IuZXN0aW1hdGUsXHJcbiAgICAgICAgICAgICAgdGltZTogY29ubmVjdG9yLnRpbWVcclxuICAgICAgICAgICAgfSBhcyBDb25uZWN0b3JJbmZvTW9kZWxcclxuICAgICAgICAgIH0gYXMgQ29ubmVjdG9yTW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IGNvbm5lY3RvcnMsIG5vZGVzLCBpbmRpY2F0b3JzIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBub2RlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfc2hhcGUobm9kZTogTm9kZUluZm8pOiBQcm9taXNlPHsgc3RhdGU6IFN0YXRlOyBhbm5vdGF0aW9uOiBzdHJpbmc7IHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWw7IH0+IHtcclxuICAgIGNvbnN0IHRvb2x0aXAgPSB7fSBhcyBOb2RlVG9vbHRpcE1vZGVsO1xyXG4gICAgaWYgKG5vZGUuZXJyb3IpIHRvb2x0aXAuZXJyb3IgPSBub2RlLmVycm9yO1xyXG4gICAgbGV0IGFubm90YXRpb246IHN0cmluZywgc3RhdGU6IFN0YXRlO1xyXG4gICAgY29uc3QgbG9nID0gdGhpcy5tb2RlbC5sb2cuZmlsdGVyKGwgPT4gbC5ub2RlSWQgPT09IG5vZGUuaWQgJiYgKCF0aGlzLm1vZGVsLmlzc3VlZCB8fCBsLnRpbWUgPj0gdGhpcy5tb2RlbC5pc3N1ZWQpKTtcclxuICAgIGNvbnN0IHN0YXRlTG9nID0gbG9nLmZpbmQobCA9PiBsLnR5cGUgPT09ICdTdGF0ZUNoYW5nZScpO1xyXG4gICAgaWYgKHN0YXRlTG9nKSB7XHJcbiAgICAgIHN0YXRlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnN0YXRlcy5maW5kKHMgPT4gcy5uYW1lID09PSBzdGF0ZUxvZy5zdGF0ZSk7XHJcblxyXG4gICAgICBpZiAoc3RhdGVMb2cuZHVyYXRpb24pIHtcclxuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IGRheWpzLmR1cmF0aW9uKHN0YXRlTG9nLmR1cmF0aW9uLCAncycpO1xyXG4gICAgICAgIHRvb2x0aXAuZHVyYXRpb24gPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEdXJhdGlvblRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZHVyYXRpb24pKTtcclxuICAgICAgfVxyXG4gICAgICBhbm5vdGF0aW9uID0gKG5vZGUuZXN0aW1hdGUgPyBzdGF0ZS5mdXR1cmUgOiBzdGF0ZS5wYXN0KSB8fCBzdGF0ZS50aXRsZTtcclxuICAgIH1cclxuICAgIGlmIChub2RlLnR5cGUgPT09IFNUQVJUX05PREUpIHtcclxuICAgICAgaWYgKCFub2RlLmVzdGltYXRlKSB7XHJcbiAgICAgICAgY29uc3QgeyBub3RlLCByb2xlIH0gPSBhd2FpdCB0aGlzLl9zdGFydE5vZGUoKTtcclxuICAgICAgICB0b29sdGlwLm5vdGUgPSBub3RlLFxyXG4gICAgICAgICAgdG9vbHRpcC5yb2xlID0gcm9sZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChub2RlLm5vdGUpXHJcbiAgICAgICAgYW5ub3RhdGlvbiA9IG5vZGUubm90ZTtcclxuICAgICAgaWYgKG5vZGUuZXN0aW1hdGUpXHJcbiAgICAgICAgdG9vbHRpcC5lc3RpbWF0ZWRUaW1lID0gdGhpcy5fdGltZUVzdGltYXRlKG5vZGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgc3RhdGUsIHRvb2x0aXAsIGFubm90YXRpb24gfTtcclxuICB9XHJcbiAgcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMuZGlhZ3JhbSkgdGhpcy5kaWFncmFtLndpZHRoID0gJ2F1dG8nO1xyXG4gIH1cclxuICBwcml2YXRlIF90aW1lRXN0aW1hdGUobm9kZTogTm9kZUluZm8pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgeyBtaW4sIG1heCB9ID0gc3VwZXIuX2VzdGltYXRlVGltZShub2RlKTtcclxuICAgIGlmIChtYXgpXHJcbiAgICAgIHJldHVybiAhbWluIHx8IG1pbiA9PT0gbWF4ID9cclxuICAgICAgICB0aGlzLl90cmFuc2xhdGUuZ2V0KCdFc3RpbWF0ZVRpbWUnLCBkYXlqcy5kdXJhdGlvbihtYXgsICdzJykuaHVtYW5pemUoKSkgOlxyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZVJhbmdlJywgZGF5anMuZHVyYXRpb24obWluLCAncycpLmh1bWFuaXplKCksIGRheWpzLmR1cmF0aW9uKG1heCwgJ3MnKS5odW1hbml6ZSgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG9vbHRpcChvYmo6IE5vZGVUb29sdGlwTW9kZWwpIHtcclxuICAgIGNvbnN0IHsgbm90ZSwgcm9sZSwgc3Vic3RpdHV0aW5nLCBlc2NhbGF0aW9uLCBkdXJhdGlvbiwgc3RhbmRhcmRUaW1lLCBlc3RpbWF0ZWRUaW1lLCBlcnJvciwgZnlpIH0gPSBvYmpcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gW25vdGUsIHN1YnN0aXR1dGluZywgZXNjYWxhdGlvbiwgZHVyYXRpb24sIGZ5aSwgcm9sZSwgZXJyb3IsIHN0YW5kYXJkVGltZSwgZXN0aW1hdGVkVGltZV07XHJcbiAgICBsZXQgZGl2OiBIVE1MRGl2RWxlbWVudDtcclxuICAgIGVsZW1lbnRzLmZvckVhY2gociA9PiB7XHJcbiAgICAgIGlmICghcikgcmV0dXJuO1xyXG4gICAgICBpZiAoIWRpdikgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uaW5uZXJUZXh0ID0gcjtcclxuICAgICAgZGl2LmFwcGVuZChzcGFuKTtcclxuICAgICAgY29uc3QgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpO1xyXG4gICAgICBkaXYuYXBwZW5kKGJyKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGRpdjtcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfc3RhcnROb2RlKCk6IFByb21pc2U8eyBub3RlOiBzdHJpbmcsIHJvbGU6IHN0cmluZzsgfT4ge1xyXG4gICAgbGV0IG5vdGU6IHN0cmluZywgcm9sZTogc3RyaW5nO1xyXG4gICAgY29uc3QgYWdvID0gZGF5anModGhpcy5tb2RlbC5pc3N1ZWQpLmZyb21Ob3coKTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlbC5vd25lckJ5SWQpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZWwub3duZXJCeUlkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLm93bmVySWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQpXHJcbiAgICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdZb3VTdWJtaXR0ZWROb3RlQnknLFxyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYnlHZW5kZXIsXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCBhZ28pO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHRoaXMubW9kZWwub3duZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdZb3VTdWJtaXR0ZWROb3RlQnknLFxyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYnlHZW5kZXIsXHJcbiAgICAgICAgICAgIHdoby5uYW1lLCBhZ28pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBieSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm93bmVyQnlJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwub3duZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJtaXR0ZWROb3RlWW91QnknLCBieS5nZW5kZXIsIGJ5Lm5hbWUsIGFnbyk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5tb2RlbC5vd25lcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKVxyXG4gICAgICAgICAgbm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnU3VibWl0dGVkTm90ZUJ5JywgYnkuZ2VuZGVyLFxyXG4gICAgICAgICAgICBieS5uYW1lLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubmFtZSwgYWdvKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldCh0aGlzLm1vZGVsLm93bmVySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgbm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnU3VibWl0dGVkTm90ZUJ5JyxcclxuICAgICAgICAgICAgYnkuZ2VuZGVyLFxyXG4gICAgICAgICAgICBieS5uYW1lLFxyXG4gICAgICAgICAgICB3aG8ubmFtZSxcclxuICAgICAgICAgICAgYWdvKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJ5LnJvbGUpXHJcbiAgICAgICAgICByb2xlID0gYC0gJHtieS5yb2xlfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgaWYgKHRoaXMubW9kZWwub3duZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgbm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVN1Ym1pdHRlZE5vdGUnLCBhZ28pO1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQodGhpcy5tb2RlbC5vd25lcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgICBub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJtaXR0ZWROb3RlJywgd2hvLmdlbmRlciwgd2hvLm5hbWUsIGFnbyk7XHJcbiAgICAgICAgaWYgKHdoby5yb2xlKVxyXG4gICAgICAgICAgcm9sZSA9IGAtICR7d2hvLnJvbGV9YDtcclxuICAgICAgfVxyXG5cclxuICAgIHJldHVybiB7IG5vdGUsIHJvbGUgfTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIG5vZGVcclxuICAgKiBAcGFyYW0gcmVjaXBpZW50XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbm90ZShub2RlOiBOb2RlSW5mbywgcmVjaXBpZW50OiBSZWNpcGllbnQpOiBQcm9taXNlPHsgYW5ub3RhdGlvbjogc3RyaW5nOyB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsIH0+IHtcclxuICAgIGNvbnN0IHRvb2x0aXA6IE5vZGVUb29sdGlwTW9kZWwgPSB7fTtcclxuXHJcbiAgICBsZXQgYW5ub3RhdGlvbjogc3RyaW5nO1xyXG5cclxuICAgIC8vIHlvdVxyXG4gICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZylcclxuICAgICAgICBhbm5vdGF0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWU7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBhbm5vdGF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91Jyk7XHJcbiAgICAgIGlmIChyZWNpcGllbnQucm9sZSkge1xyXG4gICAgICAgIGNvbnN0IHJvbGUgPSB0aGlzLl9yb2xlTmFtZShyZWNpcGllbnQucm9sZSk7XHJcbiAgICAgICAgdG9vbHRpcC5yb2xlID0gYC0gJHtyb2xlfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgIC8vIHNvbWVvbmUgZWxzZVxyXG4gICAge1xyXG4gICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgIGFubm90YXRpb24gPSB3aG8ubmFtZTtcclxuICAgICAgaWYgKHdoby5yb2xlKSB0b29sdGlwLnJvbGUgPSBgLSAke3doby5yb2xlfWA7XHJcbiAgICAgIGVsc2UgaWYgKHJlY2lwaWVudC5yb2xlKSB7XHJcbiAgICAgICAgY29uc3Qgcm9sZSA9IHRoaXMuX3JvbGVOYW1lKHJlY2lwaWVudC5yb2xlKTtcclxuICAgICAgICB0b29sdGlwLnJvbGUgPSBgLSAke3JvbGV9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlY2lwaWVudC5yZXBsaWVkKSB7XHJcbiAgICAgIGNvbnN0IGFnbyA9IGRheWpzKHJlY2lwaWVudC5yZXBsaWVkKS5mcm9tTm93KCk7XHJcbiAgICAgIGNvbnN0IHRhcmdldHMgPSB0aGlzLm1vZGVsLnJlY2lwaWVudHMuZmlsdGVyKHIgPT4gci5vcmlnaW5JZCA9PT0gcmVjaXBpZW50LmlkKSwgdG8gPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgaWYgKHRhcmdldHMubGVuZ3RoKSBmb3IgKGxldCBzaWJsaW5nIG9mIHRhcmdldHMpIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQoc2libGluZy51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvLnB1c2god2hvLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZWNpcGllbnQuYnlJZCkge1xyXG4gICAgICAgIGlmIChyZWNpcGllbnQuYnlJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmJ5SWQpIHtcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuYnlHZW5kZXIpO1xyXG4gICAgICAgICAgaWYgKHRvLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZClcclxuICAgICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91VG8nLCBhY3Rpb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuam9pbih0byksIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCBhZ28pO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5CeVlvdVRvJywgYWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmpvaW4odG8pLCB3aG8ubmFtZSwgYWdvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZClcclxuICAgICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5CeVlvdScsIGFjdGlvbiwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIGFnbyk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbkJ5WW91JywgYWN0aW9uLCB3aG8ubmFtZSwgYWdvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBieSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChyZWNpcGllbnQuYnlJZCkudG9Qcm9taXNlKClcclxuICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCBieS5nZW5kZXIpO1xyXG4gICAgICAgICAgaWYgKHJlY2lwaWVudC51c2VySWQgPT09IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS51c2VySWQpIHtcclxuICAgICAgICAgICAgaWYgKHRvLmxlbmd0aClcclxuICAgICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VUYWtlbkFjdGlvbkJ5VG8nLCBieS5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSwgYWdvKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVRha2VuQWN0aW9uQnknLCBieS5uYW1lLCBhY3Rpb24sIGFnbyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICBpZiAodG8ubGVuZ3RoKVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnlUbycsIGJ5Lm5hbWUsIGFjdGlvbiwgdGhpcy5fdHJhbnNsYXRlLmpvaW4odG8pLCB3aG8ubmFtZSwgYWdvKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuQnknLCBieS5uYW1lLCBhY3Rpb24sIHdoby5uYW1lLCBhZ28pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0by5sZW5ndGgpIHtcclxuICAgICAgICBpZiAocmVjaXBpZW50LnVzZXJJZCA9PT0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLnVzZXJJZCkge1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5nZW5kZXIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKVxyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlblRvJywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIGFjdGlvbiwgdGhpcy5fdHJhbnNsYXRlLmpvaW4odG8pLCBhZ28pO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdZb3VUYWtlbkFjdGlvblRvJywgYWN0aW9uLCB0aGlzLl90cmFuc2xhdGUuam9pbih0byksIGFnbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHdoby5nZW5kZXIpO1xyXG4gICAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uVGFrZW5UbycsIHdoby5uYW1lLCBhY3Rpb24sIHRoaXMuX3RyYW5zbGF0ZS5qb2luKHRvKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3Nlc3Npb24uaXNJbXBlcnNvbmF0aW5nKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5nZW5kZXIpO1xyXG4gICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0FjdGlvblRha2VuJywgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5hbWUsIGFjdGlvbiwgYWdvKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fYWN0aW9uKHJlY2lwaWVudC5hY3Rpb24sIFlvdSk7XHJcbiAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnWW91VGFrZW5BY3Rpb24nLCBhY3Rpb24sIGFnbyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuX2FjdGlvbihyZWNpcGllbnQuYWN0aW9uLCB3aG8uZ2VuZGVyKTtcclxuICAgICAgICB0b29sdGlwLm5vdGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25UYWtlbicsIHdoby5uYW1lLCBhY3Rpb24sIGFnbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFyZWNpcGllbnQuZXN0aW1hdGUpIHtcclxuICAgICAgY29uc3QgYWdvID0gZGF5anMocmVjaXBpZW50LnJlY2VpdmVkKS5mcm9tTm93KCk7XHJcbiAgICAgIGlmIChyZWNpcGllbnQudXNlcklkID09PSB0aGlzLl9zZXNzaW9uLnVzZXJJZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uLmlzSW1wZXJzb25hdGluZylcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5wZXJzb25hbGl6ZSgnUmVjZWl2ZWRCeScsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5nZW5kZXIsIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5uYW1lLCBhZ28pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRvb2x0aXAubm90ZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1lvdVJlY2VpdmVkJywgYWdvKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQocmVjaXBpZW50LnVzZXJJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5ub3RlID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdSZWNlaXZlZFRpbWUnLCB3aG8uZ2VuZGVyLCBhZ28pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmVjaXBpZW50LnN1YnN0aXR1dGVJZCkge1xyXG4gICAgICBpZiAocmVjaXBpZW50LnN1YnN0aXR1dGVJZCA9PT0gdGhpcy5fc2Vzc2lvbi51c2VySWQpXHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUucGVyc29uYWxpemUoJ1N1YnN0aXR1dGluZ1lvdScsIHRoaXMuX3Nlc3Npb24uZ2VuZGVyKTtcclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW5nID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KHJlY2lwaWVudC5zdWJzdGl0dXRlSWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvb2x0aXAuc3Vic3RpdHV0aW5nID0gdGhpcy5fdHJhbnNsYXRlLnBlcnNvbmFsaXplKCdTdWJzdGl0dXRpbmdGb3InLCBzdWJzdGl0dXRpbmcuZ2VuZGVyLCBzdWJzdGl0dXRpbmcubmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZWNpcGllbnQub3JpZ2luSWQgJiYgIXJlY2lwaWVudC5yZXBsaWVkKSB7XHJcbiAgICAgIGNvbnN0IG9yaWdpbiA9IHRoaXMubW9kZWwucmVjaXBpZW50cy5maW5kKHIgPT4gci5pZCA9PT0gcmVjaXBpZW50Lm9yaWdpbklkKTtcclxuICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gb3JpZ2luLmFjdGlvbiksXHJcbiAgICAgICAgYWRqZWN0aXZlID0gYWN0aW9uLmFkamVjdGl2ZSB8fCBhY3Rpb24ucGFzdCB8fCBhY3Rpb24udGl0bGU7XHJcbiAgICAgIGlmICgob3JpZ2luLmJ5SWQgfHwgb3JpZ2luLnVzZXJJZCkgPT09IHRoaXMuX3Nlc3Npb24udXNlcklkKVxyXG4gICAgICAgIHRvb2x0aXAuc3Vic3RpdHV0aW5nID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uQnlZb3UnLCBhZGplY3RpdmUpO1xyXG4gICAgICBlbHNlIGlmIChvcmlnaW4uYnlJZCkge1xyXG4gICAgICAgIGNvbnN0IHdobyA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChvcmlnaW4udXNlcklkKS50b1Byb21pc2UoKTtcclxuICAgICAgICBjb25zdCBieSA9IGF3YWl0IHRoaXMuX2FjY291bnRzLmdldChvcmlnaW4uYnlJZCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdG9vbHRpcC5zdWJzdGl0dXRpbmcgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdBY3Rpb25CeUJ5JywgYWRqZWN0aXZlLCBieS5uYW1lLCB3aG8ubmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgd2hvID0gYXdhaXQgdGhpcy5fYWNjb3VudHMuZ2V0KG9yaWdpbi51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHRvb2x0aXAuc3Vic3RpdHV0aW5nID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnQWN0aW9uQnknLCBhZGplY3RpdmUsIHdoby5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlY2lwaWVudC5lc2NhbGF0ZWQpIHtcclxuICAgICAgY29uc3QgZXNjYWxhdGlvbiA9IHRoaXMubW9kZWwubG9nLmZpbmQobCA9PiBsLnR5cGUgPT09ICdFc2NhbGF0aW9uJyAmJiBsLnJlY2lwaWVudElkID09PSByZWNpcGllbnQub3JpZ2luSWQpO1xyXG4gICAgICBjb25zdCB3aG8gPSBhd2FpdCB0aGlzLl9hY2NvdW50cy5nZXQoZXNjYWxhdGlvbi51c2VySWQpLnRvUHJvbWlzZSgpO1xyXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkYXlqcy5kdXJhdGlvbihlc2NhbGF0aW9uLmR1cmF0aW9uLCAncycpKTtcclxuICAgICAgdG9vbHRpcC5lc2NhbGF0aW9uID0gdGhpcy5fdHJhbnNsYXRlLmdldCgnRXNjYWxhdGVkRnJvbScsIHdoby5uYW1lLCBkdXJhdGlvbik7XHJcbiAgICB9XHJcbiAgICBpZiAocmVjaXBpZW50LnJlcGxpZWQpIHtcclxuICAgICAgY29uc3QgZHVyYXRpb24gPSBkYXlqcyhyZWNpcGllbnQucmVwbGllZCkuZGlmZihyZWNpcGllbnQucmVjZWl2ZWQsICdzJyk7XHJcbiAgICAgIHRvb2x0aXAuZHVyYXRpb24gPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEdXJhdGlvblRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0oZHVyYXRpb24pKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJlY2lwaWVudC5wZW5kaW5nKSB7XHJcbiAgICAgIGlmIChyZWNpcGllbnQuZXN0aW1hdGUpIHRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RpbWVFc3RpbWF0ZShub2RlKTtcclxuICAgICAgZWxzZSBpZiAobm9kZS5zdGFuZGFyZFRpbWUpIHtcclxuICAgICAgICBjb25zdCBkaWZmID0gbm9kZS5zdGFuZGFyZFRpbWUgLSBkYXlqcygpLmRpZmYobm9kZS50aW1lLCAncycpO1xyXG4gICAgICAgIGlmIChkaWZmID4gMClcclxuICAgICAgICAgIHRvb2x0aXAuZXN0aW1hdGVkVGltZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0VzdGltYXRlVGltZScsIHRoaXMuX2R1cmF0aW9uLnRyYW5zZm9ybShkaWZmKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG5vZGUuc3RhbmRhcmRUaW1lKVxyXG4gICAgICB0b29sdGlwLnN0YW5kYXJkVGltZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ05vZGVTdGFuZGFyZFRpbWUnLCB0aGlzLl9kdXJhdGlvbi50cmFuc2Zvcm0obm9kZS5zdGFuZGFyZFRpbWUpKTtcclxuICAgIGlmIChyZWNpcGllbnQuZnlpKVxyXG4gICAgICB0b29sdGlwLmZ5aSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0ZZSScpO1xyXG4gICAgcmV0dXJuIHsgYW5ub3RhdGlvbiwgdG9vbHRpcCB9O1xyXG4gIH1cclxuICBwcml2YXRlIF9hY3Rpb24obmFtZTogc3RyaW5nLCBnZW5kZXI/OiBHZW5kZXIgfCAneW91Jykge1xyXG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmFjdGlvbnMuZmluZChhID0+IGEubmFtZSA9PT0gbmFtZSk7XHJcbiAgICBpZiAoZ2VuZGVyID09PSBZb3UpIHtcclxuICAgICAgY29uc3QgZ2VuZGVyID0gdGhpcy5fc2Vzc2lvbi5nZW5kZXIsXHJcbiAgICAgICAgeW91ID0gZ2VuZGVyID09PSAnTWFsZScgPyBhY3Rpb24/LnlvdU1hbGUgOlxyXG4gICAgICAgICAgZ2VuZGVyID09PSAnRmVtYWxlJyA/IGFjdGlvbj8ueW91RmVtYWxlIDpcclxuICAgICAgICAgICAgbnVsbDtcclxuICAgICAgcmV0dXJuICh5b3UgfHwgYWN0aW9uPy55b3UgfHwgYWN0aW9uPy5wYXN0IHx8IGFjdGlvbj8udGl0bGUgfHwgbmFtZSkudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhc3QgPSBnZW5kZXIgPT09ICdNYWxlJyA/IGFjdGlvbj8ucGFzdE1hbGUgOlxyXG4gICAgICBnZW5kZXIgPT09ICdGZW1hbGUnID8gYWN0aW9uPy5wYXN0RmVtYWxlIDogbnVsbDtcclxuICAgIHJldHVybiAocGFzdCB8fCBhY3Rpb24/LnBhc3QgfHwgYWN0aW9uPy50aXRsZSB8fCBuYW1lKS50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuICBvdmVycmlkZSBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhZ3JhbSAmJiB0aGlzLmRpYWdyYW0uZGVzdHJveSgpO1xyXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICB9XHJcbn1cclxuaW50ZXJmYWNlIENvbm5lY3RvckluZm9Nb2RlbCB7XHJcbiAgZXN0aW1hdGU/OiBib29sZWFuO1xyXG4gIHBhcmVudElkOiBzdHJpbmc7XHJcbiAgdGltZTogRGF0ZVxyXG59XHJcbmludGVyZmFjZSBOb2RlSW5mb01vZGVsIHtcclxuICB0b29sdGlwOiBOb2RlVG9vbHRpcE1vZGVsO1xyXG4gIG5vZGU6IE5vZGVJbmZvO1xyXG4gIGRlcHRoPzogbnVtYmVyO1xyXG4gIHJlY2lwaWVudDogUmVjaXBpZW50XHJcbiAgaW5kaWNhdG9yPzogYm9vbGVhbjtcclxuICBwYXJlbnRJZD86IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgTm9kZVRvb2x0aXBNb2RlbCB7XHJcbiAgZnlpPzogc3RyaW5nO1xyXG4gIGVycm9yPzogc3RyaW5nO1xyXG4gIG5vdGU/OiBzdHJpbmc7XHJcbiAgcm9sZT86IHN0cmluZztcclxuICBmcm9tPzogc3RyaW5nO1xyXG4gIHN1YnN0aXR1dGluZz86IHN0cmluZztcclxuICBlc2NhbGF0aW9uPzogc3RyaW5nO1xyXG4gIHN0YW5kYXJkVGltZT86IHN0cmluZztcclxuICBkdXJhdGlvbj86IHN0cmluZztcclxuICBlc3RpbWF0ZWRUaW1lPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
|