mmhglobal-dynamicform 2.0.0-beta.59 → 2.0.0-beta.60
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 +3 -0
- package/esm2020/lib/zudf/zudf.component.mjs +31 -10
- package/fesm2015/mmhglobal-dynamicform.mjs +30 -9
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +30 -9
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/zudf/zudf.component.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
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.60beta`<br/>
|
|
7
|
+
[zudf] - enhancement for zudf.<br/>
|
|
8
|
+
|
|
6
9
|
`2.59beta`<br/>
|
|
7
10
|
[zudf] - restructure whole component to cater for container type.<br/>
|
|
8
11
|
|
|
@@ -70,12 +70,19 @@ export class ZudfComponent {
|
|
|
70
70
|
this.group[this.componentScopeName] = new ZGroup;
|
|
71
71
|
}
|
|
72
72
|
// declare zModel to zudf group
|
|
73
|
-
const
|
|
74
|
-
|
|
73
|
+
const zudfScopeGroup = this.group[this.componentScopeName];
|
|
74
|
+
zudfScopeGroup.zModel = {};
|
|
75
75
|
// render field element
|
|
76
76
|
this.renderFieldElement(this.data.Value);
|
|
77
77
|
// set this new create form to zGroup scope
|
|
78
|
-
|
|
78
|
+
// bind form only when Value is not null
|
|
79
|
+
if (this.data.Value) {
|
|
80
|
+
zudfScopeGroup.form = this.form;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const formControl = {};
|
|
84
|
+
zudfScopeGroup.form = new FormGroup(formControl);
|
|
85
|
+
}
|
|
79
86
|
}), tap(() => {
|
|
80
87
|
// set to formField for display
|
|
81
88
|
this.formFields = Object.assign([], this.data.Value);
|
|
@@ -112,6 +119,13 @@ export class ZudfComponent {
|
|
|
112
119
|
updateDisplayModel(value, flatIndex) {
|
|
113
120
|
ZComponentHelper.updateArrayObjectByFlatIndex(this.displayElementModel, flatIndex, value);
|
|
114
121
|
}
|
|
122
|
+
appendToDisplayModel(value, flatIndex) {
|
|
123
|
+
if (flatIndex.length >= 3) {
|
|
124
|
+
flatIndex.substring(0, flatIndex.length - 2);
|
|
125
|
+
}
|
|
126
|
+
const selectedRecord = ZComponentHelper.getFromArrayObjectByFlatIndex(this.displayElementModel, flatIndex);
|
|
127
|
+
selectedRecord.Value.push(value);
|
|
128
|
+
}
|
|
115
129
|
getDisplayModel() {
|
|
116
130
|
return JSON.parse(JSON.stringify(this.displayElementModel));
|
|
117
131
|
}
|
|
@@ -127,6 +141,7 @@ export class ZudfComponent {
|
|
|
127
141
|
//#endregion
|
|
128
142
|
//#region function for form control.
|
|
129
143
|
appendFormControl(zudfControlName, zudfControl, fieldData) {
|
|
144
|
+
// currently function not used. need to test and modify if want to use.
|
|
130
145
|
fieldData.Value = this.generateFormControlName(fieldData.Value);
|
|
131
146
|
this.form.addControl(fieldData.Value, zudfControl);
|
|
132
147
|
if (!this.formFields) {
|
|
@@ -142,9 +157,10 @@ export class ZudfComponent {
|
|
|
142
157
|
// render form control to new formgroup
|
|
143
158
|
this.form = new FormGroup(formControls);
|
|
144
159
|
this.formFields = fieldElements;
|
|
160
|
+
this.group[this.componentScopeName].form = this.form;
|
|
145
161
|
}
|
|
146
162
|
}
|
|
147
|
-
generateFormControls(fieldArray, formControls) {
|
|
163
|
+
generateFormControls(fieldArray, formControls, containerName) {
|
|
148
164
|
fieldArray.forEach(field => {
|
|
149
165
|
this.fieldService.patchFieldProperty(field);
|
|
150
166
|
if (typeof field.Value === "string" && field.Value.indexOf(".") !== -1) {
|
|
@@ -154,14 +170,19 @@ export class ZudfComponent {
|
|
|
154
170
|
}
|
|
155
171
|
else {
|
|
156
172
|
if (Array.isArray(field.Value)) {
|
|
157
|
-
this.generateFormControls(field.Value, formControls);
|
|
173
|
+
this.generateFormControls(field.Value, formControls, field.Name);
|
|
158
174
|
}
|
|
159
175
|
else {
|
|
176
|
+
// before generate FormControl, we need to add 2 attribute to the field when render.
|
|
177
|
+
// this for later on, we can know this field belong to which zudf and under which container.
|
|
178
|
+
if (containerName) {
|
|
179
|
+
field['containerName'] = containerName;
|
|
180
|
+
}
|
|
160
181
|
const isFormControl = ZComponentHelper.isFormControl(field);
|
|
161
182
|
const isVisible = ZComponentHelper.isVisibleFormControl(this, field);
|
|
162
183
|
const isRequired = ZComponentHelper.isRequiredFormControl(this, field);
|
|
163
184
|
if (isFormControl === true) {
|
|
164
|
-
|
|
185
|
+
field.Value = this.generateFormControlName(field.Value);
|
|
165
186
|
const validators = ZComponentHelper.getValidators(field, isVisible, isRequired);
|
|
166
187
|
formControls[field.Value] = new FormControl(this.group[this.componentScopeName].zModel[field.Value], validators);
|
|
167
188
|
if (ZComponentHelper.hasCCField(field.Type)) {
|
|
@@ -186,12 +207,12 @@ export class ZudfComponent {
|
|
|
186
207
|
//#endregion
|
|
187
208
|
//#region function for _zudf scope zmodel.
|
|
188
209
|
setFormFieldzModel(group, modelData) {
|
|
189
|
-
const
|
|
190
|
-
const
|
|
210
|
+
const grp = group ? group : this.group;
|
|
211
|
+
const zModel = grp[this.componentScopeName].zModel;
|
|
191
212
|
const patchedModelData = {};
|
|
192
213
|
for (var prop in modelData) {
|
|
193
214
|
if (Object.prototype.hasOwnProperty.call(modelData, prop)) {
|
|
194
|
-
patchedModelData[
|
|
215
|
+
patchedModelData[this.generateFormControlName(prop)] = modelData[prop];
|
|
195
216
|
}
|
|
196
217
|
}
|
|
197
218
|
Object.assign(zModel, patchedModelData);
|
|
@@ -255,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
255
276
|
}], form: [{
|
|
256
277
|
type: Input
|
|
257
278
|
}] } });
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVkZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96dWRmL3p1ZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVkZi96dWRmLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQXNDLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQWtCLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBR0wsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUMvQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8sYUFBYTtJQVd4QixZQUNVLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxZQUEwQixFQUMxQixhQUE0QixFQUM1QixxQkFBbUQsRUFDbkQsR0FBc0I7UUFQdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QiwwQkFBcUIsR0FBckIscUJBQXFCLENB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aEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDeEM7aUJBQ0k7Z0JBQ0gsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUU7b0JBQzVCLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUMxQztnQkFDRCxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7MkdBclNVLGFBQWE7K0ZBQWIsYUFBYSx3R0N4QjFCLHEzREFvQ0E7NEZEWmEsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxVQUFVOzJUQUtYLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQXN5bmNTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkZpZWxkLFxyXG4gIEFsZXJ0U2VydmljZSwgQXV0aFNlcnZpY2UsIEZpZWxkU2VydmljZSwgUmVzb3VyY2VBcGlTZXJ2aWNlLCBUb2FzdFNlcnZpY2UsIFdlYkFwaVNlcnZpY2UsXHJcbiAgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcywgWkNvbXBvbmVudEhlbHBlclxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvY29tcG9uZW50LWVycm9yLWhhbmRsZXIuc2VydmljZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXp1ZGYnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96dWRmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96dWRmLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBadWRmQ29tcG9uZW50IGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgZm9ybUZpZWxkczogYW55W107IC8vIHBvcHVsYXRlIHVzaW5nIGZpZWxkIGVsZW1lbnQuXHJcblxyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBpbml0aWFsRGF0YVZhbHVlOiBhbnk7XHJcbiAgY29tcG9uZW50U2NvcGVOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheUVsZW1lbnRNb2RlbDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RXJyb3JIYW5kbGVyOiBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIC8vIGtlZXAgZGF0YSBWYWx1ZVxyXG4gICAgdGhpcy5pbml0aWFsRGF0YVZhbHVlID0gdGhpcy5kYXRhLlZhbHVlO1xyXG5cclxuICAgIC8vIGRlY2xhcmF0aW9uXHJcbiAgICB0aGlzLmNvbXBvbmVudFNjb3BlTmFtZSA9ICdfenVkZl8nICsgdGhpcy5kYXRhLk5hbWU7XHJcbiAgICB0aGlzLmdyb3VwW3RoaXMuZGF0YS5OYW1lICsgJ01vZGVsJ10gPSBbXTtcclxuXHJcbiAgICB0aGlzLmxvYWRGb3JtKCk7XHJcblxyXG4gICAgLy9pZiAoWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eSh0aGlzLmRhdGEuVmFsdWUpIHx8IHRoaXMuZGF0YS5WYWx1ZS5sZW5ndGggPiAyKSB7XHJcbiAgICAvLyAgdGhpcy5sb2FkRW1wdHlGb3JtKCk7XHJcbiAgICAvL31cclxuICAgIC8vZWxzZSB7XHJcbiAgICAvLyAgdGhpcy5sb2FkWnVkZkZvcm0oKTtcclxuICAgIC8vfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRm9ybSgpIHtcclxuICAgIG9mKHRydWUpLnBpcGUoXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLlN1YlR5cGUgPSAnenVkZic7XHJcblxyXG4gICAgICAgIC8vIGNoYW5nZSB0aGUgdmFsdWUgdG8gdGhlIHJlc3VsdCBmaWVsZCBmb3JtXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRhdGEuTmFtZSArICcgZGVmYXVsdCB2YWx1ZTogJyArIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgICAgLy90aGlzLmRhdGEuVmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gY2hhbmdlIHp1ZGYgdG8gemRpdlxyXG4gICAgICAgIC8vdGhpcy5kYXRhLlR5cGUgPSAnemRpdic7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgZ3JvdXAgZm9yIHp1ZGZcclxuICAgICAgICBpZiAoIXRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXSA9IG5ldyBaR3JvdXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWNsYXJlIHpNb2RlbCB0byB6dWRmIGdyb3VwXHJcbiAgICAgICAgY29uc3QgZ3JwID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV07XHJcbiAgICAgICAgZ3JwLnpNb2RlbCA9IHt9O1xyXG5cclxuICAgICAgICAvLyByZW5kZXIgZmllbGQgZWxlbWVudFxyXG4gICAgICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KHRoaXMuZGF0YS5WYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vIHNldCB0aGlzIG5ldyBjcmVhdGUgZm9ybSB0byB6R3JvdXAgc2NvcGVcclxuICAgICAgICBncnAuZm9ybSA9IHRoaXMuZm9ybTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgLy8gc2V0IHRvIGZvcm1GaWVsZCBmb3IgZGlzcGxheVxyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9ICdhZnRlcicgKyAodGhpcy5kYXRhLk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLmRhdGEuTmFtZS5zbGljZSgxKSkgKyAnTG9hZGVkJztcclxuICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICBpZiAodGhpcy5ncm91cFtmaWVsZE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW2ZpZWxkTmFtZV0odGhpcy5ncm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHNldCBGaWVsZCBkaXYgY2xhc3NcclxuICAgICAgLy8gUmVwbGFjZWQgd2l0aDogdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5zZXRGaWVsZHNEaXZDbGFzcyh0aGlzLmdyb3VwLl9wcm9qZWN0TmFtZSwgdGhpcy5ncm91cC5maWVsZE5hbWUsIHRoaXMuZGF0YSwgdGhpcy5hdXRoU2VydmljZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGb3JtQ29udHJvbFZhbGlkYXRpb24oZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbGlkYXRvcjogYW55KSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJGaWVsZEVsZW1lbnRCeUpzb25TdHJpbmcoZ3JvdXA6IFpHcm91cCwganNvblN0cmluZzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmaWVsZEVsZW1lbnRNYXN0ZXJDb2RlSnNvbkFycmF5ID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KGZpZWxkRWxlbWVudE1hc3RlckNvZGVKc29uQXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIERpc3BsYXkgbW9kZWxcclxuICBwdWJsaWMgc2V0RGlzcGxheU1vZGVsKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XHJcblxyXG4gICAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHZhbHVlIHVzZWQgZm9yIHJlbmRlciB6dWRmICcgKyB0aGlzLmRhdGEuTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlRGlzcGxheU1vZGVsKHZhbHVlOiBhbnksIGZsYXRJbmRleDogc3RyaW5nKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnVwZGF0ZUFycmF5T2JqZWN0QnlGbGF0SW5kZXgodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsLCBmbGF0SW5kZXgsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREaXNwbGF5TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVBbGxEaXNwbGF5TW9kZWwoKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBbXTtcclxuICAgIHRoaXMuY2xlYXJGb3JtQ29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUVsZW1lbnRGcm9tRGlzcGxheU1vZGVsKGZsYXRJbmRleDogc3RyaW5nKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlbW92ZUFycmF5T2JqZWN0QnlGbGF0SW5kZXgodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsLCBmbGF0SW5kZXgpO1xyXG5cclxuICAgIC8vIFRPRE86IHJlbW92ZSBmcm9tIHptb2RlbFxyXG4gICAgLy9kZWxldGUgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsWycnXTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gZnVuY3Rpb24gZm9yIGZvcm0gY29udHJvbC5cclxuICBwdWJsaWMgYXBwZW5kRm9ybUNvbnRyb2woenVkZkNvbnRyb2xOYW1lOiBzdHJpbmcsIHp1ZGZDb250cm9sOiBGb3JtQ29udHJvbCwgZmllbGREYXRhOiBaRmllbGQpIHtcclxuICAgIGZpZWxkRGF0YS5WYWx1ZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGREYXRhLlZhbHVlKTtcclxuICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGZpZWxkRGF0YS5WYWx1ZSwgenVkZkNvbnRyb2wpO1xyXG5cclxuICAgIGlmICghdGhpcy5mb3JtRmllbGRzKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdmb3JtRmllbGQgJyArIHRoaXMuZGF0YS5OYW1lICsgJyBpcyB1bmRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHMucHVzaChmaWVsZERhdGEpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlckZpZWxkRWxlbWVudChmaWVsZEVsZW1lbnRzOiBhbnkpIHtcclxuICAgIGlmIChmaWVsZEVsZW1lbnRzKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1Db250cm9sczogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9ID0ge307XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbHMoZmllbGRFbGVtZW50cywgZm9ybUNvbnRyb2xzKTtcclxuXHJcbiAgICAgIC8vIHJlbmRlciBmb3JtIGNvbnRyb2wgdG8gbmV3IGZvcm1ncm91cFxyXG4gICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKGZvcm1Db250cm9scyk7XHJcbiAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IGZpZWxkRWxlbWVudHM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlRm9ybUNvbnRyb2xzKGZpZWxkQXJyYXk6IGFueSwgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0pIHtcclxuICAgIGZpZWxkQXJyYXkuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLnBhdGNoRmllbGRQcm9wZXJ0eShmaWVsZCk7XHJcbiAgICAgIGlmICh0eXBlb2YgZmllbGQuVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgZmllbGQuVmFsdWUuaW5kZXhPZihcIi5cIikgIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKFsnemdyaWQnLCAnenRyZWUnLCAnemltZycsICd0ZXh0YXJlYWpzb24nXS5pbmRleE9mKGZpZWxkLlR5cGUpID09PSAtMSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFwiRm9ybUNvbnRyb2wgLSBpbnZhbGlkIGZpZWxkIHZhbHVlXCIsIGZpZWxkLlZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQuVmFsdWUpKSB7XHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xzKGZpZWxkLlZhbHVlLCBmb3JtQ29udHJvbHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGlzRm9ybUNvbnRyb2wgPSBaQ29tcG9uZW50SGVscGVyLmlzRm9ybUNvbnRyb2woZmllbGQpO1xyXG4gICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGVGb3JtQ29udHJvbCh0aGlzLCBmaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc1JlcXVpcmVkID0gWkNvbXBvbmVudEhlbHBlci5pc1JlcXVpcmVkRm9ybUNvbnRyb2wodGhpcywgZmllbGQpO1xyXG4gICAgICAgICAgaWYgKGlzRm9ybUNvbnRyb2wgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGQuVmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQpO1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFtmaWVsZC5WYWx1ZV0sXHJcbiAgICAgICAgICAgICAgdmFsaWRhdG9yc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoWkNvbXBvbmVudEhlbHBlci5oYXNDQ0ZpZWxkKGZpZWxkLlR5cGUpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2NWYWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRDQ1ZhbGlkYXRvcnMoZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCk7XHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLkNDVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsW2ZpZWxkLkNDVmFsdWVdLFxyXG4gICAgICAgICAgICAgICAgY2NWYWxpZGF0b3JzXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJGb3JtQ29udHJvbCgpIHtcclxuICAgIHRoaXMuZm9ybUZpZWxkcy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0ucmVtb3ZlQ29udHJvbChkYXRhLlZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0YS5WYWx1ZSA9IHRoaXMuaW5pdGlhbERhdGFWYWx1ZTtcclxuXHJcbiAgICB0aGlzLmZvcm1GaWVsZHMgPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtQ29udHJvbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1GaWVsZHM7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGZ1bmN0aW9uIGZvciBfenVkZiBzY29wZSB6bW9kZWwuIFxyXG4gIHB1YmxpYyBzZXRGb3JtRmllbGR6TW9kZWwoZ3JvdXA6IFpHcm91cCwgbW9kZWxEYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IHpNb2RlbCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbDtcclxuICAgIGNvbnN0IHp1ZGZQcmVmaXggPSAnenVkZl8nICsgdGhpcy5kYXRhLk5hbWUgKyAnXyc7XHJcbiAgICBjb25zdCBwYXRjaGVkTW9kZWxEYXRhID0ge307XHJcblxyXG4gICAgZm9yICh2YXIgcHJvcCBpbiBtb2RlbERhdGEpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2RlbERhdGEsIHByb3ApKSB7XHJcbiAgICAgICAgcGF0Y2hlZE1vZGVsRGF0YVt6dWRmUHJlZml4ICsgcHJvcF0gPSBtb2RlbERhdGFbcHJvcF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHpNb2RlbCwgcGF0Y2hlZE1vZGVsRGF0YSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Wk1vZGVsKCkge1xyXG4gICAgY29uc3Qgek1vZGVsID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsO1xyXG4gICAgY29uc3QgenVkZlByZWZpeCA9ICd6dWRmXycgKyB0aGlzLmRhdGEuTmFtZSArICdfJztcclxuICAgIGNvbnN0IHBhdGNoZWRNb2RlbERhdGEgPSB7fTtcclxuXHJcbiAgICBmb3IgKGxldCBwcm9wIGluIHpNb2RlbCkge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHpNb2RlbCwgcHJvcCkpIHtcclxuICAgICAgICBwYXRjaGVkTW9kZWxEYXRhW3Byb3AucmVwbGFjZSh6dWRmUHJlZml4LCAnJyldID0gek1vZGVsW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdGNoZWRNb2RlbERhdGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Wk1vZGVsQXNTdHJpbmcoKSB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRaTW9kZWwoKSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGNvbW1vbiBmdW5jdGlvbiBcclxuICBDb21wb25lbnRJc1Zpc2libGUoZmllbGQ6IFpGaWVsZCk6IGFueSB7XHJcbiAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5Db21wb25lbnRJc1Zpc2libGUoZmllbGQsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVuYWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5ID0gIXN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSA9IHN0YXR1cztcclxuICAgIHRoaXMuZGF0YS5WaXNpYmxlID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlcXVpcmUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZCA9IHN0YXR1cztcclxuICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBbdGhpcy5kYXRhLlR5cGUsIHRoaXMuZGF0YS5OYW1lLCBjb250cm9sTmFtZV0uam9pbignXycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlQW5kU2hvd0Vycm9yTWVzc2FnZSgpIHtcclxuICAgIGNvbnN0IGZnID0gdGhpcy5mb3JtIGFzIEZvcm1Hcm91cDtcclxuXHJcbiAgICBpZiAoIWZnLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50RXJyb3JIYW5kbGVyLnNob3dGb3JtR3JvdXBFcnJvck1lc3NhZ2UodGhpcy5ncm91cCwgZmcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGVuZFByZWZpeChmaWVsZHM6IFpGaWVsZFtdLCBwcmVmaXg6IGFueSkge1xyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLmFwcGVuZFByZWZpeChmaWVsZC5WYWx1ZSwgcHJlZml4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmaWVsZC5OYW1lID0gcHJlZml4ICsgJ18nICsgZmllbGQuTmFtZTtcclxuICAgICAgICBpZiAoZmllbGQuVHlwZSAhPSAnemJ1dHRvbnMnKSB7XHJcbiAgICAgICAgICBmaWVsZC5WYWx1ZSA9IHByZWZpeCArICdfJyArIGZpZWxkLlZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWVsZC5TdWJUeXBlID0gcHJlZml4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cInBhZGRpbmc6IDE1cHhcIiAqbmdJZj1cImRhdGEuVGl0bGUgJiYgKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCIgY2xhc3M9XCJpb24tcm93XCI+XHJcbiAgPGtlbmRvLWNhcmQgKm5nSWY9XCJkYXRhLlRpdGxlXCIgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICA8a2VuZG8tY2FyZC1oZWFkZXI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImNhcmQtaGVhZGVyLXRpdGxlXCI+e3tkYXRhLlRpdGxlfX08L2lvbi1sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2tlbmRvLWNhcmQtaGVhZGVyPlxyXG4gICAgPGtlbmRvLWNhcmQtYm9keT5cclxuICAgICAgPGRpdiBjbGFzcz1cImlvbi1yb3dcIj5cclxuICAgICAgICA8YXBwLXpmb3JtY29udHJvbCBbbmdDbGFzc109XCJncm91cFtmaWVsZC5pc1Zpc2libGVGaWVsZF0gPyBmaWVsZC5EaXZDbGFzcyA6ICgoZmllbGQuVmlzaWJsZSA9PT0gdHJ1ZSkgPyAgZmllbGQuRGl2Q2xhc3MgOiAnZmxleC1oaWRlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmb3JtRmllbGRzIHwgZGl2emxheW91dDogZGF0YS56bGF5b3V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ6dWRme3tkYXRhLk5hbWV9fS17e2ZpZWxkLlR5cGV9fS17e2ZpZWxkLk5hbWV9fVwiPlxyXG4gICAgICAgIDwvYXBwLXpmb3JtY29udHJvbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2tlbmRvLWNhcmQtYm9keT5cclxuICA8L2tlbmRvLWNhcmQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cIiFkYXRhLlRpdGxlICYmICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiIGNsYXNzPVwiaW9uLXJvd1wiPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPGlvbi1ncmlkPlxyXG4gICAgICA8aW9uLXJvdyBpZD1cImR5bmFtaWMtZm9ybS1ob3N0XCIgY2xhc3M9XCJpb24tYWxpZ24taXRlbXMtc3RhcnRcIj5cclxuICAgICAgICA8YXBwLXpmb3JtY29udHJvbCBbbmdDbGFzc109XCJncm91cFtmaWVsZC5pc1Zpc2libGVGaWVsZF0gPyBmaWVsZC5EaXZDbGFzcyA6ICgoZmllbGQuVmlzaWJsZSA9PT0gdHJ1ZSkgPyAgZmllbGQuRGl2Q2xhc3MgOiAnZmxleC1oaWRlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmb3JtRmllbGRzIHwgZGl2emxheW91dDogZGF0YS56bGF5b3V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ6dWRme3tkYXRhLk5hbWV9fS17e2ZpZWxkLlR5cGV9fS17e2ZpZWxkLk5hbWV9fVwiPlxyXG4gICAgICAgIDwvYXBwLXpmb3JtY29udHJvbD5cclxuICAgICAgPC9pb24tcm93PlxyXG4gICAgPC9pb24tZ3JpZD5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVkZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96dWRmL3p1ZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVkZi96dWRmLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQXNDLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQWtCLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBR0wsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUMvQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8sYUFBYTtJQVd4QixZQUNVLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxZQUEwQixFQUMxQixhQUE0QixFQUM1QixxQkFBbUQsRUFDbkQsR0FBc0I7UUFQdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQThCO1FBQ25ELFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBYmhDLHdCQUFtQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQTRRMUMsY0FBUyxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNoRCxDQUFDLENBQUE7UUFFTSxlQUFVLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDN0IsQ0FBQyxDQUFBO1FBRU0sZUFBVSxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDN0MsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkgsQ0FBQyxDQUFBO0lBMVFHLENBQUM7SUFFTCxRQUFRO1FBQ04sZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUV4QyxjQUFjO1FBQ2QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUUxQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEIsNkZBQTZGO1FBQzdGLHlCQUF5QjtRQUN6QixHQUFHO1FBQ0gsUUFBUTtRQUNSLHdCQUF3QjtRQUN4QixHQUFHO0lBQ0wsQ0FBQztJQUVPLFFBQVE7UUFDZCxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNYLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFFM0IsNENBQTRDO1lBQzVDLHFFQUFxRTtZQUNyRSx1QkFBdUI7WUFFdkIsc0JBQXNCO1lBQ3RCLDBCQUEwQjtRQUM1QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO2FBQ2xEO1lBRUQsK0JBQStCO1lBQy9CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDM0QsY0FBYyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFFM0IsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXpDLDJDQUEyQztZQUMzQyx3Q0FBd0M7WUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDbkIsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ2pDO2lCQUNJO2dCQUNILE1BQU0sV0FBVyxHQUFtQyxFQUFFLENBQUM7Z0JBQ3ZELGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbEQ7UUFDSCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQzFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNuQzthQUNGO1lBQ0Qsc0JBQXNCO1lBQ3RCLDhEQUE4RDtZQUM5RCxrSEFBa0g7UUFDcEgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sd0JBQXdCLENBQUMsZUFBdUIsRUFBRSxTQUFjO1FBQ3JFLFFBQVEsQ0FBQztJQUNYLENBQUM7SUFFTSw4QkFBOEIsQ0FBQyxLQUFhLEVBQUUsVUFBa0I7UUFDckUsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCx1QkFBdUI7SUFDaEIsZUFBZSxDQUFDLEtBQVU7UUFDL0IsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFN0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ25EO2FBQ0k7WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0lBRU0sa0JBQWtCLENBQUMsS0FBVSxFQUFFLFNBQWlCO1FBQ3JELGdCQUFnQixDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVNLG9CQUFvQixDQUFDLEtBQVUsRUFBRSxTQUFpQjtRQUN2RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3pCLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDOUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0csY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0scUJBQXFCO1FBQzFCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLDZCQUE2QixDQUFDLFNBQWlCO1FBQ3BELGdCQUFnQixDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVuRiwyQkFBMkI7UUFDM0Isd0RBQXdEO0lBQzFELENBQUM7SUFDRCxZQUFZO0lBR1osb0NBQW9DO0lBQzdCLGlCQUFpQixDQUFDLGVBQXVCLEVBQUUsV0FBd0IsRUFBRSxTQUFpQjtRQUMzRix1RUFBdUU7UUFDdkUsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLENBQUM7U0FDOUQ7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxhQUFrQjtRQUMxQyxJQUFJLGFBQWEsRUFBRTtZQUNqQixNQUFNLFlBQVksR0FBbUMsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFFdkQsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxVQUFlLEVBQUUsWUFBNEMsRUFBRSxhQUFzQjtRQUNoSCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN0RSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDekUsT0FBTyxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2hFO2FBQ0Y7aUJBQ0k7Z0JBQ0gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDbEU7cUJBQ0k7b0JBQ0gsb0ZBQW9GO29CQUNwRiw2RkFBNkY7b0JBQzdGLElBQUksYUFBYSxFQUFFO3dCQUNqQixLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsYUFBYSxDQUFDO3FCQUN4QztvQkFFRCxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDckUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUV2RSxJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7d0JBQzFCLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDeEQsTUFBTSxVQUFVLEdBQWtCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO3dCQUMvRixZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksV0FBVyxDQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQ3ZELFVBQVUsQ0FDWCxDQUFDO3dCQUNGLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDM0MsTUFBTSxZQUFZLEdBQWtCLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDOzRCQUNuRyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksV0FBVyxDQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQ3pELFlBQVksQ0FDYixDQUFDO3lCQUNIO3FCQUNGO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBRXhDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsWUFBWTtJQUdaLDJDQUEyQztJQUNwQyxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsU0FBYztRQUNyRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBRTVCLEtBQUssSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFO1lBQzFCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDekQsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hFO1NBQ0Y7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxTQUFTO1FBQ2QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNsRCxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUU1QixLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtZQUN2QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RELGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9EO1NBQ0Y7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFTSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxZQUFZO0lBR1osMEJBQTBCO0lBQzFCLGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsT0FBTyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFnQk0sT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRU0sdUJBQXVCLENBQUMsV0FBbUI7UUFDaEQsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRU0sMkJBQTJCO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFpQixDQUFDO1FBRWxDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ2IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckUsT0FBTztTQUNSO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxNQUFnQixFQUFFLE1BQVc7UUFDaEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDeEM7aUJBQ0k7Z0JBQ0gsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUU7b0JBQzVCLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2lCQUMxQztnQkFDRCxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7MkdBOVRVLGFBQWE7K0ZBQWIsYUFBYSx3R0N4QjFCLHEzREFvQ0E7NEZEWmEsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxVQUFVOzJUQUtYLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQXN5bmNTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkZpZWxkLFxyXG4gIEFsZXJ0U2VydmljZSwgQXV0aFNlcnZpY2UsIEZpZWxkU2VydmljZSwgUmVzb3VyY2VBcGlTZXJ2aWNlLCBUb2FzdFNlcnZpY2UsIFdlYkFwaVNlcnZpY2UsXHJcbiAgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcywgWkNvbXBvbmVudEhlbHBlclxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvY29tcG9uZW50LWVycm9yLWhhbmRsZXIuc2VydmljZVwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXp1ZGYnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96dWRmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96dWRmLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBadWRmQ29tcG9uZW50IGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgZm9ybUZpZWxkczogYW55W107IC8vIHBvcHVsYXRlIHVzaW5nIGZpZWxkIGVsZW1lbnQuXHJcblxyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBpbml0aWFsRGF0YVZhbHVlOiBhbnk7XHJcbiAgY29tcG9uZW50U2NvcGVOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheUVsZW1lbnRNb2RlbDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RXJyb3JIYW5kbGVyOiBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIC8vIGtlZXAgZGF0YSBWYWx1ZVxyXG4gICAgdGhpcy5pbml0aWFsRGF0YVZhbHVlID0gdGhpcy5kYXRhLlZhbHVlO1xyXG5cclxuICAgIC8vIGRlY2xhcmF0aW9uXHJcbiAgICB0aGlzLmNvbXBvbmVudFNjb3BlTmFtZSA9ICdfenVkZl8nICsgdGhpcy5kYXRhLk5hbWU7XHJcbiAgICB0aGlzLmdyb3VwW3RoaXMuZGF0YS5OYW1lICsgJ01vZGVsJ10gPSBbXTtcclxuXHJcbiAgICB0aGlzLmxvYWRGb3JtKCk7XHJcblxyXG4gICAgLy9pZiAoWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eSh0aGlzLmRhdGEuVmFsdWUpIHx8IHRoaXMuZGF0YS5WYWx1ZS5sZW5ndGggPiAyKSB7XHJcbiAgICAvLyAgdGhpcy5sb2FkRW1wdHlGb3JtKCk7XHJcbiAgICAvL31cclxuICAgIC8vZWxzZSB7XHJcbiAgICAvLyAgdGhpcy5sb2FkWnVkZkZvcm0oKTtcclxuICAgIC8vfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRm9ybSgpIHtcclxuICAgIG9mKHRydWUpLnBpcGUoXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLlN1YlR5cGUgPSAnenVkZic7XHJcblxyXG4gICAgICAgIC8vIGNoYW5nZSB0aGUgdmFsdWUgdG8gdGhlIHJlc3VsdCBmaWVsZCBmb3JtXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRhdGEuTmFtZSArICcgZGVmYXVsdCB2YWx1ZTogJyArIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgICAgLy90aGlzLmRhdGEuVmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gY2hhbmdlIHp1ZGYgdG8gemRpdlxyXG4gICAgICAgIC8vdGhpcy5kYXRhLlR5cGUgPSAnemRpdic7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgZ3JvdXAgZm9yIHp1ZGZcclxuICAgICAgICBpZiAoIXRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXSA9IG5ldyBaR3JvdXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWNsYXJlIHpNb2RlbCB0byB6dWRmIGdyb3VwXHJcbiAgICAgICAgY29uc3QgenVkZlNjb3BlR3JvdXAgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXTtcclxuICAgICAgICB6dWRmU2NvcGVHcm91cC56TW9kZWwgPSB7fTtcclxuXHJcbiAgICAgICAgLy8gcmVuZGVyIGZpZWxkIGVsZW1lbnRcclxuICAgICAgICB0aGlzLnJlbmRlckZpZWxkRWxlbWVudCh0aGlzLmRhdGEuVmFsdWUpO1xyXG5cclxuICAgICAgICAvLyBzZXQgdGhpcyBuZXcgY3JlYXRlIGZvcm0gdG8gekdyb3VwIHNjb3BlXHJcbiAgICAgICAgLy8gYmluZCBmb3JtIG9ubHkgd2hlbiBWYWx1ZSBpcyBub3QgbnVsbFxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuVmFsdWUpIHtcclxuICAgICAgICAgIHp1ZGZTY29wZUdyb3VwLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2w6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSA9IHt9O1xyXG4gICAgICAgICAgenVkZlNjb3BlR3JvdXAuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgLy8gc2V0IHRvIGZvcm1GaWVsZCBmb3IgZGlzcGxheVxyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9ICdhZnRlcicgKyAodGhpcy5kYXRhLk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLmRhdGEuTmFtZS5zbGljZSgxKSkgKyAnTG9hZGVkJztcclxuICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICBpZiAodGhpcy5ncm91cFtmaWVsZE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW2ZpZWxkTmFtZV0odGhpcy5ncm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHNldCBGaWVsZCBkaXYgY2xhc3NcclxuICAgICAgLy8gUmVwbGFjZWQgd2l0aDogdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5zZXRGaWVsZHNEaXZDbGFzcyh0aGlzLmdyb3VwLl9wcm9qZWN0TmFtZSwgdGhpcy5ncm91cC5maWVsZE5hbWUsIHRoaXMuZGF0YSwgdGhpcy5hdXRoU2VydmljZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGb3JtQ29udHJvbFZhbGlkYXRpb24oZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbGlkYXRvcjogYW55KSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJGaWVsZEVsZW1lbnRCeUpzb25TdHJpbmcoZ3JvdXA6IFpHcm91cCwganNvblN0cmluZzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmaWVsZEVsZW1lbnRNYXN0ZXJDb2RlSnNvbkFycmF5ID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KGZpZWxkRWxlbWVudE1hc3RlckNvZGVKc29uQXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIERpc3BsYXkgbW9kZWxcclxuICBwdWJsaWMgc2V0RGlzcGxheU1vZGVsKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XHJcblxyXG4gICAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHZhbHVlIHVzZWQgZm9yIHJlbmRlciB6dWRmICcgKyB0aGlzLmRhdGEuTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlRGlzcGxheU1vZGVsKHZhbHVlOiBhbnksIGZsYXRJbmRleDogc3RyaW5nKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnVwZGF0ZUFycmF5T2JqZWN0QnlGbGF0SW5kZXgodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsLCBmbGF0SW5kZXgsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBlbmRUb0Rpc3BsYXlNb2RlbCh2YWx1ZTogYW55LCBmbGF0SW5kZXg6IHN0cmluZykge1xyXG4gICAgaWYgKGZsYXRJbmRleC5sZW5ndGggPj0gMykge1xyXG4gICAgICBmbGF0SW5kZXguc3Vic3RyaW5nKDAsIGZsYXRJbmRleC5sZW5ndGggLSAyKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFJlY29yZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0RnJvbUFycmF5T2JqZWN0QnlGbGF0SW5kZXgodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsLCBmbGF0SW5kZXgpO1xyXG4gICAgc2VsZWN0ZWRSZWNvcmQuVmFsdWUucHVzaCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RGlzcGxheU1vZGVsKCkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlQWxsRGlzcGxheU1vZGVsKCkge1xyXG4gICAgdGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsID0gW107XHJcbiAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVFbGVtZW50RnJvbURpc3BsYXlNb2RlbChmbGF0SW5kZXg6IHN0cmluZykge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZW1vdmVBcnJheU9iamVjdEJ5RmxhdEluZGV4KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCwgZmxhdEluZGV4KTtcclxuXHJcbiAgICAvLyBUT0RPOiByZW1vdmUgZnJvbSB6bW9kZWxcclxuICAgIC8vZGVsZXRlIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFsnJ107XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGZ1bmN0aW9uIGZvciBmb3JtIGNvbnRyb2wuXHJcbiAgcHVibGljIGFwcGVuZEZvcm1Db250cm9sKHp1ZGZDb250cm9sTmFtZTogc3RyaW5nLCB6dWRmQ29udHJvbDogRm9ybUNvbnRyb2wsIGZpZWxkRGF0YTogWkZpZWxkKSB7XHJcbiAgICAvLyBjdXJyZW50bHkgZnVuY3Rpb24gbm90IHVzZWQuIG5lZWQgdG8gdGVzdCBhbmQgbW9kaWZ5IGlmIHdhbnQgdG8gdXNlLlxyXG4gICAgZmllbGREYXRhLlZhbHVlID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZERhdGEuVmFsdWUpO1xyXG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woZmllbGREYXRhLlZhbHVlLCB6dWRmQ29udHJvbCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmZvcm1GaWVsZHMpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Zvcm1GaWVsZCAnICsgdGhpcy5kYXRhLk5hbWUgKyAnIGlzIHVuZGVmaW5lZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkcy5wdXNoKGZpZWxkRGF0YSk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyRmllbGRFbGVtZW50KGZpZWxkRWxlbWVudHM6IGFueSkge1xyXG4gICAgaWYgKGZpZWxkRWxlbWVudHMpIHtcclxuICAgICAgY29uc3QgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZEVsZW1lbnRzLCBmb3JtQ29udHJvbHMpO1xyXG5cclxuICAgICAgLy8gcmVuZGVyIGZvcm0gY29udHJvbCB0byBuZXcgZm9ybWdyb3VwXHJcbiAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUNvbnRyb2xzKTtcclxuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZmllbGRFbGVtZW50cztcclxuICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uZm9ybSA9IHRoaXMuZm9ybTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVGb3JtQ29udHJvbHMoZmllbGRBcnJheTogYW55LCBmb3JtQ29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSwgY29udGFpbmVyTmFtZT86IHN0cmluZykge1xyXG4gICAgZmllbGRBcnJheS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgaWYgKHR5cGVvZiBmaWVsZC5WYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBmaWVsZC5WYWx1ZS5pbmRleE9mKFwiLlwiKSAhPT0gLTEpIHtcclxuICAgICAgICBpZiAoWyd6Z3JpZCcsICd6dHJlZScsICd6aW1nJywgJ3RleHRhcmVhanNvbiddLmluZGV4T2YoZmllbGQuVHlwZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJGb3JtQ29udHJvbCAtIGludmFsaWQgZmllbGQgdmFsdWVcIiwgZmllbGQuVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbHMoZmllbGQuVmFsdWUsIGZvcm1Db250cm9scywgZmllbGQuTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gYmVmb3JlIGdlbmVyYXRlIEZvcm1Db250cm9sLCB3ZSBuZWVkIHRvIGFkZCAyIGF0dHJpYnV0ZSB0byB0aGUgZmllbGQgd2hlbiByZW5kZXIuXHJcbiAgICAgICAgICAvLyB0aGlzIGZvciBsYXRlciBvbiwgd2UgY2FuIGtub3cgdGhpcyBmaWVsZCBiZWxvbmcgdG8gd2hpY2ggenVkZiBhbmQgdW5kZXIgd2hpY2ggY29udGFpbmVyLiBcclxuICAgICAgICAgIGlmIChjb250YWluZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIGZpZWxkWydjb250YWluZXJOYW1lJ10gPSBjb250YWluZXJOYW1lO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGlzRm9ybUNvbnRyb2wgPSBaQ29tcG9uZW50SGVscGVyLmlzRm9ybUNvbnRyb2woZmllbGQpO1xyXG4gICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGVGb3JtQ29udHJvbCh0aGlzLCBmaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc1JlcXVpcmVkID0gWkNvbXBvbmVudEhlbHBlci5pc1JlcXVpcmVkRm9ybUNvbnRyb2wodGhpcywgZmllbGQpO1xyXG5cclxuICAgICAgICAgIGlmIChpc0Zvcm1Db250cm9sID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGZpZWxkLlZhbHVlID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZC5WYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBaQ29tcG9uZW50SGVscGVyLmdldFZhbGlkYXRvcnMoZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5WYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsW2ZpZWxkLlZhbHVlXSxcclxuICAgICAgICAgICAgICB2YWxpZGF0b3JzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChaQ29tcG9uZW50SGVscGVyLmhhc0NDRmllbGQoZmllbGQuVHlwZSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBjY1ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBaQ29tcG9uZW50SGVscGVyLmdldENDVmFsaWRhdG9ycyhmaWVsZCwgaXNWaXNpYmxlLCBpc1JlcXVpcmVkKTtcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQuQ0NWYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWxbZmllbGQuQ0NWYWx1ZV0sXHJcbiAgICAgICAgICAgICAgICBjY1ZhbGlkYXRvcnNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckZvcm1Db250cm9sKCkge1xyXG4gICAgdGhpcy5mb3JtRmllbGRzLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuZm9ybS5yZW1vdmVDb250cm9sKGRhdGEuVmFsdWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kYXRhLlZhbHVlID0gdGhpcy5pbml0aWFsRGF0YVZhbHVlO1xyXG5cclxuICAgIHRoaXMuZm9ybUZpZWxkcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1Db250cm9sKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUZpZWxkcztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gZnVuY3Rpb24gZm9yIF96dWRmIHNjb3BlIHptb2RlbC4gXHJcbiAgcHVibGljIHNldEZvcm1GaWVsZHpNb2RlbChncm91cDogWkdyb3VwLCBtb2RlbERhdGE6IGFueSkge1xyXG4gICAgY29uc3QgZ3JwID0gZ3JvdXAgPyBncm91cCA6IHRoaXMuZ3JvdXA7XHJcbiAgICBjb25zdCB6TW9kZWwgPSBncnBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbDtcclxuICAgIGNvbnN0IHBhdGNoZWRNb2RlbERhdGEgPSB7fTtcclxuXHJcbiAgICBmb3IgKHZhciBwcm9wIGluIG1vZGVsRGF0YSkge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZGVsRGF0YSwgcHJvcCkpIHtcclxuICAgICAgICBwYXRjaGVkTW9kZWxEYXRhW3RoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUocHJvcCldID0gbW9kZWxEYXRhW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbih6TW9kZWwsIHBhdGNoZWRNb2RlbERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFpNb2RlbCgpIHtcclxuICAgIGNvbnN0IHpNb2RlbCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbDtcclxuICAgIGNvbnN0IHp1ZGZQcmVmaXggPSAnenVkZl8nICsgdGhpcy5kYXRhLk5hbWUgKyAnXyc7XHJcbiAgICBjb25zdCBwYXRjaGVkTW9kZWxEYXRhID0ge307XHJcblxyXG4gICAgZm9yIChsZXQgcHJvcCBpbiB6TW9kZWwpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6TW9kZWwsIHByb3ApKSB7XHJcbiAgICAgICAgcGF0Y2hlZE1vZGVsRGF0YVtwcm9wLnJlcGxhY2UoenVkZlByZWZpeCwgJycpXSA9IHpNb2RlbFtwcm9wXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXRjaGVkTW9kZWxEYXRhO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFpNb2RlbEFzU3RyaW5nKCkge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Wk1vZGVsKCkpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBjb21tb24gZnVuY3Rpb24gXHJcbiAgQ29tcG9uZW50SXNWaXNpYmxlKGZpZWxkOiBaRmllbGQpOiBhbnkge1xyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuQ29tcG9uZW50SXNWaXNpYmxlKGZpZWxkLCB0aGlzLmdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFbmFibGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSA9ICFzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlzaWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmRhdGEuVmlzaWJsZSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSZXF1aXJlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQgPSBzdGF0dXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmNoYW5nZVZhbGlkYXRvcihzdGF0dXMsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1Db250cm9sTmFtZShjb250cm9sTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gW3RoaXMuZGF0YS5UeXBlLCB0aGlzLmRhdGEuTmFtZSwgY29udHJvbE5hbWVdLmpvaW4oJ18nKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZUFuZFNob3dFcnJvck1lc3NhZ2UoKSB7XHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudEVycm9ySGFuZGxlci5zaG93Rm9ybUdyb3VwRXJyb3JNZXNzYWdlKHRoaXMuZ3JvdXAsIGZnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRQcmVmaXgoZmllbGRzOiBaRmllbGRbXSwgcHJlZml4OiBhbnkpIHtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQuVmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5hcHBlbmRQcmVmaXgoZmllbGQuVmFsdWUsIHByZWZpeCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZmllbGQuTmFtZSA9IHByZWZpeCArICdfJyArIGZpZWxkLk5hbWU7XHJcbiAgICAgICAgaWYgKGZpZWxkLlR5cGUgIT0gJ3pidXR0b25zJykge1xyXG4gICAgICAgICAgZmllbGQuVmFsdWUgPSBwcmVmaXggKyAnXycgKyBmaWVsZC5WYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmllbGQuU3ViVHlwZSA9IHByZWZpeDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8vIG5lZWQgdG8gcmVkbyBmb3IgdGhpcyBsb2FkWnVkZkZvcm1cclxuICAvL3ByaXZhdGUgbG9hZFp1ZGZGb3JtKCkge1xyXG4gIC8vICBvZih0cnVlKS5waXBlKFxyXG4gIC8vICAgIGNvbmNhdE1hcChmaWVsZEVsZW1lbnRzID0+IHtcclxuICAvLyAgICAgIGNvbnN0IGFzeW5jU3ViamVjdCA9IG5ldyBBc3luY1N1YmplY3Q8YW55PigpO1xyXG4gIC8vICAgICAgdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZSh0aGlzLmRhdGEuVmFsdWUsICdGb3JtRmllbGQnLCB0aGlzLCAnZmllbGRzJykucGlwZShcclxuICAvLyAgICAgICAgbWFwKGZvcm1GaWVsZFJlc3VsdCA9PiB7XHJcbiAgLy8gICAgICAgICAgLy8gcmVuYW1lIGFkZCBwcmVmaXggdG8gYWxsIHVkZiBmaWVsZCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBmcm9tIG1haW4gZm9ybVxyXG4gIC8vICAgICAgICAgIHRoaXMuYXBwZW5kUHJlZml4KGZvcm1GaWVsZFJlc3VsdCwgJ3p1ZGZfJyArIHRoaXMuZGF0YS5OYW1lKTtcclxuXHJcbiAgLy8gICAgICAgICAgLy8gY2hhbmdlIHRoZSB2YWx1ZSB0byB0aGUgcmVzdWx0IGZpZWxkIGZvcm1cclxuICAvLyAgICAgICAgICB0aGlzLmRhdGEuVmFsdWUgPSBmb3JtRmllbGRSZXN1bHQ7XHJcblxyXG4gIC8vICAgICAgICAgIC8vIGNoYW5nZSB6dWRmIHRvIHpkaXZcclxuICAvLyAgICAgICAgICAvL3RoaXMuZGF0YS5UeXBlID0gJ3pkaXYnO1xyXG5cclxuICAvLyAgICAgICAgICAvLyBlbmQgc3ViamVjdFxyXG4gIC8vICAgICAgICAgIGFzeW5jU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gIC8vICAgICAgICAgIGFzeW5jU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gIC8vICAgICAgICB9KVxyXG4gIC8vICAgICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgLy8gICAgICByZXR1cm4gYXN5bmNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIC8vICAgIH0pLFxyXG4gIC8vICAgIHRhcCgoKSA9PiB7XHJcbiAgLy8gICAgICBpZiAoIXRoaXMuZ3JvdXBbJ196dWRmXycgKyB0aGlzLmRhdGEuTmFtZV0pIHtcclxuICAvLyAgICAgICAgdGhpcy5ncm91cFsnX3p1ZGZfJyArIHRoaXMuZGF0YS5OYW1lXSA9IG5ldyBaR3JvdXA7XHJcbiAgLy8gICAgICB9XHJcblxyXG4gIC8vICAgICAgY29uc3QgZ3JwID0gdGhpcy5ncm91cFsnX3p1ZGZfJyArIHRoaXMuZGF0YS5OYW1lXTtcclxuXHJcbiAgLy8gICAgICBncnAuek1vZGVsID0ge307XHJcblxyXG4gIC8vICAgICAgLy8gY3JlYXRlIHp1ZGYgYXMgbmV3IEZvcm0gR3JvdXBcclxuICAvLyAgICAgIGNvbnN0IGZvcm1Db250cm9sczogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9ID0ge307XHJcbiAgLy8gICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKGZvcm1Db250cm9scyk7IFxyXG5cclxuICAvLyAgICAgIC8vIHNldCB0byB6R3JvdXAgc2NvcGVcclxuICAvLyAgICAgIGdycC5mb3JtID0gdGhpcy5mb3JtO1xyXG4gIC8vICAgIH0pLFxyXG4gIC8vICAgIHRhcCgoKSA9PiB7XHJcbiAgLy8gICAgICAvLyBzZXQgdG8gZm9ybUZpZWxkIGZvciBkaXNwbGF5XHJcbiAgLy8gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG4gIC8vICAgIH0pXHJcbiAgLy8gICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAvLyAgICBjb25zdCBmaWVsZE5hbWUgPSAnYWZ0ZXInICsgKHRoaXMuZGF0YS5OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5kYXRhLk5hbWUuc2xpY2UoMSkpICsgJ0xvYWRlZCc7XHJcbiAgLy8gICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAvLyAgICAgIGlmICh0aGlzLmdyb3VwW2ZpZWxkTmFtZV0pIHtcclxuICAvLyAgICAgICAgdGhpcy5ncm91cFtmaWVsZE5hbWVdKHRoaXMuZ3JvdXApO1xyXG4gIC8vICAgICAgfVxyXG4gIC8vICAgIH1cclxuICAvLyAgICAvLyBzZXQgRmllbGQgZGl2IGNsYXNzXHJcbiAgLy8gICAgLy8gUmVwbGFjZWQgd2l0aDogdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAvLyAgICAvLyBaQ29tcG9uZW50SGVscGVyLnNldEZpZWxkc0RpdkNsYXNzKHRoaXMuZ3JvdXAuX3Byb2plY3ROYW1lLCB0aGlzLmdyb3VwLmZpZWxkTmFtZSwgdGhpcy5kYXRhLCB0aGlzLmF1dGhTZXJ2aWNlKTtcclxuXHJcbiAgLy8gICAgLy8gVE9ETzogZ2V0IHNhdmVkIHJlY29yZFxyXG4gIC8vICAgIC8vdGhpcy5nZXRGb3JtRmllbGR6TW9kZWwoKTtcclxuXHJcbiAgLy8gICAgLy8gY2hhbmdlIGJhY2sgdGhlIGRhdGEuVmFsdWVcclxuICAvLyAgICAvL2lmICh0aGlzLmRhdGFbJ0Rpc2FibGVSZXBsYWNlVmFsdWUnXSkge1xyXG4gIC8vICAgIC8vICB0aGlzLmRhdGEuVmFsdWUgPSB0aGlzLmluaXRpYWxEYXRhVmFsdWU7XHJcbiAgLy8gICAgLy99XHJcbiAgLy8gIH0pO1xyXG4gIC8vfVxyXG5cclxuICAvLyBBbGxvdyBwcm9qZWN0IHBhZ2UgdG8gY2FsbCBhbmQgc2V0IHRoZSB6bW9kZWxcclxuXHJcblxyXG4gIC8vIGNhbm5vdCB1c2UuIHp1ZGYgYXQgcHJvamVjdCBsZXZlbCBub3QgbG9hZGVkLlxyXG4gIC8vcHVibGljIHJlbmRlckZpZWxkRWxlbWVudEJ5RmllbGRFbGVtZW50VXJsKGdyb3VwOiBaR3JvdXAsIGZpZWxkRWxlbWVudFVybDogc3RyaW5nKSB7XHJcbiAgLy8gIHRoaXMud2ViQXBpU2VydmljZS5odHRwR2V0JChmaWVsZEVsZW1lbnRVcmwsIHt9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gIC8vICAgIGlmIChyZXNwb25zZSkge1xyXG4gIC8vICAgICAgdGhpcy5yZW5kZXJGaWVsZEVsZW1lbnRCeUpzb25TdHJpbmcoZ3JvdXAsIHJlc3BvbnNlLkNvZGUpO1xyXG4gIC8vICAgIH1cclxuICAvLyAgfSk7XHJcbiAgLy99XHJcblxyXG4gIC8vcHVibGljIGFwcGVuZEZpZWxkRWxlbWVudChncm91cDogWkdyb3VwLCBmaWVsZEVsZW1lbnQ6IGFueSkge1xyXG4gIC8vICBjb25zdCBkYXRhTmFtZSA9IHRoaXMuZGF0YS5OYW1lO1xyXG5cclxuICAvLyAgaWYgKCFncm91cFsnX3p1ZGZfJyArIGRhdGFOYW1lXSkgeyBcclxuICAvLyAgICBncm91cFsnX3p1ZGZfJyArIGRhdGFOYW1lXSA9IHt9O1xyXG4gIC8vICB9XHJcblxyXG4gIC8vICBjb25zdCB6dWRmQ29tcG9uZW50U2NvcGUgPSBncm91cFsnX3p1ZGZfJyArIGRhdGFOYW1lXTtcclxuICAvLyAgaWYgKCF6dWRmQ29tcG9uZW50U2NvcGUuek1vZGVsKSB7XHJcbiAgLy8gICAgenVkZkNvbXBvbmVudFNjb3BlWyd6TW9kZWwnXSA9IHt9O1xyXG4gIC8vICB9XHJcblxyXG4gIC8vICAvLyBTZXQgdGhlIHByb3BlcnR5XHJcbiAgLy8gIGNvbnN0IGNvbXBvbmVudE5hbWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkRWxlbWVudC5WYWx1ZSk7XHJcblxyXG4gIC8vICBjb25zdCBpc0Zvcm1Db250cm9sID0gWkNvbXBvbmVudEhlbHBlci5pc0Zvcm1Db250cm9sKGZpZWxkRWxlbWVudCk7XHJcbiAgLy8gIGNvbnN0IGlzVmlzaWJsZSA9IFpDb21wb25lbnRIZWxwZXIuaXNWaXNpYmxlRm9ybUNvbnRyb2wodGhpcywgZmllbGRFbGVtZW50KTsgLy9cclxuICAvLyAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuaXNSZXF1aXJlZEZvcm1Db250cm9sKHRoaXMsIGZpZWxkRWxlbWVudCk7IC8vXHJcblxyXG4gIC8vICAvLyBDcmVhdGUgRm9ybUNvbnRyb2xcclxuICAvLyAgY29uc3QgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcclxuICAvLyAgaWYgKGlzRm9ybUNvbnRyb2wgPT09IHRydWUpIHtcclxuICAvLyAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGZpZWxkRWxlbWVudC5WYWx1ZSwgaXNWaXNpYmxlLCBpc1JlcXVpcmVkKTsgLy9cclxuICAvLyAgICBmb3JtQ29udHJvbHNbY29tcG9uZW50TmFtZV0gPSBuZXcgRm9ybUNvbnRyb2woXHJcbiAgLy8gICAgICB6dWRmQ29tcG9uZW50U2NvcGUuek1vZGVsW2ZpZWxkRWxlbWVudC5WYWx1ZV0sXHJcbiAgLy8gICAgICB2YWxpZGF0b3JzXHJcbiAgLy8gICAgKTtcclxuICAvLyAgICAvL2lmIChaQ29tcG9uZW50SGVscGVyLmhhc0NDRmllbGQoZmllbGQuVHlwZSkpIHtcclxuICAvLyAgICAvLyAgY29uc3QgY2NWYWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRDQ1ZhbGlkYXRvcnMoZmllbGQsIGlzVmlzaWJsZSwgaXNSZXF1aXJlZCk7XHJcbiAgLy8gICAgLy8gIGZvcm1Db250cm9sc1tmaWVsZC5DQ1ZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAvLyAgICAvLyAgICB0aGlzLmdyb3VwWydfenVkZl8nICsgdGhpcy5kYXRhLk5hbWVdLnpNb2RlbFtmaWVsZC5DQ1ZhbHVlXSxcclxuICAvLyAgICAvLyAgICBjY1ZhbGlkYXRvcnNcclxuICAvLyAgICAvLyAgKTtcclxuICAvLyAgICAvL31cclxuXHJcbiAgLy8gICAgaWYgKCF6dWRmQ29tcG9uZW50U2NvcGUuZmllbGRzKSB7XHJcbiAgLy8gICAgICB6dWRmQ29tcG9uZW50U2NvcGUuZmllbGRzID0gW107XHJcbiAgLy8gICAgfVxyXG5cclxuICAvLyAgICB6dWRmQ29tcG9uZW50U2NvcGUuZmllbGRzLnB1c2goZmllbGRFbGVtZW50KTtcclxuICAvLyAgfVxyXG4gIC8vICBlbHNlIHtcclxuICAvLyAgICBjb25zb2xlLndhcm4oJ2Zvcm1Db250cm9sIGNhbm5vdCBiZSBjcmVhdGVkLicgKyBjb21wb25lbnROYW1lKTtcclxuICAvLyAgfVxyXG5cclxuICAvLyAgdGhpcy5hcHBlbmRGb3JtQ29udHJvbChjb21wb25lbnROYW1lLCBmb3JtQ29udHJvbHNbY29tcG9uZW50TmFtZV0sIGZpZWxkRWxlbWVudCk7XHJcbiAgLy99XHJcblxyXG4gIC8vcHVibGljIHJlbmRlckZpZWxkRWxlbWVudChmaWVsZEVsZW1lbnRMaXN0OiBhbnkpIHtcclxuICAvLyAgY29uc3QgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcclxuICAvLyAgdGhpcy5nZXRGb3JtQ29udHJvbHMoZmllbGRFbGVtZW50TGlzdCwgZm9ybUNvbnRyb2xzKTtcclxuXHJcbiAgLy8gIHRoaXMuYXBwZW5kRm9ybUNvbnRyb2woY29tcG9uZW50TmFtZSwgZm9ybUNvbnRyb2xzW2NvbXBvbmVudE5hbWVdLCBmb3JtUHJldmlld1RyZWVNb2RlbCk7XHJcbiAgLy99XHJcblxyXG4gIC8vcHVibGljIHJlbmRlckZpZWxkRWxlbWVudChmaWVsZEVsZW1lbnRMaXN0OiBhbnkpIHtcclxuICAvLyAgY29uc3QgZ3JvdXBTY29wZU5hbWUgPSAnX3p1ZGZfJyArIHRoaXMuZGF0YS5OYW1lO1xyXG5cclxuICAvLyAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZEVsZW1lbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgLy8gICAgY29uc3QgZm9ybVByZXZpZXdUcmVlTW9kZWwgPSBmaWVsZEVsZW1lbnRMaXN0W2ldO1xyXG4gIC8vICAgIC8vIGlmIHZhbHVlIGlzIGFycmF5P1xyXG4gIC8vICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1QcmV2aWV3VHJlZU1vZGVsLlZhbHVlKSkge1xyXG4gIC8vICAgICAgdGhpcy5yZW5kZXJGaWVsZEVsZW1lbnQoZm9ybVByZXZpZXdUcmVlTW9kZWwuVmFsdWUpO1xyXG4gIC8vICAgIH1cclxuICAvLyAgICBlbHNlIHtcclxuICAvLyAgICAgIC8vIFNldCB0aGUgcHJvcGVydHlcclxuICAvLyAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBmb3JtUHJldmlld1RyZWVNb2RlbC5WYWx1ZTsvLyAgJ3p1ZGZfJyArIGNvbXBvbmVudEF0dHJpYnV0ZS5WYWx1ZTtcclxuICAvLyAgICAgIGNvbnN0IGlzRm9ybUNvbnRyb2wgPSBaQ29tcG9uZW50SGVscGVyLmlzRm9ybUNvbnRyb2woZm9ybVByZXZpZXdUcmVlTW9kZWwpO1xyXG5cclxuICAvLyAgICAgIC8vIENyZWF0ZSBGb3JtQ29udHJvbFxyXG4gIC8vICAgICAgY29uc3QgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcclxuICAvLyAgICAgIGlmIChpc0Zvcm1Db250cm9sID09IHRydWUpIHtcclxuICAvLyAgICAgICAgZm9ybUNvbnRyb2xzW2NvbXBvbmVudE5hbWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gIC8vICAgICAgICAgIHRoaXMuZ3JvdXBbZ3JvdXBTY29wZU5hbWVdLnpNb2RlbFtmb3JtUHJldmlld1RyZWVNb2RlbC5WYWx1ZV1cclxuICAvLyAgICAgICAgKTtcclxuICAvLyAgICAgIH1cclxuXHJcbiAgLy8gICAgICB0aGlzLmFwcGVuZEZvcm1Db250cm9sKGNvbXBvbmVudE5hbWUsIGZvcm1Db250cm9sc1tjb21wb25lbnROYW1lXSwgZm9ybVByZXZpZXdUcmVlTW9kZWwpO1xyXG4gIC8vICAgIH1cclxuICAvLyAgfVxyXG4gIC8vfVxyXG5cclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwicGFkZGluZzogMTVweFwiICpuZ0lmPVwiZGF0YS5UaXRsZSAmJiAoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIiBjbGFzcz1cImlvbi1yb3dcIj5cclxuICA8a2VuZG8tY2FyZCAqbmdJZj1cImRhdGEuVGl0bGVcIiB3aWR0aD1cIjEwMCVcIj5cclxuICAgIDxrZW5kby1jYXJkLWhlYWRlcj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiY2FyZC1oZWFkZXItdGl0bGVcIj57e2RhdGEuVGl0bGV9fTwvaW9uLWxhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwva2VuZG8tY2FyZC1oZWFkZXI+XHJcbiAgICA8a2VuZG8tY2FyZC1ib2R5PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW9uLXJvd1wiPlxyXG4gICAgICAgIDxhcHAtemZvcm1jb250cm9sIFtuZ0NsYXNzXT1cImdyb3VwW2ZpZWxkLmlzVmlzaWJsZUZpZWxkXSA/IGZpZWxkLkRpdkNsYXNzIDogKChmaWVsZC5WaXNpYmxlID09PSB0cnVlKSA/ICBmaWVsZC5EaXZDbGFzcyA6ICdmbGV4LWhpZGUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvcm1GaWVsZHMgfCBkaXZ6bGF5b3V0OiBkYXRhLnpsYXlvdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInp1ZGZ7e2RhdGEuTmFtZX19LXt7ZmllbGQuVHlwZX19LXt7ZmllbGQuTmFtZX19XCI+XHJcbiAgICAgICAgPC9hcHAtemZvcm1jb250cm9sPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwva2VuZG8tY2FyZC1ib2R5PlxyXG4gIDwva2VuZG8tY2FyZD5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIWRhdGEuVGl0bGUgJiYgKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCIgY2xhc3M9XCJpb24tcm93XCI+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICA8aW9uLWdyaWQ+XHJcbiAgICAgIDxpb24tcm93IGlkPVwiZHluYW1pYy1mb3JtLWhvc3RcIiBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1zdGFydFwiPlxyXG4gICAgICAgIDxhcHAtemZvcm1jb250cm9sIFtuZ0NsYXNzXT1cImdyb3VwW2ZpZWxkLmlzVmlzaWJsZUZpZWxkXSA/IGZpZWxkLkRpdkNsYXNzIDogKChmaWVsZC5WaXNpYmxlID09PSB0cnVlKSA/ICBmaWVsZC5EaXZDbGFzcyA6ICdmbGV4LWhpZGUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvcm1GaWVsZHMgfCBkaXZ6bGF5b3V0OiBkYXRhLnpsYXlvdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInp1ZGZ7e2RhdGEuTmFtZX19LXt7ZmllbGQuVHlwZX19LXt7ZmllbGQuTmFtZX19XCI+XHJcbiAgICAgICAgPC9hcHAtemZvcm1jb250cm9sPlxyXG4gICAgICA8L2lvbi1yb3c+XHJcbiAgICA8L2lvbi1ncmlkPlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -11286,12 +11286,19 @@ class ZudfComponent {
|
|
|
11286
11286
|
this.group[this.componentScopeName] = new ZGroup;
|
|
11287
11287
|
}
|
|
11288
11288
|
// declare zModel to zudf group
|
|
11289
|
-
const
|
|
11290
|
-
|
|
11289
|
+
const zudfScopeGroup = this.group[this.componentScopeName];
|
|
11290
|
+
zudfScopeGroup.zModel = {};
|
|
11291
11291
|
// render field element
|
|
11292
11292
|
this.renderFieldElement(this.data.Value);
|
|
11293
11293
|
// set this new create form to zGroup scope
|
|
11294
|
-
|
|
11294
|
+
// bind form only when Value is not null
|
|
11295
|
+
if (this.data.Value) {
|
|
11296
|
+
zudfScopeGroup.form = this.form;
|
|
11297
|
+
}
|
|
11298
|
+
else {
|
|
11299
|
+
const formControl = {};
|
|
11300
|
+
zudfScopeGroup.form = new FormGroup(formControl);
|
|
11301
|
+
}
|
|
11295
11302
|
}), tap$1(() => {
|
|
11296
11303
|
// set to formField for display
|
|
11297
11304
|
this.formFields = Object.assign([], this.data.Value);
|
|
@@ -11328,6 +11335,13 @@ class ZudfComponent {
|
|
|
11328
11335
|
updateDisplayModel(value, flatIndex) {
|
|
11329
11336
|
ZComponentHelper.updateArrayObjectByFlatIndex(this.displayElementModel, flatIndex, value);
|
|
11330
11337
|
}
|
|
11338
|
+
appendToDisplayModel(value, flatIndex) {
|
|
11339
|
+
if (flatIndex.length >= 3) {
|
|
11340
|
+
flatIndex.substring(0, flatIndex.length - 2);
|
|
11341
|
+
}
|
|
11342
|
+
const selectedRecord = ZComponentHelper.getFromArrayObjectByFlatIndex(this.displayElementModel, flatIndex);
|
|
11343
|
+
selectedRecord.Value.push(value);
|
|
11344
|
+
}
|
|
11331
11345
|
getDisplayModel() {
|
|
11332
11346
|
return JSON.parse(JSON.stringify(this.displayElementModel));
|
|
11333
11347
|
}
|
|
@@ -11343,6 +11357,7 @@ class ZudfComponent {
|
|
|
11343
11357
|
//#endregion
|
|
11344
11358
|
//#region function for form control.
|
|
11345
11359
|
appendFormControl(zudfControlName, zudfControl, fieldData) {
|
|
11360
|
+
// currently function not used. need to test and modify if want to use.
|
|
11346
11361
|
fieldData.Value = this.generateFormControlName(fieldData.Value);
|
|
11347
11362
|
this.form.addControl(fieldData.Value, zudfControl);
|
|
11348
11363
|
if (!this.formFields) {
|
|
@@ -11358,9 +11373,10 @@ class ZudfComponent {
|
|
|
11358
11373
|
// render form control to new formgroup
|
|
11359
11374
|
this.form = new FormGroup(formControls);
|
|
11360
11375
|
this.formFields = fieldElements;
|
|
11376
|
+
this.group[this.componentScopeName].form = this.form;
|
|
11361
11377
|
}
|
|
11362
11378
|
}
|
|
11363
|
-
generateFormControls(fieldArray, formControls) {
|
|
11379
|
+
generateFormControls(fieldArray, formControls, containerName) {
|
|
11364
11380
|
fieldArray.forEach(field => {
|
|
11365
11381
|
this.fieldService.patchFieldProperty(field);
|
|
11366
11382
|
if (typeof field.Value === "string" && field.Value.indexOf(".") !== -1) {
|
|
@@ -11370,14 +11386,19 @@ class ZudfComponent {
|
|
|
11370
11386
|
}
|
|
11371
11387
|
else {
|
|
11372
11388
|
if (Array.isArray(field.Value)) {
|
|
11373
|
-
this.generateFormControls(field.Value, formControls);
|
|
11389
|
+
this.generateFormControls(field.Value, formControls, field.Name);
|
|
11374
11390
|
}
|
|
11375
11391
|
else {
|
|
11392
|
+
// before generate FormControl, we need to add 2 attribute to the field when render.
|
|
11393
|
+
// this for later on, we can know this field belong to which zudf and under which container.
|
|
11394
|
+
if (containerName) {
|
|
11395
|
+
field['containerName'] = containerName;
|
|
11396
|
+
}
|
|
11376
11397
|
const isFormControl = ZComponentHelper.isFormControl(field);
|
|
11377
11398
|
const isVisible = ZComponentHelper.isVisibleFormControl(this, field);
|
|
11378
11399
|
const isRequired = ZComponentHelper.isRequiredFormControl(this, field);
|
|
11379
11400
|
if (isFormControl === true) {
|
|
11380
|
-
|
|
11401
|
+
field.Value = this.generateFormControlName(field.Value);
|
|
11381
11402
|
const validators = ZComponentHelper.getValidators(field, isVisible, isRequired);
|
|
11382
11403
|
formControls[field.Value] = new FormControl(this.group[this.componentScopeName].zModel[field.Value], validators);
|
|
11383
11404
|
if (ZComponentHelper.hasCCField(field.Type)) {
|
|
@@ -11402,12 +11423,12 @@ class ZudfComponent {
|
|
|
11402
11423
|
//#endregion
|
|
11403
11424
|
//#region function for _zudf scope zmodel.
|
|
11404
11425
|
setFormFieldzModel(group, modelData) {
|
|
11405
|
-
const
|
|
11406
|
-
const
|
|
11426
|
+
const grp = group ? group : this.group;
|
|
11427
|
+
const zModel = grp[this.componentScopeName].zModel;
|
|
11407
11428
|
const patchedModelData = {};
|
|
11408
11429
|
for (var prop in modelData) {
|
|
11409
11430
|
if (Object.prototype.hasOwnProperty.call(modelData, prop)) {
|
|
11410
|
-
patchedModelData[
|
|
11431
|
+
patchedModelData[this.generateFormControlName(prop)] = modelData[prop];
|
|
11411
11432
|
}
|
|
11412
11433
|
}
|
|
11413
11434
|
Object.assign(zModel, patchedModelData);
|