@fundamental-ngx/platform 0.49.0-rc.64 → 0.49.0-rc.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/esm2022/approval-flow/approval-flow.component.mjs +3 -3
  2. package/esm2022/dynamic-page/dynamic-page.component.mjs +3 -3
  3. package/esm2022/feed-input/feed-input.component.mjs +3 -3
  4. package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +2 -2
  5. package/esm2022/form/form-group/form-group.component.mjs +3 -3
  6. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -3
  7. package/esm2022/form/select/select/select.component.mjs +3 -3
  8. package/esm2022/form/step-input/number/number-step-input.component.mjs +3 -3
  9. package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +3 -3
  10. package/esm2022/link/link.component.mjs +3 -3
  11. package/esm2022/list/list.component.mjs +3 -3
  12. package/esm2022/list/object-list-item/object-list-item-row.component.mjs +3 -3
  13. package/esm2022/list/object-list-item/object-list-item.component.mjs +3 -3
  14. package/esm2022/menu/menu-item.component.mjs +3 -3
  15. package/esm2022/menu/menu.component.mjs +2 -2
  16. package/esm2022/message-popover/message-popover.component.mjs +3 -3
  17. package/esm2022/page-footer/page-footer.component.mjs +3 -3
  18. package/esm2022/search-field/search-field.component.mjs +3 -3
  19. package/esm2022/split-menu-button/split-menu-button.component.mjs +3 -3
  20. package/esm2022/table/components/table-row/table-row.component.mjs +3 -3
  21. package/esm2022/table/table.component.mjs +3 -3
  22. package/esm2022/variant-management/variant-management.component.mjs +3 -3
  23. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +2 -2
  24. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  25. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +2 -2
  26. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  27. package/fesm2022/fundamental-ngx-platform-feed-input.mjs +2 -2
  28. package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
  29. package/fesm2022/fundamental-ngx-platform-form.mjs +10 -10
  30. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  31. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +2 -2
  32. package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
  33. package/fesm2022/fundamental-ngx-platform-link.mjs +2 -2
  34. package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
  35. package/fesm2022/fundamental-ngx-platform-list.mjs +6 -6
  36. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  37. package/fesm2022/fundamental-ngx-platform-menu.mjs +4 -4
  38. package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
  39. package/fesm2022/fundamental-ngx-platform-message-popover.mjs +2 -2
  40. package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
  41. package/fesm2022/fundamental-ngx-platform-page-footer.mjs +2 -2
  42. package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
  43. package/fesm2022/fundamental-ngx-platform-search-field.mjs +2 -2
  44. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  45. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +2 -2
  46. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
  47. package/fesm2022/fundamental-ngx-platform-table.mjs +4 -4
  48. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  49. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +2 -2
  50. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  51. package/package.json +4 -4
  52. package/schematics/ng-add/index.js +1 -1
@@ -776,7 +776,7 @@ export class ApprovalFlowComponent {
776
776
  return filteredColumns;
777
777
  }
778
778
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ApprovalFlowComponent, deps: [{ token: i1.DialogService }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: DATA_PROVIDERS, optional: true }, { token: i2.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
779
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: ApprovalFlowComponent, isStandalone: true, selector: "fdp-approval-flow", inputs: { title: "title", value: "value", userDataSource: "userDataSource", watcherDataSource: "watcherDataSource", teamDataSource: "teamDataSource", userDetailsTemplate: "userDetailsTemplate", approvalStatusTemplate: "approvalStatusTemplate", statusColorMapping: "statusColorMapping", checkDueDate: "checkDueDate", dueDateThreshold: "dueDateThreshold", allowSendRemindersForStatuses: "allowSendRemindersForStatuses", isEditAvailable: "isEditAvailable", watchersLabel: "watchersLabel", allowAddParallelNodes: "allowAddParallelNodes", disableSaveButton: "disableSaveButton", disableExitButton: "disableExitButton", usersDataProviderEntityKey: "usersDataProviderEntityKey", teamsDataProviderEntityKey: "teamsDataProviderEntityKey", watchersDataProviderEntityKey: "watchersDataProviderEntityKey", removeSpaceNode: "removeSpaceNode" }, outputs: { nodeClick: "nodeClick", afterNodeAdd: "afterNodeAdd", afterNodeEdit: "afterNodeEdit", valueChange: "valueChange", sendReminders: "sendReminders", onDataRequested: "onDataRequested", onDataReceived: "onDataReceived" }, providers: [ApprovalFlowAddNodeViewService], viewQueries: [{ propertyName: "_graphContainerEl", first: true, predicate: ["graphContainerEl"], descendants: true }, { propertyName: "_graphEl", first: true, predicate: ["graphEl"], descendants: true }, { propertyName: "_gridList", first: true, predicate: ["gridList"], descendants: true }, { propertyName: "_nodeComponents", predicate: ApprovalFlowNodeComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n @if (isEditAvailable) {\n <fdp-approval-flow-toolbar-actions\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n }\n </fd-grid-list-title-bar>\n @if (_approvalProcess.watchers?.length || _isEditMode) {\n <div class=\"fdp-approval-flow__watchers\" [attr.aria-label]=\"watchersLabel\">\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n @if (!_isEditMode) {\n @for (watcher of _approvalProcess.watchers; track _trackByFn($index, watcher)) {\n <fd-avatar\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n }\n } @else {\n <div class=\"fdp-approval-flow__watchers-input-container\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n }\n </div>\n }\n @if (!_graph.errors) {\n @if (_graph.columns.length) {\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n @if (_scrollDiff > 0) {\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n @if (_carouselStepsLeft > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n }\n @if (_carouselStepsRight > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n }\n </div>\n }\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n @for (column of _graph.columns; track column; let columnIndex = $index) {\n <div class=\"fdp-approval-flow__graph-column\">\n @for (\n node of column.nodes;\n track _trackByFn(nodeIndex, node);\n let nodeIndex = $index\n ) {\n <fdp-approval-flow-node\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n @if (_isEditMode) {\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-template>\n }\n </fd-grid-list-item-toolbar>\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"\n node.approvers.length === 1 ? node.approvers[0].imgUrl : null\n \"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n <ng-template fd-grid-list-item-body>\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-template>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n }\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n }\n }\n </fd-grid-list>\n @if (_isEditMode) {\n <div fd-bar>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n }\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.33.3-rc.19\n * Copyright (c) 2024 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-scrollbar{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"], dependencies: [{ kind: "directive", type: ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: ApprovalFlowMessagesComponent, selector: "fdp-approval-flow-messages", inputs: ["messages", "undoLastActionAvailable"], outputs: ["messagesChange", "undoLastAction"] }, { kind: "component", type: GridListComponent, selector: "fd-grid-list", inputs: ["id", "width", "ariaLabel", "selectionMode", "layoutPattern"], outputs: ["selectionChange"] }, { kind: "component", type: GridListTitleBarComponent, selector: "fd-grid-list-title-bar", inputs: ["title"] }, { kind: "component", type: GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "component", type: ApprovalFlowToolbarActionsComponent, selector: "fdp-approval-flow-toolbar-actions", inputs: ["graph", "graphMetadata", "selectedNodes", "isEditMode"], outputs: ["enterEditMode", "addNode", "editSelectedNode", "deleteSelectedNodes"] }, { kind: "component", type: AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "glyphFont", "dropdownValues", "openDropdownOnAddOnClicked", "addonIconTitle", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "optionItemIdentifier", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton", "tokenHiddenId"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: ApprovalFlowNodeComponent, selector: "fdp-approval-flow-node", inputs: ["node", "meta", "renderArrow", "checkDueDate", "dueDateThreshold", "allNodesInColumnApproved", "approvalStatusTemplate", "statusColorMapping", "isEdit", "isNextNodeBlank"], outputs: ["onAdd", "onEdit", "onDelete"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: GridListItemComponent, selector: "fd-grid-list-item", inputs: ["id", "width", "layoutItemPattern", "status", "counter", "value", "disableToolbarClick", "selected", "noPadding", "ariaLabel", "ariaLabelledBy", "type", "state", "isNavigated", "title", "description", "autoHeight"], outputs: ["press", "detail", "delete", "navigate", "draft", "locked"] }, { kind: "component", type: GridListItemToolbarComponent, selector: "fd-grid-list-item-toolbar" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: GridListItemImageDirective, selector: "[fd-grid-list-item-image]" }, { kind: "directive", type: GridListItemBodyDirective, selector: "[fd-grid-list-item-body]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: IllustratedMessageComponent, selector: "[fd-illustrated-message]", inputs: ["type", "svgConfig", "noSvg", "id", "class"] }, { kind: "component", type: IllustratedMessageFigcaptionComponent, selector: "[fd-illustrated-message-figcaption]" }, { kind: "directive", type: IllustratedMessageTitleDirective, selector: "[fd-illustrated-message-title]" }, { kind: "directive", type: IllustratedMessageTextDirective, selector: "[fd-illustrated-message-text]" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
779
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: ApprovalFlowComponent, isStandalone: true, selector: "fdp-approval-flow", inputs: { title: "title", value: "value", userDataSource: "userDataSource", watcherDataSource: "watcherDataSource", teamDataSource: "teamDataSource", userDetailsTemplate: "userDetailsTemplate", approvalStatusTemplate: "approvalStatusTemplate", statusColorMapping: "statusColorMapping", checkDueDate: "checkDueDate", dueDateThreshold: "dueDateThreshold", allowSendRemindersForStatuses: "allowSendRemindersForStatuses", isEditAvailable: "isEditAvailable", watchersLabel: "watchersLabel", allowAddParallelNodes: "allowAddParallelNodes", disableSaveButton: "disableSaveButton", disableExitButton: "disableExitButton", usersDataProviderEntityKey: "usersDataProviderEntityKey", teamsDataProviderEntityKey: "teamsDataProviderEntityKey", watchersDataProviderEntityKey: "watchersDataProviderEntityKey", removeSpaceNode: "removeSpaceNode" }, outputs: { nodeClick: "nodeClick", afterNodeAdd: "afterNodeAdd", afterNodeEdit: "afterNodeEdit", valueChange: "valueChange", sendReminders: "sendReminders", onDataRequested: "onDataRequested", onDataReceived: "onDataReceived" }, providers: [ApprovalFlowAddNodeViewService], viewQueries: [{ propertyName: "_graphContainerEl", first: true, predicate: ["graphContainerEl"], descendants: true }, { propertyName: "_graphEl", first: true, predicate: ["graphEl"], descendants: true }, { propertyName: "_gridList", first: true, predicate: ["gridList"], descendants: true }, { propertyName: "_nodeComponents", predicate: ApprovalFlowNodeComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n @if (isEditAvailable) {\n <fdp-approval-flow-toolbar-actions\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n }\n </fd-grid-list-title-bar>\n @if (_approvalProcess.watchers?.length || _isEditMode) {\n <div class=\"fdp-approval-flow__watchers\" [attr.aria-label]=\"watchersLabel\">\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n @if (!_isEditMode) {\n @for (watcher of _approvalProcess.watchers; track _trackByFn($index, watcher)) {\n <fd-avatar\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n }\n } @else {\n <div class=\"fdp-approval-flow__watchers-input-container\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n }\n </div>\n }\n @if (!_graph.errors) {\n @if (_graph.columns.length) {\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n @if (_scrollDiff > 0) {\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n @if (_carouselStepsLeft > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n }\n @if (_carouselStepsRight > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n }\n </div>\n }\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n @for (column of _graph.columns; track column; let columnIndex = $index) {\n <div class=\"fdp-approval-flow__graph-column\">\n @for (\n node of column.nodes;\n track _trackByFn(nodeIndex, node);\n let nodeIndex = $index\n ) {\n <fdp-approval-flow-node\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n @if (_isEditMode) {\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-template>\n }\n </fd-grid-list-item-toolbar>\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"\n node.approvers.length === 1 ? node.approvers[0].imgUrl : null\n \"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n <ng-template fd-grid-list-item-body>\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-template>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n }\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n }\n }\n </fd-grid-list>\n @if (_isEditMode) {\n <div fd-bar>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n }\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.34.0\n * Copyright (c) 2024 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-scrollbar{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"], dependencies: [{ kind: "directive", type: ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: ApprovalFlowMessagesComponent, selector: "fdp-approval-flow-messages", inputs: ["messages", "undoLastActionAvailable"], outputs: ["messagesChange", "undoLastAction"] }, { kind: "component", type: GridListComponent, selector: "fd-grid-list", inputs: ["id", "width", "ariaLabel", "selectionMode", "layoutPattern"], outputs: ["selectionChange"] }, { kind: "component", type: GridListTitleBarComponent, selector: "fd-grid-list-title-bar", inputs: ["title"] }, { kind: "component", type: GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { kind: "component", type: ApprovalFlowToolbarActionsComponent, selector: "fdp-approval-flow-toolbar-actions", inputs: ["graph", "graphMetadata", "selectedNodes", "isEditMode"], outputs: ["enterEditMode", "addNode", "editSelectedNode", "deleteSelectedNodes"] }, { kind: "component", type: AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: MultiInputComponent, selector: "fd-multi-input", inputs: ["placeholder", "disabled", "required", "compactCollapse", "maxHeight", "glyph", "glyphFont", "dropdownValues", "openDropdownOnAddOnClicked", "addonIconTitle", "searchTerm", "inputId", "highlight", "selected", "class", "filterFn", "valueFn", "displayFn", "newTokenParseFn", "optionItemIdentifier", "newTokenValidateFn", "ariaLabel", "ariaLabelledBy", "fillControlMode", "state", "buttonFocusable", "allowNewTokens", "mobile", "showAllButton", "bodyMaxWidth", "mobileConfig", "includes", "itemTemplate", "title", "byline", "autoComplete", "open", "displayAddonButton", "tokenHiddenId"], outputs: ["searchTermChange", "selectedChange", "openChange", "addOnButtonClicked", "allItemsSelectedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: ApprovalFlowNodeComponent, selector: "fdp-approval-flow-node", inputs: ["node", "meta", "renderArrow", "checkDueDate", "dueDateThreshold", "allNodesInColumnApproved", "approvalStatusTemplate", "statusColorMapping", "isEdit", "isNextNodeBlank"], outputs: ["onAdd", "onEdit", "onDelete"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: GridListItemComponent, selector: "fd-grid-list-item", inputs: ["id", "width", "layoutItemPattern", "status", "counter", "value", "disableToolbarClick", "selected", "noPadding", "ariaLabel", "ariaLabelledBy", "type", "state", "isNavigated", "title", "description", "autoHeight"], outputs: ["press", "detail", "delete", "navigate", "draft", "locked"] }, { kind: "component", type: GridListItemToolbarComponent, selector: "fd-grid-list-item-toolbar" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: GridListItemImageDirective, selector: "[fd-grid-list-item-image]" }, { kind: "directive", type: GridListItemBodyDirective, selector: "[fd-grid-list-item-body]" }, { kind: "component", type: BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: IllustratedMessageComponent, selector: "[fd-illustrated-message]", inputs: ["type", "svgConfig", "noSvg", "id", "class"] }, { kind: "component", type: IllustratedMessageFigcaptionComponent, selector: "[fd-illustrated-message-figcaption]" }, { kind: "directive", type: IllustratedMessageTitleDirective, selector: "[fd-illustrated-message-title]" }, { kind: "directive", type: IllustratedMessageTextDirective, selector: "[fd-illustrated-message-text]" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
780
780
  }
781
781
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ApprovalFlowComponent, decorators: [{
782
782
  type: Component,
@@ -807,7 +807,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
807
807
  IllustratedMessageTitleDirective,
808
808
  IllustratedMessageTextDirective,
809
809
  FdTranslatePipe
810
- ], template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n @if (isEditAvailable) {\n <fdp-approval-flow-toolbar-actions\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n }\n </fd-grid-list-title-bar>\n @if (_approvalProcess.watchers?.length || _isEditMode) {\n <div class=\"fdp-approval-flow__watchers\" [attr.aria-label]=\"watchersLabel\">\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n @if (!_isEditMode) {\n @for (watcher of _approvalProcess.watchers; track _trackByFn($index, watcher)) {\n <fd-avatar\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n }\n } @else {\n <div class=\"fdp-approval-flow__watchers-input-container\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n }\n </div>\n }\n @if (!_graph.errors) {\n @if (_graph.columns.length) {\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n @if (_scrollDiff > 0) {\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n @if (_carouselStepsLeft > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n }\n @if (_carouselStepsRight > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n }\n </div>\n }\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n @for (column of _graph.columns; track column; let columnIndex = $index) {\n <div class=\"fdp-approval-flow__graph-column\">\n @for (\n node of column.nodes;\n track _trackByFn(nodeIndex, node);\n let nodeIndex = $index\n ) {\n <fdp-approval-flow-node\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n @if (_isEditMode) {\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-template>\n }\n </fd-grid-list-item-toolbar>\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"\n node.approvers.length === 1 ? node.approvers[0].imgUrl : null\n \"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n <ng-template fd-grid-list-item-body>\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-template>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n }\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n }\n }\n </fd-grid-list>\n @if (_isEditMode) {\n <div fd-bar>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n }\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.33.3-rc.19\n * Copyright (c) 2024 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-scrollbar{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"] }]
810
+ ], template: "<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n @if (isEditAvailable) {\n <fdp-approval-flow-toolbar-actions\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n }\n </fd-grid-list-title-bar>\n @if (_approvalProcess.watchers?.length || _isEditMode) {\n <div class=\"fdp-approval-flow__watchers\" [attr.aria-label]=\"watchersLabel\">\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n @if (!_isEditMode) {\n @for (watcher of _approvalProcess.watchers; track _trackByFn($index, watcher)) {\n <fd-avatar\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n }\n } @else {\n <div class=\"fdp-approval-flow__watchers-input-container\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n }\n </div>\n }\n @if (!_graph.errors) {\n @if (_graph.columns.length) {\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n @if (_scrollDiff > 0) {\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n @if (_carouselStepsLeft > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n }\n @if (_carouselStepsRight > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\n }\n </div>\n }\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n @for (column of _graph.columns; track column; let columnIndex = $index) {\n <div class=\"fdp-approval-flow__graph-column\">\n @for (\n node of column.nodes;\n track _trackByFn(nodeIndex, node);\n let nodeIndex = $index\n ) {\n <fdp-approval-flow-node\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n @if (_isEditMode) {\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-template>\n }\n </fd-grid-list-item-toolbar>\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"\n node.approvers.length === 1 ? node.approvers[0].imgUrl : null\n \"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n <ng-template fd-grid-list-item-body>\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-template>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n }\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n style=\"fill: var(--sapIllus_PatternShadow)\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n style=\"fill: var(--sapIllus_ObjectFillColor)\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n style=\"fill: var(--sapIllus_BrandColorSecondary)\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n style=\"fill: var(--sapIllus_Layering1)\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n style=\"fill: var(--sapIllus_StrokeDetailColor)\"\n ></path>\n </svg>\n </div>\n }\n }\n </fd-grid-list>\n @if (_isEditMode) {\n <div fd-bar>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n }\n</ng-container>\n", styles: ["/*!\n * Fundamental Library Styles v0.34.0\n * Copyright (c) 2024 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-scrollbar{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:normal;margin:0;overflow:auto;padding:0;scrollbar-color:var(--fdScrollbar_Thumb_Color) var(--fdScrollbar_Track_Color)}.fd-scrollbar:after,.fd-scrollbar:before{box-sizing:inherit;font-size:inherit}.fd-scrollbar.is-focus,.fd-scrollbar:focus{outline:none;z-index:5}.fd-scrollbar::-webkit-scrollbar{height:var(--fdScrollbar_Dimension);width:var(--fdScrollbar_Dimension)}.fd-scrollbar::-webkit-scrollbar-corner,.fd-scrollbar::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color)}.fd-scrollbar::-webkit-scrollbar-thumb{-webkit-box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color);background-color:transparent;border:var(--fdScrollbar_Thumb_Offset) solid transparent;border-radius:calc(var(--fdScrollbar_Thumb_Border_Radius) - var(--fdScrollbar_Thumb_Offset));box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Color)}.fd-scrollbar::-webkit-scrollbar-thumb:active,.fd-scrollbar::-webkit-scrollbar-thumb:hover{box-shadow:inset 0 0 0 var(--fdScrollbar_Dimension) var(--fdScrollbar_Thumb_Hover_Color)}.fd-scrollbar--container::-webkit-scrollbar-corner,.fd-scrollbar--container::-webkit-scrollbar-track{background-color:var(--fdScrollbar_Track_Color);border-radius:0 var(--fdScrollbar_Border_Radius) var(--fdScrollbar_Border_Radius) 0}.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-corner,.fd-scrollbar--container[dir=rtl]::-webkit-scrollbar-track,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-corner,[dir=rtl] .fd-scrollbar--container::-webkit-scrollbar-track{border-radius:var(--fdScrollbar_Border_Radius) 0 0 var(--fdScrollbar_Border_Radius)}.fdp-approval-flow__watchers{margin-bottom:.5rem;padding-left:.5rem}.fdp-approval-flow__watchers-title{font-size:.875em;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);margin:1rem 0 .5rem}.fdp-approval-flow__watchers fd-avatar{margin-right:.5rem;cursor:pointer}.fdp-approval-flow__watchers fd-avatar:focus{outline-offset:.0625rem;outline-width:.0625rem;outline-style:dotted;outline-color:var(--sapContent_FocusColor, #0854a0)}.fdp-approval-flow__watchers .fdp-approval-flow__watchers-input-container{width:17.375rem}[dir=rtl] .fdp-approval-flow__watchers,.fdp-approval-flow__watchers[dir=rtl]{padding-right:.5rem}[dir=rtl] .fdp-approval-flow__watchers fd-avatar,.fdp-approval-flow__watchers[dir=rtl] fd-avatar{margin-left:.5rem;margin-right:0}.fdp-approval-flow__container{max-width:100%;position:relative;padding:0 .5rem}.fdp-approval-flow__container--extra-padding-start{padding-left:2rem}.fdp-approval-flow__container--extra-padding-end{padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start{padding-left:.5rem;padding-right:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-end{padding-right:.5rem;padding-left:2rem}[dir=rtl] .fdp-approval-flow__container.fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end,.fdp-approval-flow__container[dir=rtl].fdp-approval-flow__container--extra-padding-start.fdp-approval-flow__container--extra-padding-end{padding-right:2rem;padding-left:2rem}.fdp-approval-flow__graph-container{position:relative;overflow:auto;padding-top:.5rem;padding-bottom:2rem;padding-left:2rem}.fdp-approval-flow__graph-container--multiple-root-nodes{padding-left:4rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-root-nodes,.fdp-approval-flow__graph-container--multiple-root-nodes[dir=rtl]{padding-right:2rem}[dir=rtl] .fdp-approval-flow__graph-container--multiple-final-nodes,.fdp-approval-flow__graph-container--multiple-final-nodes[dir=rtl]{padding-left:0}.fdp-approval-flow-carousel-controls{position:absolute;display:flex;align-items:center;width:100%;height:6.375rem;padding-top:.5rem;left:0}.fdp-approval-flow-carousel-controls--edit-mode{height:8.375rem}.fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--next-slide{position:absolute;border:none;background:transparent;color:#6a6d70;color:var(--sapContent_LabelColor, #6a6d70);display:flex;justify-content:space-between;width:2rem;align-items:center;cursor:pointer}.fdp-approval-flow-carousel-controls__button--prev-slide fd-icon,.fdp-approval-flow-carousel-controls__button--next-slide fd-icon{font-size:.875rem;color:#0854a0;color:var(--sapButton_IconColor, #0854a0);position:relative;top:.0625rem}.fdp-approval-flow-carousel-controls__button--prev-slide{left:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--prev-slide,.fdp-approval-flow-carousel-controls__button--prev-slide[dir=rtl]{left:auto;right:0}.fdp-approval-flow-carousel-controls__button--next-slide{right:0}[dir=rtl] .fdp-approval-flow-carousel-controls__button--next-slide,.fdp-approval-flow-carousel-controls__button--next-slide[dir=rtl]{left:0;right:auto}.fdp-approval-flow__graph{display:flex;align-items:flex-start;position:relative;left:0;transition:left .3s}.fdp-approval-flow__graph-column{margin-right:4rem;position:relative}[dir=rtl] .fdp-approval-flow__graph-column:first-child,.fdp-approval-flow__graph-column[dir=rtl]:first-child{margin-right:2rem}.fdp-approval-flow__graph fdp-approval-flow-node+fdp-approval-flow-node:not(:last-child){margin-bottom:1rem}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner{padding:0}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content{margin-left:auto}[dir=rtl] .fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content,.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--extra-content[dir=rtl]{margin-left:0;margin-right:auto}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner .fd-grid-list__item-toolbar .fd-toolbar--actions{display:none}.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner:not(.fdp-approval-flow__graph .fdp-approval-flow__graph-node-inner--edit) .fd-toolbar.fd-grid-list__item-toolbar{display:none}.cdk-overlay-container{z-index:1002!important}\n"] }]
811
811
  }], ctorParameters: () => [{ type: i1.DialogService }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: Map, decorators: [{
812
812
  type: Optional
813
813
  }, {
@@ -882,4 +882,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImpor
882
882
  type: ViewChildren,
883
883
  args: [ApprovalFlowNodeComponent]
884
884
  }] } });
885
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2FwcHJvdmFsLWZsb3cvYXBwcm92YWwtZmxvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2FwcHJvdmFsLWZsb3cvYXBwcm92YWwtZmxvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRHLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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QUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBSUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUd3QixpQkFBaUI7c0JBQS9DLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUdQLFFBQVE7c0JBQTdCLFNBQVM7dUJBQUMsU0FBUztnQkFHRyxTQUFTO3NCQUEvQixTQUFTO3VCQUFDLFVBQVU7Z0JBR29CLGVBQWU7c0JBQXZELFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWFwVG8sIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEtleVV0aWwsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBHcmlkTGlzdENvbXBvbmVudCwgR3JpZExpc3RTZWxlY3Rpb25FdmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9ncmlkLWxpc3QnO1xuXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2F2YXRhcic7XG5pbXBvcnQgeyBCYXJDb21wb25lbnQsIEJhckVsZW1lbnREaXJlY3RpdmUsIEJhclJpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQge1xuICAgIEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUsXG4gICAgR3JpZExpc3RJdGVtQ29tcG9uZW50LFxuICAgIEdyaWRMaXN0SXRlbUltYWdlRGlyZWN0aXZlLFxuICAgIEdyaWRMaXN0SXRlbVRvb2xiYXJDb21wb25lbnQsXG4gICAgR3JpZExpc3RUaXRsZUJhckNvbXBvbmVudCxcbiAgICBHcmlkTGlzdFRpdGxlQmFyU3BhY2VyQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9ncmlkLWxpc3QnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pY29uJztcbmltcG9ydCB7XG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlQ29tcG9uZW50LFxuICAgIElsbHVzdHJhdGVkTWVzc2FnZUZpZ2NhcHRpb25Db21wb25lbnQsXG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGV4dERpcmVjdGl2ZSxcbiAgICBJbGx1c3RyYXRlZE1lc3NhZ2VUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWxsdXN0cmF0ZWQtbWVzc2FnZSc7XG5pbXBvcnQgeyBNdWx0aUlucHV0Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL211bHRpLWlucHV0JztcbmltcG9ydCB7IE9iamVjdFN0YXR1cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9vYmplY3Qtc3RhdHVzJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlLFxuICAgIEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlLFxuICAgIERBVEFfUFJPVklERVJTLFxuICAgIERhdGFQcm92aWRlclxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICAgIEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUyxcbiAgICBBZGROb2RlRGlhbG9nRm9ybURhdGEsXG4gICAgQWRkTm9kZURpYWxvZ1JlZkRhdGEsXG4gICAgQXBwcm92YWxGbG93QWRkTm9kZUNvbXBvbmVudCxcbiAgICBBcHByb3ZhbEZsb3dOb2RlVGFyZ2V0XG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1hZGQtbm9kZS9hcHByb3ZhbC1mbG93LWFkZC1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0NvbXBvbmVudCxcbiAgICBBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNEaWFsb2dSZWZEYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1hcHByb3Zlci1kZXRhaWxzL2FwcHJvdmFsLWZsb3ctYXBwcm92ZXItZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dHcmFwaCxcbiAgICBBcHByb3ZhbEdyYXBoQ29sdW1uLFxuICAgIEFwcHJvdmFsR3JhcGhNZXRhZGF0YSxcbiAgICBnZW5lcmF0ZUFwcHJvdmFsRmxvd0dyYXBoLFxuICAgIGdlbmVyYXRlQXBwcm92YWxGbG93R3JhcGhNZXRhZGF0YVxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctZ3JhcGgnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dNZXNzYWdlLFxuICAgIEFwcHJvdmFsRmxvd01lc3NhZ2VUeXBlLFxuICAgIEFwcHJvdmFsRmxvd01lc3NhZ2VzQ29tcG9uZW50XG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1tZXNzYWdlcy9hcHByb3ZhbC1mbG93LW1lc3NhZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LW5vZGUvYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd1NlbGVjdFR5cGVDb21wb25lbnQsXG4gICAgU2VsZWN0VHlwZURpYWxvZ0Zvcm1EYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1zZWxlY3QtdHlwZS9hcHByb3ZhbC1mbG93LXNlbGVjdC10eXBlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dUb29sYmFyQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnMvYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgZGlzcGxheVVzZXJGbixcbiAgICBnZXRCbGFua0FwcHJvdmFsR3JhcGhOb2RlLFxuICAgIGdldEdyYXBoTm9kZXMsXG4gICAgaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZCxcbiAgICB0cmFja0J5Rm4sXG4gICAgdXNlclZhbHVlRm5cbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxHcmFwaE5vZGUsXG4gICAgQXBwcm92YWxHcmFwaE5vZGVNZXRhZGF0YSxcbiAgICBBcHByb3ZhbE5vZGUsXG4gICAgQXBwcm92YWxQcm9jZXNzLFxuICAgIEFwcHJvdmFsU3RhdHVzLFxuICAgIEFwcHJvdmFsVGVhbSxcbiAgICBBcHByb3ZhbFVzZXIsXG4gICAgU2VuZFJlbWluZGVyc0RhdGFcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFwcHJvdmFsRmxvd0FkZE5vZGVWaWV3U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXBwcm92YWwtZmxvdy1hZGQtbm9kZS12aWV3LnNlcnZpY2UnO1xuXG5sZXQgZGVmYXVsdElkID0gMDtcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjQwLjBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtYXBwcm92YWwtZmxvdycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FwcHJvdmFsLWZsb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW0FwcHJvdmFsRmxvd0FkZE5vZGVWaWV3U2VydmljZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbnRlbnREZW5zaXR5RGlyZWN0aXZlLFxuICAgICAgICBBcHByb3ZhbEZsb3dNZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgR3JpZExpc3RDb21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0VGl0bGVCYXJDb21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0VGl0bGVCYXJTcGFjZXJDb21wb25lbnQsXG4gICAgICAgIEFwcHJvdmFsRmxvd1Rvb2xiYXJBY3Rpb25zQ29tcG9uZW50LFxuICAgICAgICBBdmF0YXJDb21wb25lbnQsXG4gICAgICAgIE11bHRpSW5wdXRDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50LFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBHcmlkTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0SXRlbVRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEdyaWRMaXN0SXRlbUltYWdlRGlyZWN0aXZlLFxuICAgICAgICBHcmlkTGlzdEl0ZW1Cb2R5RGlyZWN0aXZlLFxuICAgICAgICBCYXJDb21wb25lbnQsXG4gICAgICAgIEJhclJpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIElsbHVzdHJhdGVkTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlRmlnY2FwdGlvbkNvbXBvbmVudCxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGl0bGVEaXJlY3RpdmUsXG4gICAgICAgIElsbHVzdHJhdGVkTWVzc2FnZVRleHREaXJlY3RpdmUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQXBwcm92YWxGbG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqIFRpdGxlIHdoaWNoIGlzIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyIG9mIHRoZSBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFZhbHVlIG9mIHRoZSBhcHByb3ZhbCBmbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB2YWx1ZTogQXBwcm92YWxQcm9jZXNzO1xuXG4gICAgLyoqIERhdGEgc291cmNlIGZvciB0aGUgdXNlcnMgb2YgQXBwcm92YWwgRmxvdyBjb21wb25lbnQuICovXG4gICAgQElucHV0KCkgdXNlckRhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlPEFwcHJvdmFsVXNlcj47XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgZm9yIHRoZSB3YXRjaGVycyBvZiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB3YXRjaGVyRGF0YVNvdXJjZTogQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2U8QXBwcm92YWxVc2VyPjtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHRlYW1zIG9mIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHRlYW1EYXRhU291cmNlOiBBcHByb3ZhbEZsb3dUZWFtRGF0YVNvdXJjZTxBcHByb3ZhbFRlYW0+O1xuXG4gICAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSB1c2VyIGRldGFpbHMgdGVtcGxhdGUgKi9cbiAgICBASW5wdXQoKSB1c2VyRGV0YWlsc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSBhcHAgY3VzdG9tIHN0YXR1c2VzICovXG4gICAgQElucHV0KCkgYXBwcm92YWxTdGF0dXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBDdXN0b20gc3RhdHVzIHRvIGNvbG9yIG1hcHBpbmcgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0dXNDb2xvck1hcHBpbmc6IFJlY29yZDxBcHByb3ZhbFN0YXR1cywgT2JqZWN0U3RhdHVzPjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgZHVlIGRhdGUgd2FybmluZyBpbiBzdGF0dXMgKi9cbiAgICBASW5wdXQoKSBjaGVja0R1ZURhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgZHVlIGRhdGUgd2hlbiBzdGF0dXMgY2hhbmdlcyB0byBgd2FybmluZ2Agd2l0aCB0ZXh0ICdEdWUgaW4gWCBkYXlzJy5cbiAgICAgKiAgTm90IHVzZWQgaWYgJ2NoZWNrRHVlRGF0ZScgZXF1YWxzIGZhbHNlICovXG4gICAgQElucHV0KCkgZHVlRGF0ZVRocmVzaG9sZCA9IDc7XG5cbiAgICAvKiogQSBsaXN0IG9mIGFwcHJvdmFsIHN0YXR1c2VzIHRoYXQgYWxsb3cgc2VuZGluZyByZW1pbmRlcnMgdG8gdGhlaXIgYXBwcm92ZXJzICovXG4gICAgQElucHV0KCkgYWxsb3dTZW5kUmVtaW5kZXJzRm9yU3RhdHVzZXM6IEFwcHJvdmFsU3RhdHVzW10gPSBbJ2luIHByb2dyZXNzJywgJ25vdCBzdGFydGVkJ107XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXBwcm92YWwgZmxvdyBpcyBlZGl0YWJsZSAqL1xuICAgIEBJbnB1dCgpIGlzRWRpdEF2YWlsYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFRleHQgbGFiZWwgZm9yIHdhdGNoZXJzIGxpc3QgKi9cbiAgICBASW5wdXQoKSB3YXRjaGVyc0xhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogRW5hYmxlcyBvciBkaXNhYmxlcyBhYmlsaXR5IHRvIGFkZCBwYXJhbGxlbCBub2RlcyAqL1xuICAgIEBJbnB1dCgpIGFsbG93QWRkUGFyYWxsZWxOb2RlcyA9IHRydWU7XG5cbiAgICAvKiogRGlzYWJsZXMgc2F2ZSBidXR0b24sIHNhdmUgYnV0dG9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKiogRGlzYWJsZXMgZXhpdCBidXR0b24sIGV4aXQgYnV0dG9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVFeGl0QnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHVzZXJzIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgKiBJbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHVzZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZW50aXR5IGZvciB3aGljaCB0ZWFtcyBEYXRhUHJvdmlkZXIgd2lsbCBiZSBsb2FkZWQuXG4gICAgICogSW50ZXJuYWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyBsb29rdXAgdG8gc29tZSByZWdpc3RyeVxuICAgICAqIGFuZCByZXRyaWV2ZSB0aGUgYmVzdCBtYXRjaGluZyBEYXRhUHJvdmlkZXIgdGhhdCBpcyBzZXQgb24gYXBwbGljYXRpb24gbGV2ZWxcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0ZWFtc0RhdGFQcm92aWRlckVudGl0eUtleT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGVudGl0eSBmb3Igd2hpY2ggYXBwcm92YWwgZmxvdyBEYXRhUHJvdmlkZXIgd2lsbCBiZSBsb2FkZWQuXG4gICAgICogSW50ZXJuYWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyBsb29rdXAgdG8gc29tZSByZWdpc3RyeVxuICAgICAqIGFuZCByZXRyaWV2ZSB0aGUgYmVzdCBtYXRjaGluZyBEYXRhUHJvdmlkZXIgdGhhdCBpcyBzZXQgb24gYXBwbGljYXRpb24gbGV2ZWxcbiAgICAgKi9cbiAgICBASW5wdXQoKSB3YXRjaGVyc0RhdGFQcm92aWRlckVudGl0eUtleT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCByZW1vdmUgdGhlIHNwYWNlIG5vZGUgZnJvbSB0aGUgZ3JhcGhcbiAgICAgKi9cbiAgICBASW5wdXQoKSByZW1vdmVTcGFjZU5vZGU/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCBvbiBhcHByb3ZhbCBmbG93IG5vZGUgY2xpY2suICovXG4gICAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8QXBwcm92YWxOb2RlPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gYXBwcm92YWwgZmxvdyBub2RlIGFkZCAqL1xuICAgIEBPdXRwdXQoKSBhZnRlck5vZGVBZGQgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcHJvdmFsTm9kZT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIGFwcHJvdmFsIGZsb3cgbm9kZSBlZGl0ICovXG4gICAgQE91dHB1dCgpIGFmdGVyTm9kZUVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcHJvdmFsTm9kZT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW52ZXIgc2F2ZSBpcyBjbGlja2VkIGluIGVkaXQgbW9kZSAgKi9cbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcHJvdmFsUHJvY2Vzcz4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW5ldmVyIHJlbWluZGVycyBzaG91bGQgYmUgc2VudCAqL1xuICAgIEBPdXRwdXQoKSBzZW5kUmVtaW5kZXJzID0gbmV3IEV2ZW50RW1pdHRlcjxTZW5kUmVtaW5kZXJzRGF0YT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIHN0YXJ0ZWQuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgQE91dHB1dCgpIG9uRGF0YVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIGZpbmlzaGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZ3JhcGhDb250YWluZXJFbCcpIF9ncmFwaENvbnRhaW5lckVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZ3JhcGhFbCcpIF9ncmFwaEVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZ3JpZExpc3QnKSBfZ3JpZExpc3Q6IEdyaWRMaXN0Q29tcG9uZW50PEFwcHJvdmFsR3JhcGhOb2RlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50KSBfbm9kZUNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2FwcHJvdmFsUHJvY2VzczogQXBwcm92YWxQcm9jZXNzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaW5pdGlhbEFwcHJvdmFsUHJvY2Vzcz86IEFwcHJvdmFsUHJvY2VzcztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzPzogQXBwcm92YWxQcm9jZXNzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ3JhcGg6IEFwcHJvdmFsRmxvd0dyYXBoO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNDYXJvdXNlbCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ3JhcGhNZXRhZGF0YTogQXBwcm92YWxHcmFwaE1ldGFkYXRhID0ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0VkaXRNb2RlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF91c2Vyc0ZvcldhdGNoZXJzTGlzdDogQXBwcm92YWxVc2VyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRXYXRjaGVyczogQXBwcm92YWxVc2VyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGVkV2F0Y2hlcklkczogQXBwcm92YWxVc2VyWydpZCddW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VzOiBBcHByb3ZhbEZsb3dNZXNzYWdlW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXlVc2VyRm4gPSBkaXNwbGF5VXNlckZuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdXNlclZhbHVlRm4gPSB1c2VyVmFsdWVGbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyYWNrQnlGbiA9IHRyYWNrQnlGbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtcHR5QXBwcm92YWxGbG93U3BvdENvbmZpZyA9IHtcbiAgICAgICAgc3BvdDogeyB1cmw6ICcnLCBpZDogJ3NhcElsbHVzLVNwb3QtTm9EYXRhJyB9XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX211bHRpcGxlUm9vdE5vZGVzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tdWx0aXBsZUZpbmFsTm9kZXMgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2RyYWdEcm9wSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBhcHByb3ZhbEZsb3dVbmlxdWVJZCA9IGBmZHAtYXBwcm92YWwtZmxvdy0keysrZGVmYXVsdElkfWA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VkaXRNb2RlSW5pdFN1YjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRhU291cmNlQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEFfUFJPVklERVJTKSBwcml2YXRlIHByb3ZpZGVyczogTWFwPHN0cmluZywgRGF0YVByb3ZpZGVyPGFueT4+LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBcHByb3ZhbEZsb3dDb21wb25lbnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgcmVsZWFzZS4nKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBhbmQgaW5pdGlhbCBzdGF0ZXMgb2YgYXBwcm92YWwgcHJvY2VzcyAqL1xuICAgIGdldCBhcHByb3ZhbFByb2Nlc3MoKTogQXBwcm92YWxQcm9jZXNzIHtcbiAgICAgICAgcmV0dXJuIGNsb25lRGVlcCh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9ydGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2VsZWN0ZWROb2RlcygpOiBBcHByb3ZhbEdyYXBoTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIGdldEdyYXBoTm9kZXModGhpcy5fZ3JhcGgpLmZpbHRlcigobm9kZSkgPT4gbm9kZS5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZXJEYXRhU291cmNlKSB7XG4gICAgICAgICAgICBjb25zdCB1c2Vyc0RQID0gdGhpcy51c2Vyc0RhdGFQcm92aWRlckVudGl0eUtleSAmJiB0aGlzLnByb3ZpZGVycz8uZ2V0KHRoaXMudXNlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkpO1xuICAgICAgICAgICAgaWYgKHVzZXJzRFApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJEYXRhU291cmNlID0gbmV3IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlKHVzZXJzRFApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSB1c2VycyBkYXRhIHNvdXJjZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hlcnNEUCA9XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaGVyc0RhdGFQcm92aWRlckVudGl0eUtleSAmJiB0aGlzLnByb3ZpZGVycz8uZ2V0KHRoaXMud2F0Y2hlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkpO1xuICAgICAgICAgICAgaWYgKHdhdGNoZXJzRFApIHtcbiAgICAgICAgICAgICAgICB0aGlzLndhdGNoZXJEYXRhU291cmNlID0gbmV3IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlKHdhdGNoZXJzRFApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSB3YXRjaGVycyBkYXRhIHNvdXJjZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy50ZWFtRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3QgdGVhbXNEUCA9IHRoaXMudGVhbXNEYXRhUHJvdmlkZXJFbnRpdHlLZXkgJiYgdGhpcy5wcm92aWRlcnM/LmdldCh0aGlzLnRlYW1zRGF0YVByb3ZpZGVyRW50aXR5S2V5KTtcbiAgICAgICAgICAgIGlmICh0ZWFtc0RQKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZWFtRGF0YVNvdXJjZSA9IG5ldyBBcHByb3ZhbEZsb3dUZWFtRGF0YVNvdXJjZSh0ZWFtc0RQKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgdGVhbXMgZGF0YSBzb3VyY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uUmVzaXplKCk7XG4gICAgICAgIHRoaXMuX3NldHVwRGF0YVNvdXJjZVN1YnNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VzcyA9IHRoaXMudmFsdWUgPz8geyB3YXRjaGVyczogW10sIG5vZGVzOiBbXSB9O1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbEFwcHJvdmFsUHJvY2VzcyA9IGNsb25lRGVlcChwcm9jZXNzKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyhwcm9jZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnVzZXJEYXRhU291cmNlIHx8IGNoYW5nZXMud2F0Y2hlckRhdGFTb3VyY2UgfHwgY2hhbmdlcy50ZWFtRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZUNoYW5nZWQkLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc05leHROb2RlQmxhbmsobm9kZTogQXBwcm92YWxHcmFwaE5vZGUsIGNvbHVtbkluZGV4OiBudW1iZXIsIG5vZGVJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gdGhpcy5fZ3JhcGguY29sdW1uc1tjb2x1bW5JbmRleCArIDFdPy5ub2Rlc1tub2RlSW5kZXhdO1xuICAgICAgICBjb25zdCBuZXh0Tm9kZUJsYW5rID0gbmV4dE5vZGU/LmJsYW5rO1xuICAgICAgICBjb25zdCBuZXh0Tm9kZVBhcmFsbGVsRW5kID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0Tm9kZT8uaWRdPy5wYXJhbGxlbEVuZDtcblxuICAgICAgICByZXR1cm4gIW5vZGUuYmxhbmsgJiYgISFuZXh0Tm9kZUJsYW5rICYmICFuZXh0Tm9kZVBhcmFsbGVsRW5kO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQ2RrRHJhZ0Rpc2FibGVkKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5faXNFZGl0TW9kZSB8fCBub2RlLmJsYW5rIHx8IG5vZGUuc3BhY2UgfHwgbm9kZS5zdGF0dXMgIT09ICdub3Qgc3RhcnRlZCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTm9kZSBjbGljayBoYW5kbGVyICovXG4gICAgX29uTm9kZUNsaWNrKG5vZGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZHJhZ0Ryb3BJblByb2dyZXNzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW48QXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzRGlhbG9nUmVmRGF0YT4oXG4gICAgICAgICAgICBBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd1NlbmRSZW1pbmRlcjogdGhpcy5hbGxvd1NlbmRSZW1pbmRlcnNGb3JTdGF0dXNlcy5pbmNsdWRlcyhub2RlLnN0YXR1cyksXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHREaWFsb2dPcHRpb25zXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgocmVtaW5kZXJUYXJnZXRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZW1pbmRlclRhcmdldHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kUmVtaW5kZXJzLmVtaXQoeyB1c2VyczogcmVtaW5kZXJUYXJnZXRzLCBub2RlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KG5vZGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uTm9kZUFkZChub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZnRlck5vZGVBZGQuZW1pdChub2RlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk5vZGVFZGl0KG5vZGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmFmdGVyTm9kZUVkaXQuZW1pdChub2RlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk5vZGVTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEdyaWRMaXN0U2VsZWN0aW9uRXZlbnQ8QXBwcm92YWxHcmFwaE5vZGU+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dyYXBoLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW4ubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSAhIWV2ZW50LnNlbGVjdGlvbi5maW5kKChfbm9kZSkgPT4gX25vZGUuaWQgPT09IG5vZGUuaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFdhdGNoZXIncyBhdmF0YXIgY2xpY2sgaGFuZGxlciAqL1xuICAgIF9vbldhdGNoZXJDbGljayh3YXRjaGVyOiBBcHByb3ZhbFVzZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW48QXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzRGlhbG9nUmVmRGF0YT4oQXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgd2F0Y2hlcixcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogUmV0cml2ZSBtZXRhZGF0YSBieSBub2RlIGlkICovXG4gICAgZ2V0Tm9kZU1ldGFkYXRhQnlOb2RlSWQobm9kZUlkOiBzdHJpbmcpOiBBcHByb3ZhbEdyYXBoTm9kZU1ldGFkYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZUlkXTtcbiAgICB9XG5cbiAgICAvKiogU2Nyb2xsIHRvIHRoZSBuZXh0IGhvcml6b250YWwgc2xpZGUgKi9cbiAgICBuZXh0U2xpZGUoZGlyID0gMSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSAxO1xuXG4gICAgICAgIGxldCBwb3MgPSAwO1xuXG4gICAgICAgIGlmIChkaXIgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc1JpZ2h0ID09PSAxO1xuICAgICAgICAgICAgY29uc3QgbmV4dFN0ZXAgPSB0aGlzLl9jYXJvdXNlbFN0ZXBzQ291bnQgLSB0aGlzLl9jYXJvdXNlbFN0ZXBzUmlnaHQgKyAxO1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZVJpZ2h0UG9pbnQgPSB0aGlzLl9jYXJvdXNlbFN0ZXBTaXplICogbmV4dFN0ZXAgKyAobGFzdFN0ZXAgPyAwIDogdGhyZXNob2xkKTtcbiAgICAgICAgICAgIHBvcyA9IHZpc2libGVSaWdodFBvaW50IC0gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGFzdFN0ZXAgPSB0aGlzLl9jYXJvdXNlbFN0ZXBzTGVmdCA9PT0gMTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc0xlZnQgLSAxO1xuICAgICAgICAgICAgcG9zID0gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZSAqIG5leHRTdGVwIC0gKGxhc3RTdGVwID8gMCA6IHRocmVzaG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRTY3JvbGxQb3NpdGlvbihwb3MpO1xuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0U2Nyb2xsUG9zaXRpb24ocG9zOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIGxlZnQ6IHBvcyxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21vdmVDb2xJblZpZXcoY29sSW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bY29sSW5kZXhdLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgeDogbm9kZVgsIHdpZHRoIH0gPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLng7XG5cbiAgICAgICAgY29uc3QgbGVmdCA9IG5vZGVYIC0gZGVsdGE7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuXG4gICAgICAgIGlmIChsZWZ0IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgKyBsZWZ0KTtcbiAgICAgICAgfSBlbHNlIGlmIChyaWdodCA+IHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgKyByaWdodCAtIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZSBub2RlIGtleWRvd24gYW5kIGZvY3VzIG90aGVyIG5vZGUgYmFzZWQgb24gd2hpY2gga2V5IGlzIHByZXNzZWQgKi9cbiAgICBfb25Ob2RlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgbm9kZTogQXBwcm92YWxHcmFwaE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW1VQX0FSUk9XLCBET1dOX0FSUk9XLCBSSUdIVF9BUlJPVywgTEVGVF9BUlJPV10pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IG5vZGVJbmRleCwgY29sdW1uSW5kZXggfSA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZS5pZF07XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBsZXQgbmV4dEZvY3VzVGFyZ2V0OiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodHlwZW9mIG5vZGVJbmRleCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0Rm9jdXNUYXJnZXQgPSB0aGlzLl9nZXROZXh0VmVydGljYWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXgsICd1cCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dFZlcnRpY2FsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4LCAnZG93bicpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Rm9jdXNUYXJnZXQgPSB0aGlzLl9nZXROZXh0SG9yaXpvbnRhbE5vZGUobm9kZUluZGV4LCBjb2x1bW5JbmRleCwgdGhpcy5fcnRsID8gJ3JpZ2h0JyA6ICdsZWZ0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Rm9jdXNUYXJnZXQgPSB0aGlzLl9nZXROZXh0SG9yaXpvbnRhbE5vZGUobm9kZUluZGV4LCBjb2x1bW5JbmRleCwgdGhpcy5fcnRsID8gJ2xlZnQnIDogJ3JpZ2h0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dEZvY3VzVGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c05vZGUobmV4dEZvY3VzVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEZldGNoIGFsbCBuZWNlc3NhcnkgZGF0YSBhbmQgZW50ZXIgZWRpdCBtb2RlICovXG4gICAgX2VudGVyRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgICAgIC8vIHRoZXJlJ3Mgbm8gc3VwcG9ydCBmb3Igc2VhcmNoaW5nIGluIG11bHRpLWlucHV0LCBzbyBncmFiYmluZyBhbGwgd2F0Y2hlcnNcbiAgICAgICAgLy8gdHJpZ2dlcmluZyBpbml0aWFsIGxvYWRpbmcgb2YgZGF0YSBpbiBkYXRhIHNvdXJjZXNcbiAgICAgICAgdGhpcy53YXRjaGVyRGF0YVNvdXJjZS5tYXRjaCgpO1xuICAgICAgICB0aGlzLl9lZGl0TW9kZUluaXRTdWIgPSB0aGlzLndhdGNoZXJEYXRhU291cmNlLm9wZW4oKS5zdWJzY3JpYmUoKHdhdGNoZXJzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91c2Vyc0ZvcldhdGNoZXJzTGlzdCA9IHdhdGNoZXJzO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRXYXRjaGVycyA9IHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy53YXRjaGVycztcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkV2F0Y2hlcklkcyA9IHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnMubWFwKCh3KSA9PiB3LmlkKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbEFwcHJvdmFsUHJvY2VzcyA9IGNsb25lRGVlcCh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX2VkaXRNb2RlSW5pdFN1Yik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU2VuZCB1cGRhdGUgYXBwcm92YWwgcHJvY2VzcyBjYWxscyB0byBEYXRhU291cmNlIGFuZCBleGl0IGVkaXQgbW9kZSovXG4gICAgX3NhdmVFZGl0TW9kZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VkaXRNb2RlSW5pdFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53YXRjaGVyRGF0YVNvdXJjZS5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2lzRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZXMgPSBbXTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkID0ge1xuICAgICAgICAgICAgLi4udGhpcy5fYXBwcm92YWxQcm9jZXNzLFxuICAgICAgICAgICAgd2F0Y2hlcnM6IHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnNcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9idWlsZFZpZXcodXBkYXRlZCk7XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHVwZGF0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlc3RvcmUgaW5pdGlhbCBhcHByb3ZhbCBmbG93IHN0YXRlIGFuZCBleGl0IGVkaXQgbW9kZSAqL1xuICAgIF9leGl0RWRpdE1vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VkaXRNb2RlSW5pdFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53YXRjaGVyRGF0YVNvdXJjZS5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2VzcyA9IGNsb25lRGVlcCh0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzISk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2lzRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZXMgPSBbXTtcblxuICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF93YXRjaGVyc1NlbGVjdGlvbkNoYW5nZWQoc2VsZWN0ZWRJZHM6IEFwcHJvdmFsVXNlclsnaWQnXVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlkc1NldCA9IG5ldyBTZXQoc2VsZWN0ZWRJZHMpO1xuICAgICAgICAvLyB1cGRhdGluZyB3YXRjaGVycyBzZWxlY3Rpb25cbiAgICAgICAgLy8gc2luY2UgaXQncyBwb3NzaWJsZSBcIl91c2Vyc0ZvcldhdGNoZXJzTGlzdFwiIG1pZ2h0IG5vdCBjb250YWluIGFsbCBzZWxlY3RlZCB2YWx1ZXMsXG4gICAgICAgIC8vIGRldGVybWluZSBjdXJyZW50IHNlbGVjdGlvbiBiYXNlZCBvbiB3aGF0J3MgYWxyZWFkeSBzZWxlY3RlZCBhbmQgXCJfdXNlcnNGb3JXYXRjaGVyc0xpc3RcIlxuICAgICAgICB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzID0gdW5pcUJ5KFxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRXYXRjaGVycy5jb25jYXQodGhpcy5fdXNlcnNGb3JXYXRjaGVyc0xpc3QpLmZpbHRlcigodXNlcikgPT4gaWRzU2V0Lmhhcyh1c2VyLmlkKSksXG4gICAgICAgICAgICAodSkgPT4gdS5pZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlc3RvcmUgcHJldmlvdXNseSBzYXZlZCBhcHByb3ZhbCBwcm9jZXNzIHN0YXRlICovXG4gICAgX3VuZG9MYXN0QWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5fcHJldmlvdXNBcHByb3ZhbFByb2Nlc3MhKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNBcHByb3ZhbFByb2Nlc3MgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT3BlbiBhZGQgbm9kZSBkaWFsb2cgKi9cbiAgICBfYWRkTm9kZShzb3VyY2U6IEFwcHJvdmFsR3JhcGhOb2RlLCB0eXBlOiBBcHByb3ZhbEZsb3dOb2RlVGFyZ2V0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNob3dOb2RlVHlwZVNlbGVjdCA9IHR5cGUgPT09ICdiZWZvcmUnICYmICFzb3VyY2UuYWN0aW9uc0NvbmZpZz8uZGlzYWJsZUFkZFBhcmFsbGVsO1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbjxBZGROb2RlRGlhbG9nUmVmRGF0YT4oXG4gICAgICAgICAgICBBcHByb3ZhbEZsb3dBZGROb2RlQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRhcmdldDogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd05vZGVUeXBlU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBPYmplY3QuYXNzaWduKGdldEJsYW5rQXBwcm92YWxHcmFwaE5vZGUoKSwgeyBibGFuazogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrRHVlRGF0ZTogdGhpcy5jaGVja0R1ZURhdGUsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHREaWFsb2dPcHRpb25zXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgoZGF0YTogQWRkTm9kZURpYWxvZ0Zvcm1EYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHsgbm9kZSwgbm9kZVR5cGUsIHRvTmV4dFNlcmlhbCB9ID0gZGF0YTtcblxuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTtcblxuICAgICAgICAgICAgbm9kZS5pZCA9IGB0ZW1wSWQkeyhNYXRoLnJhbmRvbSgpICogMTAwMCkudG9GaXhlZCgpfWA7XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW50ZXJFZGl0TW9kZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2JlZm9yZSc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gQVBQUk9WQUxfRkxPV19OT0RFX1RZUEVTLlNFUklBTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzID0gW3NvdXJjZS5pZF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhzb3VyY2UuaWQsIFtub2RlLmlkXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5QQVJBTExFTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0FkZGluZ1BhcmFsbGVsTm9kZShub2RlLCBzb3VyY2UsIHRvTmV4dFNlcmlhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2JlZm9yZS1hbGwnOlxuICAgICAgICAgICAgICAgICAgICBub2RlLnRhcmdldHMgPSB0aGlzLl9ncmFwaC5jb2x1bW5zWzBdLm5vZGVzLm1hcCgoX25vZGUpID0+IF9ub2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdhZnRlcic6XG4gICAgICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cyA9IHNvdXJjZS50YXJnZXRzO1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2UudGFyZ2V0cyA9IFtub2RlLmlkXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdhZnRlci1hbGwnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFBhcmVudHMgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3NvdXJjZS50YXJnZXRzWzBdXT8ucGFyZW50cztcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0UGFyZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzID0gc291cmNlLnRhcmdldHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhzb3VyY2UuaWQsIFtub2RlLmlkXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9ub2RlKSA9PiBfbm9kZS5pZCAhPT0gc291cmNlLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JhcGguY29sdW1uc1t0aGlzLl9ncmFwaC5jb2x1bW5zLmxlbmd0aCAtIDFdLm5vZGVzLmZvckVhY2goKF9ub2RlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ub2RlLnRhcmdldHMucHVzaChub2RlLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdwYXJhbGxlbCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZGRpbmdQYXJhbGxlbE5vZGUobm9kZSwgc291cmNlLCB0b05leHRTZXJpYWwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2Uobm9kZS5hcHByb3ZhbFRlYW1JZCA/ICd0ZWFtQWRkU3VjY2VzcycgOiAnYXBwcm92ZXJBZGRTdWNjZXNzJyk7XG4gICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMucHVzaChub2RlKTtcblxuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgICAgICAgICB0aGlzLl9vbk5vZGVBZGQobm9kZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE9wZW4gZWRpdCBub2RlIGRpYWxvZyAqL1xuICAgIF9lZGl0Tm9kZShub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuPEFkZE5vZGVEaWFsb2dSZWZEYXRhPihcbiAgICAgICAgICAgIEFwcHJvdmFsRmxvd0FkZE5vZGVDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBpc0VkaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IE9iamVjdC5hc3NpZ24oe30sIG5vZGUpLFxuICAgICAgICAgICAgICAgICAgICBjaGVja0R1ZURhdGU6IHRoaXMuY2hlY2tEdWVEYXRlLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclxuICAgICAgICApO1xuXG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKGRhdGE6IHsgbm9kZTogQXBwcm92YWxOb2RlIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWROb2RlID0gZGF0YT8ubm9kZTtcblxuICAgICAgICAgICAgaWYgKCF1cGRhdGVkTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVOb2RlKHVwZGF0ZWROb2RlKTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKCdub2RlRWRpdCcpO1xuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgICAgICAgICB0aGlzLl9vbk5vZGVFZGl0KG5vZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBcIkRlbGV0ZVwiIGJ1dHRvbiBjbGljayBoYW5kbGVyICovXG4gICAgX29uTm9kZURlbGV0ZShub2RlVG9EZWxldGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTtcbiAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9EZWxldGUpO1xuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShub2RlVG9EZWxldGUuYXBwcm92YWxUZWFtSWQgPyAndGVhbVJlbW92ZScgOiAnbm9kZVJlbW92ZScpO1xuICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kZWxldGVTZWxlY3RlZE5vZGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTtcblxuICAgICAgICBjb25zdCBub2Rlc1RvRGVsZXRlID0gdGhpcy5fbm9kZUNvbXBvbmVudHNcbiAgICAgICAgICAgIC5maWx0ZXIoKG5vZGVDb21wb25lbnQpID0+IG5vZGVDb21wb25lbnQuX2lzU2VsZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChub2RlQ29tcG9uZW50KSA9PiBub2RlQ29tcG9uZW50Lm5vZGUpO1xuXG4gICAgICAgIG5vZGVzVG9EZWxldGUuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZSgnbm9kZXNSZW1vdmUnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBOb2RlIGRyYWcgbW92ZSBoYW5kbGVyLCB1c2VkIHRvIGNoZWNrIGlmIG5lZWQgdG8gaGlnaGxpZ2h0IGEgZHJvcCB6b25lIHJlY3RhbmdsZSAqL1xuICAgIF9vbk5vZGVEcmFnTW92ZWQobm9kZTogQXBwcm92YWxHcmFwaE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZHJhZ2dlZE5vZGVEaW1lbnNpb25zID0gdGhpcy5fbm9kZUNvbXBvbmVudHNcbiAgICAgICAgICAgIC5maW5kKChjb21wKSA9PiBjb21wLm5vZGUgPT09IG5vZGUpXG4gICAgICAgICAgICA/Ll9uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmICghZHJhZ2dlZE5vZGVEaW1lbnNpb25zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ub2RlQ29tcG9uZW50cy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQubm9kZSAhPT0gbm9kZSAmJiBCb29sZWFuKGNvbXBvbmVudC5fZHJvcFpvbmVzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuX2NoZWNrSWZOb2RlRHJhZ2dlZEluRHJvcFpvbmUoZHJhZ2dlZE5vZGVEaW1lbnNpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTm9kZSBkcm9wIGhhbmRsZXIgKi9cbiAgICBfb25Ob2RlRHJvcChub2RlVG9Ecm9wOiBBcHByb3ZhbEdyYXBoTm9kZSwgZHJhZzogQ2RrRHJhZyk6IHZvaWQge1xuICAgICAgICBkcmFnLnJlc2V0KCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5fZHJhZ0Ryb3BJblByb2dyZXNzID0gZmFsc2UpKTtcblxuICAgICAgICBjb25zdCBkcm9wVGFyZ2V0ID0gdGhpcy5fbm9kZUNvbXBvbmVudHMuZmluZCgobikgPT4gbi5faXNBbnlEcm9wWm9uZUFjdGl2ZSk7XG5cbiAgICAgICAgaWYgKCFkcm9wVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTtcblxuICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSBkcm9wVGFyZ2V0Ll9hY3RpdmVEcm9wWm9uZXNbMF0ucGxhY2VtZW50O1xuXG4gICAgICAgIHRoaXMuX25vZGVDb21wb25lbnRzLmZvckVhY2goKG4pID0+IG4uX2RlYWN0aXZhdGVEcm9wWm9uZXMoKSk7XG5cbiAgICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2FmdGVyJykge1xuICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9Ecm9wKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IGdldEdyYXBoTm9kZXModGhpcy5fZ3JhcGgpLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IGRyb3BUYXJnZXQubm9kZS50YXJnZXRzWzBdKTtcblxuICAgICAgICAgICAgaWYgKG5leHROb2RlPy5ibGFuaykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobmV4dE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlVG9Ecm9wLnRhcmdldHMgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBkcm9wVGFyZ2V0Lm5vZGUuaWQpPy50YXJnZXRzID8/IFtdO1xuICAgICAgICAgICAgZHJvcFRhcmdldC5ub2RlLnRhcmdldHMgPSBbbm9kZVRvRHJvcC5pZF07XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wKTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnQgPT09ICdiZWZvcmUnKSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4oQXBwcm92YWxGbG93U2VsZWN0VHlwZUNvbXBvbmVudCwgdW5kZWZpbmVkLCB0aGlzLl9pbmplY3Rvcik7XG5cbiAgICAgICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKGRhdGE6IFNlbGVjdFR5cGVEaWFsb2dGb3JtRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0eXBlLCB0b05leHRTZXJpYWwgfSA9IGRhdGE7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGVUb0Ryb3ApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5TRVJJQUwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoZHJvcFRhcmdldC5ub2RlLmlkLCBbbm9kZVRvRHJvcC5pZF0pO1xuICAgICAgICAgICAgICAgICAgICBub2RlVG9Ecm9wLnRhcmdldHMgPSBbZHJvcFRhcmdldC5ub2RlLmlkXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gQVBQUk9WQUxfRkxPV19OT0RFX1RZUEVTLlBBUkFMTEVMKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZGRpbmdQYXJhbGxlbE5vZGUobm9kZVRvRHJvcCwgZHJvcFRhcmdldC5ub2RlLCB0b05leHRTZXJpYWwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBsYWNlbWVudCA9PT0gJ2JlZm9yZS1hbGwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGVUb0Ryb3ApO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdENvbHVtbk5vZGVzID0gdGhpcy5fZ3JhcGguY29sdW1uc1swXS5ub2RlcztcbiAgICAgICAgICAgIG5vZGVUb0Ryb3AudGFyZ2V0cyA9IGZpcnN0Q29sdW1uTm9kZXMubWFwKChub2RlKSA9PiBub2RlLmlkKTtcblxuICAgICAgICAgICAgdGhpcy5fZmluaXNoRHJhZ0Ryb3BQcm9jZXNzKG5vZGVUb0Ryb3ApO1xuICAgICAgICB9IGVsc2UgaWYgKHBsYWNlbWVudCA9PT0gJ2FmdGVyLWFsbCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRHJvcCk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcblxuICAgICAgICAgICAgbm9kZVRvRHJvcC50YXJnZXRzID0gWy4uLmRyb3BUYXJnZXQubm9kZS50YXJnZXRzXTtcblxuICAgICAgICAgICAgaWYgKGRyb3BUYXJnZXQubm9kZS50YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb2x1bW5Ob2RlcyA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbdGhpcy5fZ3JhcGguY29sdW1ucy5sZW5ndGggLSAxXS5ub2RlcztcbiAgICAgICAgICAgICAgICBsYXN0Q29sdW1uTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4gbm9kZS50YXJnZXRzLnB1c2gobm9kZVRvRHJvcC5pZCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAobm9kZSkgPT4gbm9kZS5pZCAhPT0gZHJvcFRhcmdldC5ub2RlLmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhkcm9wVGFyZ2V0Lm5vZGUuaWQsIFtub2RlVG9Ecm9wLmlkXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmluaXNoRHJhZ0Ryb3BQcm9jZXNzKG5vZGVUb0Ryb3A6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5wdXNoKG5vZGVUb0Ryb3ApO1xuICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3dNZXNzYWdlKHR5cGU6IEFwcHJvdmFsRmxvd01lc3NhZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW3sgdHlwZSB9XTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBCdWlsZCBBcHByb3ZhbCBGbG93IGdyYXBoIGFuZCByZW5kZXIgaXQgKi9cbiAgICBwcml2YXRlIF9idWlsZFZpZXcoYXBwcm92YWxQcm9jZXNzOiBBcHByb3ZhbFByb2Nlc3MpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFhcHByb3ZhbFByb2Nlc3Mubm9kZXMpIHtcbiAgICAgICAgICAgIGFwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzKSB7XG4gICAgICAgICAgICBhcHByb3ZhbFByb2Nlc3Mud2F0Y2hlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3MgPSBhcHByb3ZhbFByb2Nlc3M7XG4gICAgICAgIHRoaXMuX2dyYXBoID0gZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaCh0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMpO1xuXG4gICAgICAgIGlmICh0aGlzLnJlbW92ZVNwYWNlTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5fZ3JhcGguY29sdW1ucyA9IHRoaXMucmVtb3ZlU3BhY2VOb2Rlc0Zyb21Db2x1bW5zKHRoaXMuX2dyYXBoLmNvbHVtbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2dyYXBoLmVycm9ycykge1xuICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoJ2Vycm9yJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ncmFwaE1ldGFkYXRhID0gZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaE1ldGFkYXRhKHRoaXMuX2dyYXBoKTtcblxuICAgICAgICBjb25zdCBub2RlcyA9IGdldEdyYXBoTm9kZXModGhpcy5fZ3JhcGgpO1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFub2RlLnNwYWNlKTtcbiAgICAgICAgdGhpcy5fbXVsdGlwbGVSb290Tm9kZXMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZS5pZF0uaXNSb290KS5sZW5ndGggPiAxO1xuICAgICAgICB0aGlzLl9tdWx0aXBsZUZpbmFsTm9kZXMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZS5pZF0uaXNGaW5hbCkubGVuZ3RoID4gMTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9ncmlkTGlzdD8uY2xlYXJTZWxlY3Rpb24oKTtcblxuICAgICAgICBpZiAoIXRoaXMuX2lzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTGlzdGVuIHdpbmRvdyByZXNpemUgYW5kIGRpc3RyaWJ1dGUgY2FyZHMgb24gY29sdW1uIGNoYW5nZSAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIG1lcmdlKGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKSwgZnJvbUV2ZW50KHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpKVxuICAgICAgICAgICAgICAgIC5waXBlKHRocm90dGxlVGltZSg1MCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZm9jdXNOb2RlKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vZGVUb0ZvY3VzID0gdGhpcy5fbm9kZUNvbXBvbmVudHMuZmluZCgoY29tcCkgPT4gY29tcC5ub2RlID09PSBub2RlKTtcblxuICAgICAgICBpZiAoIW5vZGVUb0ZvY3VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW92ZUNvbEluVmlldyhub2RlLmNvbEluZGV4ID8/IDApO1xuICAgICAgICBub2RlVG9Gb2N1cy5fZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFVwZGF0ZSBub2RlIG9iamVjdCBpbiBsb2NhbCBhcHByb3ZhbCBwcm9jZXNzIGRhdGEgc3RydWN0dXJlICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlTm9kZShub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZUluZGV4ID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbmRJbmRleCgobikgPT4gbi5pZCA9PT0gbm9kZS5pZCk7XG5cbiAgICAgICAgaWYgKG5vZGVJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXNbbm9kZUluZGV4XSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBEZWxldGUgbm9kZSBvYmplY3QgaW4gbG9jYWwgYXBwcm92YWwgcHJvY2VzcyBkYXRhIHN0cnVjdHVyZSAqL1xuICAgIHByaXZhdGUgX2RlbGV0ZU5vZGUobm9kZVRvRGVsZXRlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZXNUb0RlbGV0ZSA9IFtub2RlVG9EZWxldGVdO1xuICAgICAgICBjb25zdCBncmFwaE5vZGVzID0gZ2V0R3JhcGhOb2Rlcyh0aGlzLl9ncmFwaCk7XG4gICAgICAgIGxldCBjdXJyTm9kZSA9IGdyYXBoTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gbm9kZVRvRGVsZXRlLmlkKTtcbiAgICAgICAgbGV0IG5leHROb2RlOiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZDtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoY3Vyck5vZGU/LnRhcmdldHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBncmFwaE5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IGN1cnJOb2RlPy50YXJnZXRzWzBdKTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXh0Tm9kZT8uYmxhbmsgJiYgdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0Tm9kZS5pZF0ucGFyZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXNUb0RlbGV0ZS5wdXNoKG5leHROb2RlKTtcblxuICAgICAgICAgICAgICAgICAgICBjdXJyTm9kZSA9IG5leHROb2RlO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGdyYXBoTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gY3Vyck5vZGU/LnRhcmdldHNbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAobmV4dE5vZGU/LmJsYW5rICYmIHRoaXMuX2dyYXBoTWV0YWRhdGFbbmV4dE5vZGUuaWRdLnBhcmVudHMubGVuZ3RoID09PSAxKTtcblxuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25vZGVUb0RlbGV0ZS5pZF0ucGFyZW50c1swXTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbm9kZVRvRGVsZXRlLnRhcmdldHNbMF07XG4gICAgICAgIGNvbnN0IGlzUGFyZW50UGFyYWxsZWxTdGFydCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbcGFyZW50Py5pZF0/LnBhcmFsbGVsU3RhcnQ7XG4gICAgICAgIGNvbnN0IGlzVGFyZ2V0UGFyYWxsZWxFbmQgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3RhcmdldF0/LnBhcmFsbGVsRW5kO1xuICAgICAgICBjb25zdCB0YXJnZXRzID1cbiAgICAgICAgICAgIChpc1BhcmVudFBhcmFsbGVsU3RhcnQgJiYgaXNUYXJnZXRQYXJhbGxlbEVuZCkgfHwgbm9kZXNUb0RlbGV0ZS5sZW5ndGggPiAxID8gW10gOiBjdXJyTm9kZT8udGFyZ2V0cyA/PyBbXTtcblxuICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhub2RlVG9EZWxldGUuaWQsIHRhcmdldHMpO1xuXG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFub2Rlc1RvRGVsZXRlLmluY2x1ZGVzKG5vZGUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZFBhcmFsbGVsVGFyZ2V0cyh0YXJnZXROb2RlSWQ6IHN0cmluZywgbm9kZUlkVG9BZGQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzTm9kZVRhcmdldHNJbmNsdWRlSWQobm9kZSwgdGFyZ2V0Tm9kZUlkKSkge1xuICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cy5wdXNoKG5vZGVJZFRvQWRkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgXCJpZFRvUmVwbGFjZVwiIGluIGFsbCBub2RlcycgXCJ0YXJnZXRzXCIgd2l0aCBvbmVzIGluIFwicmVwbGFjZVdpdGhcIiBhcnJheSAqL1xuICAgIHByaXZhdGUgX3JlcGxhY2VUYXJnZXRzKElkVG9SZXBsYWNlOiBzdHJpbmcsIHJlcGxhY2VXaXRoSWQ6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZChuLCBJZFRvUmVwbGFjZSkpIHtcbiAgICAgICAgICAgICAgICBuLnRhcmdldHMgPSBuLnRhcmdldHMuZmlsdGVyKChfaWQpID0+IF9pZCAhPT0gSWRUb1JlcGxhY2UpO1xuICAgICAgICAgICAgICAgIG4udGFyZ2V0cy5wdXNoKC4uLnJlcGxhY2VXaXRoSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTYXZlIGN1cnJlbnQgc3RhdGUgb2YgYXBwcm92YWwgcHJvY2VzcyBkYXRhIHRvIGJlIGFibGUgdG8gdW5kbyBhbiBhY3Rpb24gbWFkZSBpbiBlZGl0IG1vZGUgKi9cbiAgICBwcml2YXRlIF9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzID0gY2xvbmVEZWVwKHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROZXh0SG9yaXpvbnRhbE5vZGUgPSAoXG4gICAgICAgIG5vZGVJbmRleDogbnVtYmVyLFxuICAgICAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgICAgICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCdcbiAgICApOiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4RGlmZiA9IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgbmV4dENvbHVtbiA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbY29sdW1uSW5kZXggKyBpbmRleERpZmZdO1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IG5leHRDb2x1bW4/Lm5vZGVzW25vZGVJbmRleF07XG5cbiAgICAgICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0Tm9kZS5ibGFuayB8fCBuZXh0Tm9kZS5zcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldE5leHRIb3Jpem9udGFsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4ICsgaW5kZXhEaWZmLCBkaXJlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHROb2RlO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5leHRWZXJ0aWNhbE5vZGUgPSAoXG4gICAgICAgIG5vZGVJbmRleDogbnVtYmVyLFxuICAgICAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgICAgICBkaXJlY3Rpb246ICd1cCcgfCAnZG93bidcbiAgICApOiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4RGlmZiA9IGRpcmVjdGlvbiA9PT0gJ2Rvd24nID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBjdXJyQ29sdW1uID0gdGhpcy5fZ3JhcGguY29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gY3VyckNvbHVtbi5ub2Rlc1tub2RlSW5kZXggKyBpbmRleERpZmZdO1xuXG4gICAgICAgIGlmICghbmV4dE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dE5vZGUuYmxhbmsgfHwgbmV4dE5vZGUuc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXROZXh0VmVydGljYWxOb2RlKG5vZGVJbmRleCArIGluZGV4RGlmZiwgY29sdW1uSW5kZXgsIGRpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dE5vZGU7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX2Nhcm91c2VsU3RlcFNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCAvIHRoaXMuX2Nhcm91c2VsU3RlcHNDb3VudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2Nyb2xsRGlmZigpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuX2dyYXBoRWwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggLSB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2Nhcm91c2VsU3RlcHNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY2Fyb3VzZWxTdGVwc0xlZnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCAvIHRoaXMuX2Nhcm91c2VsU3RlcFNpemUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9jYXJvdXNlbFN0ZXBzUmlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChcbiAgICAgICAgICAgICh0aGlzLl9zY3JvbGxEaWZmIC0gTWF0aC5yb3VuZCh0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCkpIC8gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX2RlZmF1bHREaWFsb2dPcHRpb25zKCk6IERlZmF1bHREaWFsb2dPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRlYW1EYXRhU291cmNlOiB0aGlzLnRlYW1EYXRhU291cmNlLFxuICAgICAgICAgICAgdXNlckRhdGFTb3VyY2U6IHRoaXMudXNlckRhdGFTb3VyY2UsXG4gICAgICAgICAgICB1c2VyRGV0YWlsc1RlbXBsYXRlOiB0aGlzLnVzZXJEZXRhaWxzVGVtcGxhdGUsXG4gICAgICAgICAgICBydGw6IHRoaXMuX3J0bFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmluZFNlcmlhbE5vZGUoeUluZGV4PzogbnVtYmVyLCB0YXJnZXRzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHRhcmdldElzUGFyZW50ID1cbiAgICAgICAgICAgIE51bWJlci5pc0ludGVnZXIoeUluZGV4KSAmJlxuICAgICAgICAgICAgdGFyZ2V0cz8uc29tZSgodGFyZ2V0SWQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlSW5kZXggPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3RhcmdldElkXT8ubm9kZUluZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG5vZGVJbmRleCkgJiYgbm9kZUluZGV4ISA8PSB5SW5kZXghIC0gMTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0YXJnZXRJc1BhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldHMgPz8gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IHRhcmdldHM/LlswXSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kU2VyaWFsTm9kZSh5SW5kZXgsIHRhcmdldE5vZGU/LnRhcmdldHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc0FkZGluZ1BhcmFsbGVsTm9kZShcbiAgICAgICAgYWRkZWROb2RlOiBBcHByb3ZhbEdyYXBoTm9kZSxcbiAgICAgICAgc291cmNlTm9kZTogQXBwcm92YWxHcmFwaE5vZGUsXG4gICAgICAgIHRvTmV4dFNlcmlhbCA9IGZhbHNlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gc291cmNlTm9kZS50YXJnZXRzO1xuXG4gICAgICAgIHRoaXMuX2FkZFBhcmFsbGVsVGFyZ2V0cyhzb3VyY2VOb2RlLmlkLCBhZGRlZE5vZGUuaWQpO1xuXG4gICAgICAgIGlmICh0b05leHRTZXJpYWwpIHtcbiAgICAgICAgICAgIGxldCB5SW5kZXggPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3NvdXJjZU5vZGUuaWRdLm5vZGVJbmRleDtcbiAgICAgICAgICAgIGxldCB0YXJnZXRzID0gc291cmNlTm9kZS50YXJnZXRzO1xuXG4gICAgICAgICAgICBpZiAoeUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlTm9kZU1ldGFkYXRhID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtzb3VyY2VOb2RlLmlkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Ob2RlcyA9IHRoaXMuX2dyYXBoLmNvbHVtbnM/Lltzb3VyY2VOb2RlTWV0YWRhdGEuY29sdW1uSW5kZXghXT8ubm9kZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFBhcmFsbGVsTm9kZSA9IGNvbHVtbk5vZGVzLmZpbmQoKG5vZGUsIGluZGV4KSA9PiBpbmRleCA+IDAgJiYgIW5vZGUuc3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5leHRQYXJhbGxlbE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgeUluZGV4ID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0UGFyYWxsZWxOb2RlLmlkXS5jb2x1bW5JbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IG5leHRQYXJhbGxlbE5vZGUudGFyZ2V0cztcblxuICAgICAgICAgICAgICAgICAgICBhZGRlZE5vZGUudGFyZ2V0cyA9IHRoaXMuX2ZpbmRTZXJpYWxOb2RlKHlJbmRleCwgdGFyZ2V0cyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhZGRlZE5vZGUudGFyZ2V0cyA9IHNvdXJjZU5vZGUudGFyZ2V0cztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gdGhpcy5fZmluZFNlcmlhbE5vZGUoeUluZGV4LCB0YXJnZXRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBEYXRhU291cmNlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdWIgPSB0aGlzLl9kYXRhU291cmNlQ2hhbmdlZCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2FkaW5nU3RhdGVzID0gW3RoaXMudGVhbURhdGFTb3VyY2UsIHRoaXMudXNlckRhdGFTb3VyY2UsIHRoaXMud2F0Y2hlckRhdGFTb3VyY2VdXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChkcykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZShkcy5vbkRhdGFSZXF1ZXN0ZWQoKS5waXBlKG1hcFRvKHRydWUpKSwgZHMub25EYXRhUmVjZWl2ZWQoKS5waXBlKG1hcFRvKGZhbHNlKSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChkcy5pc0RhdGFMb2FkaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGxvYWRpbmdTdGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgobG9hZGluZ1N0YXRlcykgPT4gbG9hZGluZ1N0YXRlcy5zb21lKEJvb2xlYW4pKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzb21lTG9hZGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzb21lTG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlcXVlc3RlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWNlaXZlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHN1Yik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlbW92ZVNwYWNlTm9kZXNGcm9tQ29sdW1ucyhjb2x1bW5zOiBBcHByb3ZhbEdyYXBoQ29sdW1uW10pOiBBcHByb3ZhbEdyYXBoQ29sdW1uW10ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnM6IEFwcHJvdmFsR3JhcGhDb2x1bW5bXSA9IFtdO1xuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZE5vZGVzID0gY29sdW1uLm5vZGVzLmZpbHRlcigobm9kZSkgPT4gIW5vZGUuc3BhY2UpO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQ29sdW1uID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbHVtbiwgLy8gUHJlc2VydmUgb3RoZXIgcHJvcGVydGllcyBvZiB0aGUgY29sdW1uXG4gICAgICAgICAgICAgICAgbm9kZXM6IGZpbHRlcmVkTm9kZXMgLy8gVXNlIHRoZSBmaWx0ZXJlZCBsaXN0IG9mIG5vZGVzXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmaWx0ZXJlZENvbHVtbnMucHVzaCh1cGRhdGVkQ29sdW1uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkQ29sdW1ucztcbiAgICB9XG59XG5cbmludGVyZmFjZSBEZWZhdWx0RGlhbG9nT3B0aW9ucyB7XG4gICAgdGVhbURhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlPEFwcHJvdmFsVGVhbT47XG4gICAgdXNlckRhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlPEFwcHJvdmFsVXNlcj47XG4gICAgdXNlckRldGFpbHNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBydGw6IGJvb2xlYW47XG59XG4iLCI8bmctY29udGFpbmVyIGZkQ29tcGFjdD5cbiAgICA8ZmRwLWFwcHJvdmFsLWZsb3ctbWVzc2FnZXNcbiAgICAgICAgWyhtZXNzYWdlcyldPVwiX21lc3NhZ2VzXCJcbiAgICAgICAgW3VuZG9MYXN0QWN0aW9uQXZhaWxhYmxlXT1cIiEhX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzXCJcbiAgICAgICAgKHVuZG9MYXN0QWN0aW9uKT1cIl91bmRvTGFzdEFjdGlvbigpXCJcbiAgICA+PC9mZHAtYXBwcm92YWwtZmxvdy1tZXNzYWdlcz5cbiAgICA8ZmQtZ3JpZC1saXN0XG4gICAgICAgICNncmlkTGlzdFxuICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X190b29sYmFyXCJcbiAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiX2lzRWRpdE1vZGUgPyAnbXVsdGlTZWxlY3QnIDogJ25vbmUnXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJfb25Ob2RlU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICAgICAgPGZkLWdyaWQtbGlzdC10aXRsZS1iYXIgW3RpdGxlXT1cInRpdGxlIHx8ICgncGxhdGZvcm1BcHByb3ZhbEZsb3cuZGVmYXVsdFRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiPlxuICAgICAgICAgICAgPGZkLWdyaWQtbGlzdC10aXRsZS1iYXItc3BhY2VyPjwvZmQtZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXI+XG4gICAgICAgICAgICBAaWYgKGlzRWRpdEF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIDxmZHAtYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgW2dyYXBoXT1cIl9ncmFwaFwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZE5vZGVzXT1cIl9zZWxlY3RlZE5vZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyYXBoTWV0YWRhdGFdPVwiX2dyYXBoTWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbaXNFZGl0TW9kZV09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgIChlbnRlckVkaXRNb2RlKT1cIl9lbnRlckVkaXRNb2RlKClcIlxuICAgICAgICAgICAgICAgICAgICAoYWRkTm9kZSk9XCJfYWRkTm9kZSgkZXZlbnQubm9kZSwgJGV2ZW50LnRhcmdldClcIlxuICAgICAgICAgICAgICAgICAgICAoZWRpdFNlbGVjdGVkTm9kZSk9XCJfZWRpdE5vZGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVTZWxlY3RlZE5vZGVzKT1cIl9kZWxldGVTZWxlY3RlZE5vZGVzKClcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1hcHByb3ZhbC1mbG93LXRvb2xiYXItYWN0aW9ucz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9mZC1ncmlkLWxpc3QtdGl0bGUtYmFyPlxuICAgICAgICBAaWYgKF9hcHByb3ZhbFByb2Nlc3Mud2F0Y2hlcnM/Lmxlbmd0aCB8fCBfaXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X193YXRjaGVyc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwid2F0Y2hlcnNMYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHdhdGNoZXJzTGFiZWwgfHwgKCdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5kZWZhdWx0V2F0Y2hlcnNMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgQGlmICghX2lzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAod2F0Y2hlciBvZiBfYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzOyB0cmFjayBfdHJhY2tCeUZuKCRpbmRleCwgd2F0Y2hlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCJ3YXRjaGVyLmltZ1VybCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIndhdGNoZXIubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2lyY2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdmF0YXJDbGlja2VkKT1cIl9vbldhdGNoZXJDbGljayh3YXRjaGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLW11bHRpLWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duVmFsdWVzXT1cIl91c2Vyc0ZvcldhdGNoZXJzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy53YXRjaGVyc0lucHV0UGxhY2Vob2xkZXInIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5Rm5dPVwiX2Rpc3BsYXlVc2VyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZuXT1cIl91c2VyVmFsdWVGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dBbGxCdXR0b25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfc2VsZWN0ZWRXYXRjaGVySWRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfd2F0Y2hlcnNTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtbXVsdGktaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIV9ncmFwaC5lcnJvcnMpIHtcbiAgICAgICAgICAgIEBpZiAoX2dyYXBoLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2NvbnRhaW5lci0tZXh0cmEtcGFkZGluZy1zdGFydF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXItLWV4dHJhLXBhZGRpbmctZW5kXT1cInRydWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChfc2Nyb2xsRGlmZiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LWNhcm91c2VsLWNvbnRyb2xzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHMtLWVkaXQtbW9kZV09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfY2Fyb3VzZWxTdGVwc0xlZnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHNfX2J1dHRvbi0tcHJldi1zbGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy5wcmV2QnV0dG9uQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0U2xpZGUoLTEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gW2dseXBoXT1cIiduYXZpZ2F0aW9uLScgKyAoX3J0bCA/ICdyaWdodCcgOiAnbGVmdCcpICsgJy1hcnJvdydcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBfY2Fyb3VzZWxTdGVwc0xlZnQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoX2Nhcm91c2VsU3RlcHNSaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1jYXJvdXNlbC1jb250cm9sc19fYnV0dG9uLS1uZXh0LXNsaWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5leHRCdXR0b25BcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRTbGlkZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgX2Nhcm91c2VsU3RlcHNSaWdodCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gW2dseXBoXT1cIiduYXZpZ2F0aW9uLScgKyAoX3J0bCA/ICdsZWZ0JyA6ICdyaWdodCcpICsgJy1hcnJvdydcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lci0tbXVsdGlwbGUtcm9vdC1ub2Rlc109XCJfbXVsdGlwbGVSb290Tm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb250YWluZXItLW11bHRpcGxlLWZpbmFsLW5vZGVzXT1cIl9tdWx0aXBsZUZpbmFsTm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXNjcm9sbGJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNncmFwaENvbnRhaW5lckVsXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2dyYXBoRWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLS1lZGl0LW1vZGVdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBfZ3JhcGguY29sdW1uczsgdHJhY2sgY29sdW1uOyBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgb2YgY29sdW1uLm5vZGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIF90cmFja0J5Rm4obm9kZUluZGV4LCBub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLWFwcHJvdmFsLWZsb3ctbm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcHByb3ZhbEZsb3dOb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiX2lzQ2RrRHJhZ0Rpc2FibGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttZXRhXT1cIl9ncmFwaE1ldGFkYXRhW25vZGUuaWRdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRWRpdF09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc05leHROb2RlQmxhbmtdPVwiX2lzTmV4dE5vZGVCbGFuayhub2RlLCBjb2x1bW5JbmRleCwgbm9kZUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja0R1ZURhdGVdPVwiY2hlY2tEdWVEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2R1ZURhdGVUaHJlc2hvbGRdPVwiZHVlRGF0ZVRocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZW5kZXJBcnJvd109XCJjb2x1bW5JbmRleCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsTm9kZXNJbkNvbHVtbkFwcHJvdmVkXT1cIiEhY29sdW1uLmFsbE5vZGVzQXBwcm92ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwcm92YWxTdGF0dXNUZW1wbGF0ZV09XCJhcHByb3ZhbFN0YXR1c1RlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c0NvbG9yTWFwcGluZ109XCJzdGF0dXNDb2xvck1hcHBpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25BZGQpPVwiX2FkZE5vZGUobm9kZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkVkaXQpPVwiX2VkaXROb2RlKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uRGVsZXRlKT1cIl9vbk5vZGVEZWxldGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25Ob2RlS2V5RG93bigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIl9kcmFnRHJvcEluUHJvZ3Jlc3MgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNka0RyYWdSZWxlYXNlZCk9XCJfb25Ob2RlRHJvcChub2RlLCAkZXZlbnQuc291cmNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcmFnTW92ZWQpPVwiX29uTm9kZURyYWdNb3ZlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRyaWNrIHdpdGggdXNpbmcgcHJvamVjdGlvbiB0byBtYWtlIGdyaWQgbGlzdCBpdGVtcyB2aXNpYmxlIGZvciB0aGUgZ3JpZCBsaXN0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtZ3JpZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIiEhbm9kZS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsbGVkQnldPVwiYXBwcm92YWxGbG93Tm9kZS5hcHByb3ZhbEZsb3dOb2RlSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sYmFyQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1ub2RlLWlubmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvd19fZ3JhcGgtbm9kZS1pbm5lci0tZWRpdF09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJlc3MpPVwiX29uTm9kZUNsaWNrKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWdyaWQtbGlzdC1pdGVtLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfaXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFwcHJvdmFsRmxvd05vZGUuX292ZXJmbG93TWVudUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtZ3JpZC1saXN0LWl0ZW0tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1ncmlkLWxpc3QtaXRlbS1pbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHByb3ZlcnMubGVuZ3RoID09PSAxID8gbm9kZS5hcHByb3ZlcnNbMF0uaW1nVXJsIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm5vZGUuYXBwcm92ZXJzLmxlbmd0aCA+IDEgPyBub2RlLmRlc2NyaXB0aW9uIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2lyY2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZkLWdyaWQtbGlzdC1pdGVtLWJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFwcHJvdmFsRmxvd05vZGUuX25vZGVDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtZ3JpZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZHAtYXBwcm92YWwtZmxvdy1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZmlndXJlIGZkLWlsbHVzdHJhdGVkLW1lc3NhZ2UgdHlwZT1cInNwb3RcIiBbc3ZnQ29uZmlnXT1cIl9lbXB0eUFwcHJvdmFsRmxvd1Nwb3RDb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZpZ2NhcHRpb24gZmQtaWxsdXN0cmF0ZWQtbWVzc2FnZS1maWdjYXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGZkLWlsbHVzdHJhdGVkLW1lc3NhZ2UtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93LmVtcHR5VGl0bGUnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93LmVtcHR5SGludCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2ZpZ2NhcHRpb24+XG4gICAgICAgICAgICAgICAgPC9maWd1cmU+XG4gICAgICAgICAgICAgICAgPCEtLSBUT0RPICM1MTc4OiBSZXBsYWNlIHdpdGggaWxsdXN0cmF0ZWQgaW1hZ2UgY29tcG9uZW50IGFmdGVyIGl0IGdldHMgZml4ZWQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEyOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMjggMTI4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2FwSWxsdXMtU3BvdC1Ob0RhdGFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNDEuNjE3OSwzMi43MTc0SDg0LjYyNzNhMSwxLDAsMCwxLC43MjMuMzA5Mmw3LjI0NDUsNy41ODI0LDcuNDgxNyw3Ljg0OTFhMSwxLDAsMCwxLC4yNzYxLjY5bC0uMDA0Niw1NS42MDY5YTQuMTAzOCw0LjEwMzgsMCwwLDEtLjg3ODcsMi4xMjEyQTQuMDU2NCw0LjA1NjQsMCwwLDEsOTguMSwxMDcuOTYzMWwtNTYuMzg1OC4wMzEzYTIuNjE2NywyLjYxNjcsMCwwLDEtMy4wODEyLTMuMjMwOWwtLjAxNTItNjkuMDU5NFpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfUGF0dGVyblNoYWRvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19QYXR0ZXJuU2hhZG93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTM1Ljc5MjgsMjcuNDk4N0g3OC44MDIyYTEsMSwwLDAsMSwuNzIzLjMwOTJMODYuNzcsMzUuMzlsNy40ODE2LDcuODQ5MmExLDEsMCwwLDEsLjI3NjIuNjlsLS4wMDQ2LDU1LjYwNjlhMywzLDAsMCwxLTMsM0gzNS44MDhhMi45OTQ2LDIuOTk0NiwwLDAsMS0zLTIuOTkxM2MtLjAxLTEyLjA1NjQtLjA0MjMtNTcuMDExNi0uMDE1Mi02OS4wNTk1QTIuOTk0MywyLjk5NDMsMCwwLDEsMzUuNzkyOCwyNy40OTg3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19PYmplY3RGaWxsQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfT2JqZWN0RmlsbENvbG9yKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkzLjI5NzgsNDQuNTMzNUg3OC44MjA4YS45OTI1Ljk5MjUsMCwwLDEtLjk3NC0xLjAxVjI4LjUxMDhhLjk3Ljk3LDAsMCwxLDEuNjYyOC0uNzE0M0w5My45ODY1LDQyLjgwOTJBMS4wMTUxLDEuMDE1MSwwLDAsMSw5My4yOTc4LDQ0LjUzMzVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0JyYW5kQ29sb3JTZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfQnJhbmRDb2xvclNlY29uZGFyeSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMDQuNjA4LDM4Ljk0ODVsNS45MTU3LTEuNzcyMWMxLjMyLS4zOTU0Ljc1ODQtMi41MjU4LS41Njg5LTIuMTI4MkwxMDQuMDM5MiwzNi44MmMtMS4zMi4zOTUzLS43NTg0LDIuNTI1OC41Njg4LDIuMTI4MlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6IHZhcigtLXNhcElsbHVzX0xheWVyaW5nMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04NS4yOTczLDIxLjI0NjVsLjk3MTgtNS45MzMxYy4yMTU0LTEuMzE1MS0xLjc3Ny0xLjg4MDctMS45OTQxLS41NTU0bC0uOTcxOCw1LjkzMzJjLS4yMTU1LDEuMzE1MSwxLjc3NywxLjg4MDcsMS45OTQxLjU1NTNaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0xheWVyaW5nMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19MYXllcmluZzEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOTUuMzAzNCwyOS4wMDE1YTEuMDEsMS4wMSwwLDAsMS0uNjgzNy0uMjY3LDEuMDc4MywxLjA3ODMsMCwwLDEtLjA4NjQtMS40OTMybDUuOTUxMS02Ljg4NTdhMS4wMSwxLjAxLDAsMCwxLDEuNDUzOC0uMDg4NCwxLjA3ODUsMS4wNzg1LDAsMCwxLC4wODY1LDEuNDkzMmwtNS45NTExLDYuODg1OEExLjAxNjQsMS4wMTY0LDAsMCwxLDk1LjMwMzQsMjkuMDAxNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6IHZhcigtLXNhcElsbHVzX0xheWVyaW5nMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05NC44NzQ3LDQyLjg4NjEsODAuMDg1NSwyNy40NjIzYTEuNTE1MiwxLjUxNTIsMCwwLDAtMS4wODg1LS40NjM2SDM1LjgwN2EzLjUwOSwzLjUwOSwwLDAsMC0zLjUxNDYsMy40ODM2Yy0uMDI5NCwxMy4yODU3LjAxMzcsNjYuNzU1OS4wMTU3LDY5LjAyNTdhMy41MDc2LDMuNTA3NiwwLDAsMCwzLjUxNDYsMy40ODk0SDkxLjc3MDlhMy41MTA2LDMuNTEwNiwwLDAsMCwzLjUxNDYtMy40OTgybC4wMDUtNTUuNTc4NUExLjQ5LDEuNDksMCwwLDAsOTQuODc0Nyw0Mi44ODYxWm0tMTYuMjEtMTQuODM1NWExLjE1LDEuMTUsMCwwLDEsLjI1NjEtLjAzMDksMS4wNCwxLjA0LDAsMCwxLC41MS4yMTM0bDE0LjI3NiwxNC44ODM3LjAxOTQuMDJhLjU4OTEuNTg5MSwwLDAsMSwuMDk2OC42MjUxYy0uMTAxNi4xNzY0LS40MDg2LjI0LS42OS4yNEw3OC44MzU1LDQ0YS42MDMxLjYwMzEsMCwwLDEtLjU0NzItLjYxMzFjLS4wMDg3LTQuOTU4OC0uMDE3LTkuOTAxNS0uMDAzNS0xNC44Njg5QS41MTg5LjUxODksMCwwLDEsNzguNjY0NiwyOC4wNTA2Wm0xMy4xMDYyLDczLjk1SDM1LjgxODhhMi41MDQ1LDIuNTA0NSwwLDAsMS0yLjUxMDctMi40OTFjLS4wMDItMi4yNjk0LS4wNDUxLTU1Ljc0LS4wMTU3LTY5LjAyNDhhMi41MDU0LDIuNTA1NCwwLDAsMSwyLjUxMDctMi40ODYxSDc3LjM2ODRhMS40OSwxLjQ5LDAsMCwwLS4wOTc2LjUxMDZWNDMuNDkzNEExLjUxNDUsMS41MTQ1LDAsMCwwLDc4Ljc4OTQsNDVINzguOTJMOTQuMjg2LDQ3Ljk3NDlsLS4wMDQ2LDUxLjUyNjlBMi41MDc0LDIuNTA3NCwwLDAsMSw5MS43NzA4LDEwMi4wMDA2WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19TdHJva2VEZXRhaWxDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19TdHJva2VEZXRhaWxDb2xvcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L2ZkLWdyaWQtbGlzdD5cbiAgICBAaWYgKF9pc0VkaXRNb2RlKSB7XG4gICAgICAgIDxkaXYgZmQtYmFyPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cuZWRpdE1vZGVTYXZlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVNhdmVCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9zYXZlRWRpdE1vZGVDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy5lZGl0TW9kZUV4aXRCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUV4aXRCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9leGl0RWRpdE1vZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvbmctY29udGFpbmVyPlxuIl19
885
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92YWwtZmxvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2FwcHJvdmFsLWZsb3cvYXBwcm92YWwtZmxvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2FwcHJvdmFsLWZsb3cvYXBwcm92YWwtZmxvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRHLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBMEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUU1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFB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QUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBSUcsZUFBZTtzQkFBeEIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUd3QixpQkFBaUI7c0JBQS9DLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUdQLFFBQVE7c0JBQTdCLFNBQVM7dUJBQUMsU0FBUztnQkFHRyxTQUFTO3NCQUEvQixTQUFTO3VCQUFDLFVBQVU7Z0JBR29CLGVBQWU7c0JBQXZELFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgTEVGVF9BUlJPVywgUklHSFRfQVJST1csIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgbWFwVG8sIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEtleVV0aWwsIFJ0bFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQgeyBHcmlkTGlzdENvbXBvbmVudCwgR3JpZExpc3RTZWxlY3Rpb25FdmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9ncmlkLWxpc3QnO1xuXG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2F2YXRhcic7XG5pbXBvcnQgeyBCYXJDb21wb25lbnQsIEJhckVsZW1lbnREaXJlY3RpdmUsIEJhclJpZ2h0RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQge1xuICAgIEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmUsXG4gICAgR3JpZExpc3RJdGVtQ29tcG9uZW50LFxuICAgIEdyaWRMaXN0SXRlbUltYWdlRGlyZWN0aXZlLFxuICAgIEdyaWRMaXN0SXRlbVRvb2xiYXJDb21wb25lbnQsXG4gICAgR3JpZExpc3RUaXRsZUJhckNvbXBvbmVudCxcbiAgICBHcmlkTGlzdFRpdGxlQmFyU3BhY2VyQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9ncmlkLWxpc3QnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pY29uJztcbmltcG9ydCB7XG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlQ29tcG9uZW50LFxuICAgIElsbHVzdHJhdGVkTWVzc2FnZUZpZ2NhcHRpb25Db21wb25lbnQsXG4gICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGV4dERpcmVjdGl2ZSxcbiAgICBJbGx1c3RyYXRlZE1lc3NhZ2VUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWxsdXN0cmF0ZWQtbWVzc2FnZSc7XG5pbXBvcnQgeyBNdWx0aUlucHV0Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL211bHRpLWlucHV0JztcbmltcG9ydCB7IE9iamVjdFN0YXR1cyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9vYmplY3Qtc3RhdHVzJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlLFxuICAgIEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlLFxuICAgIERBVEFfUFJPVklERVJTLFxuICAgIERhdGFQcm92aWRlclxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICAgIEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUyxcbiAgICBBZGROb2RlRGlhbG9nRm9ybURhdGEsXG4gICAgQWRkTm9kZURpYWxvZ1JlZkRhdGEsXG4gICAgQXBwcm92YWxGbG93QWRkTm9kZUNvbXBvbmVudCxcbiAgICBBcHByb3ZhbEZsb3dOb2RlVGFyZ2V0XG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1hZGQtbm9kZS9hcHByb3ZhbC1mbG93LWFkZC1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd0FwcHJvdmVyRGV0YWlsc0NvbXBvbmVudCxcbiAgICBBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNEaWFsb2dSZWZEYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1hcHByb3Zlci1kZXRhaWxzL2FwcHJvdmFsLWZsb3ctYXBwcm92ZXItZGV0YWlscy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dHcmFwaCxcbiAgICBBcHByb3ZhbEdyYXBoQ29sdW1uLFxuICAgIEFwcHJvdmFsR3JhcGhNZXRhZGF0YSxcbiAgICBnZW5lcmF0ZUFwcHJvdmFsRmxvd0dyYXBoLFxuICAgIGdlbmVyYXRlQXBwcm92YWxGbG93R3JhcGhNZXRhZGF0YVxufSBmcm9tICcuL2FwcHJvdmFsLWZsb3ctZ3JhcGgnO1xuaW1wb3J0IHtcbiAgICBBcHByb3ZhbEZsb3dNZXNzYWdlLFxuICAgIEFwcHJvdmFsRmxvd01lc3NhZ2VUeXBlLFxuICAgIEFwcHJvdmFsRmxvd01lc3NhZ2VzQ29tcG9uZW50XG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1tZXNzYWdlcy9hcHByb3ZhbC1mbG93LW1lc3NhZ2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9hcHByb3ZhbC1mbG93LW5vZGUvYXBwcm92YWwtZmxvdy1ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIEFwcHJvdmFsRmxvd1NlbGVjdFR5cGVDb21wb25lbnQsXG4gICAgU2VsZWN0VHlwZURpYWxvZ0Zvcm1EYXRhXG59IGZyb20gJy4vYXBwcm92YWwtZmxvdy1zZWxlY3QtdHlwZS9hcHByb3ZhbC1mbG93LXNlbGVjdC10eXBlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcHByb3ZhbEZsb3dUb29sYmFyQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnMvYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgZGlzcGxheVVzZXJGbixcbiAgICBnZXRCbGFua0FwcHJvdmFsR3JhcGhOb2RlLFxuICAgIGdldEdyYXBoTm9kZXMsXG4gICAgaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZCxcbiAgICB0cmFja0J5Rm4sXG4gICAgdXNlclZhbHVlRm5cbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7XG4gICAgQXBwcm92YWxHcmFwaE5vZGUsXG4gICAgQXBwcm92YWxHcmFwaE5vZGVNZXRhZGF0YSxcbiAgICBBcHByb3ZhbE5vZGUsXG4gICAgQXBwcm92YWxQcm9jZXNzLFxuICAgIEFwcHJvdmFsU3RhdHVzLFxuICAgIEFwcHJvdmFsVGVhbSxcbiAgICBBcHByb3ZhbFVzZXIsXG4gICAgU2VuZFJlbWluZGVyc0RhdGFcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFwcHJvdmFsRmxvd0FkZE5vZGVWaWV3U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXBwcm92YWwtZmxvdy1hZGQtbm9kZS12aWV3LnNlcnZpY2UnO1xuXG5sZXQgZGVmYXVsdElkID0gMDtcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50IGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjQwLjBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtYXBwcm92YWwtZmxvdycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FwcHJvdmFsLWZsb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9hcHByb3ZhbC1mbG93LmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW0FwcHJvdmFsRmxvd0FkZE5vZGVWaWV3U2VydmljZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbnRlbnREZW5zaXR5RGlyZWN0aXZlLFxuICAgICAgICBBcHByb3ZhbEZsb3dNZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgR3JpZExpc3RDb21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0VGl0bGVCYXJDb21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0VGl0bGVCYXJTcGFjZXJDb21wb25lbnQsXG4gICAgICAgIEFwcHJvdmFsRmxvd1Rvb2xiYXJBY3Rpb25zQ29tcG9uZW50LFxuICAgICAgICBBdmF0YXJDb21wb25lbnQsXG4gICAgICAgIE11bHRpSW5wdXRDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50LFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBHcmlkTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgICAgIEdyaWRMaXN0SXRlbVRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIEdyaWRMaXN0SXRlbUltYWdlRGlyZWN0aXZlLFxuICAgICAgICBHcmlkTGlzdEl0ZW1Cb2R5RGlyZWN0aXZlLFxuICAgICAgICBCYXJDb21wb25lbnQsXG4gICAgICAgIEJhclJpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIElsbHVzdHJhdGVkTWVzc2FnZUNvbXBvbmVudCxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlRmlnY2FwdGlvbkNvbXBvbmVudCxcbiAgICAgICAgSWxsdXN0cmF0ZWRNZXNzYWdlVGl0bGVEaXJlY3RpdmUsXG4gICAgICAgIElsbHVzdHJhdGVkTWVzc2FnZVRleHREaXJlY3RpdmUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQXBwcm92YWxGbG93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqIFRpdGxlIHdoaWNoIGlzIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyIG9mIHRoZSBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFZhbHVlIG9mIHRoZSBhcHByb3ZhbCBmbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB2YWx1ZTogQXBwcm92YWxQcm9jZXNzO1xuXG4gICAgLyoqIERhdGEgc291cmNlIGZvciB0aGUgdXNlcnMgb2YgQXBwcm92YWwgRmxvdyBjb21wb25lbnQuICovXG4gICAgQElucHV0KCkgdXNlckRhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlPEFwcHJvdmFsVXNlcj47XG5cbiAgICAvKiogRGF0YSBzb3VyY2UgZm9yIHRoZSB3YXRjaGVycyBvZiBBcHByb3ZhbCBGbG93IGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKSB3YXRjaGVyRGF0YVNvdXJjZTogQXBwcm92YWxGbG93VXNlckRhdGFTb3VyY2U8QXBwcm92YWxVc2VyPjtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHRlYW1zIG9mIEFwcHJvdmFsIEZsb3cgY29tcG9uZW50LiAqL1xuICAgIEBJbnB1dCgpIHRlYW1EYXRhU291cmNlOiBBcHByb3ZhbEZsb3dUZWFtRGF0YVNvdXJjZTxBcHByb3ZhbFRlYW0+O1xuXG4gICAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSB1c2VyIGRldGFpbHMgdGVtcGxhdGUgKi9cbiAgICBASW5wdXQoKSB1c2VyRGV0YWlsc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSBhcHAgY3VzdG9tIHN0YXR1c2VzICovXG4gICAgQElucHV0KCkgYXBwcm92YWxTdGF0dXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBDdXN0b20gc3RhdHVzIHRvIGNvbG9yIG1hcHBpbmcgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0dXNDb2xvck1hcHBpbmc6IFJlY29yZDxBcHByb3ZhbFN0YXR1cywgT2JqZWN0U3RhdHVzPjtcblxuICAgIC8qKiBXaGV0aGVyIHRvIGRpc3BsYXkgZHVlIGRhdGUgd2FybmluZyBpbiBzdGF0dXMgKi9cbiAgICBASW5wdXQoKSBjaGVja0R1ZURhdGUgPSBmYWxzZTtcblxuICAgIC8qKiBOdW1iZXIgb2YgZGF5cyBiZWZvcmUgZHVlIGRhdGUgd2hlbiBzdGF0dXMgY2hhbmdlcyB0byBgd2FybmluZ2Agd2l0aCB0ZXh0ICdEdWUgaW4gWCBkYXlzJy5cbiAgICAgKiAgTm90IHVzZWQgaWYgJ2NoZWNrRHVlRGF0ZScgZXF1YWxzIGZhbHNlICovXG4gICAgQElucHV0KCkgZHVlRGF0ZVRocmVzaG9sZCA9IDc7XG5cbiAgICAvKiogQSBsaXN0IG9mIGFwcHJvdmFsIHN0YXR1c2VzIHRoYXQgYWxsb3cgc2VuZGluZyByZW1pbmRlcnMgdG8gdGhlaXIgYXBwcm92ZXJzICovXG4gICAgQElucHV0KCkgYWxsb3dTZW5kUmVtaW5kZXJzRm9yU3RhdHVzZXM6IEFwcHJvdmFsU3RhdHVzW10gPSBbJ2luIHByb2dyZXNzJywgJ25vdCBzdGFydGVkJ107XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXBwcm92YWwgZmxvdyBpcyBlZGl0YWJsZSAqL1xuICAgIEBJbnB1dCgpIGlzRWRpdEF2YWlsYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqIFRleHQgbGFiZWwgZm9yIHdhdGNoZXJzIGxpc3QgKi9cbiAgICBASW5wdXQoKSB3YXRjaGVyc0xhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogRW5hYmxlcyBvciBkaXNhYmxlcyBhYmlsaXR5IHRvIGFkZCBwYXJhbGxlbCBub2RlcyAqL1xuICAgIEBJbnB1dCgpIGFsbG93QWRkUGFyYWxsZWxOb2RlcyA9IHRydWU7XG5cbiAgICAvKiogRGlzYWJsZXMgc2F2ZSBidXR0b24sIHNhdmUgYnV0dG9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVTYXZlQnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKiogRGlzYWJsZXMgZXhpdCBidXR0b24sIGV4aXQgYnV0dG9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpIGRpc2FibGVFeGl0QnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIHVzZXJzIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC5cbiAgICAgKiBJbnRlcm5hbGx5IHdlIHNob3VsZCBiZSBhYmxlIHRvIGRvIGxvb2t1cCB0byBzb21lIHJlZ2lzdHJ5XG4gICAgICogYW5kIHJldHJpZXZlIHRoZSBiZXN0IG1hdGNoaW5nIERhdGFQcm92aWRlciB0aGF0IGlzIHNldCBvbiBhcHBsaWNhdGlvbiBsZXZlbFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHVzZXJzRGF0YVByb3ZpZGVyRW50aXR5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZW50aXR5IGZvciB3aGljaCB0ZWFtcyBEYXRhUHJvdmlkZXIgd2lsbCBiZSBsb2FkZWQuXG4gICAgICogSW50ZXJuYWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyBsb29rdXAgdG8gc29tZSByZWdpc3RyeVxuICAgICAqIGFuZCByZXRyaWV2ZSB0aGUgYmVzdCBtYXRjaGluZyBEYXRhUHJvdmlkZXIgdGhhdCBpcyBzZXQgb24gYXBwbGljYXRpb24gbGV2ZWxcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0ZWFtc0RhdGFQcm92aWRlckVudGl0eUtleT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGVudGl0eSBmb3Igd2hpY2ggYXBwcm92YWwgZmxvdyBEYXRhUHJvdmlkZXIgd2lsbCBiZSBsb2FkZWQuXG4gICAgICogSW50ZXJuYWxseSB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyBsb29rdXAgdG8gc29tZSByZWdpc3RyeVxuICAgICAqIGFuZCByZXRyaWV2ZSB0aGUgYmVzdCBtYXRjaGluZyBEYXRhUHJvdmlkZXIgdGhhdCBpcyBzZXQgb24gYXBwbGljYXRpb24gbGV2ZWxcbiAgICAgKi9cbiAgICBASW5wdXQoKSB3YXRjaGVyc0RhdGFQcm92aWRlckVudGl0eUtleT86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCByZW1vdmUgdGhlIHNwYWNlIG5vZGUgZnJvbSB0aGUgZ3JhcGhcbiAgICAgKi9cbiAgICBASW5wdXQoKSByZW1vdmVTcGFjZU5vZGU/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCBvbiBhcHByb3ZhbCBmbG93IG5vZGUgY2xpY2suICovXG4gICAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8QXBwcm92YWxOb2RlPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgb24gYXBwcm92YWwgZmxvdyBub2RlIGFkZCAqL1xuICAgIEBPdXRwdXQoKSBhZnRlck5vZGVBZGQgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcHJvdmFsTm9kZT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIG9uIGFwcHJvdmFsIGZsb3cgbm9kZSBlZGl0ICovXG4gICAgQE91dHB1dCgpIGFmdGVyTm9kZUVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcHJvdmFsTm9kZT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW52ZXIgc2F2ZSBpcyBjbGlja2VkIGluIGVkaXQgbW9kZSAgKi9cbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcHJvdmFsUHJvY2Vzcz4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW5ldmVyIHJlbWluZGVycyBzaG91bGQgYmUgc2VudCAqL1xuICAgIEBPdXRwdXQoKSBzZW5kUmVtaW5kZXJzID0gbmV3IEV2ZW50RW1pdHRlcjxTZW5kUmVtaW5kZXJzRGF0YT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIHN0YXJ0ZWQuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgQE91dHB1dCgpIG9uRGF0YVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIGZpbmlzaGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZ3JhcGhDb250YWluZXJFbCcpIF9ncmFwaENvbnRhaW5lckVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZ3JhcGhFbCcpIF9ncmFwaEVsOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZ3JpZExpc3QnKSBfZ3JpZExpc3Q6IEdyaWRMaXN0Q29tcG9uZW50PEFwcHJvdmFsR3JhcGhOb2RlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50KSBfbm9kZUNvbXBvbmVudHM6IFF1ZXJ5TGlzdDxBcHByb3ZhbEZsb3dOb2RlQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2FwcHJvdmFsUHJvY2VzczogQXBwcm92YWxQcm9jZXNzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaW5pdGlhbEFwcHJvdmFsUHJvY2Vzcz86IEFwcHJvdmFsUHJvY2VzcztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzPzogQXBwcm92YWxQcm9jZXNzO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ3JhcGg6IEFwcHJvdmFsRmxvd0dyYXBoO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNDYXJvdXNlbCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZ3JhcGhNZXRhZGF0YTogQXBwcm92YWxHcmFwaE1ldGFkYXRhID0ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc0VkaXRNb2RlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF91c2Vyc0ZvcldhdGNoZXJzTGlzdDogQXBwcm92YWxVc2VyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRXYXRjaGVyczogQXBwcm92YWxVc2VyW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGVkV2F0Y2hlcklkczogQXBwcm92YWxVc2VyWydpZCddW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21lc3NhZ2VzOiBBcHByb3ZhbEZsb3dNZXNzYWdlW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rpc3BsYXlVc2VyRm4gPSBkaXNwbGF5VXNlckZuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdXNlclZhbHVlRm4gPSB1c2VyVmFsdWVGbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RyYWNrQnlGbiA9IHRyYWNrQnlGbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2VtcHR5QXBwcm92YWxGbG93U3BvdENvbmZpZyA9IHtcbiAgICAgICAgc3BvdDogeyB1cmw6ICcnLCBpZDogJ3NhcElsbHVzLVNwb3QtTm9EYXRhJyB9XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX211bHRpcGxlUm9vdE5vZGVzID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tdWx0aXBsZUZpbmFsTm9kZXMgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2RyYWdEcm9wSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBhcHByb3ZhbEZsb3dVbmlxdWVJZCA9IGBmZHAtYXBwcm92YWwtZmxvdy0keysrZGVmYXVsdElkfWA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VkaXRNb2RlSW5pdFN1YjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kYXRhU291cmNlQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERBVEFfUFJPVklERVJTKSBwcml2YXRlIHByb3ZpZGVyczogTWFwPHN0cmluZywgRGF0YVByb3ZpZGVyPGFueT4+LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBcHByb3ZhbEZsb3dDb21wb25lbnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgcmVsZWFzZS4nKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBzbmFwc2hvdCBvZiB0aGUgY3VycmVudCBhbmQgaW5pdGlhbCBzdGF0ZXMgb2YgYXBwcm92YWwgcHJvY2VzcyAqL1xuICAgIGdldCBhcHByb3ZhbFByb2Nlc3MoKTogQXBwcm92YWxQcm9jZXNzIHtcbiAgICAgICAgcmV0dXJuIGNsb25lRGVlcCh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9ydGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2VsZWN0ZWROb2RlcygpOiBBcHByb3ZhbEdyYXBoTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIGdldEdyYXBoTm9kZXModGhpcy5fZ3JhcGgpLmZpbHRlcigobm9kZSkgPT4gbm9kZS5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZXJEYXRhU291cmNlKSB7XG4gICAgICAgICAgICBjb25zdCB1c2Vyc0RQID0gdGhpcy51c2Vyc0RhdGFQcm92aWRlckVudGl0eUtleSAmJiB0aGlzLnByb3ZpZGVycz8uZ2V0KHRoaXMudXNlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkpO1xuICAgICAgICAgICAgaWYgKHVzZXJzRFApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJEYXRhU291cmNlID0gbmV3IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlKHVzZXJzRFApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSB1c2VycyBkYXRhIHNvdXJjZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hlcnNEUCA9XG4gICAgICAgICAgICAgICAgdGhpcy53YXRjaGVyc0RhdGFQcm92aWRlckVudGl0eUtleSAmJiB0aGlzLnByb3ZpZGVycz8uZ2V0KHRoaXMud2F0Y2hlcnNEYXRhUHJvdmlkZXJFbnRpdHlLZXkpO1xuICAgICAgICAgICAgaWYgKHdhdGNoZXJzRFApIHtcbiAgICAgICAgICAgICAgICB0aGlzLndhdGNoZXJEYXRhU291cmNlID0gbmV3IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlKHdhdGNoZXJzRFApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgcmVzb2x2ZSB3YXRjaGVycyBkYXRhIHNvdXJjZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy50ZWFtRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgY29uc3QgdGVhbXNEUCA9IHRoaXMudGVhbXNEYXRhUHJvdmlkZXJFbnRpdHlLZXkgJiYgdGhpcy5wcm92aWRlcnM/LmdldCh0aGlzLnRlYW1zRGF0YVByb3ZpZGVyRW50aXR5S2V5KTtcbiAgICAgICAgICAgIGlmICh0ZWFtc0RQKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50ZWFtRGF0YVNvdXJjZSA9IG5ldyBBcHByb3ZhbEZsb3dUZWFtRGF0YVNvdXJjZSh0ZWFtc0RQKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHJlc29sdmUgdGVhbXMgZGF0YSBzb3VyY2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uUmVzaXplKCk7XG4gICAgICAgIHRoaXMuX3NldHVwRGF0YVNvdXJjZVN1YnNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvY2VzcyA9IHRoaXMudmFsdWUgPz8geyB3YXRjaGVyczogW10sIG5vZGVzOiBbXSB9O1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbEFwcHJvdmFsUHJvY2VzcyA9IGNsb25lRGVlcChwcm9jZXNzKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyhwcm9jZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnVzZXJEYXRhU291cmNlIHx8IGNoYW5nZXMud2F0Y2hlckRhdGFTb3VyY2UgfHwgY2hhbmdlcy50ZWFtRGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZUNoYW5nZWQkLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pc05leHROb2RlQmxhbmsobm9kZTogQXBwcm92YWxHcmFwaE5vZGUsIGNvbHVtbkluZGV4OiBudW1iZXIsIG5vZGVJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gdGhpcy5fZ3JhcGguY29sdW1uc1tjb2x1bW5JbmRleCArIDFdPy5ub2Rlc1tub2RlSW5kZXhdO1xuICAgICAgICBjb25zdCBuZXh0Tm9kZUJsYW5rID0gbmV4dE5vZGU/LmJsYW5rO1xuICAgICAgICBjb25zdCBuZXh0Tm9kZVBhcmFsbGVsRW5kID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0Tm9kZT8uaWRdPy5wYXJhbGxlbEVuZDtcblxuICAgICAgICByZXR1cm4gIW5vZGUuYmxhbmsgJiYgISFuZXh0Tm9kZUJsYW5rICYmICFuZXh0Tm9kZVBhcmFsbGVsRW5kO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQ2RrRHJhZ0Rpc2FibGVkKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5faXNFZGl0TW9kZSB8fCBub2RlLmJsYW5rIHx8IG5vZGUuc3BhY2UgfHwgbm9kZS5zdGF0dXMgIT09ICdub3Qgc3RhcnRlZCc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTm9kZSBjbGljayBoYW5kbGVyICovXG4gICAgX29uTm9kZUNsaWNrKG5vZGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fZHJhZ0Ryb3BJblByb2dyZXNzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW48QXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzRGlhbG9nUmVmRGF0YT4oXG4gICAgICAgICAgICBBcHByb3ZhbEZsb3dBcHByb3ZlckRldGFpbHNDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd1NlbmRSZW1pbmRlcjogdGhpcy5hbGxvd1NlbmRSZW1pbmRlcnNGb3JTdGF0dXNlcy5pbmNsdWRlcyhub2RlLnN0YXR1cyksXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHREaWFsb2dPcHRpb25zXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgocmVtaW5kZXJUYXJnZXRzKSA9PiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZW1pbmRlclRhcmdldHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kUmVtaW5kZXJzLmVtaXQoeyB1c2VyczogcmVtaW5kZXJUYXJnZXRzLCBub2RlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KG5vZGUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uTm9kZUFkZChub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZnRlck5vZGVBZGQuZW1pdChub2RlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk5vZGVFZGl0KG5vZGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmFmdGVyTm9kZUVkaXQuZW1pdChub2RlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbk5vZGVTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEdyaWRMaXN0U2VsZWN0aW9uRXZlbnQ8QXBwcm92YWxHcmFwaE5vZGU+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dyYXBoLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb2x1bW4ubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSAhIWV2ZW50LnNlbGVjdGlvbi5maW5kKChfbm9kZSkgPT4gX25vZGUuaWQgPT09IG5vZGUuaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFdhdGNoZXIncyBhdmF0YXIgY2xpY2sgaGFuZGxlciAqL1xuICAgIF9vbldhdGNoZXJDbGljayh3YXRjaGVyOiBBcHByb3ZhbFVzZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW48QXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzRGlhbG9nUmVmRGF0YT4oQXBwcm92YWxGbG93QXBwcm92ZXJEZXRhaWxzQ29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgd2F0Y2hlcixcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogUmV0cml2ZSBtZXRhZGF0YSBieSBub2RlIGlkICovXG4gICAgZ2V0Tm9kZU1ldGFkYXRhQnlOb2RlSWQobm9kZUlkOiBzdHJpbmcpOiBBcHByb3ZhbEdyYXBoTm9kZU1ldGFkYXRhIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZUlkXTtcbiAgICB9XG5cbiAgICAvKiogU2Nyb2xsIHRvIHRoZSBuZXh0IGhvcml6b250YWwgc2xpZGUgKi9cbiAgICBuZXh0U2xpZGUoZGlyID0gMSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSAxO1xuXG4gICAgICAgIGxldCBwb3MgPSAwO1xuXG4gICAgICAgIGlmIChkaXIgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc1JpZ2h0ID09PSAxO1xuICAgICAgICAgICAgY29uc3QgbmV4dFN0ZXAgPSB0aGlzLl9jYXJvdXNlbFN0ZXBzQ291bnQgLSB0aGlzLl9jYXJvdXNlbFN0ZXBzUmlnaHQgKyAxO1xuICAgICAgICAgICAgY29uc3QgdmlzaWJsZVJpZ2h0UG9pbnQgPSB0aGlzLl9jYXJvdXNlbFN0ZXBTaXplICogbmV4dFN0ZXAgKyAobGFzdFN0ZXAgPyAwIDogdGhyZXNob2xkKTtcbiAgICAgICAgICAgIHBvcyA9IHZpc2libGVSaWdodFBvaW50IC0gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGFzdFN0ZXAgPSB0aGlzLl9jYXJvdXNlbFN0ZXBzTGVmdCA9PT0gMTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRTdGVwID0gdGhpcy5fY2Fyb3VzZWxTdGVwc0xlZnQgLSAxO1xuICAgICAgICAgICAgcG9zID0gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZSAqIG5leHRTdGVwIC0gKGxhc3RTdGVwID8gMCA6IHRocmVzaG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRTY3JvbGxQb3NpdGlvbihwb3MpO1xuXG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2V0U2Nyb2xsUG9zaXRpb24ocG9zOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIGxlZnQ6IHBvcyxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21vdmVDb2xJblZpZXcoY29sSW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bY29sSW5kZXhdLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgeDogbm9kZVgsIHdpZHRoIH0gPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLng7XG5cbiAgICAgICAgY29uc3QgbGVmdCA9IG5vZGVYIC0gZGVsdGE7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gbGVmdCArIHdpZHRoO1xuXG4gICAgICAgIGlmIChsZWZ0IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24odGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgKyBsZWZ0KTtcbiAgICAgICAgfSBlbHNlIGlmIChyaWdodCA+IHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0U2Nyb2xsUG9zaXRpb24oXG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JhcGhDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgKyByaWdodCAtIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZSBub2RlIGtleWRvd24gYW5kIGZvY3VzIG90aGVyIG5vZGUgYmFzZWQgb24gd2hpY2gga2V5IGlzIHByZXNzZWQgKi9cbiAgICBfb25Ob2RlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgbm9kZTogQXBwcm92YWxHcmFwaE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW1VQX0FSUk9XLCBET1dOX0FSUk9XLCBSSUdIVF9BUlJPVywgTEVGVF9BUlJPV10pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IG5vZGVJbmRleCwgY29sdW1uSW5kZXggfSA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZS5pZF07XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBsZXQgbmV4dEZvY3VzVGFyZ2V0OiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodHlwZW9mIG5vZGVJbmRleCA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBpZiAobm9kZUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0Rm9jdXNUYXJnZXQgPSB0aGlzLl9nZXROZXh0VmVydGljYWxOb2RlKG5vZGVJbmRleCwgY29sdW1uSW5kZXgsICd1cCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgbmV4dEZvY3VzVGFyZ2V0ID0gdGhpcy5fZ2V0TmV4dFZlcnRpY2FsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4LCAnZG93bicpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgTEVGVF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Rm9jdXNUYXJnZXQgPSB0aGlzLl9nZXROZXh0SG9yaXpvbnRhbE5vZGUobm9kZUluZGV4LCBjb2x1bW5JbmRleCwgdGhpcy5fcnRsID8gJ3JpZ2h0JyA6ICdsZWZ0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBSSUdIVF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICBuZXh0Rm9jdXNUYXJnZXQgPSB0aGlzLl9nZXROZXh0SG9yaXpvbnRhbE5vZGUobm9kZUluZGV4LCBjb2x1bW5JbmRleCwgdGhpcy5fcnRsID8gJ2xlZnQnIDogJ3JpZ2h0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dEZvY3VzVGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c05vZGUobmV4dEZvY3VzVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEZldGNoIGFsbCBuZWNlc3NhcnkgZGF0YSBhbmQgZW50ZXIgZWRpdCBtb2RlICovXG4gICAgX2VudGVyRWRpdE1vZGUoKTogdm9pZCB7XG4gICAgICAgIC8vIHRoZXJlJ3Mgbm8gc3VwcG9ydCBmb3Igc2VhcmNoaW5nIGluIG11bHRpLWlucHV0LCBzbyBncmFiYmluZyBhbGwgd2F0Y2hlcnNcbiAgICAgICAgLy8gdHJpZ2dlcmluZyBpbml0aWFsIGxvYWRpbmcgb2YgZGF0YSBpbiBkYXRhIHNvdXJjZXNcbiAgICAgICAgdGhpcy53YXRjaGVyRGF0YVNvdXJjZS5tYXRjaCgpO1xuICAgICAgICB0aGlzLl9lZGl0TW9kZUluaXRTdWIgPSB0aGlzLndhdGNoZXJEYXRhU291cmNlLm9wZW4oKS5zdWJzY3JpYmUoKHdhdGNoZXJzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91c2Vyc0ZvcldhdGNoZXJzTGlzdCA9IHdhdGNoZXJzO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRXYXRjaGVycyA9IHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy53YXRjaGVycztcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkV2F0Y2hlcklkcyA9IHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnMubWFwKCh3KSA9PiB3LmlkKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbEFwcHJvdmFsUHJvY2VzcyA9IGNsb25lRGVlcCh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHRoaXMuX2VkaXRNb2RlSW5pdFN1Yik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU2VuZCB1cGRhdGUgYXBwcm92YWwgcHJvY2VzcyBjYWxscyB0byBEYXRhU291cmNlIGFuZCBleGl0IGVkaXQgbW9kZSovXG4gICAgX3NhdmVFZGl0TW9kZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VkaXRNb2RlSW5pdFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53YXRjaGVyRGF0YVNvdXJjZS5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2lzRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZXMgPSBbXTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkID0ge1xuICAgICAgICAgICAgLi4udGhpcy5fYXBwcm92YWxQcm9jZXNzLFxuICAgICAgICAgICAgd2F0Y2hlcnM6IHRoaXMuX3NlbGVjdGVkV2F0Y2hlcnNcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9idWlsZFZpZXcodXBkYXRlZCk7XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHVwZGF0ZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlc3RvcmUgaW5pdGlhbCBhcHByb3ZhbCBmbG93IHN0YXRlIGFuZCBleGl0IGVkaXQgbW9kZSAqL1xuICAgIF9leGl0RWRpdE1vZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VkaXRNb2RlSW5pdFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53YXRjaGVyRGF0YVNvdXJjZS5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2VzcyA9IGNsb25lRGVlcCh0aGlzLl9pbml0aWFsQXBwcm92YWxQcm9jZXNzISk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxBcHByb3ZhbFByb2Nlc3MgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX2lzRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZXMgPSBbXTtcblxuICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF93YXRjaGVyc1NlbGVjdGlvbkNoYW5nZWQoc2VsZWN0ZWRJZHM6IEFwcHJvdmFsVXNlclsnaWQnXVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlkc1NldCA9IG5ldyBTZXQoc2VsZWN0ZWRJZHMpO1xuICAgICAgICAvLyB1cGRhdGluZyB3YXRjaGVycyBzZWxlY3Rpb25cbiAgICAgICAgLy8gc2luY2UgaXQncyBwb3NzaWJsZSBcIl91c2Vyc0ZvcldhdGNoZXJzTGlzdFwiIG1pZ2h0IG5vdCBjb250YWluIGFsbCBzZWxlY3RlZCB2YWx1ZXMsXG4gICAgICAgIC8vIGRldGVybWluZSBjdXJyZW50IHNlbGVjdGlvbiBiYXNlZCBvbiB3aGF0J3MgYWxyZWFkeSBzZWxlY3RlZCBhbmQgXCJfdXNlcnNGb3JXYXRjaGVyc0xpc3RcIlxuICAgICAgICB0aGlzLl9zZWxlY3RlZFdhdGNoZXJzID0gdW5pcUJ5KFxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRXYXRjaGVycy5jb25jYXQodGhpcy5fdXNlcnNGb3JXYXRjaGVyc0xpc3QpLmZpbHRlcigodXNlcikgPT4gaWRzU2V0Lmhhcyh1c2VyLmlkKSksXG4gICAgICAgICAgICAodSkgPT4gdS5pZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJlc3RvcmUgcHJldmlvdXNseSBzYXZlZCBhcHByb3ZhbCBwcm9jZXNzIHN0YXRlICovXG4gICAgX3VuZG9MYXN0QWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3MgPSBjbG9uZURlZXAodGhpcy5fcHJldmlvdXNBcHByb3ZhbFByb2Nlc3MhKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNBcHByb3ZhbFByb2Nlc3MgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT3BlbiBhZGQgbm9kZSBkaWFsb2cgKi9cbiAgICBfYWRkTm9kZShzb3VyY2U6IEFwcHJvdmFsR3JhcGhOb2RlLCB0eXBlOiBBcHByb3ZhbEZsb3dOb2RlVGFyZ2V0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNob3dOb2RlVHlwZVNlbGVjdCA9IHR5cGUgPT09ICdiZWZvcmUnICYmICFzb3VyY2UuYWN0aW9uc0NvbmZpZz8uZGlzYWJsZUFkZFBhcmFsbGVsO1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbjxBZGROb2RlRGlhbG9nUmVmRGF0YT4oXG4gICAgICAgICAgICBBcHByb3ZhbEZsb3dBZGROb2RlQ29tcG9uZW50LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVRhcmdldDogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgc2hvd05vZGVUeXBlU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICBub2RlOiBPYmplY3QuYXNzaWduKGdldEJsYW5rQXBwcm92YWxHcmFwaE5vZGUoKSwgeyBibGFuazogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrRHVlRGF0ZTogdGhpcy5jaGVja0R1ZURhdGUsXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZmF1bHREaWFsb2dPcHRpb25zXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgZGlhbG9nLmFmdGVyQ2xvc2VkLnN1YnNjcmliZSgoZGF0YTogQWRkTm9kZURpYWxvZ0Zvcm1EYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHsgbm9kZSwgbm9kZVR5cGUsIHRvTmV4dFNlcmlhbCB9ID0gZGF0YTtcblxuICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTtcblxuICAgICAgICAgICAgbm9kZS5pZCA9IGB0ZW1wSWQkeyhNYXRoLnJhbmRvbSgpICogMTAwMCkudG9GaXhlZCgpfWA7XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW50ZXJFZGl0TW9kZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2JlZm9yZSc6XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gQVBQUk9WQUxfRkxPV19OT0RFX1RZUEVTLlNFUklBTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzID0gW3NvdXJjZS5pZF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhzb3VyY2UuaWQsIFtub2RlLmlkXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZVR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5QQVJBTExFTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0FkZGluZ1BhcmFsbGVsTm9kZShub2RlLCBzb3VyY2UsIHRvTmV4dFNlcmlhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2JlZm9yZS1hbGwnOlxuICAgICAgICAgICAgICAgICAgICBub2RlLnRhcmdldHMgPSB0aGlzLl9ncmFwaC5jb2x1bW5zWzBdLm5vZGVzLm1hcCgoX25vZGUpID0+IF9ub2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdhZnRlcic6XG4gICAgICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cyA9IHNvdXJjZS50YXJnZXRzO1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2UudGFyZ2V0cyA9IFtub2RlLmlkXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdhZnRlci1hbGwnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFBhcmVudHMgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3NvdXJjZS50YXJnZXRzWzBdXT8ucGFyZW50cztcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0UGFyZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS50YXJnZXRzID0gc291cmNlLnRhcmdldHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhzb3VyY2UuaWQsIFtub2RlLmlkXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9ub2RlKSA9PiBfbm9kZS5pZCAhPT0gc291cmNlLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JhcGguY29sdW1uc1t0aGlzLl9ncmFwaC5jb2x1bW5zLmxlbmd0aCAtIDFdLm5vZGVzLmZvckVhY2goKF9ub2RlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ub2RlLnRhcmdldHMucHVzaChub2RlLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdwYXJhbGxlbCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZGRpbmdQYXJhbGxlbE5vZGUobm9kZSwgc291cmNlLCB0b05leHRTZXJpYWwpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2Uobm9kZS5hcHByb3ZhbFRlYW1JZCA/ICd0ZWFtQWRkU3VjY2VzcycgOiAnYXBwcm92ZXJBZGRTdWNjZXNzJyk7XG4gICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMucHVzaChub2RlKTtcblxuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgICAgICAgICB0aGlzLl9vbk5vZGVBZGQobm9kZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE9wZW4gZWRpdCBub2RlIGRpYWxvZyAqL1xuICAgIF9lZGl0Tm9kZShub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGlhbG9nID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuPEFkZE5vZGVEaWFsb2dSZWZEYXRhPihcbiAgICAgICAgICAgIEFwcHJvdmFsRmxvd0FkZE5vZGVDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBpc0VkaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG5vZGU6IE9iamVjdC5hc3NpZ24oe30sIG5vZGUpLFxuICAgICAgICAgICAgICAgICAgICBjaGVja0R1ZURhdGU6IHRoaXMuY2hlY2tEdWVEYXRlLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWZhdWx0RGlhbG9nT3B0aW9uc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLl9pbmplY3RvclxuICAgICAgICApO1xuXG4gICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKGRhdGE6IHsgbm9kZTogQXBwcm92YWxOb2RlIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWROb2RlID0gZGF0YT8ubm9kZTtcblxuICAgICAgICAgICAgaWYgKCF1cGRhdGVkTm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY2FjaGVDdXJyZW50QXBwcm92YWxQcm9jZXNzKCk7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVOb2RlKHVwZGF0ZWROb2RlKTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKCdub2RlRWRpdCcpO1xuICAgICAgICAgICAgdGhpcy5fYnVpbGRWaWV3KHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgICAgICAgICB0aGlzLl9vbk5vZGVFZGl0KG5vZGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBcIkRlbGV0ZVwiIGJ1dHRvbiBjbGljayBoYW5kbGVyICovXG4gICAgX29uTm9kZURlbGV0ZShub2RlVG9EZWxldGU6IEFwcHJvdmFsTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTtcbiAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9EZWxldGUpO1xuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShub2RlVG9EZWxldGUuYXBwcm92YWxUZWFtSWQgPyAndGVhbVJlbW92ZScgOiAnbm9kZVJlbW92ZScpO1xuICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kZWxldGVTZWxlY3RlZE5vZGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTtcblxuICAgICAgICBjb25zdCBub2Rlc1RvRGVsZXRlID0gdGhpcy5fbm9kZUNvbXBvbmVudHNcbiAgICAgICAgICAgIC5maWx0ZXIoKG5vZGVDb21wb25lbnQpID0+IG5vZGVDb21wb25lbnQuX2lzU2VsZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChub2RlQ29tcG9uZW50KSA9PiBub2RlQ29tcG9uZW50Lm5vZGUpO1xuXG4gICAgICAgIG5vZGVzVG9EZWxldGUuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZSgnbm9kZXNSZW1vdmUnKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBOb2RlIGRyYWcgbW92ZSBoYW5kbGVyLCB1c2VkIHRvIGNoZWNrIGlmIG5lZWQgdG8gaGlnaGxpZ2h0IGEgZHJvcCB6b25lIHJlY3RhbmdsZSAqL1xuICAgIF9vbk5vZGVEcmFnTW92ZWQobm9kZTogQXBwcm92YWxHcmFwaE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZHJhZ2dlZE5vZGVEaW1lbnNpb25zID0gdGhpcy5fbm9kZUNvbXBvbmVudHNcbiAgICAgICAgICAgIC5maW5kKChjb21wKSA9PiBjb21wLm5vZGUgPT09IG5vZGUpXG4gICAgICAgICAgICA/Ll9uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmICghZHJhZ2dlZE5vZGVEaW1lbnNpb25zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ub2RlQ29tcG9uZW50cy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQubm9kZSAhPT0gbm9kZSAmJiBCb29sZWFuKGNvbXBvbmVudC5fZHJvcFpvbmVzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuX2NoZWNrSWZOb2RlRHJhZ2dlZEluRHJvcFpvbmUoZHJhZ2dlZE5vZGVEaW1lbnNpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTm9kZSBkcm9wIGhhbmRsZXIgKi9cbiAgICBfb25Ob2RlRHJvcChub2RlVG9Ecm9wOiBBcHByb3ZhbEdyYXBoTm9kZSwgZHJhZzogQ2RrRHJhZyk6IHZvaWQge1xuICAgICAgICBkcmFnLnJlc2V0KCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5fZHJhZ0Ryb3BJblByb2dyZXNzID0gZmFsc2UpKTtcblxuICAgICAgICBjb25zdCBkcm9wVGFyZ2V0ID0gdGhpcy5fbm9kZUNvbXBvbmVudHMuZmluZCgobikgPT4gbi5faXNBbnlEcm9wWm9uZUFjdGl2ZSk7XG5cbiAgICAgICAgaWYgKCFkcm9wVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTtcblxuICAgICAgICBjb25zdCBwbGFjZW1lbnQgPSBkcm9wVGFyZ2V0Ll9hY3RpdmVEcm9wWm9uZXNbMF0ucGxhY2VtZW50O1xuXG4gICAgICAgIHRoaXMuX25vZGVDb21wb25lbnRzLmZvckVhY2goKG4pID0+IG4uX2RlYWN0aXZhdGVEcm9wWm9uZXMoKSk7XG5cbiAgICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2FmdGVyJykge1xuICAgICAgICAgICAgdGhpcy5fZGVsZXRlTm9kZShub2RlVG9Ecm9wKTtcbiAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IGdldEdyYXBoTm9kZXModGhpcy5fZ3JhcGgpLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IGRyb3BUYXJnZXQubm9kZS50YXJnZXRzWzBdKTtcblxuICAgICAgICAgICAgaWYgKG5leHROb2RlPy5ibGFuaykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobmV4dE5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2RlVG9Ecm9wLnRhcmdldHMgPVxuICAgICAgICAgICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5maW5kKChub2RlKSA9PiBub2RlLmlkID09PSBkcm9wVGFyZ2V0Lm5vZGUuaWQpPy50YXJnZXRzID8/IFtdO1xuICAgICAgICAgICAgZHJvcFRhcmdldC5ub2RlLnRhcmdldHMgPSBbbm9kZVRvRHJvcC5pZF07XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wKTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnQgPT09ICdiZWZvcmUnKSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2cgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4oQXBwcm92YWxGbG93U2VsZWN0VHlwZUNvbXBvbmVudCwgdW5kZWZpbmVkLCB0aGlzLl9pbmplY3Rvcik7XG5cbiAgICAgICAgICAgIGRpYWxvZy5hZnRlckNsb3NlZC5zdWJzY3JpYmUoKGRhdGE6IFNlbGVjdFR5cGVEaWFsb2dGb3JtRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0eXBlLCB0b05leHRTZXJpYWwgfSA9IGRhdGE7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGVUb0Ryb3ApO1xuICAgICAgICAgICAgICAgIHRoaXMuX2J1aWxkVmlldyh0aGlzLl9hcHByb3ZhbFByb2Nlc3MpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEFQUFJPVkFMX0ZMT1dfTk9ERV9UWVBFUy5TRVJJQUwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVwbGFjZVRhcmdldHMoZHJvcFRhcmdldC5ub2RlLmlkLCBbbm9kZVRvRHJvcC5pZF0pO1xuICAgICAgICAgICAgICAgICAgICBub2RlVG9Ecm9wLnRhcmdldHMgPSBbZHJvcFRhcmdldC5ub2RlLmlkXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gQVBQUk9WQUxfRkxPV19OT0RFX1RZUEVTLlBBUkFMTEVMKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZGRpbmdQYXJhbGxlbE5vZGUobm9kZVRvRHJvcCwgZHJvcFRhcmdldC5ub2RlLCB0b05leHRTZXJpYWwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBsYWNlbWVudCA9PT0gJ2JlZm9yZS1hbGwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWxldGVOb2RlKG5vZGVUb0Ryb3ApO1xuXG4gICAgICAgICAgICBjb25zdCBmaXJzdENvbHVtbk5vZGVzID0gdGhpcy5fZ3JhcGguY29sdW1uc1swXS5ub2RlcztcbiAgICAgICAgICAgIG5vZGVUb0Ryb3AudGFyZ2V0cyA9IGZpcnN0Q29sdW1uTm9kZXMubWFwKChub2RlKSA9PiBub2RlLmlkKTtcblxuICAgICAgICAgICAgdGhpcy5fZmluaXNoRHJhZ0Ryb3BQcm9jZXNzKG5vZGVUb0Ryb3ApO1xuICAgICAgICB9IGVsc2UgaWYgKHBsYWNlbWVudCA9PT0gJ2FmdGVyLWFsbCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZU5vZGUobm9kZVRvRHJvcCk7XG4gICAgICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcblxuICAgICAgICAgICAgbm9kZVRvRHJvcC50YXJnZXRzID0gWy4uLmRyb3BUYXJnZXQubm9kZS50YXJnZXRzXTtcblxuICAgICAgICAgICAgaWYgKGRyb3BUYXJnZXQubm9kZS50YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb2x1bW5Ob2RlcyA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbdGhpcy5fZ3JhcGguY29sdW1ucy5sZW5ndGggLSAxXS5ub2RlcztcbiAgICAgICAgICAgICAgICBsYXN0Q29sdW1uTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4gbm9kZS50YXJnZXRzLnB1c2gobm9kZVRvRHJvcC5pZCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAobm9kZSkgPT4gbm9kZS5pZCAhPT0gZHJvcFRhcmdldC5ub2RlLmlkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhkcm9wVGFyZ2V0Lm5vZGUuaWQsIFtub2RlVG9Ecm9wLmlkXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2ZpbmlzaERyYWdEcm9wUHJvY2Vzcyhub2RlVG9Ecm9wKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmluaXNoRHJhZ0Ryb3BQcm9jZXNzKG5vZGVUb0Ryb3A6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5wdXNoKG5vZGVUb0Ryb3ApO1xuICAgICAgICB0aGlzLl9idWlsZFZpZXcodGhpcy5fYXBwcm92YWxQcm9jZXNzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3dNZXNzYWdlKHR5cGU6IEFwcHJvdmFsRmxvd01lc3NhZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX21lc3NhZ2VzID0gW3sgdHlwZSB9XTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBCdWlsZCBBcHByb3ZhbCBGbG93IGdyYXBoIGFuZCByZW5kZXIgaXQgKi9cbiAgICBwcml2YXRlIF9idWlsZFZpZXcoYXBwcm92YWxQcm9jZXNzOiBBcHByb3ZhbFByb2Nlc3MpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFhcHByb3ZhbFByb2Nlc3Mubm9kZXMpIHtcbiAgICAgICAgICAgIGFwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzKSB7XG4gICAgICAgICAgICBhcHByb3ZhbFByb2Nlc3Mud2F0Y2hlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3MgPSBhcHByb3ZhbFByb2Nlc3M7XG4gICAgICAgIHRoaXMuX2dyYXBoID0gZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaCh0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMpO1xuXG4gICAgICAgIGlmICh0aGlzLnJlbW92ZVNwYWNlTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5fZ3JhcGguY29sdW1ucyA9IHRoaXMucmVtb3ZlU3BhY2VOb2Rlc0Zyb21Db2x1bW5zKHRoaXMuX2dyYXBoLmNvbHVtbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2dyYXBoLmVycm9ycykge1xuICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoJ2Vycm9yJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ncmFwaE1ldGFkYXRhID0gZ2VuZXJhdGVBcHByb3ZhbEZsb3dHcmFwaE1ldGFkYXRhKHRoaXMuX2dyYXBoKTtcblxuICAgICAgICBjb25zdCBub2RlcyA9IGdldEdyYXBoTm9kZXModGhpcy5fZ3JhcGgpO1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFub2RlLnNwYWNlKTtcbiAgICAgICAgdGhpcy5fbXVsdGlwbGVSb290Tm9kZXMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZS5pZF0uaXNSb290KS5sZW5ndGggPiAxO1xuICAgICAgICB0aGlzLl9tdWx0aXBsZUZpbmFsTm9kZXMgPSBub2Rlcy5maWx0ZXIoKG5vZGUpID0+IHRoaXMuX2dyYXBoTWV0YWRhdGFbbm9kZS5pZF0uaXNGaW5hbCkubGVuZ3RoID4gMTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9ncmlkTGlzdD8uY2xlYXJTZWxlY3Rpb24oKTtcblxuICAgICAgICBpZiAoIXRoaXMuX2lzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFNjcm9sbFBvc2l0aW9uKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTGlzdGVuIHdpbmRvdyByZXNpemUgYW5kIGRpc3RyaWJ1dGUgY2FyZHMgb24gY29sdW1uIGNoYW5nZSAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIG1lcmdlKGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKSwgZnJvbUV2ZW50KHRoaXMuX2dyYXBoQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpKVxuICAgICAgICAgICAgICAgIC5waXBlKHRocm90dGxlVGltZSg1MCwgdW5kZWZpbmVkLCB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiB0cnVlIH0pKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZm9jdXNOb2RlKG5vZGU6IEFwcHJvdmFsR3JhcGhOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5vZGVUb0ZvY3VzID0gdGhpcy5fbm9kZUNvbXBvbmVudHMuZmluZCgoY29tcCkgPT4gY29tcC5ub2RlID09PSBub2RlKTtcblxuICAgICAgICBpZiAoIW5vZGVUb0ZvY3VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbW92ZUNvbEluVmlldyhub2RlLmNvbEluZGV4ID8/IDApO1xuICAgICAgICBub2RlVG9Gb2N1cy5fZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFVwZGF0ZSBub2RlIG9iamVjdCBpbiBsb2NhbCBhcHByb3ZhbCBwcm9jZXNzIGRhdGEgc3RydWN0dXJlICovXG4gICAgcHJpdmF0ZSBfdXBkYXRlTm9kZShub2RlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZUluZGV4ID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbmRJbmRleCgobikgPT4gbi5pZCA9PT0gbm9kZS5pZCk7XG5cbiAgICAgICAgaWYgKG5vZGVJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXNbbm9kZUluZGV4XSA9IG5vZGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBEZWxldGUgbm9kZSBvYmplY3QgaW4gbG9jYWwgYXBwcm92YWwgcHJvY2VzcyBkYXRhIHN0cnVjdHVyZSAqL1xuICAgIHByaXZhdGUgX2RlbGV0ZU5vZGUobm9kZVRvRGVsZXRlOiBBcHByb3ZhbE5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgbm9kZXNUb0RlbGV0ZSA9IFtub2RlVG9EZWxldGVdO1xuICAgICAgICBjb25zdCBncmFwaE5vZGVzID0gZ2V0R3JhcGhOb2Rlcyh0aGlzLl9ncmFwaCk7XG4gICAgICAgIGxldCBjdXJyTm9kZSA9IGdyYXBoTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gbm9kZVRvRGVsZXRlLmlkKTtcbiAgICAgICAgbGV0IG5leHROb2RlOiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZDtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoY3Vyck5vZGU/LnRhcmdldHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBncmFwaE5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IGN1cnJOb2RlPy50YXJnZXRzWzBdKTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXh0Tm9kZT8uYmxhbmsgJiYgdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0Tm9kZS5pZF0ucGFyZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXNUb0RlbGV0ZS5wdXNoKG5leHROb2RlKTtcblxuICAgICAgICAgICAgICAgICAgICBjdXJyTm9kZSA9IG5leHROb2RlO1xuICAgICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGdyYXBoTm9kZXMuZmluZCgobm9kZSkgPT4gbm9kZS5pZCA9PT0gY3Vyck5vZGU/LnRhcmdldHNbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAobmV4dE5vZGU/LmJsYW5rICYmIHRoaXMuX2dyYXBoTWV0YWRhdGFbbmV4dE5vZGUuaWRdLnBhcmVudHMubGVuZ3RoID09PSAxKTtcblxuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW25vZGVUb0RlbGV0ZS5pZF0ucGFyZW50c1swXTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbm9kZVRvRGVsZXRlLnRhcmdldHNbMF07XG4gICAgICAgIGNvbnN0IGlzUGFyZW50UGFyYWxsZWxTdGFydCA9IHRoaXMuX2dyYXBoTWV0YWRhdGFbcGFyZW50Py5pZF0/LnBhcmFsbGVsU3RhcnQ7XG4gICAgICAgIGNvbnN0IGlzVGFyZ2V0UGFyYWxsZWxFbmQgPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3RhcmdldF0/LnBhcmFsbGVsRW5kO1xuICAgICAgICBjb25zdCB0YXJnZXRzID1cbiAgICAgICAgICAgIChpc1BhcmVudFBhcmFsbGVsU3RhcnQgJiYgaXNUYXJnZXRQYXJhbGxlbEVuZCkgfHwgbm9kZXNUb0RlbGV0ZS5sZW5ndGggPiAxID8gW10gOiBjdXJyTm9kZT8udGFyZ2V0cyA/PyBbXTtcblxuICAgICAgICB0aGlzLl9yZXBsYWNlVGFyZ2V0cyhub2RlVG9EZWxldGUuaWQsIHRhcmdldHMpO1xuXG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2RlcyA9IHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5maWx0ZXIoKG5vZGUpID0+ICFub2Rlc1RvRGVsZXRlLmluY2x1ZGVzKG5vZGUpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZFBhcmFsbGVsVGFyZ2V0cyh0YXJnZXROb2RlSWQ6IHN0cmluZywgbm9kZUlkVG9BZGQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHByb3ZhbFByb2Nlc3Mubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzTm9kZVRhcmdldHNJbmNsdWRlSWQobm9kZSwgdGFyZ2V0Tm9kZUlkKSkge1xuICAgICAgICAgICAgICAgIG5vZGUudGFyZ2V0cy5wdXNoKG5vZGVJZFRvQWRkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgXCJpZFRvUmVwbGFjZVwiIGluIGFsbCBub2RlcycgXCJ0YXJnZXRzXCIgd2l0aCBvbmVzIGluIFwicmVwbGFjZVdpdGhcIiBhcnJheSAqL1xuICAgIHByaXZhdGUgX3JlcGxhY2VUYXJnZXRzKElkVG9SZXBsYWNlOiBzdHJpbmcsIHJlcGxhY2VXaXRoSWQ6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FwcHJvdmFsUHJvY2Vzcy5ub2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNOb2RlVGFyZ2V0c0luY2x1ZGVJZChuLCBJZFRvUmVwbGFjZSkpIHtcbiAgICAgICAgICAgICAgICBuLnRhcmdldHMgPSBuLnRhcmdldHMuZmlsdGVyKChfaWQpID0+IF9pZCAhPT0gSWRUb1JlcGxhY2UpO1xuICAgICAgICAgICAgICAgIG4udGFyZ2V0cy5wdXNoKC4uLnJlcGxhY2VXaXRoSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTYXZlIGN1cnJlbnQgc3RhdGUgb2YgYXBwcm92YWwgcHJvY2VzcyBkYXRhIHRvIGJlIGFibGUgdG8gdW5kbyBhbiBhY3Rpb24gbWFkZSBpbiBlZGl0IG1vZGUgKi9cbiAgICBwcml2YXRlIF9jYWNoZUN1cnJlbnRBcHByb3ZhbFByb2Nlc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzID0gY2xvbmVEZWVwKHRoaXMuX2FwcHJvdmFsUHJvY2Vzcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXROZXh0SG9yaXpvbnRhbE5vZGUgPSAoXG4gICAgICAgIG5vZGVJbmRleDogbnVtYmVyLFxuICAgICAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgICAgICBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCdcbiAgICApOiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4RGlmZiA9IGRpcmVjdGlvbiA9PT0gJ3JpZ2h0JyA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgbmV4dENvbHVtbiA9IHRoaXMuX2dyYXBoLmNvbHVtbnNbY29sdW1uSW5kZXggKyBpbmRleERpZmZdO1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IG5leHRDb2x1bW4/Lm5vZGVzW25vZGVJbmRleF07XG5cbiAgICAgICAgaWYgKCFuZXh0Tm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0Tm9kZS5ibGFuayB8fCBuZXh0Tm9kZS5zcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2dldE5leHRIb3Jpem9udGFsTm9kZShub2RlSW5kZXgsIGNvbHVtbkluZGV4ICsgaW5kZXhEaWZmLCBkaXJlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHROb2RlO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE5leHRWZXJ0aWNhbE5vZGUgPSAoXG4gICAgICAgIG5vZGVJbmRleDogbnVtYmVyLFxuICAgICAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgICAgICBkaXJlY3Rpb246ICd1cCcgfCAnZG93bidcbiAgICApOiBBcHByb3ZhbEdyYXBoTm9kZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4RGlmZiA9IGRpcmVjdGlvbiA9PT0gJ2Rvd24nID8gMSA6IC0xO1xuICAgICAgICBjb25zdCBjdXJyQ29sdW1uID0gdGhpcy5fZ3JhcGguY29sdW1uc1tjb2x1bW5JbmRleF07XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gY3VyckNvbHVtbi5ub2Rlc1tub2RlSW5kZXggKyBpbmRleERpZmZdO1xuXG4gICAgICAgIGlmICghbmV4dE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dE5vZGUuYmxhbmsgfHwgbmV4dE5vZGUuc3BhY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXROZXh0VmVydGljYWxOb2RlKG5vZGVJbmRleCArIGluZGV4RGlmZiwgY29sdW1uSW5kZXgsIGRpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dE5vZGU7XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX2Nhcm91c2VsU3RlcFNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyYXBoRWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCAvIHRoaXMuX2Nhcm91c2VsU3RlcHNDb3VudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2Nyb2xsRGlmZigpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMuX2dyYXBoRWwpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggLSB0aGlzLl9ncmFwaEVsLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2Nhcm91c2VsU3RlcHNDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JhcGhFbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY2Fyb3VzZWxTdGVwc0xlZnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCAvIHRoaXMuX2Nhcm91c2VsU3RlcFNpemUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9jYXJvdXNlbFN0ZXBzUmlnaHQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChcbiAgICAgICAgICAgICh0aGlzLl9zY3JvbGxEaWZmIC0gTWF0aC5yb3VuZCh0aGlzLl9ncmFwaENvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCkpIC8gdGhpcy5fY2Fyb3VzZWxTdGVwU2l6ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX2RlZmF1bHREaWFsb2dPcHRpb25zKCk6IERlZmF1bHREaWFsb2dPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRlYW1EYXRhU291cmNlOiB0aGlzLnRlYW1EYXRhU291cmNlLFxuICAgICAgICAgICAgdXNlckRhdGFTb3VyY2U6IHRoaXMudXNlckRhdGFTb3VyY2UsXG4gICAgICAgICAgICB1c2VyRGV0YWlsc1RlbXBsYXRlOiB0aGlzLnVzZXJEZXRhaWxzVGVtcGxhdGUsXG4gICAgICAgICAgICBydGw6IHRoaXMuX3J0bFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmluZFNlcmlhbE5vZGUoeUluZGV4PzogbnVtYmVyLCB0YXJnZXRzPzogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHRhcmdldElzUGFyZW50ID1cbiAgICAgICAgICAgIE51bWJlci5pc0ludGVnZXIoeUluZGV4KSAmJlxuICAgICAgICAgICAgdGFyZ2V0cz8uc29tZSgodGFyZ2V0SWQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlSW5kZXggPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3RhcmdldElkXT8ubm9kZUluZGV4O1xuICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG5vZGVJbmRleCkgJiYgbm9kZUluZGV4ISA8PSB5SW5kZXghIC0gMTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0YXJnZXRJc1BhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldHMgPz8gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gdGhpcy5fYXBwcm92YWxQcm9jZXNzLm5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IHRhcmdldHM/LlswXSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kU2VyaWFsTm9kZSh5SW5kZXgsIHRhcmdldE5vZGU/LnRhcmdldHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc0FkZGluZ1BhcmFsbGVsTm9kZShcbiAgICAgICAgYWRkZWROb2RlOiBBcHByb3ZhbEdyYXBoTm9kZSxcbiAgICAgICAgc291cmNlTm9kZTogQXBwcm92YWxHcmFwaE5vZGUsXG4gICAgICAgIHRvTmV4dFNlcmlhbCA9IGZhbHNlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gc291cmNlTm9kZS50YXJnZXRzO1xuXG4gICAgICAgIHRoaXMuX2FkZFBhcmFsbGVsVGFyZ2V0cyhzb3VyY2VOb2RlLmlkLCBhZGRlZE5vZGUuaWQpO1xuXG4gICAgICAgIGlmICh0b05leHRTZXJpYWwpIHtcbiAgICAgICAgICAgIGxldCB5SW5kZXggPSB0aGlzLl9ncmFwaE1ldGFkYXRhW3NvdXJjZU5vZGUuaWRdLm5vZGVJbmRleDtcbiAgICAgICAgICAgIGxldCB0YXJnZXRzID0gc291cmNlTm9kZS50YXJnZXRzO1xuXG4gICAgICAgICAgICBpZiAoeUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlTm9kZU1ldGFkYXRhID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtzb3VyY2VOb2RlLmlkXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Ob2RlcyA9IHRoaXMuX2dyYXBoLmNvbHVtbnM/Lltzb3VyY2VOb2RlTWV0YWRhdGEuY29sdW1uSW5kZXghXT8ubm9kZXM7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dFBhcmFsbGVsTm9kZSA9IGNvbHVtbk5vZGVzLmZpbmQoKG5vZGUsIGluZGV4KSA9PiBpbmRleCA+IDAgJiYgIW5vZGUuc3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5leHRQYXJhbGxlbE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgeUluZGV4ID0gdGhpcy5fZ3JhcGhNZXRhZGF0YVtuZXh0UGFyYWxsZWxOb2RlLmlkXS5jb2x1bW5JbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0cyA9IG5leHRQYXJhbGxlbE5vZGUudGFyZ2V0cztcblxuICAgICAgICAgICAgICAgICAgICBhZGRlZE5vZGUudGFyZ2V0cyA9IHRoaXMuX2ZpbmRTZXJpYWxOb2RlKHlJbmRleCwgdGFyZ2V0cyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBhZGRlZE5vZGUudGFyZ2V0cyA9IHNvdXJjZU5vZGUudGFyZ2V0cztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFkZGVkTm9kZS50YXJnZXRzID0gdGhpcy5fZmluZFNlcmlhbE5vZGUoeUluZGV4LCB0YXJnZXRzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0dXBEYXRhU291cmNlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdWIgPSB0aGlzLl9kYXRhU291cmNlQ2hhbmdlZCRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2FkaW5nU3RhdGVzID0gW3RoaXMudGVhbURhdGFTb3VyY2UsIHRoaXMudXNlckRhdGFTb3VyY2UsIHRoaXMud2F0Y2hlckRhdGFTb3VyY2VdXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChkcykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZShkcy5vbkRhdGFSZXF1ZXN0ZWQoKS5waXBlKG1hcFRvKHRydWUpKSwgZHMub25EYXRhUmVjZWl2ZWQoKS5waXBlKG1hcFRvKGZhbHNlKSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChkcy5pc0RhdGFMb2FkaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGxvYWRpbmdTdGF0ZXMpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgobG9hZGluZ1N0YXRlcykgPT4gbG9hZGluZ1N0YXRlcy5zb21lKEJvb2xlYW4pKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzb21lTG9hZGluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzb21lTG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlcXVlc3RlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWNlaXZlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKHN1Yik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlbW92ZVNwYWNlTm9kZXNGcm9tQ29sdW1ucyhjb2x1bW5zOiBBcHByb3ZhbEdyYXBoQ29sdW1uW10pOiBBcHByb3ZhbEdyYXBoQ29sdW1uW10ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnM6IEFwcHJvdmFsR3JhcGhDb2x1bW5bXSA9IFtdO1xuXG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZE5vZGVzID0gY29sdW1uLm5vZGVzLmZpbHRlcigobm9kZSkgPT4gIW5vZGUuc3BhY2UpO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkQ29sdW1uID0ge1xuICAgICAgICAgICAgICAgIC4uLmNvbHVtbiwgLy8gUHJlc2VydmUgb3RoZXIgcHJvcGVydGllcyBvZiB0aGUgY29sdW1uXG4gICAgICAgICAgICAgICAgbm9kZXM6IGZpbHRlcmVkTm9kZXMgLy8gVXNlIHRoZSBmaWx0ZXJlZCBsaXN0IG9mIG5vZGVzXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmaWx0ZXJlZENvbHVtbnMucHVzaCh1cGRhdGVkQ29sdW1uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkQ29sdW1ucztcbiAgICB9XG59XG5cbmludGVyZmFjZSBEZWZhdWx0RGlhbG9nT3B0aW9ucyB7XG4gICAgdGVhbURhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1RlYW1EYXRhU291cmNlPEFwcHJvdmFsVGVhbT47XG4gICAgdXNlckRhdGFTb3VyY2U6IEFwcHJvdmFsRmxvd1VzZXJEYXRhU291cmNlPEFwcHJvdmFsVXNlcj47XG4gICAgdXNlckRldGFpbHNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBydGw6IGJvb2xlYW47XG59XG4iLCI8bmctY29udGFpbmVyIGZkQ29tcGFjdD5cbiAgICA8ZmRwLWFwcHJvdmFsLWZsb3ctbWVzc2FnZXNcbiAgICAgICAgWyhtZXNzYWdlcyldPVwiX21lc3NhZ2VzXCJcbiAgICAgICAgW3VuZG9MYXN0QWN0aW9uQXZhaWxhYmxlXT1cIiEhX3ByZXZpb3VzQXBwcm92YWxQcm9jZXNzXCJcbiAgICAgICAgKHVuZG9MYXN0QWN0aW9uKT1cIl91bmRvTGFzdEFjdGlvbigpXCJcbiAgICA+PC9mZHAtYXBwcm92YWwtZmxvdy1tZXNzYWdlcz5cbiAgICA8ZmQtZ3JpZC1saXN0XG4gICAgICAgICNncmlkTGlzdFxuICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X190b29sYmFyXCJcbiAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiX2lzRWRpdE1vZGUgPyAnbXVsdGlTZWxlY3QnIDogJ25vbmUnXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJfb25Ob2RlU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICAgICAgPGZkLWdyaWQtbGlzdC10aXRsZS1iYXIgW3RpdGxlXT1cInRpdGxlIHx8ICgncGxhdGZvcm1BcHByb3ZhbEZsb3cuZGVmYXVsdFRpdGxlJyB8IGZkVHJhbnNsYXRlKVwiPlxuICAgICAgICAgICAgPGZkLWdyaWQtbGlzdC10aXRsZS1iYXItc3BhY2VyPjwvZmQtZ3JpZC1saXN0LXRpdGxlLWJhci1zcGFjZXI+XG4gICAgICAgICAgICBAaWYgKGlzRWRpdEF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIDxmZHAtYXBwcm92YWwtZmxvdy10b29sYmFyLWFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgW2dyYXBoXT1cIl9ncmFwaFwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZE5vZGVzXT1cIl9zZWxlY3RlZE5vZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyYXBoTWV0YWRhdGFdPVwiX2dyYXBoTWV0YWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbaXNFZGl0TW9kZV09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgIChlbnRlckVkaXRNb2RlKT1cIl9lbnRlckVkaXRNb2RlKClcIlxuICAgICAgICAgICAgICAgICAgICAoYWRkTm9kZSk9XCJfYWRkTm9kZSgkZXZlbnQubm9kZSwgJGV2ZW50LnRhcmdldClcIlxuICAgICAgICAgICAgICAgICAgICAoZWRpdFNlbGVjdGVkTm9kZSk9XCJfZWRpdE5vZGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVTZWxlY3RlZE5vZGVzKT1cIl9kZWxldGVTZWxlY3RlZE5vZGVzKClcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1hcHByb3ZhbC1mbG93LXRvb2xiYXItYWN0aW9ucz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9mZC1ncmlkLWxpc3QtdGl0bGUtYmFyPlxuICAgICAgICBAaWYgKF9hcHByb3ZhbFByb2Nlc3Mud2F0Y2hlcnM/Lmxlbmd0aCB8fCBfaXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X193YXRjaGVyc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwid2F0Y2hlcnNMYWJlbFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHdhdGNoZXJzTGFiZWwgfHwgKCdwbGF0Zm9ybUFwcHJvdmFsRmxvdy5kZWZhdWx0V2F0Y2hlcnNMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgfX1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgQGlmICghX2lzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAod2F0Y2hlciBvZiBfYXBwcm92YWxQcm9jZXNzLndhdGNoZXJzOyB0cmFjayBfdHJhY2tCeUZuKCRpbmRleCwgd2F0Y2hlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCJ3YXRjaGVyLmltZ1VybCB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIndhdGNoZXIubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2lyY2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdmF0YXJDbGlja2VkKT1cIl9vbldhdGNoZXJDbGljayh3YXRjaGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2ZkLWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX3dhdGNoZXJzLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLW11bHRpLWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duVmFsdWVzXT1cIl91c2Vyc0ZvcldhdGNoZXJzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy53YXRjaGVyc0lucHV0UGxhY2Vob2xkZXInIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5Rm5dPVwiX2Rpc3BsYXlVc2VyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZuXT1cIl91c2VyVmFsdWVGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dBbGxCdXR0b25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJfc2VsZWN0ZWRXYXRjaGVySWRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfd2F0Y2hlcnNTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtbXVsdGktaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIV9ncmFwaC5lcnJvcnMpIHtcbiAgICAgICAgICAgIEBpZiAoX2dyYXBoLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2NvbnRhaW5lci0tZXh0cmEtcGFkZGluZy1zdGFydF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19jb250YWluZXItLWV4dHJhLXBhZGRpbmctZW5kXT1cInRydWVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChfc2Nyb2xsRGlmZiA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93LWNhcm91c2VsLWNvbnRyb2xzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHMtLWVkaXQtbW9kZV09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfY2Fyb3VzZWxTdGVwc0xlZnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3ctY2Fyb3VzZWwtY29udHJvbHNfX2J1dHRvbi0tcHJldi1zbGlkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy5wcmV2QnV0dG9uQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuZXh0U2xpZGUoLTEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gW2dseXBoXT1cIiduYXZpZ2F0aW9uLScgKyAoX3J0bCA/ICdyaWdodCcgOiAnbGVmdCcpICsgJy1hcnJvdydcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBfY2Fyb3VzZWxTdGVwc0xlZnQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoX2Nhcm91c2VsU3RlcHNSaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtYXBwcm92YWwtZmxvdy1jYXJvdXNlbC1jb250cm9sc19fYnV0dG9uLS1uZXh0LXNsaWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3BsYXRmb3JtQXBwcm92YWxGbG93Lm5leHRCdXR0b25BcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRTbGlkZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgX2Nhcm91c2VsU3RlcHNSaWdodCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gW2dseXBoXT1cIiduYXZpZ2F0aW9uLScgKyAoX3J0bCA/ICdsZWZ0JyA6ICdyaWdodCcpICsgJy1hcnJvdydcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLWNvbnRhaW5lci0tbXVsdGlwbGUtcm9vdC1ub2Rlc109XCJfbXVsdGlwbGVSb290Tm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb250YWluZXItLW11bHRpcGxlLWZpbmFsLW5vZGVzXT1cIl9tdWx0aXBsZUZpbmFsTm9kZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLXNjcm9sbGJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNncmFwaENvbnRhaW5lckVsXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2dyYXBoRWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLWFwcHJvdmFsLWZsb3dfX2dyYXBoLS1lZGl0LW1vZGVdPVwiX2lzRWRpdE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBfZ3JhcGguY29sdW1uczsgdHJhY2sgY29sdW1uOyBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgb2YgY29sdW1uLm5vZGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIF90cmFja0J5Rm4obm9kZUluZGV4LCBub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLWFwcHJvdmFsLWZsb3ctbm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcHByb3ZhbEZsb3dOb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiX2lzQ2RrRHJhZ0Rpc2FibGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttZXRhXT1cIl9ncmFwaE1ldGFkYXRhW25vZGUuaWRdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRWRpdF09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc05leHROb2RlQmxhbmtdPVwiX2lzTmV4dE5vZGVCbGFuayhub2RlLCBjb2x1bW5JbmRleCwgbm9kZUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja0R1ZURhdGVdPVwiY2hlY2tEdWVEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2R1ZURhdGVUaHJlc2hvbGRdPVwiZHVlRGF0ZVRocmVzaG9sZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZW5kZXJBcnJvd109XCJjb2x1bW5JbmRleCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsTm9kZXNJbkNvbHVtbkFwcHJvdmVkXT1cIiEhY29sdW1uLmFsbE5vZGVzQXBwcm92ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwcm92YWxTdGF0dXNUZW1wbGF0ZV09XCJhcHByb3ZhbFN0YXR1c1RlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c0NvbG9yTWFwcGluZ109XCJzdGF0dXNDb2xvck1hcHBpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25BZGQpPVwiX2FkZE5vZGUobm9kZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkVkaXQpPVwiX2VkaXROb2RlKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uRGVsZXRlKT1cIl9vbk5vZGVEZWxldGUobm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJfb25Ob2RlS2V5RG93bigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIl9kcmFnRHJvcEluUHJvZ3Jlc3MgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNka0RyYWdSZWxlYXNlZCk9XCJfb25Ob2RlRHJvcChub2RlLCAkZXZlbnQuc291cmNlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcmFnTW92ZWQpPVwiX29uTm9kZURyYWdNb3ZlZChub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRyaWNrIHdpdGggdXNpbmcgcHJvamVjdGlvbiB0byBtYWtlIGdyaWQgbGlzdCBpdGVtcyB2aXNpYmxlIGZvciB0aGUgZ3JpZCBsaXN0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtZ3JpZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cIiEhbm9kZS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsbGVkQnldPVwiYXBwcm92YWxGbG93Tm9kZS5hcHByb3ZhbEZsb3dOb2RlSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sYmFyQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkcC1hcHByb3ZhbC1mbG93X19ncmFwaC1ub2RlLWlubmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZHAtYXBwcm92YWwtZmxvd19fZ3JhcGgtbm9kZS1pbm5lci0tZWRpdF09XCJfaXNFZGl0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJlc3MpPVwiX29uTm9kZUNsaWNrKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWdyaWQtbGlzdC1pdGVtLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChfaXNFZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFwcHJvdmFsRmxvd05vZGUuX292ZXJmbG93TWVudUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtZ3JpZC1saXN0LWl0ZW0tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZC1ncmlkLWxpc3QtaXRlbS1pbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbWFnZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHByb3ZlcnMubGVuZ3RoID09PSAxID8gbm9kZS5hcHByb3ZlcnNbMF0uaW1nVXJsIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm5vZGUuYXBwcm92ZXJzLmxlbmd0aCA+IDEgPyBub2RlLmRlc2NyaXB0aW9uIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2lyY2xlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZkLWdyaWQtbGlzdC1pdGVtLWJvZHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFwcHJvdmFsRmxvd05vZGUuX25vZGVDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtZ3JpZC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZHAtYXBwcm92YWwtZmxvdy1ub2RlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZmlndXJlIGZkLWlsbHVzdHJhdGVkLW1lc3NhZ2UgdHlwZT1cInNwb3RcIiBbc3ZnQ29uZmlnXT1cIl9lbXB0eUFwcHJvdmFsRmxvd1Nwb3RDb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZpZ2NhcHRpb24gZmQtaWxsdXN0cmF0ZWQtbWVzc2FnZS1maWdjYXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGZkLWlsbHVzdHJhdGVkLW1lc3NhZ2UtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93LmVtcHR5VGl0bGUnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBmZC1pbGx1c3RyYXRlZC1tZXNzYWdlLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtQXBwcm92YWxGbG93LmVtcHR5SGludCcgfCBmZFRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2ZpZ2NhcHRpb24+XG4gICAgICAgICAgICAgICAgPC9maWd1cmU+XG4gICAgICAgICAgICAgICAgPCEtLSBUT0RPICM1MTc4OiBSZXBsYWNlIHdpdGggaWxsdXN0cmF0ZWQgaW1hZ2UgY29tcG9uZW50IGFmdGVyIGl0IGdldHMgZml4ZWQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUuZGlzcGxheV09XCInbm9uZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEyOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxMjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMjggMTI4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2FwSWxsdXMtU3BvdC1Ob0RhdGFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNDEuNjE3OSwzMi43MTc0SDg0LjYyNzNhMSwxLDAsMCwxLC43MjMuMzA5Mmw3LjI0NDUsNy41ODI0LDcuNDgxNyw3Ljg0OTFhMSwxLDAsMCwxLC4yNzYxLjY5bC0uMDA0Niw1NS42MDY5YTQuMTAzOCw0LjEwMzgsMCwwLDEtLjg3ODcsMi4xMjEyQTQuMDU2NCw0LjA1NjQsMCwwLDEsOTguMSwxMDcuOTYzMWwtNTYuMzg1OC4wMzEzYTIuNjE2NywyLjYxNjcsMCwwLDEtMy4wODEyLTMuMjMwOWwtLjAxNTItNjkuMDU5NFpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfUGF0dGVyblNoYWRvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19QYXR0ZXJuU2hhZG93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTM1Ljc5MjgsMjcuNDk4N0g3OC44MDIyYTEsMSwwLDAsMSwuNzIzLjMwOTJMODYuNzcsMzUuMzlsNy40ODE2LDcuODQ5MmExLDEsMCwwLDEsLjI3NjIuNjlsLS4wMDQ2LDU1LjYwNjlhMywzLDAsMCwxLTMsM0gzNS44MDhhMi45OTQ2LDIuOTk0NiwwLDAsMS0zLTIuOTkxM2MtLjAxLTEyLjA1NjQtLjA0MjMtNTcuMDExNi0uMDE1Mi02OS4wNTk1QTIuOTk0MywyLjk5NDMsMCwwLDEsMzUuNzkyOCwyNy40OTg3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19PYmplY3RGaWxsQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfT2JqZWN0RmlsbENvbG9yKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkzLjI5NzgsNDQuNTMzNUg3OC44MjA4YS45OTI1Ljk5MjUsMCwwLDEtLjk3NC0xLjAxVjI4LjUxMDhhLjk3Ljk3LDAsMCwxLDEuNjYyOC0uNzE0M0w5My45ODY1LDQyLjgwOTJBMS4wMTUxLDEuMDE1MSwwLDAsMSw5My4yOTc4LDQ0LjUzMzVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0JyYW5kQ29sb3JTZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZmlsbDogdmFyKC0tc2FwSWxsdXNfQnJhbmRDb2xvclNlY29uZGFyeSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMDQuNjA4LDM4Ljk0ODVsNS45MTU3LTEuNzcyMWMxLjMyLS4zOTU0Ljc1ODQtMi41MjU4LS41Njg5LTIuMTI4MkwxMDQuMDM5MiwzNi44MmMtMS4zMi4zOTUzLS43NTg0LDIuNTI1OC41Njg4LDIuMTI4MlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6IHZhcigtLXNhcElsbHVzX0xheWVyaW5nMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04NS4yOTczLDIxLjI0NjVsLjk3MTgtNS45MzMxYy4yMTU0LTEuMzE1MS0xLjc3Ny0xLjg4MDctMS45OTQxLS41NTU0bC0uOTcxOCw1LjkzMzJjLS4yMTU1LDEuMzE1MSwxLjc3NywxLjg4MDcsMS45OTQxLjU1NTNaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNhcElsbHVzX0xheWVyaW5nMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19MYXllcmluZzEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOTUuMzAzNCwyOS4wMDE1YTEuMDEsMS4wMSwwLDAsMS0uNjgzNy0uMjY3LDEuMDc4MywxLjA3ODMsMCwwLDEtLjA4NjQtMS40OTMybDUuOTUxMS02Ljg4NTdhMS4wMSwxLjAxLDAsMCwxLDEuNDUzOC0uMDg4NCwxLjA3ODUsMS4wNzg1LDAsMCwxLC4wODY1LDEuNDkzMmwtNS45NTExLDYuODg1OEExLjAxNjQsMS4wMTY0LDAsMCwxLDk1LjMwMzQsMjkuMDAxNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2FwSWxsdXNfTGF5ZXJpbmcxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZpbGw6IHZhcigtLXNhcElsbHVzX0xheWVyaW5nMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05NC44NzQ3LDQyLjg4NjEsODAuMDg1NSwyNy40NjIzYTEuNTE1MiwxLjUxNTIsMCwwLDAtMS4wODg1LS40NjM2SDM1LjgwN2EzLjUwOSwzLjUwOSwwLDAsMC0zLjUxNDYsMy40ODM2Yy0uMDI5NCwxMy4yODU3LjAxMzcsNjYuNzU1OS4wMTU3LDY5LjAyNTdhMy41MDc2LDMuNTA3NiwwLDAsMCwzLjUxNDYsMy40ODk0SDkxLjc3MDlhMy41MTA2LDMuNTEwNiwwLDAsMCwzLjUxNDYtMy40OTgybC4wMDUtNTUuNTc4NUExLjQ5LDEuNDksMCwwLDAsOTQuODc0Nyw0Mi44ODYxWm0tMTYuMjEtMTQuODM1NWExLjE1LDEuMTUsMCwwLDEsLjI1NjEtLjAzMDksMS4wNCwxLjA0LDAsMCwxLC41MS4yMTM0bDE0LjI3NiwxNC44ODM3LjAxOTQuMDJhLjU4OTEuNTg5MSwwLDAsMSwuMDk2OC42MjUxYy0uMTAxNi4xNzY0LS40MDg2LjI0LS42OS4yNEw3OC44MzU1LDQ0YS42MDMxLjYwMzEsMCwwLDEtLjU0NzItLjYxMzFjLS4wMDg3LTQuOTU4OC0uMDE3LTkuOTAxNS0uMDAzNS0xNC44Njg5QS41MTg5LjUxODksMCwwLDEsNzguNjY0NiwyOC4wNTA2Wm0xMy4xMDYyLDczLjk1SDM1LjgxODhhMi41MDQ1LDIuNTA0NSwwLDAsMS0yLjUxMDctMi40OTFjLS4wMDItMi4yNjk0LS4wNDUxLTU1Ljc0LS4wMTU3LTY5LjAyNDhhMi41MDU0LDIuNTA1NCwwLDAsMSwyLjUxMDctMi40ODYxSDc3LjM2ODRhMS40OSwxLjQ5LDAsMCwwLS4wOTc2LjUxMDZWNDMuNDkzNEExLjUxNDUsMS41MTQ1LDAsMCwwLDc4Ljc4OTQsNDVINzguOTJMOTQuMjg2LDQ3Ljk3NDlsLS4wMDQ2LDUxLjUyNjlBMi41MDc0LDIuNTA3NCwwLDAsMSw5MS43NzA4LDEwMi4wMDA2WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzYXBJbGx1c19TdHJva2VEZXRhaWxDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmaWxsOiB2YXIoLS1zYXBJbGx1c19TdHJva2VEZXRhaWxDb2xvcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L2ZkLWdyaWQtbGlzdD5cbiAgICBAaWYgKF9pc0VkaXRNb2RlKSB7XG4gICAgICAgIDxkaXYgZmQtYmFyPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1BcHByb3ZhbEZsb3cuZWRpdE1vZGVTYXZlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwiZW1waGFzaXplZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVNhdmVCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9zYXZlRWRpdE1vZGVDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybUFwcHJvdmFsRmxvdy5lZGl0TW9kZUV4aXRCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUV4aXRCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9leGl0RWRpdE1vZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvbmctY29udGFpbmVyPlxuIl19