mmhglobal-dynamicform 2.0.0-beta.67 → 2.0.0-beta.68
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 +28 -21
- package/fesm2015/mmhglobal-dynamicform.mjs +27 -20
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +27 -20
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -211,6 +211,11 @@ export class ZudfComponent {
|
|
|
211
211
|
if (this.isDropdownType(field.Type) && field.ZDataOptionName && field.DropdownOptions) {
|
|
212
212
|
this.group.zData[field.ZDataOptionName] = Object.assign([], eval('this.' + field.DropdownOptions));
|
|
213
213
|
}
|
|
214
|
+
// auto append current user to the zmodel base on field element attribute "zudfSetDefaultUser"
|
|
215
|
+
if (field.zudfSetDefaultUser) {
|
|
216
|
+
this.setModelValue(field.Name, this.authService.e1Token.userName, true);
|
|
217
|
+
}
|
|
218
|
+
// validator for the component
|
|
214
219
|
const validators = ZComponentHelper.getValidators(field, isVisible, isRequired);
|
|
215
220
|
formControls[field.Value] = new FormControl(
|
|
216
221
|
// TODO: need handle if field.value + container.
|
|
@@ -320,26 +325,28 @@ export class ZudfComponent {
|
|
|
320
325
|
}
|
|
321
326
|
// important: loop zmodel, replace prefix base by default.(allow to skip remove prefix).
|
|
322
327
|
const patchedModelData = skipRemovePrefix ? zModel : this.removeZModelPropertyPrefix(zModel);
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
328
|
+
if (this.multiValueGroupGridValue) {
|
|
329
|
+
// get all mvg grid value and put in respective object in the array.
|
|
330
|
+
this.multiValueGroupGridValue.forEach(mvgGridValue => {
|
|
331
|
+
// get grid container name. confirm will be at least 4 length.
|
|
332
|
+
// 3rd segment will be container name.
|
|
333
|
+
const mvgGridValueSegment = mvgGridValue.split('_');
|
|
334
|
+
mvgGridValueSegment.pop();
|
|
335
|
+
const containerName = skipRemovePrefix ? mvgGridValueSegment.join('_') : mvgGridValueSegment[2];
|
|
336
|
+
// get grid data
|
|
337
|
+
const mvgGrid = this.group[mvgGridValue];
|
|
338
|
+
const gridData = mvgGrid.getGridData();
|
|
339
|
+
if (gridData.length > 0) {
|
|
340
|
+
// need to remove property prefix.
|
|
341
|
+
const newGridData = [];
|
|
342
|
+
gridData.forEach(data => {
|
|
343
|
+
const patchedModelData = skipRemovePrefix ? data : this.removeZModelPropertyPrefix(data, true);
|
|
344
|
+
newGridData.push(patchedModelData);
|
|
345
|
+
});
|
|
346
|
+
patchedModelData[containerName] = newGridData;
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
}
|
|
343
350
|
return patchedModelData;
|
|
344
351
|
}
|
|
345
352
|
removeZModelPropertyPrefix(zModel, getOnlyFieldName) {
|
|
@@ -560,4 +567,4 @@ var ComponentType;
|
|
|
560
567
|
ComponentType["button"] = "zbuttons";
|
|
561
568
|
ComponentType["grid"] = "zgrid";
|
|
562
569
|
})(ComponentType || (ComponentType = {}));
|
|
563
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVkZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96dWRmL3p1ZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVkZi96dWRmLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQXNDLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQWtCLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBR0wsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUMvQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7OztBQVV6QixNQUFNLE9BQU8sYUFBYTtJQWF4QixZQUNVLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxZQUEwQixFQUMxQixhQUE0QixFQUM1Qiw0QkFBMEQsRUFDMUQsR0FBc0I7UUFQdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQ0FBNEIsR0FBNUIsNEJBQTRCLENB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O1NBQ2Q7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFFdkQsSUFBSSxXQUFXLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUN6QjtRQUVELE9BQU87SUFDVCxDQUFDOzsyR0E3bkJVLGFBQWE7K0ZBQWIsYUFBYSx3R0N6QjFCLDZ2REFrQ0E7NEZEVGEsYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxVQUFVOzJUQUtYLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLOztBQTZuQlIsSUFBSyxhQW9CSjtBQXBCRCxXQUFLLGFBQWE7SUFDaEIsOEJBQWEsQ0FBQTtJQUNiLHNDQUFxQixDQUFBO0lBQ3JCLHNDQUFxQixDQUFBO0lBQ3JCLGlDQUFnQixDQUFBO0lBQ2hCLDhCQUFhLENBQUE7SUFDYix3Q0FBdUIsQ0FBQTtJQUN2Qiw0Q0FBMkIsQ0FBQTtJQUMzQixrQ0FBaUIsQ0FBQTtJQUNqQixzQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBZSxDQUFBO0lBQ2YsOEJBQWEsQ0FBQTtJQUNiLGdDQUFlLENBQUE7SUFDZixvQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBcUIsQ0FBQTtJQUNyQix3REFBdUMsQ0FBQTtJQUN2QyxvREFBbUMsQ0FBQTtJQUNuQyxtQ0FBa0IsQ0FBQTtJQUNsQixvQ0FBbUIsQ0FBQTtJQUNuQiwrQkFBYyxDQUFBO0FBQ2hCLENBQUMsRUFwQkksYUFBYSxLQUFiLGFBQWEsUUFvQmpCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQXN5bmNTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkZpZWxkLFxyXG4gIEFsZXJ0U2VydmljZSwgQXV0aFNlcnZpY2UsIEZpZWxkU2VydmljZSwgUmVzb3VyY2VBcGlTZXJ2aWNlLCBUb2FzdFNlcnZpY2UsIFdlYkFwaVNlcnZpY2UsXHJcbiAgWkdyb3VwLCBaQ29tcG9uZW50UHJvcGVydGllcywgWkNvbXBvbmVudEhlbHBlclxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvY29tcG9uZW50LWVycm9yLWhhbmRsZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBaR3JpZCB9IGZyb20gXCIuLi96Z3JpZC96Z3JpZC5jb21wb25lbnRcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC16dWRmJyxcclxuICB0ZW1wbGF0ZVVybDogJy4venVkZi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4venVkZi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgWnVkZkNvbXBvbmVudCBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgZGF0YTogWkZpZWxkO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBaR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG4gIGZvcm1GaWVsZHM6IGFueVtdOyAvLyBwb3B1bGF0ZSB1c2luZyBmaWVsZCBlbGVtZW50LlxyXG5cclxuICBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcbiAgaW5pdGlhbERhdGFWYWx1ZTogYW55O1xyXG4gIGNvbXBvbmVudFByZWZpeDogc3RyaW5nO1xyXG4gIGNvbXBvbmVudFNjb3BlTmFtZTogc3RyaW5nO1xyXG4gIGRpc3BsYXlFbGVtZW50TW9kZWw6IGFueTtcclxuICBtdWx0aVZhbHVlR3JvdXBHcmlkVmFsdWU6IHN0cmluZ1tdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZTogQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRDb21wb25lbnRQcm9wZXJ0aWVzKHRoaXMpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZWdpc3RlckNvbXBvbmVudCh0aGlzKTtcclxuXHJcbiAgICAvLyBrZWVwIGRhdGEgVmFsdWVcclxuICAgIHRoaXMuaW5pdGlhbERhdGFWYWx1ZSA9IHRoaXMuZGF0YS5WYWx1ZTtcclxuXHJcbiAgICAvLyBkZWNsYXJhdGlvblxyXG4gICAgdGhpcy5jb21wb25lbnRTY29wZU5hbWUgPSAnX3p1ZGZfJyArIHRoaXMuZGF0YS5OYW1lO1xyXG4gICAgdGhpcy5jb21wb25lbnRQcmVmaXggPSAnenVkZl8nICsgdGhpcy5kYXRhLk5hbWU7XHJcblxyXG4gICAgdGhpcy5ncm91cFt0aGlzLmRhdGEuTmFtZSArICdNb2RlbCddID0gW107XHJcblxyXG4gICAgdGhpcy5sb2FkRm9ybSgpO1xyXG5cclxuICAgIC8vaWYgKFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkodGhpcy5kYXRhLlZhbHVlKSB8fCB0aGlzLmRhdGEuVmFsdWUubGVuZ3RoID4gMikge1xyXG4gICAgLy8gIHRoaXMubG9hZEVtcHR5Rm9ybSgpO1xyXG4gICAgLy99XHJcbiAgICAvL2Vsc2Uge1xyXG4gICAgLy8gIHRoaXMubG9hZFp1ZGZGb3JtKCk7XHJcbiAgICAvL31cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZEZvcm0oKSB7XHJcbiAgICBvZih0cnVlKS5waXBlKFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS5TdWJUeXBlID0gJ3p1ZGYnO1xyXG5cclxuICAgICAgICAvLyBjaGFuZ2UgdGhlIHZhbHVlIHRvIHRoZSByZXN1bHQgZmllbGQgZm9ybVxyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kYXRhLk5hbWUgKyAnIGRlZmF1bHQgdmFsdWU6ICcgKyB0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgICAgIC8vdGhpcy5kYXRhLlZhbHVlID0gW107XHJcblxyXG4gICAgICAgIC8vIGNoYW5nZSB6dWRmIHRvIHpkaXZcclxuICAgICAgICAvL3RoaXMuZGF0YS5UeXBlID0gJ3pkaXYnO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAvLyBjcmVhdGUgbmV3IGdyb3VwIGZvciB6dWRmXHJcbiAgICAgICAgaWYgKCF0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0gPSBuZXcgWkdyb3VwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZGVjbGFyZSB6TW9kZWwgdG8genVkZiBncm91cFxyXG4gICAgICAgIGNvbnN0IHp1ZGZTY29wZUdyb3VwID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV07XHJcbiAgICAgICAgenVkZlNjb3BlR3JvdXAuek1vZGVsID0ge307XHJcblxyXG4gICAgICAgIC8vIHJlbmRlciBmaWVsZCBlbGVtZW50XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGaWVsZEVsZW1lbnQodGhpcy5kYXRhLlZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IHRoaXMgbmV3IGNyZWF0ZSBmb3JtIHRvIHpHcm91cCBzY29wZVxyXG4gICAgICAgIC8vIGJpbmQgZm9ybSBvbmx5IHdoZW4gVmFsdWUgaXMgbm90IG51bGxcclxuICAgICAgICBpZiAodGhpcy5kYXRhLlZhbHVlKSB7XHJcbiAgICAgICAgICB6dWRmU2NvcGVHcm91cC5mb3JtID0gdGhpcy5mb3JtO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGZvcm1Db250cm9sOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcclxuICAgICAgICAgIHp1ZGZTY29wZUdyb3VwLmZvcm0gPSBuZXcgRm9ybUdyb3VwKGZvcm1Db250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIHNldCB0byBmb3JtRmllbGQgZm9yIGRpc3BsYXlcclxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZE5hbWUgPSAnYWZ0ZXInICsgKHRoaXMuZGF0YS5OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5kYXRhLk5hbWUuc2xpY2UoMSkpICsgJ0xvYWRlZCc7XHJcbiAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBbZmllbGROYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cFtmaWVsZE5hbWVdKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBzZXQgRmllbGQgZGl2IGNsYXNzXHJcbiAgICAgIC8vIFJlcGxhY2VkIHdpdGg6IHRoaXMuZmllbGRTZXJ2aWNlLnBhdGNoRmllbGRQcm9wZXJ0eShmaWVsZCk7XHJcbiAgICAgIC8vIFpDb21wb25lbnRIZWxwZXIuc2V0RmllbGRzRGl2Q2xhc3ModGhpcy5ncm91cC5fcHJvamVjdE5hbWUsIHRoaXMuZ3JvdXAuZmllbGROYW1lLCB0aGlzLmRhdGEsIHRoaXMuYXV0aFNlcnZpY2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rm9ybUNvbnRyb2xWYWxpZGF0aW9uKGZvcm1Db250cm9sTmFtZTogc3RyaW5nLCB2YWxpZGF0b3I6IGFueSkge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVuZGVyRmllbGRFbGVtZW50QnlKc29uU3RyaW5nKGdyb3VwOiBaR3JvdXAsIGpzb25TdHJpbmc6IHN0cmluZykge1xyXG4gICAgY29uc3QgZmllbGRFbGVtZW50TWFzdGVyQ29kZUpzb25BcnJheSA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XHJcbiAgICB0aGlzLnJlbmRlckZpZWxkRWxlbWVudChmaWVsZEVsZW1lbnRNYXN0ZXJDb2RlSnNvbkFycmF5KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBEaXNwbGF5IG1vZGVsXHJcbiAgcHVibGljIHNldERpc3BsYXlNb2RlbCh2YWx1ZTogYW55KSB7XHJcbiAgICAvLyByZXBsYWNlIHRoZSB3aG9sZSBkaXNwbGF5IG1vZGVsXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5jbGVhckZvcm1Db250cm9sKCk7XHJcblxyXG4gICAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XHJcblxyXG4gICAgICB0aGlzLnJlbmRlckZpZWxkRWxlbWVudCh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCB2YWx1ZSB1c2VkIGZvciByZW5kZXIgenVkZiAnICsgdGhpcy5kYXRhLk5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZURpc3BsYXlNb2RlbCh2YWx1ZTogYW55LCBmbGF0SW5kZXg6IHN0cmluZykgeyAgXHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnVwZGF0ZUFycmF5T2JqZWN0QnlGbGF0SW5kZXgodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsLCBmbGF0SW5kZXgsIHZhbHVlKTsgXHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZCgpO1xyXG4gICAgLy90aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXBwZW5kVG9EaXNwbGF5TW9kZWwodmFsdWU6IGFueSwgZmxhdEluZGV4OiBzdHJpbmcpIHtcclxuICAgIC8vIGFwcGVuZCB0byBkaXNwbGF5IG1vZGVsIG1lYW4gaXQgd2lsbCBiYXNlIG9uIGZsYXQgaW5kZXggdG8gaW5zZXJ0IHRoZSBmb3JtIGNvbnRyb2wuXHJcbiAgICBpZiAoZmxhdEluZGV4Lmxlbmd0aCA+PSAzKSB7XHJcbiAgICAgIGZsYXRJbmRleC5zdWJzdHJpbmcoMCwgZmxhdEluZGV4Lmxlbmd0aCAtIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkID0gWkNvbXBvbmVudEhlbHBlci5nZXRGcm9tQXJyYXlPYmplY3RCeUZsYXRJbmRleCh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwsIGZsYXRJbmRleCk7XHJcbiAgICBzZWxlY3RlZFJlY29yZC5WYWx1ZS5wdXNoKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREaXNwbGF5TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVBbGxEaXNwbGF5TW9kZWwoKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBbXTtcclxuICAgIHRoaXMuY2xlYXJGb3JtQ29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUVsZW1lbnRGcm9tRGlzcGxheU1vZGVsKGZsYXRJbmRleDogc3RyaW5nKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlbW92ZUFycmF5T2JqZWN0QnlGbGF0SW5kZXgodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsLCBmbGF0SW5kZXgpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtRmllbGQoKTtcclxuXHJcbiAgICAvLyBUT0RPOiByZW1vdmUgZnJvbSB6bW9kZWxcclxuICAgIC8vZGVsZXRlIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFsnJ107XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGZ1bmN0aW9uIGZvciBmb3JtIGNvbnRyb2wuXHJcbiAgcHVibGljIGFwcGVuZEZvcm1Db250cm9sKGZpZWxkRGF0YTogWkZpZWxkKSB7XHJcbiAgICAvLyBhcHBlbmQgZm9ybSBjb250cm9sIG1lYW4gaXQgd2lsbCBqdXN0IGluc2VydCB0aGUgZm9ybSBjb250cm9sIGF0IHRoZSBsYXN0ICBcclxuICAgIGZpZWxkRGF0YS5OYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZERhdGEuTmFtZSwgZmllbGREYXRhWydjb250YWluZXJOYW1lJ10pO1xyXG4gICAgY29uc3QgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0gPSB7fTtcclxuXHJcbiAgICBmb3JtQ29udHJvbHNbZmllbGREYXRhLk5hbWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICB0aGlzLmdyb3VwWydfenVkZl9mb3JtUHJldmlldyddLnpNb2RlbFtmaWVsZERhdGEuTmFtZV1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woZmllbGREYXRhLk5hbWUsIGZvcm1Db250cm9sc1tmaWVsZERhdGEuTmFtZV0pO1xyXG5cclxuICAgIGlmICghdGhpcy5mb3JtRmllbGRzKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdmb3JtRmllbGQgJyArIHRoaXMuZGF0YS5OYW1lICsgJyBpcyB1bmRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPz8gW107XHJcbiAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwucHVzaChmaWVsZERhdGEpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtRmllbGQoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJGaWVsZEVsZW1lbnQoZmllbGRFbGVtZW50czogYW55KSB7XHJcbiAgICBpZiAoZmllbGRFbGVtZW50cykge1xyXG4gICAgICBjb25zdCBmb3JtQ29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSA9IHt9O1xyXG4gICAgICBmaWVsZEVsZW1lbnRzID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZEVsZW1lbnRzLCBmb3JtQ29udHJvbHMpO1xyXG5cclxuICAgICAgLy8gcmVuZGVyIGZvcm0gY29udHJvbCB0byBuZXcgZm9ybWdyb3VwXHJcbiAgICAgIHRoaXMuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUNvbnRyb2xzKTtcclxuICAgICAgdGhpcy5mb3JtRmllbGRzID0gZmllbGRFbGVtZW50cztcclxuICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uZm9ybSA9IHRoaXMuZm9ybTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVGb3JtQ29udHJvbHMoZmllbGRBcnJheTogYW55LCBmb3JtQ29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSwgY29udGFpbmVyTmFtZT86IHN0cmluZykge1xyXG4gICAgZmllbGRBcnJheS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgaWYgKHR5cGVvZiBmaWVsZC5WYWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiBmaWVsZC5WYWx1ZS5pbmRleE9mKFwiLlwiKSAhPT0gLTEpIHtcclxuICAgICAgICBpZiAoWyd6Z3JpZCcsICd6dHJlZScsICd6aW1nJywgJ3RleHRhcmVhanNvbiddLmluZGV4T2YoZmllbGQuVHlwZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJGb3JtQ29udHJvbCAtIGludmFsaWQgZmllbGQgdmFsdWVcIiwgZmllbGQuVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICAgIC8vIGluc2VydCBtdWx0aXZhbHVlZ3JvdXAgdG8gdGhlIGNhcmQgdmFsdWUgaWYgdHJ1ZVxyXG4gICAgICAgICAgaWYgKGZpZWxkLk11bHRpVmFsdWVkR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRNdWx0aVZhbHVlR3JvdXAoZmllbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZC5WYWx1ZSwgZm9ybUNvbnRyb2xzLCBmaWVsZC5OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAvLyBiZWZvcmUgZ2VuZXJhdGUgRm9ybUNvbnRyb2wsIHdlIG5lZWQgdG8gYWRkIDIgYXR0cmlidXRlIHRvIHRoZSBmaWVsZCB3aGVuIHJlbmRlci5cclxuICAgICAgICAgIC8vIHRoaXMgZm9yIGxhdGVyIG9uLCB3ZSBjYW4gZWFzaWx5IGtub3cgdGhpcyBmaWVsZCBiZWxvbmcgdG8gd2hpY2ggenVkZiBhbmQgdW5kZXIgd2hpY2ggY29udGFpbmVyLiBcclxuICAgICAgICAgIGlmIChjb250YWluZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIGZpZWxkWydjb250YWluZXJOYW1lJ10gPSBjb250YWluZXJOYW1lOztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXVtjb250YWluZXJOYW1lXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBpc0Zvcm1Db250cm9sID0gWkNvbXBvbmVudEhlbHBlci5pc0Zvcm1Db250cm9sKGZpZWxkKTtcclxuICAgICAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IFpDb21wb25lbnRIZWxwZXIuaXNWaXNpYmxlRm9ybUNvbnRyb2wodGhpcywgZmllbGQpO1xyXG4gICAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuaXNSZXF1aXJlZEZvcm1Db250cm9sKHRoaXMsIGZpZWxkKTtcclxuXHJcbiAgICAgICAgICBpZiAoaXNGb3JtQ29udHJvbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBmaWVsZC5OYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZC5OYW1lLCBjb250YWluZXJOYW1lKTtcclxuICAgICAgICAgICAgZmllbGQuVmFsdWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkLlZhbHVlLCBjb250YWluZXJOYW1lKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXVtjb250YWluZXJOYW1lXS5pbmNsdWRlcyhmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdLnB1c2goZmllbGQuVmFsdWUpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBrZWVwIGEgbGlzdCBvZiBkcm9wZG93biBvcHRpb24gdmFyaWFibGUgbmFtZSBcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93blR5cGUoZmllbGQuVHlwZSkgJiYgZmllbGQuWkRhdGFPcHRpb25OYW1lICYmIGZpZWxkLkRyb3Bkb3duT3B0aW9ucykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAuekRhdGFbZmllbGQuWkRhdGFPcHRpb25OYW1lXSA9IE9iamVjdC5hc3NpZ24oW10sIGV2YWwoJ3RoaXMuJyArIGZpZWxkLkRyb3Bkb3duT3B0aW9ucykpOyBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0VmFsaWRhdG9ycyhmaWVsZCwgaXNWaXNpYmxlLCBpc1JlcXVpcmVkKTtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICAvLyBUT0RPOiBuZWVkIGhhbmRsZSBpZiBmaWVsZC52YWx1ZSArIGNvbnRhaW5lci5cclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWxbZmllbGQuVmFsdWVdLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFpDb21wb25lbnRIZWxwZXIuaGFzQ0NGaWVsZChmaWVsZC5UeXBlKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNjVmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q0NWYWxpZGF0b3JzKGZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQpO1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5DQ1ZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFtmaWVsZC5DQ1ZhbHVlXSxcclxuICAgICAgICAgICAgICAgIGNjVmFsaWRhdG9yc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gb25jaGFuZ2UgaGFuZGxpbmc/XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJGb3JtQ29udHJvbCgpIHtcclxuICAgIHRoaXMuZm9ybUZpZWxkcy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0ucmVtb3ZlQ29udHJvbChkYXRhLlZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0YS5WYWx1ZSA9IHRoaXMuaW5pdGlhbERhdGFWYWx1ZTtcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBbXTtcclxuICAgIHRoaXMuZm9ybUZpZWxkcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1Db250cm9sKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUZpZWxkcztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gZnVuY3Rpb24gZm9yIF96dWRmIHNjb3BlIHptb2RlbC4gXHJcbiAgcHVibGljIHNldEZvcm1GaWVsZHpNb2RlbChncm91cDogWkdyb3VwLCBtb2RlbERhdGE6IGFueSkge1xyXG4gICAgY29uc3QgZ3JwID0gZ3JvdXAgPyBncm91cCA6IHRoaXMuZ3JvdXA7XHJcbiAgICBjb25zdCBwYXRjaGVkTW9kZWxEYXRhID0gdGhpcy5hZGRaTW9kZWxQcm9wZXJ0eVByZWZpeChtb2RlbERhdGEpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZ3JwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWwsIHBhdGNoZWRNb2RlbERhdGEpO1xyXG5cclxuICAgIC8vIG5lZWQgaW5zZXJ0IGFycmF5IHZhbHVlIHRvIHRoZSBncmlkLlxyXG4gICAgZm9yICh2YXIgbW9kZWwgaW4gcGF0Y2hlZE1vZGVsRGF0YSkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRjaGVkTW9kZWxEYXRhW21vZGVsXSkpIHtcclxuICAgICAgICBjb25zdCBncmlkVmFsdWUgPSBtb2RlbCArICdfT3B0aW9ucyc7XHJcbiAgICAgICAgY29uc3QgZ3JpZERhdGFTb3VyY2UgPSBtb2RlbCArICdfRGF0YVNvdXJjZSc7XHJcblxyXG4gICAgICAgIGdycFtncmlkRGF0YVNvdXJjZV0gPSBwYXRjaGVkTW9kZWxEYXRhW21vZGVsXTtcclxuICAgICAgICBpZiAoZ3JwW2dyaWRWYWx1ZV0pIHtcclxuICAgICAgICAgIGdycFtncmlkVmFsdWVdLnNldERhdGEoZ3JwW2dyaWREYXRhU291cmNlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcGF0Y2ggZm9ybWdyb3VwIG1vZGVsXHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBmZy5wYXRjaFZhbHVlKGdycFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkWk1vZGVsUHJvcGVydHlQcmVmaXgobW9kZWxEYXRhOiBhbnksIGNvbnRhaW5lclByZWZpeD86IGFueSkge1xyXG4gICAgY29uc3QgcGF0Y2hlZE1vZGVsRGF0YSA9IHt9O1xyXG4gICAgLy8gbG9vcCBwcm9wZXJ0eVxyXG4gICAgZm9yICh2YXIgbW9kZWwgaW4gbW9kZWxEYXRhKSB7XHJcbiAgICAgIC8vIGZpcnN0IHRoaW5nIGNoZWNrIHRoZSB2YWx1ZSBpcyBpdCBhcnJheS5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxEYXRhW21vZGVsXSkpIHtcclxuICAgICAgICAvLyBhcnJheSBzcGVjaWFsIGhhbmRsaW5nXHJcbiAgICAgICAgbGV0IG1vZGVsUHJvcGVydHkgPSBtb2RlbDtcclxuICAgICAgICBpZiAoIW1vZGVsLmluY2x1ZGVzKHRoaXMuY29tcG9uZW50UHJlZml4KSkge1xyXG4gICAgICAgICAgbW9kZWxQcm9wZXJ0eSA9IFt0aGlzLmNvbXBvbmVudFByZWZpeCwgbW9kZWxdLmpvaW4oJ18nKTtcclxuICAgICAgICAgIHBhdGNoZWRNb2RlbERhdGFbbW9kZWxQcm9wZXJ0eV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgYXJyYXkgdmFsdWUsIG1lYW4gICB1bmRlciBhIGNvbnRhaW5lci4gd2lsbCBuZWVkIHRvIHBhc3MgbW9kZWwgYXQgY29udGFpbmVyIHByZWZpeCBmb3IgcHJvcGVydHkgbmFtZS4gXHJcbiAgICAgICAgLy8gbG9vcCBhcnJheSB2YWx1ZSwgcGF0Y2ggcHJvcGVydHkgbmFtZVxyXG4gICAgICAgIG1vZGVsRGF0YVttb2RlbF0uZm9yRWFjaChhcnJheU1vZGVsID0+IHtcclxuICAgICAgICAgIHBhdGNoZWRNb2RlbERhdGFbbW9kZWxQcm9wZXJ0eV0ucHVzaCh0aGlzLmFkZFpNb2RlbFByb3BlcnR5UHJlZml4KGFycmF5TW9kZWwsIG1vZGVsKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyBub25lIGFycmF5LCBqdXN0IHBhdGNoIHRoZSBwcm9wZXJ0eSBuYW1lXHJcbiAgICAgICAgbGV0IHByZWZpeGVkTW9kZWwgPSBudWxsO1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kZWxEYXRhLCBtb2RlbCkpIHtcclxuICAgICAgICAgIGlmICghbW9kZWwuaW5jbHVkZXModGhpcy5jb21wb25lbnRQcmVmaXgpKSB7XHJcbiAgICAgICAgICAgIHByZWZpeGVkTW9kZWwgPSBbdGhpcy5jb21wb25lbnRQcmVmaXgsIGNvbnRhaW5lclByZWZpeCA/PyBjb250YWluZXJQcmVmaXgsIG1vZGVsXS5maWx0ZXIoQm9vbGVhbikuam9pbignXycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXRjaGVkTW9kZWxEYXRhW3ByZWZpeGVkTW9kZWxdID0gbW9kZWxEYXRhW21vZGVsXTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gcGF0Y2hlZE1vZGVsRGF0YTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNb2RlbFZhbHVlKG1vZGVsTmFtZTogc3RyaW5nLCBtb2RlbFZhbHVlOiBhbnksIHNraXBQcmVmaXg/OiBib29sZWFuKSB7XHJcbiAgICBjb25zdCB6TW9kZWxzID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsO1xyXG4gICAgY29uc3Qgek1vZGVsTmFtZSA9IHNraXBQcmVmaXggPyBtb2RlbE5hbWUgOiB0aGlzLmNvbXBvbmVudFByZWZpeCArICdfJyArIG1vZGVsTmFtZTtcclxuICAgIHpNb2RlbHNbek1vZGVsTmFtZV0gPSBtb2RlbFZhbHVlO1xyXG5cclxuICAgIGxldCBmZzogRm9ybUdyb3VwID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBmZy5wYXRjaFZhbHVlKHpNb2RlbHMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBnZXRaTW9kZWwoc2tpcFJlbW92ZVByZWZpeD86IGJvb2xlYW4sIHNraXBSZW1vdmVNdmdGaWVsZFZhbHVlPyA6Ym9vbGVhbikge1xyXG4gICAgY29uc3Qgek1vZGVsID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsO1xyXG5cclxuICAgIC8vIG5lZWQgdG8gbG9vcCB6TW9kZWwsIHJlbW92ZSBtdmcobXVsdGkgdmFsdWUgZ3JvdXApIHptb2RlbC4gbXZnIGRhdGEgc3VwcG9zZSB0byBiZSBvbmx5IGZyb20gdGhlIG12ZyBncmlkLlxyXG4gICAgZm9yIChsZXQgcHJvcCBpbiB6TW9kZWwpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6TW9kZWwsIHByb3ApKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcFNlZ21lbnQgPSBwcm9wLnNwbGl0KCdfJyk7XHJcblxyXG4gICAgICAgIC8vIGJhc2Ugb24gYXMgbG9uZyBtb3JlIHRoZW4gMyBzZWdtZW50KHR5cGUsIHp1ZGYgbmFtZSwgY29udGFpbmVyIG5hbWUsIGZpZWxkIG5hbWUpIGl0IG1lYW4gY29udGFpbmVyIHptb2RlbCB2YWx1ZVxyXG4gICAgICAgIGlmIChwcm9wU2VnbWVudC5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgICAvLyBzZWdtZW50IDIgd2lsbCBiZSBjb250YWluZXIgbmFtZVxyXG4gICAgICAgICAgLy8gbWF0Y2ggdG8gc2VlIGlzIHRoZSBwcm9wZXJ0eSBuYW1lIHVuZGVyIHRoZSBtdWx0aVZhbHVlR3JvdXAgU2NvcGUuXHJcbiAgICAgICAgICBjb25zdCBtdWx0aVZhbHVlR3JvdXBTY29wZU5hbWUgPSBbJ212ZycsIHByb3BTZWdtZW50WzJdXS5qb2luKCdfJyk7XHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG12Z0ZpZWxkID0gdGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdLmZpbmQocmVjb3JkID0+IHJlY29yZCA9PSBwcm9wKTtcclxuICAgICAgICAgICAgaWYgKG12Z0ZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgek1vZGVsW3Byb3BdID0gIXNraXBSZW1vdmVNdmdGaWVsZFZhbHVlID8gbnVsbCA6IHpNb2RlbFtwcm9wXTtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh6TW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1wb3J0YW50OiBsb29wIHptb2RlbCwgcmVwbGFjZSBwcmVmaXggYmFzZSBieSBkZWZhdWx0LihhbGxvdyB0byBza2lwIHJlbW92ZSBwcmVmaXgpLlxyXG4gICAgY29uc3QgcGF0Y2hlZE1vZGVsRGF0YSA9IHNraXBSZW1vdmVQcmVmaXggPyB6TW9kZWwgOiB0aGlzLnJlbW92ZVpNb2RlbFByb3BlcnR5UHJlZml4KHpNb2RlbCk7XHJcbiAgICAgXHJcbiAgICAvLyBnZXQgYWxsIG12ZyBncmlkIHZhbHVlIGFuZCBwdXQgaW4gcmVzcGVjdGl2ZSBvYmplY3QgaW4gdGhlIGFycmF5LlxyXG4gICAgdGhpcy5tdWx0aVZhbHVlR3JvdXBHcmlkVmFsdWUuZm9yRWFjaChtdmdHcmlkVmFsdWUgPT4ge1xyXG4gICAgICAvLyBnZXQgZ3JpZCBjb250YWluZXIgbmFtZS4gY29uZmlybSB3aWxsIGJlIGF0IGxlYXN0IDQgbGVuZ3RoLlxyXG4gICAgICAvLyAzcmQgc2VnbWVudCB3aWxsIGJlIGNvbnRhaW5lciBuYW1lLlxyXG4gICAgICBjb25zdCBtdmdHcmlkVmFsdWVTZWdtZW50ID0gbXZnR3JpZFZhbHVlLnNwbGl0KCdfJyk7XHJcbiAgICAgIG12Z0dyaWRWYWx1ZVNlZ21lbnQucG9wKCk7XHJcbiAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBza2lwUmVtb3ZlUHJlZml4ID8gbXZnR3JpZFZhbHVlU2VnbWVudC5qb2luKCdfJykgOiBtdmdHcmlkVmFsdWVTZWdtZW50WzJdO1xyXG5cclxuICAgICAgLy8gZ2V0IGdyaWQgZGF0YVxyXG4gICAgICBjb25zdCBtdmdHcmlkID0gdGhpcy5ncm91cFttdmdHcmlkVmFsdWVdIGFzIFpHcmlkO1xyXG4gICAgICBjb25zdCBncmlkRGF0YSA9IG12Z0dyaWQuZ2V0R3JpZERhdGEoKTtcclxuXHJcbiAgICAgIGlmIChncmlkRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gbmVlZCB0byByZW1vdmUgcHJvcGVydHkgcHJlZml4LlxyXG4gICAgICAgIGNvbnN0IG5ld0dyaWREYXRhID0gW107XHJcbiAgICAgICAgZ3JpZERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgIGNvbnN0IHBhdGNoZWRNb2RlbERhdGEgPSBza2lwUmVtb3ZlUHJlZml4ID8gZGF0YSA6IHRoaXMucmVtb3ZlWk1vZGVsUHJvcGVydHlQcmVmaXgoZGF0YSwgdHJ1ZSk7XHJcbiAgICAgICAgICBuZXdHcmlkRGF0YS5wdXNoKHBhdGNoZWRNb2RlbERhdGEpO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHBhdGNoZWRNb2RlbERhdGFbY29udGFpbmVyTmFtZV0gPSBuZXdHcmlkRGF0YTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHBhdGNoZWRNb2RlbERhdGE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZVpNb2RlbFByb3BlcnR5UHJlZml4KHpNb2RlbDogYW55LCBnZXRPbmx5RmllbGROYW1lPzogYm9vbGVhbikge1xyXG4gICAgY29uc3QgcGF0Y2hlZE1vZGVsRGF0YSA9IHt9O1xyXG4gICAgZm9yIChsZXQgcHJvcCBpbiB6TW9kZWwpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6TW9kZWwsIHByb3ApKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcFNlZ21lbnQgPSBwcm9wLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gZ2V0T25seUZpZWxkTmFtZSA/IHByb3BTZWdtZW50W3Byb3BTZWdtZW50Lmxlbmd0aCAtIDFdIDogcHJvcC5yZXBsYWNlKHRoaXMuY29tcG9uZW50UHJlZml4ICsgJ18nLCAnJyk7XHJcbiAgICAgICAgcGF0Y2hlZE1vZGVsRGF0YVtwcm9wZXJ0eU5hbWVdID0gek1vZGVsW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdGNoZWRNb2RlbERhdGE7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIGdldFpNb2RlbEFzU3RyaW5nKCkge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Wk1vZGVsKCkpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBjb21tb24gZnVuY3Rpb24gXHJcbiAgQ29tcG9uZW50SXNWaXNpYmxlKGZpZWxkOiBaRmllbGQpOiBhbnkge1xyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuQ29tcG9uZW50SXNWaXNpYmxlKGZpZWxkLCB0aGlzLmdyb3VwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFbmFibGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSA9ICFzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlzaWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmRhdGEuVmlzaWJsZSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSZXF1aXJlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQgPSBzdGF0dXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmNoYW5nZVZhbGlkYXRvcihzdGF0dXMsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZW5lcmF0ZUZvcm1Db250cm9sTmFtZShjb250cm9sTmFtZTogc3RyaW5nLCBjb250YWluZXJOYW1lPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBtYWluUHJlZml4ID0gW3RoaXMuZGF0YS5UeXBlLCB0aGlzLmRhdGEuTmFtZSwgY29udGFpbmVyTmFtZSA/PyBudWxsXS5maWx0ZXIoQm9vbGVhbikuam9pbignXycpO1xyXG5cclxuICAgIC8vIGNoZWNrIGlzIG5hbWUgYmVlbiBwcmVmaXhlZCBcclxuICAgIGlmIChjb250cm9sTmFtZS5pbmNsdWRlcyhtYWluUHJlZml4KSkge1xyXG4gICAgICByZXR1cm4gY29udHJvbE5hbWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gd2UgdHJ5IHRvIHNwbGl0IHRoZSBuYW1lIGFuZCB1c2UgdGhlIGxhc3Qgc2VnbWVudC5cclxuICAgICAgLy8gc29tZXRpbWUgdGhlIGNvbnRyb2xuYW1lIGNhbiBiZSB3aXRob3V0IHRoZSBjb250YWluZXIgbmFtZSwgc28gd2Ugc3BsaXQgYW5kIHVzZSB0aGUgbmV3IG1haW5QcmVmaXhcclxuICAgICAgY29uc3QgY29udHJvbE5hbWVTZWdtZW50ID0gY29udHJvbE5hbWUuc3BsaXQoJ18nKTtcclxuICAgICAgY29udHJvbE5hbWUgPSBjb250cm9sTmFtZVNlZ21lbnRbY29udHJvbE5hbWVTZWdtZW50Lmxlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbbWFpblByZWZpeCwgY29udHJvbE5hbWVdLmpvaW4oJ18nKTtcclxuICB9XHJcbiAgIFxyXG4gIHByaXZhdGUgYXBwZW5kUHJlZml4KGZpZWxkczogWkZpZWxkW10sIHByZWZpeDogYW55KSB7XHJcbiAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLlZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuYXBwZW5kUHJlZml4KGZpZWxkLlZhbHVlLCBwcmVmaXgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGZpZWxkLk5hbWUgPSBbcHJlZml4LCBmaWVsZC5OYW1lXS5qb2luKCdfJyk7XHJcbiAgICAgICAgaWYgKGZpZWxkLlR5cGUgIT0gJ3pidXR0b25zJykge1xyXG4gICAgICAgICAgZmllbGQuVmFsdWUgPSBbcHJlZml4LCBmaWVsZC5WYWx1ZV0uam9pbignXycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaWVsZC5TdWJUeXBlID0gcHJlZml4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHB1YmxpYyBnZXRDb250YWluZXJNb2RlbFZhbHVlKGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdO1xyXG5cclxuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB7fTtcclxuICAgIGNvbnRhaW5lckVsZW1lbnQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgbW9kZWxWYWx1ZVtlbGVtZW50XSA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFtlbGVtZW50XTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBtb2RlbFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyQ29udGFpbmVyRmllbGRFbGVtZW50VmFsdWUoY29udGFpbmVyTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV1bY29udGFpbmVyTmFtZV07XHJcbiAgICBjb250YWluZXJFbGVtZW50LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZShlbGVtZW50LCBudWxsLCB0cnVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIC0tLS0tLS0tLS09PT09PT09PT09PT09PT09PT09PSBNdWx0aSBWYWx1ZSBHcm91cCA9PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0qL1xyXG4gIHB1YmxpYyBzZXRNdWx0aVZhbHVlR3JvdXAoZGF0YTogYW55LCBkYXRhSW5kZXg/OiBhbnkpIHtcclxuICAgIC8vIG5lZWQgdG8gZGVjbGFyZSBuYW1lLCB2YWx1ZSwgZGF0YXNvdXJjZSwgY29sdW1uZmllbGRzIGF0dHJpYnV0ZSBmb3IgZ3JpZC4gXHJcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShkYXRhLk5hbWUpO1xyXG4gICAgY29uc3QgZ3JpZFZhbHVlID0gbmFtZSArICdfT3B0aW9ucyc7XHJcbiAgICBjb25zdCBncmlkRGF0YVNvdXJjZSA9IG5hbWUgKyAnX0RhdGFTb3VyY2UnO1xyXG4gICAgY29uc3QgZ3JpZENvbHVtbkZpZWxkcyA9IG5hbWUgKyAnX0NvbHVtbkZpZWxkcyc7XHJcbiAgICBjb25zdCBtdWx0aVZhbHVlR3JvdXBTY29wZU5hbWUgPSBbJ212ZycsIGRhdGEuTmFtZV0uam9pbignXycpO1xyXG4gICAgdGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdID0gW107XHJcblxyXG4gICAgIC8vIHN0b3JlIGdyaWQgVmFsdWUgbmFtZS4gY2FuIGJlIHVzZSBpbiBnZXRaTW9kZWwgdG8gZ2V0IHRoZSBncmlkIGRhdGEuIFxyXG4gICAgdGhpcy5tdWx0aVZhbHVlR3JvdXBHcmlkVmFsdWUgPSB0aGlzLm11bHRpVmFsdWVHcm91cEdyaWRWYWx1ZSA/PyBbXTtcclxuICAgIHRoaXMubXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlLnB1c2goZ3JpZFZhbHVlKTtcclxuICAgIFxyXG4gICAgLy8gYWRkIHRvIGdyaWQgZWxlbWVudCBhdHRyaWJ1dGVcclxuICAgIC8vIHdvbnQgbmVlZCB0byBkZXBlbmQgb24gZmllbGQgZWxlbWVudCBzbyBhcyB0byBzcGVlZCB1cCB0aGUgbG9hZGluZyBzcGVlZC5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgIFwiQWRkQ29tbWFuZEJ1dHRvbk5hbWVcIjogXCJBZGRcIixcclxuICAgICAgXCJBbGxvd0V4cG9ydFwiOiBmYWxzZSxcclxuICAgICAgXCJBbGxvd0dyaWREYXRhRXhwb3J0XCI6IGZhbHNlLFxyXG4gICAgICBcIkFsbG93TXVsdGlTZWxlY3RcIjogZmFsc2UsXHJcbiAgICAgIFwiQWxsb3dSb3dTZWxlY3RcIjogZmFsc2UsXHJcbiAgICAgIFwiQWxsb3dTYXZlU3RhdGVcIjogZmFsc2UsXHJcbiAgICAgIFwiQ29sdW1uRmllbGRzXCI6ICdncm91cC4nICsgZ3JpZENvbHVtbkZpZWxkcyxcclxuICAgICAgXCJEYXRhU291cmNlXCI6ICdncm91cC4nICsgZ3JpZERhdGFTb3VyY2UsXHJcbiAgICAgIFwiRGlzYWJsZUNlbGxDbGlja0hhbmRsZXJcIjogdHJ1ZSxcclxuICAgICAgXCJEaXNhYmxlR2VuZXJhdGVDb2x1bW5CeUZvcm1cIjogdHJ1ZSxcclxuICAgICAgXCJEaXZDbGFzc1wiOiAnY29sLXhzLTEyIGNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyJyxcclxuICAgICAgXCJFbmFibGVDdXN0b21BZGRDb21tYW5kXCI6IHRydWUsXHJcbiAgICAgIFwiRW5hYmxlQ3VzdG9tUmVtb3ZlQ29tbWFuZFwiOiB0cnVlLFxyXG4gICAgICBcIkVuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZFwiOiB0cnVlLFxyXG4gICAgICBcIkVuYWJsZVNhdmVHcmlkU3RhdGVcIjogZmFsc2UsXHJcbiAgICAgIFwiRXh0ZXJuYWxQYWdpbmF0aW9uXCI6IGZhbHNlLFxyXG4gICAgICBcIkhlaWdodFJlZHVjZVwiOiAyNTAsXHJcbiAgICAgIFwiTGltaXRGaWVsZHNcIjogZmFsc2UsXHJcbiAgICAgIFwiTmFtZVwiOiBuYW1lLFxyXG4gICAgICBcIlBhZ2VTaXplXCI6IDIwLFxyXG4gICAgICBcIlBhZ2VTaXplc1wiOiBmYWxzZSxcclxuICAgICAgXCJSZXNvdXJjZVVSTFwiOiB0cnVlLFxyXG4gICAgICBcIlNlbGVjdE9wdGlvbnNcIjogZmFsc2UsXHJcbiAgICAgIFwiU2hvd0dyaWRFZGl0QnV0dG9uXCI6IGZhbHNlLFxyXG4gICAgICBcIlN1YlR5cGVcIjogXCJ6dWRmXCIsXHJcbiAgICAgIFwiVHlwZVwiOiBcInpncmlkXCIsXHJcbiAgICAgIFwiVmFsdWVcIjogJ2dyb3VwLicgKyBncmlkVmFsdWUsXHJcbiAgICAgIFwiVmlzaWJsZVwiOiB0cnVlLFxyXG4gICAgICBcIldpZHRoUmVkdWNlXCI6IDUwMFxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNyZWF0ZSBwcm9wZXJ0eSBpbiB0aGUgZ3JvdXAgYmFzZSBvbiBhYm92ZSBkZWNsYXJhdGlvbiBleGNlcHQgTmFtZSBhbmQgYWxzbyBpbnNlcnQgY29sdW1uIGZpZWxkLlxyXG4gICAgLy8gdXNlIGdyb3VwaW5nIHZhbHVlIGFzIGNvbHVtbi4gc2tpcCBpbnNlcnQgYW55IGNvbnRhaW5lciB0eXBlLlxyXG4gICAgY29uc3QgY29udGFpbmVyTmFtZSA9IGRhdGEuTmFtZTtcclxuICAgIGNvbnN0IGdyb3VwRmllbGRFbGVtZW50cyA9IFtdO1xyXG5cclxuICAgIGRhdGEuVmFsdWUuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkTW9kZWwgPSBPYmplY3QuYXNzaWduKHt9LCBmaWVsZCk7XHJcbiAgICAgIGZpZWxkTW9kZWxbJ0Rpc3BsYXlOYW1lJ10gPSBmaWVsZE1vZGVsLkxhYmVsO1xyXG4gICAgICBmaWVsZE1vZGVsLk5hbWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkTW9kZWxbJ05hbWUnXSwgY29udGFpbmVyTmFtZSk7XHJcbiAgICAgIGZpZWxkTW9kZWwuVmFsdWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkTW9kZWxbJ1ZhbHVlJ10sIGNvbnRhaW5lck5hbWUpO1xyXG5cclxuICAgICAgZ3JvdXBGaWVsZEVsZW1lbnRzLnB1c2goZmllbGRNb2RlbCk7XHJcblxyXG4gICAgICAvLyB0aGlzIGZvciB0YWxseSBhbmQgcmVtb3ZlIHptb2RlbCB3aGVuIGdldG1vZGVsKCkuXHJcbiAgICAgIC8vIG5vdCBzdXBwb3NlIHRvIHNhdmUgem1vZGVsIGZpZWxkIHZhbHVlIHNpbmNlIGl0IHZhbHVlIHN1cHBvc2UgdG8gYWRkIHRvIHRoZSBncmlkLlxyXG4gICAgICB0aGlzLmdyb3VwW211bHRpVmFsdWVHcm91cFNjb3BlTmFtZV0ucHVzaChmaWVsZE1vZGVsLlZhbHVlKTtcclxuXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZERhdGFTb3VyY2VdID0gW107XHJcbiAgICB0aGlzLmdyb3VwW2dyaWRDb2x1bW5GaWVsZHNdID0gZ3JvdXBGaWVsZEVsZW1lbnRzO1xyXG5cclxuICAgIC8vIGdyaWQgY29sdW1uIHRvIGJhc2Ugb24gZmllbGQgZWxlbWVudCBhbmQgaW5zZXJ0IHRvIGdyaWQgY29sdW1uLiBcclxuICAgIHRoaXMuZ3JvdXBbbmFtZSArICdfQ3VzdG9tQWRkQnV0dG9uT25DbGljayddID0gdGhpcy5jYXB0dXJlQ29udGFpbmVyRmllbGRWYWx1ZVRvTW9kZWwuYmluZCh0aGlzLCB0aGlzLmdyb3VwLCBncmlkVmFsdWUsIGdyaWREYXRhU291cmNlLCBjb250YWluZXJOYW1lKTsgLy9fenVkZl9mb3JtUHJldmlld1xyXG4gICAgdGhpcy5ncm91cFtuYW1lICsgJ19DdXN0b21SZXNldEJ1dHRvbk9uQ2xpY2snXSA9IHRoaXMuY2xlYXJDb250YWluZXJSZWxhdGVkRmllbGRWYWx1ZS5iaW5kKHRoaXMsIHRoaXMuZ3JvdXAsIGNvbnRhaW5lck5hbWUpOyAvL196dWRmX2Zvcm1QcmV2aWV3XHJcbiAgICB0aGlzLmdyb3VwW25hbWUgKyAnX0N1c3RvbVJlbW92ZUJ1dHRvbk9uQ2xpY2snXSA9IHRoaXMucmVtb3ZlR3JpZFJvdy5iaW5kKHRoaXMsIGdyaWRWYWx1ZSwgZ3JpZERhdGFTb3VyY2UpOyAvL196dWRmX2Zvcm1QcmV2aWV3XHJcblxyXG4gICAgaWYgKGRhdGFJbmRleCkge1xyXG4gICAgICB0aGlzLmFwcGVuZFRvRGlzcGxheU1vZGVsKGVsZW1lbnQsIGRhdGFJbmRleCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZGF0YS5WYWx1ZS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtRmllbGQoKSB7XHJcbiAgICB0aGlzLmZvcm1GaWVsZHMgPSB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhcHR1cmVDb250YWluZXJGaWVsZFZhbHVlVG9Nb2RlbChncm91cDogWkdyb3VwLCBncmlkVmFsdWU6IGFueSwgZ3JpZERhdGFTb3VyY2U6IGFueSwgY29udGFpbmVyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAvLyBnZXQgY29udGFpbmVyIG1vZGVsIHZhbHVlLCBzZXQgdG8gZ3JvdXAgZ3JpZCBkYXRhc291cmNlXHJcbiAgICBncm91cFtncmlkRGF0YVNvdXJjZV0ucHVzaCh0aGlzLmdldENvbnRhaW5lck1vZGVsVmFsdWUoY29udGFpbmVyTmFtZSkpO1xyXG5cclxuICAgIC8vIHNldCBkYXRhc291cmNlIHRvIGdyaWRcclxuICAgIGdyb3VwW2dyaWRWYWx1ZV0uc2V0RGF0YSh0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlXSk7XHJcblxyXG4gICAgLy8gY2xlYXIgY29udGFpbmVyIGZpZWxkIHZhbHVlXHJcbiAgICB0aGlzLmNsZWFyQ29udGFpbmVyUmVsYXRlZEZpZWxkVmFsdWUoZ3JvdXAsIGNvbnRhaW5lck5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckNvbnRhaW5lclJlbGF0ZWRGaWVsZFZhbHVlKGdyb3VwOiBaR3JvdXAsIGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgLy8gYWZ0ZXIgc2V0IHRvIGdyaWQsIGNsZWFyIHRoZSB6bW9kZWwuIFxyXG4gICAgdGhpcy5jbGVhckNvbnRhaW5lckZpZWxkRWxlbWVudFZhbHVlKGNvbnRhaW5lck5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVHcmlkUm93KGdyaWRWYWx1ZTogYW55LCBncmlkRGF0YVNvdXJjZTogYW55LCBkYXRhSXRlbTogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICB0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIHNldCBkYXRhc291cmNlIHRvIGdyaWRcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZFZhbHVlXS5zZXREYXRhKHRoaXMuZ3JvdXBbZ3JpZERhdGFTb3VyY2VdKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBmdW5jdGlvbiBmb3IgY29tcG9uZW50IGV2ZW50XHJcbiAgLy8jZW5kcmVncmlvblxyXG5cclxuICAvLyBUT0RPOiB0byBiZSBjb25zaWRlciB0byBhZGQgdG8gWkNvbXBvbmVudEhlbHBlciBcclxuXHJcbiAgcHJpdmF0ZSBpc0Ryb3Bkb3duVHlwZShkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudERhdGFUeXBlID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gZGF0YSA6IGRhdGEuVHlwZS50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIGlmIChjb21wb25lbnREYXRhVHlwZSA9PSBDb21wb25lbnRUeXBlLmRyb3Bkb3duIHx8IGNvbXBvbmVudERhdGFUeXBlID09IENvbXBvbmVudFR5cGUuenVpc2VsZWN0bXVsdGlwbGUgfHwgY29tcG9uZW50RGF0YVR5cGUgPT0gQ29tcG9uZW50VHlwZS56c2VsZWN0bXVsdGlwbGUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlQW5kU2hvd0Vycm9yTWVzc2FnZSgpIHtcclxuICAgIGNvbnN0IGZnID0gdGhpcy5mb3JtIGFzIEZvcm1Hcm91cDtcclxuXHJcbiAgICBpZiAoIWZnLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZS5zaG93Rm9ybUdyb3VwRXJyb3JNZXNzYWdlKHRoaXMuZ3JvdXAsIGZnKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFZhbGlkYXRlZEZvcm1aTW9kZWwoKSB7XHJcbiAgICBjb25zdCBpc1ZhbGlkRm9ybSA9IHRoaXMudmFsaWRhdGVBbmRTaG93RXJyb3JNZXNzYWdlKCk7XHJcblxyXG4gICAgaWYgKGlzVmFsaWRGb3JtKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFpNb2RlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybjtcclxuICB9XHJcbn1cclxuXHJcbmVudW0gQ29tcG9uZW50VHlwZSB7XHJcbiAgdGV4dCA9ICd0ZXh0JyxcclxuICB0ZXh0YXJlYSA9ICd0ZXh0YXJlYScsXHJcbiAgY2hlY2tib3ggPSAnY2hlY2tib3gnLFxyXG4gIGxhYmVsID0gJ3psYWJlbCcsXHJcbiAgZGF0ZSA9ICdkYXRlJyxcclxuICB6ZGF0ZXRpbWUgPSAnemRhdGV0aW1lJyxcclxuICB6dWlkYXRldGltZSA9ICd6dWlkYXRldGltZScsXHJcbiAgbnVtYmVyID0gJ251bWJlcicsXHJcbiAgem51bWVyaWMgPSAnem51bWVyaWMnLFxyXG4gIGVtYWlsID0gJ2VtYWlsJyxcclxuICBmaWxlID0gJ2ZpbGUnLFxyXG4gIHByaWNlID0gJ3ByaWNlJyxcclxuICB3ZWJzaXRlID0gJ3dlYnNpdGUnLFxyXG4gIGRyb3Bkb3duID0gJ2Ryb3Bkb3duJyxcclxuICB6dWlzZWxlY3RtdWx0aXBsZSA9ICd6dWlzZWxlY3RtdWx0aXBsZScsXHJcbiAgenNlbGVjdG11bHRpcGxlID0gJ3pzZWxlY3RtdWx0aXBsZScsXHJcbiAgZ3JvdXBpbmcgPSAna2NhcmQnLFxyXG4gIGJ1dHRvbiA9ICd6YnV0dG9ucycsXHJcbiAgZ3JpZCA9ICd6Z3JpZCdcclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwicGFkZGluZzogMTVweFwiICpuZ0lmPVwiZGF0YS5UaXRsZSAmJiAoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIiB3aWR0aD1cIjEwMCVcIj5cclxuICA8a2VuZG8tY2FyZCAqbmdJZj1cImRhdGEuVGl0bGVcIiB3aWR0aD1cIjEwMCVcIj5cclxuICAgIDxrZW5kby1jYXJkLWhlYWRlcj5cclxuICAgICAgPGRpdj5cclxuICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiY2FyZC1oZWFkZXItdGl0bGVcIj57e2RhdGEuVGl0bGV9fTwvaW9uLWxhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwva2VuZG8tY2FyZC1oZWFkZXI+XHJcbiAgICA8a2VuZG8tY2FyZC1ib2R5PlxyXG4gICAgICA8YXBwLXpmb3JtY29udHJvbCBbbmdDbGFzc109XCJncm91cFtmaWVsZC5pc1Zpc2libGVGaWVsZF0gPyBmaWVsZC5EaXZDbGFzcyA6ICgoZmllbGQuVmlzaWJsZSA9PT0gdHJ1ZSkgPyAgZmllbGQuRGl2Q2xhc3MgOiAnZmxleC1oaWRlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZm9ybUZpZWxkcyB8IGRpdnpsYXlvdXQ6IGRhdGEuemxheW91dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInt7ZmllbGQuTmFtZX19XCI+XHJcbiAgICAgIDwvYXBwLXpmb3JtY29udHJvbD5cclxuICAgIDwva2VuZG8tY2FyZC1ib2R5PlxyXG4gIDwva2VuZG8tY2FyZD5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIWRhdGEuVGl0bGUgJiYgKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCIgd2lkdGg9XCIxMDAlXCI+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICA8aW9uLWdyaWQgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICAgIDxpb24tcm93IGlkPVwiZHluYW1pYy1mb3JtLWhvc3RcIiBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1zdGFydFwiPlxyXG4gICAgICAgIDxhcHAtemZvcm1jb250cm9sIFtuZ0NsYXNzXT1cImdyb3VwW2ZpZWxkLmlzVmlzaWJsZUZpZWxkXSA/IGZpZWxkLkRpdkNsYXNzIDogKChmaWVsZC5WaXNpYmxlID09PSB0cnVlKSA/ICBmaWVsZC5EaXZDbGFzcyA6ICdmbGV4LWhpZGUnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvcm1GaWVsZHMgfCBkaXZ6bGF5b3V0OiBkYXRhLnpsYXlvdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInt7ZmllbGQuTmFtZX19XCI+XHJcbiAgICAgICAgPC9hcHAtemZvcm1jb250cm9sPlxyXG4gICAgICA8L2lvbi1yb3c+XHJcbiAgICA8L2lvbi1ncmlkPlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
570
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVkZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96dWRmL3p1ZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVkZi96dWRmLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQXNDLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQWtCLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBR0wsTUFBTSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUMvQyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7OztBQVV6QixNQUFNLE9BQU8sYUFBYTtJQWF4QixZQUNVLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxZQUEwQixFQUMxQixhQUE0QixFQUM1Qiw0QkFBMEQsRUFDMUQsR0FBc0I7UUFQdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQThCO1FBQzFELFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBZmhDLHdCQUFtQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQTBhMUMsY0FBUyxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUNoRCxDQUFDLENBQUE7UUFFTSxlQUFVLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDN0IsQ0FBQyxDQUFBO1FBRU0sZUFBVSxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDN0MsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdkgsQ0FBQyxDQUFBO0lBdGFHLENBQUM7SUFFTCxRQUFRO1FBQ04sZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUV4QyxjQUFjO1FBQ2QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNwRCxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUVoRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUUxQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFaEIsNkZBQTZGO1FBQzdGLHlCQUF5QjtRQUN6QixHQUFHO1FBQ0gsUUFBUTtRQUNSLHdCQUF3QjtRQUN4QixHQUFHO0lBQ0wsQ0FBQztJQUVPLFFBQVE7UUFDZCxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNYLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFFM0IsNENBQTRDO1lBQzVDLHFFQUFxRTtZQUNyRSx1QkFBdUI7WUFFdkIsc0JBQXNCO1lBQ3RCLDBCQUEwQjtRQUM1QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsNEJBQTRCO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO2FBQ2xEO1lBRUQsK0JBQStCO1lBQy9CLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDM0QsY0FBYyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFFM0IsdUJBQXVCO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXpDLDJDQUEyQztZQUMzQyx3Q0FBd0M7WUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDbkIsY0FBYyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ2pDO2lCQUNJO2dCQUNILE1BQU0sV0FBVyxHQUFtQyxFQUFFLENBQUM7Z0JBQ3ZELGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDbEQ7UUFDSCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQzFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNuQzthQUNGO1lBQ0Qsc0JBQXNCO1lBQ3RCLDhEQUE4RDtZQUM5RCxrSEFBa0g7UUFDcEgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sd0JBQXdCLENBQUMsZUFBdUIsRUFBRSxTQUFjO1FBQ3JFLFFBQVEsQ0FBQztJQUNYLENBQUM7SUFFTSw4QkFBOEIsQ0FBQyxLQUFhLEVBQUUsVUFBa0I7UUFDckUsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCx1QkFBdUI7SUFDaEIsZUFBZSxDQUFDLEtBQVU7UUFDL0Isa0NBQWtDO1FBQ2xDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBRTdELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUNuRDthQUNJO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RFO0lBQ0gsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEtBQVUsRUFBRSxTQUFpQjtRQUNyRCxnQkFBZ0IsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QiwyQkFBMkI7SUFDN0IsQ0FBQztJQUVNLG9CQUFvQixDQUFDLEtBQVUsRUFBRSxTQUFpQjtRQUN2RCxzRkFBc0Y7UUFDdEYsSUFBSSxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUN6QixTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNHLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSw2QkFBNkIsQ0FBQyxTQUFpQjtRQUNwRCxnQkFBZ0IsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLDJCQUEyQjtRQUMzQix3REFBd0Q7SUFDMUQsQ0FBQztJQUNELFlBQVk7SUFHWixvQ0FBb0M7SUFDN0IsaUJBQWlCLENBQUMsU0FBaUI7UUFDeEMsOEVBQThFO1FBQzlFLFNBQVMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDMUYsTUFBTSxZQUFZLEdBQW1DLEVBQUUsQ0FBQztRQUV4RCxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksV0FBVyxDQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FDdkQsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxDQUFDO1NBQzlEO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sa0JBQWtCLENBQUMsYUFBa0I7UUFDMUMsSUFBSSxhQUFhLEVBQUU7WUFDakIsTUFBTSxZQUFZLEdBQW1DLEVBQUUsQ0FBQztZQUN4RCxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUV2RSx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLGFBQWEsQ0FBQztZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3REO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLFVBQWUsRUFBRSxZQUE0QyxFQUFFLGFBQXNCO1FBQ2hILFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RFLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUN6RSxPQUFPLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDaEU7YUFDRjtpQkFDSTtnQkFDSCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUM5QixtREFBbUQ7b0JBQ25ELElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFO3dCQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ2hDO29CQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2xFO3FCQUNJO29CQUNILG9GQUFvRjtvQkFDcEYsb0dBQW9HO29CQUNwRyxJQUFJLGFBQWEsRUFBRTt3QkFDakIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLGFBQWEsQ0FBQzt3QkFBQSxDQUFDO3dCQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRTs0QkFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7eUJBQ3pEO3FCQUNGO29CQUVELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDNUQsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNyRSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBRXZFLElBQUksYUFBYSxLQUFLLElBQUksRUFBRTt3QkFDMUIsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFDckUsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQzt3QkFFdkUsSUFBSSxhQUFhLEVBQUU7NEJBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0NBQzdFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTs2QkFDckU7eUJBQ0Y7d0JBRUQsZ0RBQWdEO3dCQUNoRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRTs0QkFDckYsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7eUJBQ3BHO3dCQUVELDhGQUE4Rjt3QkFDOUYsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUU7NEJBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7eUJBQ3pFO3dCQUVELDhCQUE4Qjt3QkFDOUIsTUFBTSxVQUFVLEdBQWtCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO3dCQUMvRixZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksV0FBVzt3QkFDekMsZ0RBQWdEO3dCQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQ3ZELFVBQVUsQ0FDWCxDQUFDO3dCQUNGLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDM0MsTUFBTSxZQUFZLEdBQWtCLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDOzRCQUNuRyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksV0FBVyxDQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQ3pELFlBQVksQ0FDYixDQUFDO3lCQUNIO3dCQUNELHFCQUFxQjtxQkFFdEI7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFFeEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU0sY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUNELFlBQVk7SUFHWiwyQ0FBMkM7SUFDcEMsa0JBQWtCLENBQUMsS0FBYSxFQUFFLFNBQWM7UUFDckQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFckUsdUNBQXVDO1FBQ3ZDLEtBQUssSUFBSSxLQUFLLElBQUksZ0JBQWdCLEVBQUU7WUFDbEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzFDLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxVQUFVLENBQUM7Z0JBQ3JDLE1BQU0sY0FBYyxHQUFHLEtBQUssR0FBRyxhQUFhLENBQUM7Z0JBRTdDLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ2xCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7aUJBQzdDO2FBQ0Y7U0FDRjtRQUVELHdCQUF3QjtRQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBaUIsQ0FBQztRQUNsQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsU0FBYyxFQUFFLGVBQXFCO1FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLGdCQUFnQjtRQUNoQixLQUFLLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTtZQUMzQiwyQ0FBMkM7WUFDM0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNuQyx5QkFBeUI7Z0JBQ3pCLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO29CQUN6QyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEQsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDO2lCQUN0QztnQkFDRCw0R0FBNEc7Z0JBQzVHLHdDQUF3QztnQkFDeEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDcEMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDeEYsQ0FBQyxDQUFDLENBQUE7YUFDSDtpQkFDSTtnQkFDSCwyQ0FBMkM7Z0JBQzNDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7d0JBQ3pDLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsZUFBZSxJQUFJLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUM3RztpQkFDRjtnQkFDRCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEQ7U0FDRjtRQUFBLENBQUM7UUFFRixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFTSxhQUFhLENBQUMsU0FBaUIsRUFBRSxVQUFlLEVBQUUsVUFBb0I7UUFDM0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztRQUNuRixPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDO1FBRWpDLElBQUksRUFBRSxHQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBaUIsQ0FBQztRQUMxRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFHTSxTQUFTLENBQUMsZ0JBQTBCLEVBQUUsdUJBQWlDO1FBQzVFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDO1FBRTFELDRHQUE0RztRQUM1RyxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtZQUN2QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRXBDLGtIQUFrSDtnQkFDbEgsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDMUIsbUNBQW1DO29CQUNuQyxxRUFBcUU7b0JBQ3JFLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsRUFBRTt3QkFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQzt3QkFDckYsSUFBSSxRQUFRLEVBQUU7NEJBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQzt5QkFDOUI7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsd0ZBQXdGO1FBQ3hGLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdGLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFO1lBQ2pDLG9FQUFvRTtZQUNwRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNuRCw4REFBOEQ7Z0JBQzlELHNDQUFzQztnQkFDdEMsTUFBTSxtQkFBbUIsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWhHLGdCQUFnQjtnQkFDaEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQVUsQ0FBQztnQkFDbEQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUV2QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN2QixrQ0FBa0M7b0JBQ2xDLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztvQkFDdkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDdEIsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUMvRixXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQ3JDLENBQUMsQ0FBQyxDQUFBO29CQUVGLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLFdBQVcsQ0FBQztpQkFDL0M7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRU8sMEJBQTBCLENBQUMsTUFBVyxFQUFFLGdCQUEwQjtRQUN4RSxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUM1QixLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtZQUN2QixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0gsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9DO1NBQ0Y7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFHTSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxZQUFZO0lBR1osMEJBQTBCO0lBQzFCLGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsT0FBTyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFnQk0sT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRU0sdUJBQXVCLENBQUMsV0FBbUIsRUFBRSxhQUFzQjtRQUN4RSxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXJHLCtCQUErQjtRQUMvQixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDcEMsT0FBTyxXQUFXLENBQUM7U0FDcEI7YUFDSTtZQUNILHFEQUFxRDtZQUNyRCxxR0FBcUc7WUFDckcsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDakU7UUFFRCxPQUFPLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sWUFBWSxDQUFDLE1BQWdCLEVBQUUsTUFBVztRQUNoRCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN4QztpQkFDSTtnQkFDSCxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUU7b0JBQzVCLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDL0M7Z0JBQ0QsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7YUFDeEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxZQUFZO0lBRUwsc0JBQXNCLENBQUMsYUFBcUI7UUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTVFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLCtCQUErQixDQUFDLGFBQXFCO1FBQzFELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM1RSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJGQUEyRjtJQUNwRixrQkFBa0IsQ0FBQyxJQUFTLEVBQUUsU0FBZTtRQUNsRCw2RUFBNkU7UUFDN0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBQ3BDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxhQUFhLENBQUM7UUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBQ2hELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXpDLHdFQUF3RTtRQUN6RSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixJQUFJLEVBQUUsQ0FBQztRQUNwRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlDLGdDQUFnQztRQUNoQyw0RUFBNEU7UUFDNUUsTUFBTSxPQUFPLEdBQUc7WUFDZCxzQkFBc0IsRUFBRSxLQUFLO1lBQzdCLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLHFCQUFxQixFQUFFLEtBQUs7WUFDNUIsa0JBQWtCLEVBQUUsS0FBSztZQUN6QixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsY0FBYyxFQUFFLFFBQVEsR0FBRyxnQkFBZ0I7WUFDM0MsWUFBWSxFQUFFLFFBQVEsR0FBRyxjQUFjO1lBQ3ZDLHlCQUF5QixFQUFFLElBQUk7WUFDL0IsNkJBQTZCLEVBQUUsSUFBSTtZQUNuQyxVQUFVLEVBQUUseUNBQXlDO1lBQ3JELHdCQUF3QixFQUFFLElBQUk7WUFDOUIsMkJBQTJCLEVBQUUsSUFBSTtZQUNqQywwQkFBMEIsRUFBRSxJQUFJO1lBQ2hDLHFCQUFxQixFQUFFLEtBQUs7WUFDNUIsb0JBQW9CLEVBQUUsS0FBSztZQUMzQixjQUFjLEVBQUUsR0FBRztZQUNuQixhQUFhLEVBQUUsS0FBSztZQUNwQixNQUFNLEVBQUUsSUFBSTtZQUNaLFVBQVUsRUFBRSxFQUFFO1lBQ2QsV0FBVyxFQUFFLEtBQUs7WUFDbEIsYUFBYSxFQUFFLElBQUk7WUFDbkIsZUFBZSxFQUFFLEtBQUs7WUFDdEIsb0JBQW9CLEVBQUUsS0FBSztZQUMzQixTQUFTLEVBQUUsTUFBTTtZQUNqQixNQUFNLEVBQUUsT0FBTztZQUNmLE9BQU8sRUFBRSxRQUFRLEdBQUcsU0FBUztZQUM3QixTQUFTLEVBQUUsSUFBSTtZQUNmLGFBQWEsRUFBRSxHQUFHO1NBQ25CLENBQUE7UUFFRCxtR0FBbUc7UUFDbkcsZ0VBQWdFO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDaEMsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFFOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDN0MsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2xGLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUVwRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFcEMsb0RBQW9EO1lBQ3BELG9GQUFvRjtZQUNwRixJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU5RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztRQUVsRCxtRUFBbUU7UUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDM0ssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLENBQUMsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1FBQ2hKLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUUvSCxJQUFJLFNBQVMsRUFBRTtZQUNiLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDL0M7YUFDSTtZQUNILElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDN0MsQ0FBQztJQUVPLGlDQUFpQyxDQUFDLEtBQWEsRUFBRSxTQUFjLEVBQUUsY0FBbUIsRUFBRSxhQUFxQjtRQUNqSCwwREFBMEQ7UUFDMUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUV2RSx5QkFBeUI7UUFDekIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFckQsOEJBQThCO1FBQzlCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVPLCtCQUErQixDQUFDLEtBQWEsRUFBRSxhQUFxQjtRQUMxRSx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLCtCQUErQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTyxhQUFhLENBQUMsU0FBYyxFQUFFLGNBQW1CLEVBQUUsUUFBYSxFQUFFLEtBQVU7UUFDbEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTVDLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELFlBQVk7SUFFWixzQ0FBc0M7SUFDdEMsYUFBYTtJQUViLG1EQUFtRDtJQUUzQyxjQUFjLENBQUMsSUFBUztRQUM5QixNQUFNLGlCQUFpQixHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXBGLElBQUksaUJBQWlCLElBQUksYUFBYSxDQUFDLFFBQVEsSUFBSSxpQkFBaUIsSUFBSSxhQUFhLENBQUMsaUJBQWlCLElBQUksaUJBQWlCLElBQUksYUFBYSxDQUFDLGVBQWUsRUFBRTtZQUM3SixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sMkJBQTJCO1FBQ2hDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFpQixDQUFDO1FBRWxDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ2IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLHNCQUFzQjtRQUMzQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUV2RCxJQUFJLFdBQVcsRUFBRTtZQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsT0FBTztJQUNULENBQUM7OzJHQXJvQlUsYUFBYTsrRkFBYixhQUFhLHdHQ3pCMUIsNnZEQWtDQTs0RkRUYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLFVBQVU7MlRBS1gsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7O0FBcW9CUixJQUFLLGFBb0JKO0FBcEJELFdBQUssYUFBYTtJQUNoQiw4QkFBYSxDQUFBO0lBQ2Isc0NBQXFCLENBQUE7SUFDckIsc0NBQXFCLENBQUE7SUFDckIsaUNBQWdCLENBQUE7SUFDaEIsOEJBQWEsQ0FBQTtJQUNiLHdDQUF1QixDQUFBO0lBQ3ZCLDRDQUEyQixDQUFBO0lBQzNCLGtDQUFpQixDQUFBO0lBQ2pCLHNDQUFxQixDQUFBO0lBQ3JCLGdDQUFlLENBQUE7SUFDZiw4QkFBYSxDQUFBO0lBQ2IsZ0NBQWUsQ0FBQTtJQUNmLG9DQUFtQixDQUFBO0lBQ25CLHNDQUFxQixDQUFBO0lBQ3JCLHdEQUF1QyxDQUFBO0lBQ3ZDLG9EQUFtQyxDQUFBO0lBQ25DLG1DQUFrQixDQUFBO0lBQ2xCLG9DQUFtQixDQUFBO0lBQ25CLCtCQUFjLENBQUE7QUFDaEIsQ0FBQyxFQXBCSSxhQUFhLEtBQWIsYUFBYSxRQW9CakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBBc3luY1N1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGNvbmNhdE1hcCwgbWFwLCB0YXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBaQ29tcG9uZW50LCBaRmllbGQsXHJcbiAgQWxlcnRTZXJ2aWNlLCBBdXRoU2VydmljZSwgRmllbGRTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2UsIFRvYXN0U2VydmljZSwgV2ViQXBpU2VydmljZSxcclxuICBaR3JvdXAsIFpDb21wb25lbnRQcm9wZXJ0aWVzLCBaQ29tcG9uZW50SGVscGVyXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9jb21wb25lbnQtZXJyb3ItaGFuZGxlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFpHcmlkIH0gZnJvbSBcIi4uL3pncmlkL3pncmlkLmNvbXBvbmVudFwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXp1ZGYnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96dWRmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96dWRmLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBadWRmQ29tcG9uZW50IGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcbiAgZm9ybUZpZWxkczogYW55W107IC8vIHBvcHVsYXRlIHVzaW5nIGZpZWxkIGVsZW1lbnQuXHJcblxyXG4gIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBpbml0aWFsRGF0YVZhbHVlOiBhbnk7XHJcbiAgY29tcG9uZW50UHJlZml4OiBzdHJpbmc7XHJcbiAgY29tcG9uZW50U2NvcGVOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheUVsZW1lbnRNb2RlbDogYW55O1xyXG4gIG11bHRpVmFsdWVHcm91cEdyaWRWYWx1ZTogc3RyaW5nW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlOiBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIC8vIGtlZXAgZGF0YSBWYWx1ZVxyXG4gICAgdGhpcy5pbml0aWFsRGF0YVZhbHVlID0gdGhpcy5kYXRhLlZhbHVlO1xyXG5cclxuICAgIC8vIGRlY2xhcmF0aW9uXHJcbiAgICB0aGlzLmNvbXBvbmVudFNjb3BlTmFtZSA9ICdfenVkZl8nICsgdGhpcy5kYXRhLk5hbWU7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByZWZpeCA9ICd6dWRmXycgKyB0aGlzLmRhdGEuTmFtZTtcclxuXHJcbiAgICB0aGlzLmdyb3VwW3RoaXMuZGF0YS5OYW1lICsgJ01vZGVsJ10gPSBbXTtcclxuXHJcbiAgICB0aGlzLmxvYWRGb3JtKCk7XHJcblxyXG4gICAgLy9pZiAoWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eSh0aGlzLmRhdGEuVmFsdWUpIHx8IHRoaXMuZGF0YS5WYWx1ZS5sZW5ndGggPiAyKSB7XHJcbiAgICAvLyAgdGhpcy5sb2FkRW1wdHlGb3JtKCk7XHJcbiAgICAvL31cclxuICAgIC8vZWxzZSB7XHJcbiAgICAvLyAgdGhpcy5sb2FkWnVkZkZvcm0oKTtcclxuICAgIC8vfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkRm9ybSgpIHtcclxuICAgIG9mKHRydWUpLnBpcGUoXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhLlN1YlR5cGUgPSAnenVkZic7XHJcblxyXG4gICAgICAgIC8vIGNoYW5nZSB0aGUgdmFsdWUgdG8gdGhlIHJlc3VsdCBmaWVsZCBmb3JtXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRhdGEuTmFtZSArICcgZGVmYXVsdCB2YWx1ZTogJyArIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgICAgLy90aGlzLmRhdGEuVmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gY2hhbmdlIHp1ZGYgdG8gemRpdlxyXG4gICAgICAgIC8vdGhpcy5kYXRhLlR5cGUgPSAnemRpdic7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIGNyZWF0ZSBuZXcgZ3JvdXAgZm9yIHp1ZGZcclxuICAgICAgICBpZiAoIXRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXSA9IG5ldyBaR3JvdXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBkZWNsYXJlIHpNb2RlbCB0byB6dWRmIGdyb3VwXHJcbiAgICAgICAgY29uc3QgenVkZlNjb3BlR3JvdXAgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXTtcclxuICAgICAgICB6dWRmU2NvcGVHcm91cC56TW9kZWwgPSB7fTtcclxuXHJcbiAgICAgICAgLy8gcmVuZGVyIGZpZWxkIGVsZW1lbnRcclxuICAgICAgICB0aGlzLnJlbmRlckZpZWxkRWxlbWVudCh0aGlzLmRhdGEuVmFsdWUpO1xyXG5cclxuICAgICAgICAvLyBzZXQgdGhpcyBuZXcgY3JlYXRlIGZvcm0gdG8gekdyb3VwIHNjb3BlXHJcbiAgICAgICAgLy8gYmluZCBmb3JtIG9ubHkgd2hlbiBWYWx1ZSBpcyBub3QgbnVsbFxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuVmFsdWUpIHtcclxuICAgICAgICAgIHp1ZGZTY29wZUdyb3VwLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2w6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSA9IHt9O1xyXG4gICAgICAgICAgenVkZlNjb3BlR3JvdXAuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgLy8gc2V0IHRvIGZvcm1GaWVsZCBmb3IgZGlzcGxheVxyXG4gICAgICAgIHRoaXMuZm9ybUZpZWxkcyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuZGF0YS5WYWx1ZSk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9ICdhZnRlcicgKyAodGhpcy5kYXRhLk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLmRhdGEuTmFtZS5zbGljZSgxKSkgKyAnTG9hZGVkJztcclxuICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICBpZiAodGhpcy5ncm91cFtmaWVsZE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW2ZpZWxkTmFtZV0odGhpcy5ncm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHNldCBGaWVsZCBkaXYgY2xhc3NcclxuICAgICAgLy8gUmVwbGFjZWQgd2l0aDogdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5zZXRGaWVsZHNEaXZDbGFzcyh0aGlzLmdyb3VwLl9wcm9qZWN0TmFtZSwgdGhpcy5ncm91cC5maWVsZE5hbWUsIHRoaXMuZGF0YSwgdGhpcy5hdXRoU2VydmljZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGb3JtQ29udHJvbFZhbGlkYXRpb24oZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbGlkYXRvcjogYW55KSB7XHJcbiAgICBkZWJ1Z2dlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJGaWVsZEVsZW1lbnRCeUpzb25TdHJpbmcoZ3JvdXA6IFpHcm91cCwganNvblN0cmluZzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmaWVsZEVsZW1lbnRNYXN0ZXJDb2RlSnNvbkFycmF5ID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KGZpZWxkRWxlbWVudE1hc3RlckNvZGVKc29uQXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIERpc3BsYXkgbW9kZWxcclxuICBwdWJsaWMgc2V0RGlzcGxheU1vZGVsKHZhbHVlOiBhbnkpIHtcclxuICAgIC8vIHJlcGxhY2UgdGhlIHdob2xlIGRpc3BsYXkgbW9kZWxcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIHZhbHVlIHVzZWQgZm9yIHJlbmRlciB6dWRmICcgKyB0aGlzLmRhdGEuTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlRGlzcGxheU1vZGVsKHZhbHVlOiBhbnksIGZsYXRJbmRleDogc3RyaW5nKSB7ICBcclxuICAgIFpDb21wb25lbnRIZWxwZXIudXBkYXRlQXJyYXlPYmplY3RCeUZsYXRJbmRleCh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwsIGZsYXRJbmRleCwgdmFsdWUpOyBcclxuICAgIHRoaXMudXBkYXRlRm9ybUZpZWxkKCk7XHJcbiAgICAvL3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBlbmRUb0Rpc3BsYXlNb2RlbCh2YWx1ZTogYW55LCBmbGF0SW5kZXg6IHN0cmluZykge1xyXG4gICAgLy8gYXBwZW5kIHRvIGRpc3BsYXkgbW9kZWwgbWVhbiBpdCB3aWxsIGJhc2Ugb24gZmxhdCBpbmRleCB0byBpbnNlcnQgdGhlIGZvcm0gY29udHJvbC5cclxuICAgIGlmIChmbGF0SW5kZXgubGVuZ3RoID49IDMpIHtcclxuICAgICAgZmxhdEluZGV4LnN1YnN0cmluZygwLCBmbGF0SW5kZXgubGVuZ3RoIC0gMik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRSZWNvcmQgPSBaQ29tcG9uZW50SGVscGVyLmdldEZyb21BcnJheU9iamVjdEJ5RmxhdEluZGV4KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCwgZmxhdEluZGV4KTtcclxuICAgIHNlbGVjdGVkUmVjb3JkLlZhbHVlLnB1c2godmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldERpc3BsYXlNb2RlbCgpIHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUFsbERpc3BsYXlNb2RlbCgpIHtcclxuICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA9IFtdO1xyXG4gICAgdGhpcy5jbGVhckZvcm1Db250cm9sKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlRWxlbWVudEZyb21EaXNwbGF5TW9kZWwoZmxhdEluZGV4OiBzdHJpbmcpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVtb3ZlQXJyYXlPYmplY3RCeUZsYXRJbmRleCh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwsIGZsYXRJbmRleCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZCgpO1xyXG5cclxuICAgIC8vIFRPRE86IHJlbW92ZSBmcm9tIHptb2RlbFxyXG4gICAgLy9kZWxldGUgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsWycnXTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gZnVuY3Rpb24gZm9yIGZvcm0gY29udHJvbC5cclxuICBwdWJsaWMgYXBwZW5kRm9ybUNvbnRyb2woZmllbGREYXRhOiBaRmllbGQpIHtcclxuICAgIC8vIGFwcGVuZCBmb3JtIGNvbnRyb2wgbWVhbiBpdCB3aWxsIGp1c3QgaW5zZXJ0IHRoZSBmb3JtIGNvbnRyb2wgYXQgdGhlIGxhc3QgIFxyXG4gICAgZmllbGREYXRhLk5hbWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkRGF0YS5OYW1lLCBmaWVsZERhdGFbJ2NvbnRhaW5lck5hbWUnXSk7XHJcbiAgICBjb25zdCBmb3JtQ29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSA9IHt9O1xyXG5cclxuICAgIGZvcm1Db250cm9sc1tmaWVsZERhdGEuTmFtZV0gPSBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgIHRoaXMuZ3JvdXBbJ196dWRmX2Zvcm1QcmV2aWV3J10uek1vZGVsW2ZpZWxkRGF0YS5OYW1lXVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChmaWVsZERhdGEuTmFtZSwgZm9ybUNvbnRyb2xzW2ZpZWxkRGF0YS5OYW1lXSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmZvcm1GaWVsZHMpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Zvcm1GaWVsZCAnICsgdGhpcy5kYXRhLk5hbWUgKyAnIGlzIHVuZGVmaW5lZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA9IHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA/PyBbXTtcclxuICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbC5wdXNoKGZpZWxkRGF0YSk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZCgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlckZpZWxkRWxlbWVudChmaWVsZEVsZW1lbnRzOiBhbnkpIHtcclxuICAgIGlmIChmaWVsZEVsZW1lbnRzKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1Db250cm9sczogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9ID0ge307XHJcbiAgICAgIGZpZWxkRWxlbWVudHMgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xzKGZpZWxkRWxlbWVudHMsIGZvcm1Db250cm9scyk7XHJcblxyXG4gICAgICAvLyByZW5kZXIgZm9ybSBjb250cm9sIHRvIG5ldyBmb3JtZ3JvdXBcclxuICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cChmb3JtQ29udHJvbHMpO1xyXG4gICAgICB0aGlzLmZvcm1GaWVsZHMgPSBmaWVsZEVsZW1lbnRzO1xyXG4gICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS5mb3JtID0gdGhpcy5mb3JtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZEFycmF5OiBhbnksIGZvcm1Db250cm9sczogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9LCBjb250YWluZXJOYW1lPzogc3RyaW5nKSB7XHJcbiAgICBmaWVsZEFycmF5LmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICB0aGlzLmZpZWxkU2VydmljZS5wYXRjaEZpZWxkUHJvcGVydHkoZmllbGQpO1xyXG4gICAgICBpZiAodHlwZW9mIGZpZWxkLlZhbHVlID09PSBcInN0cmluZ1wiICYmIGZpZWxkLlZhbHVlLmluZGV4T2YoXCIuXCIpICE9PSAtMSkge1xyXG4gICAgICAgIGlmIChbJ3pncmlkJywgJ3p0cmVlJywgJ3ppbWcnLCAndGV4dGFyZWFqc29uJ10uaW5kZXhPZihmaWVsZC5UeXBlKSA9PT0gLTEpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcIkZvcm1Db250cm9sIC0gaW52YWxpZCBmaWVsZCB2YWx1ZVwiLCBmaWVsZC5WYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLlZhbHVlKSkge1xyXG4gICAgICAgICAgLy8gaW5zZXJ0IG11bHRpdmFsdWVncm91cCB0byB0aGUgY2FyZCB2YWx1ZSBpZiB0cnVlXHJcbiAgICAgICAgICBpZiAoZmllbGQuTXVsdGlWYWx1ZWRHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldE11bHRpVmFsdWVHcm91cChmaWVsZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xzKGZpZWxkLlZhbHVlLCBmb3JtQ29udHJvbHMsIGZpZWxkLk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vIGJlZm9yZSBnZW5lcmF0ZSBGb3JtQ29udHJvbCwgd2UgbmVlZCB0byBhZGQgMiBhdHRyaWJ1dGUgdG8gdGhlIGZpZWxkIHdoZW4gcmVuZGVyLlxyXG4gICAgICAgICAgLy8gdGhpcyBmb3IgbGF0ZXIgb24sIHdlIGNhbiBlYXNpbHkga25vdyB0aGlzIGZpZWxkIGJlbG9uZyB0byB3aGljaCB6dWRmIGFuZCB1bmRlciB3aGljaCBjb250YWluZXIuIFxyXG4gICAgICAgICAgaWYgKGNvbnRhaW5lck5hbWUpIHtcclxuICAgICAgICAgICAgZmllbGRbJ2NvbnRhaW5lck5hbWUnXSA9IGNvbnRhaW5lck5hbWU7O1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV1bY29udGFpbmVyTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGlzRm9ybUNvbnRyb2wgPSBaQ29tcG9uZW50SGVscGVyLmlzRm9ybUNvbnRyb2woZmllbGQpO1xyXG4gICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGVGb3JtQ29udHJvbCh0aGlzLCBmaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc1JlcXVpcmVkID0gWkNvbXBvbmVudEhlbHBlci5pc1JlcXVpcmVkRm9ybUNvbnRyb2wodGhpcywgZmllbGQpO1xyXG5cclxuICAgICAgICAgIGlmIChpc0Zvcm1Db250cm9sID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGZpZWxkLk5hbWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkLk5hbWUsIGNvbnRhaW5lck5hbWUpO1xyXG4gICAgICAgICAgICBmaWVsZC5WYWx1ZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGQuVmFsdWUsIGNvbnRhaW5lck5hbWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lck5hbWUpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdLmluY2x1ZGVzKGZpZWxkLlZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV1bY29udGFpbmVyTmFtZV0ucHVzaChmaWVsZC5WYWx1ZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGtlZXAgYSBsaXN0IG9mIGRyb3Bkb3duIG9wdGlvbiB2YXJpYWJsZSBuYW1lIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVHlwZShmaWVsZC5UeXBlKSAmJiBmaWVsZC5aRGF0YU9wdGlvbk5hbWUgJiYgZmllbGQuRHJvcGRvd25PcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cC56RGF0YVtmaWVsZC5aRGF0YU9wdGlvbk5hbWVdID0gT2JqZWN0LmFzc2lnbihbXSwgZXZhbCgndGhpcy4nICsgZmllbGQuRHJvcGRvd25PcHRpb25zKSk7IFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBhdXRvIGFwcGVuZCBjdXJyZW50IHVzZXIgdG8gdGhlIHptb2RlbCBiYXNlIG9uIGZpZWxkIGVsZW1lbnQgYXR0cmlidXRlIFwienVkZlNldERlZmF1bHRVc2VyXCJcclxuICAgICAgICAgICAgaWYgKGZpZWxkLnp1ZGZTZXREZWZhdWx0VXNlcikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZShmaWVsZC5OYW1lLCB0aGlzLmF1dGhTZXJ2aWNlLmUxVG9rZW4udXNlck5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB2YWxpZGF0b3IgZm9yIHRoZSBjb21wb25lbnRcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0VmFsaWRhdG9ycyhmaWVsZCwgaXNWaXNpYmxlLCBpc1JlcXVpcmVkKTtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICAvLyBUT0RPOiBuZWVkIGhhbmRsZSBpZiBmaWVsZC52YWx1ZSArIGNvbnRhaW5lci5cclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWxbZmllbGQuVmFsdWVdLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFpDb21wb25lbnRIZWxwZXIuaGFzQ0NGaWVsZChmaWVsZC5UeXBlKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNjVmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q0NWYWxpZGF0b3JzKGZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQpO1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5DQ1ZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFtmaWVsZC5DQ1ZhbHVlXSxcclxuICAgICAgICAgICAgICAgIGNjVmFsaWRhdG9yc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gb25jaGFuZ2UgaGFuZGxpbmc/XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpZWxkQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJGb3JtQ29udHJvbCgpIHtcclxuICAgIHRoaXMuZm9ybUZpZWxkcy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0ucmVtb3ZlQ29udHJvbChkYXRhLlZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGF0YS5WYWx1ZSA9IHRoaXMuaW5pdGlhbERhdGFWYWx1ZTtcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBbXTtcclxuICAgIHRoaXMuZm9ybUZpZWxkcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1Db250cm9sKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUZpZWxkcztcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gZnVuY3Rpb24gZm9yIF96dWRmIHNjb3BlIHptb2RlbC4gXHJcbiAgcHVibGljIHNldEZvcm1GaWVsZHpNb2RlbChncm91cDogWkdyb3VwLCBtb2RlbERhdGE6IGFueSkge1xyXG4gICAgY29uc3QgZ3JwID0gZ3JvdXAgPyBncm91cCA6IHRoaXMuZ3JvdXA7XHJcbiAgICBjb25zdCBwYXRjaGVkTW9kZWxEYXRhID0gdGhpcy5hZGRaTW9kZWxQcm9wZXJ0eVByZWZpeChtb2RlbERhdGEpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZ3JwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWwsIHBhdGNoZWRNb2RlbERhdGEpO1xyXG5cclxuICAgIC8vIG5lZWQgaW5zZXJ0IGFycmF5IHZhbHVlIHRvIHRoZSBncmlkLlxyXG4gICAgZm9yICh2YXIgbW9kZWwgaW4gcGF0Y2hlZE1vZGVsRGF0YSkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRjaGVkTW9kZWxEYXRhW21vZGVsXSkpIHtcclxuICAgICAgICBjb25zdCBncmlkVmFsdWUgPSBtb2RlbCArICdfT3B0aW9ucyc7XHJcbiAgICAgICAgY29uc3QgZ3JpZERhdGFTb3VyY2UgPSBtb2RlbCArICdfRGF0YVNvdXJjZSc7XHJcblxyXG4gICAgICAgIGdycFtncmlkRGF0YVNvdXJjZV0gPSBwYXRjaGVkTW9kZWxEYXRhW21vZGVsXTtcclxuICAgICAgICBpZiAoZ3JwW2dyaWRWYWx1ZV0pIHtcclxuICAgICAgICAgIGdycFtncmlkVmFsdWVdLnNldERhdGEoZ3JwW2dyaWREYXRhU291cmNlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcGF0Y2ggZm9ybWdyb3VwIG1vZGVsXHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBmZy5wYXRjaFZhbHVlKGdycFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkWk1vZGVsUHJvcGVydHlQcmVmaXgobW9kZWxEYXRhOiBhbnksIGNvbnRhaW5lclByZWZpeD86IGFueSkge1xyXG4gICAgY29uc3QgcGF0Y2hlZE1vZGVsRGF0YSA9IHt9O1xyXG4gICAgLy8gbG9vcCBwcm9wZXJ0eVxyXG4gICAgZm9yICh2YXIgbW9kZWwgaW4gbW9kZWxEYXRhKSB7XHJcbiAgICAgIC8vIGZpcnN0IHRoaW5nIGNoZWNrIHRoZSB2YWx1ZSBpcyBpdCBhcnJheS5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxEYXRhW21vZGVsXSkpIHtcclxuICAgICAgICAvLyBhcnJheSBzcGVjaWFsIGhhbmRsaW5nXHJcbiAgICAgICAgbGV0IG1vZGVsUHJvcGVydHkgPSBtb2RlbDtcclxuICAgICAgICBpZiAoIW1vZGVsLmluY2x1ZGVzKHRoaXMuY29tcG9uZW50UHJlZml4KSkge1xyXG4gICAgICAgICAgbW9kZWxQcm9wZXJ0eSA9IFt0aGlzLmNvbXBvbmVudFByZWZpeCwgbW9kZWxdLmpvaW4oJ18nKTtcclxuICAgICAgICAgIHBhdGNoZWRNb2RlbERhdGFbbW9kZWxQcm9wZXJ0eV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgYXJyYXkgdmFsdWUsIG1lYW4gICB1bmRlciBhIGNvbnRhaW5lci4gd2lsbCBuZWVkIHRvIHBhc3MgbW9kZWwgYXQgY29udGFpbmVyIHByZWZpeCBmb3IgcHJvcGVydHkgbmFtZS4gXHJcbiAgICAgICAgLy8gbG9vcCBhcnJheSB2YWx1ZSwgcGF0Y2ggcHJvcGVydHkgbmFtZVxyXG4gICAgICAgIG1vZGVsRGF0YVttb2RlbF0uZm9yRWFjaChhcnJheU1vZGVsID0+IHtcclxuICAgICAgICAgIHBhdGNoZWRNb2RlbERhdGFbbW9kZWxQcm9wZXJ0eV0ucHVzaCh0aGlzLmFkZFpNb2RlbFByb3BlcnR5UHJlZml4KGFycmF5TW9kZWwsIG1vZGVsKSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyBub25lIGFycmF5LCBqdXN0IHBhdGNoIHRoZSBwcm9wZXJ0eSBuYW1lXHJcbiAgICAgICAgbGV0IHByZWZpeGVkTW9kZWwgPSBudWxsO1xyXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kZWxEYXRhLCBtb2RlbCkpIHtcclxuICAgICAgICAgIGlmICghbW9kZWwuaW5jbHVkZXModGhpcy5jb21wb25lbnRQcmVmaXgpKSB7XHJcbiAgICAgICAgICAgIHByZWZpeGVkTW9kZWwgPSBbdGhpcy5jb21wb25lbnRQcmVmaXgsIGNvbnRhaW5lclByZWZpeCA/PyBjb250YWluZXJQcmVmaXgsIG1vZGVsXS5maWx0ZXIoQm9vbGVhbikuam9pbignXycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBwYXRjaGVkTW9kZWxEYXRhW3ByZWZpeGVkTW9kZWxdID0gbW9kZWxEYXRhW21vZGVsXTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gcGF0Y2hlZE1vZGVsRGF0YTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNb2RlbFZhbHVlKG1vZGVsTmFtZTogc3RyaW5nLCBtb2RlbFZhbHVlOiBhbnksIHNraXBQcmVmaXg/OiBib29sZWFuKSB7XHJcbiAgICBjb25zdCB6TW9kZWxzID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsO1xyXG4gICAgY29uc3Qgek1vZGVsTmFtZSA9IHNraXBQcmVmaXggPyBtb2RlbE5hbWUgOiB0aGlzLmNvbXBvbmVudFByZWZpeCArICdfJyArIG1vZGVsTmFtZTtcclxuICAgIHpNb2RlbHNbek1vZGVsTmFtZV0gPSBtb2RlbFZhbHVlO1xyXG5cclxuICAgIGxldCBmZzogRm9ybUdyb3VwID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICBmZy5wYXRjaFZhbHVlKHpNb2RlbHMpO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBnZXRaTW9kZWwoc2tpcFJlbW92ZVByZWZpeD86IGJvb2xlYW4sIHNraXBSZW1vdmVNdmdGaWVsZFZhbHVlPzogYm9vbGVhbikge1xyXG4gICAgY29uc3Qgek1vZGVsID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsO1xyXG5cclxuICAgIC8vIG5lZWQgdG8gbG9vcCB6TW9kZWwsIHJlbW92ZSBtdmcobXVsdGkgdmFsdWUgZ3JvdXApIHptb2RlbC4gbXZnIGRhdGEgc3VwcG9zZSB0byBiZSBvbmx5IGZyb20gdGhlIG12ZyBncmlkLlxyXG4gICAgZm9yIChsZXQgcHJvcCBpbiB6TW9kZWwpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6TW9kZWwsIHByb3ApKSB7XHJcbiAgICAgICAgY29uc3QgcHJvcFNlZ21lbnQgPSBwcm9wLnNwbGl0KCdfJyk7XHJcblxyXG4gICAgICAgIC8vIGJhc2Ugb24gYXMgbG9uZyBtb3JlIHRoZW4gMyBzZWdtZW50KHR5cGUsIHp1ZGYgbmFtZSwgY29udGFpbmVyIG5hbWUsIGZpZWxkIG5hbWUpIGl0IG1lYW4gY29udGFpbmVyIHptb2RlbCB2YWx1ZVxyXG4gICAgICAgIGlmIChwcm9wU2VnbWVudC5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgICAvLyBzZWdtZW50IDIgd2lsbCBiZSBjb250YWluZXIgbmFtZVxyXG4gICAgICAgICAgLy8gbWF0Y2ggdG8gc2VlIGlzIHRoZSBwcm9wZXJ0eSBuYW1lIHVuZGVyIHRoZSBtdWx0aVZhbHVlR3JvdXAgU2NvcGUuXHJcbiAgICAgICAgICBjb25zdCBtdWx0aVZhbHVlR3JvdXBTY29wZU5hbWUgPSBbJ212ZycsIHByb3BTZWdtZW50WzJdXS5qb2luKCdfJyk7XHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG12Z0ZpZWxkID0gdGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdLmZpbmQocmVjb3JkID0+IHJlY29yZCA9PSBwcm9wKTtcclxuICAgICAgICAgICAgaWYgKG12Z0ZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgek1vZGVsW3Byb3BdID0gIXNraXBSZW1vdmVNdmdGaWVsZFZhbHVlID8gbnVsbCA6IHpNb2RlbFtwcm9wXTtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh6TW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1wb3J0YW50OiBsb29wIHptb2RlbCwgcmVwbGFjZSBwcmVmaXggYmFzZSBieSBkZWZhdWx0LihhbGxvdyB0byBza2lwIHJlbW92ZSBwcmVmaXgpLlxyXG4gICAgY29uc3QgcGF0Y2hlZE1vZGVsRGF0YSA9IHNraXBSZW1vdmVQcmVmaXggPyB6TW9kZWwgOiB0aGlzLnJlbW92ZVpNb2RlbFByb3BlcnR5UHJlZml4KHpNb2RlbCk7XHJcblxyXG4gICAgaWYgKHRoaXMubXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlKSB7XHJcbiAgICAgIC8vIGdldCBhbGwgbXZnIGdyaWQgdmFsdWUgYW5kIHB1dCBpbiByZXNwZWN0aXZlIG9iamVjdCBpbiB0aGUgYXJyYXkuXHJcbiAgICAgIHRoaXMubXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlLmZvckVhY2gobXZnR3JpZFZhbHVlID0+IHtcclxuICAgICAgICAvLyBnZXQgZ3JpZCBjb250YWluZXIgbmFtZS4gY29uZmlybSB3aWxsIGJlIGF0IGxlYXN0IDQgbGVuZ3RoLlxyXG4gICAgICAgIC8vIDNyZCBzZWdtZW50IHdpbGwgYmUgY29udGFpbmVyIG5hbWUuXHJcbiAgICAgICAgY29uc3QgbXZnR3JpZFZhbHVlU2VnbWVudCA9IG12Z0dyaWRWYWx1ZS5zcGxpdCgnXycpO1xyXG4gICAgICAgIG12Z0dyaWRWYWx1ZVNlZ21lbnQucG9wKCk7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IHNraXBSZW1vdmVQcmVmaXggPyBtdmdHcmlkVmFsdWVTZWdtZW50LmpvaW4oJ18nKSA6IG12Z0dyaWRWYWx1ZVNlZ21lbnRbMl07XHJcblxyXG4gICAgICAgIC8vIGdldCBncmlkIGRhdGFcclxuICAgICAgICBjb25zdCBtdmdHcmlkID0gdGhpcy5ncm91cFttdmdHcmlkVmFsdWVdIGFzIFpHcmlkO1xyXG4gICAgICAgIGNvbnN0IGdyaWREYXRhID0gbXZnR3JpZC5nZXRHcmlkRGF0YSgpO1xyXG5cclxuICAgICAgICBpZiAoZ3JpZERhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gbmVlZCB0byByZW1vdmUgcHJvcGVydHkgcHJlZml4LlxyXG4gICAgICAgICAgY29uc3QgbmV3R3JpZERhdGEgPSBbXTtcclxuICAgICAgICAgIGdyaWREYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhdGNoZWRNb2RlbERhdGEgPSBza2lwUmVtb3ZlUHJlZml4ID8gZGF0YSA6IHRoaXMucmVtb3ZlWk1vZGVsUHJvcGVydHlQcmVmaXgoZGF0YSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIG5ld0dyaWREYXRhLnB1c2gocGF0Y2hlZE1vZGVsRGF0YSk7XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIHBhdGNoZWRNb2RlbERhdGFbY29udGFpbmVyTmFtZV0gPSBuZXdHcmlkRGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXRjaGVkTW9kZWxEYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVaTW9kZWxQcm9wZXJ0eVByZWZpeCh6TW9kZWw6IGFueSwgZ2V0T25seUZpZWxkTmFtZT86IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHBhdGNoZWRNb2RlbERhdGEgPSB7fTtcclxuICAgIGZvciAobGV0IHByb3AgaW4gek1vZGVsKSB7XHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoek1vZGVsLCBwcm9wKSkge1xyXG4gICAgICAgIGNvbnN0IHByb3BTZWdtZW50ID0gcHJvcC5zcGxpdCgnXycpO1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGdldE9ubHlGaWVsZE5hbWUgPyBwcm9wU2VnbWVudFtwcm9wU2VnbWVudC5sZW5ndGggLSAxXSA6IHByb3AucmVwbGFjZSh0aGlzLmNvbXBvbmVudFByZWZpeCArICdfJywgJycpO1xyXG4gICAgICAgIHBhdGNoZWRNb2RlbERhdGFbcHJvcGVydHlOYW1lXSA9IHpNb2RlbFtwcm9wXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXRjaGVkTW9kZWxEYXRhO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBnZXRaTW9kZWxBc1N0cmluZygpIHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmdldFpNb2RlbCgpKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gY29tbW9uIGZ1bmN0aW9uIFxyXG4gIENvbXBvbmVudElzVmlzaWJsZShmaWVsZDogWkZpZWxkKTogYW55IHtcclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLkNvbXBvbmVudElzVmlzaWJsZShmaWVsZCwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RW5hYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkgPSAhc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpc2libGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlID0gc3RhdHVzO1xyXG4gICAgdGhpcy5kYXRhLlZpc2libGUgPSBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UmVxdWlyZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkID0gc3RhdHVzO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5jaGFuZ2VWYWxpZGF0b3Ioc3RhdHVzLCB0aGlzLmdyb3VwLCB0aGlzLmRhdGEuVmFsdWUsIHRoaXMuY29tcG9uZW50UHJvcGVydGllcywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoY29udHJvbE5hbWU6IHN0cmluZywgY29udGFpbmVyTmFtZT86IHN0cmluZykge1xyXG4gICAgY29uc3QgbWFpblByZWZpeCA9IFt0aGlzLmRhdGEuVHlwZSwgdGhpcy5kYXRhLk5hbWUsIGNvbnRhaW5lck5hbWUgPz8gbnVsbF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ18nKTtcclxuXHJcbiAgICAvLyBjaGVjayBpcyBuYW1lIGJlZW4gcHJlZml4ZWQgXHJcbiAgICBpZiAoY29udHJvbE5hbWUuaW5jbHVkZXMobWFpblByZWZpeCkpIHtcclxuICAgICAgcmV0dXJuIGNvbnRyb2xOYW1lO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIHdlIHRyeSB0byBzcGxpdCB0aGUgbmFtZSBhbmQgdXNlIHRoZSBsYXN0IHNlZ21lbnQuXHJcbiAgICAgIC8vIHNvbWV0aW1lIHRoZSBjb250cm9sbmFtZSBjYW4gYmUgd2l0aG91dCB0aGUgY29udGFpbmVyIG5hbWUsIHNvIHdlIHNwbGl0IGFuZCB1c2UgdGhlIG5ldyBtYWluUHJlZml4XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xOYW1lU2VnbWVudCA9IGNvbnRyb2xOYW1lLnNwbGl0KCdfJyk7XHJcbiAgICAgIGNvbnRyb2xOYW1lID0gY29udHJvbE5hbWVTZWdtZW50W2NvbnRyb2xOYW1lU2VnbWVudC5sZW5ndGggLSAxXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW21haW5QcmVmaXgsIGNvbnRyb2xOYW1lXS5qb2luKCdfJyk7XHJcbiAgfVxyXG4gICBcclxuICBwcml2YXRlIGFwcGVuZFByZWZpeChmaWVsZHM6IFpGaWVsZFtdLCBwcmVmaXg6IGFueSkge1xyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLmFwcGVuZFByZWZpeChmaWVsZC5WYWx1ZSwgcHJlZml4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmaWVsZC5OYW1lID0gW3ByZWZpeCwgZmllbGQuTmFtZV0uam9pbignXycpO1xyXG4gICAgICAgIGlmIChmaWVsZC5UeXBlICE9ICd6YnV0dG9ucycpIHtcclxuICAgICAgICAgIGZpZWxkLlZhbHVlID0gW3ByZWZpeCwgZmllbGQuVmFsdWVdLmpvaW4oJ18nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmllbGQuU3ViVHlwZSA9IHByZWZpeDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwdWJsaWMgZ2V0Q29udGFpbmVyTW9kZWxWYWx1ZShjb250YWluZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXVtjb250YWluZXJOYW1lXTtcclxuXHJcbiAgICBjb25zdCBtb2RlbFZhbHVlID0ge307XHJcbiAgICBjb250YWluZXJFbGVtZW50LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIG1vZGVsVmFsdWVbZWxlbWVudF0gPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWxbZWxlbWVudF07XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbW9kZWxWYWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhckNvbnRhaW5lckZpZWxkRWxlbWVudFZhbHVlKGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdO1xyXG4gICAgY29udGFpbmVyRWxlbWVudC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICB0aGlzLnNldE1vZGVsVmFsdWUoZWxlbWVudCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiAtLS0tLS0tLS0tPT09PT09PT09PT09PT09PT09PT0gTXVsdGkgVmFsdWUgR3JvdXAgPT09PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tKi9cclxuICBwdWJsaWMgc2V0TXVsdGlWYWx1ZUdyb3VwKGRhdGE6IGFueSwgZGF0YUluZGV4PzogYW55KSB7XHJcbiAgICAvLyBuZWVkIHRvIGRlY2xhcmUgbmFtZSwgdmFsdWUsIGRhdGFzb3VyY2UsIGNvbHVtbmZpZWxkcyBhdHRyaWJ1dGUgZm9yIGdyaWQuIFxyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZGF0YS5OYW1lKTtcclxuICAgIGNvbnN0IGdyaWRWYWx1ZSA9IG5hbWUgKyAnX09wdGlvbnMnO1xyXG4gICAgY29uc3QgZ3JpZERhdGFTb3VyY2UgPSBuYW1lICsgJ19EYXRhU291cmNlJztcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5GaWVsZHMgPSBuYW1lICsgJ19Db2x1bW5GaWVsZHMnO1xyXG4gICAgY29uc3QgbXVsdGlWYWx1ZUdyb3VwU2NvcGVOYW1lID0gWydtdmcnLCBkYXRhLk5hbWVdLmpvaW4oJ18nKTtcclxuICAgIHRoaXMuZ3JvdXBbbXVsdGlWYWx1ZUdyb3VwU2NvcGVOYW1lXSA9IFtdO1xyXG5cclxuICAgICAvLyBzdG9yZSBncmlkIFZhbHVlIG5hbWUuIGNhbiBiZSB1c2UgaW4gZ2V0Wk1vZGVsIHRvIGdldCB0aGUgZ3JpZCBkYXRhLiBcclxuICAgIHRoaXMubXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlID0gdGhpcy5tdWx0aVZhbHVlR3JvdXBHcmlkVmFsdWUgPz8gW107XHJcbiAgICB0aGlzLm11bHRpVmFsdWVHcm91cEdyaWRWYWx1ZS5wdXNoKGdyaWRWYWx1ZSk7XHJcbiAgICBcclxuICAgIC8vIGFkZCB0byBncmlkIGVsZW1lbnQgYXR0cmlidXRlXHJcbiAgICAvLyB3b250IG5lZWQgdG8gZGVwZW5kIG9uIGZpZWxkIGVsZW1lbnQgc28gYXMgdG8gc3BlZWQgdXAgdGhlIGxvYWRpbmcgc3BlZWQuXHJcbiAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICBcIkFkZENvbW1hbmRCdXR0b25OYW1lXCI6IFwiQWRkXCIsXHJcbiAgICAgIFwiQWxsb3dFeHBvcnRcIjogZmFsc2UsXHJcbiAgICAgIFwiQWxsb3dHcmlkRGF0YUV4cG9ydFwiOiBmYWxzZSxcclxuICAgICAgXCJBbGxvd011bHRpU2VsZWN0XCI6IGZhbHNlLFxyXG4gICAgICBcIkFsbG93Um93U2VsZWN0XCI6IGZhbHNlLFxyXG4gICAgICBcIkFsbG93U2F2ZVN0YXRlXCI6IGZhbHNlLFxyXG4gICAgICBcIkNvbHVtbkZpZWxkc1wiOiAnZ3JvdXAuJyArIGdyaWRDb2x1bW5GaWVsZHMsXHJcbiAgICAgIFwiRGF0YVNvdXJjZVwiOiAnZ3JvdXAuJyArIGdyaWREYXRhU291cmNlLFxyXG4gICAgICBcIkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyXCI6IHRydWUsXHJcbiAgICAgIFwiRGlzYWJsZUdlbmVyYXRlQ29sdW1uQnlGb3JtXCI6IHRydWUsXHJcbiAgICAgIFwiRGl2Q2xhc3NcIjogJ2NvbC14cy0xMiBjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMicsXHJcbiAgICAgIFwiRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZFwiOiB0cnVlLFxyXG4gICAgICBcIkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIjogdHJ1ZSxcclxuICAgICAgXCJFbmFibGVDdXN0b21SZXNldENvbW1hbmRcIjogdHJ1ZSxcclxuICAgICAgXCJFbmFibGVTYXZlR3JpZFN0YXRlXCI6IGZhbHNlLFxyXG4gICAgICBcIkV4dGVybmFsUGFnaW5hdGlvblwiOiBmYWxzZSxcclxuICAgICAgXCJIZWlnaHRSZWR1Y2VcIjogMjUwLFxyXG4gICAgICBcIkxpbWl0RmllbGRzXCI6IGZhbHNlLFxyXG4gICAgICBcIk5hbWVcIjogbmFtZSxcclxuICAgICAgXCJQYWdlU2l6ZVwiOiAyMCxcclxuICAgICAgXCJQYWdlU2l6ZXNcIjogZmFsc2UsXHJcbiAgICAgIFwiUmVzb3VyY2VVUkxcIjogdHJ1ZSxcclxuICAgICAgXCJTZWxlY3RPcHRpb25zXCI6IGZhbHNlLFxyXG4gICAgICBcIlNob3dHcmlkRWRpdEJ1dHRvblwiOiBmYWxzZSxcclxuICAgICAgXCJTdWJUeXBlXCI6IFwienVkZlwiLFxyXG4gICAgICBcIlR5cGVcIjogXCJ6Z3JpZFwiLFxyXG4gICAgICBcIlZhbHVlXCI6ICdncm91cC4nICsgZ3JpZFZhbHVlLFxyXG4gICAgICBcIlZpc2libGVcIjogdHJ1ZSxcclxuICAgICAgXCJXaWR0aFJlZHVjZVwiOiA1MDBcclxuICAgIH1cclxuXHJcbiAgICAvLyBjcmVhdGUgcHJvcGVydHkgaW4gdGhlIGdyb3VwIGJhc2Ugb24gYWJvdmUgZGVjbGFyYXRpb24gZXhjZXB0IE5hbWUgYW5kIGFsc28gaW5zZXJ0IGNvbHVtbiBmaWVsZC5cclxuICAgIC8vIHVzZSBncm91cGluZyB2YWx1ZSBhcyBjb2x1bW4uIHNraXAgaW5zZXJ0IGFueSBjb250YWluZXIgdHlwZS5cclxuICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBkYXRhLk5hbWU7XHJcbiAgICBjb25zdCBncm91cEZpZWxkRWxlbWVudHMgPSBbXTtcclxuXHJcbiAgICBkYXRhLlZhbHVlLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZE1vZGVsID0gT2JqZWN0LmFzc2lnbih7fSwgZmllbGQpO1xyXG4gICAgICBmaWVsZE1vZGVsWydEaXNwbGF5TmFtZSddID0gZmllbGRNb2RlbC5MYWJlbDtcclxuICAgICAgZmllbGRNb2RlbC5OYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZE1vZGVsWydOYW1lJ10sIGNvbnRhaW5lck5hbWUpO1xyXG4gICAgICBmaWVsZE1vZGVsLlZhbHVlID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZE1vZGVsWydWYWx1ZSddLCBjb250YWluZXJOYW1lKTtcclxuXHJcbiAgICAgIGdyb3VwRmllbGRFbGVtZW50cy5wdXNoKGZpZWxkTW9kZWwpO1xyXG5cclxuICAgICAgLy8gdGhpcyBmb3IgdGFsbHkgYW5kIHJlbW92ZSB6bW9kZWwgd2hlbiBnZXRtb2RlbCgpLlxyXG4gICAgICAvLyBub3Qgc3VwcG9zZSB0byBzYXZlIHptb2RlbCBmaWVsZCB2YWx1ZSBzaW5jZSBpdCB2YWx1ZSBzdXBwb3NlIHRvIGFkZCB0byB0aGUgZ3JpZC5cclxuICAgICAgdGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdLnB1c2goZmllbGRNb2RlbC5WYWx1ZSk7XHJcblxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlXSA9IFtdO1xyXG4gICAgdGhpcy5ncm91cFtncmlkQ29sdW1uRmllbGRzXSA9IGdyb3VwRmllbGRFbGVtZW50cztcclxuXHJcbiAgICAvLyBncmlkIGNvbHVtbiB0byBiYXNlIG9uIGZpZWxkIGVsZW1lbnQgYW5kIGluc2VydCB0byBncmlkIGNvbHVtbi4gXHJcbiAgICB0aGlzLmdyb3VwW25hbWUgKyAnX0N1c3RvbUFkZEJ1dHRvbk9uQ2xpY2snXSA9IHRoaXMuY2FwdHVyZUNvbnRhaW5lckZpZWxkVmFsdWVUb01vZGVsLmJpbmQodGhpcywgdGhpcy5ncm91cCwgZ3JpZFZhbHVlLCBncmlkRGF0YVNvdXJjZSwgY29udGFpbmVyTmFtZSk7IC8vX3p1ZGZfZm9ybVByZXZpZXdcclxuICAgIHRoaXMuZ3JvdXBbbmFtZSArICdfQ3VzdG9tUmVzZXRCdXR0b25PbkNsaWNrJ10gPSB0aGlzLmNsZWFyQ29udGFpbmVyUmVsYXRlZEZpZWxkVmFsdWUuYmluZCh0aGlzLCB0aGlzLmdyb3VwLCBjb250YWluZXJOYW1lKTsgLy9fenVkZl9mb3JtUHJldmlld1xyXG4gICAgdGhpcy5ncm91cFtuYW1lICsgJ19DdXN0b21SZW1vdmVCdXR0b25PbkNsaWNrJ10gPSB0aGlzLnJlbW92ZUdyaWRSb3cuYmluZCh0aGlzLCBncmlkVmFsdWUsIGdyaWREYXRhU291cmNlKTsgLy9fenVkZl9mb3JtUHJldmlld1xyXG5cclxuICAgIGlmIChkYXRhSW5kZXgpIHtcclxuICAgICAgdGhpcy5hcHBlbmRUb0Rpc3BsYXlNb2RlbChlbGVtZW50LCBkYXRhSW5kZXgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRhdGEuVmFsdWUucHVzaChlbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybUZpZWxkKCkge1xyXG4gICAgdGhpcy5mb3JtRmllbGRzID0gdGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYXB0dXJlQ29udGFpbmVyRmllbGRWYWx1ZVRvTW9kZWwoZ3JvdXA6IFpHcm91cCwgZ3JpZFZhbHVlOiBhbnksIGdyaWREYXRhU291cmNlOiBhbnksIGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgLy8gZ2V0IGNvbnRhaW5lciBtb2RlbCB2YWx1ZSwgc2V0IHRvIGdyb3VwIGdyaWQgZGF0YXNvdXJjZVxyXG4gICAgZ3JvdXBbZ3JpZERhdGFTb3VyY2VdLnB1c2godGhpcy5nZXRDb250YWluZXJNb2RlbFZhbHVlKGNvbnRhaW5lck5hbWUpKTtcclxuXHJcbiAgICAvLyBzZXQgZGF0YXNvdXJjZSB0byBncmlkXHJcbiAgICBncm91cFtncmlkVmFsdWVdLnNldERhdGEodGhpcy5ncm91cFtncmlkRGF0YVNvdXJjZV0pO1xyXG5cclxuICAgIC8vIGNsZWFyIGNvbnRhaW5lciBmaWVsZCB2YWx1ZVxyXG4gICAgdGhpcy5jbGVhckNvbnRhaW5lclJlbGF0ZWRGaWVsZFZhbHVlKGdyb3VwLCBjb250YWluZXJOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJDb250YWluZXJSZWxhdGVkRmllbGRWYWx1ZShncm91cDogWkdyb3VwLCBjb250YWluZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgIC8vIGFmdGVyIHNldCB0byBncmlkLCBjbGVhciB0aGUgem1vZGVsLiBcclxuICAgIHRoaXMuY2xlYXJDb250YWluZXJGaWVsZEVsZW1lbnRWYWx1ZShjb250YWluZXJOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlR3JpZFJvdyhncmlkVmFsdWU6IGFueSwgZ3JpZERhdGFTb3VyY2U6IGFueSwgZGF0YUl0ZW06IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgdGhpcy5ncm91cFtncmlkRGF0YVNvdXJjZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAvLyBzZXQgZGF0YXNvdXJjZSB0byBncmlkXHJcbiAgICB0aGlzLmdyb3VwW2dyaWRWYWx1ZV0uc2V0RGF0YSh0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlXSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZnVuY3Rpb24gZm9yIGNvbXBvbmVudCBldmVudFxyXG4gIC8vI2VuZHJlZ3Jpb25cclxuXHJcbiAgLy8gVE9ETzogdG8gYmUgY29uc2lkZXIgdG8gYWRkIHRvIFpDb21wb25lbnRIZWxwZXIgXHJcblxyXG4gIHByaXZhdGUgaXNEcm9wZG93blR5cGUoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBjb21wb25lbnREYXRhVHlwZSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IGRhdGEgOiBkYXRhLlR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICBpZiAoY29tcG9uZW50RGF0YVR5cGUgPT0gQ29tcG9uZW50VHlwZS5kcm9wZG93biB8fCBjb21wb25lbnREYXRhVHlwZSA9PSBDb21wb25lbnRUeXBlLnp1aXNlbGVjdG11bHRpcGxlIHx8IGNvbXBvbmVudERhdGFUeXBlID09IENvbXBvbmVudFR5cGUuenNlbGVjdG11bHRpcGxlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZUFuZFNob3dFcnJvck1lc3NhZ2UoKSB7XHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2Uuc2hvd0Zvcm1Hcm91cEVycm9yTWVzc2FnZSh0aGlzLmdyb3VwLCBmZyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWYWxpZGF0ZWRGb3JtWk1vZGVsKCkge1xyXG4gICAgY29uc3QgaXNWYWxpZEZvcm0gPSB0aGlzLnZhbGlkYXRlQW5kU2hvd0Vycm9yTWVzc2FnZSgpO1xyXG5cclxuICAgIGlmIChpc1ZhbGlkRm9ybSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRaTW9kZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG59XHJcblxyXG5lbnVtIENvbXBvbmVudFR5cGUge1xyXG4gIHRleHQgPSAndGV4dCcsXHJcbiAgdGV4dGFyZWEgPSAndGV4dGFyZWEnLFxyXG4gIGNoZWNrYm94ID0gJ2NoZWNrYm94JyxcclxuICBsYWJlbCA9ICd6bGFiZWwnLFxyXG4gIGRhdGUgPSAnZGF0ZScsXHJcbiAgemRhdGV0aW1lID0gJ3pkYXRldGltZScsXHJcbiAgenVpZGF0ZXRpbWUgPSAnenVpZGF0ZXRpbWUnLFxyXG4gIG51bWJlciA9ICdudW1iZXInLFxyXG4gIHpudW1lcmljID0gJ3pudW1lcmljJyxcclxuICBlbWFpbCA9ICdlbWFpbCcsXHJcbiAgZmlsZSA9ICdmaWxlJyxcclxuICBwcmljZSA9ICdwcmljZScsXHJcbiAgd2Vic2l0ZSA9ICd3ZWJzaXRlJyxcclxuICBkcm9wZG93biA9ICdkcm9wZG93bicsXHJcbiAgenVpc2VsZWN0bXVsdGlwbGUgPSAnenVpc2VsZWN0bXVsdGlwbGUnLFxyXG4gIHpzZWxlY3RtdWx0aXBsZSA9ICd6c2VsZWN0bXVsdGlwbGUnLFxyXG4gIGdyb3VwaW5nID0gJ2tjYXJkJyxcclxuICBidXR0b24gPSAnemJ1dHRvbnMnLFxyXG4gIGdyaWQgPSAnemdyaWQnXHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cInBhZGRpbmc6IDE1cHhcIiAqbmdJZj1cImRhdGEuVGl0bGUgJiYgKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCIgd2lkdGg9XCIxMDAlXCI+XHJcbiAgPGtlbmRvLWNhcmQgKm5nSWY9XCJkYXRhLlRpdGxlXCIgd2lkdGg9XCIxMDAlXCI+XHJcbiAgICA8a2VuZG8tY2FyZC1oZWFkZXI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImNhcmQtaGVhZGVyLXRpdGxlXCI+e3tkYXRhLlRpdGxlfX08L2lvbi1sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2tlbmRvLWNhcmQtaGVhZGVyPlxyXG4gICAgPGtlbmRvLWNhcmQtYm9keT5cclxuICAgICAgPGFwcC16Zm9ybWNvbnRyb2wgW25nQ2xhc3NdPVwiZ3JvdXBbZmllbGQuaXNWaXNpYmxlRmllbGRdID8gZmllbGQuRGl2Q2xhc3MgOiAoKGZpZWxkLlZpc2libGUgPT09IHRydWUpID8gIGZpZWxkLkRpdkNsYXNzIDogJ2ZsZXgtaGlkZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvcm1GaWVsZHMgfCBkaXZ6bGF5b3V0OiBkYXRhLnpsYXlvdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJmb3JtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7e2ZpZWxkLk5hbWV9fVwiPlxyXG4gICAgICA8L2FwcC16Zm9ybWNvbnRyb2w+XHJcbiAgICA8L2tlbmRvLWNhcmQtYm9keT5cclxuICA8L2tlbmRvLWNhcmQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cIiFkYXRhLlRpdGxlICYmICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiIHdpZHRoPVwiMTAwJVwiPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxyXG4gICAgPGlvbi1ncmlkIHdpZHRoPVwiMTAwJVwiPlxyXG4gICAgICA8aW9uLXJvdyBpZD1cImR5bmFtaWMtZm9ybS1ob3N0XCIgY2xhc3M9XCJpb24tYWxpZ24taXRlbXMtc3RhcnRcIj5cclxuICAgICAgICA8YXBwLXpmb3JtY29udHJvbCBbbmdDbGFzc109XCJncm91cFtmaWVsZC5pc1Zpc2libGVGaWVsZF0gPyBmaWVsZC5EaXZDbGFzcyA6ICgoZmllbGQuVmlzaWJsZSA9PT0gdHJ1ZSkgPyAgZmllbGQuRGl2Q2xhc3MgOiAnZmxleC1oaWRlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmb3JtRmllbGRzIHwgZGl2emxheW91dDogZGF0YS56bGF5b3V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7e2ZpZWxkLk5hbWV9fVwiPlxyXG4gICAgICAgIDwvYXBwLXpmb3JtY29udHJvbD5cclxuICAgICAgPC9pb24tcm93PlxyXG4gICAgPC9pb24tZ3JpZD5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -11487,6 +11487,11 @@ class ZudfComponent {
|
|
|
11487
11487
|
if (this.isDropdownType(field.Type) && field.ZDataOptionName && field.DropdownOptions) {
|
|
11488
11488
|
this.group.zData[field.ZDataOptionName] = Object.assign([], eval('this.' + field.DropdownOptions));
|
|
11489
11489
|
}
|
|
11490
|
+
// auto append current user to the zmodel base on field element attribute "zudfSetDefaultUser"
|
|
11491
|
+
if (field.zudfSetDefaultUser) {
|
|
11492
|
+
this.setModelValue(field.Name, this.authService.e1Token.userName, true);
|
|
11493
|
+
}
|
|
11494
|
+
// validator for the component
|
|
11490
11495
|
const validators = ZComponentHelper.getValidators(field, isVisible, isRequired);
|
|
11491
11496
|
formControls[field.Value] = new FormControl(
|
|
11492
11497
|
// TODO: need handle if field.value + container.
|
|
@@ -11596,26 +11601,28 @@ class ZudfComponent {
|
|
|
11596
11601
|
}
|
|
11597
11602
|
// important: loop zmodel, replace prefix base by default.(allow to skip remove prefix).
|
|
11598
11603
|
const patchedModelData = skipRemovePrefix ? zModel : this.removeZModelPropertyPrefix(zModel);
|
|
11599
|
-
|
|
11600
|
-
|
|
11601
|
-
|
|
11602
|
-
|
|
11603
|
-
|
|
11604
|
-
|
|
11605
|
-
|
|
11606
|
-
|
|
11607
|
-
|
|
11608
|
-
|
|
11609
|
-
|
|
11610
|
-
|
|
11611
|
-
|
|
11612
|
-
|
|
11613
|
-
|
|
11614
|
-
|
|
11615
|
-
|
|
11616
|
-
|
|
11617
|
-
|
|
11618
|
-
|
|
11604
|
+
if (this.multiValueGroupGridValue) {
|
|
11605
|
+
// get all mvg grid value and put in respective object in the array.
|
|
11606
|
+
this.multiValueGroupGridValue.forEach(mvgGridValue => {
|
|
11607
|
+
// get grid container name. confirm will be at least 4 length.
|
|
11608
|
+
// 3rd segment will be container name.
|
|
11609
|
+
const mvgGridValueSegment = mvgGridValue.split('_');
|
|
11610
|
+
mvgGridValueSegment.pop();
|
|
11611
|
+
const containerName = skipRemovePrefix ? mvgGridValueSegment.join('_') : mvgGridValueSegment[2];
|
|
11612
|
+
// get grid data
|
|
11613
|
+
const mvgGrid = this.group[mvgGridValue];
|
|
11614
|
+
const gridData = mvgGrid.getGridData();
|
|
11615
|
+
if (gridData.length > 0) {
|
|
11616
|
+
// need to remove property prefix.
|
|
11617
|
+
const newGridData = [];
|
|
11618
|
+
gridData.forEach(data => {
|
|
11619
|
+
const patchedModelData = skipRemovePrefix ? data : this.removeZModelPropertyPrefix(data, true);
|
|
11620
|
+
newGridData.push(patchedModelData);
|
|
11621
|
+
});
|
|
11622
|
+
patchedModelData[containerName] = newGridData;
|
|
11623
|
+
}
|
|
11624
|
+
});
|
|
11625
|
+
}
|
|
11619
11626
|
return patchedModelData;
|
|
11620
11627
|
}
|
|
11621
11628
|
removeZModelPropertyPrefix(zModel, getOnlyFieldName) {
|