@senior-gestao-pessoas/hcm-contract-employee-history 5.6.4 → 5.7.0-bugfix-hcmfnd-6392-ad9ee246

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.
Files changed (17) hide show
  1. package/bundles/senior-gestao-pessoas-hcm-contract-employee-history.umd.js +41 -2
  2. package/bundles/senior-gestao-pessoas-hcm-contract-employee-history.umd.js.map +1 -1
  3. package/bundles/senior-gestao-pessoas-hcm-contract-employee-history.umd.min.js +2 -2
  4. package/bundles/senior-gestao-pessoas-hcm-contract-employee-history.umd.min.js.map +1 -1
  5. package/esm2015/lib/annotation-history/views/list/annotation-history-list.component.js +16 -3
  6. package/esm2015/lib/employee-dependent/form/employee-dependent-complement-step/employee-dependent-complement-tab/employee-dependent-complement-tab.component.js +3 -3
  7. package/esm2015/lib/leave-history/views/list/leave-history-list.component.js +16 -3
  8. package/esm2015/lib/workshift-history/views/list/workshift-history-list.component.js +16 -3
  9. package/esm5/lib/annotation-history/views/list/annotation-history-list.component.js +14 -1
  10. package/esm5/lib/employee-dependent/form/employee-dependent-complement-step/employee-dependent-complement-tab/employee-dependent-complement-tab.component.js +3 -3
  11. package/esm5/lib/leave-history/views/list/leave-history-list.component.js +14 -1
  12. package/esm5/lib/workshift-history/views/list/workshift-history-list.component.js +14 -1
  13. package/fesm2015/senior-gestao-pessoas-hcm-contract-employee-history.js +47 -8
  14. package/fesm2015/senior-gestao-pessoas-hcm-contract-employee-history.js.map +1 -1
  15. package/fesm5/senior-gestao-pessoas-hcm-contract-employee-history.js +41 -2
  16. package/fesm5/senior-gestao-pessoas-hcm-contract-employee-history.js.map +1 -1
  17. package/package.json +1 -1
@@ -124,6 +124,9 @@ var AnnotationHistoryListComponent = /** @class */ (function (_super) {
124
124
  this.setStorageFiltersIntoForm(this.filterFormGroup);
125
125
  this.gridColumns = this.getGridColumns();
126
126
  this.filterFields = this.getFilterFields();
127
+ this.filterFormGroup.get('employer').valueChanges.pipe(takeUntil(this.ngUnsubscribe)).subscribe(function () {
128
+ _this.filterFormGroup.get('companyBranch').setValue(null);
129
+ });
127
130
  this.setHotkeys();
128
131
  /*{CA:ON_INIT_END:START}*/
129
132
  if (this.permissions.incluir) {
@@ -864,6 +867,11 @@ var AnnotationHistoryListComponent = /** @class */ (function (_super) {
864
867
  })
865
868
  .filter(function (value) { return !!value; })
866
869
  .join(" or ");
870
+ var employer = this.filterFormGroup.get('employer').value;
871
+ if (employer) {
872
+ var companyFilter = "e070emp.codEmp eq " + employer.codEmp;
873
+ filterQuery = filterQuery ? filterQuery + " and " + companyFilter : companyFilter;
874
+ }
867
875
  var displayFields = mergeUnique(this.companyBranchLookupDisplayFields, this.companyBranchAdvancedDisplayFields);
868
876
  this.companyBranchService
869
877
  .list({ filterQuery: filterQuery, displayFields: displayFields, sort: sort })
@@ -905,6 +913,11 @@ var AnnotationHistoryListComponent = /** @class */ (function (_super) {
905
913
  })
906
914
  .filter(function (value) { return !!value; })
907
915
  .join(" and ");
916
+ var employer = this.filterFormGroup.get('employer').value;
917
+ if (employer) {
918
+ var companyFilter = "e070emp.codEmp eq " + employer.codEmp;
919
+ filterQuery = filterQuery ? filterQuery + " and " + companyFilter : companyFilter;
920
+ }
908
921
  var displayFields = mergeUnique(this.companyBranchLookupDisplayFields, this.companyBranchAdvancedDisplayFields);
909
922
  this.companyBranchService
910
923
  .list({ page: page, sort: sort, filterQuery: filterQuery, displayFields: displayFields })
@@ -1189,4 +1202,4 @@ var AnnotationHistoryListComponent = /** @class */ (function (_super) {
1189
1202
  export { AnnotationHistoryListComponent };
1190
1203
  /*{CA:FILE_CONTENTS:START}*/
1191
1204
  /*{CA:FILE_CONTENTS:END}*/
1192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9oY20tY29udHJhY3QtZW1wbG95ZWUtaGlzdG9yeS8iLCJzb3VyY2VzIjpbImxpYi9hbm5vdGF0aW9uLWhpc3Rvcnkvdmlld3MvbGlzdC9hbm5vdGF0aW9uLWhpc3RvcnktbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdURBQXVELENBQUM7QUFHdkYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDbkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsY0FBYyxFQUFFLDZCQUE2QixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNwSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU5RSwrQkFBK0I7QUFDL0IsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMseUVBQXlFO0FBQ2pHLDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsNEJBQTRCO0FBaUI1QjtJQUFvRCxrREFBOEI7SUEwRjlFO0lBQ0kseUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUNmLE1BQWMsRUFDZCxLQUFxQixFQUNyQix3QkFBa0QsRUFDbEQsbUJBQXdDLEVBQ3pDLFNBQTJCLEVBQzNCLGNBQThCLEVBQzdCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLHFCQUE0QyxFQUM1Qyx1QkFBZ0QsRUFDaEQsZUFBZ0MsRUFDaEMscUJBQTRDLEVBQzVDLGNBQThCLEVBQzlCLG9CQUFvQyxFQUNwQyxxQkFBNEMsRUFDbkMsYUFBd0M7UUFsQjdEO1FBb0JJLDhCQUE4QjtRQUM5QixrQkFBTSxTQUFTLENBQUMsU0FFbkI7UUFwQlcsWUFBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFdBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLDhCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQseUJBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN6QyxlQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixvQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0Isb0JBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDJCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsNkJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxxQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsMkJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxvQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsMEJBQW9CLEdBQXBCLG9CQUFvQixDQUFnQjtRQUNwQywyQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQ25DLG1CQUFhLEdBQWIsYUFBYSxDQUEyQjtRQTNHdEQsb0JBQWMsR0FBUSxFQUFFLENBQUM7UUFDekIsaUJBQVcsR0FBUSxFQUFFLENBQUM7UUFDdEIsa0JBQVksR0FBUSxFQUFFLENBQUM7UUFFdkIsdUJBQWlCLEdBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFTaEYsMkJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLGtCQUFZLEdBQWEsRUFBRSxDQUFDO1FBQzVCLGlCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLG1CQUFhLEdBQUcsS0FBSyxDQUFDO1FBS3RCLHVDQUFpQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELHlDQUFtQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRXZELGlDQUEyQixHQUFHLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ2xILG1DQUE2QixHQUFHLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO1FBRXBILG9DQUE4QixHQUFHLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzNELHNDQUFnQyxHQUFHLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRTdELGdDQUEwQixHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2xELGtDQUE0QixHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXBELHNDQUFnQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELHdDQUFrQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBaUJqRSwrQkFBK0I7UUFDeEIseUJBQW1CLEdBQXVDO1lBQzdEO2dCQUNJLEtBQUssRUFBRSxLQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnRUFBZ0UsQ0FBQztnQkFDL0YsS0FBSyxFQUFFLFlBQVksQ0FBQyxRQUFRO2FBQy9CO1lBQ0Q7Z0JBQ0ksS0FBSyxFQUFFLEtBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdFQUFnRSxDQUFDO2dCQUMvRixLQUFLLEVBQUUsWUFBWSxDQUFDLFFBQVE7YUFDL0I7WUFDRDtnQkFDSSxLQUFLLEVBQUUsS0FBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsK0RBQStELENBQUM7Z0JBQzlGLEtBQUssRUFBRSxZQUFZLENBQUMsT0FBTzthQUM5QjtZQUNEO2dCQUNJLEtBQUssRUFBRSxLQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztnQkFDaEcsS0FBSyxFQUFFLFlBQVksQ0FBQyxTQUFTO2FBQ2hDO1lBQ0Q7Z0JBQ0ksS0FBSyxFQUFFLEtBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1FQUFtRSxDQUFDO2dCQUNsRyxLQUFLLEVBQUUsWUFBWSxDQUFDLFdBQVc7YUFDbEM7U0FDSixDQUFDO1FBQ0YsNkJBQTZCO1FBRXJCLCtDQUF5QyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDMUQsMENBQW9DLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVyRCw0Q0FBc0MsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3ZELHVDQUFpQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFbEQsd0NBQWtDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNuRCxtQ0FBNkIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzlDLDhDQUF3QyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDekQseUNBQW1DLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVyRCx1QkFBaUIsR0FBZSxFQUFFLENBQUM7O1FBd0J0Qyw0QkFBNEI7SUFDaEMsQ0FBQztJQUVNLGlEQUFRLEdBQWY7UUFDSSw0QkFBNEI7UUFDNUIsMEJBQTBCO1FBRjlCLGlCQXlDQztRQXJDRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFDLElBQVMsSUFBSyxPQUFBLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBNUIsQ0FBNEIsQ0FBQyxDQUFDO1FBRTNHLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDMUMsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsYUFBYSxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEQsWUFBWSxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakQsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0MsY0FBYyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUN6RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQiwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUN2QjtnQkFDSSxLQUFLLEVBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaURBQWlELENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBTyxPQUFBLEtBQUksQ0FBQyxlQUFlLEVBQUUsRUFBdEIsQ0FBc0I7YUFDcEgsQ0FDSixDQUFBO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ3ZCO2dCQUNJLEtBQUssRUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvREFBb0QsQ0FBQyxFQUFFLE9BQU8sRUFBRSxjQUFNLE9BQUEsS0FBSSxDQUFDLGtCQUFrQixFQUFFLEVBQXpCLENBQXlCO2FBQ3JILENBQ1IsQ0FBQTtTQUNKO1FBQ0Qsd0JBQXdCO0lBQzVCLENBQUM7SUFFTSxvREFBVyxHQUFsQjtRQUNJLCtCQUErQjtRQUMvQiw2QkFBNkI7UUFFN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTlCLDZCQUE2QjtRQUM3QiwyQkFBMkI7SUFDL0IsQ0FBQztJQUVNLG1EQUFVLEdBQWpCO1FBQ0ksZ0NBQWdDO1FBQ2hDLDhCQUE4QjtRQUZsQyxpQkFtRUM7UUEvREcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQ25CLElBQUksTUFBTSxDQUNOLGFBQWEsRUFDYjtZQUNJLElBQUksS0FBSSxDQUFDLFNBQVMsSUFBSSxLQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQy9DLEtBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNqQjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQ2xDLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLE1BQU0sQ0FDTixhQUFhLEVBQ2I7WUFDSSxJQUFJLEtBQUksQ0FBQyxTQUFTLElBQUksS0FBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksS0FBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3JFLEtBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNuQjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQ2xDLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLE1BQU0sQ0FDTixhQUFhLEVBQ2I7WUFDSSxJQUFJLEtBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUMxQixLQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEI7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLEVBQ0QsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUNsQyxDQUNKLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxNQUFNLENBQ04sYUFBYSxFQUNiO1lBQ0ksS0FBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsRUFDRCxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQ2xDLENBQ0osQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQixJQUFJLE1BQU0sQ0FDTixhQUFhLEVBQ2I7WUFDSSxLQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLEVBQ0QsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUNsQyxDQUNKLENBQUM7UUFFRiw4QkFBOEI7UUFDOUIsNEJBQTRCO0lBQ2hDLENBQUM7SUFFTSwwREFBaUIsR0FBeEIsVUFBeUIsSUFBUztRQUM5Qix5Q0FBeUM7UUFDekMsdUNBQXVDO1FBRXZDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBRXRDLHVDQUF1QztRQUN2QyxxQ0FBcUM7SUFDekMsQ0FBQztJQUVELDZHQUE2RztJQUNyRyxpREFBUSxHQUFoQixVQUFpQixNQUFXO1FBQ3hCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFsQixDQUFrQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0wsQ0FBQztJQUVNLGlEQUFRLEdBQWY7UUFDSSw4QkFBOEI7UUFDOUIsNEJBQTRCO1FBRTVCLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzNEO2FBQU07WUFDSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLFlBQUEsRUFBRSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUN6RjtRQUVELDRCQUE0QjtRQUM1QiwwQkFBMEI7SUFDOUIsQ0FBQztJQUVNLGdEQUFPLEdBQWQ7UUFDSSw2QkFBNkI7UUFDN0IsMkJBQTJCO1FBRTNCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0IsSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxZQUFBLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUUxRSwyQkFBMkI7UUFDM0IseUJBQXlCO0lBQzdCLENBQUM7SUFFTSxzREFBYSxHQUFwQixVQUFxQixLQUFhO1FBQzlCLG9DQUFvQztRQUNwQyxrQ0FBa0M7UUFFbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxJQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxVQUFVLFlBQUEsRUFBRSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTFGLGtDQUFrQztRQUNsQyxnQ0FBZ0M7SUFDcEMsQ0FBQztJQUVNLHFEQUFZLEdBQW5CLFVBQW9CLEtBQW9CO1FBQ3BDLG1DQUFtQztRQUNuQyxpQ0FBaUM7UUFFakMsSUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN4QixJQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNoQyxJQUFNLElBQUksR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBRWpDLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sSUFBRyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyx5Q0FBeUMsRUFBRSxFQUFFLElBQUksTUFBQSxFQUFFLElBQUksTUFBQSxFQUFFLElBQUksTUFBQSxFQUFFLENBQUMsQ0FBQztTQUNoSDtRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBQSxFQUFFLElBQUksTUFBQSxFQUFFLElBQUksTUFBQSxFQUFFLENBQUMsQ0FBQztRQUU3QyxpQ0FBaUM7UUFDakMsK0JBQStCO0lBQ25DLENBQUM7SUFFTSw4Q0FBSyxHQUFaO1FBQ0ksMkJBQTJCO1FBQzNCLHlCQUF5QjtRQUV6QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTFELHlCQUF5QjtRQUN6Qix1QkFBdUI7SUFDM0IsQ0FBQztJQUVNLCtDQUFNLEdBQWI7UUFDSSw0QkFBNEI7UUFDNUIsMEJBQTBCO1FBRTFCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUV6RSwwQkFBMEI7UUFDMUIsd0JBQXdCO0lBQzVCLENBQUM7SUFFTSxpREFBUSxHQUFmO1FBQ0ksOEJBQThCO1FBQzlCLDRCQUE0QjtRQUZoQyxpQkEyQ0M7UUF2Q0csSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMscUVBQXFFLENBQUM7WUFDdEcsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1FQUFtRSxDQUFDO1lBQ25HLE1BQU0sRUFBRTtnQkFDSixLQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsUUFBUSxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQUEsaUJBQWlCLElBQUksT0FBQSxLQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxFQUExRCxDQUEwRCxDQUFDLENBQUM7cUJBQ3hHLElBQUksQ0FDRCxTQUFTLENBQUMsS0FBSSxDQUFDLGFBQWEsQ0FBQyxFQUM3QixRQUFRLENBQUM7b0JBQ0wscUNBQXFDO29CQUNyQyxtQ0FBbUM7b0JBQ25DLEtBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO29CQUN4QixLQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2pCLHdDQUF3QztvQkFDeEMsc0NBQXNDO2dCQUMxQyxDQUFDLENBQUMsQ0FDTDtxQkFDQSxTQUFTLENBQ047b0JBQ0ksa0NBQWtDO29CQUNsQyxnQ0FBZ0M7b0JBQ2hDLEtBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO3dCQUNwQixRQUFRLEVBQUUsU0FBUzt3QkFDbkIsT0FBTyxFQUFFLEtBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtEQUErRCxDQUFDO3dCQUNoRyxNQUFNLEVBQUUsS0FBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUVBQWlFLENBQUM7cUJBQ3BHLENBQUMsQ0FBQztvQkFDSCxxQ0FBcUM7b0JBQ3JDLG1DQUFtQztnQkFDdkMsQ0FBQyxFQUNELFVBQUEsS0FBSztvQkFDRCxrQ0FBa0M7b0JBQ2xDLGdDQUFnQztnQkFDcEMsQ0FBQyxDQUNKLENBQUM7WUFDVixDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBRUgsNEJBQTRCO1FBQzVCLDBCQUEwQjtJQUM5QixDQUFDO0lBRU0sbURBQVUsR0FBakIsVUFBa0IsU0FBaUI7UUFDL0IsSUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFHLFNBQVcsQ0FBQyxDQUFDO1FBQ3hELElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQztJQUVNLHNEQUFhLEdBQXBCLFVBQXFCLFFBQWUsRUFBRSxhQUFvQjtRQUExRCxpQkFlQztRQWRHLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQVMsSUFBSyxPQUFBLHVCQUM1QixJQUFJLEtBQ1AsS0FBSyxFQUFFLGFBQWE7aUJBQ2YsR0FBRyxDQUFDLFVBQUEsS0FBSztnQkFDTixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQzNDO2dCQUNELElBQUksS0FBSyxLQUFLLHFDQUFxQyxFQUFFO29CQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNyRDtnQkFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUNsQixFQWJpQyxDQWFqQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRU0sc0VBQTZCLEdBQXBDLFVBQXFDLEtBQWE7UUFDOUMsMkNBQTJDO1FBQzNDLHlDQUF5QztRQUY3QyxpQkFtQkM7UUFmRyxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7YUFDbkQsTUFBTSxDQUFDLFVBQUMsRUFBUTtnQkFBTixjQUFJO1lBQU8sT0FBQSxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUExQixDQUEwQixDQUFDO2FBQ2hELEdBQUcsQ0FBQyxVQUFBLFNBQVMsSUFBSSxPQUFBLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBN0QsQ0FBNkQsQ0FBQzthQUMvRSxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxFQUFILENBQUcsQ0FBQzthQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEIsSUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNwSCxJQUFJLENBQUMscUJBQXFCO2FBQ3JCLElBQUksQ0FBQyxFQUFFLFdBQVcsYUFBQSxFQUFFLGFBQWEsZUFBQSxFQUFFLENBQUM7YUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQVMsSUFBSyxPQUFBLEtBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFJLENBQUMsaUNBQWlDLENBQUMsRUFBekUsQ0FBeUUsQ0FBQyxDQUFDO2FBQ25HLFNBQVMsQ0FBQyxVQUFDLElBQVcsSUFBSyxPQUFBLEtBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQXpELENBQXlELENBQUMsQ0FBQztRQUUzRix5Q0FBeUM7UUFDekMsdUNBQXVDO0lBQzNDLENBQUM7SUFFTSxzRUFBNkIsR0FBcEMsVUFBcUMsS0FBVTtRQUMzQywyQ0FBMkM7UUFDM0MseUNBQXlDO1FBRjdDLGlCQTRDQztRQXhDVyxJQUFBLG1CQUFLLEVBQUUsaUJBQUksRUFBRSxtQ0FBYSxFQUFFLDZCQUFVLENBQVc7UUFDekQsSUFBTSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFNLElBQUksR0FBRyxhQUFhLENBQUM7UUFDM0IsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFO2FBQ25ELE1BQU0sQ0FBQyxVQUFDLEVBQVE7Z0JBQU4sY0FBSTtZQUFPLE9BQUEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUE3QyxDQUE2QyxDQUFDO2FBQ25FLEdBQUcsQ0FBQyxVQUFDLEVBQWM7Z0JBQVosY0FBSSxFQUFFLGNBQUk7WUFDZCxJQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzNCLE9BQVUsSUFBSSxZQUFPLEtBQU8sQ0FBQzthQUNoQztpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxPQUFVLElBQUksYUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFHLENBQUM7YUFDL0Q7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBVSxJQUFJLGFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBRyxDQUFDO2FBQzdEO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BDLE9BQVUsSUFBSSxhQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBRyxDQUFDO2FBQ25EO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQVUsSUFBSSxhQUFRLEtBQUssTUFBRyxDQUFDO2FBQ2xDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xDLE9BQU8sc0JBQW9CLElBQUksa0JBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQUssQ0FBQzthQUMvRTtpQkFBTTtnQkFDSCxPQUFVLElBQUksYUFBUSxLQUFLLE1BQUcsQ0FBQzthQUNsQztRQUNMLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuQixJQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3BILElBQUksQ0FBQyxxQkFBcUI7YUFDckIsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFBLEVBQUUsSUFBSSxNQUFBLEVBQUUsV0FBVyxhQUFBLEVBQUUsYUFBYSxlQUFBLEVBQUUsQ0FBQzthQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQ0QsR0FBRyxDQUFDLFVBQUMsSUFBUyxJQUFLLE9BQUEsQ0FBQztZQUNoQixRQUFRLEVBQUUsS0FBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUksQ0FBQyxpQ0FBaUMsQ0FBQztZQUNuRixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDbkMsQ0FBQyxFQUhpQixDQUdqQixDQUFDLENBQ047YUFDQSxTQUFTLENBQUMsVUFBQyxJQUFTLElBQUssT0FBQSxLQUFJLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFwRCxDQUFvRCxDQUFDLENBQUM7UUFFcEYseUNBQXlDO1FBQ3pDLHVDQUF1QztJQUMzQyxDQUFDO0lBRU0sbUVBQTBCLEdBQWpDLFVBQWtDLEtBQWE7UUFDM0Msa0RBQWtEO1FBQ2xELGdEQUFnRDtRQUZwRCxpQkFtQkM7UUFmRyxJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUU7YUFDaEQsTUFBTSxDQUFDLFVBQUMsRUFBUTtnQkFBTixjQUFJO1lBQU8sT0FBQSxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUExQixDQUEwQixDQUFDO2FBQ2hELEdBQUcsQ0FBQyxVQUFBLFNBQVMsSUFBSSxPQUFBLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBN0QsQ0FBNkQsQ0FBQzthQUMvRSxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxFQUFILENBQUcsQ0FBQzthQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEIsSUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsZUFBZTthQUNmLElBQUksQ0FBQyxFQUFFLFdBQVcsYUFBQSxFQUFFLGFBQWEsZUFBQSxFQUFFLENBQUM7YUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQVMsSUFBSyxPQUFBLEtBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFJLENBQUMsOEJBQThCLENBQUMsRUFBdEUsQ0FBc0UsQ0FBQyxDQUFDO2FBQ2hHLFNBQVMsQ0FBQyxVQUFDLElBQVcsSUFBSyxPQUFBLEtBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQXRELENBQXNELENBQUMsQ0FBQztRQUV4RixnREFBZ0Q7UUFDaEQsOENBQThDO0lBQ2xELENBQUM7SUFFTSxtRUFBMEIsR0FBakMsVUFBa0MsS0FBVTtRQUN4QyxrREFBa0Q7UUFDbEQsZ0RBQWdEO1FBRnBELGlCQTRDQztRQXhDVyxJQUFBLG1CQUFLLEVBQUUsaUJBQUksRUFBRSxtQ0FBYSxFQUFFLDZCQUFVLENBQVc7UUFDekQsSUFBTSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFNLElBQUksR0FBRyxhQUFhLENBQUM7UUFDM0IsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFO2FBQ2hELE1BQU0sQ0FBQyxVQUFDLEVBQVE7Z0JBQU4sY0FBSTtZQUFPLE9BQUEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUE3QyxDQUE2QyxDQUFDO2FBQ25FLEdBQUcsQ0FBQyxVQUFDLEVBQWM7Z0JBQVosY0FBSSxFQUFFLGNBQUk7WUFDZCxJQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzNCLE9BQVUsSUFBSSxZQUFPLEtBQU8sQ0FBQzthQUNoQztpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxPQUFVLElBQUksYUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFHLENBQUM7YUFDL0Q7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBVSxJQUFJLGFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBRyxDQUFDO2FBQzdEO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BDLE9BQVUsSUFBSSxhQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBRyxDQUFDO2FBQ25EO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQVUsSUFBSSxhQUFRLEtBQUssTUFBRyxDQUFDO2FBQ2xDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xDLE9BQU8sc0JBQW9CLElBQUksa0JBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQUssQ0FBQzthQUMvRTtpQkFBTTtnQkFDSCxPQUFVLElBQUksYUFBUSxLQUFLLE1BQUcsQ0FBQzthQUNsQztRQUNMLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuQixJQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzlHLElBQUksQ0FBQyxlQUFlO2FBQ2YsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFBLEVBQUUsSUFBSSxNQUFBLEVBQUUsV0FBVyxhQUFBLEVBQUUsYUFBYSxlQUFBLEVBQUUsQ0FBQzthQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQ0QsR0FBRyxDQUFDLFVBQUMsSUFBUyxJQUFLLE9BQUEsQ0FBQztZQUNoQixRQUFRLEVBQUUsS0FBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUksQ0FBQyw4QkFBOEIsQ0FBQztZQUNoRixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDbkMsQ0FBQyxFQUhpQixDQUdqQixDQUFDLENBQ047YUFDQSxTQUFTLENBQUMsVUFBQyxJQUFTLElBQUssT0FBQSxLQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFqRCxDQUFpRCxDQUFDLENBQUM7UUFFakYsZ0RBQWdEO1FBQ2hELDhDQUE4QztJQUNsRCxDQUFDO0lBRU0sZ0RBQU8sR0FBZCxVQUFlLEdBQVEsRUFBRSxJQUFTO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQyxNQUFXLEVBQUUsSUFBUyxJQUFLLE9BQUEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFoRCxDQUFnRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JILENBQUM7SUFFTyx1REFBYyxHQUF0QjtRQUNJLElBQU0sV0FBVyxHQUFHO1lBQ2hCLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdUVBQXVFLENBQUMsRUFBRTtZQUMvSCxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUZBQWlGLENBQUMsRUFBRTtZQUNuSixFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUZBQWlGLENBQUMsRUFBRTtZQUNuSjtnQkFDSSxLQUFLLEVBQUUsWUFBWTtnQkFDbkIsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVFQUF1RSxDQUFDO2FBQzFHO1NBQ0osQ0FBQztRQUVGLCtCQUErQjtRQUMvQiw2QkFBNkI7UUFFN0IsT0FBTyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVPLHdEQUFlLEdBQXZCO1FBQUEsaUJBaUdDO1FBaEdHLElBQU0sWUFBWSxHQUFHO1lBQ2pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUU7WUFDekMsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrREFBa0QsQ0FBQztnQkFDakYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixXQUFXLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNDLFlBQVksRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDNUMsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtEQUErRCxDQUFDO2dCQUNwRyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1REFBdUQsQ0FBQztnQkFDakcsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdEQUFnRCxDQUFDO2dCQUNyRixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaURBQWlELENBQUM7Z0JBQ3RGLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQztnQkFDbkYsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdEQUFnRCxDQUFDO2dCQUNyRixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLE9BQU8sRUFBRSxJQUFJO2dCQUNiLHFCQUFxQixFQUFFLElBQUksQ0FBQyxrQ0FBa0M7Z0JBQzlELGdCQUFnQixFQUFFLElBQUksQ0FBQyw2QkFBNkI7Z0JBQ3BELGVBQWUsRUFBRSxVQUFDLEtBQWEsSUFBSyxPQUFBLEtBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBbEMsQ0FBa0M7Z0JBQ3RFLGVBQWUsRUFBRSxVQUFDLEtBQVUsSUFBSyxPQUFBLEtBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsRUFBbEMsQ0FBa0M7Z0JBQ25FLGtCQUFrQixFQUFFLE9BQU87Z0JBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzNDLGdCQUFnQixFQUFFLElBQUksQ0FBQywwQkFBMEIsRUFBRTthQUN0RCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztnQkFDaEcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2dCQUN0QixRQUFRLEVBQUUsS0FBSztnQkFDZixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsOEVBQThFLENBQUM7Z0JBQ25ILGdCQUFnQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVEQUF1RCxDQUFDO2dCQUNqRyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpREFBaUQsQ0FBQztnQkFDdEYsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtDQUErQyxDQUFDO2dCQUNuRixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLFdBQVcsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDM0MsWUFBWSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM1QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLE9BQU8sRUFBRSxJQUFJO2dCQUNiLHFCQUFxQixFQUFFLElBQUksQ0FBQyx3Q0FBd0M7Z0JBQ3BFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxtQ0FBbUM7Z0JBQzFELGVBQWUsRUFBRSxVQUFDLEtBQWEsSUFBSyxPQUFBLEtBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsRUFBeEMsQ0FBd0M7Z0JBQzVFLGVBQWUsRUFBRSxVQUFDLEtBQVUsSUFBSyxPQUFBLEtBQUksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsRUFBeEMsQ0FBd0M7Z0JBQ3pFLGtCQUFrQixFQUFFLE9BQU87Z0JBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7Z0JBQ2pELGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRTthQUM1RCxDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx3RkFBd0YsQ0FBQztnQkFDdkgsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2dCQUNwQixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0dBQW9HLENBQUM7Z0JBQ3pJLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CO2dCQUNqQyxRQUFRLEVBQUUsS0FBSzthQUNsQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDRFQUE0RSxDQUFDO2dCQUMzRyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5RkFBeUYsQ0FBQztnQkFDOUgsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ2pHLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDO2dCQUN0RixXQUFXLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzNDLFlBQVksRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDNUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtDQUErQyxDQUFDO2dCQUNuRixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0RBQWdELENBQUM7Z0JBQ3JGLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxnREFBZ0QsQ0FBQztnQkFDckYsT0FBTyxFQUFFLElBQUk7Z0JBQ2IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHlDQUF5QztnQkFDckUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLG9DQUFvQztnQkFDM0QsZUFBZSxFQUFFLFVBQUMsS0FBYSxJQUFLLE9BQUEsS0FBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxFQUF6QyxDQUF5QztnQkFDN0UsZUFBZSxFQUFFLFVBQUMsS0FBVSxJQUFLLE9BQUEsS0FBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxFQUF6QyxDQUF5QztnQkFDMUUsa0JBQWtCLEVBQUUsT0FBTztnQkFDM0IsWUFBWSxFQUFFLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtnQkFDbEQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGlDQUFpQyxFQUFFO2FBQzdELENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNERBQTRELENBQUM7Z0JBQzNGLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUMvQiw0REFBNEQsQ0FDL0Q7Z0JBQ0QsT0FBTyxFQUFFLGlCQUFpQixDQUFDLFFBQVE7Z0JBQ25DLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQzdELFFBQVEsRUFBRSxLQUFLO2FBQ2xCLENBQUM7U0FDTCxDQUFDO1FBRUYsZ0NBQWdDO1FBQ2hDLDhCQUE4QjtRQUU5QixPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRWEsa0VBQXlCLEdBQXZDLFVBQXdDLElBQWU7Ozs7Ozt3QkFDbkQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7d0JBQ1AscUJBQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFBOzt3QkFBdkYsT0FBTyxHQUFHLFNBQTZFO3dCQUU3RixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxLQUFLOzRCQUNwQyxJQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNoRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDakYsQ0FBQyxDQUFDLENBQUM7d0JBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQ3BCLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUN0RCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxZQUFBLEVBQUUsQ0FBQyxDQUFDOzs7OztLQUlsQztJQUVhLDREQUFtQixHQUFqQzs7Ozs7NEJBQ3NCLHFCQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMseUNBQXlDLENBQUMsRUFBQTs7d0JBQXRHLFNBQVMsR0FBRyxTQUEwRjt3QkFFNUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRTs0QkFDcEMsSUFBSSxDQUFDLGlCQUFpQix5QkFBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUssU0FBUyxDQUFFLENBQUM7eUJBQ3hFOzs7OztLQUlKO0lBRU8scURBQVksR0FBcEIsVUFBcUIsSUFBWSxFQUFFLEtBQVUsRUFBRSxRQUFpQjtRQUM1RCxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQUMsUUFBYSxJQUFLLE9BQUcsSUFBSSxhQUFRLFFBQVEsTUFBRyxFQUExQixDQUEwQixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFHLENBQUMsQ0FBQyxDQUFJLElBQUksYUFBUSxLQUFLLE1BQUcsQ0FBQztJQUM3SCxDQUFDO0lBRU8sc0VBQTZCLEdBQXJDO1FBQ0ksSUFBTSxZQUFZLEdBQUc7WUFDakIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDhEQUE4RCxDQUFDO2dCQUM3RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxNQUFNO2dCQUNaLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw4REFBOEQsQ0FBQztnQkFDN0YsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7U0FDTCxDQUFDO1FBRUYscUNBQXFDO1FBQ3JDLG1DQUFtQztRQUVuQyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8sMEVBQWlDLEdBQXpDO1FBQ0ksSUFBTSxnQkFBZ0IsR0FBRztZQUNyQixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsOERBQThELENBQUM7Z0JBQzdGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLE1BQU07Z0JBQ1osS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDhEQUE4RCxDQUFDO2dCQUM3RixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07YUFDekIsQ0FBQztTQUNMLENBQUM7UUFFRiwwQ0FBMEM7UUFDMUMsd0NBQXdDO1FBRXhDLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdFQUF1QixHQUEvQjtRQUNJLElBQU0sWUFBWSxHQUFHO1lBQ2pCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywwRUFBMEUsQ0FBQztnQkFDekcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ3RGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztnQkFDaEcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0ZBQXdGLENBQUM7Z0JBQ3ZILElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDcEMsQ0FBQztTQUNMLENBQUM7UUFFRix5Q0FBeUM7UUFDekMsdUNBQXVDO1FBRXZDLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxvRUFBMkIsR0FBbkM7UUFDSSxJQUFNLGdCQUFnQixHQUFHO1lBQ3JCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywwRUFBMEUsQ0FBQztnQkFDekcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ3RGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztnQkFDaEcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0ZBQXdGLENBQUM7Z0JBQ3ZILElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDcEMsQ0FBQztTQUNMLENBQUM7UUFFRiw4Q0FBOEM7UUFDOUMsNENBQTRDO1FBRTVDLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVPLG1FQUEwQixHQUFsQztRQUNJLElBQU0sWUFBWSxHQUFHO1lBQ2pCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywwRUFBMEUsQ0FBQztnQkFDekcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ3RGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztnQkFDaEcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0ZBQXdGLENBQUM7Z0JBQ3ZILElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDcEMsQ0FBQztTQUNMLENBQUM7UUFFRiw0Q0FBNEM7UUFDNUMsMENBQTBDO1FBRTFDLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFTyx1RUFBOEIsR0FBdEM7UUFDSSxJQUFNLGdCQUFnQixHQUFHO1lBQ3JCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQywwRUFBMEUsQ0FBQztnQkFDekcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsdURBQXVELENBQUM7Z0JBQ3RGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLGVBQWU7Z0JBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztnQkFDaEcsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0ZBQXdGLENBQUM7Z0JBQ3ZILElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7YUFDcEMsQ0FBQztTQUNMLENBQUM7UUFFRixpREFBaUQ7UUFDakQsK0NBQStDO1FBRS9DLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVNLCtEQUFzQixHQUE3QixVQUE4QixLQUFhO1FBQTNDLGlCQTJCQztRQTFCRywrQ0FBK0M7UUFDL0MsNkNBQTZDO1FBQzdDLElBQU0sSUFBSSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsVUFBQyxLQUFVLElBQUssT0FBQSxDQUFDLEVBQUUsS0FBSyxPQUFBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQXJCLENBQXFCLENBQUMsQ0FBQztRQUV4RixJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7YUFDNUMsTUFBTSxDQUFDLFVBQUMsRUFBUTtnQkFBTixjQUFJO1lBQU8sT0FBQSxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUExQixDQUEwQixDQUFDO2FBQ2hELEdBQUcsQ0FBQyxVQUFDLEVBQWM7Z0JBQVosY0FBSSxFQUFFLGNBQUk7WUFDZCxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVE7Z0JBQUUsT0FBVSxJQUFJLFlBQU8sS0FBTyxDQUFDO2lCQUN0RCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFVLElBQUksYUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFHLENBQUM7aUJBQ3hGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJO2dCQUFFLE9BQVUsSUFBSSxhQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQUcsQ0FBQztpQkFDdEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLFFBQVE7Z0JBQUUsT0FBVSxJQUFJLGFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFHLENBQUM7aUJBQ2hGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxNQUFNO2dCQUFFLE9BQU8sc0JBQW9CLElBQUksa0JBQWEsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQUssQ0FBQzs7Z0JBQzFHLE9BQVUsSUFBSSxhQUFRLEtBQUssTUFBRyxDQUFDO1FBQ3hDLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxVQUFBLEtBQUssSUFBSSxPQUFBLENBQUMsQ0FBQyxLQUFLLEVBQVAsQ0FBTyxDQUFDO2FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsQixJQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxjQUFjO2FBQ2QsSUFBSSxDQUFDLEVBQUUsV0FBVyxhQUFBLEVBQUUsYUFBYSxlQUFBLEVBQUUsSUFBSSxNQUFBLEVBQUUsQ0FBQzthQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBUyxJQUFLLE9BQUEsS0FBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUksQ0FBQywwQkFBMEIsQ0FBQyxFQUFsRSxDQUFrRSxDQUFDLENBQUM7YUFDNUYsU0FBUyxDQUFDLFVBQUMsSUFBVyxJQUFLLE9BQUEsS0FBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBbEQsQ0FBa0QsQ0FBQyxDQUFDO1FBRXBGLDZDQUE2QztRQUM3QywyQ0FBMkM7SUFDL0MsQ0FBQztJQUVNLCtEQUFzQixHQUE3QixVQUE4QixLQUFVO1FBQXhDLGlCQXFDQztRQXBDRywrQ0FBK0M7UUFDL0MsNkNBQTZDO1FBQ3JDLElBQUEsbUJBQUssRUFBRSxpQkFBSSxFQUFFLG1DQUFhLEVBQUUsNkJBQVUsQ0FBVztRQUN6RCxJQUFNLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMzQixJQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7YUFDNUMsTUFBTSxDQUFDLFVBQUMsRUFBUTtnQkFBTixjQUFJO1lBQU8sT0FBQSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQXZELENBQXVELENBQUM7YUFDN0UsR0FBRyxDQUFDLFVBQUMsRUFBYztnQkFBWixjQUFJLEVBQUUsY0FBSTtZQUNkLElBQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUvQixJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVE7Z0JBQUUsT0FBVSxJQUFJLFlBQU8sS0FBTyxDQUFDO2lCQUN0RCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFVLElBQUksYUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFHLENBQUM7aUJBQ3hGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJO2dCQUFFLE9BQVUsSUFBSSxhQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQUcsQ0FBQztpQkFDdEYsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLFFBQVE7Z0JBQUUsT0FBVSxJQUFJLGFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFHLENBQUM7aUJBQ2hGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxJQUFJO2dCQUFFLE9BQVUsSUFBSSxhQUFRLEtBQUssTUFBRyxDQUFDO2lCQUMzRCxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTTtnQkFBRSxPQUFPLHNCQUFvQixJQUFJLGtCQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFLLENBQUM7O2dCQUMxRyxPQUFVLElBQUksYUFBUSxLQUFLLE1BQUcsQ0FBQztRQUN4QyxDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxDQUFDLENBQUMsS0FBSyxFQUFQLENBQU8sQ0FBQzthQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkIsSUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsY0FBYzthQUNkLElBQUksQ0FBQyxFQUFFLElBQUksTUFBQSxFQUFFLElBQUksTUFBQSxFQUFFLFdBQVcsYUFBQSxFQUFFLGFBQWEsZUFBQSxFQUFFLENBQUM7YUFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsSUFBSSxDQUNELEdBQUcsQ0FBQyxVQUFDLElBQVMsSUFBSyxPQUFBLENBQUM7WUFDaEIsUUFBUSxFQUFFLEtBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFJLENBQUMsMEJBQTBCLENBQUM7WUFDNUUsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2hDLHVCQUF1QixFQUFFLEtBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVEQUF1RCxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxSSxDQUFDLEVBSmlCLENBSWpCLENBQUMsQ0FDTjthQUNBLFNBQVMsQ0FBQyxVQUFDLElBQVMsSUFBSyxPQUFBLEtBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQTdDLENBQTZDLENBQUMsQ0FBQztRQUU3RSw2Q0FBNkM7UUFDN0MsMkNBQTJDO0lBQy9DLENBQUM7SUFFTSxxRUFBNEIsR0FBbkMsVUFBb0MsS0FBYTtRQUFqRCxpQkEyQkM7UUExQkcsK0NBQStDO1FBQy9DLDZDQUE2QztRQUM3QyxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLFVBQUMsS0FBVSxJQUFLLE9BQUEsQ0FBQyxFQUFFLEtBQUssT0FBQSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFyQixDQUFxQixDQUFDLENBQUM7UUFFOUYsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFO2FBQ2xELE1BQU0sQ0FBQyxVQUFDLEVBQVE7Z0JBQU4sY0FBSTtZQUFPLE9BQUEsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7UUFBMUIsQ0FBMEIsQ0FBQzthQUNoRCxHQUFHLENBQUMsVUFBQyxFQUFjO2dCQUFaLGNBQUksRUFBRSxjQUFJO1lBQ2QsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRO2dCQUFFLE9BQVUsSUFBSSxZQUFPLEtBQU8sQ0FBQztpQkFDdEQsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUk7Z0JBQUUsT0FBVSxJQUFJLGFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBRyxDQUFDO2lCQUN4RixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFVLElBQUksYUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFHLENBQUM7aUJBQ3RGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxRQUFRO2dCQUFFLE9BQVUsSUFBSSxhQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBRyxDQUFDO2lCQUNoRixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsTUFBTTtnQkFBRSxPQUFPLHNCQUFvQixJQUFJLGtCQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFLLENBQUM7O2dCQUMxRyxPQUFVLElBQUksYUFBUSxLQUFLLE1BQUcsQ0FBQztRQUN4QyxDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxDQUFDLENBQUMsS0FBSyxFQUFQLENBQU8sQ0FBQzthQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbEIsSUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUNsSCxJQUFJLENBQUMsb0JBQW9CO2FBQ3BCLElBQUksQ0FBQyxFQUFFLFdBQVcsYUFBQSxFQUFFLGFBQWEsZUFBQSxFQUFFLElBQUksTUFBQSxFQUFFLENBQUM7YUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFDLElBQVMsSUFBSyxPQUFBLEtBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFJLENBQUMsZ0NBQWdDLENBQUMsRUFBeEUsQ0FBd0UsQ0FBQyxDQUFDO2FBQ2xHLFNBQVMsQ0FBQyxVQUFDLElBQVcsSUFBSyxPQUFBLEtBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQXhELENBQXdELENBQUMsQ0FBQztRQUUxRiw2Q0FBNkM7UUFDN0MsMkNBQTJDO0lBQy9DLENBQUM7SUFFTSxxRUFBNEIsR0FBbkMsVUFBb0MsS0FBVTtRQUE5QyxpQkFxQ0M7UUFwQ0csK0NBQStDO1FBQy9DLDZDQUE2QztRQUNyQyxJQUFBLG1CQUFLLEVBQUUsaUJBQUksRUFBRSxtQ0FBYSxFQUFFLDZCQUFVLENBQVc7UUFDekQsSUFBTSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFNLElBQUksR0FBRyxhQUFhLENBQUM7UUFDM0IsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFO2FBQ2xELE1BQU0sQ0FBQyxVQUFDLEVBQVE7Z0JBQU4sY0FBSTtZQUFPLE9BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUF2RCxDQUF1RCxDQUFDO2FBQzdFLEdBQUcsQ0FBQyxVQUFDLEVBQWM7Z0JBQVosY0FBSSxFQUFFLGNBQUk7WUFDZCxJQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRO2dCQUFFLE9BQVUsSUFBSSxZQUFPLEtBQU8sQ0FBQztpQkFDdEQsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLElBQUk7Z0JBQUUsT0FBVSxJQUFJLGFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBRyxDQUFDO2lCQUN4RixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFVLElBQUksYUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFHLENBQUM7aUJBQ3RGLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxRQUFRO2dCQUFFLE9BQVUsSUFBSSxhQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBRyxDQUFDO2lCQUNoRixJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSTtnQkFBRSxPQUFVLElBQUksYUFBUSxLQUFLLE1BQUcsQ0FBQztpQkFDM0QsSUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxzQkFBb0IsSUFBSSxrQkFBYSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBSyxDQUFDOztnQkFDMUcsT0FBVSxJQUFJLGFBQVEsS0FBSyxNQUFHLENBQUM7UUFDeEMsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsQ0FBQyxDQUFDLEtBQUssRUFBUCxDQUFPLENBQUM7YUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5CLElBQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDbEgsSUFBSSxDQUFDLG9CQUFvQjthQUNwQixJQUFJLENBQUMsRUFBRSxJQUFJLE1BQUEsRUFBRSxJQUFJLE1BQUEsRUFBRSxXQUFXLGFBQUEsRUFBRSxhQUFhLGVBQUEsRUFBRSxDQUFDO2FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLElBQUksQ0FDRCxHQUFHLENBQUMsVUFBQyxJQUFTLElBQUssT0FBQSxDQUFDO1lBQ2hCLFFBQVEsRUFBRSxLQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSSxDQUFDLGdDQUFnQyxDQUFDO1lBQ2xGLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyx1QkFBdUIsRUFBRSxLQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1REFBdUQsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUksQ0FBQyxFQUppQixDQUlqQixDQUFDLENBQ047YUFDQSxTQUFTLENBQUMsVUFBQyxJQUFTLElBQUssT0FBQSxLQUFJLENBQUMsbUNBQW1DLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFuRCxDQUFtRCxDQUFDLENBQUM7UUFFbkYsNkNBQTZDO1FBQzdDLDJDQUEyQztJQUMvQyxDQUFDO0lBRU8sK0RBQXNCLEdBQTlCO1FBQ0ksSUFBTSxZQUFZLEdBQUc7WUFDakIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHlEQUF5RCxDQUFDO2dCQUN4RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx5REFBeUQsQ0FBQztnQkFDeEYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7U0FDTCxDQUFDO1FBRUYseUNBQXlDO1FBQ3pDLHVDQUF1QztRQUV2QyxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRU8sbUVBQTBCLEdBQWxDO1FBQ0ksSUFBTSxnQkFBZ0IsR0FBRztZQUNyQixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMseURBQXlELENBQUM7Z0JBQ3hGLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTzthQUMxQixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHlEQUF5RCxDQUFDO2dCQUN4RixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07YUFDekIsQ0FBQztTQUNMLENBQUM7UUFFRiw4Q0FBOEM7UUFDOUMsNENBQTRDO1FBRTVDLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztJQUVPLHFFQUE0QixHQUFwQztRQUNJLElBQU0sWUFBWSxHQUFHO1lBQ2pCLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2REFBNkQsQ0FBQztnQkFDNUYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPO2FBQzFCLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQztnQkFDVixJQUFJLEVBQUUsUUFBUTtnQkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkRBQTZELENBQUM7Z0JBQzVGLElBQUksRUFBRSxTQUFTLENBQUMsTUFBTTthQUN6QixDQUFDO1NBQ0wsQ0FBQztRQUVGLHlDQUF5QztRQUN6Qyx1Q0FBdUM7UUFFdkMsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLHlFQUFnQyxHQUF4QztRQUNJLElBQU0sZ0JBQWdCLEdBQUc7WUFDckIsSUFBSSxTQUFTLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDZEQUE2RCxDQUFDO2dCQUM1RixJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDO2dCQUNWLElBQUksRUFBRSxRQUFRO2dCQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2REFBNkQsQ0FBQztnQkFDNUYsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQ3pCLENBQUM7U0FDTCxDQUFDO1FBRUYsOENBQThDO1FBQzlDLDRDQUE0QztRQUU1QyxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTyxtREFBVSxHQUFsQixVQUFtQixVQUEyQjtRQUE5QyxpQkF3R0M7UUF4R2tCLDJCQUFBLEVBQUEsZUFBMkI7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQix5QkFBUSxJQUFJLENBQUMsaUJBQWlCLEdBQUssVUFBVSxDQUFFLENBQUM7UUFDaEUsSUFBQSwyQkFBbUQsRUFBakQsY0FBSSxFQUFFLGNBQUksRUFBRSwwQkFBcUMsQ0FBQztRQUNwRCxJQUFBLGtDQUFJLENBQTRCO1FBRXRDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVk7YUFDaEMsTUFBTSxDQUFDLFVBQUMsRUFBUTtnQkFBTixjQUFJO1lBQU8sT0FBQSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQTdDLENBQTZDLENBQUM7YUFDbkUsR0FBRyxDQUFDLFVBQUMsRUFBaUQ7Z0JBQS9DLGNBQUksRUFBRSxnQkFBSyxFQUFFLGNBQUksRUFBRSw4QkFBWSxFQUFFLG9CQUFPO1lBQzVDLElBQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFFdkIsSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDekIsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDcEMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDOUM7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDbEMsSUFBTSxtQkFBbUIsR0FBRyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUNoRyxVQUFVLEdBQUcsbUJBQW1CO3FCQUMzQixHQUFHLENBQUMsVUFBQyxLQUFnQjtvQkFDbEIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQzdCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUN2RDtvQkFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUsscUNBQXFDLEVBQUU7d0JBQ3RELEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztxQkFDakU7b0JBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BCO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQUMsTUFBYyxJQUFLLE9BQUEsTUFBTSxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQTNCLENBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDekY7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDbkMsVUFBVSxHQUFHLEtBQUs7b0JBQ2QsQ0FBQyxDQUFDLEtBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGdFQUFnRSxDQUFDO29CQUMxRixDQUFDLENBQUMsS0FBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUVBQWlFLENBQUMsQ0FBQzthQUNuRztZQUVELE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBSyxLQUFLLFVBQUssVUFBWSxFQUFFLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWTthQUM5QixNQUFNLENBQUMsVUFBQyxFQUFRO2dCQUFOLGNBQUk7WUFBTyxPQUFBLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQWxCLENBQWtCLENBQUM7YUFDeEMsR0FBRyxDQUFDLFVBQUMsRUFBd0I7Z0JBQXRCLGNBQUksRUFBRSxjQUFJLEVBQUUsc0JBQVE7WUFDeEIsSUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRS9CLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUMzQixPQUFVLElBQUksWUFBTyxLQUFPLENBQUM7YUFDaEM7aUJBQU0sSUFBSSxJQUFJLElBQUksbUJBQW1CLEVBQUU7Z0JBQ3BDLE9BQU8sNkJBQTZCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDL0M7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBVSxJQUFJLGFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBRyxDQUFDO2FBQy9EO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2hDLE9BQVUsSUFBSSxhQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQUcsQ0FBQzthQUM3RDtpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUNwQyxPQUFVLElBQUksYUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQUcsQ0FBQzthQUNuRDtpQkFBTSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUNsQyxPQUFPLHNCQUFvQixJQUFJLGtCQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFLLENBQUM7YUFDL0U7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtnQkFDaEMsT0FBTyxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDbkQ7aUJBQU0sSUFBSSxJQUFJLEtBQUssU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDbEMsT0FBVSxJQUFJLGFBQVEsS0FBSyxDQUFDLEVBQUUsTUFBRyxDQUFDO2FBQ3JDO2lCQUFNO2dCQUNILE9BQVUsSUFBSSxhQUFRLEtBQUssTUFBRyxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRW5CLFdBQVcsR0FBRyxXQUFXO2FBQ3BCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsc0JBQXNCLENBQUM7YUFDOUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLDRDQUE0QyxDQUFDO2FBQ3pFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFBO1FBRWxGLElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQUEsTUFBTSxJQUFJLE9BQUEsTUFBTSxDQUFDLEtBQUssRUFBWixDQUFZLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyRDtRQUVELElBQUksQ0FBQyx3QkFBd0I7YUFDeEIsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFBLEVBQUUsSUFBSSxNQUFBLEVBQUUsSUFBSSxNQUFBLEVBQUUsV0FBVyxhQUFBLEVBQUUsYUFBYSxlQUFBLEVBQUUsQ0FBQzthQUN0RCxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDN0IsVUFBVSxDQUFDLFVBQUMsR0FBUTtZQUNoQixJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUN2QyxLQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUMzQjtZQUNELE1BQU0sR0FBRyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDO1lBQ0wsS0FBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQ0w7YUFDQSxTQUFTLENBQUMsVUFBQyxJQUFTO1lBQ2pCLEtBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLEtBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM5QixLQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDdkMsS0FBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sa0RBQVMsR0FBaEIsVUFBaUIsVUFBdUI7UUFDcEMsSUFBSSxVQUFVLEVBQUU7WUFDWixJQUFJLENBQUMsaUJBQWlCLHlCQUFRLElBQUksQ0FBQyxpQkFBaUIsR0FBSyxVQUFVLENBQUUsQ0FBQztTQUN6RTtRQUNELElBQUksQ0FBQyxpQkFBaUIseUJBQVEsSUFBSSxDQUFDLGlCQUFpQixLQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRSxDQUFDO1FBQzFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLDhEQUFxQixHQUE3QixVQUE4QixTQUFvQjtRQUFsRCxpQkFTQztRQVJHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLEtBQUs7WUFDekMsSUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQyxJQUFJLE9BQU8sWUFBWSxXQUFXLEVBQUU7Z0JBQ2hDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUMzQztpQkFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7Z0JBQ3JDLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN2QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLHFEQUFZLEdBQW5CO1FBQ0ksT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxvREFBVyxHQUFsQjtRQUNJLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztJQUN2QyxDQUFDO0lBRU0sb0RBQVcsR0FBbEI7UUFDSSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztJQUNyRSxDQUFDO0lBRUQsNEJBQTRCO0lBQ3BCLDBEQUFpQixHQUF6QixVQUEwQixLQUFhO1FBQ25DLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBakIsQ0FBaUIsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUNySixDQUFDO0lBRU0sd0RBQWUsR0FBdEI7UUFDSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsSCxDQUFDO0lBRU0sMkRBQWtCLEdBQXpCO1FBQ0ksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEgsQ0FBQzs7Z0JBNW1DbUIsTUFBTTtnQkFDUCxjQUFjO2dCQUNLLHdCQUF3QjtnQkFDN0IsbUJBQW1CO2dCQUM5QixnQkFBZ0I7Z0JBQ1gsY0FBYztnQkFDYixjQUFjO2dCQUNqQixXQUFXO2dCQUNELHFCQUFxQjtnQkFDbkIsdUJBQXVCO2dCQUMvQixlQUFlO2dCQUNULHFCQUFxQjtnQkFDNUIsY0FBYztnQkFDUixjQUFjO2dCQUNiLHFCQUFxQjtnQkFDcEIseUJBQXlCOztJQXhGN0Q7UUFEQyxTQUFTLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7aUVBQ25DO0lBa0JwQjtRQURDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQzswRUFDUDtJQUd4QztRQURDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQzs4RUFDUDtJQUc1QztRQURDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQzs4RUFDUDtJQUc1QztRQURDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQzs0RUFDUDtJQUcxQztRQURDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQzswRUFDUDtJQWxEL0IsOEJBQThCO1FBZjFDLFNBQVMsQ0FBQztZQUNQLHEyWkFBdUQ7WUFLdkQsUUFBUSxFQUFFLHdCQUF3QjtZQUNsQyxTQUFTLEVBQUU7Z0JBQ1AsbUJBQW1CO2FBR3RCO1NBR0osQ0FBQztPQUNXLDhCQUE4QixDQTJzQzFDO0lBQUQscUNBQUM7Q0FBQSxBQTNzQ0QsQ0FBb0QsOEJBQThCLEdBMnNDakY7U0Ezc0NZLDhCQUE4QjtBQW90QzNDLDRCQUE0QjtBQUM1QiwwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRmllbGRUeXBlLCBGb3JtRmllbGQsIElUb2tlbiwgT3B0aW9uIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cyc7XG5pbXBvcnQgeyBIb3RrZXksIEhvdGtleXNTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhcjItaG90a2V5cyc7XG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBMYXp5TG9hZEV2ZW50LCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UsIFNvcnRNZXRhIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFN1YmplY3QsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFMDcwRW1wU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW50aXRpZXMvZS0wNzAtZW1wL2UtMDcwLWVtcC5zZXJ2aWNlJztcbmltcG9ydCB7IEUwNzBGaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnRpdGllcy9lLTA3MC1maWwvZS0wNzAtZmlsLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBBbm5vdGF0aW9uSGlzdG9yeSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW50aXRpZXMvYW5ub3RhdGlvbi1oaXN0b3J5L2Fubm90YXRpb24taGlzdG9yeSc7XG5pbXBvcnQgeyBBbm5vdGF0aW9uSGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudGl0aWVzL2Fubm90YXRpb24taGlzdG9yeS9hbm5vdGF0aW9uLWhpc3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBBbm5vdGF0aW9uVHlwZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudGl0aWVzL2Fubm90YXRpb24tdHlwZS9hbm5vdGF0aW9uLXR5cGUuc2VydmljZSc7XG5pbXBvcnQgeyBFbXBsb3llZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudGl0aWVzL2VtcGxveWVlL2VtcGxveWVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29sbGVjdGl2ZVByb2Nlc3NUeXBlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvcmUvZW51bXMvY29sbGVjdGl2ZS1wcm9jZXNzLXR5cGVcIjtcbmltcG9ydCB7IENvbnRyYWN0VHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW51bXMvY29udHJhY3QtdHlwZSc7XG5pbXBvcnQgeyBGaWx0ZXJzU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvc3RvcmFnZS9maWx0ZXJzLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdpbmF0b3JTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9zdG9yYWdlL3BhZ2luYXRvci1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEhpc3RvcnlHcmlkQ29sdW1ucywgZ2V0UmVjb3JkTGFiZWwsIGdldFNpdHVhdGlvbkZpbHRlckluSGlzdG9yaWNzLCBpc1ZhbGlkRmlsdGVyLCBtZXJnZVVuaXF1ZSwgc2l0dWF0aW9uT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC91dGlscy91dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJTdHJpbmcgfSBmcm9tICcuLi8uLi8uLi91dGlscy9oZWxwZXJzJztcbmltcG9ydCB7IEJhc2VDb2xsZWN0aXZlSGlzdG9yeUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Jhc2UtY29sbGVjdGl2ZS1oaXN0b3J5L2Jhc2UtY29sbGVjdGl2ZS1oaXN0b3J5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXBsb3llZUxvb2t1cFNlcnZpY2UsIEVudGl0eUxvb2t1cENvbmZpZ1NlcnZpY2UgfSBmcm9tICdAc2VuaW9yLWdlc3Rhby1wZXNzb2FzL2hjbS1lbnRpdHktbG9va3Vwcyc7XG5pbXBvcnQgeyBTaXR1YXRpb25FbXBsb3llZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW51bXMvc2l0dWF0aW9uLWVtcGxveWVlJztcblxuLyp7Q0E6RVhURVJOQUxfSU1QT1JUUzpTVEFSVH0qL1xuY29uc3QgbW9tZW50ID0gbW9tZW50XzsgLy8gQEhBQ0sgTmVjZXNzYXJ5IGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL3JvbGx1cC9yb2xsdXAvaXNzdWVzLzY3MFxuLyp7Q0E6RVhURVJOQUxfSU1QT1JUUzpFTkR9Ki9cblxuLyp7Q0E6UFJPSkVDVF9JTVBPUlRTOlNUQVJUfSovXG4vKntDQTpQUk9KRUNUX0lNUE9SVFM6RU5EfSovXG5cbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlVXJsOiBcIi4vYW5ub3RhdGlvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgLyp7Q0E6Q09NUE9ORU5UX1NUWUxFX1VSTFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6Q09NUE9ORU5UX1NUWUxFX1VSTFM6RU5EfSovXG4gICAgXSxcbiAgICBzZWxlY3RvcjogXCJmbmQtYW5ub3RhdGlvbi1oaXN0b3J5XCIsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIC8qe0NBOkNPTVBPTkVOVF9QUk9WSURFUlM6U1RBUlR9XG4gICAgICAgIC8qe0NBOkNPTVBPTkVOVF9QUk9WSURFUlM6RU5EfSovXG4gICAgXSxcbiAgICAvKntDQTpDT01QT05FTlRfQ09ORklHOlNUQVJUfSovXG4gICAgLyp7Q0E6Q09NUE9ORU5UX0NPTkZJRzpFTkR9Ki9cbn0pXG5leHBvcnQgY2xhc3MgQW5ub3RhdGlvbkhpc3RvcnlMaXN0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbGxlY3RpdmVIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kgLyp7Q0E6Q0xBU1NfSU5URVJGQUNFUzpTVEFSVH0qLyAvKntDQTpDTEFTU19JTlRFUkZBQ0VTOkVORH0qLyB7XG4gICAgcHVibGljIGFsbFBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgcGVybWlzc2lvbnM6IGFueSA9IHt9O1xuICAgIHB1YmxpYyBsb2NhbGVDb25maWc6IGFueSA9IHt9O1xuXG4gICAgcHVibGljIGN1cnJlbnRMaXN0UGFyYW1zOiBMaXN0UGFyYW1zID0geyBwYWdlOiAwLCBzaXplOiAxMCwgc29ydDogW10sIGZpbHRlckRhdGE6IHt9IH07XG4gICAgcHVibGljIGdyaWREYXRhOiBBbm5vdGF0aW9uSGlzdG9yeVtdO1xuICAgIHB1YmxpYyBncmlkQ29sdW1uczogYW55W107XG4gICAgcHVibGljIHNob3dMb2FkZXI6IGJvb2xlYW47XG4gICAgcHVibGljIHRvdGFsUmVjb3JkczogbnVtYmVyO1xuICAgIHB1YmxpYyBzZWxlY3Rpb246IEFubm90YXRpb25IaXN0b3J5W107XG5cbiAgICBwdWJsaWMgZmlsdGVyRmllbGRzOiBGb3JtRmllbGRbXTtcbiAgICBwdWJsaWMgZmlsdGVyRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gICAgcHVibGljIGZpbHRlcnNQYW5lbENvbGxhcHNlZCA9IHRydWU7XG4gICAgcHVibGljIHNlYXJjaFRva2VuczogSVRva2VuW10gPSBbXTtcbiAgICBwdWJsaWMgc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICBwdWJsaWMgZmlsdGVyc0xvYWRlZCA9IGZhbHNlO1xuXG4gICAgQFZpZXdDaGlsZChcImFubm90YXRpb25IaXN0b3J5VGFibGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIHRhYmxlOiBUYWJsZTtcblxuICAgIHB1YmxpYyBhbm5vdGF0aW9uVHlwZUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RlXCIsIFwibmFtZVwiXTtcbiAgICBwdWJsaWMgYW5ub3RhdGlvblR5cGVBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJjb2RlXCIsIFwibmFtZVwiXTtcblxuICAgIHB1YmxpYyBlbXBsb3llZUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJlbXBsb3llci5jb2RFbXBcIiwgXCJjb2RlXCIsIFwicGVyc29uLm5vbVBlc1wiLCBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCJdO1xuICAgIHB1YmxpYyBlbXBsb3llZUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImVtcGxveWVyLmNvZEVtcFwiLCBcImNvZGVcIiwgXCJwZXJzb24ubm9tUGVzXCIsIFwiZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGVcIl07XG5cbiAgICBwdWJsaWMgcmVzcG9uc2libGVMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kZVwiLCBcInBlcnNvbi5ub21QZXNcIl07XG4gICAgcHVibGljIHJlc3BvbnNpYmxlQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiY29kZVwiLCBcInBlcnNvbi5ub21QZXNcIl07XG5cbiAgICBwdWJsaWMgY29tcGFueUxvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RFbXBcIiwgXCJub21FbXBcIl07XG4gICAgcHVibGljIGNvbXBhbnlBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJjb2RFbXBcIiwgXCJub21FbXBcIl07XG5cbiAgICBwdWJsaWMgY29tcGFueUJyYW5jaExvb2t1cERpc3BsYXlGaWVsZHMgPSBbXCJjb2RGaWxcIiwgXCJub21GaWxcIl07XG4gICAgcHVibGljIGNvbXBhbnlCcmFuY2hBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJjb2RGaWxcIiwgXCJub21GaWxcIl07XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tVGVtcGxhdGVcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGN1c3RvbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZChcImN1c3RvbUZpbHRlckZpZWxkc1wiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgY3VzdG9tRmlsdGVyRmllbGRzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZChcImN1c3RvbUdyaWRDb2xncm91cFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICBwdWJsaWMgY3VzdG9tR3JpZENvbGdyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZChcImN1c3RvbUdyaWRIZWFkZXJcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGN1c3RvbUdyaWRIZWFkZXI6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAVmlld0NoaWxkKFwiY3VzdG9tR3JpZEJvZHlcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGN1c3RvbUdyaWRCb2R5OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyp7Q0E6Q0xBU1NfQVRUUklCVVRFUzpTVEFSVH0qL1xuICAgIHB1YmxpYyBjb250cmFjdFR5cGVPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb250cmFjdF90eXBlX2VtcGxveWVlXCIpLFxuICAgICAgICAgICAgdmFsdWU6IENvbnRyYWN0VHlwZS5FTVBMT1lFRVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb250cmFjdF90eXBlX2RpcmVjdG9yXCIpLFxuICAgICAgICAgICAgdmFsdWU6IENvbnRyYWN0VHlwZS5ESVJFQ1RPUlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb250cmFjdF90eXBlX3RyYWluZWVcIiksXG4gICAgICAgICAgICB2YWx1ZTogQ29udHJhY3RUeXBlLlRSQUlORUVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29udHJhY3RfdHlwZV9hcHJlbnRpY2VcIiksXG4gICAgICAgICAgICB2YWx1ZTogQ29udHJhY3RUeXBlLkFQUkVOVElDRVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb250cmFjdF90eXBlX3RoaXJkX3BhcnR5XCIpLFxuICAgICAgICAgICAgdmFsdWU6IENvbnRyYWN0VHlwZS5USElSRF9QQVJUWVxuICAgICAgICB9LFxuICAgIF07XG4gICAgLyp7Q0E6Q0xBU1NfQVRUUklCVVRFUzpFTkR9Ki9cblxuICAgIHByaXZhdGUgYW5ub3RhdGlvblR5cGVMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgYW5ub3RhdGlvblR5cGVMb29rdXBTZWFyY2hPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgcmVzcG9uc2libGVMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgcmVzcG9uc2libGVMb29rdXBTZWFyY2hPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgY29tcGFueUxvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSBjb21wYW55TG9va3VwU2VhcmNoT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSBjb21wYW55QnJhbmNoTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIGNvbXBhbnlCcmFuY2hMb29rdXBTZWFyY2hPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHB1YmxpYyBjb2xsZWN0aXZlQWN0aW9uczogTWVudUl0ZW1bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIC8qe0NBOklOSkVDVElPTlM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6SU5KRUNUSU9OUzpFTkR9Ki9cbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgYW5ub3RhdGlvbkhpc3RvcnlTZXJ2aWNlOiBBbm5vdGF0aW9uSGlzdG9yeVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHVibGljIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBob3RrZXlzU2VydmljZTogSG90a2V5c1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIGZpbHRlcnNTdG9yYWdlU2VydmljZTogRmlsdGVyc1N0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlOiBQYWdpbmF0b3JTdG9yYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbXBsb3llZVNlcnZpY2U6IEVtcGxveWVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhbm5vdGF0aW9uVHlwZVNlcnZpY2U6IEFubm90YXRpb25UeXBlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21wYW55U2VydmljZTogRTA3MEVtcFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29tcGFueUJyYW5jaFNlcnZpY2U6IEUwNzBGaWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVtcGxveWVlTG9va3VwU2VydmljZTogRW1wbG95ZWVMb29rdXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IEVudGl0eUxvb2t1cENvbmZpZ1NlcnZpY2VcbiAgICApIHtcbiAgICAgICAgLyp7Q0E6Q09OU1RSVUNUT1JfRU5EOlNUQVJUfSovXG4gICAgICAgIHN1cGVyKHRyYW5zbGF0ZSk7XG4gICAgICAgIC8qe0NBOkNPTlNUUlVDVE9SX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIC8qe0NBOk9OX0lOSVRfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fSU5JVF9TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLnJvdXRlLmRhdGEucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMub25Sb3V0ZURhdGFDaGFuZ2UoZGF0YSkpO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgICAgICBlbXBsb3llcjogW3VuZGVmaW5lZCwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBjb21wYW55QnJhbmNoOiBbdW5kZWZpbmVkLCBWYWxpZGF0b3JzLmNvbXBvc2UoW10pXSxcbiAgICAgICAgICAgIGNvbnRyYWN0VHlwZTogW3VuZGVmaW5lZCwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBlbXBsb3llZTogW3VuZGVmaW5lZCwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBhbm5vdGF0aW9uVHlwZTogW3VuZGVmaW5lZCwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBlbXBsb3llZVNpdHVhdGlvbjogW3VuZGVmaW5lZCwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2V0U3RvcmFnZVBhZ2luYXRvcigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RvcmFnZUZpbHRlcnNJbnRvRm9ybSh0aGlzLmZpbHRlckZvcm1Hcm91cCk7XG4gICAgICAgIHRoaXMuZ3JpZENvbHVtbnMgPSB0aGlzLmdldEdyaWRDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMoKTtcblxuICAgICAgICB0aGlzLnNldEhvdGtleXMoKTtcblxuICAgICAgICAvKntDQTpPTl9JTklUX0VORDpTVEFSVH0qL1xuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5pbmNsdWlyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3RpdmVBY3Rpb25zLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfY29udHJhY3QuYWRkX2NvbGxlY3RpdmUnKSwgY29tbWFuZDogKCkgPT4gIHRoaXMub25BZGRDb2xsZWN0aXZlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMuZXhjbHVpcikge1xuICAgICAgICAgICAgdGhpcy5jb2xsZWN0aXZlQWN0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2hjbV9jb250cmFjdC5lbXBsb3ltZW50X2NvbnRyYWN0LnJlbW92ZV9jb2xsZWN0aXZlJyksIGNvbW1hbmQ6ICgpID0+IHRoaXMub25SZW1vdmVDb2xsZWN0aXZlKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIC8qe0NBOk9OX0lOSVRfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLyp7Q0E6T05fREVTVFJPWV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ERVNUUk9ZX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuXG4gICAgICAgIC8qe0NBOk9OX0RFU1RST1lfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0RFU1RST1lfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRIb3RrZXlzKCkge1xuICAgICAgICAvKntDQTpTRVRfSE9US0VZU19TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpTRVRfSE9US0VZU19TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgICAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgICAgICAgICAgXCJhbHQrc2hpZnQrZVwiLFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVkaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K3hcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvbi5sZW5ndGggJiYgdGhpcy5wZXJtaXNzaW9ucy5leGNsdWlyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtuXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5pbmNsdWlyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQWRkKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtmXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgICAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgICAgICAgICAgXCJhbHQrc2hpZnQrbFwiLFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICAvKntDQTpTRVRfSE9US0VZU19FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6U0VUX0hPVEtFWVNfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJvdXRlRGF0YUNoYW5nZShkYXRhOiBhbnkpIHtcbiAgICAgICAgLyp7Q0E6T05fUk9VVEVfREFUQV9DSEFOR0VfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUk9VVEVfREFUQV9DSEFOR0VfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5hbGxQZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnM7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBkYXRhLmFsbFBlcm1pc3Npb25zLmFubm90YXRpb25IaXN0b3J5O1xuICAgICAgICB0aGlzLmxvY2FsZUNvbmZpZyA9IGRhdGEubG9jYWxlQ29uZmlnO1xuXG4gICAgICAgIC8qe0NBOk9OX1JPVVRFX0RBVEFfQ0hBTkdFX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ST1VURV9EQVRBX0NIQU5HRV9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgLy8gVmVyaWZpY2Egc2UgbyBvYmpldG8gcG9zc3VpIHVtIHZhbG9yIHF1ZSBmb2kgYWx0ZXJhZG8gcGFyYSBcIlwiIChTdHJpbmcgdmF6aWEpIGFvIGludmVzIGRlIG51bGwgb3UgdW5kZWZpbmVkXG4gICAgcHJpdmF0ZSBoYXNFbXB0eSh0YXJnZXQ6IGFueSkge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGFyZ2V0KS5maWx0ZXIoa2V5ID0+IHRhcmdldFtrZXldID09PSBcIlwiKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNlYXJjaCgpIHtcbiAgICAgICAgLyp7Q0E6T05fU0VBUkNIX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1NFQVJDSF9TVEFSVDpFTkR9Ki9cblxuICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcblxuICAgICAgICBpZiAodGhpcy5oYXNFbXB0eShmaWx0ZXJEYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJzUGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKHRoaXMuZmlsdGVyRm9ybUdyb3VwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMucGFnZSA9IDA7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnNQYW5lbENvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlc2V0R3JpZCh7IGZpbHRlckRhdGEgfSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnNTdG9yYWdlU2VydmljZS5zdG9yZUZpbHRlcnMoXCJBbm5vdGF0aW9uSGlzdG9yeUxpc3RDb21wb25lbnRcIiwgZmlsdGVyRGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKntDQTpPTl9TRUFSQ0hfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1NFQVJDSF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXIoKSB7XG4gICAgICAgIC8qe0NBOk9OX0NMRUFSX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0NMRUFSX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLnJlc2V0KCk7XG4gICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICB0aGlzLnJlc2V0R3JpZCh7IGZpbHRlckRhdGEgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVyc1N0b3JhZ2VTZXJ2aWNlLnJlbW92ZUZpbHRlcihcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFwiKTtcblxuICAgICAgICAvKntDQTpPTl9DTEVBUl9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fQ0xFQVJfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZVRva2VuKHRva2VuOiBJVG9rZW4pIHtcbiAgICAgICAgLyp7Q0E6T05fUkVNT1ZFX1RPS0VOX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1JFTU9WRV9UT0tFTl9TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQodG9rZW4uaWQpLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICB0aGlzLnJlc2V0R3JpZCh7IGZpbHRlckRhdGEgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVyc1N0b3JhZ2VTZXJ2aWNlLmNsZWFyRmlsdGVyVmFsdWUoXCJBbm5vdGF0aW9uSGlzdG9yeUxpc3RDb21wb25lbnRcIiwgZmlsdGVyRGF0YSk7XG5cbiAgICAgICAgLyp7Q0E6T05fUkVNT1ZFX1RPS0VOX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9SRU1PVkVfVE9LRU5fRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkdyaWRDaGFuZ2UoZXZlbnQ6IExhenlMb2FkRXZlbnQpIHtcbiAgICAgICAgLyp7Q0E6T05fR1JJRF9DSEFOR0VfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fR1JJRF9DSEFOR0VfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IGV2ZW50LnJvd3M7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBldmVudC5maXJzdCAvIHNpemU7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBldmVudC5tdWx0aVNvcnRNZXRhO1xuXG4gICAgICAgIGlmIChzaXplICE9PSAxMCB8fCBwYWdlICE9PSAwIHx8IHNvcnQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yU3RvcmFnZVNlcnZpY2Uuc3RvcmVQYWdpbmF0b3IoXCJBbm5vdGF0aW9uSGlzdG9yeUxpc3RDb21wb25lbnRQYWdpbmF0b3JcIiwgeyBwYWdlLCBzaXplLCBzb3J0IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlR3JpZCh7IHBhZ2UsIHNpemUsIHNvcnQgfSk7XG5cbiAgICAgICAgLyp7Q0E6T05fR1JJRF9DSEFOR0VfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0dSSURfQ0hBTkdFX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BZGQoKSB7XG4gICAgICAgIC8qe0NBOk9OX0FERF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9BRERfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wibmV3XCJdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG5cbiAgICAgICAgLyp7Q0E6T05fQUREX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9BRERfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkVkaXQoKSB7XG4gICAgICAgIC8qe0NBOk9OX0VESVRfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRURJVF9TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5zZWxlY3Rpb25bMF0uaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG5cbiAgICAgICAgLyp7Q0E6T05fRURJVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRURJVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uRGVsZXRlKCkge1xuICAgICAgICAvKntDQTpPTl9ERUxFVEVfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fREVMRVRFX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlX2NvbmZpcm1hdGlvbl9tZXNzYWdlXCIpLFxuICAgICAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmRlbGV0ZV9jb25maXJtYXRpb25fdGl0bGVcIiksXG4gICAgICAgICAgICBhY2NlcHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcmtKb2luKHRoaXMuc2VsZWN0aW9uLm1hcChhbm5vdGF0aW9uSGlzdG9yeSA9PiB0aGlzLmFubm90YXRpb25IaXN0b3J5U2VydmljZS5kZWxldGUoYW5ub3RhdGlvbkhpc3RvcnkuaWQpKSlcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfRklOQUxJWkVfVE9QOlNUQVJUfSovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX0ZJTkFMSVpFX1RPUDpFTkR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0R3JpZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9GSU5BTElaRV9CT1RUT006U1RBUlR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfRklOQUxJWkVfQk9UVE9NOkVORH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVF9UT1A6U1RBUlR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfU1RBUlRfVE9QOkVORH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6IFwic3VjY2Vzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmRlbGV0ZWRfbWVzc2FnZV90aXRsZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmRlbGV0ZWRfbWVzc2FnZV9jb250ZW50XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVF9CT1RUT006U1RBUlR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfU1RBUlRfQk9UVE9NOkVORH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfRVJST1JfVE9QOlNUQVJUfSovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX0VSUk9SX1RPUDpFTkR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qe0NBOk9OX0RFTEVURV9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fREVMRVRFX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNJbnB1dChlbGVtZW50SWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZWxlbWVudElkfWApO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldExhYmVsVmFsdWUoY29udGVudHM6IGFueVtdLCBkaXNwbGF5RmllbGRzOiBhbnlbXSkge1xuICAgICAgICByZXR1cm4gY29udGVudHMubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbGFiZWw6IGRpc3BsYXlGaWVsZHNcbiAgICAgICAgICAgICAgICAubWFwKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoXCIuXCIpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtmaWVsZF0gPSB0aGlzLmdldFByb3AoaXRlbSwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZCA9PT0gXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtW2ZpZWxkXSA9IHRoaXMubG9hZExhYmVsRnJvbUVudW0oaXRlbVtmaWVsZF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiIC0gXCIpLFxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQW5ub3RhdGlvblR5cGVMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLyp7Q0E6T05fVFlQRV9MT09LVVBfUkVRVUVTVF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9UWVBFX0xPT0tVUF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRBbm5vdGF0aW9uVHlwZVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKGZvcm1GaWVsZCA9PiBjcmVhdGVGaWx0ZXJTdHJpbmcoZm9ybUZpZWxkLCB2YWx1ZSwgeyB0ZXh0U2VhY2hFbnVtOiB0cnVlIH0pKVxuICAgICAgICAgICAgLmZpbHRlcihzID0+ICEhcylcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuYW5ub3RhdGlvblR5cGVBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmFubm90YXRpb25UeXBlU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpc3Q6IGFueSkgPT4gdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBEaXNwbGF5RmllbGRzKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnlbXSkgPT4gdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZS5uZXh0KGRhdGEpKTtcblxuICAgICAgICAvKntDQTpPTl9UWVBFX0xPT0tVUF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9UWVBFX0xPT0tVUF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Bbm5vdGF0aW9uVHlwZVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICAvKntDQTpPTl9UWVBFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0QW5ub3RhdGlvblR5cGVTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+ICEhZmlsdGVyRGF0YVtuYW1lXSAmJiBmaWx0ZXJEYXRhW25hbWVdICE9PSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRW51bSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyh1cHBlcigke25hbWV9KSwgdXBwZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmFubm90YXRpb25UeXBlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5hbm5vdGF0aW9uVHlwZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvblR5cGVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBncmlkRGF0YTogdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBEaXNwbGF5RmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBTZWFyY2hPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfU0VBUkNIX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfU0VBUkNIX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlc3BvbnNpYmxlTG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX0xPT0tVUF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX0xPT0tVUF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRSZXNwb25zaWJsZVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKGZvcm1GaWVsZCA9PiBjcmVhdGVGaWx0ZXJTdHJpbmcoZm9ybUZpZWxkLCB2YWx1ZSwgeyB0ZXh0U2VhY2hFbnVtOiB0cnVlIH0pKVxuICAgICAgICAgICAgLmZpbHRlcihzID0+ICEhcylcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5yZXNwb25zaWJsZUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMucmVzcG9uc2libGVBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmVtcGxveWVlU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpc3Q6IGFueSkgPT4gdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMucmVzcG9uc2libGVMb29rdXBEaXNwbGF5RmllbGRzKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnlbXSkgPT4gdGhpcy5yZXNwb25zaWJsZUxvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZS5uZXh0KGRhdGEpKTtcblxuICAgICAgICAvKntDQTpPTl9SRVNQT05TSUJMRV9MT09LVVBfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfTE9PS1VQX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlc3BvbnNpYmxlU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MsIG11bHRpU29ydE1ldGEsIGZpbHRlckRhdGEgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBwYWdlID0gZmlyc3QgLyByb3dzO1xuICAgICAgICBjb25zdCBzb3J0ID0gbXVsdGlTb3J0TWV0YTtcbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldFJlc3BvbnNpYmxlU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiAhIWZpbHRlckRhdGFbbmFtZV0gJiYgZmlsdGVyRGF0YVtuYW1lXSAhPT0gXCJcIilcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkRhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLlN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5yZXNwb25zaWJsZUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMucmVzcG9uc2libGVBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmVtcGxveWVlU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ2V0TGFiZWxWYWx1ZShsaXN0LmNvbnRlbnRzLCB0aGlzLnJlc3BvbnNpYmxlTG9va3VwRGlzcGxheUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsUmVjb3JkczogbGlzdC50b3RhbEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmxlTG9va3VwU2VhcmNoT2JzZXJ2YWJsZS5uZXh0KGRhdGEpKTtcblxuICAgICAgICAvKntDQTpPTl9SRVNQT05TSUJMRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfU0VBUkNIX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQcm9wKG9iajogYW55LCBwYXRoOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzdWx0OiBhbnksIHByb3A6IGFueSkgPT4gKHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHJlc3VsdFtwcm9wXSksIG9iaik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRHcmlkQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3QgZ3JpZENvbHVtbnMgPSBbXG4gICAgICAgICAgICB7IGZpZWxkOiBcInN0YXJ0RGF0ZVwiLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X3N0YXJ0X2RhdGVcIikgfSxcbiAgICAgICAgICAgIHsgZmllbGQ6IFwiYW5ub3RhdGlvblR5cGUuY29kZVwiLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2Fubm90YXRpb25fdHlwZV9jb2RlXCIpIH0sXG4gICAgICAgICAgICB7IGZpZWxkOiBcImFubm90YXRpb25UeXBlLm5hbWVcIiwgaGVhZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25faGlzdG9yeV9hbm5vdGF0aW9uX3R5cGVfbmFtZVwiKSB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZpZWxkOiBcImFubm90YXRpb25cIixcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2Fubm90YXRpb25cIiksXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9HUklEX0NPTFVNTlM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0dSSURfQ09MVU1OUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdEhpc3RvcnlHcmlkQ29sdW1ucyh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5jb25maWdTZXJ2aWNlKS5jb25jYXQoZ3JpZENvbHVtbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsdGVyRmllbGRzKCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZHMgPSBbXG4gICAgICAgICAgICB0aGlzLmVtcGxveWVlTG9va3VwU2VydmljZS5nZXRGb3JtRmllbGQoKSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95ZXJcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llclwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTG9va3VwLFxuICAgICAgICAgICAgICAgIHJlY29yZExhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0xhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlYXJjaFRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVyX3NlYXJjaF90aXRsZVwiKSxcbiAgICAgICAgICAgICAgICBzZWFyY2hFbXB0eVRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLm5vdGhpbmdfZm91bmRcIiksXG4gICAgICAgICAgICAgICAgZmlsdGVyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZmlsdGVyXCIpLFxuICAgICAgICAgICAgICAgIGZpbHRlclRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmZpbHRlcnNcIiksXG4gICAgICAgICAgICAgICAgY2xlYXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jbGVhclwiKSxcbiAgICAgICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jYW5jZWxcIiksXG4gICAgICAgICAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uc2VsZWN0XCIpLFxuICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwiaWRcIixcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc09ic2VydmFibGU6IHRoaXMuY29tcGFueUxvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSxcbiAgICAgICAgICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiB0aGlzLmNvbXBhbnlMb29rdXBTZWFyY2hPYnNlcnZhYmxlLFxuICAgICAgICAgICAgICAgIG9uTG9va3VwUmVxdWVzdDogKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMub25Db21wYW55TG9va3VwUmVxdWVzdCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgb25TZWFyY2hSZXF1ZXN0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbkNvbXBhbnlTZWFyY2hSZXF1ZXN0KGV2ZW50KSxcbiAgICAgICAgICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6IFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuZ2V0Q29tcGFueVNlYXJjaEZpZWxkcygpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEdyaWRGaWVsZHM6IHRoaXMuZ2V0Q29tcGFueVNlYXJjaEdyaWRGaWVsZHMoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb21wYW55QnJhbmNoXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfY29tcGFueV9icmFuY2hcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkxvb2t1cCxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfY29tcGFueV9icmFuY2hfc2VhcmNoX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEVtcHR5VGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8ubm90aGluZ19mb3VuZFwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJcIiksXG4gICAgICAgICAgICAgICAgZmlsdGVyVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZmlsdGVyc1wiKSxcbiAgICAgICAgICAgICAgICBjbGVhckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNsZWFyXCIpLFxuICAgICAgICAgICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNhbmNlbFwiKSxcbiAgICAgICAgICAgICAgICByZWNvcmRMYWJlbDogZ2V0UmVjb3JkTGFiZWwodGhpcy50cmFuc2xhdGUpLFxuICAgICAgICAgICAgICAgIHJlY29yZHNMYWJlbDogZ2V0UmVjb3JkTGFiZWwodGhpcy50cmFuc2xhdGUpLFxuICAgICAgICAgICAgICAgIHNlbGVjdExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLnNlbGVjdFwiKSxcbiAgICAgICAgICAgICAgICBkYXRhS2V5OiBcImlkXCIsXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnNPYnNlcnZhYmxlOiB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgc2VhcmNoT2JzZXJ2YWJsZTogdGhpcy5jb21wYW55QnJhbmNoTG9va3VwU2VhcmNoT2JzZXJ2YWJsZSxcbiAgICAgICAgICAgICAgICBvbkxvb2t1cFJlcXVlc3Q6ICh2YWx1ZTogc3RyaW5nKSA9PiB0aGlzLm9uQ29tcGFueUJyYW5jaExvb2t1cFJlcXVlc3QodmFsdWUpLFxuICAgICAgICAgICAgICAgIG9uU2VhcmNoUmVxdWVzdDogKGV2ZW50OiBhbnkpID0+IHRoaXMub25Db21wYW55QnJhbmNoU2VhcmNoUmVxdWVzdChldmVudCksXG4gICAgICAgICAgICAgICAgbG9va3VwRGlzcGxheUZpZWxkOiBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgc2VhcmNoRmllbGRzOiB0aGlzLmdldENvbXBhbnlCcmFuY2hTZWFyY2hGaWVsZHMoKSxcbiAgICAgICAgICAgICAgICBzZWFyY2hHcmlkRmllbGRzOiB0aGlzLmdldENvbXBhbnlCcmFuY2hTZWFyY2hHcmlkRmllbGRzKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29udHJhY3RUeXBlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfZW1wbG95bWVudF9yZWxhdGlvbnNoaXBfY29udHJhY3RfdHlwZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9lbXBsb3ltZW50X3JlbGF0aW9uc2hpcF9jb250cmFjdF90eXBlX3BsYWNlaG9sZGVyXCIpLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY29udHJhY3RUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiYW5ub3RhdGlvblR5cGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfYW5ub3RhdGlvbl90eXBlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Mb29rdXAsXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlYXJjaFRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25faGlzdG9yeV9hbm5vdGF0aW9uX3R5cGVfc2VhcmNoX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEVtcHR5VGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8ubm90aGluZ19mb3VuZFwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJcIiksXG4gICAgICAgICAgICAgICAgZmlsdGVyVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZmlsdGVyc1wiKSxcbiAgICAgICAgICAgICAgICByZWNvcmRMYWJlbDogZ2V0UmVjb3JkTGFiZWwodGhpcy50cmFuc2xhdGUpLFxuICAgICAgICAgICAgICAgIHJlY29yZHNMYWJlbDogZ2V0UmVjb3JkTGFiZWwodGhpcy50cmFuc2xhdGUpLFxuICAgICAgICAgICAgICAgIGNsZWFyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY2xlYXJcIiksXG4gICAgICAgICAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY2FuY2VsXCIpLFxuICAgICAgICAgICAgICAgIHNlbGVjdExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLnNlbGVjdFwiKSxcbiAgICAgICAgICAgICAgICBkYXRhS2V5OiBcImlkXCIsXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnNPYnNlcnZhYmxlOiB0aGlzLmFubm90YXRpb25UeXBlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLFxuICAgICAgICAgICAgICAgIHNlYXJjaE9ic2VydmFibGU6IHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBTZWFyY2hPYnNlcnZhYmxlLFxuICAgICAgICAgICAgICAgIG9uTG9va3VwUmVxdWVzdDogKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMub25Bbm5vdGF0aW9uVHlwZUxvb2t1cFJlcXVlc3QodmFsdWUpLFxuICAgICAgICAgICAgICAgIG9uU2VhcmNoUmVxdWVzdDogKGV2ZW50OiBhbnkpID0+IHRoaXMub25Bbm5vdGF0aW9uVHlwZVNlYXJjaFJlcXVlc3QoZXZlbnQpLFxuICAgICAgICAgICAgICAgIGxvb2t1cERpc3BsYXlGaWVsZDogXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkczogdGhpcy5nZXRBbm5vdGF0aW9uVHlwZVNlYXJjaEZpZWxkcygpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEdyaWRGaWVsZHM6IHRoaXMuZ2V0QW5ub3RhdGlvblR5cGVTZWFyY2hHcmlkRmllbGRzKCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95ZWVTaXR1YXRpb25cIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9zaXR1YXRpb25cIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgIFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX3NpdHVhdGlvblwiLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogU2l0dWF0aW9uRW1wbG95ZWUuRVZFUllPTkUsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogc2l0dWF0aW9uT3B0aW9ucyh0aGlzLnRyYW5zbGF0ZSwgdGhpcy5jb25maWdTZXJ2aWNlKSxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBmaWx0ZXJGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRTdG9yYWdlRmlsdGVyc0ludG9Gb3JtKGZvcm06IEZvcm1Hcm91cCkge1xuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gYXdhaXQgdGhpcy5maWx0ZXJzU3RvcmFnZVNlcnZpY2UuZ2V0RmlsdGVycyhcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFwiKTtcblxuICAgICAgICBPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzRGF0ZSA9IG1vbWVudChmaWx0ZXJzW2ZpZWxkXSwgbW9tZW50LkhUTUw1X0ZNVC5EQVRFVElNRV9MT0NBTF9NUyArICdaJywgdHJ1ZSkuaXNWYWxpZCgpO1xuICAgICAgICAgICAgZm9ybS5nZXQoZmllbGQpLnNldFZhbHVlKGlzRGF0ZSA/IG5ldyBEYXRlKGZpbHRlcnNbZmllbGRdKSA6IGZpbHRlcnNbZmllbGRdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcblxuICAgICAgICAvKntDQTpHRVRfRklMVEVSX0ZPUk1fR1JPVVA6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0ZJTFRFUl9GT1JNX0dST1VQOkVORH0qL1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc2V0U3RvcmFnZVBhZ2luYXRvcigpIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdG9yID0gYXdhaXQgdGhpcy5wYWdpbmF0b3JTdG9yYWdlU2VydmljZS5nZXRQYWdpbmF0b3IoXCJBbm5vdGF0aW9uSGlzdG9yeUxpc3RDb21wb25lbnRQYWdpbmF0b3JcIik7XG5cbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHBhZ2luYXRvcikgIT09IFwie31cIikge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcyA9IHsgLi4udGhpcy5jdXJyZW50TGlzdFBhcmFtcywgLi4ucGFnaW5hdG9yIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKntDQTpHRVRfRklMVEVSX0ZPUk1fR1JPVVA6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0ZJTFRFUl9GT1JNX0dST1VQOkVORH0qL1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RW51bVF1ZXJ5KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgbXVsdGlwbGU6IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIG11bHRpcGxlID8gYCgke3ZhbHVlLm1hcCgoc2VsZWN0ZWQ6IGFueSkgPT4gYCR7bmFtZX0gZXEgJyR7c2VsZWN0ZWR9J2ApLmpvaW4oXCIgb3IgXCIpfSlgIDogYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbm5vdGF0aW9uVHlwZVNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl90eXBlX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25fdHlwZV9uYW1lXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfVFlQRV9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9UWVBFX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFubm90YXRpb25UeXBlU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25fdHlwZV9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX3R5cGVfbmFtZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX1RZUEVfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9UWVBFX1NFQVJDSF9HUklEX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVtcGxveWVlU2VhcmNoRmllbGRzKCkgeyAvLyBOT1NPTkFSXG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95ZXIuY29kRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2VtcGxveWVyX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVyc29uLm5vbVBlc1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX3BlcnNvbl9ub21fcGVzXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9lbXBsb3ltZW50X3JlbGF0aW9uc2hpcF9jb250cmFjdF90eXBlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY29udHJhY3RUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbXBsb3llZVNlYXJjaEdyaWRGaWVsZHMoKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaEdyaWRGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcGxveWVyLmNvZEVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25faGlzdG9yeV9lbXBsb3llcl9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlcnNvbi5ub21QZXNcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9wZXJzb25fbm9tX3Blc1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfZW1wbG95bWVudF9yZWxhdGlvbnNoaXBfY29udHJhY3RfdHlwZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNvbnRyYWN0VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEdyaWRGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXNwb25zaWJsZVNlYXJjaEZpZWxkcygpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llci5jb2RFbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfZW1wbG95ZXJfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXJzb24ubm9tUGVzXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfcGVyc29uX25vbV9wZXNcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX1JFU1BPTlNJQkxFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1JFU1BPTlNJQkxFX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc3BvbnNpYmxlU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95ZXIuY29kRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2VtcGxveWVyX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVyc29uLm5vbVBlc1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX3BlcnNvbl9ub21fcGVzXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9lbXBsb3ltZW50X3JlbGF0aW9uc2hpcF9jb250cmFjdF90eXBlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY29udHJhY3RUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9SRVNQT05TSUJMRV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1JFU1BPTlNJQkxFX1NFQVJDSF9HUklEX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db21wYW55TG9va3VwUmVxdWVzdCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVSX0xPT0tVUF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVSX0xPT0tVUF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuICAgICAgICBjb25zdCBzb3J0ID0gdGhpcy5jb21wYW55TG9va3VwRGlzcGxheUZpZWxkcy5tYXAoKGZpZWxkOiBhbnkpID0+ICh7IGZpZWxkLCBvcmRlcjogMSB9KSk7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldENvbXBhbnlTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyB0eXBlIH0pID0+IGlzVmFsaWRGaWx0ZXIodHlwZSwgdmFsdWUpKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHsgLy9OT1NPTkFSXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKHVwcGVyKCR7bmFtZX0pLCB1cHBlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAuam9pbihcIiBvciBcIik7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuY29tcGFueUxvb2t1cERpc3BsYXlGaWVsZHMsIHRoaXMuY29tcGFueUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuY29tcGFueVNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMsIHNvcnQgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUobWFwKChsaXN0OiBhbnkpID0+IHRoaXMuZ2V0TGFiZWxWYWx1ZShsaXN0LmNvbnRlbnRzLCB0aGlzLmNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnlbXSkgPT4gdGhpcy5jb21wYW55TG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVSX0xPT0tVUF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFUl9MT09LVVBfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29tcGFueVNlYXJjaFJlcXVlc3QoZXZlbnQ6IGFueSkge1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFRV9TRUFSQ0hfUkVRVUVTVF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFRV9TRUFSQ0hfUkVRVUVTVF9TVEFSVDpFTkR9Ki9cbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q29tcGFueVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHsgLy9OT1NPTkFSXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyh1cHBlcigke25hbWV9KSwgdXBwZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5jb21wYW55TG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5jb21wYW55QWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5jb21wYW55U2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ2V0TGFiZWxWYWx1ZShsaXN0LmNvbnRlbnRzLCB0aGlzLmNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFRvdGFsUmVjb3Jkc0xhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLnRvdGFsX3JlY29yZHNcIiwgeyB2YWx1ZTogbGlzdC50b3RhbEVsZW1lbnRzIH0pLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5jb21wYW55TG9va3VwU2VhcmNoT2JzZXJ2YWJsZS5uZXh0KGRhdGEpKTtcblxuICAgICAgICAvKntDQTpPTl9FTVBMT1lFRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRUVfU0VBUkNIX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbXBhbnlCcmFuY2hMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5jb21wYW55QnJhbmNoTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5jb21wYW55QnJhbmNoQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5jb21wYW55QnJhbmNoU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcywgc29ydCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpc3Q6IGFueSkgPT4gdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUJyYW5jaExvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVSX0xPT0tVUF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db21wYW55QnJhbmNoU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRDb21wYW55QnJhbmNoU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKHVwcGVyKCR7bmFtZX0pLCB1cHBlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmNvbXBhbnlCcmFuY2hBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmNvbXBhbnlCcmFuY2hTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBncmlkRGF0YTogdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUJyYW5jaExvb2t1cERpc3BsYXlGaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVG90YWxSZWNvcmRzTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8udG90YWxfcmVjb3Jkc1wiLCB7IHZhbHVlOiBsaXN0LnRvdGFsRWxlbWVudHMgfSksXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBTZWFyY2hPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb21wYW55U2VhcmNoRmllbGRzKCkgeyAvL05PU09OQVJcbiAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RFbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb21wYW55X2NvZF9lbXBcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9ub21fZW1wXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tcGFueVNlYXJjaEdyaWRGaWVsZHMoKSB7IC8vTk9TT05BUlxuICAgICAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RFbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb21wYW55X2NvZF9lbXBcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9ub21fZW1wXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9HUklEX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbXBhbnlCcmFuY2hTZWFyY2hGaWVsZHMoKSB7IC8vTk9TT05BUlxuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZEZpbFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfYnJhbmNoX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tRmlsXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9icmFuY2hfbmFtZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbXBhbnlCcmFuY2hTZWFyY2hHcmlkRmllbGRzKCkgeyAvL05PU09OQVJcbiAgICAgICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kRmlsXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9icmFuY2hfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJub21GaWxcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb21wYW55X2JyYW5jaF9uYW1lXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9HUklEX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUdyaWQobGlzdFBhcmFtczogTGlzdFBhcmFtcyA9IHt9KSB7XG4gICAgICAgIGlmICghdGhpcy5maWx0ZXJzTG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5saXN0UGFyYW1zIH07XG4gICAgICAgIGNvbnN0IHsgcGFnZSwgc2l6ZSwgZmlsdGVyRGF0YSB9ID0gdGhpcy5jdXJyZW50TGlzdFBhcmFtcztcbiAgICAgICAgbGV0IHsgc29ydCB9ID0gdGhpcy5jdXJyZW50TGlzdFBhcmFtcztcblxuICAgICAgICB0aGlzLnNlYXJjaFRva2VucyA9IHRoaXMuZmlsdGVyRmllbGRzXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gISFmaWx0ZXJEYXRhW25hbWVdICYmIGZpbHRlckRhdGFbbmFtZV0gIT09IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIGxhYmVsLCB0eXBlLCBzZWFyY2hGaWVsZHMsIG9wdGlvbnMgfTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuICAgICAgICAgICAgICAgIGxldCBsYWJlbFZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxWYWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KFwiTFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdChcIkxUU1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoXCJMIExUU1wiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5Mb29rdXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFNlYXJjaEZpZWxkcyA9IG5hbWUgPT09IFwiZW1wbG95ZWVcIiA/IHRoaXMuZ2V0RW1wbG95ZWVTZWFyY2hGaWVsZHMoKSA6IHNlYXJjaEZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxWYWx1ZSA9IHVwZGF0ZWRTZWFyY2hGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGZpZWxkOiBGb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQubmFtZS5pbmRleE9mKFwiLlwiKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbZmllbGQubmFtZV0gPSB0aGlzLmdldFByb3AodmFsdWUsIGZpZWxkLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQubmFtZSA9PT0gXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2ZpZWxkLm5hbWVdID0gdGhpcy5sb2FkTGFiZWxGcm9tRW51bSh2YWx1ZVtmaWVsZC5uYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVtmaWVsZC5uYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiAtIFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5FbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVmFsdWUgPSBvcHRpb25zLmZpbHRlcigob3B0aW9uOiBPcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gbGFiZWxWYWx1ZSlbMF0ubGFiZWw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuQm9vbGVhbikge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5saXN0X2dyaWRfYm9vbGVhbl90cnVlXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8ubGlzdF9ncmlkX2Jvb2xlYW5fZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IG5hbWUsIGxhYmVsOiBgJHtsYWJlbH06ICR7bGFiZWxWYWx1ZX1gIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBsZXQgZmlsdGVyUXVlcnkgPSB0aGlzLmZpbHRlckZpZWxkc1xuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+ICEhZmlsdGVyRGF0YVtuYW1lXSlcbiAgICAgICAgICAgIC5tYXAoKHsgbmFtZSwgdHlwZSwgbXVsdGlwbGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gXCJlbXBsb3llZVNpdHVhdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRTaXR1YXRpb25GaWx0ZXJJbkhpc3Rvcmljcyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyh1cHBlcigke25hbWV9KSwgdXBwZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRW51bSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRFbnVtUXVlcnkobmFtZSwgdmFsdWUsIG11bHRpcGxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5Mb29rdXApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlLmlkfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5XG4gICAgICAgICAgICAucmVwbGFjZSgnZW1wbG95ZXIgZXEnLCAnZW1wbG95ZWUuZW1wbG95ZXIgZXEnKVxuICAgICAgICAgICAgLnJlcGxhY2UoJ2NvbXBhbnlCcmFuY2ggZXEnLCAnZW1wbG95ZWUuZW1wbG95ZWVTbmFwc2hvdC5jb21wYW55QnJhbmNoIGVxJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCdjb250cmFjdFR5cGUgZXEnLCAnZW1wbG95ZWUuZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGUgZXEnKVxuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSB0aGlzLmdyaWRDb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkKTtcblxuICAgICAgICBpZiAoIXNvcnQpIHtcbiAgICAgICAgICAgIHNvcnQgPSBbeyBmaWVsZDogXCJsYXN0TW9kaWZpZWREYXRlXCIsIG9yZGVyOiAtMSB9XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYW5ub3RhdGlvbkhpc3RvcnlTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNpemUsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA+PSA1MDAgJiYgZXJyLnN0YXR1cyA8IDYwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkRGF0YSA9IGxpc3QuY29udGVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSBsaXN0LnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0R3JpZChsaXN0UGFyYW1zPzogTGlzdFBhcmFtcykge1xuICAgICAgICBpZiAobGlzdFBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcyA9IHsgLi4udGhpcy5jdXJyZW50TGlzdFBhcmFtcywgLi4ubGlzdFBhcmFtcyB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMgPSB7IC4uLnRoaXMuY3VycmVudExpc3RQYXJhbXMsIHBhZ2U6IDAsIHNvcnQ6IFtdIH07XG4gICAgICAgIHRoaXMudGFibGUucmVzZXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQWxsRm9ybUZpZWxkcyhmb3JtR3JvdXA6IEZvcm1Hcm91cCkge1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGxGb3JtRmllbGRzKGNvbnRyb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U29ydEZpZWxkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zb3J0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYWdlU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc2l6ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um93SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnBhZ2UgKiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNpemU7XG4gICAgfVxuXG4gICAgLyp7Q0E6Q0xBU1NfTUVUSE9EUzpTVEFSVH0qL1xuICAgIHByaXZhdGUgbG9hZExhYmVsRnJvbUVudW0odmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmb3VuZEVudW0gPSB0aGlzLmNvbnRyYWN0VHlwZU9wdGlvbnMuZmlsdGVyKHIgPT4gci52YWx1ZSA9PT0gdmFsdWUpO1xuICAgICAgICByZXR1cm4gKGZvdW5kRW51bSAmJiBmb3VuZEVudW0ubGVuZ3RoICYmIGZvdW5kRW51bVswXS5sYWJlbCkgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2NvbnRyYWN0Lmxpc3RfZ3JpZF9lbXB0eV9maWVsZFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BZGRDb2xsZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYG5ldy1jb2xsZWN0aXZlYF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgZnJhZ21lbnQ6IENvbGxlY3RpdmVQcm9jZXNzVHlwZS5JTkNMVURFIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZUNvbGxlY3RpdmUoKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgbmV3LWNvbGxlY3RpdmVgXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBmcmFnbWVudDogQ29sbGVjdGl2ZVByb2Nlc3NUeXBlLkVYQ0xVREUgfSk7XG4gICAgfVxuICAgIC8qe0NBOkNMQVNTX01FVEhPRFM6RU5EfSovXG59XG5cbmludGVyZmFjZSBMaXN0UGFyYW1zIHtcbiAgICBwYWdlPzogbnVtYmVyO1xuICAgIHNpemU/OiBudW1iZXI7XG4gICAgc29ydD86IFNvcnRNZXRhW107XG4gICAgZmlsdGVyRGF0YT86IGFueTtcbn1cblxuLyp7Q0E6RklMRV9DT05URU5UUzpTVEFSVH0qL1xuLyp7Q0E6RklMRV9DT05URU5UUzpFTkR9Ki9cbiJdfQ==
1205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbi1oaXN0b3J5LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tcGVzc29hcy9oY20tY29udHJhY3QtZW1wbG95ZWUtaGlzdG9yeS8iLCJzb3VyY2VzIjpbImxpYi9hbm5vdGF0aW9uLWhpc3Rvcnkvdmlld3MvbGlzdC9hbm5vdGF0aW9uLWhpc3RvcnktbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtDLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBa0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFELE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckcsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdURBQXVELENBQUM7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QUM7T0FDVyw4QkFBOEIsQ0EydEMxQztJQUFELHFDQUFDO0NBQUEsQUEzdENELENBQW9ELDhCQUE4QixHQTJ0Q2pGO1NBM3RDWSw4QkFBOEI7QUFvdUMzQyw0QkFBNEI7QUFDNUIsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEZpZWxkVHlwZSwgRm9ybUZpZWxkLCBJVG9rZW4sIE9wdGlvbiB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgSG90a2V5LCBIb3RrZXlzU2VydmljZSB9IGZyb20gJ2FuZ3VsYXIyLWhvdGtleXMnO1xuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSwgTGF6eUxvYWRFdmVudCwgTWVudUl0ZW0sIE1lc3NhZ2VTZXJ2aWNlLCBTb3J0TWV0YSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRTA3MEVtcFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudGl0aWVzL2UtMDcwLWVtcC9lLTA3MC1lbXAuc2VydmljZSc7XG5pbXBvcnQgeyBFMDcwRmlsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW50aXRpZXMvZS0wNzAtZmlsL2UtMDcwLWZpbC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgQW5ub3RhdGlvbkhpc3RvcnkgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudGl0aWVzL2Fubm90YXRpb24taGlzdG9yeS9hbm5vdGF0aW9uLWhpc3RvcnknO1xuaW1wb3J0IHsgQW5ub3RhdGlvbkhpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnRpdGllcy9hbm5vdGF0aW9uLWhpc3RvcnkvYW5ub3RhdGlvbi1oaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5ub3RhdGlvblR5cGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnRpdGllcy9hbm5vdGF0aW9uLXR5cGUvYW5ub3RhdGlvbi10eXBlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW1wbG95ZWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9lbnRpdGllcy9lbXBsb3llZS9lbXBsb3llZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbGxlY3RpdmVQcm9jZXNzVHlwZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb3JlL2VudW1zL2NvbGxlY3RpdmUtcHJvY2Vzcy10eXBlXCI7XG5pbXBvcnQgeyBDb250cmFjdFR5cGUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW1zL2NvbnRyYWN0LXR5cGUnO1xuaW1wb3J0IHsgRmlsdGVyc1N0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL3N0b3JhZ2UvZmlsdGVycy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvc3RvcmFnZS9wYWdpbmF0b3Itc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdldERlZmF1bHRIaXN0b3J5R3JpZENvbHVtbnMsIGdldFJlY29yZExhYmVsLCBnZXRTaXR1YXRpb25GaWx0ZXJJbkhpc3RvcmljcywgaXNWYWxpZEZpbHRlciwgbWVyZ2VVbmlxdWUsIHNpdHVhdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVyU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaGVscGVycyc7XG5pbXBvcnQgeyBCYXNlQ29sbGVjdGl2ZUhpc3RvcnlDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9iYXNlLWNvbGxlY3RpdmUtaGlzdG9yeS9iYXNlLWNvbGxlY3RpdmUtaGlzdG9yeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wbG95ZWVMb29rdXBTZXJ2aWNlLCBFbnRpdHlMb29rdXBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQHNlbmlvci1nZXN0YW8tcGVzc29hcy9oY20tZW50aXR5LWxvb2t1cHMnO1xuaW1wb3J0IHsgU2l0dWF0aW9uRW1wbG95ZWUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW1zL3NpdHVhdGlvbi1lbXBsb3llZSc7XG5cbi8qe0NBOkVYVEVSTkFMX0lNUE9SVFM6U1RBUlR9Ki9cbmNvbnN0IG1vbWVudCA9IG1vbWVudF87IC8vIEBIQUNLIE5lY2Vzc2FyeSBiZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yb2xsdXAvcm9sbHVwL2lzc3Vlcy82NzBcbi8qe0NBOkVYVEVSTkFMX0lNUE9SVFM6RU5EfSovXG5cbi8qe0NBOlBST0pFQ1RfSU1QT1JUUzpTVEFSVH0qL1xuLyp7Q0E6UFJPSkVDVF9JTVBPUlRTOkVORH0qL1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2Fubm90YXRpb24taGlzdG9yeS1saXN0LmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXG4gICAgICAgIC8qe0NBOkNPTVBPTkVOVF9TVFlMRV9VUkxTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkNPTVBPTkVOVF9TVFlMRV9VUkxTOkVORH0qL1xuICAgIF0sXG4gICAgc2VsZWN0b3I6IFwiZm5kLWFubm90YXRpb24taGlzdG9yeVwiLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICAvKntDQTpDT01QT05FTlRfUFJPVklERVJTOlNUQVJUfVxuICAgICAgICAvKntDQTpDT01QT05FTlRfUFJPVklERVJTOkVORH0qL1xuICAgIF0sXG4gICAgLyp7Q0E6Q09NUE9ORU5UX0NPTkZJRzpTVEFSVH0qL1xuICAgIC8qe0NBOkNPTVBPTkVOVF9DT05GSUc6RU5EfSovXG59KVxuZXhwb3J0IGNsYXNzIEFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudCBleHRlbmRzIEJhc2VDb2xsZWN0aXZlSGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IC8qe0NBOkNMQVNTX0lOVEVSRkFDRVM6U1RBUlR9Ki8gLyp7Q0E6Q0xBU1NfSU5URVJGQUNFUzpFTkR9Ki8ge1xuICAgIHB1YmxpYyBhbGxQZXJtaXNzaW9uczogYW55ID0ge307XG4gICAgcHVibGljIHBlcm1pc3Npb25zOiBhbnkgPSB7fTtcbiAgICBwdWJsaWMgbG9jYWxlQ29uZmlnOiBhbnkgPSB7fTtcblxuICAgIHB1YmxpYyBjdXJyZW50TGlzdFBhcmFtczogTGlzdFBhcmFtcyA9IHsgcGFnZTogMCwgc2l6ZTogMTAsIHNvcnQ6IFtdLCBmaWx0ZXJEYXRhOiB7fSB9O1xuICAgIHB1YmxpYyBncmlkRGF0YTogQW5ub3RhdGlvbkhpc3RvcnlbXTtcbiAgICBwdWJsaWMgZ3JpZENvbHVtbnM6IGFueVtdO1xuICAgIHB1YmxpYyBzaG93TG9hZGVyOiBib29sZWFuO1xuICAgIHB1YmxpYyB0b3RhbFJlY29yZHM6IG51bWJlcjtcbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBBbm5vdGF0aW9uSGlzdG9yeVtdO1xuXG4gICAgcHVibGljIGZpbHRlckZpZWxkczogRm9ybUZpZWxkW107XG4gICAgcHVibGljIGZpbHRlckZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICAgIHB1YmxpYyBmaWx0ZXJzUGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xuICAgIHB1YmxpYyBzZWFyY2hUb2tlbnM6IElUb2tlbltdID0gW107XG4gICAgcHVibGljIHNlcnZlckVycm9yID0gZmFsc2U7XG4gICAgcHVibGljIGZpbHRlcnNMb2FkZWQgPSBmYWxzZTtcblxuICAgIEBWaWV3Q2hpbGQoXCJhbm5vdGF0aW9uSGlzdG9yeVRhYmxlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyB0YWJsZTogVGFibGU7XG5cbiAgICBwdWJsaWMgYW5ub3RhdGlvblR5cGVMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kZVwiLCBcIm5hbWVcIl07XG4gICAgcHVibGljIGFubm90YXRpb25UeXBlQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiY29kZVwiLCBcIm5hbWVcIl07XG5cbiAgICBwdWJsaWMgZW1wbG95ZWVMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiZW1wbG95ZXIuY29kRW1wXCIsIFwiY29kZVwiLCBcInBlcnNvbi5ub21QZXNcIiwgXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiXTtcbiAgICBwdWJsaWMgZW1wbG95ZWVBZHZhbmNlZERpc3BsYXlGaWVsZHMgPSBbXCJlbXBsb3llci5jb2RFbXBcIiwgXCJjb2RlXCIsIFwicGVyc29uLm5vbVBlc1wiLCBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCJdO1xuXG4gICAgcHVibGljIHJlc3BvbnNpYmxlTG9va3VwRGlzcGxheUZpZWxkcyA9IFtcImNvZGVcIiwgXCJwZXJzb24ubm9tUGVzXCJdO1xuICAgIHB1YmxpYyByZXNwb25zaWJsZUFkdmFuY2VkRGlzcGxheUZpZWxkcyA9IFtcImNvZGVcIiwgXCJwZXJzb24ubm9tUGVzXCJdO1xuXG4gICAgcHVibGljIGNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kRW1wXCIsIFwibm9tRW1wXCJdO1xuICAgIHB1YmxpYyBjb21wYW55QWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiY29kRW1wXCIsIFwibm9tRW1wXCJdO1xuXG4gICAgcHVibGljIGNvbXBhbnlCcmFuY2hMb29rdXBEaXNwbGF5RmllbGRzID0gW1wiY29kRmlsXCIsIFwibm9tRmlsXCJdO1xuICAgIHB1YmxpYyBjb21wYW55QnJhbmNoQWR2YW5jZWREaXNwbGF5RmllbGRzID0gW1wiY29kRmlsXCIsIFwibm9tRmlsXCJdO1xuXG4gICAgQFZpZXdDaGlsZChcImN1c3RvbVRlbXBsYXRlXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjdXN0b21UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoXCJjdXN0b21GaWx0ZXJGaWVsZHNcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGN1c3RvbUZpbHRlckZpZWxkczogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoXCJjdXN0b21HcmlkQ29sZ3JvdXBcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIGN1c3RvbUdyaWRDb2xncm91cDogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoXCJjdXN0b21HcmlkSGVhZGVyXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjdXN0b21HcmlkSGVhZGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQFZpZXdDaGlsZChcImN1c3RvbUdyaWRCb2R5XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyBjdXN0b21HcmlkQm9keTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qe0NBOkNMQVNTX0FUVFJJQlVURVM6U1RBUlR9Ki9cbiAgICBwdWJsaWMgY29udHJhY3RUeXBlT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29udHJhY3RfdHlwZV9lbXBsb3llZVwiKSxcbiAgICAgICAgICAgIHZhbHVlOiBDb250cmFjdFR5cGUuRU1QTE9ZRUVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29udHJhY3RfdHlwZV9kaXJlY3RvclwiKSxcbiAgICAgICAgICAgIHZhbHVlOiBDb250cmFjdFR5cGUuRElSRUNUT1JcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29udHJhY3RfdHlwZV90cmFpbmVlXCIpLFxuICAgICAgICAgICAgdmFsdWU6IENvbnRyYWN0VHlwZS5UUkFJTkVFXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbnRyYWN0X3R5cGVfYXByZW50aWNlXCIpLFxuICAgICAgICAgICAgdmFsdWU6IENvbnRyYWN0VHlwZS5BUFJFTlRJQ0VcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29udHJhY3RfdHlwZV90aGlyZF9wYXJ0eVwiKSxcbiAgICAgICAgICAgIHZhbHVlOiBDb250cmFjdFR5cGUuVEhJUkRfUEFSVFlcbiAgICAgICAgfSxcbiAgICBdO1xuICAgIC8qe0NBOkNMQVNTX0FUVFJJQlVURVM6RU5EfSovXG5cbiAgICBwcml2YXRlIGFubm90YXRpb25UeXBlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIGFubm90YXRpb25UeXBlTG9va3VwU2VhcmNoT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIHJlc3BvbnNpYmxlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlID0gbmV3IFN1YmplY3QoKTtcbiAgICBwcml2YXRlIHJlc3BvbnNpYmxlTG9va3VwU2VhcmNoT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwcml2YXRlIGNvbXBhbnlMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgY29tcGFueUxvb2t1cFNlYXJjaE9ic2VydmFibGUgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgY29tcGFueUJyYW5jaExvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSBjb21wYW55QnJhbmNoTG9va3VwU2VhcmNoT2JzZXJ2YWJsZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBwdWJsaWMgY29sbGVjdGl2ZUFjdGlvbnM6IE1lbnVJdGVtW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAvKntDQTpJTkpFQ1RJT05TOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOklOSkVDVElPTlM6RU5EfSovXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIGFubm90YXRpb25IaXN0b3J5U2VydmljZTogQW5ub3RhdGlvbkhpc3RvcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaG90a2V5c1NlcnZpY2U6IEhvdGtleXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBmaWx0ZXJzU3RvcmFnZVNlcnZpY2U6IEZpbHRlcnNTdG9yYWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwYWdpbmF0b3JTdG9yYWdlU2VydmljZTogUGFnaW5hdG9yU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZW1wbG95ZWVTZXJ2aWNlOiBFbXBsb3llZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYW5ub3RhdGlvblR5cGVTZXJ2aWNlOiBBbm5vdGF0aW9uVHlwZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29tcGFueVNlcnZpY2U6IEUwNzBFbXBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbXBhbnlCcmFuY2hTZXJ2aWNlOiBFMDcwRmlsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbXBsb3llZUxvb2t1cFNlcnZpY2U6IEVtcGxveWVlTG9va3VwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjb25maWdTZXJ2aWNlOiBFbnRpdHlMb29rdXBDb25maWdTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIC8qe0NBOkNPTlNUUlVDVE9SX0VORDpTVEFSVH0qL1xuICAgICAgICBzdXBlcih0cmFuc2xhdGUpO1xuICAgICAgICAvKntDQTpDT05TVFJVQ1RPUl9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvKntDQTpPTl9JTklUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0lOSVRfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLm9uUm91dGVEYXRhQ2hhbmdlKGRhdGEpKTtcblxuICAgICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgZW1wbG95ZXI6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgY29tcGFueUJyYW5jaDogW3VuZGVmaW5lZCwgVmFsaWRhdG9ycy5jb21wb3NlKFtdKV0sXG4gICAgICAgICAgICBjb250cmFjdFR5cGU6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgZW1wbG95ZWU6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgYW5ub3RhdGlvblR5cGU6IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICAgICAgZW1wbG95ZWVTaXR1YXRpb246IFt1bmRlZmluZWQsIFZhbGlkYXRvcnMuY29tcG9zZShbXSldLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNldFN0b3JhZ2VQYWdpbmF0b3IoKTtcblxuICAgICAgICB0aGlzLnNldFN0b3JhZ2VGaWx0ZXJzSW50b0Zvcm0odGhpcy5maWx0ZXJGb3JtR3JvdXApO1xuICAgICAgICB0aGlzLmdyaWRDb2x1bW5zID0gdGhpcy5nZXRHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdlbXBsb3llcicpLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KCdjb21wYW55QnJhbmNoJykuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2V0SG90a2V5cygpO1xuXG4gICAgICAgIC8qe0NBOk9OX0lOSVRfRU5EOlNUQVJUfSovXG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmluY2x1aXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdGl2ZUFjdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdoY21fY29udHJhY3QuZW1wbG95bWVudF9jb250cmFjdC5hZGRfY29sbGVjdGl2ZScpLCBjb21tYW5kOiAoKSA9PiAgdGhpcy5vbkFkZENvbGxlY3RpdmUoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5leGNsdWlyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3RpdmVBY3Rpb25zLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfY29udHJhY3QucmVtb3ZlX2NvbGxlY3RpdmUnKSwgY29tbWFuZDogKCkgPT4gdGhpcy5vblJlbW92ZUNvbGxlY3RpdmUoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgLyp7Q0E6T05fSU5JVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICAvKntDQTpPTl9ERVNUUk9ZX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0RFU1RST1lfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgLyp7Q0E6T05fREVTVFJPWV9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fREVTVFJPWV9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIHNldEhvdGtleXMoKSB7XG4gICAgICAgIC8qe0NBOlNFVF9IT1RLRVlTX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOlNFVF9IT1RLRVlTX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtlXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24gJiYgdGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRWRpdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmhvdGtleXNTZXJ2aWNlLmFkZChcbiAgICAgICAgICAgIG5ldyBIb3RrZXkoXG4gICAgICAgICAgICAgICAgXCJhbHQrc2hpZnQreFwiLFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uLmxlbmd0aCAmJiB0aGlzLnBlcm1pc3Npb25zLmV4Y2x1aXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25EZWxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K25cIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zLmluY2x1aXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25BZGQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXCJJTlBVVFwiLCBcIlNFTEVDVFwiLCBcIlRFWFRBUkVBXCJdXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5ob3RrZXlzU2VydmljZS5hZGQoXG4gICAgICAgICAgICBuZXcgSG90a2V5KFxuICAgICAgICAgICAgICAgIFwiYWx0K3NoaWZ0K2ZcIixcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuaG90a2V5c1NlcnZpY2UuYWRkKFxuICAgICAgICAgICAgbmV3IEhvdGtleShcbiAgICAgICAgICAgICAgICBcImFsdCtzaGlmdCtsXCIsXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1wiSU5QVVRcIiwgXCJTRUxFQ1RcIiwgXCJURVhUQVJFQVwiXVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIC8qe0NBOlNFVF9IT1RLRVlTX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpTRVRfSE9US0VZU19FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUm91dGVEYXRhQ2hhbmdlKGRhdGE6IGFueSkge1xuICAgICAgICAvKntDQTpPTl9ST1VURV9EQVRBX0NIQU5HRV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ST1VURV9EQVRBX0NIQU5HRV9TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLmFsbFBlcm1pc3Npb25zID0gZGF0YS5hbGxQZXJtaXNzaW9ucztcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IGRhdGEuYWxsUGVybWlzc2lvbnMuYW5ub3RhdGlvbkhpc3Rvcnk7XG4gICAgICAgIHRoaXMubG9jYWxlQ29uZmlnID0gZGF0YS5sb2NhbGVDb25maWc7XG5cbiAgICAgICAgLyp7Q0E6T05fUk9VVEVfREFUQV9DSEFOR0VfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1JPVVRFX0RBVEFfQ0hBTkdFX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICAvLyBWZXJpZmljYSBzZSBvIG9iamV0byBwb3NzdWkgdW0gdmFsb3IgcXVlIGZvaSBhbHRlcmFkbyBwYXJhIFwiXCIgKFN0cmluZyB2YXppYSkgYW8gaW52ZXMgZGUgbnVsbCBvdSB1bmRlZmluZWRcbiAgICBwcml2YXRlIGhhc0VtcHR5KHRhcmdldDogYW55KSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0YXJnZXQpLmZpbHRlcihrZXkgPT4gdGFyZ2V0W2tleV0gPT09IFwiXCIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VhcmNoKCkge1xuICAgICAgICAvKntDQTpPTl9TRUFSQ0hfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fU0VBUkNIX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0VtcHR5KGZpbHRlckRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcnNQYW5lbENvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbEZvcm1GaWVsZHModGhpcy5maWx0ZXJGb3JtR3JvdXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5wYWdlID0gMDtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyc1BhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyc1N0b3JhZ2VTZXJ2aWNlLnN0b3JlRmlsdGVycyhcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFwiLCBmaWx0ZXJEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qe0NBOk9OX1NFQVJDSF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fU0VBUkNIX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DbGVhcigpIHtcbiAgICAgICAgLyp7Q0E6T05fQ0xFQVJfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fQ0xFQVJfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAucmVzZXQoKTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJzU3RvcmFnZVNlcnZpY2UucmVtb3ZlRmlsdGVyKFwiQW5ub3RhdGlvbkhpc3RvcnlMaXN0Q29tcG9uZW50XCIpO1xuXG4gICAgICAgIC8qe0NBOk9OX0NMRUFSX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9DTEVBUl9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlVG9rZW4odG9rZW46IElUb2tlbikge1xuICAgICAgICAvKntDQTpPTl9SRU1PVkVfVE9LRU5fU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVNT1ZFX1RPS0VOX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCh0b2tlbi5pZCkuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGF0YSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMucmVzZXRHcmlkKHsgZmlsdGVyRGF0YSB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJzU3RvcmFnZVNlcnZpY2UuY2xlYXJGaWx0ZXJWYWx1ZShcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFwiLCBmaWx0ZXJEYXRhKTtcblxuICAgICAgICAvKntDQTpPTl9SRU1PVkVfVE9LRU5fRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1JFTU9WRV9UT0tFTl9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uR3JpZENoYW5nZShldmVudDogTGF6eUxvYWRFdmVudCkge1xuICAgICAgICAvKntDQTpPTl9HUklEX0NIQU5HRV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9HUklEX0NIQU5HRV9TVEFSVDpFTkR9Ki9cblxuICAgICAgICBjb25zdCBzaXplID0gZXZlbnQucm93cztcbiAgICAgICAgY29uc3QgcGFnZSA9IGV2ZW50LmZpcnN0IC8gc2l6ZTtcbiAgICAgICAgY29uc3Qgc29ydCA9IGV2ZW50Lm11bHRpU29ydE1ldGE7XG5cbiAgICAgICAgaWYgKHNpemUgIT09IDEwIHx8IHBhZ2UgIT09IDAgfHwgc29ydD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JTdG9yYWdlU2VydmljZS5zdG9yZVBhZ2luYXRvcihcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFBhZ2luYXRvclwiLCB7IHBhZ2UsIHNpemUsIHNvcnQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVHcmlkKHsgcGFnZSwgc2l6ZSwgc29ydCB9KTtcblxuICAgICAgICAvKntDQTpPTl9HUklEX0NIQU5HRV9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fR1JJRF9DSEFOR0VfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFkZCgpIHtcbiAgICAgICAgLyp7Q0E6T05fQUREX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0FERF9TVEFSVDpFTkR9Ki9cblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJuZXdcIl0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcblxuICAgICAgICAvKntDQTpPTl9BRERfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0FERF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uRWRpdCgpIHtcbiAgICAgICAgLyp7Q0E6T05fRURJVF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FRElUX1NUQVJUOkVORH0qL1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnNlbGVjdGlvblswXS5pZF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcblxuICAgICAgICAvKntDQTpPTl9FRElUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FRElUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZWxldGUoKSB7XG4gICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ERUxFVEVfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0oe1xuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5kZWxldGVfY29uZmlybWF0aW9uX21lc3NhZ2VcIiksXG4gICAgICAgICAgICBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlX2NvbmZpcm1hdGlvbl90aXRsZVwiKSxcbiAgICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgZm9ya0pvaW4odGhpcy5zZWxlY3Rpb24ubWFwKGFubm90YXRpb25IaXN0b3J5ID0+IHRoaXMuYW5ub3RhdGlvbkhpc3RvcnlTZXJ2aWNlLmRlbGV0ZShhbm5vdGF0aW9uSGlzdG9yeS5pZCkpKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9GSU5BTElaRV9UT1A6U1RBUlR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfRklOQUxJWkVfVE9QOkVORH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRHcmlkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX0ZJTkFMSVpFX0JPVFRPTTpTVEFSVH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9GSU5BTElaRV9CT1RUT006RU5EfSovXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX1NUQVJUX1RPUDpTVEFSVH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVF9UT1A6RU5EfSovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcnk6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlZF9tZXNzYWdlX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZGVsZXRlZF9tZXNzYWdlX2NvbnRlbnRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp7Q0E6T05fREVMRVRFX1NUQVJUX0JPVFRPTTpTVEFSVH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9TVEFSVF9CT1RUT006RU5EfSovXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qe0NBOk9OX0RFTEVURV9FUlJPUl9UT1A6U1RBUlR9Ki9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKntDQTpPTl9ERUxFVEVfRVJST1JfVE9QOkVORH0qL1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyp7Q0E6T05fREVMRVRFX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9ERUxFVEVfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c0lucHV0KGVsZW1lbnRJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtlbGVtZW50SWR9YCk7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFiZWxWYWx1ZShjb250ZW50czogYW55W10sIGRpc3BsYXlGaWVsZHM6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiBjb250ZW50cy5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICBsYWJlbDogZGlzcGxheUZpZWxkc1xuICAgICAgICAgICAgICAgIC5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtW2ZpZWxkXSA9IHRoaXMuZ2V0UHJvcChpdGVtLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkID09PSBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bZmllbGRdID0gdGhpcy5sb2FkTGFiZWxGcm9tRW51bShpdGVtW2ZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bZmllbGRdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIgLSBcIiksXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Bbm5vdGF0aW9uVHlwZUxvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICAvKntDQTpPTl9UWVBFX0xPT0tVUF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldEFubm90YXRpb25UeXBlU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoZm9ybUZpZWxkID0+IGNyZWF0ZUZpbHRlclN0cmluZyhmb3JtRmllbGQsIHZhbHVlLCB7IHRleHRTZWFjaEVudW06IHRydWUgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHMgPT4gISFzKVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmFubm90YXRpb25UeXBlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5hbm5vdGF0aW9uVHlwZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvblR5cGVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgobGlzdDogYW55KSA9PiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLmFubm90YXRpb25UeXBlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX1RZUEVfTE9PS1VQX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFubm90YXRpb25UeXBlU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX1RZUEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fVFlQRV9TRUFSQ0hfUkVRVUVTVF9TVEFSVDpFTkR9Ki9cblxuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRBbm5vdGF0aW9uVHlwZVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gISFmaWx0ZXJEYXRhW25hbWVdICYmIGZpbHRlckRhdGFbbmFtZV0gIT09IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5FbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5TdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBjb250YWluaW5nKHVwcGVyKCR7bmFtZX0pLCB1cHBlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgY29uc3QgZGlzcGxheUZpZWxkcyA9IG1lcmdlVW5pcXVlKHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmFubm90YXRpb25UeXBlQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uVHlwZVNlcnZpY2VcbiAgICAgICAgICAgIC5saXN0KHsgcGFnZSwgc29ydCwgZmlsdGVyUXVlcnksIGRpc3BsYXlGaWVsZHMgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChsaXN0OiBhbnkpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGdyaWREYXRhOiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cERpc3BsYXlGaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cFNlYXJjaE9ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fVFlQRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fVFlQRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVzcG9uc2libGVMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgZmlsdGVyUXVlcnkgPSB0aGlzLmdldFJlc3BvbnNpYmxlU2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgdHlwZSB9KSA9PiBpc1ZhbGlkRmlsdGVyKHR5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgIC5tYXAoZm9ybUZpZWxkID0+IGNyZWF0ZUZpbHRlclN0cmluZyhmb3JtRmllbGQsIHZhbHVlLCB7IHRleHRTZWFjaEVudW06IHRydWUgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKHMgPT4gISFzKVxuICAgICAgICAgICAgLmpvaW4oXCIgb3IgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLnJlc3BvbnNpYmxlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5yZXNwb25zaWJsZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuZW1wbG95ZWVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKG1hcCgobGlzdDogYW55KSA9PiB0aGlzLmdldExhYmVsVmFsdWUobGlzdC5jb250ZW50cywgdGhpcy5yZXNwb25zaWJsZUxvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLnJlc3BvbnNpYmxlTG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX0xPT0tVUF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9SRVNQT05TSUJMRV9MT09LVVBfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVzcG9uc2libGVTZWFyY2hSZXF1ZXN0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fUkVTUE9OU0lCTEVfU0VBUkNIX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG5cbiAgICAgICAgY29uc3QgeyBmaXJzdCwgcm93cywgbXVsdGlTb3J0TWV0YSwgZmlsdGVyRGF0YSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBmaXJzdCAvIHJvd3M7XG4gICAgICAgIGNvbnN0IHNvcnQgPSBtdWx0aVNvcnRNZXRhO1xuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0UmVzcG9uc2libGVTZWFyY2hGaWVsZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+ICEhZmlsdGVyRGF0YVtuYW1lXSAmJiBmaWx0ZXJEYXRhW25hbWVdICE9PSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRW51bSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgY29udGFpbmluZyh1cHBlcigke25hbWV9KSwgdXBwZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLnJlc3BvbnNpYmxlTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5yZXNwb25zaWJsZUFkdmFuY2VkRGlzcGxheUZpZWxkcyk7XG4gICAgICAgIHRoaXMuZW1wbG95ZWVTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBncmlkRGF0YTogdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMucmVzcG9uc2libGVMb29rdXBEaXNwbGF5RmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHRoaXMucmVzcG9uc2libGVMb29rdXBTZWFyY2hPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX1JFU1BPTlNJQkxFX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9SRVNQT05TSUJMRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIGdldFByb3Aob2JqOiBhbnksIHBhdGg6IGFueSkge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PiAocmVzdWx0W3Byb3BdID09PSB1bmRlZmluZWQgPyBcIlwiIDogcmVzdWx0W3Byb3BdKSwgb2JqKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEdyaWRDb2x1bW5zKCkge1xuICAgICAgICBjb25zdCBncmlkQ29sdW1ucyA9IFtcbiAgICAgICAgICAgIHsgZmllbGQ6IFwic3RhcnREYXRlXCIsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3Rvcnlfc3RhcnRfZGF0ZVwiKSB9LFxuICAgICAgICAgICAgeyBmaWVsZDogXCJhbm5vdGF0aW9uVHlwZS5jb2RlXCIsIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfYW5ub3RhdGlvbl90eXBlX2NvZGVcIikgfSxcbiAgICAgICAgICAgIHsgZmllbGQ6IFwiYW5ub3RhdGlvblR5cGUubmFtZVwiLCBoZWFkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2Fubm90YXRpb25fdHlwZV9uYW1lXCIpIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZmllbGQ6IFwiYW5ub3RhdGlvblwiLFxuICAgICAgICAgICAgICAgIGhlYWRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfYW5ub3RhdGlvblwiKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0dSSURfQ09MVU1OUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfR1JJRF9DT0xVTU5TOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0SGlzdG9yeUdyaWRDb2x1bW5zKHRoaXMudHJhbnNsYXRlLCB0aGlzLmNvbmZpZ1NlcnZpY2UpLmNvbmNhdChncmlkQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJGaWVsZHMoKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlckZpZWxkcyA9IFtcbiAgICAgICAgICAgIHRoaXMuZW1wbG95ZWVMb29rdXBTZXJ2aWNlLmdldEZvcm1GaWVsZCgpLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llclwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVyXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5Mb29rdXAsXG4gICAgICAgICAgICAgICAgcmVjb3JkTGFiZWw6IGdldFJlY29yZExhYmVsKHRoaXMudHJhbnNsYXRlKSxcbiAgICAgICAgICAgICAgICByZWNvcmRzTGFiZWw6IGdldFJlY29yZExhYmVsKHRoaXMudHJhbnNsYXRlKSxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZXJfc2VhcmNoX3RpdGxlXCIpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEVtcHR5VGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8ubm90aGluZ19mb3VuZFwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJcIiksXG4gICAgICAgICAgICAgICAgZmlsdGVyVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZmlsdGVyc1wiKSxcbiAgICAgICAgICAgICAgICBjbGVhckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNsZWFyXCIpLFxuICAgICAgICAgICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNhbmNlbFwiKSxcbiAgICAgICAgICAgICAgICBzZWxlY3RMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5zZWxlY3RcIiksXG4gICAgICAgICAgICAgICAgZGF0YUtleTogXCJpZFwiLFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zT2JzZXJ2YWJsZTogdGhpcy5jb21wYW55TG9va3VwU3VnZ2VzdGlvbnNPYnNlcnZhYmxlLFxuICAgICAgICAgICAgICAgIHNlYXJjaE9ic2VydmFibGU6IHRoaXMuY29tcGFueUxvb2t1cFNlYXJjaE9ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgb25Mb29rdXBSZXF1ZXN0OiAodmFsdWU6IHN0cmluZykgPT4gdGhpcy5vbkNvbXBhbnlMb29rdXBSZXF1ZXN0KHZhbHVlKSxcbiAgICAgICAgICAgICAgICBvblNlYXJjaFJlcXVlc3Q6IChldmVudDogYW55KSA9PiB0aGlzLm9uQ29tcGFueVNlYXJjaFJlcXVlc3QoZXZlbnQpLFxuICAgICAgICAgICAgICAgIGxvb2t1cERpc3BsYXlGaWVsZDogXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkczogdGhpcy5nZXRDb21wYW55U2VhcmNoRmllbGRzKCksXG4gICAgICAgICAgICAgICAgc2VhcmNoR3JpZEZpZWxkczogdGhpcy5nZXRDb21wYW55U2VhcmNoR3JpZEZpZWxkcygpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvbXBhbnlCcmFuY2hcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb21wYW55X2JyYW5jaFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuTG9va3VwLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWFyY2hUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb21wYW55X2JyYW5jaF9zZWFyY2hfdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgc2VhcmNoRW1wdHlUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICAgICAgICAgIGZpbHRlckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmZpbHRlclwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJzXCIpLFxuICAgICAgICAgICAgICAgIGNsZWFyTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY2xlYXJcIiksXG4gICAgICAgICAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY2FuY2VsXCIpLFxuICAgICAgICAgICAgICAgIHJlY29yZExhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0xhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uc2VsZWN0XCIpLFxuICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwiaWRcIixcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc09ic2VydmFibGU6IHRoaXMuY29tcGFueUJyYW5jaExvb2t1cFN1Z2dlc3Rpb25zT2JzZXJ2YWJsZSxcbiAgICAgICAgICAgICAgICBzZWFyY2hPYnNlcnZhYmxlOiB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBTZWFyY2hPYnNlcnZhYmxlLFxuICAgICAgICAgICAgICAgIG9uTG9va3VwUmVxdWVzdDogKHZhbHVlOiBzdHJpbmcpID0+IHRoaXMub25Db21wYW55QnJhbmNoTG9va3VwUmVxdWVzdCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgb25TZWFyY2hSZXF1ZXN0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbkNvbXBhbnlCcmFuY2hTZWFyY2hSZXF1ZXN0KGV2ZW50KSxcbiAgICAgICAgICAgICAgICBsb29rdXBEaXNwbGF5RmllbGQ6IFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICBzZWFyY2hGaWVsZHM6IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEZpZWxkcygpLFxuICAgICAgICAgICAgICAgIHNlYXJjaEdyaWRGaWVsZHM6IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEdyaWRGaWVsZHMoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb250cmFjdFR5cGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9lbXBsb3ltZW50X3JlbGF0aW9uc2hpcF9jb250cmFjdF90eXBlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVfcGxhY2Vob2xkZXJcIiksXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJhbm5vdGF0aW9uVHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25faGlzdG9yeV9hbm5vdGF0aW9uX3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkxvb2t1cCxcbiAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VhcmNoVGl0bGU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2Fubm90YXRpb25fdHlwZV9zZWFyY2hfdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgc2VhcmNoRW1wdHlUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5ub3RoaW5nX2ZvdW5kXCIpLFxuICAgICAgICAgICAgICAgIGZpbHRlckxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmZpbHRlclwiKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJUaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5maWx0ZXJzXCIpLFxuICAgICAgICAgICAgICAgIHJlY29yZExhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0xhYmVsOiBnZXRSZWNvcmRMYWJlbCh0aGlzLnRyYW5zbGF0ZSksXG4gICAgICAgICAgICAgICAgY2xlYXJMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jbGVhclwiKSxcbiAgICAgICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jYW5jZWxcIiksXG4gICAgICAgICAgICAgICAgc2VsZWN0TGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uc2VsZWN0XCIpLFxuICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwiaWRcIixcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uc09ic2VydmFibGU6IHRoaXMuYW5ub3RhdGlvblR5cGVMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgc2VhcmNoT2JzZXJ2YWJsZTogdGhpcy5hbm5vdGF0aW9uVHlwZUxvb2t1cFNlYXJjaE9ic2VydmFibGUsXG4gICAgICAgICAgICAgICAgb25Mb29rdXBSZXF1ZXN0OiAodmFsdWU6IHN0cmluZykgPT4gdGhpcy5vbkFubm90YXRpb25UeXBlTG9va3VwUmVxdWVzdCh2YWx1ZSksXG4gICAgICAgICAgICAgICAgb25TZWFyY2hSZXF1ZXN0OiAoZXZlbnQ6IGFueSkgPT4gdGhpcy5vbkFubm90YXRpb25UeXBlU2VhcmNoUmVxdWVzdChldmVudCksXG4gICAgICAgICAgICAgICAgbG9va3VwRGlzcGxheUZpZWxkOiBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgc2VhcmNoRmllbGRzOiB0aGlzLmdldEFubm90YXRpb25UeXBlU2VhcmNoRmllbGRzKCksXG4gICAgICAgICAgICAgICAgc2VhcmNoR3JpZEZpZWxkczogdGhpcy5nZXRBbm5vdGF0aW9uVHlwZVNlYXJjaEdyaWRGaWVsZHMoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llZVNpdHVhdGlvblwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX3NpdHVhdGlvblwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfc2l0dWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBTaXR1YXRpb25FbXBsb3llZS5FVkVSWU9ORSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBzaXR1YXRpb25PcHRpb25zKHRoaXMudHJhbnNsYXRlLCB0aGlzLmNvbmZpZ1NlcnZpY2UpLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIGZpbHRlckZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNldFN0b3JhZ2VGaWx0ZXJzSW50b0Zvcm0oZm9ybTogRm9ybUdyb3VwKSB7XG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBhd2FpdCB0aGlzLmZpbHRlcnNTdG9yYWdlU2VydmljZS5nZXRGaWx0ZXJzKFwiQW5ub3RhdGlvbkhpc3RvcnlMaXN0Q29tcG9uZW50XCIpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNEYXRlID0gbW9tZW50KGZpbHRlcnNbZmllbGRdLCBtb21lbnQuSFRNTDVfRk1ULkRBVEVUSU1FX0xPQ0FMX01TICsgJ1onLCB0cnVlKS5pc1ZhbGlkKCk7XG4gICAgICAgICAgICBmb3JtLmdldChmaWVsZCkuc2V0VmFsdWUoaXNEYXRlID8gbmV3IERhdGUoZmlsdGVyc1tmaWVsZF0pIDogZmlsdGVyc1tmaWVsZF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpbHRlcnNMb2FkZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWx0ZXJEYXRhID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgdGhpcy5yZXNldEdyaWQoeyBmaWx0ZXJEYXRhIH0pO1xuXG4gICAgICAgIC8qe0NBOkdFVF9GSUxURVJfRk9STV9HUk9VUDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRklMVEVSX0ZPUk1fR1JPVVA6RU5EfSovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRTdG9yYWdlUGFnaW5hdG9yKCkge1xuICAgICAgICBjb25zdCBwYWdpbmF0b3IgPSBhd2FpdCB0aGlzLnBhZ2luYXRvclN0b3JhZ2VTZXJ2aWNlLmdldFBhZ2luYXRvcihcIkFubm90YXRpb25IaXN0b3J5TGlzdENvbXBvbmVudFBhZ2luYXRvclwiKTtcblxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkocGFnaW5hdG9yKSAhPT0gXCJ7fVwiKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCAuLi5wYWdpbmF0b3IgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qe0NBOkdFVF9GSUxURVJfRk9STV9HUk9VUDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfRklMVEVSX0ZPUk1fR1JPVVA6RU5EfSovXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbnVtUXVlcnkobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBtdWx0aXBsZTogYm9vbGVhbikge1xuICAgICAgICByZXR1cm4gbXVsdGlwbGUgPyBgKCR7dmFsdWUubWFwKChzZWxlY3RlZDogYW55KSA9PiBgJHtuYW1lfSBlcSAnJHtzZWxlY3RlZH0nYCkuam9pbihcIiBvciBcIil9KWAgOiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFubm90YXRpb25UeXBlU2VhcmNoRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX3R5cGVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJuYW1lXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl90eXBlX25hbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9UWVBFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1RZUEVfU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QW5ub3RhdGlvblR5cGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl90eXBlX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25fdHlwZV9uYW1lXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfVFlQRV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX1RZUEVfU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RW1wbG95ZWVTZWFyY2hGaWVsZHMoKSB7IC8vIE5PU09OQVJcbiAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llci5jb2RFbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfZW1wbG95ZXJfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXJzb24ubm9tUGVzXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfcGVyc29uX25vbV9wZXNcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVtcGxveWVlU2VhcmNoR3JpZEZpZWxkcygpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95ZXIuY29kRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uYW5ub3RhdGlvbl9oaXN0b3J5X2VtcGxveWVyX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwicGVyc29uLm5vbVBlc1wiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX3BlcnNvbl9ub21fcGVzXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9lbXBsb3ltZW50X3JlbGF0aW9uc2hpcF9jb250cmFjdF90eXBlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5FbnVtLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuY29udHJhY3RUeXBlT3B0aW9ucyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9HUklEX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoR3JpZEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlc3BvbnNpYmxlU2VhcmNoRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcGxveWVyLmNvZEVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmFubm90YXRpb25faGlzdG9yeV9lbXBsb3llcl9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZGVcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInBlcnNvbi5ub21QZXNcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5lbXBsb3llZV9wZXJzb25fbm9tX3Blc1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfZW1wbG95bWVudF9yZWxhdGlvbnNoaXBfY29udHJhY3RfdHlwZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuRW51bSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB0aGlzLmNvbnRyYWN0VHlwZU9wdGlvbnMsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfUkVTUE9OU0lCTEVfU0VBUkNIX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfUkVTUE9OU0lCTEVfU0VBUkNIX0ZJRUxEUzpFTkR9Ki9cblxuICAgICAgICByZXR1cm4gc2VhcmNoRmllbGRzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVzcG9uc2libGVTZWFyY2hHcmlkRmllbGRzKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hHcmlkRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3llci5jb2RFbXBcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5hbm5vdGF0aW9uX2hpc3RvcnlfZW1wbG95ZXJfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RlXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfY29kZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuSW50ZWdlcixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJwZXJzb24ubm9tUGVzXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uZW1wbG95ZWVfcGVyc29uX25vbV9wZXNcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJlbXBsb3ltZW50UmVsYXRpb25zaGlwLmNvbnRyYWN0VHlwZVwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmVtcGxveWVlX2VtcGxveW1lbnRfcmVsYXRpb25zaGlwX2NvbnRyYWN0X3R5cGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkVudW0sXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX1JFU1BPTlNJQkxFX1NFQVJDSF9HUklEX0ZJRUxEUzpTVEFSVH0qL1xuICAgICAgICAvKntDQTpHRVRfUkVTUE9OU0lCTEVfU0VBUkNIX0dSSURfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hHcmlkRmllbGRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbXBhbnlMb29rdXBSZXF1ZXN0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfU1RBUlQ6RU5EfSovXG4gICAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLmNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzLm1hcCgoZmllbGQ6IGFueSkgPT4gKHsgZmllbGQsIG9yZGVyOiAxIH0pKTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q29tcGFueVNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5jb21wYW55TG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5jb21wYW55QWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5jb21wYW55U2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcywgc29ydCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpc3Q6IGFueSkgPT4gdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUxvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLmNvbXBhbnlMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVSX0xPT0tVUF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db21wYW55U2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGNvbnN0IGZpbHRlclF1ZXJ5ID0gdGhpcy5nZXRDb21wYW55U2VhcmNoRmllbGRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiBmaWx0ZXJEYXRhW25hbWVdICE9IHVuZGVmaW5lZCAmJiBmaWx0ZXJEYXRhW25hbWVdICE9IFwiXCIpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRW51bSkgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLlN0cmluZykgcmV0dXJuIGBjb250YWluaW5nKHVwcGVyKCR7bmFtZX0pLCB1cHBlcignJHt2YWx1ZS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIil9JykpYDtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAuam9pbihcIiBhbmQgXCIpO1xuXG4gICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZHMgPSBtZXJnZVVuaXF1ZSh0aGlzLmNvbXBhbnlMb29rdXBEaXNwbGF5RmllbGRzLCB0aGlzLmNvbXBhbnlBZHZhbmNlZERpc3BsYXlGaWVsZHMpO1xuICAgICAgICB0aGlzLmNvbXBhbnlTZXJ2aWNlXG4gICAgICAgICAgICAubGlzdCh7IHBhZ2UsIHNvcnQsIGZpbHRlclF1ZXJ5LCBkaXNwbGF5RmllbGRzIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgobGlzdDogYW55KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBncmlkRGF0YTogdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUxvb2t1cERpc3BsYXlGaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB0b3RhbFJlY29yZHM6IGxpc3QudG90YWxFbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVG90YWxSZWNvcmRzTGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8udG90YWxfcmVjb3Jkc1wiLCB7IHZhbHVlOiBsaXN0LnRvdGFsRWxlbWVudHMgfSksXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB0aGlzLmNvbXBhbnlMb29rdXBTZWFyY2hPYnNlcnZhYmxlLm5leHQoZGF0YSkpO1xuXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX0VORDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6RU5EfSovXG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29tcGFueUJyYW5jaExvb2t1cFJlcXVlc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFUl9MT09LVVBfUkVRVUVTVF9TVEFSVDpTVEFSVH0qL1xuICAgICAgICAvKntDQTpPTl9FTVBMT1lFUl9MT09LVVBfUkVRVUVTVF9TVEFSVDpFTkR9Ki9cbiAgICAgICAgY29uc3Qgc29ydCA9IHRoaXMuY29tcGFueUJyYW5jaExvb2t1cERpc3BsYXlGaWVsZHMubWFwKChmaWVsZDogYW55KSA9PiAoeyBmaWVsZCwgb3JkZXI6IDEgfSkpO1xuXG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHR5cGUgfSkgPT4gaXNWYWxpZEZpbHRlcih0eXBlLCB2YWx1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUgfSkgPT4geyAvL05PU09OQVJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwibnVtYmVyXCIpIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5UaW1lKSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7bW9tZW50KHZhbHVlKS5mb3JtYXQoXCJISDptbTpzc1wiKX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5EYXRlVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KCl9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuU3RyaW5nKSByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIGVsc2UgcmV0dXJuIGAke25hbWV9IGVxICcke3ZhbHVlfSdgO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSlcbiAgICAgICAgICAgIC5qb2luKFwiIG9yIFwiKTtcblxuICAgICAgICBjb25zdCBlbXBsb3llciA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnZW1wbG95ZXInKS52YWx1ZTtcbiAgICAgICAgaWYgKGVtcGxveWVyKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wYW55RmlsdGVyID0gYGUwNzBlbXAuY29kRW1wIGVxICR7ZW1wbG95ZXIuY29kRW1wfWA7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ID8gYCR7ZmlsdGVyUXVlcnl9IGFuZCAke2NvbXBhbnlGaWx0ZXJ9YCA6IGNvbXBhbnlGaWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5jb21wYW55QnJhbmNoTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5jb21wYW55QnJhbmNoQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5jb21wYW55QnJhbmNoU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcywgc29ydCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShtYXAoKGxpc3Q6IGFueSkgPT4gdGhpcy5nZXRMYWJlbFZhbHVlKGxpc3QuY29udGVudHMsIHRoaXMuY29tcGFueUJyYW5jaExvb2t1cERpc3BsYXlGaWVsZHMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueVtdKSA9PiB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBTdWdnZXN0aW9uc09ic2VydmFibGUubmV4dChkYXRhKSk7XG5cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRVJfTE9PS1VQX1JFUVVFU1RfRU5EOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVSX0xPT0tVUF9SRVFVRVNUX0VORDpFTkR9Ki9cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db21wYW55QnJhbmNoU2VhcmNoUmVxdWVzdChldmVudDogYW55KSB7XG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOk9OX0VNUExPWUVFX1NFQVJDSF9SRVFVRVNUX1NUQVJUOkVORH0qL1xuICAgICAgICBjb25zdCB7IGZpcnN0LCByb3dzLCBtdWx0aVNvcnRNZXRhLCBmaWx0ZXJEYXRhIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgcGFnZSA9IGZpcnN0IC8gcm93cztcbiAgICAgICAgY29uc3Qgc29ydCA9IG11bHRpU29ydE1ldGE7XG4gICAgICAgIGxldCBmaWx0ZXJRdWVyeSA9IHRoaXMuZ2V0Q29tcGFueUJyYW5jaFNlYXJjaEZpZWxkcygpXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT4gZmlsdGVyRGF0YVtuYW1lXSAhPSB1bmRlZmluZWQgJiYgZmlsdGVyRGF0YVtuYW1lXSAhPSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCB0eXBlIH0pID0+IHsgLy9OT1NPTkFSXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJEYXRhW25hbWVdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSBcIm51bWJlclwiKSByZXR1cm4gYCR7bmFtZX0gZXEgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkRhdGUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuVGltZSkgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIil9J2A7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gRmllbGRUeXBlLkVudW0pIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZX0nYDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEZpZWxkVHlwZS5TdHJpbmcpIHJldHVybiBgY29udGFpbmluZyh1cHBlcigke25hbWV9KSwgdXBwZXIoJyR7dmFsdWUucmVwbGFjZSgvJy9nLCBcIlxcXFwnXCIpfScpKWA7XG4gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKVxuICAgICAgICAgICAgLmpvaW4oXCIgYW5kIFwiKTtcblxuICAgICAgICBjb25zdCBlbXBsb3llciA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldCgnZW1wbG95ZXInKS52YWx1ZTtcbiAgICAgICAgaWYgKGVtcGxveWVyKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wYW55RmlsdGVyID0gYGUwNzBlbXAuY29kRW1wIGVxICR7ZW1wbG95ZXIuY29kRW1wfWA7XG4gICAgICAgICAgICBmaWx0ZXJRdWVyeSA9IGZpbHRlclF1ZXJ5ID8gYCR7ZmlsdGVyUXVlcnl9IGFuZCAke2NvbXBhbnlGaWx0ZXJ9YCA6IGNvbXBhbnlGaWx0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gbWVyZ2VVbmlxdWUodGhpcy5jb21wYW55QnJhbmNoTG9va3VwRGlzcGxheUZpZWxkcywgdGhpcy5jb21wYW55QnJhbmNoQWR2YW5jZWREaXNwbGF5RmllbGRzKTtcbiAgICAgICAgdGhpcy5jb21wYW55QnJhbmNoU2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGxpc3Q6IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ2V0TGFiZWxWYWx1ZShsaXN0LmNvbnRlbnRzLCB0aGlzLmNvbXBhbnlCcmFuY2hMb29rdXBEaXNwbGF5RmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWxSZWNvcmRzOiBsaXN0LnRvdGFsRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFRvdGFsUmVjb3Jkc0xhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLnRvdGFsX3JlY29yZHNcIiwgeyB2YWx1ZTogbGlzdC50b3RhbEVsZW1lbnRzIH0pLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4gdGhpcy5jb21wYW55QnJhbmNoTG9va3VwU2VhcmNoT2JzZXJ2YWJsZS5uZXh0KGRhdGEpKTtcblxuICAgICAgICAvKntDQTpPTl9FTVBMT1lFRV9TRUFSQ0hfUkVRVUVTVF9FTkQ6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6T05fRU1QTE9ZRUVfU0VBUkNIX1JFUVVFU1RfRU5EOkVORH0qL1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tcGFueVNlYXJjaEZpZWxkcygpIHsgLy9OT1NPTkFSXG4gICAgICAgIGNvbnN0IHNlYXJjaEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9jb2RfZW1wXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbUVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfbm9tX2VtcFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG5cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6U1RBUlR9Ki9cbiAgICAgICAgLyp7Q0E6R0VUX0VNUExPWUVFX1NFQVJDSF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEZpZWxkcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbXBhbnlTZWFyY2hHcmlkRmllbGRzKCkgeyAvL05PU09OQVJcbiAgICAgICAgY29uc3Qgc2VhcmNoR3JpZEZpZWxkcyA9IFtcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiY29kRW1wXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9jb2RfZW1wXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbUVtcFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfbm9tX2VtcFwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEdyaWRGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb21wYW55QnJhbmNoU2VhcmNoRmllbGRzKCkgeyAvL05PU09OQVJcbiAgICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gW1xuICAgICAgICAgICAgbmV3IEZvcm1GaWVsZCh7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjb2RGaWxcIixcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImhjbV9jb250cmFjdC5lbXBsb3ltZW50X2FkZGl0aW9uYWxfaW5mby5jb21wYW55X2JyYW5jaF9jb2RlXCIpLFxuICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5JbnRlZ2VyLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm5vbUZpbFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfYnJhbmNoX25hbWVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLlN0cmluZyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfRklFTERTOkVORH0qL1xuXG4gICAgICAgIHJldHVybiBzZWFyY2hGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb21wYW55QnJhbmNoU2VhcmNoR3JpZEZpZWxkcygpIHsgLy9OT1NPTkFSXG4gICAgICAgIGNvbnN0IHNlYXJjaEdyaWRGaWVsZHMgPSBbXG4gICAgICAgICAgICBuZXcgRm9ybUZpZWxkKHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcImNvZEZpbFwiLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmNvbXBhbnlfYnJhbmNoX2NvZGVcIiksXG4gICAgICAgICAgICAgICAgdHlwZTogRmllbGRUeXBlLkludGVnZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibm9tRmlsXCIsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8uY29tcGFueV9icmFuY2hfbmFtZVwiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICAvKntDQTpHRVRfRU1QTE9ZRUVfU0VBUkNIX0dSSURfRklFTERTOlNUQVJUfSovXG4gICAgICAgIC8qe0NBOkdFVF9FTVBMT1lFRV9TRUFSQ0hfR1JJRF9GSUVMRFM6RU5EfSovXG5cbiAgICAgICAgcmV0dXJuIHNlYXJjaEdyaWRGaWVsZHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVHcmlkKGxpc3RQYXJhbXM6IExpc3RQYXJhbXMgPSB7fSkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyc0xvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdFBhcmFtcyA9IHsgLi4udGhpcy5jdXJyZW50TGlzdFBhcmFtcywgLi4ubGlzdFBhcmFtcyB9O1xuICAgICAgICBjb25zdCB7IHBhZ2UsIHNpemUsIGZpbHRlckRhdGEgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XG4gICAgICAgIGxldCB7IHNvcnQgfSA9IHRoaXMuY3VycmVudExpc3RQYXJhbXM7XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUb2tlbnMgPSB0aGlzLmZpbHRlckZpZWxkc1xuICAgICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+ICEhZmlsdGVyRGF0YVtuYW1lXSAmJiBmaWx0ZXJEYXRhW25hbWVdICE9PSBcIlwiKVxuICAgICAgICAgICAgLm1hcCgoeyBuYW1lLCBsYWJlbCwgdHlwZSwgc2VhcmNoRmllbGRzLCBvcHRpb25zIH06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyRGF0YVtuYW1lXTtcbiAgICAgICAgICAgICAgICBsZXQgbGFiZWxWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdChcIkxcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoXCJMVFNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxWYWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KFwiTCBMVFNcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuTG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRTZWFyY2hGaWVsZHMgPSBuYW1lID09PSBcImVtcGxveWVlXCIgPyB0aGlzLmdldEVtcGxveWVlU2VhcmNoRmllbGRzKCkgOiBzZWFyY2hGaWVsZHM7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsVmFsdWUgPSB1cGRhdGVkU2VhcmNoRmllbGRzXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChmaWVsZDogRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLm5hbWUuaW5kZXhPZihcIi5cIikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2ZpZWxkLm5hbWVdID0gdGhpcy5nZXRQcm9wKHZhbHVlLCBmaWVsZC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLm5hbWUgPT09IFwiZW1wbG95bWVudFJlbGF0aW9uc2hpcC5jb250cmFjdFR5cGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtmaWVsZC5uYW1lXSA9IHRoaXMubG9hZExhYmVsRnJvbUVudW0odmFsdWVbZmllbGQubmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbZmllbGQubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIgLSBcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuRW51bSkge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbFZhbHVlID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbjogT3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IGxhYmVsVmFsdWUpWzBdLmxhYmVsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxWYWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9hZGRpdGlvbmFsX2luZm8ubGlzdF9ncmlkX2Jvb2xlYW5fdHJ1ZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiaGNtX2NvbnRyYWN0LmVtcGxveW1lbnRfYWRkaXRpb25hbF9pbmZvLmxpc3RfZ3JpZF9ib29sZWFuX2ZhbHNlXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGlkOiBuYW1lLCBsYWJlbDogYCR7bGFiZWx9OiAke2xhYmVsVmFsdWV9YCB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGZpbHRlclF1ZXJ5ID0gdGhpcy5maWx0ZXJGaWVsZHNcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PiAhIWZpbHRlckRhdGFbbmFtZV0pXG4gICAgICAgICAgICAubWFwKCh7IG5hbWUsIHR5cGUsIG11bHRpcGxlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlckRhdGFbbmFtZV07XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09IFwiZW1wbG95ZWVTaXR1YXRpb25cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U2l0dWF0aW9uRmlsdGVySW5IaXN0b3JpY3ModmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWV9IGVxICcke21vbWVudCh2YWx1ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKX0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEZpZWxkVHlwZS5UaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkRhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHttb21lbnQodmFsdWUpLmZvcm1hdCgpfSdgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLlN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYGNvbnRhaW5pbmcodXBwZXIoJHtuYW1lfSksIHVwcGVyKCcke3ZhbHVlLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKX0nKSlgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gRmllbGRUeXBlLkVudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW51bVF1ZXJ5KG5hbWUsIHZhbHVlLCBtdWx0aXBsZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBGaWVsZFR5cGUuTG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lfSBlcSAnJHt2YWx1ZS5pZH0nYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZX0gZXEgJyR7dmFsdWV9J2A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiIGFuZCBcIik7XG5cbiAgICAgICAgZmlsdGVyUXVlcnkgPSBmaWx0ZXJRdWVyeVxuICAgICAgICAgICAgLnJlcGxhY2UoJ2VtcGxveWVyIGVxJywgJ2VtcGxveWVlLmVtcGxveWVyIGVxJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCdjb21wYW55QnJhbmNoIGVxJywgJ2VtcGxveWVlLmVtcGxveWVlU25hcHNob3QuY29tcGFueUJyYW5jaCBlcScpXG4gICAgICAgICAgICAucmVwbGFjZSgnY29udHJhY3RUeXBlIGVxJywgJ2VtcGxveWVlLmVtcGxveW1lbnRSZWxhdGlvbnNoaXAuY29udHJhY3RUeXBlIGVxJylcblxuICAgICAgICBjb25zdCBkaXNwbGF5RmllbGRzID0gdGhpcy5ncmlkQ29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZCk7XG5cbiAgICAgICAgaWYgKCFzb3J0KSB7XG4gICAgICAgICAgICBzb3J0ID0gW3sgZmllbGQ6IFwibGFzdE1vZGlmaWVkRGF0ZVwiLCBvcmRlcjogLTEgfV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFubm90YXRpb25IaXN0b3J5U2VydmljZVxuICAgICAgICAgICAgLmxpc3QoeyBwYWdlLCBzaXplLCBzb3J0LCBmaWx0ZXJRdWVyeSwgZGlzcGxheUZpZWxkcyB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPj0gNTAwICYmIGVyci5zdGF0dXMgPCA2MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmVyRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZERhdGEgPSBsaXN0LmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gbGlzdC50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmVyRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldEdyaWQobGlzdFBhcmFtcz86IExpc3RQYXJhbXMpIHtcbiAgICAgICAgaWYgKGxpc3RQYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExpc3RQYXJhbXMgPSB7IC4uLnRoaXMuY3VycmVudExpc3RQYXJhbXMsIC4uLmxpc3RQYXJhbXMgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zID0geyAuLi50aGlzLmN1cnJlbnRMaXN0UGFyYW1zLCBwYWdlOiAwLCBzb3J0OiBbXSB9O1xuICAgICAgICB0aGlzLnRhYmxlLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUFsbEZvcm1GaWVsZHMoZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcbiAgICAgICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsRm9ybUZpZWxkcyhjb250cm9sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNvcnRGaWVsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudExpc3RQYXJhbXMuc29ydDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFnZVNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRMaXN0UGFyYW1zLnNpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvd0luZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5wYWdlICogdGhpcy5jdXJyZW50TGlzdFBhcmFtcy5zaXplO1xuICAgIH1cblxuICAgIC8qe0NBOkNMQVNTX01FVEhPRFM6U1RBUlR9Ki9cbiAgICBwcml2YXRlIGxvYWRMYWJlbEZyb21FbnVtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm91bmRFbnVtID0gdGhpcy5jb250cmFjdFR5cGVPcHRpb25zLmZpbHRlcihyID0+IHIudmFsdWUgPT09IHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIChmb3VuZEVudW0gJiYgZm91bmRFbnVtLmxlbmd0aCAmJiBmb3VuZEVudW1bMF0ubGFiZWwpIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJoY21fY29udHJhY3QuZW1wbG95bWVudF9jb250cmFjdC5saXN0X2dyaWRfZW1wdHlfZmllbGRcIik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQWRkQ29sbGVjdGl2ZSgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2BuZXctY29sbGVjdGl2ZWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIGZyYWdtZW50OiBDb2xsZWN0aXZlUHJvY2Vzc1R5cGUuSU5DTFVERSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25SZW1vdmVDb2xsZWN0aXZlKCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYG5ldy1jb2xsZWN0aXZlYF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgZnJhZ21lbnQ6IENvbGxlY3RpdmVQcm9jZXNzVHlwZS5FWENMVURFIH0pO1xuICAgIH1cbiAgICAvKntDQTpDTEFTU19NRVRIT0RTOkVORH0qL1xufVxuXG5pbnRlcmZhY2UgTGlzdFBhcmFtcyB7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBzaXplPzogbnVtYmVyO1xuICAgIHNvcnQ/OiBTb3J0TWV0YVtdO1xuICAgIGZpbHRlckRhdGE/OiBhbnk7XG59XG5cbi8qe0NBOkZJTEVfQ09OVEVOVFM6U1RBUlR9Ki9cbi8qe0NBOkZJTEVfQ09OVEVOVFM6RU5EfSovXG4iXX0=