mmhglobal-dynamicform 2.11.2 → 2.11.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/README.md +5 -1
- package/esm2020/lib/sfquerybuilder/sfquerybuilder.component.mjs +22 -39
- package/fesm2015/mmhglobal-dynamicform.mjs +21 -38
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +21 -38
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/sfquerybuilder/sfquerybuilder.component.d.ts +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,9 +3,13 @@
|
|
|
3
3
|
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
|
|
4
4
|
|
|
5
5
|
## Changelog
|
|
6
|
+
`2.11.3`<br/>
|
|
7
|
+
[sfquerybuilder] - renamed dropdown display text by adding prefix if kcard involve.<br/>
|
|
8
|
+
[sfquerybuilder] - code clean up.
|
|
9
|
+
|
|
6
10
|
`2.11.2`<br/>
|
|
7
11
|
[sfquerybuilder] - increase filter weight & decrease operator weight.<br/>
|
|
8
|
-
[sfquerybuilder] - exclude zlabel in filter list
|
|
12
|
+
[sfquerybuilder] - exclude zlabel in filter list.
|
|
9
13
|
|
|
10
14
|
`2.11.1`<br/>
|
|
11
15
|
[workflowbutton] - added deleteGotoButton function .<br/>
|
|
@@ -6,10 +6,10 @@ import { of } from 'rxjs';
|
|
|
6
6
|
import { delay, ignoreElements, map, switchMap, tap } from 'rxjs/operators';
|
|
7
7
|
import { DropDownList, MultiSelect } from '@syncfusion/ej2-dropdowns';
|
|
8
8
|
import { getComponent, createElement } from '@syncfusion/ej2-base';
|
|
9
|
+
import { Query } from '@syncfusion/ej2-data';
|
|
9
10
|
import { CheckBox } from '@syncfusion/ej2-buttons';
|
|
10
11
|
/********** Component & Service **********/
|
|
11
12
|
import { ZComponentHelper, ZComponentProperties, DefaultPageSettingParams } from 'mmhglobal-zcore';
|
|
12
|
-
import { Query } from '@syncfusion/ej2-data';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
import * as i1 from "mmhglobal-zcore";
|
|
15
15
|
import * as i2 from "@ionic/angular";
|
|
@@ -23,10 +23,6 @@ export class SfquerybuilderComponent {
|
|
|
23
23
|
this.qbItems = {};
|
|
24
24
|
this.componentProperties = new ZComponentProperties();
|
|
25
25
|
this.issfLoaded = false;
|
|
26
|
-
//public currentConfig: QueryBuilderConfig = {
|
|
27
|
-
// fields: {},
|
|
28
|
-
// allowEmptyRulesets: true
|
|
29
|
-
//};
|
|
30
26
|
this.allowRuleset = true;
|
|
31
27
|
this.allowCollapse = false;
|
|
32
28
|
this.persistValueOnFieldChange = false;
|
|
@@ -34,6 +30,7 @@ export class SfquerybuilderComponent {
|
|
|
34
30
|
this.displayRule = '';
|
|
35
31
|
this.loadedDropdownOptions = [];
|
|
36
32
|
this.sdFilter = [];
|
|
33
|
+
//#region Operator
|
|
37
34
|
this.equalOperator = { value: 'equal', key: 'Equals' };
|
|
38
35
|
this.notequalOperator = { value: 'notequal', key: 'Not Equals' };
|
|
39
36
|
this.startswithOperator = { value: 'startswith', key: 'Start With' };
|
|
@@ -95,6 +92,7 @@ export class SfquerybuilderComponent {
|
|
|
95
92
|
this.isnullOperator,
|
|
96
93
|
this.isnotnullOperator
|
|
97
94
|
];
|
|
95
|
+
//#endregion
|
|
98
96
|
this.selectionComponentList = [];
|
|
99
97
|
}
|
|
100
98
|
ngOnInit() {
|
|
@@ -114,6 +112,18 @@ export class SfquerybuilderComponent {
|
|
|
114
112
|
//this.issfLoaded = true;
|
|
115
113
|
});
|
|
116
114
|
}
|
|
115
|
+
beforeLoadField(fieldElementData) {
|
|
116
|
+
let beforeLoadField = fieldElementData['BeforeLoadField'];
|
|
117
|
+
if (beforeLoadField) {
|
|
118
|
+
beforeLoadField = beforeLoadField.replace('modalGroup.', 'group.');
|
|
119
|
+
const callFunc = eval('this.' + beforeLoadField);
|
|
120
|
+
if (typeof callFunc === "function") {
|
|
121
|
+
const newFunc = callFunc.bind(this);
|
|
122
|
+
return newFunc(event, this, fieldElementData);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return of(fieldElementData);
|
|
126
|
+
}
|
|
117
127
|
loadQueryBuilder() {
|
|
118
128
|
if (this.data['AllowCollapse'] === true) {
|
|
119
129
|
this.allowCollapse = this.data['AllowCollapse'];
|
|
@@ -126,14 +136,9 @@ export class SfquerybuilderComponent {
|
|
|
126
136
|
}
|
|
127
137
|
this.fields = this.fieldService.getFormFieldCode(this.data.Value, "FormField", null, null);
|
|
128
138
|
try {
|
|
129
|
-
let isGrouped = true;
|
|
130
139
|
return this.fields.pipe(tap((data) => {
|
|
131
|
-
// if [isGrouped = true] include grouping name as prefix
|
|
132
|
-
if (data.length > 1) {
|
|
133
|
-
isGrouped = false;
|
|
134
|
-
}
|
|
135
140
|
data.forEach(async (field) => {
|
|
136
|
-
this.renderComponentType(field
|
|
141
|
+
this.renderComponentType(field);
|
|
137
142
|
}); //end foreach
|
|
138
143
|
this.issfLoaded = true;
|
|
139
144
|
}));
|
|
@@ -144,9 +149,9 @@ export class SfquerybuilderComponent {
|
|
|
144
149
|
return of(false);
|
|
145
150
|
}
|
|
146
151
|
}
|
|
147
|
-
async renderComponentType(field,
|
|
152
|
+
async renderComponentType(field, fieldTitle) {
|
|
148
153
|
let componentLabel = field.SubType ? field.Label : field.Label ?? field.Name;
|
|
149
|
-
componentLabel = !
|
|
154
|
+
componentLabel = !ZComponentHelper.isNullUndefinedEmpty(fieldTitle) ? "[" + fieldTitle + "] " + field.Label : !ZComponentHelper.isNullUndefinedEmpty(field.Label) ? field.Label : field.Name;
|
|
150
155
|
let componentField = !ZComponentHelper.isNullUndefinedEmpty(fieldTitle) ? fieldTitle + "_" + field.Value : field.Value;
|
|
151
156
|
if (field.Type === 'category' || field.Type === 'multiselect' || field.Type === 'zuiselectmultiple') {
|
|
152
157
|
this.sdFilter.push({
|
|
@@ -185,7 +190,7 @@ export class SfquerybuilderComponent {
|
|
|
185
190
|
else if (field.Type === 'kcard') {
|
|
186
191
|
if (field.Value.length > 0) {
|
|
187
192
|
field.Value.forEach(async (item) => {
|
|
188
|
-
this.renderComponentType(item,
|
|
193
|
+
this.renderComponentType(item, field.Title);
|
|
189
194
|
});
|
|
190
195
|
}
|
|
191
196
|
}
|
|
@@ -199,7 +204,7 @@ export class SfquerybuilderComponent {
|
|
|
199
204
|
}
|
|
200
205
|
this.sdFilter.sort((a, b) => a.label.toLowerCase() < b.label.toLowerCase() ? -1 : 1);
|
|
201
206
|
}
|
|
202
|
-
//#region
|
|
207
|
+
//#region Generate component
|
|
203
208
|
generateColumnCheckbox(label, value) {
|
|
204
209
|
return {
|
|
205
210
|
create: () => {
|
|
@@ -220,8 +225,6 @@ export class SfquerybuilderComponent {
|
|
|
220
225
|
}
|
|
221
226
|
};
|
|
222
227
|
}
|
|
223
|
-
//#endregion
|
|
224
|
-
//#region dropdown/multiselect
|
|
225
228
|
generateColumnSelection(fieldElementData) {
|
|
226
229
|
return {
|
|
227
230
|
// Creates the custom component
|
|
@@ -230,8 +233,7 @@ export class SfquerybuilderComponent {
|
|
|
230
233
|
if (this.data['Filters']) {
|
|
231
234
|
this.filters = ZComponentHelper.getGroupEvalValue.call(this, this.data['Filters'], this.group);
|
|
232
235
|
}
|
|
233
|
-
|
|
234
|
-
return createElement('input', { attrs: { 'type': 'text' } });
|
|
236
|
+
return createElement('input', { attrs: { 'type': 'text' } }); // 'display: none'
|
|
235
237
|
},
|
|
236
238
|
// Destroy the custom component
|
|
237
239
|
destroy: (args) => {
|
|
@@ -311,9 +313,6 @@ export class SfquerybuilderComponent {
|
|
|
311
313
|
});
|
|
312
314
|
const selectionComponent = this.generateSelectionComponent(args, optionList);
|
|
313
315
|
selectionComponent.appendTo('#' + args.elements.id);
|
|
314
|
-
//const xxx = document.getElementById(args.elements.id);
|
|
315
|
-
////xxx.appendChild(inputElement);
|
|
316
|
-
//xxx.style.display = 'block';
|
|
317
316
|
//#region used for updateSelectionOption
|
|
318
317
|
const existingIndex = this.selectionComponentList.findIndex((item) => item.componentId === args.elements.id);
|
|
319
318
|
if (existingIndex !== -1) {
|
|
@@ -467,10 +466,6 @@ export class SfquerybuilderComponent {
|
|
|
467
466
|
}
|
|
468
467
|
;
|
|
469
468
|
setQueryValue(savedData) {
|
|
470
|
-
//if (!this.qryBldrObj) {
|
|
471
|
-
// console.warn('query builder object is null.');
|
|
472
|
-
// return;
|
|
473
|
-
//}
|
|
474
469
|
if (savedData) {
|
|
475
470
|
this.qryBldrObj.setRules(savedData);
|
|
476
471
|
this.updateRule({ rule: savedData });
|
|
@@ -485,18 +480,6 @@ export class SfquerybuilderComponent {
|
|
|
485
480
|
onChange() {
|
|
486
481
|
this.updateRule({ rule: this.qryBldrObj.getValidRules(this.qryBldrObj.rule) });
|
|
487
482
|
}
|
|
488
|
-
beforeLoadField(fieldElementData) {
|
|
489
|
-
let beforeLoadField = fieldElementData['BeforeLoadField'];
|
|
490
|
-
if (beforeLoadField) {
|
|
491
|
-
beforeLoadField = beforeLoadField.replace('modalGroup.', 'group.');
|
|
492
|
-
const callFunc = eval('this.' + beforeLoadField);
|
|
493
|
-
if (typeof callFunc === "function") {
|
|
494
|
-
const newFunc = callFunc.bind(this);
|
|
495
|
-
return newFunc(event, this, fieldElementData);
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
return of(fieldElementData);
|
|
499
|
-
}
|
|
500
483
|
}
|
|
501
484
|
SfquerybuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SfquerybuilderComponent, deps: [{ token: i1.FieldService }, { token: i1.ResourceApiService }, { token: i1.WebApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
502
485
|
SfquerybuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SfquerybuilderComponent, selector: "app-sfquerybuilder", inputs: { data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "qryBldrObj", first: true, predicate: ["querybuilder"], descendants: true }], ngImport: i0, template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <div class=\"qbcontainer\">\r\n <ejs-querybuilder *ngIf=\"issfLoaded\"\r\n #querybuilder\r\n width=\"100%\"\r\n [dataSource]=\"sfData\"\r\n [columns]=\"sdFilter\"\r\n [rule]=\"importRules\"\r\n (ruleChange)=\"updateRule($event)\"\r\n (created)=\"onChange()\">\r\n </ejs-querybuilder>\r\n\r\n <div *ngIf=\"!data.HideShowResultPanel\">\r\n <br>\r\n <ion-label>Result</ion-label>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n style=\"border: 1px solid #d3d3d3; width: 100%;\">{{displayRule}}</textarea>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}#querybuilder .e-slider-container.e-control-wrapper{height:0}ejs-querybuilder{display:block}.e-query-builder{margin:0 auto;display:block;background-color:#fff;border-color:#e0e0e0}.highcontrast textarea#ruleContent{background-color:#000}.e-query-builder .e-group-body .e-rule-container{box-shadow:0 2px 6px #d3d3d3;height:auto;margin-top:0;padding-right:12px;border:none;border-color:none}.e-bigger.e-small .e-ddl.e-popup .e-list-item,.e-bigger.e-small .e-ddl.e-popup .e-list-group-item,.e-bigger.e-small .e-ddl.e-popup .e-fixed-head{font-size:14px;line-height:34px;padding-left:0;text-indent:16px}.e-query-builder .e-group-body .e-rule-container .e-rule-filter,.e-query-builder .e-group-body .e-rule-container .e-value{width:40%!important}.e-query-builder .e-group-body .e-rule-container .e-operator{width:15%!important}\n"], components: [{ type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i3.QueryBuilderComponent, selector: "ejs-querybuilder", inputs: ["allowValidation", "columns", "cssClass", "dataSource", "displayMode", "enableNotCondition", "enablePersistence", "enableRtl", "fieldMode", "fieldModel", "headerTemplate", "height", "immediateModeDelay", "locale", "matchCase", "maxGroupCount", "operatorModel", "readonly", "rule", "separator", "showButtons", "sortDirection", "summaryView", "valueModel", "width"], outputs: ["actionBegin", "beforeChange", "change", "created", "dataBound", "ruleChange"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
@@ -513,4 +496,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
513
496
|
}], form: [{
|
|
514
497
|
type: Input
|
|
515
498
|
}] } });
|
|
516
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHdEYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNTLGdCQUFnQixFQUFFLG9CQUFvQixFQUNoQyx3QkFBd0IsRUFDN0MsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQWUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQVExRCxNQUFNLE9BQU8sdUJBQXVCO0lBa0dsQyxZQUNVLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxhQUE0QjtRQUY1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztR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O3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgaWdub3JlRWxlbWVudHMsIG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbi8vaW1wb3J0IHsgUXVlcnlCdWlsZGVyQ29uZmlnLCBRdWVyeUJ1aWxkZXJDbGFzc05hbWVzIH0gZnJvbSAnYW5ndWxhcjItcXVlcnktYnVpbGRlcic7XHJcbmltcG9ydCB7IFJ1bGVNb2RlbCwgUXVlcnlCdWlsZGVyQ29tcG9uZW50LCBDb2x1bW5zTW9kZWwsIFRlbXBsYXRlQ29sdW1uLCBSdWxlQ2hhbmdlRXZlbnRBcmdzIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcXVlcnlidWlsZGVyJztcclxuaW1wb3J0IHsgRHJvcERvd25MaXN0LCBNdWx0aVNlbGVjdCB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1kcm9wZG93bnMnO1xyXG5pbXBvcnQgeyBnZXRDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYmFzZSc7XHJcbmltcG9ydCB7IENoZWNrQm94IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWJ1dHRvbnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEZpZWxkU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpGaWVsZCwgWkdyb3VwLFxyXG4gIEZvbnRBd2VTb21lU2VydmljZSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zLCBXZWJBcGlTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuaW1wb3J0IHsgRGF0YU1hbmFnZXIsIFF1ZXJ5IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWRhdGEnO1xyXG5kZWNsYXJlIHZhciAkOiBhbnlcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNmcXVlcnlidWlsZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NmcXVlcnlidWlsZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZnF1ZXJ5YnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgncXVlcnlidWlsZGVyJykgcXJ5Qmxkck9iajogUXVlcnlCdWlsZGVyQ29tcG9uZW50O1xyXG4gIC8vQElucHV0KCkgY2xhc3NOYW1lczogUXVlcnlCdWlsZGVyQ2xhc3NOYW1lcztcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHFiSXRlbXMgPSB7fTtcclxuXHJcbiAgcHVibGljIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBwdWJsaWMgaXNzZkxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBxdWVyeUN0cmw6IGFueTtcclxuICAvL3B1YmxpYyBjdXJyZW50Q29uZmlnOiBRdWVyeUJ1aWxkZXJDb25maWcgPSB7XHJcbiAgLy8gIGZpZWxkczoge30sXHJcbiAgLy8gIGFsbG93RW1wdHlSdWxlc2V0czogdHJ1ZVxyXG4gIC8vfTtcclxuICBwdWJsaWMgYWxsb3dSdWxlc2V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgYWxsb3dDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcnVsZTogYW55O1xyXG4gIHB1YmxpYyBmaWx0ZXJzOiBhbnk7XHJcbiAgcHJpdmF0ZSBmaWVsZHM6IGFueTtcclxuICBwdWJsaWMgZGlzcGxheVJ1bGU6IGFueSA9ICcnO1xyXG5cclxuICBwcml2YXRlIGxvYWRlZERyb3Bkb3duT3B0aW9ucyA9IFtdO1xyXG5cclxuICAvL3NmXHJcbiAgcHVibGljIHNmRGF0YTogT2JqZWN0W107XHJcbiAgcHVibGljIGltcG9ydFJ1bGVzOiBSdWxlTW9kZWw7XHJcbiAgcHVibGljIHNkRmlsdGVyOiBDb2x1bW5zTW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZlFCVGVtcGxhdGU6IFRlbXBsYXRlQ29sdW1uO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGVxdWFsT3BlcmF0b3IgPSB7IHZhbHVlOiAnZXF1YWwnLCBrZXk6ICdFcXVhbHMnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBub3RlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ25vdGVxdWFsJywga2V5OiAnTm90IEVxdWFscycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0c3dpdGhPcGVyYXRvciA9IHsgdmFsdWU6ICdzdGFydHN3aXRoJywga2V5OiAnU3RhcnQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuZHN3aXRoT3BlcmF0b3IgPSB7IHZhbHVlOiAnZW5kc3dpdGgnLCBrZXk6ICdFbmQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5zT3BlcmF0b3IgPSB7IHZhbHVlOiAnY29udGFpbnMnLCBrZXk6ICdDb250YWlucycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzZW1wdHlPcGVyYXRvciA9IHsgdmFsdWU6ICdpc2VtcHR5Jywga2V5OiAnSXMgRW1wdHknIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdGVtcHR5T3BlcmF0b3IgPSB7IHZhbHVlOiAnaXNub3RlbXB0eScsIGtleTogJ0lzIE5vdCBFbXB0eScgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzbnVsbE9wZXJhdG9yID0geyB2YWx1ZTogJ2lzbnVsbCcsIGtleTogJ0lzIE51bGwnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdG51bGxPcGVyYXRvciA9IHsgdmFsdWU6ICdpc25vdG51bGwnLCBrZXk6ICdJcyBOb3QgTnVsbCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnaW4nLCBrZXk6ICdJbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnbm90aW4nLCBrZXk6ICdOb3QgSW4nIH1cclxuICBwcml2YXRlIHJlYWRvbmx5IGdyZWF0ZXJ0aGFuT3BlcmF0b3IgPSB7IHZhbHVlOiAnZ3JlYXRlcnRoYW4nLCBrZXk6ICdHcmVhdGVyIFRoYW4nIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvciA9IHsgdmFsdWU6ICdncmVhdGVydGhhbm9yZXF1YWwnLCBrZXk6ICdHcmVhdGVyIFRoYW4gT3IgRXF1YWxzJyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGVzc3RoYW5PcGVyYXRvciA9IHsgdmFsdWU6ICdsZXNzdGhhbicsIGtleTogJ0xlc3MgVGhhbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxlc3N0aGFub3JlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ2xlc3N0aGFub3JlcXVhbCcsIGtleTogJ0xlc3MgVGhhbiBPciBFcXVhbHMnIH07XHJcblxyXG4gIHB1YmxpYyBpbk9wZXJhdG9yczogc3RyaW5nW10gPSBbJ2luJywgJ25vdGluJ107XHJcbiAgcHVibGljIGRyb3Bkb3duT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmluT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGluT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIHN0cmluZ09wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5zdGFydHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmVuZHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmNvbnRhaW5zT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzZW1wdHlPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RlbXB0eU9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc251bGxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RudWxsT3BlcmF0b3JcclxuICBdO1xyXG4gIHB1YmxpYyBpbnRlZ2VyT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFuT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFub3JlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuICBwdWJsaWMgZGF0ZU9wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5PcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5vcmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIGJvb2xlYW5PcGVyYXRvcnM6IGFueSA9IFtcclxuICAgIHRoaXMuZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubm90ZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHNlbGVjdGlvbkNvbXBvbmVudExpc3QgPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIG9mKHRydWUpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iZWZvcmVMb2FkRmllbGQodGhpcy5kYXRhKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcChkYXRhID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhIGFzIFpGaWVsZDtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkUXVlcnlCdWlsZGVyKCk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIFdoZXJlIHRvIHVwZGF0ZSBvcGVyYXRvciBzeW50YXhcclxuICAgICAgLy8gMS4gRTEgLSBxdWVyeUJ1aWxkZXJUZW1wbGF0ZTJcclxuICAgICAgLy8gMi4gc2hhcmVkIGZvbGRlciA+IGhlbHBlciA+IHF1ZXJ5YnVpbGRlci1maWVsZGluZm8taGVscGVyLnRzXHJcbiAgICAgIC8vIDMuIHBhdGNoIGRiIGRhdGEgd2l0aCBzbWFsbCBjYXBpdGFsIGxldHRlclxyXG5cclxuICAgICAgLy90aGlzLmlzc2ZMb2FkZWQgPSB0cnVlOyAgXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFF1ZXJ5QnVpbGRlcigpIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0FsbG93Q29sbGFwc2UnXSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFsbG93Q29sbGFwc2UgPSB0aGlzLmRhdGFbJ0FsbG93Q29sbGFwc2UnXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhWydBbGxvd1J1bGVzZXQnXSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5hbGxvd1J1bGVzZXQgPSB0aGlzLmRhdGFbJ0FsbG93UnVsZXNldCddO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGFbJ0ZpbHRlcnMnXSkge1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICB0aGlzLmRhdGFbJ0ZpbHRlcnMnXSxcclxuICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKHRoaXMuZGF0YS5WYWx1ZSwgXCJGb3JtRmllbGRcIiwgbnVsbCwgbnVsbCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGlzR3JvdXBlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5waXBlKFxyXG4gICAgICAgIHRhcCgoZGF0YTogW10pID0+IHtcclxuXHJcbiAgICAgICAgICAvLyBpZiBbaXNHcm91cGVkID0gdHJ1ZV0gaW5jbHVkZSBncm91cGluZyBuYW1lIGFzIHByZWZpeFxyXG4gICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBpc0dyb3VwZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBkYXRhLmZvckVhY2goYXN5bmMgKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRUeXBlKGZpZWxkLCBpc0dyb3VwZWQpO1xyXG4gICAgICAgICAgfSk7Ly9lbmQgZm9yZWFjaFxyXG5cclxuICAgICAgICAgIHRoaXMuaXNzZkxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXJDb21wb25lbnRUeXBlKGZpZWxkOiBhbnksIGlzR3JvdXBlZDogYm9vbGVhbiwgZmllbGRUaXRsZT86IHN0cmluZykge1xyXG4gICAgbGV0IGNvbXBvbmVudExhYmVsID0gZmllbGQuU3ViVHlwZSA/IGZpZWxkLkxhYmVsIDogZmllbGQuTGFiZWwgPz8gZmllbGQuTmFtZTtcclxuICAgIGNvbXBvbmVudExhYmVsID0gIWlzR3JvdXBlZCAmJiAhWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShmaWVsZFRpdGxlKSA/IFwiW1wiICsgZmllbGRUaXRsZSArIFwiXSBcIiArIGZpZWxkLkxhYmVsIDogIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoZmllbGQuTGFiZWwpID8gZmllbGQuTGFiZWwgOiBmaWVsZC5OYW1lO1xyXG5cclxuICAgIGxldCBjb21wb25lbnRGaWVsZCA9ICFaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KGZpZWxkVGl0bGUpID8gZmllbGRUaXRsZSArIFwiX1wiICsgZmllbGQuVmFsdWUgOiBmaWVsZC5WYWx1ZTtcclxuXHJcbiAgICBpZiAoZmllbGQuVHlwZSA9PT0gJ2NhdGVnb3J5JyB8fCBmaWVsZC5UeXBlID09PSAnbXVsdGlzZWxlY3QnIHx8IGZpZWxkLlR5cGUgPT09ICd6dWlzZWxlY3RtdWx0aXBsZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kcm9wZG93bk9wZXJhdG9ycyxcclxuICAgICAgICB0ZW1wbGF0ZTogYXdhaXQgdGhpcy5nZW5lcmF0ZUNvbHVtblNlbGVjdGlvbihmaWVsZCksXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5UeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kYXRlT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdkYXRlJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5pbnRlZ2VyT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdudW1iZXInXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5WYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgb3BlcmF0b3JzOiB0aGlzLmJvb2xlYW5PcGVyYXRvcnMsXHJcbiAgICAgICAgdGVtcGxhdGU6IGF3YWl0IHRoaXMuZ2VuZXJhdGVDb2x1bW5DaGVja2JveChmaWVsZC5OYW1lLCBmYWxzZSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkLlR5cGUgPT09ICdrY2FyZCcpIHtcclxuICAgICAgaWYgKGZpZWxkLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmaWVsZC5WYWx1ZS5mb3JFYWNoKGFzeW5jIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50VHlwZShpdGVtLCBpc0dyb3VwZWQsIGZpZWxkLlRpdGxlKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5UeXBlICE9ICd6bGFiZWwnKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICBvcGVyYXRvcnM6IHRoaXMuc3RyaW5nT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZEZpbHRlci5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLnRvTG93ZXJDYXNlKCkgPCBiLmxhYmVsLnRvTG93ZXJDYXNlKCkgPyAtMSA6IDEpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGNoZWNrYm94XHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbHVtbkNoZWNrYm94KGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogVGVtcGxhdGVDb2x1bW4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3JlYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBhdHRyczogeyAndHlwZSc6ICdjaGVja2JveCcgfSB9KTtcclxuICAgICAgfSxcclxuICAgICAgZGVzdHJveTogKGFyZ3M6IHsgZWxlbWVudElkOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgIChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJncy5lbGVtZW50SWQpLCAnY2hlY2tib3gnKSBhcyBDaGVja0JveCkuZGVzdHJveSgpO1xyXG4gICAgICB9LFxyXG4gICAgICB3cml0ZTogKGFyZ3M6IHsgZWxlbWVudHM6IEVsZW1lbnQsIHZhbHVlczogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICBjb25zdCBib3hPYmo6IENoZWNrQm94ID0gbmV3IENoZWNrQm94KHtcclxuICAgICAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgICAgIGNoZWNrZWQ6IHZhbHVlLFxyXG4gICAgICAgICAgY2hhbmdlOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXJ5Qmxkck9iai5ub3RpZnlDaGFuZ2UodmFsdWUsIGUuZXZlbnQudGFyZ2V0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBib3hPYmouYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZHJvcGRvd24vbXVsdGlzZWxlY3RcclxuICBwcml2YXRlIGdlbmVyYXRlQ29sdW1uU2VsZWN0aW9uKGZpZWxkRWxlbWVudERhdGE6IGFueSk6IFRlbXBsYXRlQ29sdW1uIHtcclxuICAgIHJldHVybiB7XHJcblxyXG4gICAgICAvLyBDcmVhdGVzIHRoZSBjdXN0b20gY29tcG9uZW50XHJcbiAgICAgIGNyZWF0ZTogKCkgPT4ge1xyXG4gICAgICAgIC8vIEFkZGl0aW9uYWwgZmlsdGVyIHNldCBpbiB0aGUgcGFnZVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGFbJ0ZpbHRlcnMnXSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFbJ0ZpbHRlcnMnXSxcclxuICAgICAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBhdHRyczogeyAndHlwZSc6ICd0ZXh0JywgJ3N0eWxlJzogJ2Rpc3BsYXk6IG5vbmUnIH0gfSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBhdHRyczogeyAndHlwZSc6ICd0ZXh0JyB9IH0pO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLy8gRGVzdHJveSB0aGUgY3VzdG9tIGNvbXBvbmVudFxyXG4gICAgICBkZXN0cm95OiAoYXJnczogeyBlbGVtZW50SWQ6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgaWYgKGFyZ3NbJ2VsZW1lbnRzJ10pIHtcclxuICAgICAgICAgIGxldCBtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyZ3MuZWxlbWVudElkKSwgJ211bHRpc2VsZWN0JykgYXMgTXVsdGlTZWxlY3QpO1xyXG4gICAgICAgICAgaWYgKG11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIG11bHRpU2VsZWN0LmRlc3Ryb3koKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBkcm9wZG93bjogRHJvcERvd25MaXN0ID0gKGdldENvbXBvbmVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhcmdzLmVsZW1lbnRJZCksICdkcm9wZG93bmxpc3QnKSBhcyBEcm9wRG93bkxpc3QpO1xyXG4gICAgICAgICAgaWYgKGRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgIGRyb3Bkb3duLmRlc3Ryb3koKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gZmllbGRFbGVtZW50RGF0YVsnU2VsZWN0T3B0aW9ucyddO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMID0gc2VsZWN0T3B0aW9uc1snUmVzb3VyY2VVUkwnXTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZml4UmVzb3VyY2VVUkxDaGVja2luZyA9IHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCArICdfJyArIGFyZ3MuZWxlbWVudElkO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGVkRHJvcGRvd25PcHRpb25zLmluY2x1ZGVzKHByZWZpeFJlc291cmNlVVJMQ2hlY2tpbmcpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkZWREcm9wZG93bk9wdGlvbnMgPSB0aGlzLnJlbW92ZUFycmF5SXRlbSh0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucywgcHJlZml4UmVzb3VyY2VVUkxDaGVja2luZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBXaXJlIGV2ZW50cyBmb3IgdGhlIGN1c3RvbSBjb21wb25lbnQuXHJcbiAgICAgIHdyaXRlOiAoYXJnczogeyBlbGVtZW50czogRWxlbWVudCwgdmFsdWVzOiBzdHJpbmdbXSB8IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgLy9vcmlnaW5cclxuICAgICAgICBpZiAoZmllbGRFbGVtZW50RGF0YVsnVmFsdWVPcHRpb25zJ10pIHtcclxuICAgICAgICAgIC8vIGNvbnZlcnQgdG8gcHJvcGVydHkgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQgcmVuZGVyaW5nXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25MaXN0OiB7IFtuYW1lOiBzdHJpbmddOiBPYmplY3QgfVtdID0gW107XHJcbiAgICAgICAgICBmaWVsZEVsZW1lbnREYXRhWydWYWx1ZU9wdGlvbnMnXS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICB0ZXh0OiBpdGVtWydOYW1lJ10sXHJcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bJ1ZhbHVlJ11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtYW51YWwgZHJvcGRvd24gb3IgenVkZiBtYW51YWwgZHJvcGRvd25cclxuICAgICAgICBlbHNlIGlmIChmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ10gJiYgQXJyYXkuaXNBcnJheShmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ10pKSB7XHJcbiAgICAgICAgICAvLyBjb252ZXJ0IHRvIHByb3BlcnR5IG5hbWUgdXNlZCBpbiB0aGUgY29tcG9uZW50IHJlbmRlcmluZ1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdDogeyBbbmFtZTogc3RyaW5nXTogT2JqZWN0IH1bXSA9IFtdO1xyXG4gICAgICAgICAgZmllbGRFbGVtZW50RGF0YVsnU2VsZWN0T3B0aW9ucyddLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgIHRleHQ6IGl0ZW1bJ3RleHQnXSxcclxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbVsndmFsdWUnXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHp1ZGYgUmVzb3VyY2VVUkwgLyBDb21tb24gTWFzdGVyIGRyb3Bkb3duXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gZmllbGRFbGVtZW50RGF0YVsnU2VsZWN0T3B0aW9ucyddO1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMID0gc2VsZWN0T3B0aW9uc1snUmVzb3VyY2VVUkwnXTtcclxuXHJcbiAgICAgICAgICAvLyBSZXNvdXJjZVVSTCBkcm9wZG93blxyXG4gICAgICAgICAgaWYgKHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nID0gc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMICsgJ18nICsgYXJncy5lbGVtZW50cy5pZDtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5sb2FkZWREcm9wZG93bk9wdGlvbnMuaW5jbHVkZXMocHJlZml4UmVzb3VyY2VVUkxDaGVja2luZykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucy5wdXNoKHByZWZpeFJlc291cmNlVVJMQ2hlY2tpbmcpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ10gPSB0aGlzLmZpbHRlcnM7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBwYXJhbSA9IE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRQYWdlU2V0dGluZ1BhcmFtcyk7XHJcbiAgICAgICAgICAgICAgcGFyYW0ucGFnZVNpemUgPSBzZWxlY3RPcHRpb25zWydQYWdlU2l6ZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLmNvbHVtbnMgPSBzZWxlY3RPcHRpb25zWydDb2x1bW5zJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uZmlsdGVycyArPSBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uc29ydENvbHVtbk5hbWUgPSBzZWxlY3RPcHRpb25zWydTb3J0Q29sdW1uTmFtZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLnNvcnRPcmRlciA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRPcmRlciddO1xyXG5cclxuICAgICAgICAgICAgICAvLyBOZWVkIGRlbGF5IDQwMG1zIGlmIG5vdCAzcmQgc2VnbWVudCAodmFsdWUpIHdpbGwgbm90IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAgICAgIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQodGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0UGFnZVVybChzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwpLCBwYXJhbSkucGlwZShcclxuICAgICAgICAgICAgICAgIGRlbGF5KDQwMCksXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICByZXNwLmRhdGFTZXQuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1bc2VsZWN0T3B0aW9uc1snTmFtZSddXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3NlbGVjdE9wdGlvbnNbJ1ZhbHVlJ11dXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvL2NvbnN0IHh4eCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAvLy8veHh4LmFwcGVuZENoaWxkKGlucHV0RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgIC8veHh4LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8jcmVnaW9uIHVzZWQgZm9yIHVwZGF0ZVNlbGVjdGlvbk9wdGlvblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5zZWxlY3Rpb25Db21wb25lbnRMaXN0LmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jb21wb25lbnRJZCA9PT0gYXJncy5lbGVtZW50cy5pZFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0IHdpdGggdGhlIHNhbWUgY29tcG9uZW50SWQgZXhpc3RzLCByZXBsYWNlIHJlc291cmNlVXJsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db21wb25lbnRMaXN0W2V4aXN0aW5nSW5kZXhdLnJlc291cmNlVXJsID0gc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9iamVjdCB3aXRoIGNvbXBvbmVudElkIGRvZXNuJ3QgZXhpc3QsIHB1c2ggYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db21wb25lbnRMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VVcmw6IHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudElkOiBhcmdzLmVsZW1lbnRzLmlkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8jZW5kcmVnaW9uXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyB6dWRmIENvbW1vbiBNYXN0ZXIgZHJvcGRvd25cclxuICAgICAgICAgIGVsc2UgaWYgKGZpZWxkRWxlbWVudERhdGEuenVkZkRhdGFTb3VyY2VUeXBlICYmIGZpZWxkRWxlbWVudERhdGEuenVkZkRhdGFTb3VyY2VUeXBlID09PSBcInJlc291cmNlXCIpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGV4dHJhY3QgenVkZl9kcm9wZG93biBmcm9tIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgICAgICBjb25zdCB6dWRmX2Ryb3Bkb3duID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInp1ZGZfZHJvcGRvd25cIikgPyBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ6dWRmX2Ryb3Bkb3duXCIpKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh6dWRmX2Ryb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICB6dWRmX2Ryb3Bkb3duLmZvckVhY2gocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSByZXMudGV4dC5zcGxpdChcIk9wdGlvbnNcIilbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRFbGVtZW50RGF0YS5MYWJlbCA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICByZXMudmFsdWUuZm9yRWFjaCh2YWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB2YWxbJ05hbWUnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWxbJ0lkJ11cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVzZXIgTGlzdCBkcm9wZG93blxyXG4gICAgICAgICAgZWxzZSBpZiAoZmllbGRFbGVtZW50RGF0YS56dWRmRGF0YVNvdXJjZVR5cGUgJiYgZmllbGRFbGVtZW50RGF0YS56dWRmRGF0YVNvdXJjZVR5cGUgPT09IFwidXNlclwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgdXNlckxpc3QgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlPy5nZXRJdGVtKFwidXNlckxpc3RcIikgPz8gJ251bGwnKTtcclxuXHJcbiAgICAgICAgICAgIC8vY29uc3QgYXJyYXlUZXN0ID0gdXNlckxpc3QubWFwKCh7IFNlbGVjdGlvbk5hbWUsIElkIH0pID0+ICh7IHRleHQ6IFNlbGVjdGlvbk5hbWUsIHZhbHVlOiBJZCB9KSk7XHJcbiAgICAgICAgICAgIHVzZXJMaXN0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtWydTZWxlY3Rpb25OYW1lJ10sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVsnSWQnXVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uQ29tcG9uZW50LmFwcGVuZFRvKCcjJyArIGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfS8vZW5kIHdyaXRlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlU2VsZWN0aW9uT3B0aW9uKHJlc291cmNlVXJsOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25Db21wb25lbnRMaXN0LmZvckVhY2goc2VsZWN0aW9uQ29tcG9uZW50ID0+IHtcclxuICAgICAgbGV0IG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdCA9IChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZWN0aW9uQ29tcG9uZW50LmNvbXBvbmVudElkKSwgJ211bHRpc2VsZWN0JykgYXMgTXVsdGlTZWxlY3QpO1xyXG4gICAgICBpZiAobXVsdGlTZWxlY3QpIHtcclxuICAgICAgICBtdWx0aVNlbGVjdC52YWx1ZSA9IGRhdGE7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGRyb3Bkb3duOiBEcm9wRG93bkxpc3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdGlvbkNvbXBvbmVudC5jb21wb25lbnRJZCksICdkcm9wZG93bmxpc3QnKSBhcyBEcm9wRG93bkxpc3QpO1xyXG4gICAgICBpZiAoZHJvcGRvd24pIHtcclxuICAgICAgICB0aGlzLmZpZWxkU2VydmljZS5kYXRhRm9ybUZpZWxkc1t0aGlzLmRhdGEuVmFsdWVdLmZvckVhY2goYXN5bmMgKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmaWVsZC5TZWxlY3RPcHRpb25zLlJlc291cmNlVVJMID09PSBzZWxlY3Rpb25Db21wb25lbnQucmVzb3VyY2VVcmwpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9ucyA9IGZpZWxkWydTZWxlY3RPcHRpb25zJ107XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCA9IHNlbGVjdE9wdGlvbnNbJ1Jlc291cmNlVVJMJ107XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbJ0ZpbHRlcnMnXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVycyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICAgICAgICAgIHRoaXMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbJ0ZpbHRlcnMnXSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0T3B0aW9uc1snRmlsdGVycyddID0gdGhpcy5maWx0ZXJzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwYXJhbS5wYWdlU2l6ZSA9IHNlbGVjdE9wdGlvbnNbJ1BhZ2VTaXplJ107XHJcbiAgICAgICAgICAgIHBhcmFtLmNvbHVtbnMgPSBzZWxlY3RPcHRpb25zWydDb2x1bW5zJ107XHJcbiAgICAgICAgICAgIHBhcmFtLmZpbHRlcnMgKz0gc2VsZWN0T3B0aW9uc1snRmlsdGVycyddO1xyXG4gICAgICAgICAgICBwYXJhbS5zb3J0Q29sdW1uTmFtZSA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRDb2x1bW5OYW1lJ107XHJcbiAgICAgICAgICAgIHBhcmFtLnNvcnRPcmRlciA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRPcmRlciddO1xyXG5cclxuICAgICAgICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRQYWdlVXJsKHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCksIHBhcmFtKS5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcmVzcC5kYXRhU2V0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1bc2VsZWN0T3B0aW9uc1snTmFtZSddXSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVtzZWxlY3RPcHRpb25zWydWYWx1ZSddXVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgZHJvcGRvd24uZGF0YVNvdXJjZSA9IG9wdGlvbkxpc3Q7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQXJyYXlJdGVtPFQ+KGFycjogQXJyYXk8VD4sIHZhbHVlOiBUKTogQXJyYXk8VD4ge1xyXG4gICAgY29uc3QgaW5kZXggPSBhcnIuaW5kZXhPZih2YWx1ZSk7XHJcbiAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3M6IGFueSwgb3B0aW9uTGlzdDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pbk9wZXJhdG9ycy5pbmRleE9mKGFyZ3Mub3BlcmF0b3IpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIG5ldyBNdWx0aVNlbGVjdCh7XHJcbiAgICAgICAgZGF0YVNvdXJjZTogb3B0aW9uTGlzdCxcclxuICAgICAgICBmaWVsZHM6IHsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ3ZhbHVlJyB9LFxyXG4gICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlcyBhcyBzdHJpbmdbXSxcclxuICAgICAgICBtb2RlOiAnQ2hlY2tCb3gnLFxyXG4gICAgICAgIGNoYW5nZTogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5xcnlCbGRyT2JqLm5vdGlmeUNoYW5nZShlLnZhbHVlLCBlLmVsZW1lbnQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gc2V0IGNvbnRhaW5zIHNlYXJjaCBieSBkZWZhdWx0XHJcbiAgICAgICAgZmlsdGVyaW5nOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uRmlsdGVyaW5nKGUsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBEcm9wRG93bkxpc3Qoe1xyXG4gICAgICAgIGFsbG93RmlsdGVyaW5nOiB0cnVlLCAvLyBzZWFyY2ggYm94IGFwcGVhclxyXG4gICAgICAgIGRhdGFTb3VyY2U6IG9wdGlvbkxpc3QsXHJcbiAgICAgICAgZmllbGRzOiB7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICd2YWx1ZScgfSxcclxuICAgICAgICB2YWx1ZTogYXJncy52YWx1ZXMgYXMgc3RyaW5nLFxyXG4gICAgICAgIGNoYW5nZTogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZS52YWx1ZSAhPT0gbnVsbCA/IHRoaXMucXJ5Qmxkck9iai5ub3RpZnlDaGFuZ2UoZS5pdGVtRGF0YS52YWx1ZSwgZS5lbGVtZW50KSA6IGlnbm9yZUVsZW1lbnRzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgc2VhcmNoIGJ5ICdjb250YWlucydcclxuICAgICAgICBmaWx0ZXJpbmc6IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMub25GaWx0ZXJpbmcoZSwgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uRmlsdGVyaW5nKGU6IGFueSwgb3B0aW9uTGlzdDogYW55KTogYW55IHtcclxuICAgIC8vIGxvYWQgb3ZlcmFsbCBkYXRhIHdoZW4gc2VhcmNoIGtleSBlbXB0eS5cclxuICAgIGlmIChlLnRleHQgPT09ICcnKSB7XHJcbiAgICAgIGUudXBkYXRlRGF0YSh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIERlZmluZSBhcnJheSBkYXRhXHJcbiAgICAgIGxldCBzZWFyY2hEYXRhID0gb3B0aW9uTGlzdDtcclxuXHJcbiAgICAgIC8vQmluZCB0aGUgZmlsdGVyIGV2ZW50XHJcbiAgICAgIGxldCBxdWVyeSA9IG5ldyBRdWVyeSgpO1xyXG5cclxuICAgICAgLy9mcmFtZSB0aGUgcXVlcnkgYmFzZWQgb24gc2VhcmNoIHN0cmluZyB3aXRoIGZpbHRlciB0eXBlLlxyXG4gICAgICBxdWVyeSA9IChlLnRleHQgIT0gXCJcIikgPyBxdWVyeS53aGVyZShcInRleHRcIiwgXCJjb250YWluc1wiLCBlLnRleHQsIHRydWUpIDogcXVlcnk7XHJcblxyXG4gICAgICAvL3Bhc3MgdGhlIGZpbHRlciBkYXRhIHNvdXJjZSwgZmlsdGVyIHF1ZXJ5IHRvIHVwZGF0ZURhdGEgbWV0aG9kLlxyXG4gICAgICBlLnVwZGF0ZURhdGEoc2VhcmNoRGF0YSwgcXVlcnkpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBzZXRRdWVyeVZhbHVlKHNhdmVkRGF0YTogYW55KSB7XHJcbiAgICAvL2lmICghdGhpcy5xcnlCbGRyT2JqKSB7XHJcbiAgICAvLyAgY29uc29sZS53YXJuKCdxdWVyeSBidWlsZGVyIG9iamVjdCBpcyBudWxsLicpO1xyXG4gICAgLy8gIHJldHVybjtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChzYXZlZERhdGEpIHtcclxuICAgICAgdGhpcy5xcnlCbGRyT2JqLnNldFJ1bGVzKHNhdmVkRGF0YSk7XHJcbiAgICAgIHRoaXMudXBkYXRlUnVsZSh7IHJ1bGU6IHNhdmVkRGF0YSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZXN1bHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5xcnlCbGRyT2JqLmdldFJ1bGVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlUnVsZShhcmdzOiBSdWxlQ2hhbmdlRXZlbnRBcmdzKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc3BsYXlSdWxlID0gSlNPTi5zdHJpbmdpZnkoYXJncy5ydWxlLCBudWxsLCAxMik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVJ1bGUoeyBydWxlOiB0aGlzLnFyeUJsZHJPYmouZ2V0VmFsaWRSdWxlcyh0aGlzLnFyeUJsZHJPYmoucnVsZSkgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmVmb3JlTG9hZEZpZWxkKGZpZWxkRWxlbWVudERhdGE6IGFueSkge1xyXG4gICAgbGV0IGJlZm9yZUxvYWRGaWVsZCA9IGZpZWxkRWxlbWVudERhdGFbJ0JlZm9yZUxvYWRGaWVsZCddO1xyXG4gICAgaWYgKGJlZm9yZUxvYWRGaWVsZCkge1xyXG4gICAgICBiZWZvcmVMb2FkRmllbGQgPSBiZWZvcmVMb2FkRmllbGQucmVwbGFjZSgnbW9kYWxHcm91cC4nLCAnZ3JvdXAuJyk7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZXZhbCgndGhpcy4nICsgYmVmb3JlTG9hZEZpZWxkKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBuZXdGdW5jKGV2ZW50LCB0aGlzLCBmaWVsZEVsZW1lbnREYXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mKGZpZWxkRWxlbWVudERhdGEpO1xyXG4gIH1cclxufVxyXG5cclxuLy9leHBvcnQgZW51bSBvcGVyYXRvcnMge1xyXG4vLyAgSW4gPSAnaW4nLFxyXG4vL31cclxuXHJcblxyXG4vL2V4cG9ydCBpbnRlcmZhY2UgUXVlcnlSdWxlIHtcclxuLy8gIGNvbmRpdGlvbjogc3RyaW5nO1xyXG4vLyAgcnVsZXM6IFF1ZXJ5UnVsZVtdO1xyXG4vLyAgZmllbGQ6IHN0cmluZztcclxuLy8gIHR5cGU6IHN0cmluZztcclxuLy8gIG9wZXJhdG9yOiBzdHJpbmc7XHJcbi8vICB2YWx1ZTogc3RyaW5nW107XHJcbi8vfVxyXG5cclxuLy9leHBvcnQgZnVuY3Rpb24gdG9RdWVyeVJ1bGUocXVlcnlCdWlsZGVyTW9kZWw6IGFueSk6IFF1ZXJ5UnVsZSB7XHJcbi8vICBsZXQgcnVsZSA9IDxRdWVyeVJ1bGU+e307XHJcbi8vICBpZiAocXVlcnlCdWlsZGVyTW9kZWwuY29uZGl0aW9uKSB7XHJcbi8vICAgIHJ1bGUuY29uZGl0aW9uID0gcXVlcnlCdWlsZGVyTW9kZWwuY29uZGl0aW9uO1xyXG4vLyAgICBydWxlLnJ1bGVzID0gcXVlcnlCdWlsZGVyTW9kZWwucnVsZXMubWFwKHEgPT4gdG9RdWVyeVJ1bGUocSkpO1xyXG4vLyAgfVxyXG4vLyAgZWxzZSB7XHJcbi8vICAgIHJ1bGUuZmllbGQgPSBxdWVyeUJ1aWxkZXJNb2RlbC5maWVsZDtcclxuLy8gICAgcnVsZS50eXBlID0gJ3N0cmluZyc7XHJcbi8vICAgIHJ1bGUub3BlcmF0b3IgPSAnZXF1YWwnO1xyXG4vLyAgICBydWxlLnZhbHVlID0gcXVlcnlCdWlsZGVyTW9kZWwudmFsdWUgaW5zdGFuY2VvZiBBcnJheVxyXG4vLyAgICAgID8gcXVlcnlCdWlsZGVyTW9kZWwudHlwZSA9PT0gJ2RhdGUnID8gbmV3IERhdGUocXVlcnlCdWlsZGVyTW9kZWwudmFsdWUpIDogcXVlcnlCdWlsZGVyTW9kZWwudmFsdWVcclxuLy8gICAgICA6IFtxdWVyeUJ1aWxkZXJNb2RlbC50eXBlID09PSAnZGF0ZScgPyBuZXcgRGF0ZShxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZSkgOiBxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZV07XHJcbi8vICB9XHJcbi8vICByZXR1cm4gcnVsZTtcclxuLy99XHJcbiIsIjxpb24taXRlbSAqbmdJZj1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJxYmNvbnRhaW5lclwiPlxyXG4gICAgPGVqcy1xdWVyeWJ1aWxkZXIgKm5nSWY9XCJpc3NmTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICNxdWVyeWJ1aWxkZXJcclxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJzZkRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwic2RGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3J1bGVdPVwiaW1wb3J0UnVsZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKHJ1bGVDaGFuZ2UpPVwidXBkYXRlUnVsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjcmVhdGVkKT1cIm9uQ2hhbmdlKClcIj5cclxuICAgIDwvZWpzLXF1ZXJ5YnVpbGRlcj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWRhdGEuSGlkZVNob3dSZXN1bHRQYW5lbFwiPlxyXG4gICAgICA8YnI+XHJcbiAgICAgIDxpb24tbGFiZWw+UmVzdWx0PC9pb24tbGFiZWw+XHJcbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIm91dHB1dFwiXHJcbiAgICAgICAgICAgICAgICByZXNpemFibGU9XCJub25lXCJcclxuICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI2QzZDNkMzsgd2lkdGg6IDEwMCU7XCI+e3tkaXNwbGF5UnVsZX19PC90ZXh0YXJlYT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2lvbi1pdGVtPlxyXG4iXX0=
|
|
499
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHdEYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBZSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsMkNBQTJDO0FBQzNDLE9BQU8sRUFDUyxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFDaEMsd0JBQXdCLEVBQzdDLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQU96QixNQUFNLE9BQU8sdUJBQXVCO0lBNkZsQyxZQUNVLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxhQUE0QjtRQUY1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztR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SUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUF5QjtRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7O29IQXBqQlUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsOE5DMUJwQyxxNkJBc0JBOzJGRElhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxvQkFBb0I7Z0tBS0gsVUFBVTtzQkFBcEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNoQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIGlnbm9yZUVsZW1lbnRzLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSdWxlTW9kZWwsIFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwgQ29sdW1uc01vZGVsLCBUZW1wbGF0ZUNvbHVtbiwgUnVsZUNoYW5nZUV2ZW50QXJncyB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXF1ZXJ5YnVpbGRlcic7XHJcbmltcG9ydCB7IERyb3BEb3duTGlzdCwgTXVsdGlTZWxlY3QgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItZHJvcGRvd25zJztcclxuaW1wb3J0IHsgZ2V0Q29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWJhc2UnO1xyXG5pbXBvcnQgeyBEYXRhTWFuYWdlciwgUXVlcnkgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItZGF0YSc7XHJcbmltcG9ydCB7IENoZWNrQm94IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWJ1dHRvbnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEZpZWxkU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpGaWVsZCwgWkdyb3VwLFxyXG4gIEZvbnRBd2VTb21lU2VydmljZSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zLCBXZWJBcGlTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2ZxdWVyeWJ1aWxkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZnF1ZXJ5YnVpbGRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNmcXVlcnlidWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdxdWVyeWJ1aWxkZXInKSBxcnlCbGRyT2JqOiBRdWVyeUJ1aWxkZXJDb21wb25lbnQ7XHJcbiAgQElucHV0KCkgZGF0YTogWkZpZWxkO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBaR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBxYkl0ZW1zID0ge307XHJcblxyXG4gIHB1YmxpYyBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcbiAgcHVibGljIGlzc2ZMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcXVlcnlDdHJsOiBhbnk7XHJcbiAgcHVibGljIGFsbG93UnVsZXNldDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGFsbG93Q29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHJ1bGU6IGFueTtcclxuICBwdWJsaWMgZmlsdGVyczogYW55O1xyXG4gIHByaXZhdGUgZmllbGRzOiBhbnk7XHJcbiAgcHVibGljIGRpc3BsYXlSdWxlOiBhbnkgPSAnJztcclxuXHJcbiAgcHJpdmF0ZSBsb2FkZWREcm9wZG93bk9wdGlvbnMgPSBbXTtcclxuXHJcbiAgcHVibGljIHNmRGF0YTogT2JqZWN0W107XHJcbiAgcHVibGljIGltcG9ydFJ1bGVzOiBSdWxlTW9kZWw7XHJcbiAgcHVibGljIHNkRmlsdGVyOiBDb2x1bW5zTW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZlFCVGVtcGxhdGU6IFRlbXBsYXRlQ29sdW1uO1xyXG5cclxuICAvLyNyZWdpb24gT3BlcmF0b3JcclxuICBwcml2YXRlIHJlYWRvbmx5IGVxdWFsT3BlcmF0b3IgPSB7IHZhbHVlOiAnZXF1YWwnLCBrZXk6ICdFcXVhbHMnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBub3RlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ25vdGVxdWFsJywga2V5OiAnTm90IEVxdWFscycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0c3dpdGhPcGVyYXRvciA9IHsgdmFsdWU6ICdzdGFydHN3aXRoJywga2V5OiAnU3RhcnQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuZHN3aXRoT3BlcmF0b3IgPSB7IHZhbHVlOiAnZW5kc3dpdGgnLCBrZXk6ICdFbmQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5zT3BlcmF0b3IgPSB7IHZhbHVlOiAnY29udGFpbnMnLCBrZXk6ICdDb250YWlucycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzZW1wdHlPcGVyYXRvciA9IHsgdmFsdWU6ICdpc2VtcHR5Jywga2V5OiAnSXMgRW1wdHknIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdGVtcHR5T3BlcmF0b3IgPSB7IHZhbHVlOiAnaXNub3RlbXB0eScsIGtleTogJ0lzIE5vdCBFbXB0eScgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzbnVsbE9wZXJhdG9yID0geyB2YWx1ZTogJ2lzbnVsbCcsIGtleTogJ0lzIE51bGwnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdG51bGxPcGVyYXRvciA9IHsgdmFsdWU6ICdpc25vdG51bGwnLCBrZXk6ICdJcyBOb3QgTnVsbCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnaW4nLCBrZXk6ICdJbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnbm90aW4nLCBrZXk6ICdOb3QgSW4nIH1cclxuICBwcml2YXRlIHJlYWRvbmx5IGdyZWF0ZXJ0aGFuT3BlcmF0b3IgPSB7IHZhbHVlOiAnZ3JlYXRlcnRoYW4nLCBrZXk6ICdHcmVhdGVyIFRoYW4nIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvciA9IHsgdmFsdWU6ICdncmVhdGVydGhhbm9yZXF1YWwnLCBrZXk6ICdHcmVhdGVyIFRoYW4gT3IgRXF1YWxzJyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGVzc3RoYW5PcGVyYXRvciA9IHsgdmFsdWU6ICdsZXNzdGhhbicsIGtleTogJ0xlc3MgVGhhbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxlc3N0aGFub3JlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ2xlc3N0aGFub3JlcXVhbCcsIGtleTogJ0xlc3MgVGhhbiBPciBFcXVhbHMnIH07XHJcblxyXG4gIHB1YmxpYyBpbk9wZXJhdG9yczogc3RyaW5nW10gPSBbJ2luJywgJ25vdGluJ107XHJcbiAgcHVibGljIGRyb3Bkb3duT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmluT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGluT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIHN0cmluZ09wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5zdGFydHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmVuZHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmNvbnRhaW5zT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzZW1wdHlPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RlbXB0eU9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc251bGxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RudWxsT3BlcmF0b3JcclxuICBdO1xyXG4gIHB1YmxpYyBpbnRlZ2VyT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFuT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFub3JlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuICBwdWJsaWMgZGF0ZU9wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5PcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5vcmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIGJvb2xlYW5PcGVyYXRvcnM6IGFueSA9IFtcclxuICAgIHRoaXMuZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubm90ZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuICAvLyNlbmRyZWdpb25cclxuICBwdWJsaWMgc2VsZWN0aW9uQ29tcG9uZW50TGlzdCA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50UHJvcGVydGllcyh0aGlzKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcblxyXG4gICAgb2YodHJ1ZSkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKF8gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJlZm9yZUxvYWRGaWVsZCh0aGlzLmRhdGEpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGEgYXMgWkZpZWxkO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKF8gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRRdWVyeUJ1aWxkZXIoKTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gV2hlcmUgdG8gdXBkYXRlIG9wZXJhdG9yIHN5bnRheFxyXG4gICAgICAvLyAxLiBFMSAtIHF1ZXJ5QnVpbGRlclRlbXBsYXRlMlxyXG4gICAgICAvLyAyLiBzaGFyZWQgZm9sZGVyID4gaGVscGVyID4gcXVlcnlidWlsZGVyLWZpZWxkaW5mby1oZWxwZXIudHNcclxuICAgICAgLy8gMy4gcGF0Y2ggZGIgZGF0YSB3aXRoIHNtYWxsIGNhcGl0YWwgbGV0dGVyXHJcblxyXG4gICAgICAvL3RoaXMuaXNzZkxvYWRlZCA9IHRydWU7ICBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVMb2FkRmllbGQoZmllbGRFbGVtZW50RGF0YTogYW55KSB7XHJcbiAgICBsZXQgYmVmb3JlTG9hZEZpZWxkID0gZmllbGRFbGVtZW50RGF0YVsnQmVmb3JlTG9hZEZpZWxkJ107XHJcbiAgICBpZiAoYmVmb3JlTG9hZEZpZWxkKSB7XHJcbiAgICAgIGJlZm9yZUxvYWRGaWVsZCA9IGJlZm9yZUxvYWRGaWVsZC5yZXBsYWNlKCdtb2RhbEdyb3VwLicsICdncm91cC4nKTtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBldmFsKCd0aGlzLicgKyBiZWZvcmVMb2FkRmllbGQpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RnVuYyA9IGNhbGxGdW5jLmJpbmQodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0Z1bmMoZXZlbnQsIHRoaXMsIGZpZWxkRWxlbWVudERhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YoZmllbGRFbGVtZW50RGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRRdWVyeUJ1aWxkZXIoKTogT2JzZXJ2YWJsZTxhbnk+IHwgT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5kYXRhWydBbGxvd0NvbGxhcHNlJ10gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hbGxvd0NvbGxhcHNlID0gdGhpcy5kYXRhWydBbGxvd0NvbGxhcHNlJ107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWxsb3dSdWxlc2V0J10gPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuYWxsb3dSdWxlc2V0ID0gdGhpcy5kYXRhWydBbGxvd1J1bGVzZXQnXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhWydGaWx0ZXJzJ10pIHtcclxuICAgICAgdGhpcy5maWx0ZXJzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgdGhpcy5kYXRhWydGaWx0ZXJzJ10sXHJcbiAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmllbGRzID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZSh0aGlzLmRhdGEuVmFsdWUsIFwiRm9ybUZpZWxkXCIsIG51bGwsIG51bGwpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5waXBlKFxyXG4gICAgICAgIHRhcCgoZGF0YTogW10pID0+IHtcclxuXHJcbiAgICAgICAgICBkYXRhLmZvckVhY2goYXN5bmMgKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRUeXBlKGZpZWxkKTtcclxuICAgICAgICAgIH0pOy8vZW5kIGZvcmVhY2hcclxuXHJcbiAgICAgICAgICB0aGlzLmlzc2ZMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogXCIsIGVycm9yKTtcclxuICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyQ29tcG9uZW50VHlwZShmaWVsZDogYW55LCBmaWVsZFRpdGxlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgY29tcG9uZW50TGFiZWwgPSBmaWVsZC5TdWJUeXBlID8gZmllbGQuTGFiZWwgOiBmaWVsZC5MYWJlbCA/PyBmaWVsZC5OYW1lO1xyXG4gICAgY29tcG9uZW50TGFiZWwgPSAhWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShmaWVsZFRpdGxlKSA/IFwiW1wiICsgZmllbGRUaXRsZSArIFwiXSBcIiArIGZpZWxkLkxhYmVsIDogIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoZmllbGQuTGFiZWwpID8gZmllbGQuTGFiZWwgOiBmaWVsZC5OYW1lO1xyXG5cclxuICAgIGxldCBjb21wb25lbnRGaWVsZCA9ICFaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KGZpZWxkVGl0bGUpID8gZmllbGRUaXRsZSArIFwiX1wiICsgZmllbGQuVmFsdWUgOiBmaWVsZC5WYWx1ZTtcclxuXHJcbiAgICBpZiAoZmllbGQuVHlwZSA9PT0gJ2NhdGVnb3J5JyB8fCBmaWVsZC5UeXBlID09PSAnbXVsdGlzZWxlY3QnIHx8IGZpZWxkLlR5cGUgPT09ICd6dWlzZWxlY3RtdWx0aXBsZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kcm9wZG93bk9wZXJhdG9ycyxcclxuICAgICAgICB0ZW1wbGF0ZTogYXdhaXQgdGhpcy5nZW5lcmF0ZUNvbHVtblNlbGVjdGlvbihmaWVsZCksXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5UeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kYXRlT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdkYXRlJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5pbnRlZ2VyT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdudW1iZXInXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5WYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgb3BlcmF0b3JzOiB0aGlzLmJvb2xlYW5PcGVyYXRvcnMsXHJcbiAgICAgICAgdGVtcGxhdGU6IGF3YWl0IHRoaXMuZ2VuZXJhdGVDb2x1bW5DaGVja2JveChmaWVsZC5OYW1lLCBmYWxzZSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkLlR5cGUgPT09ICdrY2FyZCcpIHtcclxuICAgICAgaWYgKGZpZWxkLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmaWVsZC5WYWx1ZS5mb3JFYWNoKGFzeW5jIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50VHlwZShpdGVtLCBmaWVsZC5UaXRsZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVHlwZSAhPSAnemxhYmVsJykge1xyXG4gICAgICB0aGlzLnNkRmlsdGVyLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBjb21wb25lbnRGaWVsZCxcclxuICAgICAgICBsYWJlbDogY29tcG9uZW50TGFiZWwsXHJcbiAgICAgICAgb3BlcmF0b3JzOiB0aGlzLnN0cmluZ09wZXJhdG9ycyxcclxuICAgICAgICB0eXBlOiAnc3RyaW5nJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2RGaWx0ZXIuc29ydCgoYSwgYikgPT4gYS5sYWJlbC50b0xvd2VyQ2FzZSgpIDwgYi5sYWJlbC50b0xvd2VyQ2FzZSgpID8gLTEgOiAxKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHZW5lcmF0ZSBjb21wb25lbnQgXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbHVtbkNoZWNrYm94KGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogVGVtcGxhdGVDb2x1bW4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3JlYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBhdHRyczogeyAndHlwZSc6ICdjaGVja2JveCcgfSB9KTtcclxuICAgICAgfSxcclxuICAgICAgZGVzdHJveTogKGFyZ3M6IHsgZWxlbWVudElkOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgIChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJncy5lbGVtZW50SWQpLCAnY2hlY2tib3gnKSBhcyBDaGVja0JveCkuZGVzdHJveSgpO1xyXG4gICAgICB9LFxyXG4gICAgICB3cml0ZTogKGFyZ3M6IHsgZWxlbWVudHM6IEVsZW1lbnQsIHZhbHVlczogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICBjb25zdCBib3hPYmo6IENoZWNrQm94ID0gbmV3IENoZWNrQm94KHtcclxuICAgICAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgICAgIGNoZWNrZWQ6IHZhbHVlLFxyXG4gICAgICAgICAgY2hhbmdlOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXJ5Qmxkck9iai5ub3RpZnlDaGFuZ2UodmFsdWUsIGUuZXZlbnQudGFyZ2V0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBib3hPYmouYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlQ29sdW1uU2VsZWN0aW9uKGZpZWxkRWxlbWVudERhdGE6IGFueSk6IFRlbXBsYXRlQ29sdW1uIHtcclxuICAgIHJldHVybiB7XHJcblxyXG4gICAgICAvLyBDcmVhdGVzIHRoZSBjdXN0b20gY29tcG9uZW50XHJcbiAgICAgIGNyZWF0ZTogKCkgPT4ge1xyXG4gICAgICAgIC8vIEFkZGl0aW9uYWwgZmlsdGVyIHNldCBpbiB0aGUgcGFnZVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGFbJ0ZpbHRlcnMnXSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFbJ0ZpbHRlcnMnXSxcclxuICAgICAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIHsgYXR0cnM6IHsgJ3R5cGUnOiAndGV4dCcgfSB9KTsgLy8gJ2Rpc3BsYXk6IG5vbmUnXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBEZXN0cm95IHRoZSBjdXN0b20gY29tcG9uZW50XHJcbiAgICAgIGRlc3Ryb3k6IChhcmdzOiB7IGVsZW1lbnRJZDogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICBpZiAoYXJnc1snZWxlbWVudHMnXSkge1xyXG4gICAgICAgICAgbGV0IG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdCA9IChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJncy5lbGVtZW50SWQpLCAnbXVsdGlzZWxlY3QnKSBhcyBNdWx0aVNlbGVjdCk7XHJcbiAgICAgICAgICBpZiAobXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgbXVsdGlTZWxlY3QuZGVzdHJveSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRyb3Bkb3duOiBEcm9wRG93bkxpc3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyZ3MuZWxlbWVudElkKSwgJ2Ryb3Bkb3dubGlzdCcpIGFzIERyb3BEb3duTGlzdCk7XHJcbiAgICAgICAgICBpZiAoZHJvcGRvd24pIHtcclxuICAgICAgICAgICAgZHJvcGRvd24uZGVzdHJveSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ107XHJcbiAgICAgICAgICBpZiAoc2VsZWN0T3B0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgPSBzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nID0gc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMICsgJ18nICsgYXJncy5lbGVtZW50SWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkZWREcm9wZG93bk9wdGlvbnMuaW5jbHVkZXMocHJlZml4UmVzb3VyY2VVUkxDaGVja2luZykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucyA9IHRoaXMucmVtb3ZlQXJyYXlJdGVtKHRoaXMubG9hZGVkRHJvcGRvd25PcHRpb25zLCBwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8vIFdpcmUgZXZlbnRzIGZvciB0aGUgY3VzdG9tIGNvbXBvbmVudC5cclxuICAgICAgd3JpdGU6IChhcmdzOiB7IGVsZW1lbnRzOiBFbGVtZW50LCB2YWx1ZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICAvL29yaWdpblxyXG4gICAgICAgIGlmIChmaWVsZEVsZW1lbnREYXRhWydWYWx1ZU9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgLy8gY29udmVydCB0byBwcm9wZXJ0eSBuYW1lIHVzZWQgaW4gdGhlIGNvbXBvbmVudCByZW5kZXJpbmdcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbkxpc3Q6IHsgW25hbWU6IHN0cmluZ106IE9iamVjdCB9W10gPSBbXTtcclxuICAgICAgICAgIGZpZWxkRWxlbWVudERhdGFbJ1ZhbHVlT3B0aW9ucyddLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgIHRleHQ6IGl0ZW1bJ05hbWUnXSxcclxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbVsnVmFsdWUnXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1hbnVhbCBkcm9wZG93biBvciB6dWRmIG1hbnVhbCBkcm9wZG93blxyXG4gICAgICAgIGVsc2UgaWYgKGZpZWxkRWxlbWVudERhdGFbJ1NlbGVjdE9wdGlvbnMnXSAmJiBBcnJheS5pc0FycmF5KGZpZWxkRWxlbWVudERhdGFbJ1NlbGVjdE9wdGlvbnMnXSkpIHtcclxuICAgICAgICAgIC8vIGNvbnZlcnQgdG8gcHJvcGVydHkgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQgcmVuZGVyaW5nXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25MaXN0OiB7IFtuYW1lOiBzdHJpbmddOiBPYmplY3QgfVtdID0gW107XHJcbiAgICAgICAgICBmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ10uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgdGV4dDogaXRlbVsndGV4dCddLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtWyd2YWx1ZSddXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgc2VsZWN0aW9uQ29tcG9uZW50LmFwcGVuZFRvKCcjJyArIGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8genVkZiBSZXNvdXJjZVVSTCAvIENvbW1vbiBNYXN0ZXIgZHJvcGRvd25cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ107XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgPSBzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddO1xyXG5cclxuICAgICAgICAgIC8vIFJlc291cmNlVVJMIGRyb3Bkb3duXHJcbiAgICAgICAgICBpZiAoc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeFJlc291cmNlVVJMQ2hlY2tpbmcgPSBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgKyAnXycgKyBhcmdzLmVsZW1lbnRzLmlkO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucy5pbmNsdWRlcyhwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVkRHJvcGRvd25PcHRpb25zLnB1c2gocHJlZml4UmVzb3VyY2VVUkxDaGVja2luZyk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXSA9IHRoaXMuZmlsdGVycztcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zKTtcclxuICAgICAgICAgICAgICBwYXJhbS5wYWdlU2l6ZSA9IHNlbGVjdE9wdGlvbnNbJ1BhZ2VTaXplJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uY29sdW1ucyA9IHNlbGVjdE9wdGlvbnNbJ0NvbHVtbnMnXTtcclxuICAgICAgICAgICAgICBwYXJhbS5maWx0ZXJzICs9IHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXTtcclxuICAgICAgICAgICAgICBwYXJhbS5zb3J0Q29sdW1uTmFtZSA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRDb2x1bW5OYW1lJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uc29ydE9yZGVyID0gc2VsZWN0T3B0aW9uc1snU29ydE9yZGVyJ107XHJcblxyXG4gICAgICAgICAgICAgIC8vIE5lZWQgZGVsYXkgNDAwbXMgaWYgbm90IDNyZCBzZWdtZW50ICh2YWx1ZSkgd2lsbCBub3QgYmUgcmVuZGVyZWQuXHJcbiAgICAgICAgICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRQYWdlVXJsKHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCksIHBhcmFtKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgZGVsYXkoNDAwKSxcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHJlc3AuZGF0YVNldC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbVtzZWxlY3RPcHRpb25zWydOYW1lJ11dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bc2VsZWN0T3B0aW9uc1snVmFsdWUnXV1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vI3JlZ2lvbiB1c2VkIGZvciB1cGRhdGVTZWxlY3Rpb25PcHRpb25cclxuICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuc2VsZWN0aW9uQ29tcG9uZW50TGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uY29tcG9uZW50SWQgPT09IGFyZ3MuZWxlbWVudHMuaWRcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9iamVjdCB3aXRoIHRoZSBzYW1lIGNvbXBvbmVudElkIGV4aXN0cywgcmVwbGFjZSByZXNvdXJjZVVybFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29tcG9uZW50TGlzdFtleGlzdGluZ0luZGV4XS5yZXNvdXJjZVVybCA9IHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTDtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3Qgd2l0aCBjb21wb25lbnRJZCBkb2Vzbid0IGV4aXN0LCBwdXNoIGEgbmV3IG9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29tcG9uZW50TGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlVXJsOiBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJZDogYXJncy5lbGVtZW50cy5pZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8genVkZiBDb21tb24gTWFzdGVyIGRyb3Bkb3duXHJcbiAgICAgICAgICBlbHNlIGlmIChmaWVsZEVsZW1lbnREYXRhLnp1ZGZEYXRhU291cmNlVHlwZSAmJiBmaWVsZEVsZW1lbnREYXRhLnp1ZGZEYXRhU291cmNlVHlwZSA9PT0gXCJyZXNvdXJjZVwiKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBleHRyYWN0IHp1ZGZfZHJvcGRvd24gZnJvbSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgY29uc3QgenVkZl9kcm9wZG93biA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ6dWRmX2Ryb3Bkb3duXCIpID8gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwienVkZl9kcm9wZG93blwiKSkgOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoenVkZl9kcm9wZG93bikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgenVkZl9kcm9wZG93bi5mb3JFYWNoKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gcmVzLnRleHQuc3BsaXQoXCJPcHRpb25zXCIpWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkRWxlbWVudERhdGEuTGFiZWwgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgcmVzLnZhbHVlLmZvckVhY2godmFsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogdmFsWydOYW1lJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsWydJZCddXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBVc2VyIExpc3QgZHJvcGRvd25cclxuICAgICAgICAgIGVsc2UgaWYgKGZpZWxkRWxlbWVudERhdGEuenVkZkRhdGFTb3VyY2VUeXBlICYmIGZpZWxkRWxlbWVudERhdGEuenVkZkRhdGFTb3VyY2VUeXBlID09PSBcInVzZXJcIikge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJMaXN0ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZT8uZ2V0SXRlbShcInVzZXJMaXN0XCIpID8/ICdudWxsJyk7XHJcblxyXG4gICAgICAgICAgICAvL2NvbnN0IGFycmF5VGVzdCA9IHVzZXJMaXN0Lm1hcCgoeyBTZWxlY3Rpb25OYW1lLCBJZCB9KSA9PiAoeyB0ZXh0OiBTZWxlY3Rpb25OYW1lLCB2YWx1ZTogSWQgfSkpO1xyXG4gICAgICAgICAgICB1c2VyTGlzdC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGV4dDogaXRlbVsnU2VsZWN0aW9uTmFtZSddLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bJ0lkJ11cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0vL2VuZCB3cml0ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVNlbGVjdGlvbk9wdGlvbihyZXNvdXJjZVVybDogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29tcG9uZW50TGlzdC5mb3JFYWNoKHNlbGVjdGlvbkNvbXBvbmVudCA9PiB7XHJcbiAgICAgIGxldCBtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdGlvbkNvbXBvbmVudC5jb21wb25lbnRJZCksICdtdWx0aXNlbGVjdCcpIGFzIE11bHRpU2VsZWN0KTtcclxuICAgICAgaWYgKG11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgbXVsdGlTZWxlY3QudmFsdWUgPSBkYXRhO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBkcm9wZG93bjogRHJvcERvd25MaXN0ID0gKGdldENvbXBvbmVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rpb25Db21wb25lbnQuY29tcG9uZW50SWQpLCAnZHJvcGRvd25saXN0JykgYXMgRHJvcERvd25MaXN0KTtcclxuICAgICAgaWYgKGRyb3Bkb3duKSB7XHJcbiAgICAgICAgdGhpcy5maWVsZFNlcnZpY2UuZGF0YUZvcm1GaWVsZHNbdGhpcy5kYXRhLlZhbHVlXS5mb3JFYWNoKGFzeW5jIChmaWVsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmllbGQuU2VsZWN0T3B0aW9ucy5SZXNvdXJjZVVSTCA9PT0gc2VsZWN0aW9uQ29tcG9uZW50LnJlc291cmNlVXJsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZFsnU2VsZWN0T3B0aW9ucyddO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgPSBzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRQYWdlU2V0dGluZ1BhcmFtcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhWydGaWx0ZXJzJ10pIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhWydGaWx0ZXJzJ10sXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVycykge1xyXG4gICAgICAgICAgICAgIHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXSA9IHRoaXMuZmlsdGVycztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyYW0ucGFnZVNpemUgPSBzZWxlY3RPcHRpb25zWydQYWdlU2l6ZSddO1xyXG4gICAgICAgICAgICBwYXJhbS5jb2x1bW5zID0gc2VsZWN0T3B0aW9uc1snQ29sdW1ucyddO1xyXG4gICAgICAgICAgICBwYXJhbS5maWx0ZXJzICs9IHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXTtcclxuICAgICAgICAgICAgcGFyYW0uc29ydENvbHVtbk5hbWUgPSBzZWxlY3RPcHRpb25zWydTb3J0Q29sdW1uTmFtZSddO1xyXG4gICAgICAgICAgICBwYXJhbS5zb3J0T3JkZXIgPSBzZWxlY3RPcHRpb25zWydTb3J0T3JkZXInXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQodGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0UGFnZVVybChzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwpLCBwYXJhbSkucGlwZShcclxuICAgICAgICAgICAgICBtYXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBbXTtcclxuICAgICAgICAgICAgICAgIHJlc3AuZGF0YVNldC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtW3NlbGVjdE9wdGlvbnNbJ05hbWUnXV0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bc2VsZWN0T3B0aW9uc1snVmFsdWUnXV1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgIGRyb3Bkb3duLmRhdGFTb3VyY2UgPSBvcHRpb25MaXN0O1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUFycmF5SXRlbTxUPihhcnI6IEFycmF5PFQ+LCB2YWx1ZTogVCk6IEFycmF5PFQ+IHtcclxuICAgIGNvbnN0IGluZGV4ID0gYXJyLmluZGV4T2YodmFsdWUpO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzOiBhbnksIG9wdGlvbkxpc3Q6IGFueSk6IE11bHRpU2VsZWN0IHwgRHJvcERvd25MaXN0IHtcclxuICAgIGlmICh0aGlzLmluT3BlcmF0b3JzLmluZGV4T2YoYXJncy5vcGVyYXRvcikgPiAtMSkge1xyXG4gICAgICByZXR1cm4gbmV3IE11bHRpU2VsZWN0KHtcclxuICAgICAgICBkYXRhU291cmNlOiBvcHRpb25MaXN0LFxyXG4gICAgICAgIGZpZWxkczogeyB0ZXh0OiAndGV4dCcsIHZhbHVlOiAndmFsdWUnIH0sXHJcbiAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWVzIGFzIHN0cmluZ1tdLFxyXG4gICAgICAgIG1vZGU6ICdDaGVja0JveCcsXHJcbiAgICAgICAgY2hhbmdlOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnFyeUJsZHJPYmoubm90aWZ5Q2hhbmdlKGUudmFsdWUsIGUuZWxlbWVudCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBzZXQgY29udGFpbnMgc2VhcmNoIGJ5IGRlZmF1bHRcclxuICAgICAgICBmaWx0ZXJpbmc6IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMub25GaWx0ZXJpbmcoZSwgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IERyb3BEb3duTGlzdCh7XHJcbiAgICAgICAgYWxsb3dGaWx0ZXJpbmc6IHRydWUsIC8vIHNlYXJjaCBib3ggYXBwZWFyXHJcbiAgICAgICAgZGF0YVNvdXJjZTogb3B0aW9uTGlzdCxcclxuICAgICAgICBmaWVsZHM6IHsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ3ZhbHVlJyB9LFxyXG4gICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlcyBhcyBzdHJpbmcsXHJcbiAgICAgICAgY2hhbmdlOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBlLnZhbHVlICE9PSBudWxsID8gdGhpcy5xcnlCbGRyT2JqLm5vdGlmeUNoYW5nZShlLml0ZW1EYXRhLnZhbHVlLCBlLmVsZW1lbnQpIDogaWdub3JlRWxlbWVudHM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBzZWFyY2ggYnkgJ2NvbnRhaW5zJ1xyXG4gICAgICAgIGZpbHRlcmluZzogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vbkZpbHRlcmluZyhlLCBvcHRpb25MaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHVibGljIG9uRmlsdGVyaW5nKGU6IGFueSwgb3B0aW9uTGlzdDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBsb2FkIG92ZXJhbGwgZGF0YSB3aGVuIHNlYXJjaCBrZXkgZW1wdHkuXHJcbiAgICBpZiAoZS50ZXh0ID09PSAnJykge1xyXG4gICAgICBlLnVwZGF0ZURhdGEodGhpcy5kYXRhKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBEZWZpbmUgYXJyYXkgZGF0YVxyXG4gICAgICBsZXQgc2VhcmNoRGF0YSA9IG9wdGlvbkxpc3Q7XHJcblxyXG4gICAgICAvL0JpbmQgdGhlIGZpbHRlciBldmVudFxyXG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUXVlcnkoKTtcclxuXHJcbiAgICAgIC8vZnJhbWUgdGhlIHF1ZXJ5IGJhc2VkIG9uIHNlYXJjaCBzdHJpbmcgd2l0aCBmaWx0ZXIgdHlwZS5cclxuICAgICAgcXVlcnkgPSAoZS50ZXh0ICE9IFwiXCIpID8gcXVlcnkud2hlcmUoXCJ0ZXh0XCIsIFwiY29udGFpbnNcIiwgZS50ZXh0LCB0cnVlKSA6IHF1ZXJ5O1xyXG5cclxuICAgICAgLy9wYXNzIHRoZSBmaWx0ZXIgZGF0YSBzb3VyY2UsIGZpbHRlciBxdWVyeSB0byB1cGRhdGVEYXRhIG1ldGhvZC5cclxuICAgICAgZS51cGRhdGVEYXRhKHNlYXJjaERhdGEsIHF1ZXJ5KTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2V0UXVlcnlWYWx1ZShzYXZlZERhdGE6IGFueSk6dm9pZCB7XHJcbiAgICBpZiAoc2F2ZWREYXRhKSB7XHJcbiAgICAgIHRoaXMucXJ5Qmxkck9iai5zZXRSdWxlcyhzYXZlZERhdGEpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVJ1bGUoeyBydWxlOiBzYXZlZERhdGEgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVzdWx0KCk6IFJ1bGVNb2RlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5xcnlCbGRyT2JqLmdldFJ1bGVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlUnVsZShhcmdzOiBSdWxlQ2hhbmdlRXZlbnRBcmdzKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc3BsYXlSdWxlID0gSlNPTi5zdHJpbmdpZnkoYXJncy5ydWxlLCBudWxsLCAxMik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVJ1bGUoeyBydWxlOiB0aGlzLnFyeUJsZHJPYmouZ2V0VmFsaWRSdWxlcyh0aGlzLnFyeUJsZHJPYmoucnVsZSkgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8aW9uLWl0ZW0gKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8ZGl2IGNsYXNzPVwicWJjb250YWluZXJcIj5cclxuICAgIDxlanMtcXVlcnlidWlsZGVyICpuZ0lmPVwiaXNzZkxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAjcXVlcnlidWlsZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwic2ZEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInNkRmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtydWxlXT1cImltcG9ydFJ1bGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChydWxlQ2hhbmdlKT1cInVwZGF0ZVJ1bGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRlZCk9XCJvbkNoYW5nZSgpXCI+XHJcbiAgICA8L2Vqcy1xdWVyeWJ1aWxkZXI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIiFkYXRhLkhpZGVTaG93UmVzdWx0UGFuZWxcIj5cclxuICAgICAgPGJyPlxyXG4gICAgICA8aW9uLWxhYmVsPlJlc3VsdDwvaW9uLWxhYmVsPlxyXG4gICAgICA8dGV4dGFyZWEgY2xhc3M9XCJvdXRwdXRcIlxyXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICBbcm93c109XCIxMFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNkM2QzZDM7IHdpZHRoOiAxMDAlO1wiPnt7ZGlzcGxheVJ1bGV9fTwvdGV4dGFyZWE+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9pb24taXRlbT5cclxuIl19
|
|
@@ -87,8 +87,8 @@ import { trigger, transition, style, animate } from '@angular/animations';
|
|
|
87
87
|
import * as i3$8 from '@progress/kendo-angular-toolbar';
|
|
88
88
|
import { MultiSelect, DropDownList } from '@syncfusion/ej2-dropdowns';
|
|
89
89
|
import { createElement, getComponent } from '@syncfusion/ej2-base';
|
|
90
|
-
import { CheckBox } from '@syncfusion/ej2-buttons';
|
|
91
90
|
import { Query } from '@syncfusion/ej2-data';
|
|
91
|
+
import { CheckBox } from '@syncfusion/ej2-buttons';
|
|
92
92
|
|
|
93
93
|
/********** Angular **********/
|
|
94
94
|
class ZComponentService {
|
|
@@ -13020,10 +13020,6 @@ class SfquerybuilderComponent {
|
|
|
13020
13020
|
this.qbItems = {};
|
|
13021
13021
|
this.componentProperties = new ZComponentProperties();
|
|
13022
13022
|
this.issfLoaded = false;
|
|
13023
|
-
//public currentConfig: QueryBuilderConfig = {
|
|
13024
|
-
// fields: {},
|
|
13025
|
-
// allowEmptyRulesets: true
|
|
13026
|
-
//};
|
|
13027
13023
|
this.allowRuleset = true;
|
|
13028
13024
|
this.allowCollapse = false;
|
|
13029
13025
|
this.persistValueOnFieldChange = false;
|
|
@@ -13031,6 +13027,7 @@ class SfquerybuilderComponent {
|
|
|
13031
13027
|
this.displayRule = '';
|
|
13032
13028
|
this.loadedDropdownOptions = [];
|
|
13033
13029
|
this.sdFilter = [];
|
|
13030
|
+
//#region Operator
|
|
13034
13031
|
this.equalOperator = { value: 'equal', key: 'Equals' };
|
|
13035
13032
|
this.notequalOperator = { value: 'notequal', key: 'Not Equals' };
|
|
13036
13033
|
this.startswithOperator = { value: 'startswith', key: 'Start With' };
|
|
@@ -13092,6 +13089,7 @@ class SfquerybuilderComponent {
|
|
|
13092
13089
|
this.isnullOperator,
|
|
13093
13090
|
this.isnotnullOperator
|
|
13094
13091
|
];
|
|
13092
|
+
//#endregion
|
|
13095
13093
|
this.selectionComponentList = [];
|
|
13096
13094
|
}
|
|
13097
13095
|
ngOnInit() {
|
|
@@ -13111,6 +13109,18 @@ class SfquerybuilderComponent {
|
|
|
13111
13109
|
//this.issfLoaded = true;
|
|
13112
13110
|
});
|
|
13113
13111
|
}
|
|
13112
|
+
beforeLoadField(fieldElementData) {
|
|
13113
|
+
let beforeLoadField = fieldElementData['BeforeLoadField'];
|
|
13114
|
+
if (beforeLoadField) {
|
|
13115
|
+
beforeLoadField = beforeLoadField.replace('modalGroup.', 'group.');
|
|
13116
|
+
const callFunc = eval('this.' + beforeLoadField);
|
|
13117
|
+
if (typeof callFunc === "function") {
|
|
13118
|
+
const newFunc = callFunc.bind(this);
|
|
13119
|
+
return newFunc(event, this, fieldElementData);
|
|
13120
|
+
}
|
|
13121
|
+
}
|
|
13122
|
+
return of(fieldElementData);
|
|
13123
|
+
}
|
|
13114
13124
|
loadQueryBuilder() {
|
|
13115
13125
|
if (this.data['AllowCollapse'] === true) {
|
|
13116
13126
|
this.allowCollapse = this.data['AllowCollapse'];
|
|
@@ -13123,14 +13133,9 @@ class SfquerybuilderComponent {
|
|
|
13123
13133
|
}
|
|
13124
13134
|
this.fields = this.fieldService.getFormFieldCode(this.data.Value, "FormField", null, null);
|
|
13125
13135
|
try {
|
|
13126
|
-
let isGrouped = true;
|
|
13127
13136
|
return this.fields.pipe(tap$1((data) => {
|
|
13128
|
-
// if [isGrouped = true] include grouping name as prefix
|
|
13129
|
-
if (data.length > 1) {
|
|
13130
|
-
isGrouped = false;
|
|
13131
|
-
}
|
|
13132
13137
|
data.forEach((field) => __awaiter(this, void 0, void 0, function* () {
|
|
13133
|
-
this.renderComponentType(field
|
|
13138
|
+
this.renderComponentType(field);
|
|
13134
13139
|
})); //end foreach
|
|
13135
13140
|
this.issfLoaded = true;
|
|
13136
13141
|
}));
|
|
@@ -13141,11 +13146,11 @@ class SfquerybuilderComponent {
|
|
|
13141
13146
|
return of(false);
|
|
13142
13147
|
}
|
|
13143
13148
|
}
|
|
13144
|
-
renderComponentType(field,
|
|
13149
|
+
renderComponentType(field, fieldTitle) {
|
|
13145
13150
|
var _a;
|
|
13146
13151
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13147
13152
|
let componentLabel = field.SubType ? field.Label : (_a = field.Label) !== null && _a !== void 0 ? _a : field.Name;
|
|
13148
|
-
componentLabel = !
|
|
13153
|
+
componentLabel = !ZComponentHelper.isNullUndefinedEmpty(fieldTitle) ? "[" + fieldTitle + "] " + field.Label : !ZComponentHelper.isNullUndefinedEmpty(field.Label) ? field.Label : field.Name;
|
|
13149
13154
|
let componentField = !ZComponentHelper.isNullUndefinedEmpty(fieldTitle) ? fieldTitle + "_" + field.Value : field.Value;
|
|
13150
13155
|
if (field.Type === 'category' || field.Type === 'multiselect' || field.Type === 'zuiselectmultiple') {
|
|
13151
13156
|
this.sdFilter.push({
|
|
@@ -13184,7 +13189,7 @@ class SfquerybuilderComponent {
|
|
|
13184
13189
|
else if (field.Type === 'kcard') {
|
|
13185
13190
|
if (field.Value.length > 0) {
|
|
13186
13191
|
field.Value.forEach((item) => __awaiter(this, void 0, void 0, function* () {
|
|
13187
|
-
this.renderComponentType(item,
|
|
13192
|
+
this.renderComponentType(item, field.Title);
|
|
13188
13193
|
}));
|
|
13189
13194
|
}
|
|
13190
13195
|
}
|
|
@@ -13199,7 +13204,7 @@ class SfquerybuilderComponent {
|
|
|
13199
13204
|
this.sdFilter.sort((a, b) => a.label.toLowerCase() < b.label.toLowerCase() ? -1 : 1);
|
|
13200
13205
|
});
|
|
13201
13206
|
}
|
|
13202
|
-
//#region
|
|
13207
|
+
//#region Generate component
|
|
13203
13208
|
generateColumnCheckbox(label, value) {
|
|
13204
13209
|
return {
|
|
13205
13210
|
create: () => {
|
|
@@ -13220,8 +13225,6 @@ class SfquerybuilderComponent {
|
|
|
13220
13225
|
}
|
|
13221
13226
|
};
|
|
13222
13227
|
}
|
|
13223
|
-
//#endregion
|
|
13224
|
-
//#region dropdown/multiselect
|
|
13225
13228
|
generateColumnSelection(fieldElementData) {
|
|
13226
13229
|
return {
|
|
13227
13230
|
// Creates the custom component
|
|
@@ -13230,8 +13233,7 @@ class SfquerybuilderComponent {
|
|
|
13230
13233
|
if (this.data['Filters']) {
|
|
13231
13234
|
this.filters = ZComponentHelper.getGroupEvalValue.call(this, this.data['Filters'], this.group);
|
|
13232
13235
|
}
|
|
13233
|
-
|
|
13234
|
-
return createElement('input', { attrs: { 'type': 'text' } });
|
|
13236
|
+
return createElement('input', { attrs: { 'type': 'text' } }); // 'display: none'
|
|
13235
13237
|
},
|
|
13236
13238
|
// Destroy the custom component
|
|
13237
13239
|
destroy: (args) => {
|
|
@@ -13312,9 +13314,6 @@ class SfquerybuilderComponent {
|
|
|
13312
13314
|
});
|
|
13313
13315
|
const selectionComponent = this.generateSelectionComponent(args, optionList);
|
|
13314
13316
|
selectionComponent.appendTo('#' + args.elements.id);
|
|
13315
|
-
//const xxx = document.getElementById(args.elements.id);
|
|
13316
|
-
////xxx.appendChild(inputElement);
|
|
13317
|
-
//xxx.style.display = 'block';
|
|
13318
13317
|
//#region used for updateSelectionOption
|
|
13319
13318
|
const existingIndex = this.selectionComponentList.findIndex((item) => item.componentId === args.elements.id);
|
|
13320
13319
|
if (existingIndex !== -1) {
|
|
@@ -13468,10 +13467,6 @@ class SfquerybuilderComponent {
|
|
|
13468
13467
|
}
|
|
13469
13468
|
;
|
|
13470
13469
|
setQueryValue(savedData) {
|
|
13471
|
-
//if (!this.qryBldrObj) {
|
|
13472
|
-
// console.warn('query builder object is null.');
|
|
13473
|
-
// return;
|
|
13474
|
-
//}
|
|
13475
13470
|
if (savedData) {
|
|
13476
13471
|
this.qryBldrObj.setRules(savedData);
|
|
13477
13472
|
this.updateRule({ rule: savedData });
|
|
@@ -13486,18 +13481,6 @@ class SfquerybuilderComponent {
|
|
|
13486
13481
|
onChange() {
|
|
13487
13482
|
this.updateRule({ rule: this.qryBldrObj.getValidRules(this.qryBldrObj.rule) });
|
|
13488
13483
|
}
|
|
13489
|
-
beforeLoadField(fieldElementData) {
|
|
13490
|
-
let beforeLoadField = fieldElementData['BeforeLoadField'];
|
|
13491
|
-
if (beforeLoadField) {
|
|
13492
|
-
beforeLoadField = beforeLoadField.replace('modalGroup.', 'group.');
|
|
13493
|
-
const callFunc = eval('this.' + beforeLoadField);
|
|
13494
|
-
if (typeof callFunc === "function") {
|
|
13495
|
-
const newFunc = callFunc.bind(this);
|
|
13496
|
-
return newFunc(event, this, fieldElementData);
|
|
13497
|
-
}
|
|
13498
|
-
}
|
|
13499
|
-
return of(fieldElementData);
|
|
13500
|
-
}
|
|
13501
13484
|
}
|
|
13502
13485
|
SfquerybuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SfquerybuilderComponent, deps: [{ token: i2.FieldService }, { token: i2.ResourceApiService }, { token: i2.WebApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
13503
13486
|
SfquerybuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SfquerybuilderComponent, selector: "app-sfquerybuilder", inputs: { data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "qryBldrObj", first: true, predicate: ["querybuilder"], descendants: true }], ngImport: i0, template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <div class=\"qbcontainer\">\r\n <ejs-querybuilder *ngIf=\"issfLoaded\"\r\n #querybuilder\r\n width=\"100%\"\r\n [dataSource]=\"sfData\"\r\n [columns]=\"sdFilter\"\r\n [rule]=\"importRules\"\r\n (ruleChange)=\"updateRule($event)\"\r\n (created)=\"onChange()\">\r\n </ejs-querybuilder>\r\n\r\n <div *ngIf=\"!data.HideShowResultPanel\">\r\n <br>\r\n <ion-label>Result</ion-label>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n style=\"border: 1px solid #d3d3d3; width: 100%;\">{{displayRule}}</textarea>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}#querybuilder .e-slider-container.e-control-wrapper{height:0}ejs-querybuilder{display:block}.e-query-builder{margin:0 auto;display:block;background-color:#fff;border-color:#e0e0e0}.highcontrast textarea#ruleContent{background-color:#000}.e-query-builder .e-group-body .e-rule-container{box-shadow:0 2px 6px #d3d3d3;height:auto;margin-top:0;padding-right:12px;border:none;border-color:none}.e-bigger.e-small .e-ddl.e-popup .e-list-item,.e-bigger.e-small .e-ddl.e-popup .e-list-group-item,.e-bigger.e-small .e-ddl.e-popup .e-fixed-head{font-size:14px;line-height:34px;padding-left:0;text-indent:16px}.e-query-builder .e-group-body .e-rule-container .e-rule-filter,.e-query-builder .e-group-body .e-rule-container .e-value{width:40%!important}.e-query-builder .e-group-body .e-rule-container .e-operator{width:15%!important}\n"], components: [{ type: i2$1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i3$b.QueryBuilderComponent, selector: "ejs-querybuilder", inputs: ["allowValidation", "columns", "cssClass", "dataSource", "displayMode", "enableNotCondition", "enablePersistence", "enableRtl", "fieldMode", "fieldModel", "headerTemplate", "height", "immediateModeDelay", "locale", "matchCase", "maxGroupCount", "operatorModel", "readonly", "rule", "separator", "showButtons", "sortDirection", "summaryView", "valueModel", "width"], outputs: ["actionBegin", "beforeChange", "change", "created", "dataBound", "ruleChange"] }, { type: i2$1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|