verben-workflow-ui 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/workflow-designer/designer-canvas/designer-canvas.component.mjs +3 -3
- package/esm2022/lib/components/workflow-designer/stage-node/stage-node.component.mjs +9 -9
- package/esm2022/lib/components/workflow-designer/swimlane-dialog/swimlane-dialog.component.mjs +5 -1
- package/esm2022/lib/components/workflow-designer/workflow-designer.component.mjs +30 -4
- package/esm2022/lib/components/workflow-designer/workflow-designer.state.mjs +67 -142
- package/esm2022/lib/models/Workflow.mjs +1 -1
- package/esm2022/lib/services/http-web-request.service.mjs +2 -2
- package/fesm2022/verben-workflow-ui.mjs +109 -154
- package/fesm2022/verben-workflow-ui.mjs.map +1 -1
- package/lib/components/workflow-designer/stage-node/stage-node.component.d.ts +2 -2
- package/lib/components/workflow-designer/workflow-designer.component.d.ts +2 -1
- package/lib/components/workflow-designer/workflow-designer.state.d.ts +8 -0
- package/lib/models/Workflow.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Input, Output, signal, } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "../workflow-designer.state";
|
|
4
4
|
import * as i2 from "../workflow-data.service";
|
|
@@ -15,7 +15,7 @@ export class StageNodeComponent {
|
|
|
15
15
|
parallelExecutionToggled = new EventEmitter();
|
|
16
16
|
// Properties for icon click events
|
|
17
17
|
showFormPopup = false;
|
|
18
|
-
showShieldPopup = false;
|
|
18
|
+
showShieldPopup = signal(false);
|
|
19
19
|
showTimerPopup = false;
|
|
20
20
|
showActionPopupLeft = false;
|
|
21
21
|
showActionPopupRight = false;
|
|
@@ -102,11 +102,11 @@ export class StageNodeComponent {
|
|
|
102
102
|
event.stopPropagation();
|
|
103
103
|
}
|
|
104
104
|
// Toggle the shield popup
|
|
105
|
-
this.showShieldPopup
|
|
106
|
-
console.log('Shield popup toggled:', this.showShieldPopup, 'with data:', this.node.stageData);
|
|
105
|
+
this.showShieldPopup.update((show) => !show);
|
|
106
|
+
console.log('Shield popup toggled:', this.showShieldPopup(), 'with data:', this.node.stageData);
|
|
107
107
|
// Force change detection in case Angular isn't detecting the state change
|
|
108
108
|
setTimeout(() => {
|
|
109
|
-
if (this.showShieldPopup) {
|
|
109
|
+
if (this.showShieldPopup()) {
|
|
110
110
|
console.log('Shield popup should be visible now');
|
|
111
111
|
}
|
|
112
112
|
}, 0);
|
|
@@ -150,7 +150,7 @@ export class StageNodeComponent {
|
|
|
150
150
|
}
|
|
151
151
|
onStagePropertiesSaved(stageData) {
|
|
152
152
|
// Close the dialog
|
|
153
|
-
this.showShieldPopup
|
|
153
|
+
this.showShieldPopup.set(false);
|
|
154
154
|
// Emit the event to the parent component with the node id and updated data
|
|
155
155
|
this.stagePropertiesUpdated.emit({
|
|
156
156
|
nodeId: this.node.id,
|
|
@@ -159,11 +159,11 @@ export class StageNodeComponent {
|
|
|
159
159
|
console.log('Stage properties updated:', stageData);
|
|
160
160
|
}
|
|
161
161
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageNodeComponent, deps: [{ token: i1.WorkflowDesignerState }, { token: i2.WorkflowDataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
162
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StageNodeComponent, selector: "svg:g[lib-stage-node]", inputs: { node: "node", isStartNode: "isStartNode", stageData: "stageData" }, outputs: { stagePropertiesUpdated: "stagePropertiesUpdated", parallelExecutionToggled: "parallelExecutionToggled" }, ngImport: i0, template: "<svg:g>\n <!-- Stage node -->\n <svg:rect\n x=\"0\"\n y=\"0\"\n [attr.width]=\"node.width\"\n [attr.height]=\"node.height\"\n fill=\"none\"\n stroke=\"#D36CFF\"\n stroke-width=\"1\"\n ></svg:rect>\n\n <!-- Top-left icon: Stage form -->\n <svg:g\n (click)=\"toggleFormPopup($event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 6)\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\"\n />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g\n (click)=\"toggleShieldPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\"\n >\n <svg:path\n d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\"\n fill=\"black\"\n />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Left-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('left', $event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 38)\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('right', $event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g\n *ngIf=\"hasMultipleConnectedStages\"\n (click)=\"toggleCodePopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\"\n >\n <svg:text\n font-family=\"'Plus Jakarta Sans', sans-serif\"\n font-weight=\"500\"\n font-size=\"16px\"\n dominant-baseline=\"middle\"\n [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\"\n >\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g\n (click)=\"toggleTimerPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \"\n >\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text\n [attr.x]=\"node.width / 2\"\n [attr.y]=\"node.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"14\"\n fill=\"#000000\"\n >\n {{ node.stageData?.Name || \"Stage\" }}\n </svg:text>\n</svg:g>\n\n<lib-stage-dialog\n [visible]=\"showShieldPopup\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup
|
|
162
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StageNodeComponent, selector: "svg:g[lib-stage-node]", inputs: { node: "node", isStartNode: "isStartNode", stageData: "stageData" }, outputs: { stagePropertiesUpdated: "stagePropertiesUpdated", parallelExecutionToggled: "parallelExecutionToggled" }, ngImport: i0, template: "<svg:g>\n <!-- Stage node -->\n <svg:rect\n x=\"0\"\n y=\"0\"\n [attr.width]=\"node.width\"\n [attr.height]=\"node.height\"\n fill=\"none\"\n stroke=\"#D36CFF\"\n stroke-width=\"1\"\n ></svg:rect>\n\n <!-- Top-left icon: Stage form -->\n <svg:g\n (click)=\"toggleFormPopup($event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 6)\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\"\n />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g\n (click)=\"toggleShieldPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\"\n fill=\"black\"\n />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Left-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('left', $event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 38)\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('right', $event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g\n *ngIf=\"hasMultipleConnectedStages\"\n (click)=\"toggleCodePopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\"\n >\n <svg:text\n font-family=\"'Plus Jakarta Sans', sans-serif\"\n font-weight=\"500\"\n font-size=\"16px\"\n dominant-baseline=\"middle\"\n [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\"\n >\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g\n (click)=\"toggleTimerPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \"\n >\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text\n [attr.x]=\"node.width / 2\"\n [attr.y]=\"node.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"14\"\n fill=\"#000000\"\n >\n {{ node.stageData?.Name || \"Stage\" }}\n </svg:text>\n</svg:g>\n\n<lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog>\n\n<div\n *ngIf=\"showFormPopup\"\n [style.position]=\"'fixed'\"\n [style.left.px]=\"formPopupX\"\n [style.top.px]=\"formPopupY\"\n [style.background-color]=\"'white'\"\n>\n <verben-pop-Up [dropdownOpen]=\"true\" [customStyles]=\"{ 'z-index': '100' }\">\n <div dropdown-trigger style=\"display: none\">\n <!-- Hidden trigger element -->\n </div>\n <div\n class=\"p-3 bg-white border border-gray-200 rounded shadow-md w-64\"\n dropdown-content\n style=\"background-color: white; z-index: 1000\"\n >\n <h4 class=\"mb-2 font-medium\">Select Form</h4>\n <div *ngIf=\"isLoadingForms\" class=\"text-center py-2\">\n Loading forms...\n </div>\n <div *ngIf=\"!isLoadingForms\" class=\"max-h-48 overflow-y-auto\">\n <div class=\"mb-2\">\n <button\n class=\"w-full px-3 py-2 bg-white border border-gray-200 rounded text-sm hover:bg-gray-50 text-left\"\n (click)=\"selectForm(null)\"\n >\n Clear form selection\n </button>\n </div>\n <div *ngFor=\"let form of formsList\" class=\"mb-1\">\n <button\n class=\"w-full px-3 py-2 bg-white border border-gray-200 rounded text-sm hover:bg-gray-50 text-left\"\n (click)=\"selectForm(form)\"\n >\n {{ form.Name }}\n </button>\n </div>\n <div\n *ngIf=\"formsList.length === 0\"\n class=\"text-center py-2 text-gray-500\"\n >\n No forms available\n </div>\n </div>\n </div>\n </verben-pop-Up>\n</div>\n", styles: [".stage-icon{cursor:pointer}.stage-icon:hover path{fill:#d36cff}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave"], outputs: ["dropdownOpenChange", "close"] }, { kind: "component", type: i5.StageDialogComponent, selector: "lib-stage-dialog", inputs: ["visible", "stageData"], outputs: ["closed", "saved"] }] });
|
|
163
163
|
}
|
|
164
164
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StageNodeComponent, decorators: [{
|
|
165
165
|
type: Component,
|
|
166
|
-
args: [{ selector: 'svg:g[lib-stage-node]', template: "<svg:g>\n <!-- Stage node -->\n <svg:rect\n x=\"0\"\n y=\"0\"\n [attr.width]=\"node.width\"\n [attr.height]=\"node.height\"\n fill=\"none\"\n stroke=\"#D36CFF\"\n stroke-width=\"1\"\n ></svg:rect>\n\n <!-- Top-left icon: Stage form -->\n <svg:g\n (click)=\"toggleFormPopup($event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 6)\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\"\n />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g\n (click)=\"toggleShieldPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\"\n >\n <svg:path\n d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\"\n fill=\"black\"\n />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Left-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('left', $event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 38)\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('right', $event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g\n *ngIf=\"hasMultipleConnectedStages\"\n (click)=\"toggleCodePopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\"\n >\n <svg:text\n font-family=\"'Plus Jakarta Sans', sans-serif\"\n font-weight=\"500\"\n font-size=\"16px\"\n dominant-baseline=\"middle\"\n [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\"\n >\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g\n (click)=\"toggleTimerPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \"\n >\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text\n [attr.x]=\"node.width / 2\"\n [attr.y]=\"node.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"14\"\n fill=\"#000000\"\n >\n {{ node.stageData?.Name || \"Stage\" }}\n </svg:text>\n</svg:g>\n\n<lib-stage-dialog\n [visible]=\"showShieldPopup\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup
|
|
166
|
+
args: [{ selector: 'svg:g[lib-stage-node]', template: "<svg:g>\n <!-- Stage node -->\n <svg:rect\n x=\"0\"\n y=\"0\"\n [attr.width]=\"node.width\"\n [attr.height]=\"node.height\"\n fill=\"none\"\n stroke=\"#D36CFF\"\n stroke-width=\"1\"\n ></svg:rect>\n\n <!-- Top-left icon: Stage form -->\n <svg:g\n (click)=\"toggleFormPopup($event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 6)\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M16.5 20.475V17.475H13.5V16.475H16.5V13.475H17.5V16.475H20.5V17.475H17.5V20.475H16.5ZM3.5 17.5V16.5H4.5V17.5H3.5ZM6.5 17.5V16.5H11.517C11.5057 16.6767 11.5043 16.845 11.513 17.005C11.521 17.165 11.531 17.33 11.543 17.5H6.5ZM3.5 13.5V12.5H4.5V13.5H3.5ZM6.5 13.5V12.5H13.804C13.6127 12.6387 13.4333 12.7913 13.266 12.958C13.0993 13.1247 12.9377 13.3053 12.781 13.5H6.5ZM3.5 9.5V8.5H4.5V9.5H3.5ZM6.5 9.5V8.5H18.5V9.5H6.5ZM3.5 5.5V4.5H4.5V5.5H3.5ZM6.5 5.5V4.5H18.5V5.5H6.5Z\"\n [attr.fill]=\"node.stageData?.formId ? '#D36CFF' : 'black'\"\n />\n </svg:g>\n\n <!-- Top-right icon: Shield -->\n <svg:g\n (click)=\"toggleShieldPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 6)'\"\n >\n <!-- Transparent rectangle to capture clicks -->\n <svg:rect\n x=\"-2\"\n y=\"-2\"\n width=\"24\"\n height=\"24\"\n fill=\"transparent\"\n style=\"cursor: pointer\"\n />\n\n <svg:path\n d=\"M7.5 12H16.5V13.5H7.5V12ZM7.5 7.5H16.5V9H7.5V7.5Z\"\n fill=\"black\"\n />\n <svg:path\n d=\"M12 22.5L7.36801 20.0303C6.0474 19.3279 4.94303 18.2791 4.17348 16.9964C3.40393 15.7138 2.99825 14.2458 3.00001 12.75V3C3.00001 2.60218 3.15804 2.22064 3.43935 1.93934C3.72065 1.65804 4.10218 1.5 4.50001 1.5H19.5C19.8978 1.5 20.2794 1.65804 20.5607 1.93934C20.842 2.22064 21 2.60218 21 3V12.75C21.0018 14.2458 20.5961 15.7138 19.8265 16.9964C19.057 18.2791 17.9526 19.3279 16.632 20.0303L12 22.5ZM4.50001 3V12.75C4.49917 13.9738 4.83141 15.1747 5.46111 16.224C6.09082 17.2733 6.99423 18.1315 8.07451 18.7065L12 20.7997L15.9255 18.7073C17.0059 18.1322 17.9094 17.2739 18.5391 16.2244C19.1688 15.175 19.501 13.9739 19.5 12.75V3H4.50001Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Left-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('left', $event)\"\n class=\"stage-icon\"\n transform=\"translate(6, 38)\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Right-center icon: Thunderbolt -->\n <svg:g\n (click)=\"toggleActionPopup('right', $event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(' + (node.width - 30) + ', 38)'\"\n >\n <svg:path d=\"M11 15H6L13 1V9H18L11 23V15Z\" fill=\"black\" />\n </svg:g>\n\n <!-- Bottom-left icon: Double slash text -->\n <svg:g\n *ngIf=\"hasMultipleConnectedStages\"\n (click)=\"toggleCodePopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"'translate(6, ' + (node.height - 16) + ')'\"\n >\n <svg:text\n font-family=\"'Plus Jakarta Sans', sans-serif\"\n font-weight=\"500\"\n font-size=\"16px\"\n dominant-baseline=\"middle\"\n [attr.fill]=\"isParallelExecution ? '#D36CFF' : 'black'\"\n >\n //\n </svg:text>\n </svg:g>\n\n <!-- Bottom-right icon: Timer -->\n <svg:g\n (click)=\"toggleTimerPopup($event)\"\n class=\"stage-icon\"\n [attr.transform]=\"\n 'translate(' + (node.width - 30) + ', ' + (node.height - 30) + ')'\n \"\n >\n <svg:path\n d=\"M11.5 3C14.0196 3 16.4359 4.00089 18.2175 5.78249C19.9991 7.56408 21 9.98044 21 12.5C21 15.0196 19.9991 17.4359 18.2175 19.2175C16.4359 20.9991 14.0196 22 11.5 22C8.98044 22 6.56408 20.9991 4.78249 19.2175C3.00089 17.4359 2 15.0196 2 12.5C2 9.98044 3.00089 7.56408 4.78249 5.78249C6.56408 4.00089 8.98044 3 11.5 3ZM11.5 4C9.24566 4 7.08365 4.89553 5.48959 6.48959C3.89553 8.08365 3 10.2457 3 12.5C3 14.7543 3.89553 16.9163 5.48959 18.5104C7.08365 20.1045 9.24566 21 11.5 21C12.6162 21 13.7215 20.7801 14.7528 20.353C15.7841 19.9258 16.7211 19.2997 17.5104 18.5104C18.2997 17.7211 18.9258 16.7841 19.353 15.7528C19.7801 14.7215 20 13.6162 20 12.5C20 10.2457 19.1045 8.08365 17.5104 6.48959C15.9163 4.89553 13.7543 4 11.5 4ZM11 7H12V12.42L16.7 15.13L16.2 16L11 13V7Z\"\n fill=\"black\"\n />\n </svg:g>\n\n <!-- Label in the center -->\n <svg:text\n [attr.x]=\"node.width / 2\"\n [attr.y]=\"node.height / 2\"\n text-anchor=\"middle\"\n dominant-baseline=\"middle\"\n font-size=\"14\"\n fill=\"#000000\"\n >\n {{ node.stageData?.Name || \"Stage\" }}\n </svg:text>\n</svg:g>\n\n<lib-stage-dialog\n [visible]=\"showShieldPopup()\"\n [stageData]=\"node.stageData || {}\"\n (closed)=\"showShieldPopup.set(false)\"\n (saved)=\"onStagePropertiesSaved($event)\"\n></lib-stage-dialog>\n\n<div\n *ngIf=\"showFormPopup\"\n [style.position]=\"'fixed'\"\n [style.left.px]=\"formPopupX\"\n [style.top.px]=\"formPopupY\"\n [style.background-color]=\"'white'\"\n>\n <verben-pop-Up [dropdownOpen]=\"true\" [customStyles]=\"{ 'z-index': '100' }\">\n <div dropdown-trigger style=\"display: none\">\n <!-- Hidden trigger element -->\n </div>\n <div\n class=\"p-3 bg-white border border-gray-200 rounded shadow-md w-64\"\n dropdown-content\n style=\"background-color: white; z-index: 1000\"\n >\n <h4 class=\"mb-2 font-medium\">Select Form</h4>\n <div *ngIf=\"isLoadingForms\" class=\"text-center py-2\">\n Loading forms...\n </div>\n <div *ngIf=\"!isLoadingForms\" class=\"max-h-48 overflow-y-auto\">\n <div class=\"mb-2\">\n <button\n class=\"w-full px-3 py-2 bg-white border border-gray-200 rounded text-sm hover:bg-gray-50 text-left\"\n (click)=\"selectForm(null)\"\n >\n Clear form selection\n </button>\n </div>\n <div *ngFor=\"let form of formsList\" class=\"mb-1\">\n <button\n class=\"w-full px-3 py-2 bg-white border border-gray-200 rounded text-sm hover:bg-gray-50 text-left\"\n (click)=\"selectForm(form)\"\n >\n {{ form.Name }}\n </button>\n </div>\n <div\n *ngIf=\"formsList.length === 0\"\n class=\"text-center py-2 text-gray-500\"\n >\n No forms available\n </div>\n </div>\n </div>\n </verben-pop-Up>\n</div>\n", styles: [".stage-icon{cursor:pointer}.stage-icon:hover path{fill:#d36cff}\n"] }]
|
|
167
167
|
}], ctorParameters: () => [{ type: i1.WorkflowDesignerState }, { type: i2.WorkflowDataService }], propDecorators: { node: [{
|
|
168
168
|
type: Input
|
|
169
169
|
}], isStartNode: [{
|
|
@@ -175,4 +175,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
175
175
|
}], parallelExecutionToggled: [{
|
|
176
176
|
type: Output
|
|
177
177
|
}] } });
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2Utbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBWXZFLE1BQU0sT0FBTyxrQkFBa0I7SUE0Qm5CO0lBQ0E7SUE1QkQsSUFBSSxDQUFRO0lBQ1osV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixTQUFTLEdBQTJCLEVBQUUsQ0FBQztJQUN0QyxzQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFHL0MsQ0FBQztJQUNLLHdCQUF3QixHQUFHLElBQUksWUFBWSxFQUdqRCxDQUFDO0lBRUwsbUNBQW1DO0lBQ25DLGFBQWEsR0FBWSxLQUFLLENBQUM7SUFDL0IsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLG1CQUFtQixHQUFZLEtBQUssQ0FBQztJQUNyQyxvQkFBb0IsR0FBWSxLQUFLLENBQUM7SUFDdEMsYUFBYSxHQUFZLEtBQUssQ0FBQztJQUUvQixTQUFTLEdBQWlCLEVBQUUsQ0FBQztJQUM3QixjQUFjLEdBQVksS0FBSyxDQUFDO0lBRWhDLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUV2QixZQUNVLEtBQTRCLEVBQzVC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QUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztRQUVuRCxPQUFPLENBQUMsR0FBRyxDQUNULHNCQUNFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQ2pDLFlBQVksRUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLFNBQWlDO1FBQ3RELG1CQUFtQjtRQUNuQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU3QiwyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQztZQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQzt3R0FyTVUsa0JBQWtCOzRGQUFsQixrQkFBa0IsZ1FDWi9CLDB2TUF1S0E7OzRGRDNKYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsdUJBQXVCOzRIQUt4QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFJRyx3QkFBd0I7c0JBQWpDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJy4uL3dvcmtmbG93LWRlc2lnbmVyLnR5cGVzJztcbmltcG9ydCB7IFdvcmtmbG93U3RhZ2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvV29ya2Zsb3dTdGFnZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1FbnRpdHkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvRm9ybUVudGl0eSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N2ZzpnW2xpYi1zdGFnZS1ub2RlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGFnZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhZ2Utbm9kZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFN0YWdlTm9kZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIG5vZGUhOiBOb2RlO1xuICBASW5wdXQoKSBpc1N0YXJ0Tm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4gPSB7fTtcbiAgQE91dHB1dCgpIHN0YWdlUHJvcGVydGllc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT47XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSBwYXJhbGxlbEV4ZWN1dGlvblRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBzb3VyY2VOb2RlSWQ6IHN0cmluZztcbiAgICBpc1BhcmFsbGVsOiBib29sZWFuO1xuICB9PigpO1xuXG4gIC8vIFByb3BlcnRpZXMgZm9yIGljb24gY2xpY2sgZXZlbnRzXG4gIHNob3dGb3JtUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1NoaWVsZFBvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dUaW1lclBvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBY3Rpb25Qb3B1cExlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0FjdGlvblBvcHVwUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0NvZGVQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvcm1zTGlzdDogRm9ybUVudGl0eVtdID0gW107XG4gIGlzTG9hZGluZ0Zvcm1zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZm9ybVBvcHVwWDogbnVtYmVyID0gMDtcbiAgZm9ybVBvcHVwWTogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0YXRlOiBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogV29ya2Zsb3dEYXRhU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1N0YWdlIG5vZGUgaW5pdGlhbGl6ZWQgd2l0aDonLCB0aGlzLm5vZGUpO1xuICAgIHRoaXMudXBkYXRlQ29ubmVjdGVkU3RhZ2VzSW5mbygpO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGNoZWNrIGlmIHRoaXMgc3RhZ2UgaGFzIG11bHRpcGxlIG91dGdvaW5nIGNvbm5lY3Rpb25zIHRvIG90aGVyIHN0YWdlc1xuICB1cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk6IHZvaWQge1xuICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgY29ubmVjdGlvbnMgdGhhdCBjb25uZWN0IHRvIHN0YWdlc1xuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gdGhpcy5ub2RlLmlkXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgbm9kZXMgYXJlIHN0YWdlc1xuICAgIGNvbnN0IGNvbm5lY3RlZFN0YWdlTm9kZXMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zXG4gICAgICAubWFwKChjb25uKSA9PiB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCkpXG4gICAgICAuZmlsdGVyKChub2RlSW5mbykgPT4gbm9kZUluZm8gJiYgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnKTtcblxuICAgIHRoaXMubm9kZS5oYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcyA9IGNvbm5lY3RlZFN0YWdlTm9kZXMubGVuZ3RoID4gMTtcbiAgfVxuXG4gIGdldCBoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzUGFyYWxsZWxFeGVjdXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubm9kZS5zdGFnZURhdGE/Lmhhc1BhcmFsbGVsID09PSB0cnVlO1xuICB9XG5cbiAgc2VsZWN0Rm9ybShmb3JtOiBGb3JtRW50aXR5IHwgbnVsbCkge1xuICAgIC8vIElmIGZvcm0gaXMgbnVsbCwgd2UncmUgY2xlYXJpbmcgdGhlIHNlbGVjdGlvblxuICAgIGlmICghdGhpcy5ub2RlLnN0YWdlRGF0YSkge1xuICAgICAgdGhpcy5ub2RlLnN0YWdlRGF0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChmb3JtKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1JZCA9IGZvcm0uSWQ7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1OYW1lID0gZm9ybS5OYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDbGVhciBmb3JtIHNlbGVjdGlvblxuICAgICAgZGVsZXRlIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybUlkO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybU5hbWU7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIHBvcHVwXG4gICAgdGhpcy5zaG93Rm9ybVBvcHVwID0gZmFsc2U7XG5cbiAgICAvLyBFbWl0IGFuIGV2ZW50IHRvIHVwZGF0ZSB0aGUgc3RhZ2UgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiB0aGlzLm5vZGUuc3RhZ2VEYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlRm9ybVBvcHVwKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgcG9zaXRpb24gZm9yIHRoZSBwb3B1cFxuICAgICAgY29uc3QgcmVjdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLmZvcm1Qb3B1cFggPSByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgIHRoaXMuZm9ybVBvcHVwWSA9IHJlY3QudG9wICsgd2luZG93LnNjcm9sbFk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UncmUgb3BlbmluZyB0aGUgcG9wdXAsIGxvYWQgZm9ybXNcbiAgICBpZiAoIXRoaXMuc2hvd0Zvcm1Qb3B1cCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IHRydWU7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAgIC5nZXRGb3JtcygpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZm9ybXNMaXN0ID0gcmVzcG9uc2UuUmVzdWx0O1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgZm9ybXM6JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93Rm9ybVBvcHVwID0gIXRoaXMuc2hvd0Zvcm1Qb3B1cDtcbiAgfVxuXG4gIHRvZ2dsZVNoaWVsZFBvcHVwKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIC8vIFByZXZlbnQgdGhlIGV2ZW50IGZyb20gcHJvcGFnYXRpbmcgdG8gcGFyZW50IGVsZW1lbnRzXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHRoZSBzaGllbGQgcG9wdXBcbiAgICB0aGlzLnNob3dTaGllbGRQb3B1cCA9ICF0aGlzLnNob3dTaGllbGRQb3B1cDtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdTaGllbGQgcG9wdXAgdG9nZ2xlZDonLFxuICAgICAgdGhpcy5zaG93U2hpZWxkUG9wdXAsXG4gICAgICAnd2l0aCBkYXRhOicsXG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhXG4gICAgKTtcblxuICAgIC8vIEZvcmNlIGNoYW5nZSBkZXRlY3Rpb24gaW4gY2FzZSBBbmd1bGFyIGlzbid0IGRldGVjdGluZyB0aGUgc3RhdGUgY2hhbmdlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaG93U2hpZWxkUG9wdXApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1NoaWVsZCBwb3B1cCBzaG91bGQgYmUgdmlzaWJsZSBub3cnKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHRvZ2dsZVRpbWVyUG9wdXAoZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuc2hvd1RpbWVyUG9wdXAgPSAhdGhpcy5zaG93VGltZXJQb3B1cDtcbiAgfVxuXG4gIHRvZ2dsZUFjdGlvblBvcHVwKHNpZGU6ICdsZWZ0JyB8ICdyaWdodCcsIGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICBpZiAoc2lkZSA9PT0gJ2xlZnQnKSB7XG4gICAgICB0aGlzLnNob3dBY3Rpb25Qb3B1cExlZnQgPSAhdGhpcy5zaG93QWN0aW9uUG9wdXBMZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dBY3Rpb25Qb3B1cFJpZ2h0ID0gIXRoaXMuc2hvd0FjdGlvblBvcHVwUmlnaHQ7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQ29kZVBvcHVwKGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8vIFRvZ2dsZSBwYXJhbGxlbCBleGVjdXRpb24gc3RhdGVcbiAgICBjb25zdCBuZXdQYXJhbGxlbFN0YXRlID0gIXRoaXMuaXNQYXJhbGxlbEV4ZWN1dGlvbjtcblxuICAgIC8vIFVwZGF0ZSB0aGlzIG5vZGUncyBzdGFnZSBkYXRhXG4gICAgaWYgKCF0aGlzLm5vZGUuc3RhZ2VEYXRhKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhID0ge307XG4gICAgfVxuICAgIHRoaXMubm9kZS5zdGFnZURhdGEuaGFzUGFyYWxsZWwgPSBuZXdQYXJhbGxlbFN0YXRlO1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgUGFyYWxsZWwgZXhlY3V0aW9uICR7XG4gICAgICAgIG5ld1BhcmFsbGVsU3RhdGUgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnXG4gICAgICB9IGZvciBub2RlOmAsXG4gICAgICB0aGlzLm5vZGUuaWRcbiAgICApO1xuICB9XG5cbiAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciBjb25uZWN0aW9ucyBjaGFuZ2VcbiAgcmVmcmVzaFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ29ubmVjdGVkU3RhZ2VzSW5mbygpO1xuICB9XG5cbiAgb25TdGFnZVByb3BlcnRpZXNTYXZlZChzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4pIHtcbiAgICAvLyBDbG9zZSB0aGUgZGlhbG9nXG4gICAgdGhpcy5zaG93U2hpZWxkUG9wdXAgPSBmYWxzZTtcblxuICAgIC8vIEVtaXQgdGhlIGV2ZW50IHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHdpdGggdGhlIG5vZGUgaWQgYW5kIHVwZGF0ZWQgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiBzdGFnZURhdGEsXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygnU3RhZ2UgcHJvcGVydGllcyB1cGRhdGVkOicsIHN0YWdlRGF0YSk7XG4gIH1cbn1cbiIsIjxzdmc6Zz5cbiAgPCEtLSBTdGFnZSBub2RlIC0tPlxuICA8c3ZnOnJlY3RcbiAgICB4PVwiMFwiXG4gICAgeT1cIjBcIlxuICAgIFthdHRyLndpZHRoXT1cIm5vZGUud2lkdGhcIlxuICAgIFthdHRyLmhlaWdodF09XCJub2RlLmhlaWdodFwiXG4gICAgZmlsbD1cIm5vbmVcIlxuICAgIHN0cm9rZT1cIiNEMzZDRkZcIlxuICAgIHN0cm9rZS13aWR0aD1cIjFcIlxuICA+PC9zdmc6cmVjdD5cblxuICA8IS0tIFRvcC1sZWZ0IGljb246IFN0YWdlIGZvcm0gLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVGb3JtUG9wdXAoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJzdGFnZS1pY29uXCJcbiAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNiwgNilcIlxuICA+XG4gICAgPCEtLSBUcmFuc3BhcmVudCByZWN0YW5nbGUgdG8gY2FwdHVyZSBjbGlja3MgLS0+XG4gICAgPHN2ZzpyZWN0XG4gICAgICB4PVwiLTJcIlxuICAgICAgeT1cIi0yXCJcbiAgICAgIHdpZHRoPVwiMjRcIlxuICAgICAgaGVpZ2h0PVwiMjRcIlxuICAgICAgZmlsbD1cInRyYW5zcGFyZW50XCJcbiAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgICAvPlxuXG4gICAgPHN2ZzpwYXRoXG4gICAgICBkPVwiTTE2LjUgMjAuNDc1VjE3LjQ3NUgxMy41VjE2LjQ3NUgxNi41VjEzLjQ3NUgxNy41VjE2LjQ3NUgyMC41VjE3LjQ3NUgxNy41VjIwLjQ3NUgxNi41Wk0zLjUgMTcuNVYxNi41SDQuNVYxNy41SDMuNVpNNi41IDE3LjVWMTYuNUgxMS41MTdDMTEuNTA1NyAxNi42NzY3IDExLjUwNDMgMTYuODQ1IDExLjUxMyAxNy4wMDVDMTEuNTIxIDE3LjE2NSAxMS41MzEgMTcuMzMgMTEuNTQzIDE3LjVINi41Wk0zLjUgMTMuNVYxMi41SDQuNVYxMy41SDMuNVpNNi41IDEzLjVWMTIuNUgxMy44MDRDMTMuNjEyNyAxMi42Mzg3IDEzLjQzMzMgMTIuNzkxMyAxMy4yNjYgMTIuOTU4QzEzLjA5OTMgMTMuMTI0NyAxMi45Mzc3IDEzLjMwNTMgMTIuNzgxIDEzLjVINi41Wk0zLjUgOS41VjguNUg0LjVWOS41SDMuNVpNNi41IDkuNVY4LjVIMTguNVY5LjVINi41Wk0zLjUgNS41VjQuNUg0LjVWNS41SDMuNVpNNi41IDUuNVY0LjVIMTguNVY1LjVINi41WlwiXG4gICAgICBbYXR0ci5maWxsXT1cIm5vZGUuc3RhZ2VEYXRhPy5mb3JtSWQgPyAnI0QzNkNGRicgOiAnYmxhY2snXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gVG9wLXJpZ2h0IGljb246IFNoaWVsZCAtLT5cbiAgPHN2ZzpnXG4gICAgKGNsaWNrKT1cInRvZ2dsZVNoaWVsZFBvcHVwKCRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIChub2RlLndpZHRoIC0gMzApICsgJywgNiknXCJcbiAgPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk03LjUgMTJIMTYuNVYxMy41SDcuNVYxMlpNNy41IDcuNUgxNi41VjlINy41VjcuNVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAvPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMiAyMi41TDcuMzY4MDEgMjAuMDMwM0M2LjA0NzQgMTkuMzI3OSA0Ljk0MzAzIDE4LjI3OTEgNC4xNzM0OCAxNi45OTY0QzMuNDAzOTMgMTUuNzEzOCAyLjk5ODI1IDE0LjI0NTggMy4wMDAwMSAxMi43NVYzQzMuMDAwMDEgMi42MDIxOCAzLjE1ODA0IDIuMjIwNjQgMy40MzkzNSAxLjkzOTM0QzMuNzIwNjUgMS42NTgwNCA0LjEwMjE4IDEuNSA0LjUwMDAxIDEuNUgxOS41QzE5Ljg5NzggMS41IDIwLjI3OTQgMS42NTgwNCAyMC41NjA3IDEuOTM5MzRDMjAuODQyIDIuMjIwNjQgMjEgMi42MDIxOCAyMSAzVjEyLjc1QzIxLjAwMTggMTQuMjQ1OCAyMC41OTYxIDE1LjcxMzggMTkuODI2NSAxNi45OTY0QzE5LjA1NyAxOC4yNzkxIDE3Ljk1MjYgMTkuMzI3OSAxNi42MzIgMjAuMDMwM0wxMiAyMi41Wk00LjUwMDAxIDNWMTIuNzVDNC40OTkxNyAxMy45NzM4IDQuODMxNDEgMTUuMTc0NyA1LjQ2MTExIDE2LjIyNEM2LjA5MDgyIDE3LjI3MzMgNi45OTQyMyAxOC4xMzE1IDguMDc0NTEgMTguNzA2NUwxMiAyMC43OTk3TDE1LjkyNTUgMTguNzA3M0MxNy4wMDU5IDE4LjEzMjIgMTcuOTA5NCAxNy4yNzM5IDE4LjUzOTEgMTYuMjI0NEMxOS4xNjg4IDE1LjE3NSAxOS41MDEgMTMuOTczOSAxOS41IDEyLjc1VjNINC41MDAwMVpcIlxuICAgICAgZmlsbD1cImJsYWNrXCJcbiAgICAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gTGVmdC1jZW50ZXIgaWNvbjogVGh1bmRlcmJvbHQgLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVBY3Rpb25Qb3B1cCgnbGVmdCcsICRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDM4KVwiXG4gID5cbiAgICA8c3ZnOnBhdGggZD1cIk0xMSAxNUg2TDEzIDFWOUgxOEwxMSAyM1YxNVpcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gUmlnaHQtY2VudGVyIGljb246IFRodW5kZXJib2x0IC0tPlxuICA8c3ZnOmdcbiAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ3JpZ2h0JywgJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJzdGFnZS1pY29uXCJcbiAgICBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAzOCknXCJcbiAgPlxuICAgIDxzdmc6cGF0aCBkPVwiTTExIDE1SDZMMTMgMVY5SDE4TDExIDIzVjE1WlwiIGZpbGw9XCJibGFja1wiIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tbGVmdCBpY29uOiBEb3VibGUgc2xhc2ggdGV4dCAtLT5cbiAgPHN2ZzpnXG4gICAgKm5nSWY9XCJoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlc1wiXG4gICAgKGNsaWNrKT1cInRvZ2dsZUNvZGVQb3B1cCgkZXZlbnQpXCJcbiAgICBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKDYsICcgKyAobm9kZS5oZWlnaHQgLSAxNikgKyAnKSdcIlxuICA+XG4gICAgPHN2Zzp0ZXh0XG4gICAgICBmb250LWZhbWlseT1cIidQbHVzIEpha2FydGEgU2FucycsIHNhbnMtc2VyaWZcIlxuICAgICAgZm9udC13ZWlnaHQ9XCI1MDBcIlxuICAgICAgZm9udC1zaXplPVwiMTZweFwiXG4gICAgICBkb21pbmFudC1iYXNlbGluZT1cIm1pZGRsZVwiXG4gICAgICBbYXR0ci5maWxsXT1cImlzUGFyYWxsZWxFeGVjdXRpb24gPyAnI0QzNkNGRicgOiAnYmxhY2snXCJcbiAgICA+XG4gICAgICAvL1xuICAgIDwvc3ZnOnRleHQ+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBCb3R0b20tcmlnaHQgaWNvbjogVGltZXIgLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVUaW1lclBvcHVwKCRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIlxuICAgICAgJ3RyYW5zbGF0ZSgnICsgKG5vZGUud2lkdGggLSAzMCkgKyAnLCAnICsgKG5vZGUuaGVpZ2h0IC0gMzApICsgJyknXG4gICAgXCJcbiAgPlxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xMS41IDNDMTQuMDE5NiAzIDE2LjQzNTkgNC4wMDA4OSAxOC4yMTc1IDUuNzgyNDlDMTkuOTk5MSA3LjU2NDA4IDIxIDkuOTgwNDQgMjEgMTIuNUMyMSAxNS4wMTk2IDE5Ljk5OTEgMTcuNDM1OSAxOC4yMTc1IDE5LjIxNzVDMTYuNDM1OSAyMC45OTkxIDE0LjAxOTYgMjIgMTEuNSAyMkM4Ljk4MDQ0IDIyIDYuNTY0MDggMjAuOTk5MSA0Ljc4MjQ5IDE5LjIxNzVDMy4wMDA4OSAxNy40MzU5IDIgMTUuMDE5NiAyIDEyLjVDMiA5Ljk4MDQ0IDMuMDAwODkgNy41NjQwOCA0Ljc4MjQ5IDUuNzgyNDlDNi41NjQwOCA0LjAwMDg5IDguOTgwNDQgMyAxMS41IDNaTTExLjUgNEM5LjI0NTY2IDQgNy4wODM2NSA0Ljg5NTUzIDUuNDg5NTkgNi40ODk1OUMzLjg5NTUzIDguMDgzNjUgMyAxMC4yNDU3IDMgMTIuNUMzIDE0Ljc1NDMgMy44OTU1MyAxNi45MTYzIDUuNDg5NTkgMTguNTEwNEM3LjA4MzY1IDIwLjEwNDUgOS4yNDU2NiAyMSAxMS41IDIxQzEyLjYxNjIgMjEgMTMuNzIxNSAyMC43ODAxIDE0Ljc1MjggMjAuMzUzQzE1Ljc4NDEgMTkuOTI1OCAxNi43MjExIDE5LjI5OTcgMTcuNTEwNCAxOC41MTA0QzE4LjI5OTcgMTcuNzIxMSAxOC45MjU4IDE2Ljc4NDEgMTkuMzUzIDE1Ljc1MjhDMTkuNzgwMSAxNC43MjE1IDIwIDEzLjYxNjIgMjAgMTIuNUMyMCAxMC4yNDU3IDE5LjEwNDUgOC4wODM2NSAxNy41MTA0IDYuNDg5NTlDMTUuOTE2MyA0Ljg5NTUzIDEzLjc1NDMgNCAxMS41IDRaTTExIDdIMTJWMTIuNDJMMTYuNyAxNS4xM0wxNi4yIDE2TDExIDEzVjdaXCJcbiAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIExhYmVsIGluIHRoZSBjZW50ZXIgLS0+XG4gIDxzdmc6dGV4dFxuICAgIFthdHRyLnhdPVwibm9kZS53aWR0aCAvIDJcIlxuICAgIFthdHRyLnldPVwibm9kZS5oZWlnaHQgLyAyXCJcbiAgICB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiXG4gICAgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgIGZvbnQtc2l6ZT1cIjE0XCJcbiAgICBmaWxsPVwiIzAwMDAwMFwiXG4gID5cbiAgICB7eyBub2RlLnN0YWdlRGF0YT8uTmFtZSB8fCBcIlN0YWdlXCIgfX1cbiAgPC9zdmc6dGV4dD5cbjwvc3ZnOmc+XG5cbjxsaWItc3RhZ2UtZGlhbG9nXG4gIFt2aXNpYmxlXT1cInNob3dTaGllbGRQb3B1cFwiXG4gIFtzdGFnZURhdGFdPVwibm9kZS5zdGFnZURhdGEgfHwge31cIlxuICAoY2xvc2VkKT1cInNob3dTaGllbGRQb3B1cCA9IGZhbHNlXCJcbiAgKHNhdmVkKT1cIm9uU3RhZ2VQcm9wZXJ0aWVzU2F2ZWQoJGV2ZW50KVwiXG4+PC9saWItc3RhZ2UtZGlhbG9nPlxuXG48ZGl2XG4gICpuZ0lmPVwic2hvd0Zvcm1Qb3B1cFwiXG4gIFtzdHlsZS5wb3NpdGlvbl09XCInZml4ZWQnXCJcbiAgW3N0eWxlLmxlZnQucHhdPVwiZm9ybVBvcHVwWFwiXG4gIFtzdHlsZS50b3AucHhdPVwiZm9ybVBvcHVwWVwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid3aGl0ZSdcIlxuPlxuICA8dmVyYmVuLXBvcC1VcCBbZHJvcGRvd25PcGVuXT1cInRydWVcIiBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnMTAwJyB9XCI+XG4gICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgPCEtLSBIaWRkZW4gdHJpZ2dlciBlbGVtZW50IC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicC0zIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBzaGFkb3ctbWQgdy02NFwiXG4gICAgICBkcm9wZG93bi1jb250ZW50XG4gICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB6LWluZGV4OiAxMDAwXCJcbiAgICA+XG4gICAgICA8aDQgY2xhc3M9XCJtYi0yIGZvbnQtbWVkaXVtXCI+U2VsZWN0IEZvcm08L2g0PlxuICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ0Zvcm1zXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yXCI+XG4gICAgICAgIExvYWRpbmcgZm9ybXMuLi5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdGb3Jtc1wiIGNsYXNzPVwibWF4LWgtNDggb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGb3JtKG51bGwpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBDbGVhciBmb3JtIHNlbGVjdGlvblxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZm9ybSBvZiBmb3Jtc0xpc3RcIiBjbGFzcz1cIm1iLTFcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC0zIHB5LTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEZvcm0oZm9ybSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm0uTmFtZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiZm9ybXNMaXN0Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yIHRleHQtZ3JheS01MDBcIlxuICAgICAgICA+XG4gICAgICAgICAgTm8gZm9ybXMgYXZhaWxhYmxlXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvdmVyYmVuLXBvcC1VcD5cbjwvZGl2PlxuIl19
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2Utbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N0YWdlLW5vZGUvc3RhZ2Utbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVl2QixNQUFNLE9BQU8sa0JBQWtCO0lBNEJuQjtJQUNBO0lBNUJELElBQUksQ0FBUTtJQUNaLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0IsU0FBUyxHQUEyQixFQUFFLENBQUM7SUFDdEMsc0JBQXNCLEdBQUcsSUFBSSxZQUFZLEVBRy9DLENBQUM7SUFDSyx3QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFHakQsQ0FBQztJQUVMLG1DQUFtQztJQUNuQyxhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLGVBQWUsR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pELGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsbUJBQW1CLEdBQVksS0FBSyxDQUFDO0lBQ3JDLG9CQUFvQixHQUFZLEtBQUssQ0FBQztJQUN0QyxhQUFhLEdBQVksS0FBSyxDQUFDO0lBRS9CLFNBQVMsR0FBaUIsRUFBRSxDQUFDO0lBQzdCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsVUFBVSxHQUFXLENBQUMsQ0FBQztJQUN2QixVQUFVLEdBQVcsQ0FBQyxD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QUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztRQUVuRCxPQUFPLENBQUMsR0FBRyxDQUNULHNCQUNFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQ2pDLFlBQVksRUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLFNBQWlDO1FBQ3RELG1CQUFtQjtRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVoQywyRUFBMkU7UUFDM0UsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQztZQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQzt3R0FyTVUsa0JBQWtCOzRGQUFsQixrQkFBa0IsZ1FDbkIvQixvOU1BaUxBOzs0RkQ5SmEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLHVCQUF1Qjs0SEFLeEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBSUcsd0JBQXdCO3NCQUFqQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJy4uL3dvcmtmbG93LWRlc2lnbmVyLnR5cGVzJztcbmltcG9ydCB7IFdvcmtmbG93U3RhZ2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvV29ya2Zsb3dTdGFnZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBXb3JrZmxvd0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1FbnRpdHkgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvRm9ybUVudGl0eSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N2ZzpnW2xpYi1zdGFnZS1ub2RlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGFnZS1ub2RlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3RhZ2Utbm9kZS5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFN0YWdlTm9kZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIG5vZGUhOiBOb2RlO1xuICBASW5wdXQoKSBpc1N0YXJ0Tm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4gPSB7fTtcbiAgQE91dHB1dCgpIHN0YWdlUHJvcGVydGllc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBub2RlSWQ6IHN0cmluZztcbiAgICBzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT47XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSBwYXJhbGxlbEV4ZWN1dGlvblRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBzb3VyY2VOb2RlSWQ6IHN0cmluZztcbiAgICBpc1BhcmFsbGVsOiBib29sZWFuO1xuICB9PigpO1xuXG4gIC8vIFByb3BlcnRpZXMgZm9yIGljb24gY2xpY2sgZXZlbnRzXG4gIHNob3dGb3JtUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1NoaWVsZFBvcHVwOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbChmYWxzZSk7XG4gIHNob3dUaW1lclBvcHVwOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBY3Rpb25Qb3B1cExlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0FjdGlvblBvcHVwUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0NvZGVQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvcm1zTGlzdDogRm9ybUVudGl0eVtdID0gW107XG4gIGlzTG9hZGluZ0Zvcm1zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZm9ybVBvcHVwWDogbnVtYmVyID0gMDtcbiAgZm9ybVBvcHVwWTogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0YXRlOiBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogV29ya2Zsb3dEYXRhU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1N0YWdlIG5vZGUgaW5pdGlhbGl6ZWQgd2l0aDonLCB0aGlzLm5vZGUpO1xuICAgIHRoaXMudXBkYXRlQ29ubmVjdGVkU3RhZ2VzSW5mbygpO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGNoZWNrIGlmIHRoaXMgc3RhZ2UgaGFzIG11bHRpcGxlIG91dGdvaW5nIGNvbm5lY3Rpb25zIHRvIG90aGVyIHN0YWdlc1xuICB1cGRhdGVDb25uZWN0ZWRTdGFnZXNJbmZvKCk6IHZvaWQge1xuICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgY29ubmVjdGlvbnMgdGhhdCBjb25uZWN0IHRvIHN0YWdlc1xuICAgIGNvbnN0IG91dGdvaW5nQ29ubmVjdGlvbnMgPSB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zLmZpbHRlcihcbiAgICAgIChjb25uKSA9PiBjb25uLnNvdXJjZU5vZGVJZCA9PT0gdGhpcy5ub2RlLmlkXG4gICAgKTtcblxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgbm9kZXMgYXJlIHN0YWdlc1xuICAgIGNvbnN0IGNvbm5lY3RlZFN0YWdlTm9kZXMgPSBvdXRnb2luZ0Nvbm5lY3Rpb25zXG4gICAgICAubWFwKChjb25uKSA9PiB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChjb25uLnRhcmdldE5vZGVJZCkpXG4gICAgICAuZmlsdGVyKChub2RlSW5mbykgPT4gbm9kZUluZm8gJiYgbm9kZUluZm8ubm9kZS50eXBlID09PSAnc3RhZ2UnKTtcblxuICAgIHRoaXMubm9kZS5oYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcyA9IGNvbm5lY3RlZFN0YWdlTm9kZXMubGVuZ3RoID4gMTtcbiAgfVxuXG4gIGdldCBoYXNNdWx0aXBsZUNvbm5lY3RlZFN0YWdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlLmhhc011bHRpcGxlQ29ubmVjdGVkU3RhZ2VzID09PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzUGFyYWxsZWxFeGVjdXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubm9kZS5zdGFnZURhdGE/Lmhhc1BhcmFsbGVsID09PSB0cnVlO1xuICB9XG5cbiAgc2VsZWN0Rm9ybShmb3JtOiBGb3JtRW50aXR5IHwgbnVsbCkge1xuICAgIC8vIElmIGZvcm0gaXMgbnVsbCwgd2UncmUgY2xlYXJpbmcgdGhlIHNlbGVjdGlvblxuICAgIGlmICghdGhpcy5ub2RlLnN0YWdlRGF0YSkge1xuICAgICAgdGhpcy5ub2RlLnN0YWdlRGF0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmIChmb3JtKSB7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1JZCA9IGZvcm0uSWQ7XG4gICAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhLmZvcm1OYW1lID0gZm9ybS5OYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDbGVhciBmb3JtIHNlbGVjdGlvblxuICAgICAgZGVsZXRlIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybUlkO1xuICAgICAgZGVsZXRlIHRoaXMubm9kZS5zdGFnZURhdGEuZm9ybU5hbWU7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIHBvcHVwXG4gICAgdGhpcy5zaG93Rm9ybVBvcHVwID0gZmFsc2U7XG5cbiAgICAvLyBFbWl0IGFuIGV2ZW50IHRvIHVwZGF0ZSB0aGUgc3RhZ2UgZGF0YVxuICAgIHRoaXMuc3RhZ2VQcm9wZXJ0aWVzVXBkYXRlZC5lbWl0KHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlLmlkLFxuICAgICAgc3RhZ2VEYXRhOiB0aGlzLm5vZGUuc3RhZ2VEYXRhLFxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlRm9ybVBvcHVwKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYWJzb2x1dGUgcG9zaXRpb24gZm9yIHRoZSBwb3B1cFxuICAgICAgY29uc3QgcmVjdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLmZvcm1Qb3B1cFggPSByZWN0LmxlZnQgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgIHRoaXMuZm9ybVBvcHVwWSA9IHJlY3QudG9wICsgd2luZG93LnNjcm9sbFk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UncmUgb3BlbmluZyB0aGUgcG9wdXAsIGxvYWQgZm9ybXNcbiAgICBpZiAoIXRoaXMuc2hvd0Zvcm1Qb3B1cCkge1xuICAgICAgdGhpcy5pc0xvYWRpbmdGb3JtcyA9IHRydWU7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAgIC5nZXRGb3JtcygpXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuZm9ybXNMaXN0ID0gcmVzcG9uc2UuUmVzdWx0O1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgZm9ybXM6JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nRm9ybXMgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93Rm9ybVBvcHVwID0gIXRoaXMuc2hvd0Zvcm1Qb3B1cDtcbiAgfVxuXG4gIHRvZ2dsZVNoaWVsZFBvcHVwKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIC8vIFByZXZlbnQgdGhlIGV2ZW50IGZyb20gcHJvcGFnYXRpbmcgdG8gcGFyZW50IGVsZW1lbnRzXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLy8gVG9nZ2xlIHRoZSBzaGllbGQgcG9wdXBcbiAgICB0aGlzLnNob3dTaGllbGRQb3B1cC51cGRhdGUoKHNob3cpID0+ICFzaG93KTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdTaGllbGQgcG9wdXAgdG9nZ2xlZDonLFxuICAgICAgdGhpcy5zaG93U2hpZWxkUG9wdXAoKSxcbiAgICAgICd3aXRoIGRhdGE6JyxcbiAgICAgIHRoaXMubm9kZS5zdGFnZURhdGFcbiAgICApO1xuXG4gICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiBpbiBjYXNlIEFuZ3VsYXIgaXNuJ3QgZGV0ZWN0aW5nIHRoZSBzdGF0ZSBjaGFuZ2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNob3dTaGllbGRQb3B1cCgpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTaGllbGQgcG9wdXAgc2hvdWxkIGJlIHZpc2libGUgbm93Jyk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICB0b2dnbGVUaW1lclBvcHVwKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLnNob3dUaW1lclBvcHVwID0gIXRoaXMuc2hvd1RpbWVyUG9wdXA7XG4gIH1cblxuICB0b2dnbGVBY3Rpb25Qb3B1cChzaWRlOiAnbGVmdCcgfCAncmlnaHQnLCBldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gICAgaWYgKHNpZGUgPT09ICdsZWZ0Jykge1xuICAgICAgdGhpcy5zaG93QWN0aW9uUG9wdXBMZWZ0ID0gIXRoaXMuc2hvd0FjdGlvblBvcHVwTGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QWN0aW9uUG9wdXBSaWdodCA9ICF0aGlzLnNob3dBY3Rpb25Qb3B1cFJpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUNvZGVQb3B1cChldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICAvLyBUb2dnbGUgcGFyYWxsZWwgZXhlY3V0aW9uIHN0YXRlXG4gICAgY29uc3QgbmV3UGFyYWxsZWxTdGF0ZSA9ICF0aGlzLmlzUGFyYWxsZWxFeGVjdXRpb247XG5cbiAgICAvLyBVcGRhdGUgdGhpcyBub2RlJ3Mgc3RhZ2UgZGF0YVxuICAgIGlmICghdGhpcy5ub2RlLnN0YWdlRGF0YSkge1xuICAgICAgdGhpcy5ub2RlLnN0YWdlRGF0YSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLm5vZGUuc3RhZ2VEYXRhLmhhc1BhcmFsbGVsID0gbmV3UGFyYWxsZWxTdGF0ZTtcblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFBhcmFsbGVsIGV4ZWN1dGlvbiAke1xuICAgICAgICBuZXdQYXJhbGxlbFN0YXRlID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ1xuICAgICAgfSBmb3Igbm9kZTpgLFxuICAgICAgdGhpcy5ub2RlLmlkXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgY29ubmVjdGlvbnMgY2hhbmdlXG4gIHJlZnJlc2hTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvbm5lY3RlZFN0YWdlc0luZm8oKTtcbiAgfVxuXG4gIG9uU3RhZ2VQcm9wZXJ0aWVzU2F2ZWQoc3RhZ2VEYXRhOiBQYXJ0aWFsPFdvcmtmbG93U3RhZ2U+KSB7XG4gICAgLy8gQ2xvc2UgdGhlIGRpYWxvZ1xuICAgIHRoaXMuc2hvd1NoaWVsZFBvcHVwLnNldChmYWxzZSk7XG5cbiAgICAvLyBFbWl0IHRoZSBldmVudCB0byB0aGUgcGFyZW50IGNvbXBvbmVudCB3aXRoIHRoZSBub2RlIGlkIGFuZCB1cGRhdGVkIGRhdGFcbiAgICB0aGlzLnN0YWdlUHJvcGVydGllc1VwZGF0ZWQuZW1pdCh7XG4gICAgICBub2RlSWQ6IHRoaXMubm9kZS5pZCxcbiAgICAgIHN0YWdlRGF0YTogc3RhZ2VEYXRhLFxuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coJ1N0YWdlIHByb3BlcnRpZXMgdXBkYXRlZDonLCBzdGFnZURhdGEpO1xuICB9XG59XG4iLCI8c3ZnOmc+XG4gIDwhLS0gU3RhZ2Ugbm9kZSAtLT5cbiAgPHN2ZzpyZWN0XG4gICAgeD1cIjBcIlxuICAgIHk9XCIwXCJcbiAgICBbYXR0ci53aWR0aF09XCJub2RlLndpZHRoXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwibm9kZS5oZWlnaHRcIlxuICAgIGZpbGw9XCJub25lXCJcbiAgICBzdHJva2U9XCIjRDM2Q0ZGXCJcbiAgICBzdHJva2Utd2lkdGg9XCIxXCJcbiAgPjwvc3ZnOnJlY3Q+XG5cbiAgPCEtLSBUb3AtbGVmdCBpY29uOiBTdGFnZSBmb3JtIC0tPlxuICA8c3ZnOmdcbiAgICAoY2xpY2spPVwidG9nZ2xlRm9ybVBvcHVwKCRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDYsIDYpXCJcbiAgPlxuICAgIDwhLS0gVHJhbnNwYXJlbnQgcmVjdGFuZ2xlIHRvIGNhcHR1cmUgY2xpY2tzIC0tPlxuICAgIDxzdmc6cmVjdFxuICAgICAgeD1cIi0yXCJcbiAgICAgIHk9XCItMlwiXG4gICAgICB3aWR0aD1cIjI0XCJcbiAgICAgIGhlaWdodD1cIjI0XCJcbiAgICAgIGZpbGw9XCJ0cmFuc3BhcmVudFwiXG4gICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXG4gICAgLz5cblxuICAgIDxzdmc6cGF0aFxuICAgICAgZD1cIk0xNi41IDIwLjQ3NVYxNy40NzVIMTMuNVYxNi40NzVIMTYuNVYxMy40NzVIMTcuNVYxNi40NzVIMjAuNVYxNy40NzVIMTcuNVYyMC40NzVIMTYuNVpNMy41IDE3LjVWMTYuNUg0LjVWMTcuNUgzLjVaTTYuNSAxNy41VjE2LjVIMTEuNTE3QzExLjUwNTcgMTYuNjc2NyAxMS41MDQzIDE2Ljg0NSAxMS41MTMgMTcuMDA1QzExLjUyMSAxNy4xNjUgMTEuNTMxIDE3LjMzIDExLjU0MyAxNy41SDYuNVpNMy41IDEzLjVWMTIuNUg0LjVWMTMuNUgzLjVaTTYuNSAxMy41VjEyLjVIMTMuODA0QzEzLjYxMjcgMTIuNjM4NyAxMy40MzMzIDEyLjc5MTMgMTMuMjY2IDEyLjk1OEMxMy4wOTkzIDEzLjEyNDcgMTIuOTM3NyAxMy4zMDUzIDEyLjc4MSAxMy41SDYuNVpNMy41IDkuNVY4LjVINC41VjkuNUgzLjVaTTYuNSA5LjVWOC41SDE4LjVWOS41SDYuNVpNMy41IDUuNVY0LjVINC41VjUuNUgzLjVaTTYuNSA1LjVWNC41SDE4LjVWNS41SDYuNVpcIlxuICAgICAgW2F0dHIuZmlsbF09XCJub2RlLnN0YWdlRGF0YT8uZm9ybUlkID8gJyNEMzZDRkYnIDogJ2JsYWNrJ1wiXG4gICAgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIFRvcC1yaWdodCBpY29uOiBTaGllbGQgLS0+XG4gIDxzdmc6Z1xuICAgIChjbGljayk9XCJ0b2dnbGVTaGllbGRQb3B1cCgkZXZlbnQpXCJcbiAgICBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCIndHJhbnNsYXRlKCcgKyAobm9kZS53aWR0aCAtIDMwKSArICcsIDYpJ1wiXG4gID5cbiAgICA8IS0tIFRyYW5zcGFyZW50IHJlY3RhbmdsZSB0byBjYXB0dXJlIGNsaWNrcyAtLT5cbiAgICA8c3ZnOnJlY3RcbiAgICAgIHg9XCItMlwiXG4gICAgICB5PVwiLTJcIlxuICAgICAgd2lkdGg9XCIyNFwiXG4gICAgICBoZWlnaHQ9XCIyNFwiXG4gICAgICBmaWxsPVwidHJhbnNwYXJlbnRcIlxuICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxuICAgIC8+XG5cbiAgICA8c3ZnOnBhdGhcbiAgICAgIGQ9XCJNNy41IDEySDE2LjVWMTMuNUg3LjVWMTJaTTcuNSA3LjVIMTYuNVY5SDcuNVY3LjVaXCJcbiAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgLz5cbiAgICA8c3ZnOnBhdGhcbiAgICAgIGQ9XCJNMTIgMjIuNUw3LjM2ODAxIDIwLjAzMDNDNi4wNDc0IDE5LjMyNzkgNC45NDMwMyAxOC4yNzkxIDQuMTczNDggMTYuOTk2NEMzLjQwMzkzIDE1LjcxMzggMi45OTgyNSAxNC4yNDU4IDMuMDAwMDEgMTIuNzVWM0MzLjAwMDAxIDIuNjAyMTggMy4xNTgwNCAyLjIyMDY0IDMuNDM5MzUgMS45MzkzNEMzLjcyMDY1IDEuNjU4MDQgNC4xMDIxOCAxLjUgNC41MDAwMSAxLjVIMTkuNUMxOS44OTc4IDEuNSAyMC4yNzk0IDEuNjU4MDQgMjAuNTYwNyAxLjkzOTM0QzIwLjg0MiAyLjIyMDY0IDIxIDIuNjAyMTggMjEgM1YxMi43NUMyMS4wMDE4IDE0LjI0NTggMjAuNTk2MSAxNS43MTM4IDE5LjgyNjUgMTYuOTk2NEMxOS4wNTcgMTguMjc5MSAxNy45NTI2IDE5LjMyNzkgMTYuNjMyIDIwLjAzMDNMMTIgMjIuNVpNNC41MDAwMSAzVjEyLjc1QzQuNDk5MTcgMTMuOTczOCA0LjgzMTQxIDE1LjE3NDcgNS40NjExMSAxNi4yMjRDNi4wOTA4MiAxNy4yNzMzIDYuOTk0MjMgMTguMTMxNSA4LjA3NDUxIDE4LjcwNjVMMTIgMjAuNzk5N0wxNS45MjU1IDE4LjcwNzNDMTcuMDA1OSAxOC4xMzIyIDE3LjkwOTQgMTcuMjczOSAxOC41MzkxIDE2LjIyNDRDMTkuMTY4OCAxNS4xNzUgMTkuNTAxIDEzLjk3MzkgMTkuNSAxMi43NVYzSDQuNTAwMDFaXCJcbiAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIExlZnQtY2VudGVyIGljb246IFRodW5kZXJib2x0IC0tPlxuICA8c3ZnOmdcbiAgICAoY2xpY2spPVwidG9nZ2xlQWN0aW9uUG9wdXAoJ2xlZnQnLCAkZXZlbnQpXCJcbiAgICBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg2LCAzOClcIlxuICA+XG4gICAgPHN2ZzpwYXRoIGQ9XCJNMTEgMTVINkwxMyAxVjlIMThMMTEgMjNWMTVaXCIgZmlsbD1cImJsYWNrXCIgLz5cbiAgPC9zdmc6Zz5cblxuICA8IS0tIFJpZ2h0LWNlbnRlciBpY29uOiBUaHVuZGVyYm9sdCAtLT5cbiAgPHN2ZzpnXG4gICAgKGNsaWNrKT1cInRvZ2dsZUFjdGlvblBvcHVwKCdyaWdodCcsICRldmVudClcIlxuICAgIGNsYXNzPVwic3RhZ2UtaWNvblwiXG4gICAgW2F0dHIudHJhbnNmb3JtXT1cIid0cmFuc2xhdGUoJyArIChub2RlLndpZHRoIC0gMzApICsgJywgMzgpJ1wiXG4gID5cbiAgICA8c3ZnOnBhdGggZD1cIk0xMSAxNUg2TDEzIDFWOUgxOEwxMSAyM1YxNVpcIiBmaWxsPVwiYmxhY2tcIiAvPlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gQm90dG9tLWxlZnQgaWNvbjogRG91YmxlIHNsYXNoIHRleHQgLS0+XG4gIDxzdmc6Z1xuICAgICpuZ0lmPVwiaGFzTXVsdGlwbGVDb25uZWN0ZWRTdGFnZXNcIlxuICAgIChjbGljayk9XCJ0b2dnbGVDb2RlUG9wdXAoJGV2ZW50KVwiXG4gICAgY2xhc3M9XCJzdGFnZS1pY29uXCJcbiAgICBbYXR0ci50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZSg2LCAnICsgKG5vZGUuaGVpZ2h0IC0gMTYpICsgJyknXCJcbiAgPlxuICAgIDxzdmc6dGV4dFxuICAgICAgZm9udC1mYW1pbHk9XCInUGx1cyBKYWthcnRhIFNhbnMnLCBzYW5zLXNlcmlmXCJcbiAgICAgIGZvbnQtd2VpZ2h0PVwiNTAwXCJcbiAgICAgIGZvbnQtc2l6ZT1cIjE2cHhcIlxuICAgICAgZG9taW5hbnQtYmFzZWxpbmU9XCJtaWRkbGVcIlxuICAgICAgW2F0dHIuZmlsbF09XCJpc1BhcmFsbGVsRXhlY3V0aW9uID8gJyNEMzZDRkYnIDogJ2JsYWNrJ1wiXG4gICAgPlxuICAgICAgLy9cbiAgICA8L3N2Zzp0ZXh0PlxuICA8L3N2ZzpnPlxuXG4gIDwhLS0gQm90dG9tLXJpZ2h0IGljb246IFRpbWVyIC0tPlxuICA8c3ZnOmdcbiAgICAoY2xpY2spPVwidG9nZ2xlVGltZXJQb3B1cCgkZXZlbnQpXCJcbiAgICBjbGFzcz1cInN0YWdlLWljb25cIlxuICAgIFthdHRyLnRyYW5zZm9ybV09XCJcbiAgICAgICd0cmFuc2xhdGUoJyArIChub2RlLndpZHRoIC0gMzApICsgJywgJyArIChub2RlLmhlaWdodCAtIDMwKSArICcpJ1xuICAgIFwiXG4gID5cbiAgICA8c3ZnOnBhdGhcbiAgICAgIGQ9XCJNMTEuNSAzQzE0LjAxOTYgMyAxNi40MzU5IDQuMDAwODkgMTguMjE3NSA1Ljc4MjQ5QzE5Ljk5OTEgNy41NjQwOCAyMSA5Ljk4MDQ0IDIxIDEyLjVDMjEgMTUuMDE5NiAxOS45OTkxIDE3LjQzNTkgMTguMjE3NSAxOS4yMTc1QzE2LjQzNTkgMjAuOTk5MSAxNC4wMTk2IDIyIDExLjUgMjJDOC45ODA0NCAyMiA2LjU2NDA4IDIwLjk5OTEgNC43ODI0OSAxOS4yMTc1QzMuMDAwODkgMTcuNDM1OSAyIDE1LjAxOTYgMiAxMi41QzIgOS45ODA0NCAzLjAwMDg5IDcuNTY0MDggNC43ODI0OSA1Ljc4MjQ5QzYuNTY0MDggNC4wMDA4OSA4Ljk4MDQ0IDMgMTEuNSAzWk0xMS41IDRDOS4yNDU2NiA0IDcuMDgzNjUgNC44OTU1MyA1LjQ4OTU5IDYuNDg5NTlDMy44OTU1MyA4LjA4MzY1IDMgMTAuMjQ1NyAzIDEyLjVDMyAxNC43NTQzIDMuODk1NTMgMTYuOTE2MyA1LjQ4OTU5IDE4LjUxMDRDNy4wODM2NSAyMC4xMDQ1IDkuMjQ1NjYgMjEgMTEuNSAyMUMxMi42MTYyIDIxIDEzLjcyMTUgMjAuNzgwMSAxNC43NTI4IDIwLjM1M0MxNS43ODQxIDE5LjkyNTggMTYuNzIxMSAxOS4yOTk3IDE3LjUxMDQgMTguNTEwNEMxOC4yOTk3IDE3LjcyMTEgMTguOTI1OCAxNi43ODQxIDE5LjM1MyAxNS43NTI4QzE5Ljc4MDEgMTQuNzIxNSAyMCAxMy42MTYyIDIwIDEyLjVDMjAgMTAuMjQ1NyAxOS4xMDQ1IDguMDgzNjUgMTcuNTEwNCA2LjQ4OTU5QzE1LjkxNjMgNC44OTU1MyAxMy43NTQzIDQgMTEuNSA0Wk0xMSA3SDEyVjEyLjQyTDE2LjcgMTUuMTNMMTYuMiAxNkwxMSAxM1Y3WlwiXG4gICAgICBmaWxsPVwiYmxhY2tcIlxuICAgIC8+XG4gIDwvc3ZnOmc+XG5cbiAgPCEtLSBMYWJlbCBpbiB0aGUgY2VudGVyIC0tPlxuICA8c3ZnOnRleHRcbiAgICBbYXR0ci54XT1cIm5vZGUud2lkdGggLyAyXCJcbiAgICBbYXR0ci55XT1cIm5vZGUuaGVpZ2h0IC8gMlwiXG4gICAgdGV4dC1hbmNob3I9XCJtaWRkbGVcIlxuICAgIGRvbWluYW50LWJhc2VsaW5lPVwibWlkZGxlXCJcbiAgICBmb250LXNpemU9XCIxNFwiXG4gICAgZmlsbD1cIiMwMDAwMDBcIlxuICA+XG4gICAge3sgbm9kZS5zdGFnZURhdGE/Lk5hbWUgfHwgXCJTdGFnZVwiIH19XG4gIDwvc3ZnOnRleHQ+XG48L3N2ZzpnPlxuXG48bGliLXN0YWdlLWRpYWxvZ1xuICBbdmlzaWJsZV09XCJzaG93U2hpZWxkUG9wdXAoKVwiXG4gIFtzdGFnZURhdGFdPVwibm9kZS5zdGFnZURhdGEgfHwge31cIlxuICAoY2xvc2VkKT1cInNob3dTaGllbGRQb3B1cC5zZXQoZmFsc2UpXCJcbiAgKHNhdmVkKT1cIm9uU3RhZ2VQcm9wZXJ0aWVzU2F2ZWQoJGV2ZW50KVwiXG4+PC9saWItc3RhZ2UtZGlhbG9nPlxuXG48ZGl2XG4gICpuZ0lmPVwic2hvd0Zvcm1Qb3B1cFwiXG4gIFtzdHlsZS5wb3NpdGlvbl09XCInZml4ZWQnXCJcbiAgW3N0eWxlLmxlZnQucHhdPVwiZm9ybVBvcHVwWFwiXG4gIFtzdHlsZS50b3AucHhdPVwiZm9ybVBvcHVwWVwiXG4gIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid3aGl0ZSdcIlxuPlxuICA8dmVyYmVuLXBvcC1VcCBbZHJvcGRvd25PcGVuXT1cInRydWVcIiBbY3VzdG9tU3R5bGVzXT1cInsgJ3otaW5kZXgnOiAnMTAwJyB9XCI+XG4gICAgPGRpdiBkcm9wZG93bi10cmlnZ2VyIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPlxuICAgICAgPCEtLSBIaWRkZW4gdHJpZ2dlciBlbGVtZW50IC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicC0zIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBzaGFkb3ctbWQgdy02NFwiXG4gICAgICBkcm9wZG93bi1jb250ZW50XG4gICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB6LWluZGV4OiAxMDAwXCJcbiAgICA+XG4gICAgICA8aDQgY2xhc3M9XCJtYi0yIGZvbnQtbWVkaXVtXCI+U2VsZWN0IEZvcm08L2g0PlxuICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ0Zvcm1zXCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yXCI+XG4gICAgICAgIExvYWRpbmcgZm9ybXMuLi5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdGb3Jtc1wiIGNsYXNzPVwibWF4LWgtNDggb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtMyBweS0yIGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCB0ZXh0LXNtIGhvdmVyOmJnLWdyYXktNTAgdGV4dC1sZWZ0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RGb3JtKG51bGwpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBDbGVhciBmb3JtIHNlbGVjdGlvblxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZm9ybSBvZiBmb3Jtc0xpc3RcIiBjbGFzcz1cIm1iLTFcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCBweC0zIHB5LTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gaG92ZXI6YmctZ3JheS01MCB0ZXh0LWxlZnRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEZvcm0oZm9ybSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGZvcm0uTmFtZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiZm9ybXNMaXN0Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS0yIHRleHQtZ3JheS01MDBcIlxuICAgICAgICA+XG4gICAgICAgICAgTm8gZm9ybXMgYXZhaWxhYmxlXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvdmVyYmVuLXBvcC1VcD5cbjwvZGl2PlxuIl19
|
package/esm2022/lib/components/workflow-designer/swimlane-dialog/swimlane-dialog.component.mjs
CHANGED
|
@@ -28,6 +28,7 @@ export class SwimlaneDialogComponent {
|
|
|
28
28
|
// Reset form fields when dialog opens
|
|
29
29
|
this.selectedTagNames = [];
|
|
30
30
|
this.workflowName = '';
|
|
31
|
+
this.searchQuery = '';
|
|
31
32
|
this.dataService.getTags().then((data) => {
|
|
32
33
|
this.tags = data.Result;
|
|
33
34
|
// If editing an existing swimlane, populate the form
|
|
@@ -73,6 +74,9 @@ export class SwimlaneDialogComponent {
|
|
|
73
74
|
}
|
|
74
75
|
onDialogClose(eventData) {
|
|
75
76
|
console.log('Dialog closed, received data:', eventData);
|
|
77
|
+
this.searchQuery = '';
|
|
78
|
+
this.workflowName = '';
|
|
79
|
+
this.selectedTagNames = [];
|
|
76
80
|
this.closed.emit();
|
|
77
81
|
}
|
|
78
82
|
onDialogOpen(eventData) {
|
|
@@ -109,4 +113,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
109
113
|
}], created: [{
|
|
110
114
|
type: Output
|
|
111
115
|
}] } });
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpbWxhbmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc3dpbWxhbmUtZGlhbG9nL3N3aW1sYW5lLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N3aW1sYW5lLWRpYWxvZy9zd2ltbGFuZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBU3ZCLE1BQU0sT0FBTyx1QkFBdUI7SUFvQmQ7SUFuQlgsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUN6QixZQUFZLEdBQXlDLElBQUksQ0FBQztJQUN6RCxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM1QixPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQWlDLENBQUM7SUFFdEUsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBRTFCLDBDQUEwQztJQUMxQyxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7SUFFaEMsaUVBQWlFO0lBQ2pFLHdEQUF3RDtJQUN4RCwyQkFBMkI7SUFDM0Isc0JBQXNCO0lBQ3RCLE9BQU87SUFFUCxJQUFJLEdBQVUsRUFBRSxDQUFDO0lBRWpCLFlBQW9CLFdBQWdDO1FBQWhDLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtJQUFHLENBQUM7SUFFeEQsUUFBUTtRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0NBQXdDLEVBQUUsSUFBSSxDQUFDLFlBQVks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QUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsY0FBYztRQUNaLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzFELE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUMvQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQ3pDLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFO1lBQ3ZDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN2QixJQUFJLEVBQUUsWUFBWTtTQUNuQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNoQixJQUFJLEVBQUUsWUFBWTtZQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0E5R1UsdUJBQXVCOzRGQUF2Qix1QkFBdUIsNEtDaEJwQyx5dkZBMkZBOzs0RkQzRWEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjt3RkFLdEIsT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvVGFnJztcbmltcG9ydCB7IFdvcmtmbG93RGF0YVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1kYXRhLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3dpbWxhbmUtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N3aW1sYW5lLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zd2ltbGFuZS1kaWFsb2cuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIFN3aW1sYW5lRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzd2ltbGFuZURhdGE6IHsgbmFtZTogc3RyaW5nOyB0YWdzOiBUYWdbXSB9IHwgbnVsbCA9IG51bGw7XG4gIEBPdXRwdXQoKSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjcmVhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRhZ3M6IFRhZ1tdOyBuYW1lOiBzdHJpbmcgfT4oKTtcblxuICBzZWFyY2hRdWVyeTogc3RyaW5nID0gJyc7XG4gIHdvcmtmbG93TmFtZTogc3RyaW5nID0gJyc7XG5cbiAgLy8gVHJhY2sgc2VsZWN0ZWQgdGFncyBpbiBhIHNlcGFyYXRlIGFycmF5XG4gIHNlbGVjdGVkVGFnTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gU2FtcGxlIHRhZyBkYXRhIC0geW91IHdvdWxkIGxpa2VseSBsb2FkIHRoaXMgZnJvbSB5b3VyIHNlcnZpY2VcbiAgLy8gdGFnczogVGFnW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMiB9LCAoXywgaSkgPT4gKHtcbiAgLy8gICBOYW1lOiBgVGFncyAke2kgKyAxfWAsXG4gIC8vICAgSXNPcHRpb25hbDogdHJ1ZSxcbiAgLy8gfSkpO1xuXG4gIHRhZ3M6IFRhZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhU2VydmljZTogV29ya2Zsb3dEYXRhU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU3dpbWxhbmUgZGlhbG9nIGluaXRpYWxpemVkIHdpdGggZGF0YTonLCB0aGlzLnN3aW1sYW5lRGF0YSk7XG5cbiAgICAvLyBSZXNldCBmb3JtIGZpZWxkcyB3aGVuIGRpYWxvZyBvcGVuc1xuICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcyA9IFtdO1xuICAgIHRoaXMud29ya2Zsb3dOYW1lID0gJyc7XG5cbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldFRhZ3MoKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLnRhZ3MgPSBkYXRhLlJlc3VsdDtcblxuICAgICAgLy8gSWYgZWRpdGluZyBhbiBleGlzdGluZyBzd2ltbGFuZSwgcG9wdWxhdGUgdGhlIGZvcm1cbiAgICAgIGlmICh0aGlzLnN3aW1sYW5lRGF0YSkge1xuICAgICAgICB0aGlzLndvcmtmbG93TmFtZSA9IHRoaXMuc3dpbWxhbmVEYXRhLm5hbWU7XG4gICAgICAgIC8vIFNldCBzZWxlY3RlZCB0YWdzXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcyA9IHRoaXMuc3dpbWxhbmVEYXRhLnRhZ3MubWFwKCh0YWcpID0+IHRhZy5OYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dOYW1lID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcyA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRhZ3MubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkVGFnTmFtZXMubGVuZ3RoID09PSB0aGlzLnRhZ3MubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIHNldCBhbGxTZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzID0gdGhpcy50YWdzLm1hcCgodGFnKSA9PiB0YWcuTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXJlZFRhZ3MoKTogVGFnW10ge1xuICAgIGlmICghdGhpcy5zZWFyY2hRdWVyeSkge1xuICAgICAgcmV0dXJuIHRoaXMudGFncztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YWdzLmZpbHRlcigodGFnKSA9PlxuICAgICAgdGFnLk5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFF1ZXJ5LnRvTG93ZXJDYXNlKCkpXG4gICAgKTtcbiAgfVxuXG4gIGlzVGFnU2VsZWN0ZWQodGFnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcy5pbmNsdWRlcyh0YWdOYW1lKTtcbiAgfVxuXG4gIHRvZ2dsZVRhZ1NlbGVjdGlvbih0YWdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWdOYW1lcy5pbmRleE9mKHRhZ05hbWUpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFnTmFtZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzLnB1c2godGFnTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgb25EaWFsb2dDbG9zZShldmVudERhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgY2xvc2VkLCByZWNlaXZlZCBkYXRhOicsIGV2ZW50RGF0YSk7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICB9XG5cbiAgb25EaWFsb2dPcGVuKGV2ZW50RGF0YTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ0RpYWxvZyBvcGVuZWQsIHJlY2VpdmVkIGRhdGE6JywgZXZlbnREYXRhKTtcbiAgfVxuXG4gIGFwcGx5U2VsZWN0aW9uKCkge1xuICAgIC8vIFZhbGlkYXRlIG5hbWVcbiAgICBpZiAoIXRoaXMud29ya2Zsb3dOYW1lIHx8IHRoaXMud29ya2Zsb3dOYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1N3aW1sYW5lIG5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRUYWdzID0gdGhpcy50YWdzLmZpbHRlcigodGFnKSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzLmluY2x1ZGVzKHRhZy5OYW1lKVxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZygnU3VibWl0dGluZyBzd2ltbGFuZSBkYXRhOicsIHtcbiAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dOYW1lLFxuICAgICAgdGFnczogc2VsZWN0ZWRUYWdzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jcmVhdGVkLmVtaXQoe1xuICAgICAgdGFnczogc2VsZWN0ZWRUYWdzLFxuICAgICAgbmFtZTogdGhpcy53b3JrZmxvd05hbWUsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjx2ZXJiZW4tZGlhbG9ndWVcbiAgW3Nob3dDbG9zZUljb25dPVwidHJ1ZVwiXG4gIFtkaXNtaXNzT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICBbY2xvc2VPbkVzY2FwZV09XCJ0cnVlXCJcbiAgW3NpemVdPVwiJ21lZGl1bSdcIlxuICBbbW9kZV09XCInZHJhd2VyJ1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW2lzVmlzaWJsZV09XCJ2aXNpYmxlXCJcbiAgW2hlYWRlclRlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCJcbiAgW2JvZHlUZW1wbGF0ZV09XCJib2R5VGVtcGxhdGVcIlxuICBbZm9vdGVyVGVtcGxhdGVdPVwiZm9vdGVyVGVtcGxhdGVcIlxuICAob3Blbk1vZGFsKT1cIm9uRGlhbG9nT3BlbigkZXZlbnQpXCJcbiAgKGNsb3NlTW9kYWwpPVwib25EaWFsb2dDbG9zZSgkZXZlbnQpXCJcbj5cbjwvdmVyYmVuLWRpYWxvZ3VlPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC00IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJtci00XCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJibG9jayB3LTMgaC0zIGJvcmRlci10LTIgYm9yZGVyLWwtMiBib3JkZXItZ3JheS03MDAgdHJhbnNmb3JtIC1yb3RhdGUtNDVcIlxuICAgICAgPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1tZWRpdW0gbS0wXCI+TmFtZTwvaDI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTUwMFwiPnt7IHRhZ3MubGVuZ3RoIH19IHRhZ3M8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyXCI+Q3JlYXRlPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwicC00XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTQgc3BhY2UteS00XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIE5hbWVcIlxuICAgICAgICBjbGFzcz1cInctZnVsbCBweC00IHB5LTIgcm91bmRlZC1mdWxsIGJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwid29ya2Zsb3dOYW1lXCJcbiAgICAgIC8+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIFRhZ3NcIlxuICAgICAgICBjbGFzcz1cInctZnVsbCBweC00IHB5LTIgcm91bmRlZC1mdWxsIGJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkaXZpZGUteSBkaXZpZGUtZ3JheS0xMDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwibXItM1wiIFsobmdNb2RlbCldPVwiYWxsU2VsZWN0ZWRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbVwiPlNlbGVjdCBBbGw8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdGFnIG9mIGZpbHRlcmVkVGFnc1wiIGNsYXNzPVwicHktM1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXItM1wiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1RhZ1NlbGVjdGVkKHRhZy5OYW1lKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVRhZ1NlbGVjdGlvbih0YWcuTmFtZSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgdGFnLk5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFnLklzT3B0aW9uYWxcIiBjbGFzcz1cIm1sLTIgdGV4dC14cyB0ZXh0LXJlZC01MDBcIlxuICAgICAgICAgICAgPihSZXF1aXJlZCk8L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBwLTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJweC00IHB5LTIgbXItMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwib25EaWFsb2dDbG9zZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICBDYW5jZWxcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInB4LTQgcHktMiBiZy1ibHVlLTYwMCB0ZXh0LXdoaXRlIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwiYXBwbHlTZWxlY3Rpb24oKVwiXG4gICAgPlxuICAgICAgQXBwbHlcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpbWxhbmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc3dpbWxhbmUtZGlhbG9nL3N3aW1sYW5lLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N3aW1sYW5lLWRpYWxvZy9zd2ltbGFuZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBU3ZCLE1BQU0sT0FBTyx1QkFBdUI7SUFvQmQ7SUFuQlgsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUN6QixZQUFZLEdBQXlDLElBQUksQ0FBQztJQUN6RCxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM1QixPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQWlDLENBQUM7SUFFdEUsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBRTFCLDBDQUEwQztJQUMxQyxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7SUFFaEMsaUVBQWlFO0lBQ2pFLHdEQUF3RDtJQUN4RCwyQkFBMkI7SUFDM0Isc0JBQXNCO0lBQ3RCLE9BQU87SUFFUCxJQUFJLEdBQVUsRUFBRSxDQUFDO0lBRWpCLFlBQW9CLFdBQWdDO1FBQWhDLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtJQUFHLENBQUM7SUFFeEQsUUFBUTtRQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0NBQXdDLEVBQUUsSUFBSSxDQUFDLFlBQVks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dCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgaW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9UYWcnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zd2ltbGFuZS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3dpbWxhbmUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3N3aW1sYW5lLWRpYWxvZy5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU3dpbWxhbmVEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN3aW1sYW5lRGF0YTogeyBuYW1lOiBzdHJpbmc7IHRhZ3M6IFRhZ1tdIH0gfCBudWxsID0gbnVsbDtcbiAgQE91dHB1dCgpIGNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGFnczogVGFnW107IG5hbWU6IHN0cmluZyB9PigpO1xuXG4gIHNlYXJjaFF1ZXJ5OiBzdHJpbmcgPSAnJztcbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmcgPSAnJztcblxuICAvLyBUcmFjayBzZWxlY3RlZCB0YWdzIGluIGEgc2VwYXJhdGUgYXJyYXlcbiAgc2VsZWN0ZWRUYWdOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBTYW1wbGUgdGFnIGRhdGEgLSB5b3Ugd291bGQgbGlrZWx5IGxvYWQgdGhpcyBmcm9tIHlvdXIgc2VydmljZVxuICAvLyB0YWdzOiBUYWdbXSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDEyIH0sIChfLCBpKSA9PiAoe1xuICAvLyAgIE5hbWU6IGBUYWdzICR7aSArIDF9YCxcbiAgLy8gICBJc09wdGlvbmFsOiB0cnVlLFxuICAvLyB9KSk7XG5cbiAgdGFnczogVGFnW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFTZXJ2aWNlOiBXb3JrZmxvd0RhdGFTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdTd2ltbGFuZSBkaWFsb2cgaW5pdGlhbGl6ZWQgd2l0aCBkYXRhOicsIHRoaXMuc3dpbWxhbmVEYXRhKTtcblxuICAgIC8vIFJlc2V0IGZvcm0gZmllbGRzIHdoZW4gZGlhbG9nIG9wZW5zXG4gICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzID0gW107XG4gICAgdGhpcy53b3JrZmxvd05hbWUgPSAnJztcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG5cbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldFRhZ3MoKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLnRhZ3MgPSBkYXRhLlJlc3VsdDtcblxuICAgICAgLy8gSWYgZWRpdGluZyBhbiBleGlzdGluZyBzd2ltbGFuZSwgcG9wdWxhdGUgdGhlIGZvcm1cbiAgICAgIGlmICh0aGlzLnN3aW1sYW5lRGF0YSkge1xuICAgICAgICB0aGlzLndvcmtmbG93TmFtZSA9IHRoaXMuc3dpbWxhbmVEYXRhLm5hbWU7XG4gICAgICAgIC8vIFNldCBzZWxlY3RlZCB0YWdzXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcyA9IHRoaXMuc3dpbWxhbmVEYXRhLnRhZ3MubWFwKCh0YWcpID0+IHRhZy5OYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dOYW1lID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcyA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGFsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnRhZ3MubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkVGFnTmFtZXMubGVuZ3RoID09PSB0aGlzLnRhZ3MubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIHNldCBhbGxTZWxlY3RlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzID0gdGhpcy50YWdzLm1hcCgodGFnKSA9PiB0YWcuTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXJlZFRhZ3MoKTogVGFnW10ge1xuICAgIGlmICghdGhpcy5zZWFyY2hRdWVyeSkge1xuICAgICAgcmV0dXJuIHRoaXMudGFncztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50YWdzLmZpbHRlcigodGFnKSA9PlxuICAgICAgdGFnLk5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFF1ZXJ5LnRvTG93ZXJDYXNlKCkpXG4gICAgKTtcbiAgfVxuXG4gIGlzVGFnU2VsZWN0ZWQodGFnTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcy5pbmNsdWRlcyh0YWdOYW1lKTtcbiAgfVxuXG4gIHRvZ2dsZVRhZ1NlbGVjdGlvbih0YWdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRUYWdOYW1lcy5pbmRleE9mKHRhZ05hbWUpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFnTmFtZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzLnB1c2godGFnTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgb25EaWFsb2dDbG9zZShldmVudERhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgY2xvc2VkLCByZWNlaXZlZCBkYXRhOicsIGV2ZW50RGF0YSk7XG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICAgIHRoaXMud29ya2Zsb3dOYW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzID0gW107XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICB9XG5cbiAgb25EaWFsb2dPcGVuKGV2ZW50RGF0YTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ0RpYWxvZyBvcGVuZWQsIHJlY2VpdmVkIGRhdGE6JywgZXZlbnREYXRhKTtcbiAgfVxuXG4gIGFwcGx5U2VsZWN0aW9uKCkge1xuICAgIC8vIFZhbGlkYXRlIG5hbWVcbiAgICBpZiAoIXRoaXMud29ya2Zsb3dOYW1lIHx8IHRoaXMud29ya2Zsb3dOYW1lLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1N3aW1sYW5lIG5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRUYWdzID0gdGhpcy50YWdzLmZpbHRlcigodGFnKSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzLmluY2x1ZGVzKHRhZy5OYW1lKVxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZygnU3VibWl0dGluZyBzd2ltbGFuZSBkYXRhOicsIHtcbiAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dOYW1lLFxuICAgICAgdGFnczogc2VsZWN0ZWRUYWdzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jcmVhdGVkLmVtaXQoe1xuICAgICAgdGFnczogc2VsZWN0ZWRUYWdzLFxuICAgICAgbmFtZTogdGhpcy53b3JrZmxvd05hbWUsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjx2ZXJiZW4tZGlhbG9ndWVcbiAgW3Nob3dDbG9zZUljb25dPVwidHJ1ZVwiXG4gIFtkaXNtaXNzT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICBbY2xvc2VPbkVzY2FwZV09XCJ0cnVlXCJcbiAgW3NpemVdPVwiJ21lZGl1bSdcIlxuICBbbW9kZV09XCInZHJhd2VyJ1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW2lzVmlzaWJsZV09XCJ2aXNpYmxlXCJcbiAgW2hlYWRlclRlbXBsYXRlXT1cImhlYWRlclRlbXBsYXRlXCJcbiAgW2JvZHlUZW1wbGF0ZV09XCJib2R5VGVtcGxhdGVcIlxuICBbZm9vdGVyVGVtcGxhdGVdPVwiZm9vdGVyVGVtcGxhdGVcIlxuICAob3Blbk1vZGFsKT1cIm9uRGlhbG9nT3BlbigkZXZlbnQpXCJcbiAgKGNsb3NlTW9kYWwpPVwib25EaWFsb2dDbG9zZSgkZXZlbnQpXCJcbj5cbjwvdmVyYmVuLWRpYWxvZ3VlPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC00IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJtci00XCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJibG9jayB3LTMgaC0zIGJvcmRlci10LTIgYm9yZGVyLWwtMiBib3JkZXItZ3JheS03MDAgdHJhbnNmb3JtIC1yb3RhdGUtNDVcIlxuICAgICAgPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1tZWRpdW0gbS0wXCI+TmFtZTwvaDI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1ncmF5LTUwMFwiPnt7IHRhZ3MubGVuZ3RoIH19IHRhZ3M8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJsdWUtNjAwIGZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyXCI+Q3JlYXRlPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwicC00XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1iLTQgc3BhY2UteS00XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIE5hbWVcIlxuICAgICAgICBjbGFzcz1cInctZnVsbCBweC00IHB5LTIgcm91bmRlZC1mdWxsIGJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwid29ya2Zsb3dOYW1lXCJcbiAgICAgIC8+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIFRhZ3NcIlxuICAgICAgICBjbGFzcz1cInctZnVsbCBweC00IHB5LTIgcm91bmRlZC1mdWxsIGJnLWdyYXktNTAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkaXZpZGUteSBkaXZpZGUtZ3JheS0xMDBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwibXItM1wiIFsobmdNb2RlbCldPVwiYWxsU2VsZWN0ZWRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbVwiPlNlbGVjdCBBbGw8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdGFnIG9mIGZpbHRlcmVkVGFnc1wiIGNsYXNzPVwicHktM1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXItM1wiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1RhZ1NlbGVjdGVkKHRhZy5OYW1lKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVRhZ1NlbGVjdGlvbih0YWcuTmFtZSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgdGFnLk5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFnLklzT3B0aW9uYWxcIiBjbGFzcz1cIm1sLTIgdGV4dC14cyB0ZXh0LXJlZC01MDBcIlxuICAgICAgICAgICAgPihSZXF1aXJlZCk8L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZCBwLTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJweC00IHB5LTIgbXItMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwib25EaWFsb2dDbG9zZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICBDYW5jZWxcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInB4LTQgcHktMiBiZy1ibHVlLTYwMCB0ZXh0LXdoaXRlIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwiYXBwbHlTZWxlY3Rpb24oKVwiXG4gICAgPlxuICAgICAgQXBwbHlcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -64,7 +64,10 @@ export class WorkflowDesignerComponent {
|
|
|
64
64
|
.getWorkflowWithParam(code)
|
|
65
65
|
.then((response) => {
|
|
66
66
|
if (response && response.Result) {
|
|
67
|
-
|
|
67
|
+
// Store the workflow ID
|
|
68
|
+
const wf = response.Result[0];
|
|
69
|
+
this.state.setWorkflowId(wf.Id);
|
|
70
|
+
this.parseWorkflowData(wf);
|
|
68
71
|
}
|
|
69
72
|
this.isLoading = false;
|
|
70
73
|
})
|
|
@@ -111,6 +114,29 @@ export class WorkflowDesignerComponent {
|
|
|
111
114
|
});
|
|
112
115
|
}
|
|
113
116
|
});
|
|
117
|
+
// Register the workflow itself
|
|
118
|
+
this.state.registerLoadedObject(workflow.Id, workflow.Code);
|
|
119
|
+
// Register swimlanes when processing
|
|
120
|
+
if (workflow.Lanes && workflow.Lanes.length) {
|
|
121
|
+
workflow.Lanes.forEach((lane) => {
|
|
122
|
+
this.state.registerLoadedObject(lane.Id, lane.Code);
|
|
123
|
+
// Existing lane processing code...
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
// Register stages when processing
|
|
127
|
+
if (workflow.Stages && workflow.Stages.length) {
|
|
128
|
+
workflow.Stages.forEach((stage) => {
|
|
129
|
+
this.state.registerLoadedObject(stage.Id, stage.Code);
|
|
130
|
+
// Existing stage processing code...
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// Register actions/connections when processing
|
|
134
|
+
if (workflow.Actions && workflow.Actions.length) {
|
|
135
|
+
workflow.Actions.forEach((action) => {
|
|
136
|
+
this.state.registerLoadedObject(action.Id, action.Code);
|
|
137
|
+
// Existing action processing code...
|
|
138
|
+
});
|
|
139
|
+
}
|
|
114
140
|
}
|
|
115
141
|
// Process connections/actions
|
|
116
142
|
if (workflow.Actions && workflow.Actions.length) {
|
|
@@ -312,15 +338,15 @@ export class WorkflowDesignerComponent {
|
|
|
312
338
|
this.selectedTool = null;
|
|
313
339
|
}
|
|
314
340
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDesignerComponent, deps: [{ token: i1.WorkflowDesignerState }, { token: i2.WorkflowDataService }], target: i0.ɵɵFactoryTarget.Component });
|
|
315
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: WorkflowDesignerComponent, selector: "lib-workflow-designer", inputs: { workflowCode: "workflowCode" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvasRef"], descendants: true }], ngImport: i0, template: "<div class=\"workflow-designer\">\n <div class=\"workflow-header\">\n <h1>Workflow Designer</h1>\n </div>\n\n <!-- Toolbar Component -->\n <lib-designer-toolbar\n [selectedTool]=\"selectedTool\"\n (toolSelected)=\"onToolSelected($event)\"\n >\n </lib-designer-toolbar>\n\n <!-- Show loading indicator if needed -->\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">Loading workflow...</div>\n </div>\n\n <!-- Canvas Component -->\n <lib-designer-canvas\n [selectedTool]=\"selectedTool\"\n (clickedPosition)=\"handleCanvasPositionClick($event)\"\n (subflowSelected)=\"onSubflowSelected()\"\n (showStageDialog)=\"onShowStageDialog($event)\"\n #canvasRef\n >\n </lib-designer-canvas>\n\n <lib-swimlane-dialog\n [visible]=\"showSwimlaneDialog\"\n [swimlaneData]=\"\n editingSwimlaneIndex !== null\n ? {\n name: state.swimlanes[editingSwimlaneIndex].label,\n tags: state.swimlanes[editingSwimlaneIndex].tags\n }\n : null\n \"\n (created)=\"onSwimlaneDialogFilled($event)\"\n (closed)=\"showSwimlaneDialog = false\"\n ></lib-swimlane-dialog>\n\n <lib-stage-dialog\n [visible]=\"showStageDialog\"\n [stageData]=\"pendingStageData\"\n (closed)=\"showStageDialog = false\"\n (saved)=\"onStageDialogSaved($event)\"\n ></lib-stage-dialog>\n</div>\n", styles: [".workflow-designer{display:flex;flex-direction:column;height:100vh;background-color:#f8fafc}.workflow-header{padding:1rem;background-color:#fff;border-bottom:1px solid #e2e8f0}.workflow-header h1{font-size:1.25rem;font-weight:600;color:#334155;margin:0}.loading-overlay{position:absolute;inset:0;background-color:#ffffffb3;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1000}.loading-spinner{border:4px solid #f3f3f3;border-top:4px solid #d8b4fe;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}.loading-text{margin-top:1rem;font-size:1rem;color:#7e22ce}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DesignerToolbarComponent, selector: "lib-designer-toolbar", inputs: ["selectedTool", "isSaving"], outputs: ["toolSelected", "saveWorkflow"] }, { kind: "component", type: i5.DesignerCanvasComponent, selector: "lib-designer-canvas", inputs: ["selectedTool"], outputs: ["clickedPosition", "subflowSelected", "showStageDialog"] }, { kind: "component", type: i6.SwimlaneDialogComponent, selector: "lib-swimlane-dialog", inputs: ["visible", "swimlaneData"], outputs: ["closed", "created"] }, { kind: "component", type: i7.StageDialogComponent, selector: "lib-stage-dialog", inputs: ["visible", "stageData"], outputs: ["closed", "saved"] }] });
|
|
341
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: WorkflowDesignerComponent, selector: "lib-workflow-designer", inputs: { workflowCode: "workflowCode" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvasRef"], descendants: true }], ngImport: i0, template: "<div class=\"workflow-designer\">\n <div class=\"workflow-header\">\n <h1>Workflow Designer</h1>\n </div>\n\n <!-- Toolbar Component -->\n <lib-designer-toolbar\n [selectedTool]=\"selectedTool\"\n [isSaving]=\"isSaving\"\n (toolSelected)=\"onToolSelected($event)\"\n (saveWorkflow)=\"saveWorkflow()\"\n >\n </lib-designer-toolbar>\n\n <!-- Show loading indicator if needed -->\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">Loading workflow...</div>\n </div>\n\n <!-- Canvas Component -->\n <lib-designer-canvas\n [selectedTool]=\"selectedTool\"\n (clickedPosition)=\"handleCanvasPositionClick($event)\"\n (subflowSelected)=\"onSubflowSelected()\"\n (showStageDialog)=\"onShowStageDialog($event)\"\n #canvasRef\n >\n </lib-designer-canvas>\n\n <lib-swimlane-dialog\n [visible]=\"showSwimlaneDialog\"\n [swimlaneData]=\"\n editingSwimlaneIndex !== null\n ? {\n name: state.swimlanes[editingSwimlaneIndex].label,\n tags: state.swimlanes[editingSwimlaneIndex].tags\n }\n : null\n \"\n (created)=\"onSwimlaneDialogFilled($event)\"\n (closed)=\"showSwimlaneDialog = false\"\n ></lib-swimlane-dialog>\n\n <lib-stage-dialog\n [visible]=\"showStageDialog\"\n [stageData]=\"pendingStageData\"\n (closed)=\"showStageDialog = false\"\n (saved)=\"onStageDialogSaved($event)\"\n ></lib-stage-dialog>\n</div>\n", styles: [".workflow-designer{display:flex;flex-direction:column;height:100vh;background-color:#f8fafc}.workflow-header{padding:1rem;background-color:#fff;border-bottom:1px solid #e2e8f0}.workflow-header h1{font-size:1.25rem;font-weight:600;color:#334155;margin:0}.loading-overlay{position:absolute;inset:0;background-color:#ffffffb3;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1000}.loading-spinner{border:4px solid #f3f3f3;border-top:4px solid #d8b4fe;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}.loading-text{margin-top:1rem;font-size:1rem;color:#7e22ce}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.DesignerToolbarComponent, selector: "lib-designer-toolbar", inputs: ["selectedTool", "isSaving"], outputs: ["toolSelected", "saveWorkflow"] }, { kind: "component", type: i5.DesignerCanvasComponent, selector: "lib-designer-canvas", inputs: ["selectedTool"], outputs: ["clickedPosition", "subflowSelected", "showStageDialog"] }, { kind: "component", type: i6.SwimlaneDialogComponent, selector: "lib-swimlane-dialog", inputs: ["visible", "swimlaneData"], outputs: ["closed", "created"] }, { kind: "component", type: i7.StageDialogComponent, selector: "lib-stage-dialog", inputs: ["visible", "stageData"], outputs: ["closed", "saved"] }] });
|
|
316
342
|
}
|
|
317
343
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDesignerComponent, decorators: [{
|
|
318
344
|
type: Component,
|
|
319
|
-
args: [{ selector: 'lib-workflow-designer', template: "<div class=\"workflow-designer\">\n <div class=\"workflow-header\">\n <h1>Workflow Designer</h1>\n </div>\n\n <!-- Toolbar Component -->\n <lib-designer-toolbar\n [selectedTool]=\"selectedTool\"\n (toolSelected)=\"onToolSelected($event)\"\n >\n </lib-designer-toolbar>\n\n <!-- Show loading indicator if needed -->\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">Loading workflow...</div>\n </div>\n\n <!-- Canvas Component -->\n <lib-designer-canvas\n [selectedTool]=\"selectedTool\"\n (clickedPosition)=\"handleCanvasPositionClick($event)\"\n (subflowSelected)=\"onSubflowSelected()\"\n (showStageDialog)=\"onShowStageDialog($event)\"\n #canvasRef\n >\n </lib-designer-canvas>\n\n <lib-swimlane-dialog\n [visible]=\"showSwimlaneDialog\"\n [swimlaneData]=\"\n editingSwimlaneIndex !== null\n ? {\n name: state.swimlanes[editingSwimlaneIndex].label,\n tags: state.swimlanes[editingSwimlaneIndex].tags\n }\n : null\n \"\n (created)=\"onSwimlaneDialogFilled($event)\"\n (closed)=\"showSwimlaneDialog = false\"\n ></lib-swimlane-dialog>\n\n <lib-stage-dialog\n [visible]=\"showStageDialog\"\n [stageData]=\"pendingStageData\"\n (closed)=\"showStageDialog = false\"\n (saved)=\"onStageDialogSaved($event)\"\n ></lib-stage-dialog>\n</div>\n", styles: [".workflow-designer{display:flex;flex-direction:column;height:100vh;background-color:#f8fafc}.workflow-header{padding:1rem;background-color:#fff;border-bottom:1px solid #e2e8f0}.workflow-header h1{font-size:1.25rem;font-weight:600;color:#334155;margin:0}.loading-overlay{position:absolute;inset:0;background-color:#ffffffb3;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1000}.loading-spinner{border:4px solid #f3f3f3;border-top:4px solid #d8b4fe;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}.loading-text{margin-top:1rem;font-size:1rem;color:#7e22ce}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
|
|
345
|
+
args: [{ selector: 'lib-workflow-designer', template: "<div class=\"workflow-designer\">\n <div class=\"workflow-header\">\n <h1>Workflow Designer</h1>\n </div>\n\n <!-- Toolbar Component -->\n <lib-designer-toolbar\n [selectedTool]=\"selectedTool\"\n [isSaving]=\"isSaving\"\n (toolSelected)=\"onToolSelected($event)\"\n (saveWorkflow)=\"saveWorkflow()\"\n >\n </lib-designer-toolbar>\n\n <!-- Show loading indicator if needed -->\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">Loading workflow...</div>\n </div>\n\n <!-- Canvas Component -->\n <lib-designer-canvas\n [selectedTool]=\"selectedTool\"\n (clickedPosition)=\"handleCanvasPositionClick($event)\"\n (subflowSelected)=\"onSubflowSelected()\"\n (showStageDialog)=\"onShowStageDialog($event)\"\n #canvasRef\n >\n </lib-designer-canvas>\n\n <lib-swimlane-dialog\n [visible]=\"showSwimlaneDialog\"\n [swimlaneData]=\"\n editingSwimlaneIndex !== null\n ? {\n name: state.swimlanes[editingSwimlaneIndex].label,\n tags: state.swimlanes[editingSwimlaneIndex].tags\n }\n : null\n \"\n (created)=\"onSwimlaneDialogFilled($event)\"\n (closed)=\"showSwimlaneDialog = false\"\n ></lib-swimlane-dialog>\n\n <lib-stage-dialog\n [visible]=\"showStageDialog\"\n [stageData]=\"pendingStageData\"\n (closed)=\"showStageDialog = false\"\n (saved)=\"onStageDialogSaved($event)\"\n ></lib-stage-dialog>\n</div>\n", styles: [".workflow-designer{display:flex;flex-direction:column;height:100vh;background-color:#f8fafc}.workflow-header{padding:1rem;background-color:#fff;border-bottom:1px solid #e2e8f0}.workflow-header h1{font-size:1.25rem;font-weight:600;color:#334155;margin:0}.loading-overlay{position:absolute;inset:0;background-color:#ffffffb3;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1000}.loading-spinner{border:4px solid #f3f3f3;border-top:4px solid #d8b4fe;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}.loading-text{margin-top:1rem;font-size:1rem;color:#7e22ce}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
|
|
320
346
|
}], ctorParameters: () => [{ type: i1.WorkflowDesignerState }, { type: i2.WorkflowDataService }], propDecorators: { canvasRef: [{
|
|
321
347
|
type: ViewChild,
|
|
322
348
|
args: ['canvasRef']
|
|
323
349
|
}], workflowCode: [{
|
|
324
350
|
type: Input
|
|
325
351
|
}] } });
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kZXNpZ25lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBYTVELE1BQU0sT0FBTyx5QkFBeUI7SUF3QjNCO0lBQ0M7SUF4QmMsU0FBUyxDQUEyQjtJQUNuRCxZQUFZLEdBQWtCLElBQUksQ0FBQztJQUU1QywwQkFBMEI7SUFDMUIsWUFBWSxHQUFhLElBQUksQ0FBQztJQUM5QixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFFcEMsa0NBQWtDO0lBQ2xDLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFDakMsb0JBQW9CLEdBQ2xCLElBQUksQ0FBQztJQUNQLGdCQUFnQixHQUEyQixFQUFFLENBQUM7SUFFOUMsb0JBQW9CLEdBQWtCLElBQUksQ0FBQztJQUMzQyw2QkFBNkIsR0FBWSxLQUFLLENBQUM7SUFFL0MsNEJBQTRCLEdBQTJCLElBQUksQ0FBQztJQUM1RCxvQ0FBb0MsR0FBa0IsSUFBSSxDQUFDO0lBRTNELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixZQUNTLEtBQTRCLEVBQzNCLFdBQWdDO1FBRGpDLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtJ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QixDQUFDLGFBQWE7NkJBQzdELENBQUM7NEJBRUYsOEJBQThCOzRCQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7NEJBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7d0JBQ2pELENBQUM7b0JBQ0gsQ0FBQztvQkFFRCwwQkFBMEI7b0JBQzFCLGtDQUFrQztnQkFDcEMsQ0FBQztnQkFFRCwrQ0FBK0M7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzNCLENBQUM7WUFFRCxxQkFBcUI7WUFDckIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcsS0FBSyxDQUFDO1lBQzNDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7WUFDekMsSUFBSSxDQUFDLG9DQUFvQyxHQUFHLElBQUksQ0FBQztRQUNuRCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFRCxpQkFBaUI7UUFDZix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQzt3R0E1WlUseUJBQXlCOzRGQUF6Qix5QkFBeUIsK01DYnRDLDY1Q0FpREE7OzRGRHBDYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCOzRIQUtULFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYixZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uUG9pbnQsIFRvb2xUeXBlIH0gZnJvbSAnLi93b3JrZmxvdy1kZXNpZ25lci50eXBlcyc7XG5pbXBvcnQgeyBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUgfSBmcm9tICcuL3dvcmtmbG93LWRlc2lnbmVyLnN0YXRlJztcbmltcG9ydCB7IFRhZyB9IGZyb20gJy4uLy4uL21vZGVscy9UYWcnO1xuaW1wb3J0IHsgV29ya2Zsb3dTdGFnZSB9IGZyb20gJy4uLy4uL21vZGVscy9Xb3JrZmxvd1N0YWdlJztcbmltcG9ydCB7IERlc2lnbmVyQ2FudmFzQ29tcG9uZW50IH0gZnJvbSAnLi9kZXNpZ25lci1jYW52YXMvZGVzaWduZXItY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXb3JrZmxvd0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi93b3JrZmxvdy1kYXRhLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItd29ya2Zsb3ctZGVzaWduZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vd29ya2Zsb3ctZGVzaWduZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vd29ya2Zsb3ctZGVzaWduZXIuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtmbG93RGVzaWduZXJDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCdjYW52YXNSZWYnKSBjYW52YXNSZWYhOiBEZXNpZ25lckNhbnZhc0NvbXBvbmVudDtcbiAgQElucHV0KCkgd29ya2Zsb3dDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyBDdXJyZW50bHkgc2VsZWN0ZWQgdG9vbFxuICBzZWxlY3RlZFRvb2w6IFRvb2xUeXBlID0gbnVsbDtcbiAgc2hvd1N3aW1sYW5lRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gTmV3IHByb3BlcnRpZXMgZm9yIHN0YWdlIGRpYWxvZ1xuICBzaG93U3RhZ2VEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGVuZGluZ1N0YWdlUG9zaXRpb246IHsgc3dpbWxhbmVJbmRleDogbnVtYmVyOyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCA9XG4gICAgbnVsbDtcbiAgcGVuZGluZ1N0YWdlRGF0YTogUGFydGlhbDxXb3JrZmxvd1N0YWdlPiA9IHt9O1xuXG4gIGVkaXRpbmdTd2ltbGFuZUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgaXNDcmVhdGluZ1N0YWdlRnJvbUNvbm5lY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50OiBDb25uZWN0aW9uUG9pbnQgfCBudWxsID0gbnVsbDtcbiAgcGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhdGU6IFdvcmtmbG93RGVzaWduZXJTdGF0ZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBXb3JrZmxvd0RhdGFTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBMb2FkIHdvcmtmbG93IGRhdGEgaWYgY29kZSBpcyBwcm92aWRlZFxuICAgIGlmICh0aGlzLndvcmtmbG93Q29kZSkge1xuICAgICAgdGhpcy5sb2FkV29ya2Zsb3codGhpcy53b3JrZmxvd0NvZGUpO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVXb3JrZmxvdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NhdmluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XG5cbiAgICAvLyBUcmFuc2Zvcm0gdGhlIFVJIG1vZGVsIHRvIHRoZSBBUEkgbW9kZWxcbiAgICBjb25zdCB3b3JrZmxvd01vZGVsID0gdGhpcy5zdGF0ZS50cmFuc2Zvcm1Ub1dvcmtmbG93TW9kZWwoKTtcblxuICAgIC8vIFNhdmUgdG8gdGhlIGJhY2tlbmRcbiAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAuc2F2ZVdvcmtmbG93cyhbd29ya2Zsb3dNb2RlbF0pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1dvcmtmbG93IHNhdmVkIHN1Y2Nlc3NmdWxseTonLCByZXNwb25zZSk7XG4gICAgICAgIC8vIElmIHRoZSBBUEkgcmV0dXJucyBhbiB1cGRhdGVkIHdvcmtmbG93LCB3ZSBtaWdodCB3YW50IHRvIHJlbG9hZCBpdFxuICAgICAgICBpZiAocmVzcG9uc2U/LlJlc3VsdD8uQ29kZSkge1xuICAgICAgICAgIHRoaXMud29ya2Zsb3dDb2RlID0gcmVzcG9uc2UuUmVzdWx0LkNvZGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIHdvcmtmbG93OicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgICAvLyBIYW5kbGUgZXJyb3IgLSBzaG93IGEgbm90aWZpY2F0aW9uLCBldGMuXG4gICAgICB9KTtcbiAgfVxuXG4gIGxvYWRXb3JrZmxvdyhjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5kYXRhU2VydmljZVxuICAgICAgLmdldFdvcmtmbG93V2l0aFBhcmFtKGNvZGUpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLlJlc3VsdCkge1xuICAgICAgICAgIHRoaXMucGFyc2VXb3JrZmxvd0RhdGEocmVzcG9uc2UuUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBwYXJzZSB3b3JrZmxvdyBkYXRhIGZyb20gQVBJIGFuZCBwb3B1bGF0ZSB0aGUgZGVzaWduZXJcbiAgcGFyc2VXb3JrZmxvd0RhdGEod29ya2Zsb3c6IGFueSk6IHZvaWQge1xuICAgIC8vIENsZWFyIGV4aXN0aW5nIHN0YXRlXG4gICAgdGhpcy5zdGF0ZS5zd2ltbGFuZXMgPSBbXTtcbiAgICB0aGlzLnN0YXRlLmNvbm5lY3Rpb25zID0gW107XG5cbiAgICAvLyBTZXQgd29ya2Zsb3cgZm9ybSBpZiBleGlzdHNcbiAgICBpZiAod29ya2Zsb3cuRm9ybSkge1xuICAgICAgdGhpcy5zdGF0ZS5zZXRXb3JrZmxvd0Zvcm0oXG4gICAgICAgIHdvcmtmbG93LkZvcm0sXG4gICAgICAgIHdvcmtmbG93LkZvcm1OYW1lIHx8ICdXb3JrZmxvdyBGb3JtJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIHN3aW1sYW5lcyBmaXJzdFxuICAgIGlmICh3b3JrZmxvdy5MYW5lcyAmJiB3b3JrZmxvdy5MYW5lcy5sZW5ndGgpIHtcbiAgICAgIHdvcmtmbG93LkxhbmVzLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBhLlBvc2l0aW9uIC0gYi5Qb3NpdGlvbikuZm9yRWFjaChcbiAgICAgICAgKGxhbmU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGUuYWRkU3dpbWxhbmUoXG4gICAgICAgICAgICBsYW5lLk5hbWUgfHwgYExhbmUgJHtsYW5lLlBvc2l0aW9ufWAsXG4gICAgICAgICAgICBsYW5lLlRhZ3MgfHwgW11cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgc3RhZ2VzXG4gICAgaWYgKHdvcmtmbG93LlN0YWdlcyAmJiB3b3JrZmxvdy5TdGFnZXMubGVuZ3RoKSB7XG4gICAgICB3b3JrZmxvdy5TdGFnZXMuZm9yRWFjaCgoc3RhZ2U6IGFueSkgPT4ge1xuICAgICAgICAvLyBGaW5kIHN3aW1sYW5lIGluZGV4XG4gICAgICAgIGNvbnN0IHN3aW1sYW5lSW5kZXggPSB0aGlzLmZpbmRTd2ltbGFuZUluZGV4QnlMYW5lSWQoc3RhZ2UuU3dpbUxhbmUpO1xuICAgICAgICBpZiAoc3dpbWxhbmVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBjb25zdCB4ID0gc3RhZ2UuQ29vcmRpbmF0ZXM/LlggfHwgMTAwO1xuICAgICAgICAgIGNvbnN0IHkgPSBzdGFnZS5Db29yZGluYXRlcz8uWSB8fCA1MDtcblxuICAgICAgICAgIHRoaXMuc3RhdGUuYWRkTm9kZShzd2ltbGFuZUluZGV4LCAnc3RhZ2UnLCB4LCB5LCB7XG4gICAgICAgICAgICBOYW1lOiBzdGFnZS5OYW1lLFxuICAgICAgICAgICAgRGVzY3JpcHRpb246IHN0YWdlLkRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgRHVyYXRpb246IHN0YWdlLkR1cmF0aW9uLFxuICAgICAgICAgICAgUGFzc09uUnVsZTogc3RhZ2UuUGFzc09uUnVsZSxcbiAgICAgICAgICAgIEFjdG9yUnVsZTogc3RhZ2UuQWN0b3JSdWxlLFxuICAgICAgICAgICAgTWluTm9PZkFjdG9yOiBzdGFnZS5NaW5Ob09mQWN0b3IsXG4gICAgICAgICAgICBUYWdzOiBzdGFnZS5UYWdzIHx8IFtdLFxuICAgICAgICAgICAgSXNQYXJhbGxlbDogc3RhZ2UuSXNQYXJhbGxlbCxcbiAgICAgICAgICAgIElzRW50cnlQb2ludDogc3RhZ2UuSXNFbnRyeVBvaW50LFxuICAgICAgICAgICAgSXNFeGl0UG9pbnQ6IHN0YWdlLklzRXhpdFBvaW50LFxuICAgICAgICAgICAgSWQ6IHN0YWdlLklkLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGNvbm5lY3Rpb25zL2FjdGlvbnNcbiAgICBpZiAod29ya2Zsb3cuQWN0aW9ucyAmJiB3b3JrZmxvdy5BY3Rpb25zLmxlbmd0aCkge1xuICAgICAgd29ya2Zsb3cuQWN0aW9ucy5mb3JFYWNoKChhY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyBGaW5kIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzXG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoYWN0aW9uLkZyb21TdGFnZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoYWN0aW9uLlRvU3RhZ2UpO1xuXG4gICAgICAgIGlmIChzb3VyY2VOb2RlSW5mbyAmJiB0YXJnZXROb2RlSW5mbykge1xuICAgICAgICAgIC8vIEZpbmQgc3VpdGFibGUgY29ubmVjdGlvbiBwb2ludHNcbiAgICAgICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZU5vZGVJbmZvLm5vZGUuY29ubmVjdGlvblBvaW50cz8uWzBdO1xuICAgICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gdGFyZ2V0Tm9kZUluZm8ubm9kZS5jb25uZWN0aW9uUG9pbnRzPy5bMF07XG5cbiAgICAgICAgICBpZiAoc291cmNlUG9pbnQgJiYgdGFyZ2V0UG9pbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgIGlkOiBhY3Rpb24uSWQsXG4gICAgICAgICAgICAgIHNvdXJjZU5vZGVJZDogYWN0aW9uLkZyb21TdGFnZSxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUlkOiBhY3Rpb24uVG9TdGFnZSxcbiAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICAgICAgICAgIHRhcmdldFBvaW50SWQ6IHRhcmdldFBvaW50LmlkLFxuICAgICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzb3VyY2VOb2RlSW5mby5zd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiB0YXJnZXROb2RlSW5mby5zd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZmluZCBzd2ltbGFuZSBpbmRleCBieSBMYW5lIElEXG4gIGZpbmRTd2ltbGFuZUluZGV4QnlMYW5lSWQobGFuZUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIC8vIEluIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiwgeW91IHdvdWxkIG1haW50YWluIGEgbWFwcGluZyBiZXR3ZWVuIEFQSSBsYW5lIElEcyBhbmQgVUkgc3dpbWxhbmUgaW5kaWNlc1xuICAgIC8vIEZvciBub3cgd2UnbGwganVzdCByZXR1cm4gdGhlIGluZGV4IGJhc2VkIG9uIHBvc2l0aW9uXG4gICAgY29uc3QgcGFydHMgPSBsYW5lSWQuc3BsaXQoJy0nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludChwYXJ0c1sxXSk7XG4gICAgICBpZiAoIWlzTmFOKGluZGV4KSAmJiBpbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIEhhbmRsZSB0b29sIHNlbGVjdGlvbiBmcm9tIHRvb2xiYXJcbiAgb25Ub29sU2VsZWN0ZWQodG9vbDogVG9vbFR5cGUpOiB2b2lkIHtcbiAgICAvLyBUb2dnbGUgc2VsZWN0aW9uIGlmIHRoZSBzYW1lIHRvb2wgaXMgY2xpY2tlZCBhZ2FpblxuICAgIHRoaXMuc2VsZWN0ZWRUb29sID0gdGhpcy5zZWxlY3RlZFRvb2wgPT09IHRvb2wgPyBudWxsIDogdG9vbDtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdG9vbDonLCB0aGlzLnNlbGVjdGVkVG9vbCk7XG4gIH1cblxuICBvcGVuU3dpbWxhbmVEaWFsb2coKSB7XG4gICAgdGhpcy5zaG93U3dpbWxhbmVEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgb25TaG93U3RhZ2VEaWFsb2coZXZlbnQ6IHsgcG9zaXRpb246IGFueTsgaXNGcm9tQ29ubmVjdGlvbjogYm9vbGVhbiB9KSB7XG4gICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIHNob3dTdGFnZURpYWxvZyBldmVudDonLCBldmVudCk7XG4gICAgdGhpcy5wZW5kaW5nU3RhZ2VQb3NpdGlvbiA9IGV2ZW50LnBvc2l0aW9uO1xuICAgIHRoaXMuc2hvd1N0YWdlRGlhbG9nID0gdHJ1ZTtcblxuICAgIC8vIElmIHRoaXMgaXMgZnJvbSBhIGNvbm5lY3Rpb24gY3JlYXRpb24sIHN0b3JlIHRoYXQgaW5mb1xuICAgIHRoaXMuaXNDcmVhdGluZ1N0YWdlRnJvbUNvbm5lY3Rpb24gPSBldmVudC5pc0Zyb21Db25uZWN0aW9uO1xuXG4gICAgLy8gU3RvcmUgdGhlIHNvdXJjZSBwb2ludCBkYXRhIGJlZm9yZSBpdCBnZXRzIGxvc3RcbiAgICBpZiAoXG4gICAgICBldmVudC5pc0Zyb21Db25uZWN0aW9uICYmXG4gICAgICB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnRcbiAgICApIHtcbiAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludCA9XG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludDtcbiAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVN3aW1sYW5lSW5kZXggPz8gbnVsbDtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnU3RvcmVkIHNvdXJjZSBwb2ludCBmb3IgY29ubmVjdGlvbjonLFxuICAgICAgICB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1N0YWdlIGRpYWxvZyBzdGF0ZTonLCB7XG4gICAgICBwZW5kaW5nUG9zaXRpb246IHRoaXMucGVuZGluZ1N0YWdlUG9zaXRpb24sXG4gICAgICBpc1Zpc2libGU6IHRoaXMuc2hvd1N0YWdlRGlhbG9nLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQ2FudmFzUG9zaXRpb25DbGljayhldmVudDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBlZGl0IHN3aW1sYW5lIGV2ZW50XG4gICAgaWYgKFxuICAgICAgZXZlbnQueCA9PT0gLTEgJiZcbiAgICAgIGV2ZW50LnkgPj0gMCAmJlxuICAgICAgZXZlbnQueSA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJ0VkaXRpbmcgc3dpbWxhbmUnLCBldmVudC55KTtcbiAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXggPSBldmVudC55O1xuICAgICAgdGhpcy5vcGVuU3dpbWxhbmVEaWFsb2coKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWwgY2FudmFzIGNsaWNrIGhhbmRsaW5nXG4gICAgY29uc3Qgc3dpbWxhbmVJbmRleCA9IE1hdGguZmxvb3IoZXZlbnQueSAvIDI2Myk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRUb29sKSB7XG4gICAgICBjYXNlICdzd2ltbGFuZSc6XG4gICAgICAgIGNvbnNvbGUubG9nKCdPcGVuaW5nIHN3aW1sYW5lIGRpYWxvZyBmb3IgbmV3IHN3aW1sYW5lJyk7XG4gICAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXggPSBudWxsOyAvLyBTZXQgdG8gbnVsbCB0byBpbmRpY2F0ZSBjcmVhdGluZyBhIG5ldyBzd2ltbGFuZVxuICAgICAgICB0aGlzLm9wZW5Td2ltbGFuZURpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0YWdlJzpcbiAgICAgICAgaWYgKHN3aW1sYW5lSW5kZXggPj0gMCAmJiBzd2ltbGFuZUluZGV4IDwgdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQWRkaW5nICR7dGhpcy5zZWxlY3RlZFRvb2x9IHRvIHN3aW1sYW5lICR7c3dpbWxhbmVJbmRleH1gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFN0b3JlIHBvc2l0aW9uIGZvciBsYXRlciBub2RlIGNyZWF0aW9uXG4gICAgICAgICAgdGhpcy5wZW5kaW5nU3RhZ2VQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIHN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICB4OiBldmVudC54LFxuICAgICAgICAgICAgeTogZXZlbnQueSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gU2hvdyBzdGFnZSBwcm9wZXJ0aWVzIGRpYWxvZ1xuICAgICAgICAgIHRoaXMuc2hvd1N0YWdlRGlhbG9nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RlY2lzaW9uJzpcbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICBpZiAoc3dpbWxhbmVJbmRleCA+PSAwICYmIHN3aW1sYW5lSW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBBZGRpbmcgJHt0aGlzLnNlbGVjdGVkVG9vbH0gdG8gc3dpbWxhbmUgJHtzd2ltbGFuZUluZGV4fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICAgICAgICBzd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRvb2wsXG4gICAgICAgICAgICBldmVudC54LFxuICAgICAgICAgICAgZXZlbnQueVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBzZWxlY3RlZCB0b29sIGFmdGVyIHBsYWNpbmcgYSBub2RlXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVG9vbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3ViZmxvdyc6XG4gICAgICAgIGlmIChzd2ltbGFuZUluZGV4ID49IDAgJiYgc3dpbWxhbmVJbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYEFkZGluZyAke3RoaXMuc2VsZWN0ZWRUb29sfSB0byBzd2ltbGFuZSAke3N3aW1sYW5lSW5kZXh9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gU2hvdyBzdWJmbG93IHdvcmtmbG93IHNlbGVjdGlvbiBwb3B1cFxuICAgICAgICAgIHRoaXMuY2FudmFzUmVmLnNob3dTdWJmbG93U2VsZWN0aW9uUG9wdXAoXG4gICAgICAgICAgICBldmVudC54LFxuICAgICAgICAgICAgZXZlbnQueSxcbiAgICAgICAgICAgIHN3aW1sYW5lSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb25Td2ltbGFuZURpYWxvZ0ZpbGxlZChldmVudDogeyB0YWdzOiBUYWdbXTsgbmFtZTogc3RyaW5nIH0pIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdTd2ltbGFuZSBkaWFsb2cgZmlsbGVkOicsXG4gICAgICBldmVudCxcbiAgICAgICdFZGl0aW5nIGluZGV4OicsXG4gICAgICB0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4XG4gICAgKTtcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgbmFtZSBpcyBub3QgZW1wdHlcbiAgICBpZiAoIWV2ZW50Lm5hbWUgfHwgZXZlbnQubmFtZS50cmltKCkgPT09ICcnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdTd2ltbGFuZSBuYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAvLyBVcGRhdGUgZXhpc3Rpbmcgc3dpbWxhbmVcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnVXBkYXRpbmcgZXhpc3Rpbmcgc3dpbWxhbmUgYXQgaW5kZXg6JyxcbiAgICAgICAgdGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleFxuICAgICAgKTtcbiAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3dpbWxhbmUoXG4gICAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXgsXG4gICAgICAgIGV2ZW50Lm5hbWUsXG4gICAgICAgIGV2ZW50LnRhZ3NcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgc3dpbWxhbmVcbiAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBuZXcgc3dpbWxhbmUnKTtcbiAgICAgIHRoaXMuc3RhdGUuYWRkU3dpbWxhbmUoZXZlbnQubmFtZSwgZXZlbnQudGFncyk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93U3dpbWxhbmVEaWFsb2cgPSBmYWxzZTtcbiAgICB0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIG9uU3RhZ2VEaWFsb2dTYXZlZChzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4pIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nU3RhZ2VQb3NpdGlvbikge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzdGFnZSBub2RlXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5zdGF0ZS5hZGROb2RlKFxuICAgICAgICB0aGlzLnBlbmRpbmdTdGFnZVBvc2l0aW9uLnN3aW1sYW5lSW5kZXgsXG4gICAgICAgICdzdGFnZScsXG4gICAgICAgIHRoaXMucGVuZGluZ1N0YWdlUG9zaXRpb24ueCxcbiAgICAgICAgdGhpcy5wZW5kaW5nU3RhZ2VQb3NpdGlvbi55LFxuICAgICAgICBzdGFnZURhdGFcbiAgICAgICk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnU291cmNlIHBvaW50IG9uIGRpYWxvZyBzYXZlOicsXG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnSXMgY3JlYXRpbmcgZnJvbSBjb25uZWN0aW9uOicsXG4gICAgICAgIHRoaXMuaXNDcmVhdGluZ1N0YWdlRnJvbUNvbm5lY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIC8vIElmIHRoaXMgd2FzIGNyZWF0ZWQgZnJvbSBhIGNvbm5lY3Rpb24sIGNyZWF0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5pc0NyZWF0aW5nU3RhZ2VGcm9tQ29ubmVjdGlvbiAmJlxuICAgICAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICdVc2luZyBzdG9yZWQgc291cmNlIHBvaW50OicsXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gRmluZCBhIHN1aXRhYmxlIGNvbm5lY3Rpb24gcG9pbnQgb24gdGhlIG5ldyBub2RlXG4gICAgICAgICAgaWYgKG5vZGUuY29ubmVjdGlvblBvaW50cyAmJiBub2RlLmNvbm5lY3Rpb25Qb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnQ7XG5cbiAgICAgICAgICAgIC8vIEZpbmQgb3Bwb3NpbmcgdHlwZSBjb25uZWN0aW9uIHBvaW50XG4gICAgICAgICAgICBjb25zdCBvcHBvc2luZ1R5cGUgPSB7XG4gICAgICAgICAgICAgIHJpZ2h0OiAnbGVmdCcsXG4gICAgICAgICAgICAgIGxlZnQ6ICdyaWdodCcsXG4gICAgICAgICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgICAgICAgIGJvdHRvbTogJ3RvcCcsXG4gICAgICAgICAgICB9W3NvdXJjZVBvaW50LnR5cGVdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IG5vZGUuY29ubmVjdGlvblBvaW50cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT4gcC50eXBlID09PSBvcHBvc2luZ1R5cGVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRQb2ludCkge1xuICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24gdXNpbmcgb3VyIHN0b3JlZCBzb3VyY2UgZGF0YVxuICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIGlkOiBgY29ubi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YCxcbiAgICAgICAgICAgICAgICBzb3VyY2VOb2RlSWQ6IHNvdXJjZVBvaW50Lm5vZGVJZCxcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0UG9pbnRJZDogdGFyZ2V0UG9pbnQuaWQsXG4gICAgICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXghLFxuICAgICAgICAgICAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IHRoaXMucGVuZGluZ1N0YWdlUG9zaXRpb24uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAvLyBBZGQgY29ubmVjdGlvbiB0byB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5wdXNoKGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVuZCB0aGUgY29ubmVjdGlvbiBkcmFnXG4gICAgICAgICAgLy8gdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzZXQgdGhlIHNlbGVjdGVkIHRvb2wgYWZ0ZXIgcGxhY2luZyBhIG5vZGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRvb2wgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciBwZW5kaW5nIGRhdGFcbiAgICAgIHRoaXMucGVuZGluZ1N0YWdlUG9zaXRpb24gPSBudWxsO1xuICAgICAgdGhpcy5pc0NyZWF0aW5nU3RhZ2VGcm9tQ29ubmVjdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50ID0gbnVsbDtcbiAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnQ29ubmVjdGlvbnMgYWZ0ZXIgYWRkaW5nIG5ldyBvbmU6JywgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyk7XG5cbiAgICB0aGlzLnNob3dTdGFnZURpYWxvZyA9IGZhbHNlO1xuICB9XG5cbiAgb25TdWJmbG93U2VsZWN0ZWQoKSB7XG4gICAgLy8gUmVzZXQgdGhlIHNlbGVjdGVkIHRvb2wgYWZ0ZXIgcGxhY2luZyBhIHN1YmZsb3cgbm9kZVxuICAgIHRoaXMuc2VsZWN0ZWRUb29sID0gbnVsbDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIndvcmtmbG93LWRlc2lnbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ3b3JrZmxvdy1oZWFkZXJcIj5cbiAgICA8aDE+V29ya2Zsb3cgRGVzaWduZXI8L2gxPlxuICA8L2Rpdj5cblxuICA8IS0tIFRvb2xiYXIgQ29tcG9uZW50IC0tPlxuICA8bGliLWRlc2lnbmVyLXRvb2xiYXJcbiAgICBbc2VsZWN0ZWRUb29sXT1cInNlbGVjdGVkVG9vbFwiXG4gICAgKHRvb2xTZWxlY3RlZCk9XCJvblRvb2xTZWxlY3RlZCgkZXZlbnQpXCJcbiAgPlxuICA8L2xpYi1kZXNpZ25lci10b29sYmFyPlxuXG4gIDwhLS0gU2hvdyBsb2FkaW5nIGluZGljYXRvciBpZiBuZWVkZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdcIiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy10ZXh0XCI+TG9hZGluZyB3b3JrZmxvdy4uLjwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENhbnZhcyBDb21wb25lbnQgLS0+XG4gIDxsaWItZGVzaWduZXItY2FudmFzXG4gICAgW3NlbGVjdGVkVG9vbF09XCJzZWxlY3RlZFRvb2xcIlxuICAgIChjbGlja2VkUG9zaXRpb24pPVwiaGFuZGxlQ2FudmFzUG9zaXRpb25DbGljaygkZXZlbnQpXCJcbiAgICAoc3ViZmxvd1NlbGVjdGVkKT1cIm9uU3ViZmxvd1NlbGVjdGVkKClcIlxuICAgIChzaG93U3RhZ2VEaWFsb2cpPVwib25TaG93U3RhZ2VEaWFsb2coJGV2ZW50KVwiXG4gICAgI2NhbnZhc1JlZlxuICA+XG4gIDwvbGliLWRlc2lnbmVyLWNhbnZhcz5cblxuICA8bGliLXN3aW1sYW5lLWRpYWxvZ1xuICAgIFt2aXNpYmxlXT1cInNob3dTd2ltbGFuZURpYWxvZ1wiXG4gICAgW3N3aW1sYW5lRGF0YV09XCJcbiAgICAgIGVkaXRpbmdTd2ltbGFuZUluZGV4ICE9PSBudWxsXG4gICAgICAgID8ge1xuICAgICAgICAgICAgbmFtZTogc3RhdGUuc3dpbWxhbmVzW2VkaXRpbmdTd2ltbGFuZUluZGV4XS5sYWJlbCxcbiAgICAgICAgICAgIHRhZ3M6IHN0YXRlLnN3aW1sYW5lc1tlZGl0aW5nU3dpbWxhbmVJbmRleF0udGFnc1xuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsXG4gICAgXCJcbiAgICAoY3JlYXRlZCk9XCJvblN3aW1sYW5lRGlhbG9nRmlsbGVkKCRldmVudClcIlxuICAgIChjbG9zZWQpPVwic2hvd1N3aW1sYW5lRGlhbG9nID0gZmFsc2VcIlxuICA+PC9saWItc3dpbWxhbmUtZGlhbG9nPlxuXG4gIDxsaWItc3RhZ2UtZGlhbG9nXG4gICAgW3Zpc2libGVdPVwic2hvd1N0YWdlRGlhbG9nXCJcbiAgICBbc3RhZ2VEYXRhXT1cInBlbmRpbmdTdGFnZURhdGFcIlxuICAgIChjbG9zZWQpPVwic2hvd1N0YWdlRGlhbG9nID0gZmFsc2VcIlxuICAgIChzYXZlZCk9XCJvblN0YWdlRGlhbG9nU2F2ZWQoJGV2ZW50KVwiXG4gID48L2xpYi1zdGFnZS1kaWFsb2c+XG48L2Rpdj5cbiJdfQ==
|
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kZXNpZ25lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7O0FBYzVELE1BQU0sT0FBTyx5QkFBeUI7SUF3QjNCO0lBQ0M7SUF4QmMsU0FBUyxDQUEyQjtJQUNuRCxZQUFZLEdBQWtCLElBQUksQ0FBQztJQUU1QywwQkFBMEI7SUFDMUIsWUFBWSxHQUFhLElBQUksQ0FBQztJQUM5QixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFFcEMsa0NBQWtDO0lBQ2xDLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFDakMsb0JBQW9CLEdBQ2xCLElBQUksQ0FBQztJQUNQLGdCQUFnQixHQUEyQixFQUFFLENBQUM7SUFFOUMsb0JBQW9CLEdBQWtCLElBQUksQ0FBQztJQUMzQyw2QkFBNkIsR0FBWSxLQUFLLENBQUM7SUFFL0MsNEJBQTRCLEdBQTJCLElBQUksQ0FBQztJQUM1RCxvQ0FBb0MsR0FBa0IsSUFBSSxDQUFDO0lBRTNELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixZQUNTLEtBQTRCLEVBQzNCLFdBQWdDO1FBRGpDLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtJ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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29ubmVjdGlvblBvaW50LCBUb29sVHlwZSB9IGZyb20gJy4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuaW1wb3J0IHsgV29ya2Zsb3dEZXNpZ25lclN0YXRlIH0gZnJvbSAnLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBUYWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvVGFnJztcbmltcG9ydCB7IFdvcmtmbG93U3RhZ2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvV29ya2Zsb3dTdGFnZSc7XG5pbXBvcnQgeyBEZXNpZ25lckNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vZGVzaWduZXItY2FudmFzL2Rlc2lnbmVyLWNhbnZhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93IH0gZnJvbSAnLi4vLi4vbW9kZWxzL1dvcmtmbG93JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXdvcmtmbG93LWRlc2lnbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LWRlc2lnbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3dvcmtmbG93LWRlc2lnbmVyLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0Rlc2lnbmVyQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgnY2FudmFzUmVmJykgY2FudmFzUmVmITogRGVzaWduZXJDYW52YXNDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHdvcmtmbG93Q29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gQ3VycmVudGx5IHNlbGVjdGVkIHRvb2xcbiAgc2VsZWN0ZWRUb29sOiBUb29sVHlwZSA9IG51bGw7XG4gIHNob3dTd2ltbGFuZURpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE5ldyBwcm9wZXJ0aWVzIGZvciBzdGFnZSBkaWFsb2dcbiAgc2hvd1N0YWdlRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIHBlbmRpbmdTdGFnZVBvc2l0aW9uOiB7IHN3aW1sYW5lSW5kZXg6IG51bWJlcjsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPVxuICAgIG51bGw7XG4gIHBlbmRpbmdTdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4gPSB7fTtcblxuICBlZGl0aW5nU3dpbWxhbmVJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGlzQ3JlYXRpbmdTdGFnZUZyb21Db25uZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludDogQ29ubmVjdGlvblBvaW50IHwgbnVsbCA9IG51bGw7XG4gIHBlbmRpbmdDb25uZWN0aW9uU291cmNlU3dpbWxhbmVJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXRlOiBXb3JrZmxvd0Rlc2lnbmVyU3RhdGUsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogV29ya2Zsb3dEYXRhU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gTG9hZCB3b3JrZmxvdyBkYXRhIGlmIGNvZGUgaXMgcHJvdmlkZWRcbiAgICBpZiAodGhpcy53b3JrZmxvd0NvZGUpIHtcbiAgICAgIHRoaXMubG9hZFdvcmtmbG93KHRoaXMud29ya2Zsb3dDb2RlKTtcbiAgICB9XG4gIH1cblxuICBzYXZlV29ya2Zsb3coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTYXZpbmcpIHJldHVybjtcblxuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBVSSBtb2RlbCB0byB0aGUgQVBJIG1vZGVsXG4gICAgY29uc3Qgd29ya2Zsb3dNb2RlbCA9IHRoaXMuc3RhdGUudHJhbnNmb3JtVG9Xb3JrZmxvd01vZGVsKCk7XG5cbiAgICAvLyBTYXZlIHRvIHRoZSBiYWNrZW5kXG4gICAgdGhpcy5kYXRhU2VydmljZVxuICAgICAgLnNhdmVXb3JrZmxvd3MoW3dvcmtmbG93TW9kZWxdKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdXb3JrZmxvdyBzYXZlZCBzdWNjZXNzZnVsbHk6JywgcmVzcG9uc2UpO1xuICAgICAgICAvLyBJZiB0aGUgQVBJIHJldHVybnMgYW4gdXBkYXRlZCB3b3JrZmxvdywgd2UgbWlnaHQgd2FudCB0byByZWxvYWQgaXRcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5SZXN1bHQ/LkNvZGUpIHtcbiAgICAgICAgICB0aGlzLndvcmtmbG93Q29kZSA9IHJlc3BvbnNlLlJlc3VsdC5Db2RlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yIC0gc2hvdyBhIG5vdGlmaWNhdGlvbiwgZXRjLlxuICAgICAgfSk7XG4gIH1cblxuICBsb2FkV29ya2Zsb3coY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGF0YVNlcnZpY2VcbiAgICAgIC5nZXRXb3JrZmxvd1dpdGhQYXJhbShjb2RlKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5SZXN1bHQpIHtcbiAgICAgICAgICAvLyBTdG9yZSB0aGUgd29ya2Zsb3cgSURcbiAgICAgICAgICBjb25zdCB3ZiA9IHJlc3BvbnNlLlJlc3VsdFswXTtcbiAgICAgICAgICB0aGlzLnN0YXRlLnNldFdvcmtmbG93SWQod2YuSWQpO1xuICAgICAgICAgIHRoaXMucGFyc2VXb3JrZmxvd0RhdGEod2YpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHdvcmtmbG93OicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIHBhcnNlIHdvcmtmbG93IGRhdGEgZnJvbSBBUEkgYW5kIHBvcHVsYXRlIHRoZSBkZXNpZ25lclxuICBwYXJzZVdvcmtmbG93RGF0YSh3b3JrZmxvdzogV29ya2Zsb3cpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBleGlzdGluZyBzdGF0ZVxuICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzID0gW107XG4gICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyA9IFtdO1xuXG4gICAgLy8gU2V0IHdvcmtmbG93IGZvcm0gaWYgZXhpc3RzXG4gICAgaWYgKHdvcmtmbG93LkZvcm0pIHtcbiAgICAgIHRoaXMuc3RhdGUuc2V0V29ya2Zsb3dGb3JtKFxuICAgICAgICB3b3JrZmxvdy5Gb3JtLFxuICAgICAgICB3b3JrZmxvdy5Gb3JtTmFtZSB8fCAnV29ya2Zsb3cgRm9ybSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBzd2ltbGFuZXMgZmlyc3RcbiAgICBpZiAod29ya2Zsb3cuTGFuZXMgJiYgd29ya2Zsb3cuTGFuZXMubGVuZ3RoKSB7XG4gICAgICB3b3JrZmxvdy5MYW5lcy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5Qb3NpdGlvbiAtIGIuUG9zaXRpb24pLmZvckVhY2goXG4gICAgICAgIChsYW5lOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXRlLmFkZFN3aW1sYW5lKFxuICAgICAgICAgICAgbGFuZS5OYW1lIHx8IGBMYW5lICR7bGFuZS5Qb3NpdGlvbn1gLFxuICAgICAgICAgICAgbGFuZS5UYWdzIHx8IFtdXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIHN0YWdlc1xuICAgIGlmICh3b3JrZmxvdy5TdGFnZXMgJiYgd29ya2Zsb3cuU3RhZ2VzLmxlbmd0aCkge1xuICAgICAgd29ya2Zsb3cuU3RhZ2VzLmZvckVhY2goKHN0YWdlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gRmluZCBzd2ltbGFuZSBpbmRleFxuICAgICAgICBjb25zdCBzd2ltbGFuZUluZGV4ID0gdGhpcy5maW5kU3dpbWxhbmVJbmRleEJ5TGFuZUlkKHN0YWdlLlN3aW1MYW5lKTtcbiAgICAgICAgaWYgKHN3aW1sYW5lSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgY29uc3QgeCA9IHN0YWdlLkNvb3JkaW5hdGVzPy5YIHx8IDEwMDtcbiAgICAgICAgICBjb25zdCB5ID0gc3RhZ2UuQ29vcmRpbmF0ZXM/LlkgfHwgNTA7XG5cbiAgICAgICAgICB0aGlzLnN0YXRlLmFkZE5vZGUoc3dpbWxhbmVJbmRleCwgJ3N0YWdlJywgeCwgeSwge1xuICAgICAgICAgICAgTmFtZTogc3RhZ2UuTmFtZSxcbiAgICAgICAgICAgIERlc2NyaXB0aW9uOiBzdGFnZS5EZXNjcmlwdGlvbixcbiAgICAgICAgICAgIER1cmF0aW9uOiBzdGFnZS5EdXJhdGlvbixcbiAgICAgICAgICAgIFBhc3NPblJ1bGU6IHN0YWdlLlBhc3NPblJ1bGUsXG4gICAgICAgICAgICBBY3RvclJ1bGU6IHN0YWdlLkFjdG9yUnVsZSxcbiAgICAgICAgICAgIE1pbk5vT2ZBY3Rvcjogc3RhZ2UuTWluTm9PZkFjdG9yLFxuICAgICAgICAgICAgVGFnczogc3RhZ2UuVGFncyB8fCBbXSxcbiAgICAgICAgICAgIElzUGFyYWxsZWw6IHN0YWdlLklzUGFyYWxsZWwsXG4gICAgICAgICAgICBJc0VudHJ5UG9pbnQ6IHN0YWdlLklzRW50cnlQb2ludCxcbiAgICAgICAgICAgIElzRXhpdFBvaW50OiBzdGFnZS5Jc0V4aXRQb2ludCxcbiAgICAgICAgICAgIElkOiBzdGFnZS5JZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSB3b3JrZmxvdyBpdHNlbGZcbiAgICAgIHRoaXMuc3RhdGUucmVnaXN0ZXJMb2FkZWRPYmplY3Qod29ya2Zsb3cuSWQsIHdvcmtmbG93LkNvZGUpO1xuXG4gICAgICAvLyBSZWdpc3RlciBzd2ltbGFuZXMgd2hlbiBwcm9jZXNzaW5nXG4gICAgICBpZiAod29ya2Zsb3cuTGFuZXMgJiYgd29ya2Zsb3cuTGFuZXMubGVuZ3RoKSB7XG4gICAgICAgIHdvcmtmbG93LkxhbmVzLmZvckVhY2goKGxhbmU6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGUucmVnaXN0ZXJMb2FkZWRPYmplY3QobGFuZS5JZCwgbGFuZS5Db2RlKTtcbiAgICAgICAgICAvLyBFeGlzdGluZyBsYW5lIHByb2Nlc3NpbmcgY29kZS4uLlxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVnaXN0ZXIgc3RhZ2VzIHdoZW4gcHJvY2Vzc2luZ1xuICAgICAgaWYgKHdvcmtmbG93LlN0YWdlcyAmJiB3b3JrZmxvdy5TdGFnZXMubGVuZ3RoKSB7XG4gICAgICAgIHdvcmtmbG93LlN0YWdlcy5mb3JFYWNoKChzdGFnZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGF0ZS5yZWdpc3RlckxvYWRlZE9iamVjdChzdGFnZS5JZCwgc3RhZ2UuQ29kZSk7XG4gICAgICAgICAgLy8gRXhpc3Rpbmcgc3RhZ2UgcHJvY2Vzc2luZyBjb2RlLi4uXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWdpc3RlciBhY3Rpb25zL2Nvbm5lY3Rpb25zIHdoZW4gcHJvY2Vzc2luZ1xuICAgICAgaWYgKHdvcmtmbG93LkFjdGlvbnMgJiYgd29ya2Zsb3cuQWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgd29ya2Zsb3cuQWN0aW9ucy5mb3JFYWNoKChhY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhdGUucmVnaXN0ZXJMb2FkZWRPYmplY3QoYWN0aW9uLklkLCBhY3Rpb24uQ29kZSk7XG4gICAgICAgICAgLy8gRXhpc3RpbmcgYWN0aW9uIHByb2Nlc3NpbmcgY29kZS4uLlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGNvbm5lY3Rpb25zL2FjdGlvbnNcbiAgICBpZiAod29ya2Zsb3cuQWN0aW9ucyAmJiB3b3JrZmxvdy5BY3Rpb25zLmxlbmd0aCkge1xuICAgICAgd29ya2Zsb3cuQWN0aW9ucy5mb3JFYWNoKChhY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAvLyBGaW5kIHNvdXJjZSBhbmQgdGFyZ2V0IG5vZGVzXG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoYWN0aW9uLkZyb21TdGFnZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGVJbmZvID0gdGhpcy5zdGF0ZS5maW5kTm9kZUJ5SWQoYWN0aW9uLlRvU3RhZ2UpO1xuXG4gICAgICAgIGlmIChzb3VyY2VOb2RlSW5mbyAmJiB0YXJnZXROb2RlSW5mbykge1xuICAgICAgICAgIC8vIEZpbmQgc3VpdGFibGUgY29ubmVjdGlvbiBwb2ludHNcbiAgICAgICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZU5vZGVJbmZvLm5vZGUuY29ubmVjdGlvblBvaW50cz8uWzBdO1xuICAgICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gdGFyZ2V0Tm9kZUluZm8ubm9kZS5jb25uZWN0aW9uUG9pbnRzPy5bMF07XG5cbiAgICAgICAgICBpZiAoc291cmNlUG9pbnQgJiYgdGFyZ2V0UG9pbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgIGlkOiBhY3Rpb24uSWQsXG4gICAgICAgICAgICAgIHNvdXJjZU5vZGVJZDogYWN0aW9uLkZyb21TdGFnZSxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUlkOiBhY3Rpb24uVG9TdGFnZSxcbiAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICAgICAgICAgIHRhcmdldFBvaW50SWQ6IHRhcmdldFBvaW50LmlkLFxuICAgICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzb3VyY2VOb2RlSW5mby5zd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiB0YXJnZXROb2RlSW5mby5zd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZmluZCBzd2ltbGFuZSBpbmRleCBieSBMYW5lIElEXG4gIGZpbmRTd2ltbGFuZUluZGV4QnlMYW5lSWQobGFuZUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIC8vIEluIGEgcmVhbCBpbXBsZW1lbnRhdGlvbiwgeW91IHdvdWxkIG1haW50YWluIGEgbWFwcGluZyBiZXR3ZWVuIEFQSSBsYW5lIElEcyBhbmQgVUkgc3dpbWxhbmUgaW5kaWNlc1xuICAgIC8vIEZvciBub3cgd2UnbGwganVzdCByZXR1cm4gdGhlIGluZGV4IGJhc2VkIG9uIHBvc2l0aW9uXG4gICAgY29uc3QgcGFydHMgPSBsYW5lSWQuc3BsaXQoJy0nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgY29uc3QgaW5kZXggPSBwYXJzZUludChwYXJ0c1sxXSk7XG4gICAgICBpZiAoIWlzTmFOKGluZGV4KSAmJiBpbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIEhhbmRsZSB0b29sIHNlbGVjdGlvbiBmcm9tIHRvb2xiYXJcbiAgb25Ub29sU2VsZWN0ZWQodG9vbDogVG9vbFR5cGUpOiB2b2lkIHtcbiAgICAvLyBUb2dnbGUgc2VsZWN0aW9uIGlmIHRoZSBzYW1lIHRvb2wgaXMgY2xpY2tlZCBhZ2FpblxuICAgIHRoaXMuc2VsZWN0ZWRUb29sID0gdGhpcy5zZWxlY3RlZFRvb2wgPT09IHRvb2wgPyBudWxsIDogdG9vbDtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdG9vbDonLCB0aGlzLnNlbGVjdGVkVG9vbCk7XG4gIH1cblxuICBvcGVuU3dpbWxhbmVEaWFsb2coKSB7XG4gICAgdGhpcy5zaG93U3dpbWxhbmVEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgb25TaG93U3RhZ2VEaWFsb2coZXZlbnQ6IHsgcG9zaXRpb246IGFueTsgaXNGcm9tQ29ubmVjdGlvbjogYm9vbGVhbiB9KSB7XG4gICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIHNob3dTdGFnZURpYWxvZyBldmVudDonLCBldmVudCk7XG4gICAgdGhpcy5wZW5kaW5nU3RhZ2VQb3NpdGlvbiA9IGV2ZW50LnBvc2l0aW9uO1xuICAgIHRoaXMuc2hvd1N0YWdlRGlhbG9nID0gdHJ1ZTtcblxuICAgIC8vIElmIHRoaXMgaXMgZnJvbSBhIGNvbm5lY3Rpb24gY3JlYXRpb24sIHN0b3JlIHRoYXQgaW5mb1xuICAgIHRoaXMuaXNDcmVhdGluZ1N0YWdlRnJvbUNvbm5lY3Rpb24gPSBldmVudC5pc0Zyb21Db25uZWN0aW9uO1xuXG4gICAgLy8gU3RvcmUgdGhlIHNvdXJjZSBwb2ludCBkYXRhIGJlZm9yZSBpdCBnZXRzIGxvc3RcbiAgICBpZiAoXG4gICAgICBldmVudC5pc0Zyb21Db25uZWN0aW9uICYmXG4gICAgICB0aGlzLnN0YXRlLmRyYWdnaW5nQ29ubmVjdGlvbkRhdGEuc291cmNlUG9pbnRcbiAgICApIHtcbiAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludCA9XG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludDtcbiAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5kcmFnZ2luZ0Nvbm5lY3Rpb25EYXRhLnNvdXJjZVN3aW1sYW5lSW5kZXggPz8gbnVsbDtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnU3RvcmVkIHNvdXJjZSBwb2ludCBmb3IgY29ubmVjdGlvbjonLFxuICAgICAgICB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1N0YWdlIGRpYWxvZyBzdGF0ZTonLCB7XG4gICAgICBwZW5kaW5nUG9zaXRpb246IHRoaXMucGVuZGluZ1N0YWdlUG9zaXRpb24sXG4gICAgICBpc1Zpc2libGU6IHRoaXMuc2hvd1N0YWdlRGlhbG9nLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlQ2FudmFzUG9zaXRpb25DbGljayhldmVudDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBlZGl0IHN3aW1sYW5lIGV2ZW50XG4gICAgaWYgKFxuICAgICAgZXZlbnQueCA9PT0gLTEgJiZcbiAgICAgIGV2ZW50LnkgPj0gMCAmJlxuICAgICAgZXZlbnQueSA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJ0VkaXRpbmcgc3dpbWxhbmUnLCBldmVudC55KTtcbiAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXggPSBldmVudC55O1xuICAgICAgdGhpcy5vcGVuU3dpbWxhbmVEaWFsb2coKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWwgY2FudmFzIGNsaWNrIGhhbmRsaW5nXG4gICAgY29uc3Qgc3dpbWxhbmVJbmRleCA9IE1hdGguZmxvb3IoZXZlbnQueSAvIDI2Myk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRUb29sKSB7XG4gICAgICBjYXNlICdzd2ltbGFuZSc6XG4gICAgICAgIGNvbnNvbGUubG9nKCdPcGVuaW5nIHN3aW1sYW5lIGRpYWxvZyBmb3IgbmV3IHN3aW1sYW5lJyk7XG4gICAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXggPSBudWxsOyAvLyBTZXQgdG8gbnVsbCB0byBpbmRpY2F0ZSBjcmVhdGluZyBhIG5ldyBzd2ltbGFuZVxuICAgICAgICB0aGlzLm9wZW5Td2ltbGFuZURpYWxvZygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0YWdlJzpcbiAgICAgICAgaWYgKHN3aW1sYW5lSW5kZXggPj0gMCAmJiBzd2ltbGFuZUluZGV4IDwgdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQWRkaW5nICR7dGhpcy5zZWxlY3RlZFRvb2x9IHRvIHN3aW1sYW5lICR7c3dpbWxhbmVJbmRleH1gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIFN0b3JlIHBvc2l0aW9uIGZvciBsYXRlciBub2RlIGNyZWF0aW9uXG4gICAgICAgICAgdGhpcy5wZW5kaW5nU3RhZ2VQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIHN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICB4OiBldmVudC54LFxuICAgICAgICAgICAgeTogZXZlbnQueSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gU2hvdyBzdGFnZSBwcm9wZXJ0aWVzIGRpYWxvZ1xuICAgICAgICAgIHRoaXMuc2hvd1N0YWdlRGlhbG9nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RlY2lzaW9uJzpcbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICBpZiAoc3dpbWxhbmVJbmRleCA+PSAwICYmIHN3aW1sYW5lSW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBBZGRpbmcgJHt0aGlzLnNlbGVjdGVkVG9vbH0gdG8gc3dpbWxhbmUgJHtzd2ltbGFuZUluZGV4fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICAgICAgICBzd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRvb2wsXG4gICAgICAgICAgICBldmVudC54LFxuICAgICAgICAgICAgZXZlbnQueVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBzZWxlY3RlZCB0b29sIGFmdGVyIHBsYWNpbmcgYSBub2RlXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVG9vbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3ViZmxvdyc6XG4gICAgICAgIGlmIChzd2ltbGFuZUluZGV4ID49IDAgJiYgc3dpbWxhbmVJbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYEFkZGluZyAke3RoaXMuc2VsZWN0ZWRUb29sfSB0byBzd2ltbGFuZSAke3N3aW1sYW5lSW5kZXh9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gU2hvdyBzdWJmbG93IHdvcmtmbG93IHNlbGVjdGlvbiBwb3B1cFxuICAgICAgICAgIHRoaXMuY2FudmFzUmVmLnNob3dTdWJmbG93U2VsZWN0aW9uUG9wdXAoXG4gICAgICAgICAgICBldmVudC54LFxuICAgICAgICAgICAgZXZlbnQueSxcbiAgICAgICAgICAgIHN3aW1sYW5lSW5kZXhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgb25Td2ltbGFuZURpYWxvZ0ZpbGxlZChldmVudDogeyB0YWdzOiBUYWdbXTsgbmFtZTogc3RyaW5nIH0pIHtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICdTd2ltbGFuZSBkaWFsb2cgZmlsbGVkOicsXG4gICAgICBldmVudCxcbiAgICAgICdFZGl0aW5nIGluZGV4OicsXG4gICAgICB0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4XG4gICAgKTtcblxuICAgIC8vIFZhbGlkYXRlIHRoYXQgbmFtZSBpcyBub3QgZW1wdHlcbiAgICBpZiAoIWV2ZW50Lm5hbWUgfHwgZXZlbnQubmFtZS50cmltKCkgPT09ICcnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdTd2ltbGFuZSBuYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAvLyBVcGRhdGUgZXhpc3Rpbmcgc3dpbWxhbmVcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnVXBkYXRpbmcgZXhpc3Rpbmcgc3dpbWxhbmUgYXQgaW5kZXg6JyxcbiAgICAgICAgdGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleFxuICAgICAgKTtcbiAgICAgIHRoaXMuc3RhdGUudXBkYXRlU3dpbWxhbmUoXG4gICAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXgsXG4gICAgICAgIGV2ZW50Lm5hbWUsXG4gICAgICAgIGV2ZW50LnRhZ3NcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgc3dpbWxhbmVcbiAgICAgIGNvbnNvbGUubG9nKCdDcmVhdGluZyBuZXcgc3dpbWxhbmUnKTtcbiAgICAgIHRoaXMuc3RhdGUuYWRkU3dpbWxhbmUoZXZlbnQubmFtZSwgZXZlbnQudGFncyk7XG4gICAgfVxuXG4gICAgdGhpcy5zaG93U3dpbWxhbmVEaWFsb2cgPSBmYWxzZTtcbiAgICB0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIG9uU3RhZ2VEaWFsb2dTYXZlZChzdGFnZURhdGE6IFBhcnRpYWw8V29ya2Zsb3dTdGFnZT4pIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nU3RhZ2VQb3NpdGlvbikge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBzdGFnZSBub2RlXG4gICAgICBjb25zdCBub2RlID0gdGhpcy5zdGF0ZS5hZGROb2RlKFxuICAgICAgICB0aGlzLnBlbmRpbmdTdGFnZVBvc2l0aW9uLnN3aW1sYW5lSW5kZXgsXG4gICAgICAgICdzdGFnZScsXG4gICAgICAgIHRoaXMucGVuZGluZ1N0YWdlUG9zaXRpb24ueCxcbiAgICAgICAgdGhpcy5wZW5kaW5nU3RhZ2VQb3NpdGlvbi55LFxuICAgICAgICBzdGFnZURhdGFcbiAgICAgICk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnU291cmNlIHBvaW50IG9uIGRpYWxvZyBzYXZlOicsXG4gICAgICAgIHRoaXMuc3RhdGUuZHJhZ2dpbmdDb25uZWN0aW9uRGF0YS5zb3VyY2VQb2ludFxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAnSXMgY3JlYXRpbmcgZnJvbSBjb25uZWN0aW9uOicsXG4gICAgICAgIHRoaXMuaXNDcmVhdGluZ1N0YWdlRnJvbUNvbm5lY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIC8vIElmIHRoaXMgd2FzIGNyZWF0ZWQgZnJvbSBhIGNvbm5lY3Rpb24sIGNyZWF0ZSB0aGUgY29ubmVjdGlvblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5pc0NyZWF0aW5nU3RhZ2VGcm9tQ29ubmVjdGlvbiAmJlxuICAgICAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VQb2ludFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICdVc2luZyBzdG9yZWQgc291cmNlIHBvaW50OicsXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gRmluZCBhIHN1aXRhYmxlIGNvbm5lY3Rpb24gcG9pbnQgb24gdGhlIG5ldyBub2RlXG4gICAgICAgICAgaWYgKG5vZGUuY29ubmVjdGlvblBvaW50cyAmJiBub2RlLmNvbm5lY3Rpb25Qb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSB0aGlzLnBlbmRpbmdDb25uZWN0aW9uU291cmNlUG9pbnQ7XG5cbiAgICAgICAgICAgIC8vIEZpbmQgb3Bwb3NpbmcgdHlwZSBjb25uZWN0aW9uIHBvaW50XG4gICAgICAgICAgICBjb25zdCBvcHBvc2luZ1R5cGUgPSB7XG4gICAgICAgICAgICAgIHJpZ2h0OiAnbGVmdCcsXG4gICAgICAgICAgICAgIGxlZnQ6ICdyaWdodCcsXG4gICAgICAgICAgICAgIHRvcDogJ2JvdHRvbScsXG4gICAgICAgICAgICAgIGJvdHRvbTogJ3RvcCcsXG4gICAgICAgICAgICB9W3NvdXJjZVBvaW50LnR5cGVdIGFzICd0b3AnIHwgJ3JpZ2h0JyB8ICdib3R0b20nIHwgJ2xlZnQnO1xuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IG5vZGUuY29ubmVjdGlvblBvaW50cy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT4gcC50eXBlID09PSBvcHBvc2luZ1R5cGVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXRQb2ludCkge1xuICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24gdXNpbmcgb3VyIHN0b3JlZCBzb3VyY2UgZGF0YVxuICAgICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIGlkOiBgY29ubi0ke0RhdGUubm93KCl9LSR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMCl9YCxcbiAgICAgICAgICAgICAgICBzb3VyY2VOb2RlSWQ6IHNvdXJjZVBvaW50Lm5vZGVJZCxcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlSWQ6IG5vZGUuaWQsXG4gICAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnQuaWQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0UG9pbnRJZDogdGFyZ2V0UG9pbnQuaWQsXG4gICAgICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVN3aW1sYW5lSW5kZXghLFxuICAgICAgICAgICAgICAgIHRhcmdldFN3aW1sYW5lSW5kZXg6IHRoaXMucGVuZGluZ1N0YWdlUG9zaXRpb24uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAvLyBBZGQgY29ubmVjdGlvbiB0byB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5wdXNoKGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ3JlYXRlZCBjb25uZWN0aW9uOicsIGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVuZCB0aGUgY29ubmVjdGlvbiBkcmFnXG4gICAgICAgICAgLy8gdGhpcy5zdGF0ZS5lbmRDb25uZWN0aW9uRHJhZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzZXQgdGhlIHNlbGVjdGVkIHRvb2wgYWZ0ZXIgcGxhY2luZyBhIG5vZGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRvb2wgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciBwZW5kaW5nIGRhdGFcbiAgICAgIHRoaXMucGVuZGluZ1N0YWdlUG9zaXRpb24gPSBudWxsO1xuICAgICAgdGhpcy5pc0NyZWF0aW5nU3RhZ2VGcm9tQ29ubmVjdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5wZW5kaW5nQ29ubmVjdGlvblNvdXJjZVBvaW50ID0gbnVsbDtcbiAgICAgIHRoaXMucGVuZGluZ0Nvbm5lY3Rpb25Tb3VyY2VTd2ltbGFuZUluZGV4ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnQ29ubmVjdGlvbnMgYWZ0ZXIgYWRkaW5nIG5ldyBvbmU6JywgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyk7XG5cbiAgICB0aGlzLnNob3dTdGFnZURpYWxvZyA9IGZhbHNlO1xuICB9XG5cbiAgb25TdWJmbG93U2VsZWN0ZWQoKSB7XG4gICAgLy8gUmVzZXQgdGhlIHNlbGVjdGVkIHRvb2wgYWZ0ZXIgcGxhY2luZyBhIHN1YmZsb3cgbm9kZVxuICAgIHRoaXMuc2VsZWN0ZWRUb29sID0gbnVsbDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIndvcmtmbG93LWRlc2lnbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ3b3JrZmxvdy1oZWFkZXJcIj5cbiAgICA8aDE+V29ya2Zsb3cgRGVzaWduZXI8L2gxPlxuICA8L2Rpdj5cblxuICA8IS0tIFRvb2xiYXIgQ29tcG9uZW50IC0tPlxuICA8bGliLWRlc2lnbmVyLXRvb2xiYXJcbiAgICBbc2VsZWN0ZWRUb29sXT1cInNlbGVjdGVkVG9vbFwiXG4gICAgW2lzU2F2aW5nXT1cImlzU2F2aW5nXCJcbiAgICAodG9vbFNlbGVjdGVkKT1cIm9uVG9vbFNlbGVjdGVkKCRldmVudClcIlxuICAgIChzYXZlV29ya2Zsb3cpPVwic2F2ZVdvcmtmbG93KClcIlxuICA+XG4gIDwvbGliLWRlc2lnbmVyLXRvb2xiYXI+XG5cbiAgPCEtLSBTaG93IGxvYWRpbmcgaW5kaWNhdG9yIGlmIG5lZWRlZCAtLT5cbiAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwibG9hZGluZy1vdmVybGF5XCI+XG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5Mb2FkaW5nIHdvcmtmbG93Li4uPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2FudmFzIENvbXBvbmVudCAtLT5cbiAgPGxpYi1kZXNpZ25lci1jYW52YXNcbiAgICBbc2VsZWN0ZWRUb29sXT1cInNlbGVjdGVkVG9vbFwiXG4gICAgKGNsaWNrZWRQb3NpdGlvbik9XCJoYW5kbGVDYW52YXNQb3NpdGlvbkNsaWNrKCRldmVudClcIlxuICAgIChzdWJmbG93U2VsZWN0ZWQpPVwib25TdWJmbG93U2VsZWN0ZWQoKVwiXG4gICAgKHNob3dTdGFnZURpYWxvZyk9XCJvblNob3dTdGFnZURpYWxvZygkZXZlbnQpXCJcbiAgICAjY2FudmFzUmVmXG4gID5cbiAgPC9saWItZGVzaWduZXItY2FudmFzPlxuXG4gIDxsaWItc3dpbWxhbmUtZGlhbG9nXG4gICAgW3Zpc2libGVdPVwic2hvd1N3aW1sYW5lRGlhbG9nXCJcbiAgICBbc3dpbWxhbmVEYXRhXT1cIlxuICAgICAgZWRpdGluZ1N3aW1sYW5lSW5kZXggIT09IG51bGxcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBuYW1lOiBzdGF0ZS5zd2ltbGFuZXNbZWRpdGluZ1N3aW1sYW5lSW5kZXhdLmxhYmVsLFxuICAgICAgICAgICAgdGFnczogc3RhdGUuc3dpbWxhbmVzW2VkaXRpbmdTd2ltbGFuZUluZGV4XS50YWdzXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGxcbiAgICBcIlxuICAgIChjcmVhdGVkKT1cIm9uU3dpbWxhbmVEaWFsb2dGaWxsZWQoJGV2ZW50KVwiXG4gICAgKGNsb3NlZCk9XCJzaG93U3dpbWxhbmVEaWFsb2cgPSBmYWxzZVwiXG4gID48L2xpYi1zd2ltbGFuZS1kaWFsb2c+XG5cbiAgPGxpYi1zdGFnZS1kaWFsb2dcbiAgICBbdmlzaWJsZV09XCJzaG93U3RhZ2VEaWFsb2dcIlxuICAgIFtzdGFnZURhdGFdPVwicGVuZGluZ1N0YWdlRGF0YVwiXG4gICAgKGNsb3NlZCk9XCJzaG93U3RhZ2VEaWFsb2cgPSBmYWxzZVwiXG4gICAgKHNhdmVkKT1cIm9uU3RhZ2VEaWFsb2dTYXZlZCgkZXZlbnQpXCJcbiAgPjwvbGliLXN0YWdlLWRpYWxvZz5cbjwvZGl2PlxuIl19
|