@cqa-lib/cqa-ui 1.1.379 → 1.1.381
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/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/condition-step/condition-step.component.mjs +50 -3
- package/esm2020/lib/execution-screen/execution-step.models.mjs +1 -1
- package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +3 -3
- package/esm2020/lib/execution-screen/step-group/step-group.component.mjs +3 -3
- package/esm2020/lib/test-case-details/run-execution-alert/run-execution-alert.component.mjs +48 -6
- package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +3 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +102 -13
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +100 -13
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/execution-screen/condition-step/condition-step.component.d.ts +23 -0
- package/lib/execution-screen/execution-step.models.d.ts +1 -0
- package/lib/test-case-details/run-execution-alert/run-execution-alert.component.d.ts +24 -1
- package/package.json +1 -1
- package/styles.css +1 -1
|
@@ -1,42 +1,84 @@
|
|
|
1
|
-
import { Component, EventEmitter, Output, Inject, Optional } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter, Output, Inject, Optional, Input } from '@angular/core';
|
|
2
2
|
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../../
|
|
4
|
+
import * as i1 from "../../dynamic-select/dynamic-select-field.component";
|
|
5
|
+
import * as i2 from "../../button/button.component";
|
|
6
|
+
import * as i3 from "@angular/common";
|
|
5
7
|
/**
|
|
6
8
|
* Run Execution alert modal when the user clicks Execution but the test case has no prerequisites.
|
|
7
9
|
* Similar to delete-steps: two actions — "Cancel" (abort) and "Run Anyway" (proceed with execution).
|
|
8
10
|
*/
|
|
9
11
|
export class RunExecutionAlertComponent {
|
|
10
12
|
constructor(data) {
|
|
13
|
+
/**
|
|
14
|
+
* Title text shown in the header.
|
|
15
|
+
* Can be provided either via @Input() or MAT_DIALOG_DATA.
|
|
16
|
+
*/
|
|
11
17
|
this.title = 'No prerequisites';
|
|
18
|
+
/**
|
|
19
|
+
* Body message shown under the title.
|
|
20
|
+
* Can be provided either via @Input() or MAT_DIALOG_DATA.
|
|
21
|
+
*/
|
|
12
22
|
this.message = 'This test case has no prerequisites. Do you want to run execution anyway?';
|
|
23
|
+
/** Emitted when user wants to run with prerequisites. */
|
|
24
|
+
this.runWithPrerequisites = new EventEmitter();
|
|
25
|
+
/** Emitted when user confirms they want to proceed (Run Anyway). */
|
|
13
26
|
this.runAnyway = new EventEmitter();
|
|
27
|
+
/** Emitted when user cancels/closes the alert. */
|
|
14
28
|
this.cancelled = new EventEmitter();
|
|
29
|
+
// When used inside an Angular Material dialog, allow MAT_DIALOG_DATA
|
|
30
|
+
// to override the default title/message. @Input() bindings from a
|
|
31
|
+
// parent component will still run after this constructor.
|
|
15
32
|
if (data?.title)
|
|
16
33
|
this.title = data.title;
|
|
17
34
|
if (data?.message)
|
|
18
35
|
this.message = data.message;
|
|
19
36
|
}
|
|
37
|
+
/** True when "Run with Prerequisites" should be disabled (no selection). */
|
|
38
|
+
get disableRunWithPrereq() {
|
|
39
|
+
if (!this.prerequisiteForm || !this.prerequisiteSelectConfig?.key) {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
const ctrl = this.prerequisiteForm.get(this.prerequisiteSelectConfig.key);
|
|
43
|
+
const value = ctrl?.value;
|
|
44
|
+
if (Array.isArray(value)) {
|
|
45
|
+
return value.length === 0;
|
|
46
|
+
}
|
|
47
|
+
return !value;
|
|
48
|
+
}
|
|
20
49
|
onCancel() {
|
|
21
50
|
this.cancelled.emit();
|
|
22
51
|
}
|
|
23
52
|
onRunAnyway() {
|
|
24
53
|
this.runAnyway.emit();
|
|
25
54
|
}
|
|
55
|
+
onRunWithPrerequisites() {
|
|
56
|
+
this.runWithPrerequisites.emit();
|
|
57
|
+
}
|
|
26
58
|
}
|
|
27
59
|
RunExecutionAlertComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: RunExecutionAlertComponent, deps: [{ token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
-
RunExecutionAlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: RunExecutionAlertComponent, selector: "cqa-run-execution-alert", outputs: { runAnyway: "runAnyway", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ title }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n {{ message }}\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Actions: Cancel | Run Anyway (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Run Anyway\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#3F43EE] cqa-text-white'\"\n (clicked)=\"onRunAnyway()\">\n </cqa-button>\n </div>\n</div>\n", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }] });
|
|
60
|
+
RunExecutionAlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: RunExecutionAlertComponent, selector: "cqa-run-execution-alert", inputs: { title: "title", message: "message", prerequisiteForm: "prerequisiteForm", prerequisiteSelectConfig: "prerequisiteSelectConfig" }, outputs: { runWithPrerequisites: "runWithPrerequisites", runAnyway: "runAnyway", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ title }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n {{ message }}\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Optional prerequisite selector (rendered when inputs are provided) -->\n <div *ngIf=\"prerequisiteForm && prerequisiteSelectConfig\" class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <label class=\"cqa-font-medium cqa-text-[13px] cqa-text-[#374151]\">Select Prerequisites</label>\n <cqa-dynamic-select\n [form]=\"prerequisiteForm\"\n [config]=\"prerequisiteSelectConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Actions: Cancel | Run Anyway (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Run Anyway\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#3F43EE] cqa-text-white'\"\n (clicked)=\"onRunAnyway()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Run with Prerequisites\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#3F43EE] cqa-text-white'\"\n [disabled]=\"disableRunWithPrereq\"\n (clicked)=\"onRunWithPrerequisites()\">\n </cqa-button>\n </div>\n</div>\n", components: [{ type: i1.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
29
61
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: RunExecutionAlertComponent, decorators: [{
|
|
30
62
|
type: Component,
|
|
31
|
-
args: [{ selector: 'cqa-run-execution-alert', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ title }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n {{ message }}\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Actions: Cancel | Run Anyway (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Run Anyway\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#3F43EE] cqa-text-white'\"\n (clicked)=\"onRunAnyway()\">\n </cqa-button>\n </div>\n</div>\n" }]
|
|
63
|
+
args: [{ selector: 'cqa-run-execution-alert', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ title }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n {{ message }}\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Optional prerequisite selector (rendered when inputs are provided) -->\n <div *ngIf=\"prerequisiteForm && prerequisiteSelectConfig\" class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n <label class=\"cqa-font-medium cqa-text-[13px] cqa-text-[#374151]\">Select Prerequisites</label>\n <cqa-dynamic-select\n [form]=\"prerequisiteForm\"\n [config]=\"prerequisiteSelectConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Actions: Cancel | Run Anyway (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Run Anyway\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#3F43EE] cqa-text-white'\"\n (clicked)=\"onRunAnyway()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Run with Prerequisites\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#3F43EE] cqa-text-white'\"\n [disabled]=\"disableRunWithPrereq\"\n (clicked)=\"onRunWithPrerequisites()\">\n </cqa-button>\n </div>\n</div>\n" }]
|
|
32
64
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
33
65
|
type: Optional
|
|
34
66
|
}, {
|
|
35
67
|
type: Inject,
|
|
36
68
|
args: [MAT_DIALOG_DATA]
|
|
37
|
-
}] }]; }, propDecorators: {
|
|
69
|
+
}] }]; }, propDecorators: { title: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}], message: [{
|
|
72
|
+
type: Input
|
|
73
|
+
}], prerequisiteForm: [{
|
|
74
|
+
type: Input
|
|
75
|
+
}], prerequisiteSelectConfig: [{
|
|
76
|
+
type: Input
|
|
77
|
+
}], runWithPrerequisites: [{
|
|
78
|
+
type: Output
|
|
79
|
+
}], runAnyway: [{
|
|
38
80
|
type: Output
|
|
39
81
|
}], cancelled: [{
|
|
40
82
|
type: Output
|
|
41
83
|
}] } });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLWV4ZWN1dGlvbi1hbGVydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3J1bi1leGVjdXRpb24tYWxlcnQvcnVuLWV4ZWN1dGlvbi1hbGVydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3J1bi1leGVjdXRpb24tYWxlcnQvcnVuLWV4ZWN1dGlvbi1hbGVydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7OztBQUkzRDs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sMEJBQTBCO0lBdUJyQyxZQUN1QyxJQUEyQztRQXZCbEY7OztXQUdHO1FBQ00sVUFBSyxHQUFHLGtCQUFrQixDQUFDO1FBRXBDOzs7V0FHRztRQUNNLFlBQU8sR0FBRywyRUFBMkUsQ0FBQztRQVMvRix5REFBeUQ7UUFDL0MseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQVkxRCxvRUFBb0U7UUFDMUQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0Msa0RBQWtEO1FBQ3hDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBWDdDLHFFQUFxRTtRQUNyRSxrRUFBa0U7UUFDbEUsMERBQTBEO1FBQzFELElBQUksSUFBSSxFQUFFLEtBQUs7WUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekMsSUFBSSxJQUFJLEVBQUUsT0FBTztZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNqRCxDQUFDO0lBUUQsNEVBQTRFO0lBQzVFLElBQUksb0JBQW9CO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO1lBQ2pFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQzFCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNoQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ25DLENBQUM7O3VIQTlEVSwwQkFBMEIsa0JBd0JmLGVBQWU7MkdBeEIxQiwwQkFBMEIsK1ZDZHZDLG9yRkEyREE7MkZEN0NhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx5QkFBeUIsUUFFN0IsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzswQkEwQjNCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZTs0Q0FuQjVCLEtBQUs7c0JBQWIsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUs7Z0JBTUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFHSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBYUcsU0FBUztzQkFBbEIsTUFBTTtnQkFHRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5qZWN0LCBPcHRpb25hbCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuXG4vKipcbiAqIFJ1biBFeGVjdXRpb24gYWxlcnQgbW9kYWwgd2hlbiB0aGUgdXNlciBjbGlja3MgRXhlY3V0aW9uIGJ1dCB0aGUgdGVzdCBjYXNlIGhhcyBubyBwcmVyZXF1aXNpdGVzLlxuICogU2ltaWxhciB0byBkZWxldGUtc3RlcHM6IHR3byBhY3Rpb25zIOKAlCBcIkNhbmNlbFwiIChhYm9ydCkgYW5kIFwiUnVuIEFueXdheVwiIChwcm9jZWVkIHdpdGggZXhlY3V0aW9uKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXJ1bi1leGVjdXRpb24tYWxlcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vcnVuLWV4ZWN1dGlvbi1hbGVydC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbn0pXG5leHBvcnQgY2xhc3MgUnVuRXhlY3V0aW9uQWxlcnRDb21wb25lbnQge1xuICAvKipcbiAgICogVGl0bGUgdGV4dCBzaG93biBpbiB0aGUgaGVhZGVyLlxuICAgKiBDYW4gYmUgcHJvdmlkZWQgZWl0aGVyIHZpYSBASW5wdXQoKSBvciBNQVRfRElBTE9HX0RBVEEuXG4gICAqL1xuICBASW5wdXQoKSB0aXRsZSA9ICdObyBwcmVyZXF1aXNpdGVzJztcblxuICAvKipcbiAgICogQm9keSBtZXNzYWdlIHNob3duIHVuZGVyIHRoZSB0aXRsZS5cbiAgICogQ2FuIGJlIHByb3ZpZGVkIGVpdGhlciB2aWEgQElucHV0KCkgb3IgTUFUX0RJQUxPR19EQVRBLlxuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZSA9ICdUaGlzIHRlc3QgY2FzZSBoYXMgbm8gcHJlcmVxdWlzaXRlcy4gRG8geW91IHdhbnQgdG8gcnVuIGV4ZWN1dGlvbiBhbnl3YXk/JztcblxuICAvKipcbiAgICogT3B0aW9uYWwgZm9ybSBhbmQgY29uZmlnIGZvciBhIHByZXJlcXVpc2l0ZSBzZWxlY3QgZmllbGQuXG4gICAqIFdoZW4gcHJvdmlkZWQsIGEgY3FhLWR5bmFtaWMtc2VsZWN0IHdpbGwgYmUgcmVuZGVyZWQgaW5zaWRlIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KCkgcHJlcmVxdWlzaXRlRm9ybT86IEZvcm1Hcm91cCB8IG51bGw7XG4gIEBJbnB1dCgpIHByZXJlcXVpc2l0ZVNlbGVjdENvbmZpZz86IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB8IG51bGw7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHdhbnRzIHRvIHJ1biB3aXRoIHByZXJlcXVpc2l0ZXMuICovXG4gIEBPdXRwdXQoKSBydW5XaXRoUHJlcmVxdWlzaXRlcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgZGF0YT86IHsgdGl0bGU/OiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmcgfVxuICApIHtcbiAgICAvLyBXaGVuIHVzZWQgaW5zaWRlIGFuIEFuZ3VsYXIgTWF0ZXJpYWwgZGlhbG9nLCBhbGxvdyBNQVRfRElBTE9HX0RBVEFcbiAgICAvLyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCB0aXRsZS9tZXNzYWdlLiBASW5wdXQoKSBiaW5kaW5ncyBmcm9tIGFcbiAgICAvLyBwYXJlbnQgY29tcG9uZW50IHdpbGwgc3RpbGwgcnVuIGFmdGVyIHRoaXMgY29uc3RydWN0b3IuXG4gICAgaWYgKGRhdGE/LnRpdGxlKSB0aGlzLnRpdGxlID0gZGF0YS50aXRsZTtcbiAgICBpZiAoZGF0YT8ubWVzc2FnZSkgdGhpcy5tZXNzYWdlID0gZGF0YS5tZXNzYWdlO1xuICB9XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNvbmZpcm1zIHRoZXkgd2FudCB0byBwcm9jZWVkIChSdW4gQW55d2F5KS4gKi9cbiAgQE91dHB1dCgpIHJ1bkFueXdheSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgY2FuY2Vscy9jbG9zZXMgdGhlIGFsZXJ0LiAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBUcnVlIHdoZW4gXCJSdW4gd2l0aCBQcmVyZXF1aXNpdGVzXCIgc2hvdWxkIGJlIGRpc2FibGVkIChubyBzZWxlY3Rpb24pLiAqL1xuICBnZXQgZGlzYWJsZVJ1bldpdGhQcmVyZXEoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnByZXJlcXVpc2l0ZUZvcm0gfHwgIXRoaXMucHJlcmVxdWlzaXRlU2VsZWN0Q29uZmlnPy5rZXkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBjdHJsID0gdGhpcy5wcmVyZXF1aXNpdGVGb3JtLmdldCh0aGlzLnByZXJlcXVpc2l0ZVNlbGVjdENvbmZpZy5rZXkpO1xuICAgIGNvbnN0IHZhbHVlID0gY3RybD8udmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICByZXR1cm4gIXZhbHVlO1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgb25SdW5Bbnl3YXkoKTogdm9pZCB7XG4gICAgdGhpcy5ydW5Bbnl3YXkuZW1pdCgpO1xuICB9XG5cbiAgb25SdW5XaXRoUHJlcmVxdWlzaXRlcygpOiB2b2lkIHtcbiAgICB0aGlzLnJ1bldpdGhQcmVyZXF1aXNpdGVzLmVtaXQoKTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1bMTJweF0gY3FhLXNoYWRvdy1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0U1RTdFQl0gY3FhLXctZnVsbCBjcWEtbWF4LXctWzUwMHB4XSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC00IGNxYS1wLTYgY3FhLWJveC1ib3JkZXIgY3FhLW1pbi1oLTBcIj5cbiAgPCEtLSBIZWFkZXI6IHRpdGxlICsgY2xvc2UgKFgpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLW1pbi13LTBcIj5cbiAgICAgIDxoMiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bMjJweF0gY3FhLWxlYWRpbmctWzI4cHhdIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMxMDE4MjhdIGNxYS1tLTBcIj5cbiAgICAgICAge3sgdGl0bGUgfX1cbiAgICAgIDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzIxcHhdIGNxYS10cmFja2luZy1bLTAuMTVweF0gY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tLTBcIj5cbiAgICAgICAge3sgbWVzc2FnZSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtbWluLWgtNyBjcWEtbWluLXctNyBjcWEtcm91bmRlZCBjcWEtdGV4dC1bIzZCNzI4MF0gaG92ZXI6Y3FhLWJnLVsjRjNGNEY2XSBjcWEtcC0wIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgPHBhdGggZD1cIk0xOCA2TDYgMThNNiA2bDEyIDEyXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIE9wdGlvbmFsIHByZXJlcXVpc2l0ZSBzZWxlY3RvciAocmVuZGVyZWQgd2hlbiBpbnB1dHMgYXJlIHByb3ZpZGVkKSAtLT5cbiAgPGRpdiAqbmdJZj1cInByZXJlcXVpc2l0ZUZvcm0gJiYgcHJlcmVxdWlzaXRlU2VsZWN0Q29uZmlnXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsxM3B4XSBjcWEtdGV4dC1bIzM3NDE1MV1cIj5TZWxlY3QgUHJlcmVxdWlzaXRlczwvbGFiZWw+XG4gICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgW2Zvcm1dPVwicHJlcmVxdWlzaXRlRm9ybVwiXG4gICAgICBbY29uZmlnXT1cInByZXJlcXVpc2l0ZVNlbGVjdENvbmZpZ1wiPlxuICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbnM6IENhbmNlbCB8IFJ1biBBbnl3YXkgKHJpZ2h0LWFsaWduZWQpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1lbmQgY3FhLXctZnVsbCBjcWEtZ2FwLTNcIj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICB0ZXh0PVwiQ2FuY2VsXCJcbiAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtYmctd2hpdGUgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM0MTQxNDZdIGNxYS10ZXh0LVsjNDE0MTQ2XSdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICBidG5TaXplPVwibGdcIlxuICAgICAgdGV4dD1cIlJ1biBBbnl3YXlcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS1ib3JkZXItMCBjcWEtYmctWyMzRjQzRUVdIGNxYS10ZXh0LXdoaXRlJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvblJ1bkFueXdheSgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwiZmlsbGVkXCJcbiAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICB0ZXh0PVwiUnVuIHdpdGggUHJlcmVxdWlzaXRlc1wiXG4gICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLXJvdW5kZWQtWzhweF0gY3FhLWJvcmRlci0wIGNxYS1iZy1bIzNGNDNFRV0gY3FhLXRleHQtd2hpdGUnXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlUnVuV2l0aFByZXJlcVwiXG4gICAgICAoY2xpY2tlZCk9XCJvblJ1bldpdGhQcmVyZXF1aXNpdGVzKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|