@seniorsistemas/components-ai 1.2.0-master-dc3274f0 → 1.2.0-master-b7bc46aa

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.
@@ -490,7 +490,9 @@ export class DynamicFormComponent {
490
490
  this.form.markAllAsTouched();
491
491
  return;
492
492
  }
493
- this.loading = true;
493
+ if (this.mode !== 'filter') {
494
+ this.loading = true;
495
+ }
494
496
  const formValue = this.mode === 'filter'
495
497
  ? this.processFilterValue(this.form.value)
496
498
  : this.processFormValue(this.form.value);
@@ -702,4 +704,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
702
704
  }], fieldSave: [{
703
705
  type: Output
704
706
  }] } });
705
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RG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QTZCOzs0RkFLcEIsb0JBQW9CO2tCQXJCaEMsU0FBUzsrQkFDRSxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IseUJBQXlCO3dCQUN6QiwyQkFBMkI7d0JBQzNCLHlCQUF5Qjt3QkFDekIsNkJBQTZCO3dCQUM3QiwyQkFBMkI7d0JBQzNCLDZCQUE2QjtxQkFDOUI7dUtBS1EsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBhbmVsTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wYW5lbCc7XG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQgeyBEcmF3ZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RyYXdlcic7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBcbiAgRHluYW1pY0Zvcm1GaWVsZENvbmZpZywgXG4gIER5bmFtaWNGb3JtU2VjdGlvbixcbiAgRHluYW1pY0Zvcm1EaXNwbGF5TW9kZSxcbiAgRHluYW1pY0Zvcm1EaWFsb2dDb25maWcsXG4gIER5bmFtaWNGb3JtRHJhd2VyQ29uZmlnXG59IGZyb20gJy4vbW9kZWxzL2R5bmFtaWMtZm9ybS5tb2RlbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBNYXNrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc2suc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IER5bmFtaWNGaWVsZFRleHRDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZE51bWJlckNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGREYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1kYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGREcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZExvb2t1cENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtbG9va3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEeW5hbWljRmllbGRUZXh0YXJlYUNvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtdGV4dGFyZWEuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2lhLWR5bmFtaWMtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBQYW5lbE1vZHVsZSxcbiAgICBEaWFsb2dNb2R1bGUsXG4gICAgRHJhd2VyTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIER5bmFtaWNGaWVsZFRleHRDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkTnVtYmVyQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZERhdGVDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkTG9va3VwQ29tcG9uZW50LFxuICAgIER5bmFtaWNGaWVsZFRleHRhcmVhQ29tcG9uZW50XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgZm9ybUZpZWxkczogRHluYW1pY0Zvcm1GaWVsZENvbmZpZ1tdID0gW107XG4gIEBJbnB1dCgpIGZvcm1TZWN0aW9uczogRHluYW1pY0Zvcm1TZWN0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgZml4ZWRGaWx0ZXJzOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnW10gPSBbXTsgLy8gRmlsdHJvcyBmaXhvcyAoc2VtcHJlIHZpc8OtdmVpcyBubyB0b3BvKVxuICBASW5wdXQoKSBmaWx0ZXJTZWN0aW9uczogRHluYW1pY0Zvcm1TZWN0aW9uW10gPSBbXTsgLy8gU2XDp8O1ZXMgZGUgZmlsdHJvcyAoY29sYXBzw6F2ZWlzKVxuICBASW5wdXQoKSBlbnRpdHlEYXRhOiBhbnkgPSBudWxsO1xuICBASW5wdXQoKSBtb2RlOiAnZm9ybScgfCAnZmlsdGVyJyB8ICdpbmxpbmUtZWRpdCcgPSAnZm9ybSc7XG4gIFxuICAvLyBEaXNwbGF5IE1vZGUgQ29uZmlndXJhdGlvblxuICBASW5wdXQoKSBkaXNwbGF5TW9kZTogRHluYW1pY0Zvcm1EaXNwbGF5TW9kZSA9ICdpbmxpbmUnO1xuICBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpYWxvZ0NvbmZpZzogRHluYW1pY0Zvcm1EaWFsb2dDb25maWcgPSB7fTtcbiAgQElucHV0KCkgZHJhd2VyQ29uZmlnOiBEeW5hbWljRm9ybURyYXdlckNvbmZpZyA9IHt9O1xuICBcbiAgLy8gQnV0dG9uIENvbmZpZ3VyYXRpb25cbiAgQElucHV0KCkgc2hvd1N1Ym1pdEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93Q2FuY2VsQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN1Ym1pdEJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBjYW5jZWxCdXR0b25MYWJlbD86IHN0cmluZztcbiAgQElucHV0KCkgc3VibWl0QnV0dG9uSWNvbjogc3RyaW5nID0gJ3BpIHBpLWNoZWNrJztcbiAgQElucHV0KCkgY2FuY2VsQnV0dG9uSWNvbjogc3RyaW5nID0gJ3BpIHBpLXRpbWVzJztcbiAgXG4gIEBPdXRwdXQoKSBmb3JtUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1Hcm91cD4oKTtcbiAgQE91dHB1dCgpIGZvcm1TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGZpZWxkU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55IH0+KCk7XG5cbiAgZm9ybSE6IEZvcm1Hcm91cDtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgLy8gSW5saW5lIGVkaXQgbW9kZSBzdGF0ZVxuICBlZGl0aW5nRmllbGQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzYXZpbmdGaWVsZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCBoYXNGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUZpZWxkcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGhhc1NlY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1TZWN0aW9ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGhhc0ZpeGVkRmlsdGVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZEZpbHRlcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBoYXNGaWx0ZXJTZWN0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZWN0aW9ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGFsbEZpZWxkcygpOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnW10ge1xuICAgIC8vIFJldG9ybmEgdG9kb3Mgb3MgY2FtcG9zIChkaXJldG9zICsgZGFzIHNlw6fDtWVzICsgZmlsdHJvcyBmaXhvcyArIHNlw6fDtWVzIGRlIGZpbHRyb3MpXG4gICAgY29uc3Qgc2VjdGlvbkZpZWxkcyA9IHRoaXMuZm9ybVNlY3Rpb25zLmZsYXRNYXAoc2VjdGlvbiA9PiBzZWN0aW9uLmZpZWxkcyk7XG4gICAgY29uc3QgZmlsdGVyU2VjdGlvbkZpZWxkcyA9IHRoaXMuZmlsdGVyU2VjdGlvbnMuZmxhdE1hcChzZWN0aW9uID0+IHNlY3Rpb24uZmllbGRzKTtcbiAgICByZXR1cm4gWy4uLnRoaXMuZm9ybUZpZWxkcywgLi4uc2VjdGlvbkZpZWxkcywgLi4udGhpcy5maXhlZEZpbHRlcnMsIC4uLmZpbHRlclNlY3Rpb25GaWVsZHNdO1xuICB9XG5cbiAgZ2V0IGlzSW5saW5lTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TW9kZSA9PT0gJ2lubGluZSc7XG4gIH1cblxuICBnZXQgaXNJbmxpbmVFZGl0TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnaW5saW5lLWVkaXQnO1xuICB9XG5cbiAgZ2V0IGZpZWxkTW9kZSgpOiAnZm9ybScgfCAnZmlsdGVyJyB7XG4gICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVFZGl0TW9kZSA/ICdmb3JtJyA6IHRoaXMubW9kZSBhcyAnZm9ybScgfCAnZmlsdGVyJztcbiAgfVxuXG4gIGdldCBpc0RpYWxvZ01vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheU1vZGUgPT09ICdkaWFsb2cnO1xuICB9XG5cbiAgZ2V0IGlzRHJhd2VyTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TW9kZSA9PT0gJ2RyYXdlcic7XG4gIH1cblxuICAvLyBEaWFsb2cgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHRzXG4gIGdldCBkaWFsb2dIZWFkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcuaGVhZGVyIHx8IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnZGVzaWduLmNvbXBvbmVudHNfYWkuZm9ybScpO1xuICB9XG5cbiAgZ2V0IGRpYWxvZ1dpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLndpZHRoIHx8ICc2MDBweCc7XG4gIH1cblxuICBnZXQgZGlhbG9nRHJhZ2dhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5kcmFnZ2FibGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuZGlhbG9nQ29uZmlnLmRyYWdnYWJsZSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGRpYWxvZ1Jlc2l6YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcucmVzaXphYmxlICE9PSB1bmRlZmluZWQgPyB0aGlzLmRpYWxvZ0NvbmZpZy5yZXNpemFibGUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBkaWFsb2dNYXhpbWl6YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcubWF4aW1pemFibGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuZGlhbG9nQ29uZmlnLm1heGltaXphYmxlIDogZmFsc2U7XG4gIH1cblxuICBnZXQgZGlhbG9nQ2xvc2VPbkVzY2FwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcuY2xvc2VPbkVzY2FwZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5kaWFsb2dDb25maWcuY2xvc2VPbkVzY2FwZSA6IHRydWU7XG4gIH1cblxuICBnZXQgZGlhbG9nRGlzbWlzc2FibGVNYXNrKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5kaXNtaXNzYWJsZU1hc2sgIT09IHVuZGVmaW5lZCA/IHRoaXMuZGlhbG9nQ29uZmlnLmRpc21pc3NhYmxlTWFzayA6IGZhbHNlO1xuICB9XG5cbiAgLy8gRHJhd2VyIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0c1xuICBnZXQgZHJhd2VySGVhZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLmhlYWRlciB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmZvcm0nKTtcbiAgfVxuXG4gIGdldCBkcmF3ZXJQb3NpdGlvbigpOiAnbGVmdCcgfCAncmlnaHQnIHwgJ3RvcCcgfCAnYm90dG9tJyB7XG4gICAgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLnBvc2l0aW9uIHx8ICdyaWdodCc7XG4gIH1cblxuICBnZXQgZHJhd2VyU2hvd0Nsb3NlSWNvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmF3ZXJDb25maWcuc2hvd0Nsb3NlSWNvbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5kcmF3ZXJDb25maWcuc2hvd0Nsb3NlSWNvbiA6IHRydWU7XG4gIH1cblxuICBnZXQgZHJhd2VyQ2xvc2VPbkVzY2FwZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmF3ZXJDb25maWcuY2xvc2VPbkVzY2FwZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5kcmF3ZXJDb25maWcuY2xvc2VPbkVzY2FwZSA6IHRydWU7XG4gIH1cblxuICBnZXQgZHJhd2VyRGlzbWlzc2FibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZHJhd2VyQ29uZmlnLmRpc21pc3NhYmxlICE9PSB1bmRlZmluZWQgPyB0aGlzLmRyYXdlckNvbmZpZy5kaXNtaXNzYWJsZSA6IHRydWU7XG4gIH1cblxuICBnZXQgZHJhd2VyU3R5bGUoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmRyYXdlclBvc2l0aW9uO1xuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHBvc2l0aW9uID09PSAnbGVmdCcgfHwgcG9zaXRpb24gPT09ICdyaWdodCc7XG4gICAgXG4gICAgLy8gU2UgdGVtIGN1c3RvbVdpZHRoLCB1c2EgZWxhXG4gICAgaWYgKHRoaXMuZHJhd2VyQ29uZmlnLmN1c3RvbVdpZHRoKSB7XG4gICAgICByZXR1cm4gaXNIb3Jpem9udGFsIFxuICAgICAgICA/IHsgd2lkdGg6IHRoaXMuZHJhd2VyQ29uZmlnLmN1c3RvbVdpZHRoIH1cbiAgICAgICAgOiB7IGhlaWdodDogdGhpcy5kcmF3ZXJDb25maWcuY3VzdG9tV2lkdGggfTtcbiAgICB9XG4gICAgXG4gICAgLy8gVXNhIG8gdGFtYW5obyBwYWRyb25pemFkb1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLmRyYXdlckNvbmZpZy5zaXplIHx8ICdtZWRpdW0nO1xuICAgIGNvbnN0IHNpemVNYXAgPSB7XG4gICAgICAnc21hbGwnOiBpc0hvcml6b250YWwgPyAnMjUlJyA6ICcyNXZoJyxcbiAgICAgICdtZWRpdW0nOiBpc0hvcml6b250YWwgPyAnNDAlJyA6ICc0MHZoJyxcbiAgICAgICdsYXJnZSc6IGlzSG9yaXpvbnRhbCA/ICc2MCUnIDogJzYwdmgnLFxuICAgICAgJ3hsYXJnZSc6IGlzSG9yaXpvbnRhbCA/ICc4MCUnIDogJzgwdmgnLFxuICAgICAgJ2Z1bGwnOiBpc0hvcml6b250YWwgPyAnMTAwJScgOiAnMTAwdmgnXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCBzaXplVmFsdWUgPSBzaXplTWFwW3NpemVdO1xuICAgIHJldHVybiBpc0hvcml6b250YWwgXG4gICAgICA/IHsgd2lkdGg6IHNpemVWYWx1ZSB9XG4gICAgICA6IHsgaGVpZ2h0OiBzaXplVmFsdWUgfTtcbiAgfVxuXG4gIGdldCBzdWJtaXRMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN1Ym1pdEJ1dHRvbkxhYmVsIHx8IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnZGVzaWduLmNvbXBvbmVudHNfYWkuc2F2ZScpO1xuICB9XG5cbiAgZ2V0IGNhbmNlbExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY2FuY2VsQnV0dG9uTGFiZWwgfHwgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5jYW5jZWwnKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtYXNrU2VydmljZTogTWFza1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgaWYgKHRoaXMuZW50aXR5RGF0YSkge1xuICAgICAgdGhpcy5sb2FkRW50aXR5RGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLnNldHVwQ29uZGl0aW9uYWxGaWVsZHNXYXRjaGVyKCk7XG4gICAgdGhpcy5mb3JtUmVhZHkuZW1pdCh0aGlzLmZvcm0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBlbnRpdHlEYXRhIGNoYW5nZXMgZmlyc3RcbiAgICBpZiAoY2hhbmdlc1snZW50aXR5RGF0YSddICYmIHRoaXMuZm9ybSkge1xuICAgICAgaWYgKHRoaXMuZW50aXR5RGF0YSkge1xuICAgICAgICB0aGlzLmxvYWRFbnRpdHlEYXRhKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBXaGVuIGRpYWxvZy9kcmF3ZXIgb3BlbnMsIGVuc3VyZSBmb3JtIGlzIGxvYWRlZCB3aXRoIGVudGl0eURhdGFcbiAgICBpZiAoY2hhbmdlc1sndmlzaWJsZSddICYmIGNoYW5nZXNbJ3Zpc2libGUnXS5jdXJyZW50VmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgXG4gICAgICAvLyBJZiBvcGVuaW5nIHdpdGggZW50aXR5RGF0YSwgcmVsb2FkIGl0IHRvIGVuc3VyZSBmb3JtIGlzIHBvcHVsYXRlZFxuICAgICAgaWYgKHRoaXMuZW50aXR5RGF0YSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgdGhpcy5sb2FkRW50aXR5RGF0YSgpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5lbnRpdHlEYXRhICYmIHRoaXMuZm9ybSkge1xuICAgICAgICAvLyBJZiBvcGVuaW5nIHdpdGhvdXQgZW50aXR5RGF0YSAobmV3IHJlY29yZCksIHJlc2V0IGZvcm1cbiAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtQ29udHJvbHM6IGFueSA9IHt9O1xuICAgIFxuICAgIC8vIFByb2Nlc3NhIHRvZG9zIG9zIGNhbXBvcyAoZGlyZXRvcyArIGRhcyBzZcOnw7VlcylcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGZpZWxkKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLm1vZGUgPT09ICdmaWx0ZXInID8gW10gOiAoZmllbGQudmFsaWRhdG9ycyB8fCBbXSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2woXG4gICAgICAgIHsgdmFsdWU6IGRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGZpZWxkLmRpc2FibGVkIHx8IGZhbHNlIH0sXG4gICAgICAgIHZhbGlkYXRvcnNcbiAgICAgICk7XG4gICAgICBcbiAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5maWVsZF0gPSBjb250cm9sO1xuICAgIH0pO1xuICAgIFxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUNvbnRyb2xzKTtcbiAgICB0aGlzLmFwcGx5SW5pdGlhbERpc2FibGVkU3RhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlKGZpZWxkOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnKTogYW55IHtcbiAgICBpZiAoZmllbGQuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmaWVsZC5kZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSAnZHJvcGRvd24nOlxuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdmaWx0ZXInID8gbnVsbCA6ICcnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlJbml0aWFsRGlzYWJsZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZC5kaXNhYmxlZFdoZW4pIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGQuZmllbGQpO1xuICAgICAgICBpZiAoY29udHJvbCAmJiB0aGlzLmlzRmllbGREaXNhYmxlZChmaWVsZCkpIHtcbiAgICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZEVudGl0eURhdGEoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW50aXR5RGF0YSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgIGNvbnN0IHByb2Nlc3NlZERhdGEgPSB0aGlzLnByb2Nlc3NFbnRpdHlEYXRhKHRoaXMuZW50aXR5RGF0YSk7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShwcm9jZXNzZWREYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NFbnRpdHlEYXRhKGVudGl0eTogYW55KTogYW55IHtcbiAgICBjb25zdCBwcm9jZXNzZWREYXRhID0geyAuLi5lbnRpdHkgfTtcbiAgICBcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnZGF0ZScgJiYgcHJvY2Vzc2VkRGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gcHJvY2Vzc2VkRGF0YVtmaWVsZC5maWVsZF07XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIC8vIENvbnZlcnQgZGF0ZSBzdHJpbmcgKHl5eXktTU0tZGQgb3IgSVNPKSB0byBEYXRlIG9iamVjdCBmb3IgcC1jYWxlbmRhclxuICAgICAgICAgIC8vIFVzZSBkYXRlLW9ubHkgY29uc3RydWN0b3IgdG8gYXZvaWQgdGltZXpvbmUvaG91ciBpc3N1ZXNcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IGRhdGVWYWx1ZS5zdWJzdHJpbmcoMCwgMTApLnNwbGl0KCctJyk7XG4gICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCtwYXJ0c1swXSwgK3BhcnRzWzFdIC0gMSwgK3BhcnRzWzJdKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbZmllbGQuZmllbGRdID0gZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsb29rdXAnICYmIHByb2Nlc3NlZERhdGFbZmllbGQuZmllbGRdKSB7XG4gICAgICAgIGNvbnN0IGxvb2t1cFZhbHVlID0gcHJvY2Vzc2VkRGF0YVtmaWVsZC5maWVsZF07XG4gICAgICAgIC8vIEtlZXAgdGhlIGZ1bGwgb2JqZWN0IGlmIGl0IGhhcyBkaXNwbGF5IGRhdGEsIG90aGVyd2lzZSBleHRyYWN0IElEXG4gICAgICAgIGlmICh0eXBlb2YgbG9va3VwVmFsdWUgPT09ICdvYmplY3QnICYmIGxvb2t1cFZhbHVlLmlkKSB7XG4gICAgICAgICAgY29uc3QgaGFzRGlzcGxheURhdGEgPSBmaWVsZC5sb29rdXBEaXNwbGF5RmllbGRzIFxuICAgICAgICAgICAgPyBmaWVsZC5sb29rdXBEaXNwbGF5RmllbGRzLnNvbWUoZiA9PiB0aGlzLmdldE5lc3RlZFZhbHVlKGxvb2t1cFZhbHVlLCBmKSlcbiAgICAgICAgICAgIDogbG9va3VwVmFsdWVbZmllbGQubG9va3VwRGlzcGxheUZpZWxkIHx8ICduYW1lJ107XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGhhc0Rpc3BsYXlEYXRhKSB7XG4gICAgICAgICAgICAvLyBLZWVwIHRoZSBmdWxsIG9iamVjdCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBBUEkgY2FsbHNcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbZmllbGQuZmllbGRdID0gbG9va3VwVmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE9ubHkgaGFzIElELCBleHRyYWN0IGl0XG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhW2ZpZWxkLmZpZWxkXSA9IGxvb2t1cFZhbHVlLmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBwcm9jZXNzZWREYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROZXN0ZWRWYWx1ZShvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoY3VycmVudCwga2V5KSA9PiBjdXJyZW50Py5ba2V5XSwgb2JqKTtcbiAgfVxuXG4gIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICBjb25zdCByZXNldFZhbHVlczogYW55ID0ge307XG4gICAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgcmVzZXRWYWx1ZXNbZmllbGQuZmllbGRdID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoZmllbGQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZvcm0ucmVzZXQocmVzZXRWYWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0ZpbHRlclZhbHVlKGZvcm1WYWx1ZTogYW55KTogYW55IHtcbiAgICBjb25zdCBwcm9jZXNzZWRWYWx1ZSA9IHsgLi4uZm9ybVZhbHVlIH07XG4gICAgXG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gcHJvY2Vzc2VkVmFsdWVbZmllbGQuZmllbGRdO1xuICAgICAgXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xvb2t1cCcpIHtcbiAgICAgICAgaWYgKGZpZWxkVmFsdWUgJiYgdHlwZW9mIGZpZWxkVmFsdWUgPT09ICdvYmplY3QnICYmIGZpZWxkVmFsdWUuaWQpIHtcbiAgICAgICAgICBwcm9jZXNzZWRWYWx1ZVtmaWVsZC5maWVsZF0gPSBmaWVsZFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVmFsdWUgJiYgdHlwZW9mIGZpZWxkVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkVmFsdWVbZmllbGQuZmllbGRdID0geyBpZDogZmllbGRWYWx1ZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZFZhbHVlW2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcHJvY2Vzc2VkVmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NGb3JtVmFsdWUoZm9ybVZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHByb2Nlc3NlZFZhbHVlID0geyAuLi5mb3JtVmFsdWUgfTtcbiAgICBcbiAgICBpZiAodGhpcy5lbnRpdHlEYXRhPy5pZCkge1xuICAgICAgcHJvY2Vzc2VkVmFsdWUuaWQgPSB0aGlzLmVudGl0eURhdGEuaWQ7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHByb2Nlc3NlZFZhbHVlW2ZpZWxkLmZpZWxkXTtcbiAgICAgIFxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsb29rdXAnKSB7XG4gICAgICAgIC8vIEtlZXAgdGhlIGZ1bGwgb2JqZWN0IGZvciBsb29rdXAgZmllbGRzXG4gICAgICAgIGlmIChmaWVsZFZhbHVlICYmIHR5cGVvZiBmaWVsZFZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIC8vIE9iamVjdCBpcyBhbHJlYWR5IGNvbXBsZXRlLCBrZWVwIGl0IGFzIGlzXG4gICAgICAgICAgcHJvY2Vzc2VkVmFsdWVbZmllbGQuZmllbGRdID0gZmllbGRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZFZhbHVlICYmIGZpZWxkVmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgLy8gSWYgaXQncyBqdXN0IGFuIElELCB3cmFwIGl0IGluIGFuIG9iamVjdFxuICAgICAgICAgIHByb2Nlc3NlZFZhbHVlW2ZpZWxkLmZpZWxkXSA9IHsgaWQ6IGZpZWxkVmFsdWUgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9jZXNzZWRWYWx1ZVtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICBpZiAoZmllbGRWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAvLyBTZXJpYWxpemUgYXMgeXl5eS1NTS1kZCB1c2luZyBsb2NhbCBkYXRlIGNvbXBvbmVudHMgKG5vIFVUQyBzaGlmdClcbiAgICAgICAgICBjb25zdCB5ID0gZmllbGRWYWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgIGNvbnN0IG0gPSBTdHJpbmcoZmllbGRWYWx1ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICBjb25zdCBkID0gU3RyaW5nKGZpZWxkVmFsdWUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgIHByb2Nlc3NlZFZhbHVlW2ZpZWxkLmZpZWxkXSA9IGAke3l9LSR7bX0tJHtkfWA7XG4gICAgICAgIH0gZWxzZSBpZiAoIWZpZWxkVmFsdWUpIHtcbiAgICAgICAgICBwcm9jZXNzZWRWYWx1ZVtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFsndGV4dCcsICd0ZXh0YXJlYScsICdudW1iZXInLCAnZW51bScsICdkcm9wZG93biddLmluY2x1ZGVzKGZpZWxkLnR5cGUpKSB7XG4gICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnJyB8fCBmaWVsZFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9jZXNzZWRWYWx1ZVtmaWVsZC5maWVsZF0gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHByb2Nlc3NlZFZhbHVlO1xuICB9XG5cbiAgZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQ6IER5bmFtaWNGb3JtRmllbGRDb25maWcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgLy8gQ29sc3BhbiBiYXNlIChwYWRyw6NvOiA2KVxuICAgIGxldCBiYXNlQ29sc3BhbiA9IGZpZWxkLmNvbHNwYW4gfHwgNjtcbiAgICBcbiAgICAvLyBWZXJpZmljYSBjb25kacOnw7VlcyBkZSBjb2xzcGFuIGRpbsOibWljb1xuICAgIGlmIChmaWVsZC5jb2xzcGFuV2hlbiAmJiBmaWVsZC5jb2xzcGFuV2hlbi5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbmRpdGlvbiBvZiBmaWVsZC5jb2xzcGFuV2hlbikge1xuICAgICAgICBjb25zdCBkZXBlbmRlbnRGaWVsZFZhbHVlID0gdGhpcy5mb3JtLmdldChjb25kaXRpb24uZmllbGQpPy52YWx1ZTtcbiAgICAgICAgaWYgKGRlcGVuZGVudEZpZWxkVmFsdWUgPT09IGNvbmRpdGlvbi52YWx1ZSkge1xuICAgICAgICAgIGJhc2VDb2xzcGFuID0gY29uZGl0aW9uLmNvbHNwYW47XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQWRpY2lvbmEgY2xhc3NlIGJhc2VcbiAgICBjbGFzc2VzLnB1c2goYGNvbC0ke2Jhc2VDb2xzcGFufWApO1xuICAgIFxuICAgIC8vIFN1cG9ydGEgdGFudG8gbyBvYmpldG8gc2l6ZSBxdWFudG8gYXMgcHJvcHJpZWRhZGVzIGFudGlnYXMgKHBhcmEgY29tcGF0aWJpbGlkYWRlKVxuICAgIGNvbnN0IHNpemVYcyA9IGZpZWxkLnNpemU/LnhzID8/IGZpZWxkLmNvbHNwYW5YcztcbiAgICBjb25zdCBzaXplU20gPSBmaWVsZC5zaXplPy5zbSA/PyBmaWVsZC5jb2xzcGFuU207XG4gICAgY29uc3Qgc2l6ZU1kID0gZmllbGQuc2l6ZT8ubWQgPz8gZmllbGQuY29sc3Bhbk1kO1xuICAgIGNvbnN0IHNpemVMZyA9IGZpZWxkLnNpemU/LmxnID8/IGZpZWxkLmNvbHNwYW5MZztcbiAgICBjb25zdCBzaXplWGwgPSBmaWVsZC5zaXplPy54bCA/PyBmaWVsZC5jb2xzcGFuWGw7XG4gICAgXG4gICAgLy8gQWRpY2lvbmEgY2xhc3NlcyByZXNwb25zaXZhcyBzZSBkZWZpbmlkYXNcbiAgICBpZiAoc2l6ZVhzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsYXNzZXMucHVzaChgY29sLXhzLSR7c2l6ZVhzfWApO1xuICAgIH1cbiAgICBpZiAoc2l6ZVNtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsYXNzZXMucHVzaChgY29sLXNtLSR7c2l6ZVNtfWApO1xuICAgIH1cbiAgICBpZiAoc2l6ZU1kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsYXNzZXMucHVzaChgY29sLW1kLSR7c2l6ZU1kfWApO1xuICAgIH1cbiAgICBpZiAoc2l6ZUxnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsYXNzZXMucHVzaChgY29sLWxnLSR7c2l6ZUxnfWApO1xuICAgIH1cbiAgICBpZiAoc2l6ZVhsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsYXNzZXMucHVzaChgY29sLXhsLSR7c2l6ZVhsfWApO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gIH1cblxuICBpc0ZpZWxkVmlzaWJsZShmaWVsZDogRHluYW1pY0Zvcm1GaWVsZENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIGlmICghZmllbGQudmlzaWJsZVdoZW4pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcGVuZGVudEZpZWxkVmFsdWUgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkLnZpc2libGVXaGVuLmZpZWxkKT8udmFsdWU7XG4gICAgcmV0dXJuIGRlcGVuZGVudEZpZWxkVmFsdWUgPT09IGZpZWxkLnZpc2libGVXaGVuLnZhbHVlO1xuICB9XG5cbiAgaXNGaWVsZERpc2FibGVkKGZpZWxkOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKGZpZWxkLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCEoJ2Rpc2FibGVkV2hlbicgaW4gZmllbGQpIHx8ICFmaWVsZC5kaXNhYmxlZFdoZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbnRGaWVsZFZhbHVlID0gdGhpcy5mb3JtLmdldChmaWVsZC5kaXNhYmxlZFdoZW4hLmZpZWxkKT8udmFsdWU7XG4gICAgXG4gICAgaWYgKGZpZWxkLmRpc2FibGVkV2hlbiEudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAhZGVwZW5kZW50RmllbGRWYWx1ZTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGRlcGVuZGVudEZpZWxkVmFsdWUgPT09IGZpZWxkLmRpc2FibGVkV2hlbiEudmFsdWU7XG4gIH1cblxuICBzZXR1cENvbmRpdGlvbmFsRmllbGRzV2F0Y2hlcigpOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmxlRGVwZW5kZW50RmllbGRzID0gdGhpcy5hbGxGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLnZpc2libGVXaGVuKTtcbiAgICBjb25zdCB2aXNpYmxlV2F0Y2hlZEZpZWxkcyA9IFsuLi5uZXcgU2V0KHZpc2libGVEZXBlbmRlbnRGaWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLnZpc2libGVXaGVuIS5maWVsZCkpXTtcblxuICAgIGNvbnN0IGRpc2FibGVkRGVwZW5kZW50RmllbGRzID0gdGhpcy5hbGxGaWVsZHMuZmlsdGVyKGZpZWxkID0+IGZpZWxkLmRpc2FibGVkV2hlbik7XG4gICAgY29uc3QgZGlzYWJsZWRXYXRjaGVkRmllbGRzID0gWy4uLm5ldyBTZXQoZGlzYWJsZWREZXBlbmRlbnRGaWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLmRpc2FibGVkV2hlbiEuZmllbGQpKV07XG5cbiAgICBjb25zdCBhbGxXYXRjaGVkRmllbGRzID0gWy4uLm5ldyBTZXQoWy4uLnZpc2libGVXYXRjaGVkRmllbGRzLCAuLi5kaXNhYmxlZFdhdGNoZWRGaWVsZHNdKV07XG5cbiAgICBhbGxXYXRjaGVkRmllbGRzLmZvckVhY2goZmllbGROYW1lID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY2xlYXJIaWRkZW5GaWVsZHMoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZURpc2FibGVkRmllbGRzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlRGlzYWJsZWRGaWVsZHMoKTogdm9pZCB7XG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBpZiAoZmllbGQuZGlzYWJsZWRXaGVuKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICBjb25zdCBzaG91bGRCZURpc2FibGVkID0gdGhpcy5pc0ZpZWxkRGlzYWJsZWQoZmllbGQpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChzaG91bGRCZURpc2FibGVkICYmIGNvbnRyb2wuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXNob3VsZEJlRGlzYWJsZWQgJiYgY29udHJvbC5kaXNhYmxlZCAmJiAhZmllbGQuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjbGVhckhpZGRlbkZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZC52aXNpYmxlV2hlbiAmJiAhdGhpcy5pc0ZpZWxkVmlzaWJsZShmaWVsZCkpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGQuZmllbGQpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnN0IHJlc2V0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShmaWVsZCk7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShyZXNldFZhbHVlKTtcbiAgICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Rm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm07XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2ZpbHRlcicpIHtcbiAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VHlwZVBlcnNvblZhbHVlKCk6ICdOQVRVUkFMX1BFUlNPTicgfCAnSlVSSURJQ0FMX1BFUlNPTicge1xuICAgIGNvbnN0IHR5cGVQZXJzb25WYWx1ZSA9IHRoaXMuZm9ybT8uZ2V0KCd0eXBlUGVyc29uJyk/LnZhbHVlO1xuICAgIHJldHVybiB0eXBlUGVyc29uVmFsdWUgfHwgJ0pVUklESUNBTF9QRVJTT04nO1xuICB9XG5cbiAgLy8gRGlzcGxheSBNb2RlIENvbnRyb2wgTWV0aG9kc1xuICBvcGVuKGVudGl0eT86IGFueSk6IHZvaWQge1xuICAgIGlmIChlbnRpdHkpIHtcbiAgICAgIHRoaXMuZW50aXR5RGF0YSA9IGVudGl0eTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbnRpdHlEYXRhID0gbnVsbDtcbiAgICAgIHRoaXMucmVzZXRGb3JtKCk7IC8vIFJlc2V0IGZvcm0gd2hlbiBvcGVuaW5nIGZvciBuZXcgZW50aXR5XG4gICAgfVxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOyAvLyBSZXNldCBsb2FkaW5nIHN0YXRlXG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOyAvLyBSZXNldCBsb2FkaW5nIHN0YXRlXG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIHRoaXMucmVzZXRGb3JtKCk7IC8vIFJlc2V0IGZvcm0gd2hlbiBjbG9zaW5nXG4gICAgdGhpcy5vbkNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgaGFuZGxlU3VibWl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdmb3JtJyAmJiB0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBcbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLm1vZGUgPT09ICdmaWx0ZXInIFxuICAgICAgPyB0aGlzLnByb2Nlc3NGaWx0ZXJWYWx1ZSh0aGlzLmZvcm0udmFsdWUpXG4gICAgICA6IHRoaXMucHJvY2Vzc0Zvcm1WYWx1ZSh0aGlzLmZvcm0udmFsdWUpO1xuICAgIFxuICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KGZvcm1WYWx1ZSk7XG4gIH1cblxuICAvLyBJbmxpbmUgRWRpdCBNb2RlIE1ldGhvZHNcbiAgc3RhcnRFZGl0RmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0lubGluZUVkaXRNb2RlKSB7XG4gICAgICB0aGlzLmVkaXRpbmdGaWVsZCA9IGZpZWxkTmFtZTtcbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIHRoZSBmaWVsZCBoYXMgdGhlIGN1cnJlbnQgdmFsdWUgZnJvbSBlbnRpdHlEYXRhXG4gICAgICBpZiAodGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkTmFtZSk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmFsbEZpZWxkcy5maW5kKGYgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKTtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZW50aXR5RGF0YVtmaWVsZE5hbWVdO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIEZvciBsb29rdXAgZmllbGRzIGluIGlubGluZS1lZGl0IG1vZGUsIGtlZXAgdGhlIGZ1bGwgb2JqZWN0XG4gICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB1bm5lY2Vzc2FyeSBBUEkgY2FsbHMgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBkYXRhXG4gICAgICAgICAgaWYgKGZpZWxkPy50eXBlID09PSAnbG9va3VwJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAvLyBLZWVwIHRoZSBmdWxsIG9iamVjdCAtIHRoZSBsb29rdXAgY29tcG9uZW50IHdpbGwgdXNlIGl0XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkPy50eXBlID09PSAnZGF0ZScgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRlIHN0cmluZyB0byBEYXRlIG9iamVjdCBmb3IgcC1jYWxlbmRhciAoZGF0ZS1vbmx5LCBubyB0aW1lIGNvbXBvbmVudClcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3Vic3RyaW5nKDAsIDEwKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoK3BhcnRzWzBdLCArcGFydHNbMV0gLSAxLCArcGFydHNbMl0pO1xuICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKCFpc05hTihkYXRlLmdldFRpbWUoKSkgPyBkYXRlIDogdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzRmllbGRFZGl0aW5nKGZpZWxkTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ0ZpZWxkID09PSBmaWVsZE5hbWU7XG4gIH1cblxuICBzYXZlSW5saW5lRmllbGQoZmllbGROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNJbmxpbmVFZGl0TW9kZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGROYW1lKTtcbiAgICBpZiAoIWNvbnRyb2wgfHwgY29udHJvbC5pbnZhbGlkKSB7XG4gICAgICBjb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zYXZpbmdGaWVsZCA9IHRydWU7XG4gICAgXG4gICAgbGV0IGZpZWxkVmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIFxuICAgIC8vIEZvciBsb29rdXAgZmllbGRzLCBrZWVwIHRoZSBmdWxsIG9iamVjdCAoZG9uJ3QgZXh0cmFjdCBJRClcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWxsRmllbGRzLmZpbmQoZiA9PiBmLmZpZWxkID09PSBmaWVsZE5hbWUpO1xuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2xvb2t1cCcgJiYgZmllbGRWYWx1ZSAmJiB0eXBlb2YgZmllbGRWYWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIC8vIElmIGl0J3MganVzdCBhbiBJRCwgd3JhcCBpdCBpbiBhbiBvYmplY3RcbiAgICAgIGZpZWxkVmFsdWUgPSB7IGlkOiBmaWVsZFZhbHVlIH07XG4gICAgfVxuXG4gICAgLy8gRm9yIGRhdGUgZmllbGRzLCBzZXJpYWxpemUgYXMgeXl5eS1NTS1kZCAobm8gdGltZSBjb21wb25lbnQpXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnZGF0ZScgJiYgZmllbGRWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIGNvbnN0IHkgPSBmaWVsZFZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICBjb25zdCBtID0gU3RyaW5nKGZpZWxkVmFsdWUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICBjb25zdCBkID0gU3RyaW5nKGZpZWxkVmFsdWUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgZmllbGRWYWx1ZSA9IGAke3l9LSR7bX0tJHtkfWA7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZmllbGRTYXZlLmVtaXQoeyBmaWVsZDogZmllbGROYW1lLCB2YWx1ZTogZmllbGRWYWx1ZSB9KTtcbiAgfVxuXG4gIGNhbmNlbElubGluZUVkaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0TW9kZSAmJiB0aGlzLmVkaXRpbmdGaWVsZCkge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQodGhpcy5lZGl0aW5nRmllbGQpO1xuICAgICAgaWYgKGNvbnRyb2wgJiYgdGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgdmFsdWVcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuZW50aXR5RGF0YVt0aGlzLmVkaXRpbmdGaWVsZF07XG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGluZ0ZpZWxkID0gbnVsbDtcbiAgICAgIHRoaXMuc2F2aW5nRmllbGQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBNZXRob2QgdG8gYmUgY2FsbGVkIGJ5IHBhcmVudCBhZnRlciBzYXZlIGNvbXBsZXRlc1xuICBjb21wbGV0ZUlubGluZUVkaXQoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nRmllbGQgPSBudWxsO1xuICAgIHRoaXMuc2F2aW5nRmllbGQgPSBmYWxzZTtcbiAgfVxuXG4gIGdldEZpZWxkRGlzcGxheVZhbHVlKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuZW50aXR5RGF0YSkgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmFsbEZpZWxkcy5maW5kKGYgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZW50aXR5RGF0YVtmaWVsZE5hbWVdO1xuXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuXG4gICAgLy8gRm9yIGxvb2t1cCBmaWVsZHMsIHJldHVybiB0aGUgZGlzcGxheSBuYW1lXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnbG9va3VwJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLm5hbWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5uYW1lO1xuICAgIH1cblxuICAgIC8vIEZvciBsb29rdXAgZmllbGRzIHdpdGggbXVsdGlwbGUgZGlzcGxheSBmaWVsZHNcbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdsb29rdXAnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgZmllbGQubG9va3VwRGlzcGxheUZpZWxkcykge1xuICAgICAgcmV0dXJuIGZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHNcbiAgICAgICAgLm1hcChmID0+IHRoaXMuZ2V0TmVzdGVkVmFsdWUodmFsdWUsIGYpKVxuICAgICAgICAuZmlsdGVyKHYgPT4gdilcbiAgICAgICAgLmpvaW4oJyAtICcpO1xuICAgIH1cblxuICAgIC8vIEZvciBkcm9wZG93bi9lbnVtIGZpZWxkcywgZmluZCB0aGUgbWF0Y2hpbmcgb3B0aW9uIGxhYmVsXG4gICAgaWYgKChmaWVsZD8udHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBmaWVsZD8udHlwZSA9PT0gJ2VudW0nKSAmJiBmaWVsZCkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IGZpZWxkLm9wdGlvbnMgfHwgZmllbGQuZW51bU9wdGlvbnMgfHwgW107XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IGZpZWxkLm9wdGlvblZhbHVlIHx8ICd2YWx1ZSc7XG4gICAgICBjb25zdCBvcHRpb25MYWJlbCA9IGZpZWxkLm9wdGlvbkxhYmVsIHx8ICdsYWJlbCc7XG4gICAgICBjb25zdCBtYXRjaGluZ09wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0VmFsID0gdHlwZW9mIG9wdCA9PT0gJ29iamVjdCcgPyBvcHRbb3B0aW9uVmFsdWVdIDogb3B0O1xuICAgICAgICByZXR1cm4gb3B0VmFsID09PSB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1hdGNoaW5nT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbWF0Y2hpbmdPcHRpb24gPT09ICdvYmplY3QnID8gbWF0Y2hpbmdPcHRpb25bb3B0aW9uTGFiZWxdIDogbWF0Y2hpbmdPcHRpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRm9yIG51bWJlciBmaWVsZHMsIGZvcm1hdCBhcHByb3ByaWF0ZWx5XG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZmllbGQubnVtYmVyTW9kZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KGZpZWxkLmxvY2FsZSB8fCAncHQtQlInLCB7XG4gICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgICAgICAgY3VycmVuY3k6IGZpZWxkLmN1cnJlbmN5IHx8ICdCUkwnXG4gICAgICAgIH0pLmZvcm1hdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KGZpZWxkLmxvY2FsZSB8fCAncHQtQlInLCB7XG4gICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogZmllbGQubWluRnJhY3Rpb25EaWdpdHMgfHwgMCxcbiAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBmaWVsZC5tYXhGcmFjdGlvbkRpZ2l0cyB8fCAyXG4gICAgICB9KS5mb3JtYXQodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEZvciBkYXRlIGZpZWxkcywgZm9ybWF0IGFzIGRhdGVcbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdkYXRlJyAmJiB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubG9jYWxlU2VydmljZS5mb3JtYXREYXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgdGV4dCBmaWVsZHMgd2l0aCBkb2N1bWVudCBtYXNrLCBmb3JtYXQgdGhlIHZhbHVlXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAndGV4dCcgJiYgZmllbGQubWFzayA9PT0gJ2RvY3VtZW50JyAmJiB2YWx1ZSkge1xuICAgICAgY29uc3QgZGVwZW5kc09uID0gZmllbGQubWFza0RlcGVuZHNPbiB8fCAndHlwZVBlcnNvbic7XG4gICAgICBjb25zdCB0eXBlUGVyc29uID0gdGhpcy5lbnRpdHlEYXRhW2RlcGVuZHNPbl0gfHwgJ0pVUklESUNBTF9QRVJTT04nO1xuICAgICAgcmV0dXJuIHRoaXMubWFza1NlcnZpY2UuYXBwbHlEb2N1bWVudE1hc2soU3RyaW5nKHZhbHVlKSwgdHlwZVBlcnNvbik7XG4gICAgfVxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3RleHQnICYmIGZpZWxkLm1hc2sgPT09ICdjcGYnICYmIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXNrU2VydmljZS5hcHBseUNwZk1hc2soU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3RleHQnICYmIGZpZWxkLm1hc2sgPT09ICdjbnBqJyAmJiB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubWFza1NlcnZpY2UuYXBwbHlDbnBqTWFzayhTdHJpbmcodmFsdWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxufVxuIiwiPCEtLSBNb2RvIElubGluZSAocGFkcsOjbykgLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNJbmxpbmVNb2RlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb3JtQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjwhLS0gTW9kbyBEaWFsb2cgLS0+XG48cC1kaWFsb2dcbiAgKm5nSWY9XCJpc0RpYWxvZ01vZGVcIlxuICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICBbaGVhZGVyXT1cImRpYWxvZ0hlYWRlciB8IHRyYW5zbGF0ZVwiXG4gIFttb2RhbF09XCJ0cnVlXCJcbiAgW3N0eWxlXT1cInsgd2lkdGg6IGRpYWxvZ1dpZHRoIH1cIlxuICBbZHJhZ2dhYmxlXT1cImRpYWxvZ0RyYWdnYWJsZVwiXG4gIFtyZXNpemFibGVdPVwiZGlhbG9nUmVzaXphYmxlXCJcbiAgW21heGltaXphYmxlXT1cImRpYWxvZ01heGltaXphYmxlXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwiZGlhbG9nQ2xvc2VPbkVzY2FwZVwiXG4gIFtkaXNtaXNzYWJsZU1hc2tdPVwiZGlhbG9nRGlzbWlzc2FibGVNYXNrXCJcbiAgKG9uSGlkZSk9XCJjbG9zZSgpXCI+XG4gIFxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIiAqbmdJZj1cInNob3dTdWJtaXRCdXR0b24gfHwgc2hvd0NhbmNlbEJ1dHRvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctZm9vdGVyXCI+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93Q2FuY2VsQnV0dG9uXCJcbiAgICAgICAgW2xhYmVsXT1cImNhbmNlbExhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2ljb25dPVwiY2FuY2VsQnV0dG9uSWNvblwiXG4gICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlQ2FuY2VsKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPlxuICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dTdWJtaXRCdXR0b25cIlxuICAgICAgICBbbGFiZWxdPVwic3VibWl0TGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbaWNvbl09XCJzdWJtaXRCdXR0b25JY29uXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlU3VibWl0KClcIlxuICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiPlxuICAgICAgPC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kaWFsb2c+XG5cbjwhLS0gTW9kbyBEcmF3ZXIgLS0+XG48cC1kcmF3ZXJcbiAgKm5nSWY9XCJpc0RyYXdlck1vZGVcIlxuICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICBbaGVhZGVyXT1cImRyYXdlckhlYWRlciB8IHRyYW5zbGF0ZVwiXG4gIFtwb3NpdGlvbl09XCJkcmF3ZXJQb3NpdGlvblwiXG4gIFtzdHlsZV09XCJkcmF3ZXJTdHlsZVwiXG4gIFtzaG93Q2xvc2VJY29uXT1cImRyYXdlclNob3dDbG9zZUljb25cIlxuICBbY2xvc2VPbkVzY2FwZV09XCJkcmF3ZXJDbG9zZU9uRXNjYXBlXCJcbiAgW21vZGFsXT1cImRyYXdlckRpc21pc3NhYmxlXCJcbiAgKG9uSGlkZSk9XCJjbG9zZSgpXCI+XG4gIFxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIiAqbmdJZj1cInNob3dTdWJtaXRCdXR0b24gfHwgc2hvd0NhbmNlbEJ1dHRvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItZm9vdGVyXCI+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93Q2FuY2VsQnV0dG9uXCJcbiAgICAgICAgW2xhYmVsXT1cImNhbmNlbExhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2ljb25dPVwiY2FuY2VsQnV0dG9uSWNvblwiXG4gICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlQ2FuY2VsKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPlxuICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dTdWJtaXRCdXR0b25cIlxuICAgICAgICBbbGFiZWxdPVwic3VibWl0TGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbaWNvbl09XCJzdWJtaXRCdXR0b25JY29uXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlU3VibWl0KClcIlxuICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiPlxuICAgICAgPC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kcmF3ZXI+XG5cbjwhLS0gVGVtcGxhdGUgZG8gRm9ybXVsw6FyaW8gKHJldXRpbGl6w6F2ZWwpIC0tPlxuPG5nLXRlbXBsYXRlICNmb3JtQ29udGVudD5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJkeW5hbWljLWZvcm1cIj5cbiAgICBcbiAgICA8IS0tIEZpbHRyb3MgRml4b3MgKGFwZW5hcyBubyBtb2RvIGZpbHRlcikgLS0+XG4gICAgPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdmaWx0ZXInICYmIGhhc0ZpeGVkRmlsdGVyc1wiIGNsYXNzPVwiZml4ZWQtZmlsdGVycy1zZWN0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaXhlZEZpbHRlcnNcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgW25nQ2xhc3NdPVwiZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDYW1wb3MgRGlyZXRvcyAoc2VtIHNlw6fDo28pIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJoYXNGaWVsZHNcIj5cbiAgICAgIDwhLS0gTW9kbyBJbmxpbmUgRWRpdCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZHNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZm9ybUZpZWxkc1wiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW5saW5lRWRpdEZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBNb2RvIEZvcm0gTm9ybWFsIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cIiFpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvcm1GaWVsZHNcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgW25nQ2xhc3NdPVwiZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZcOnw7VlcyBkZSBDYW1wb3MgKG1vZG8gZm9ybSkgLS0+XG4gICAgPGRpdiAqbmdJZj1cImhhc1NlY3Rpb25zXCIgY2xhc3M9XCJzZWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgIDxwLXBhbmVsIFxuICAgICAgICAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBmb3JtU2VjdGlvbnNcIlxuICAgICAgICBbdG9nZ2xlYWJsZV09XCJzZWN0aW9uLnRvZ2dsZWFibGUgIT09IGZhbHNlXCJcbiAgICAgICAgW2NvbGxhcHNlZF09XCJzZWN0aW9uLmNvbGxhcHNlZCB8fCBmYWxzZVwiXG4gICAgICAgIFtzdHlsZUNsYXNzXT1cIidzZWN0aW9uLXBhbmVsJ1wiPlxuICAgICAgICBcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICAgICAgPGkgKm5nSWY9XCJzZWN0aW9uLmljb25cIiBbY2xhc3NdPVwic2VjdGlvbi5pY29uICsgJyBzZWN0aW9uLWljb24nXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+e3sgc2VjdGlvbi50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIE1vZG8gSW5saW5lIEVkaXQgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZHNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZUVkaXRGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBNb2RvIEZvcm0gTm9ybWFsIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzSW5saW5lRWRpdE1vZGVcIiBjbGFzcz1cImdyaWRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBzZWN0aW9uLmZpZWxkc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIFtuZ0NsYXNzXT1cImdldEZpZWxkR3JpZENsYXNzKGZpZWxkKVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9wLXBhbmVsPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZcOnw7VlcyBkZSBGaWx0cm9zIChhcGVuYXMgbm8gbW9kbyBmaWx0ZXIpIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJtb2RlID09PSAnZmlsdGVyJyAmJiBoYXNGaWx0ZXJTZWN0aW9uc1wiIGNsYXNzPVwiZmlsdGVyLXNlY3Rpb25zLWNvbnRhaW5lclwiPlxuICAgICAgPHAtcGFuZWwgXG4gICAgICAgICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGZpbHRlclNlY3Rpb25zXCJcbiAgICAgICAgW2hlYWRlcl09XCJzZWN0aW9uLnRpdGxlXCJcbiAgICAgICAgW3RvZ2dsZWFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtjb2xsYXBzZWRdPVwidHJ1ZVwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBbbmdDbGFzc109XCJnZXRGaWVsZEdyaWRDbGFzcyhmaWVsZClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvcC1wYW5lbD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQm90w7VlcyBpbmxpbmUgKGFwZW5hcyBwYXJhIG1vZG8gaW5saW5lKSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNJbmxpbmVNb2RlICYmIChzaG93U3VibWl0QnV0dG9uIHx8IHNob3dDYW5jZWxCdXR0b24pXCIgY2xhc3M9XCJmb3JtLWFjdGlvbnNcIj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dDYW5jZWxCdXR0b25cIlxuICAgICAgICBbbGFiZWxdPVwiY2FuY2VsTGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbaWNvbl09XCJjYW5jZWxCdXR0b25JY29uXCJcbiAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAob25DbGljayk9XCJoYW5kbGVDYW5jZWwoKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCI+XG4gICAgICA8L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd1N1Ym1pdEJ1dHRvblwiXG4gICAgICAgIFtsYWJlbF09XCJzdWJtaXRMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtpY29uXT1cInN1Ym1pdEJ1dHRvbkljb25cIlxuICAgICAgICAob25DbGljayk9XCJoYW5kbGVTdWJtaXQoKVwiXG4gICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+XG4gICAgICA8L3AtYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVGVtcGxhdGUgZGUgQ2FtcG8gKHJldXRpbGl6w6F2ZWwpIC0tPlxuPG5nLXRlbXBsYXRlICNmaWVsZFRlbXBsYXRlIGxldC1maWVsZD1cImZpZWxkXCI+XG4gIDwhLS0gVGV4dCBGaWVsZCAtLT5cbiAgPHNpYS1keW5hbWljLWZpZWxkLXRleHRcbiAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICd0ZXh0J1wiXG4gICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICBbZm9ybV09XCJmb3JtXCJcbiAgICBbbW9kZV09XCJmaWVsZE1vZGVcIj5cbiAgPC9zaWEtZHluYW1pYy1maWVsZC10ZXh0PlxuXG4gIDwhLS0gVGV4dGFyZWEgRmllbGQgLS0+XG4gIDxzaWEtZHluYW1pYy1maWVsZC10ZXh0YXJlYVxuICAgICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ3RleHRhcmVhJ1wiXG4gICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICBbZm9ybV09XCJmb3JtXCJcbiAgICBbbW9kZV09XCJmaWVsZE1vZGVcIj5cbiAgPC9zaWEtZHluYW1pYy1maWVsZC10ZXh0YXJlYT5cblxuICA8IS0tIE51bWJlciBGaWVsZCAtLT5cbiAgPHNpYS1keW5hbWljLWZpZWxkLW51bWJlclxuICAgICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ251bWJlcidcIlxuICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgW21vZGVdPVwiZmllbGRNb2RlXCI+XG4gIDwvc2lhLWR5bmFtaWMtZmllbGQtbnVtYmVyPlxuXG4gIDwhLS0gRGF0ZSBGaWVsZCAtLT5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWRhdGVcbiAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdkYXRlJ1wiXG4gICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICBbZm9ybV09XCJmb3JtXCJcbiAgICBbbW9kZV09XCJmaWVsZE1vZGVcIj5cbiAgPC9zaWEtZHluYW1pYy1maWVsZC1kYXRlPlxuXG4gIDwhLS0gRHJvcGRvd24vRW51bSBGaWVsZCAtLT5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWRyb3Bkb3duXG4gICAgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnZHJvcGRvd24nIHx8IGZpZWxkLnR5cGUgPT09ICdlbnVtJ1wiXG4gICAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgICBbZm9ybV09XCJmb3JtXCJcbiAgICBbbW9kZV09XCJmaWVsZE1vZGVcIj5cbiAgPC9zaWEtZHluYW1pYy1maWVsZC1kcm9wZG93bj5cblxuICA8IS0tIExvb2t1cCBGaWVsZCAtLT5cbiAgPHNpYS1keW5hbWljLWZpZWxkLWxvb2t1cFxuICAgICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ2xvb2t1cCdcIlxuICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICBbbW9kZV09XCJmaWVsZE1vZGVcIj5cbiAgPC9zaWEtZHluYW1pYy1maWVsZC1sb29rdXA+XG48L25nLXRlbXBsYXRlPlxuXG5cbjwhLS0gVGVtcGxhdGUgZGUgQ2FtcG8gSW5saW5lIEVkaXQgLS0+XG48bmctdGVtcGxhdGUgI2lubGluZUVkaXRGaWVsZFRlbXBsYXRlIGxldC1maWVsZD1cImZpZWxkXCI+XG4gIDxkaXYgY2xhc3M9XCJlZGl0LWlubGluZS1maWVsZFwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImZpZWxkLWxhYmVsXCI+e3sgZmllbGQubGFiZWwgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgIFxuICAgIDwhLS0gRGlzcGxheSBNb2RlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1kaXNwbGF5XCIgXG4gICAgICAgICAqbmdJZj1cIiFpc0ZpZWxkRWRpdGluZyhmaWVsZC5maWVsZClcIiBcbiAgICAgICAgIChjbGljayk9XCJzdGFydEVkaXRGaWVsZChmaWVsZC5maWVsZClcIlxuICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImZpZWxkLmRpc2FibGVkXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImRpc3BsYXktdmFsdWVcIiBcbiAgICAgICAgICAgIFthdHRyLmRhdGEtcGxhY2Vob2xkZXJdPVwiZmllbGQucGxhY2Vob2xkZXIgfHwgKCdjcm14LmJ1c2luZXNzLm5vdF9pbmZvcm1lZCcgfCB0cmFuc2xhdGUpXCI+XG4gICAgICAgIHt7IGdldEZpZWxkRGlzcGxheVZhbHVlKGZpZWxkLmZpZWxkKSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1wZW5jaWwgZWRpdC1pY29uXCIgKm5nSWY9XCIhZmllbGQuZGlzYWJsZWRcIj48L2k+XG4gICAgPC9kaXY+XG4gICAgXG4gICAgPCEtLSBFZGl0IE1vZGUgLS0+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkLWVkaXRcIiAqbmdJZj1cImlzRmllbGRFZGl0aW5nKGZpZWxkLmZpZWxkKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICBcbiAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1hY3Rpb25zXCI+XG4gICAgICAgIDxwLWJ1dHRvbiBcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgaWNvbj1cInBpIHBpLWNoZWNrXCIgXG4gICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgc2V2ZXJpdHk9XCJwcmltYXJ5XCJcbiAgICAgICAgICAob25DbGljayk9XCJzYXZlSW5saW5lRmllbGQoZmllbGQuZmllbGQpXCIgXG4gICAgICAgICAgW2xvYWRpbmddPVwic2F2aW5nRmllbGRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmdldChmaWVsZC5maWVsZCk/LmludmFsaWRcIj5cbiAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgICAgPHAtYnV0dG9uIFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIiBcbiAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiY2FuY2VsSW5saW5lRWRpdCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic2F2aW5nRmllbGRcIj5cbiAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8IS0tIEVycm9yIE1lc3NhZ2UgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtZXJyb3JcIiAqbmdJZj1cImZvcm0uZ2V0KGZpZWxkLmZpZWxkKT8uaW52YWxpZCAmJiBmb3JtLmdldChmaWVsZC5maWVsZCk/LnRvdWNoZWRcIj5cbiAgICAgICAgPHNtYWxsIGNsYXNzPVwicC1lcnJvclwiPlxuICAgICAgICAgIHt7IGZvcm0uZ2V0KGZpZWxkLmZpZWxkKT8uZXJyb3JzPy5bJ3JlcXVpcmVkJ10gPyAoJ2NybXguYnVzaW5lc3MucmVxdWlyZWRfZmllbGQnIHwgdHJhbnNsYXRlKSA6ICcnIH19XG4gICAgICAgIDwvc21hbGw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
707
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMtYWkvc3JjL2xpYi9jb21wb25lbnRzL2R5bmFtaWMtZm9ybS9keW5hbWljLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy1haS9zcmMvbGliL2NvbXBvbmVudHMvZHluYW1pYy1mb3JtL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFXOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7QUF1QjFGLE1BQU0sT0FBTyxvQkFBb0I7SUFvS3JCO0lBQ0E7SUFDQTtJQUNBO0lBdEtELFVBQVUsR0FBNkIsRUFBRSxDQUFDO0lBQzFDLFlBQVksR0FBeUIsRUFBRSxDQUFDO0lBQ3hDLFlBQVksR0FBNkIsRUFBRSxDQUFDLENBQUMsMENBQTBDO0lBQ3ZGLGNBQWMsR0FBeUIsRUFBRSxDQUFDLENBQUMsa0NBQWtDO0lBQzdFLFVBQVUsR0FBUSxJQUFJLENBQUM7SUFDdkIsSUFBSSxHQUFzQyxNQUFNLENBQUM7SUFFMUQsNkJBQTZCO0lBQ3BCLFdBQVcsR0FBMkIsUUFBUSxDQUFDO0lBQy9DLE9BQU8sR0FBWSxLQUFLLENBQUM7SUFDekIsWUFBWSxHQUE0QixFQUFFLENBQUM7SUFDM0MsWUFBWSxHQUE0QixFQUFFLENBQUM7SUFFcEQsdUJBQXVCO0lBQ2QsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBQ2xDLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxpQkFBaUIsQ0FBVTtJQUMzQixpQkFBaUIsQ0FBVTtJQUMzQixnQkFBZ0IsR0FBVyxhQUFhLENBQUM7SUFDekMsZ0JBQWdCLEdBQVcsYUFBYSxDQUFDO0lBRXhDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBQzFDLFVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3JDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBQzVDLFFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ3BDLFNBQVMsR0FBRyxJQUFJLFlBQVksRUFBaUMsQ0FBQztJQUV4RSxJQUFJLENBQWE7SUFDakIsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUV6Qix5QkFBeUI7SUFDekIsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUU3QixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLHFGQUFxRjtRQUNyRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25GLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFFBQVEsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQXlCLENBQUM7SUFDekUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUM7SUFDdkMsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM3RixDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDaEcsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDcEcsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQztJQUMvQyxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDaEcsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2hHLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNyQyxNQUFNLFlBQVksR0FBRyxRQUFRLEtBQUssTUFBTSxJQUFJLFFBQVEsS0FBSyxPQUFPLENBQUM7UUFFakUsOEJBQThCO1FBQzlCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQyxPQUFPLFlBQVk7Z0JBQ2pCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUc7WUFDZCxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDdEMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ3ZDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUN0QyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDdkMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQ3hDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsT0FBTyxZQUFZO1lBQ2pCLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7WUFDdEIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsWUFDVSxFQUFlLEVBQ2Ysa0JBQXNDLEVBQ3RDLFdBQXdCLEVBQ3hCLGFBQTRCO1FBSDVCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQ25DLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsa0NBQWtDO1FBQ2xDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN2QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFFRCxrRUFBa0U7UUFDbEUsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVyQixvRUFBb0U7WUFDcEUsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLENBQUM7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6Qyx5REFBeUQ7Z0JBQ3pELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxZQUFZLEdBQVEsRUFBRSxDQUFDO1FBRTdCLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUUxRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FDN0IsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssRUFBRSxFQUMxRCxVQUFVLENBQ1gsQ0FBQztZQUVGLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQTZCO1FBQ25ELElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDNUIsQ0FBQztRQUVELFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxNQUFNO2dCQUNULE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVDO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMzQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQixDQUFDLE1BQVc7UUFDbkMsTUFBTSxhQUFhLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBRXBDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLFNBQVMsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNsQyx3RUFBd0U7b0JBQ3hFLDBEQUEwRDtvQkFDMUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMzRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7NEJBQzNCLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUNwQyxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0Msb0VBQW9FO2dCQUNwRSxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ3RELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxtQkFBbUI7d0JBQzlDLENBQUMsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzFFLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxDQUFDO29CQUVwRCxJQUFJLGNBQWMsRUFBRSxDQUFDO3dCQUNuQixzREFBc0Q7d0JBQ3RELGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsV0FBVyxDQUFDO29CQUMzQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sMEJBQTBCO3dCQUMxQixhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQzlDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxjQUFjLENBQUMsR0FBUSxFQUFFLElBQVk7UUFDM0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxNQUFNLFdBQVcsR0FBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzdCLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsU0FBYztRQUN2QyxNQUFNLGNBQWMsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFFeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUvQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVCLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ2xFLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDO2dCQUMzQyxDQUFDO3FCQUFNLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUN4RCxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUNuRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsU0FBYztRQUNyQyxNQUFNLGNBQWMsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFFeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLGNBQWMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0MsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1Qix5Q0FBeUM7Z0JBQ3pDLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNqRCw0Q0FBNEM7b0JBQzVDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDO2dCQUMzQyxDQUFDO3FCQUFNLElBQUksVUFBVSxJQUFJLFVBQVUsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDM0MsMkNBQTJDO29CQUMzQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUNuRCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxVQUFVLFlBQVksSUFBSSxFQUFFLENBQUM7b0JBQy9CLHFFQUFxRTtvQkFDckUsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNuQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQzdELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN4RCxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDakQsQ0FBQztxQkFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3ZCLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkYsSUFBSSxVQUFVLEtBQUssRUFBRSxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDbEQsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBNkI7UUFDN0MsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBRTdCLDJCQUEyQjtRQUMzQixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVyQyx5Q0FBeUM7UUFDekMsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RELEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUM7Z0JBQ2xFLElBQUksbUJBQW1CLEtBQUssU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUM1QyxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztvQkFDaEMsTUFBTTtnQkFDUixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFbkMsb0ZBQW9GO1FBQ3BGLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUVqRCw0Q0FBNEM7UUFDNUMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUE2QjtRQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDMUUsT0FBTyxtQkFBbUIsS0FBSyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUN6RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQTZCO1FBQzNDLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELElBQUksQ0FBQyxDQUFDLGNBQWMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBRTVFLElBQUksS0FBSyxDQUFDLFlBQWEsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdkMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1FBQzlCLENBQUM7UUFFRCxPQUFPLG1CQUFtQixLQUFLLEtBQUssQ0FBQyxZQUFhLENBQUMsS0FBSyxDQUFDO0lBQzNELENBQUM7SUFFRCw2QkFBNkI7UUFDM0IsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRixNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV6RyxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25GLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVHLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxvQkFBb0IsRUFBRSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNGLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM5QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRXJELElBQUksZ0JBQWdCLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN2QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3BCLENBQUM7eUJBQU0sSUFBSSxDQUFDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3BFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbkIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQzdCLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDMUIsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUM1RCxPQUFPLGVBQWUsSUFBSSxrQkFBa0IsQ0FBQztJQUMvQyxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLElBQUksQ0FBQyxNQUFZO1FBQ2YsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMseUNBQXlDO1FBQzdELENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLHNCQUFzQjtRQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsc0JBQXNCO1FBQzVDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLDBCQUEwQjtRQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixjQUFjLENBQUMsU0FBaUI7UUFDOUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztZQUU5Qix5REFBeUQ7WUFDekQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztvQkFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFFekMsOERBQThEO29CQUM5RCxxRUFBcUU7b0JBQ3JFLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUNuRSwwREFBMEQ7d0JBQzFELE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzFCLENBQUM7eUJBQU0sSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLE1BQU0sSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ3hFLG1GQUFtRjt3QkFDbkYsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNoRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7NEJBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMxRCxDQUFDOzZCQUFNLENBQUM7NEJBQ04sT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDMUIsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQWlCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7SUFDekMsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUFpQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU87UUFFbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFeEIsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUUvQiw2REFBNkQ7UUFDN0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQzlELElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxRQUFRLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdFLDJDQUEyQztZQUMzQyxVQUFVLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUVELCtEQUErRDtRQUMvRCxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssTUFBTSxJQUFJLFVBQVUsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUN6RCxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqRCxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQy9CLHlCQUF5QjtnQkFDekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3pELE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzVCLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELG9CQUFvQixDQUFDLFNBQWlCO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRWhDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztRQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFdEIsNkNBQTZDO1FBQzdDLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4RSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDcEIsQ0FBQztRQUVELGlEQUFpRDtRQUNqRCxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN2RixPQUFPLEtBQUssQ0FBQyxtQkFBbUI7aUJBQzdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFFRCwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEtBQUssVUFBVSxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssTUFBTSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDcEUsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQztZQUNqRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQztZQUNqRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQy9DLE1BQU0sTUFBTSxHQUFHLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2hFLE9BQU8sTUFBTSxLQUFLLEtBQUssQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sT0FBTyxjQUFjLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUMzRixDQUFDO1FBQ0gsQ0FBQztRQUVELDBDQUEwQztRQUMxQyxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFELElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxPQUFPLEVBQUU7b0JBQ3BELEtBQUssRUFBRSxVQUFVO29CQUNqQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLO2lCQUNsQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLENBQUM7WUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLE9BQU8sRUFBRTtnQkFDcEQscUJBQXFCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixJQUFJLENBQUM7Z0JBQ25ELHFCQUFxQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxDQUFDO2FBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELHVEQUF1RDtRQUN2RCxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2pFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksWUFBWSxDQUFDO1lBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksa0JBQWtCLENBQUM7WUFDcEUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUM1RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQzdELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7d0dBM3NCVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiw4dUJDOUNqQyxxaFVBeVNBLDB1T0Q1UUksWUFBWSxvZ0JBQ1osbUJBQW1CLG9iQUNuQixXQUFXLG9iQUNYLFlBQVksbTZCQUNaLFlBQVksaWFBQ1osWUFBWSw4YUFDWixhQUFhLGtEQUNiLHlCQUF5QixtRUFDekIsMkJBQTJCLHFFQUMzQix5QkFBeUIsbUVBQ3pCLDZCQUE2Qix1RUFDN0IsMkJBQTJCLHFIQUMzQiw2QkFBNkI7OzRGQUtwQixvQkFBb0I7a0JBckJoQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osYUFBYTt3QkFDYix5QkFBeUI7d0JBQ3pCLDJCQUEyQjt3QkFDM0IseUJBQXlCO3dCQUN6Qiw2QkFBNkI7d0JBQzdCLDJCQUEyQjt3QkFDM0IsNkJBQTZCO3FCQUM5Qjt1S0FLUSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUGFuZWxNb2R1bGUgfSBmcm9tICdwcmltZW5nL3BhbmVsJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IERyYXdlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJhd2VyJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IFxuICBEeW5hbWljRm9ybUZpZWxkQ29uZmlnLCBcbiAgRHluYW1pY0Zvcm1TZWN0aW9uLFxuICBEeW5hbWljRm9ybURpc3BsYXlNb2RlLFxuICBEeW5hbWljRm9ybURpYWxvZ0NvbmZpZyxcbiAgRHluYW1pY0Zvcm1EcmF3ZXJDb25maWdcbn0gZnJvbSAnLi9tb2RlbHMvZHluYW1pYy1mb3JtLm1vZGVscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1hc2tTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzay5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbGUuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkVGV4dENvbXBvbmVudCB9IGZyb20gJy4vZmllbGRzL2R5bmFtaWMtZmllbGQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkTnVtYmVyQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1udW1iZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZERhdGVDb21wb25lbnQgfSBmcm9tICcuL2ZpZWxkcy9keW5hbWljLWZpZWxkLWRhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZERyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY0ZpZWxkTG9va3VwQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC1sb29rdXAuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNGaWVsZFRleHRhcmVhQ29tcG9uZW50IH0gZnJvbSAnLi9maWVsZHMvZHluYW1pYy1maWVsZC10ZXh0YXJlYS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaWEtZHluYW1pYy1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFBhbmVsTW9kdWxlLFxuICAgIERpYWxvZ01vZHVsZSxcbiAgICBEcmF3ZXJNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgRHluYW1pY0ZpZWxkVGV4dENvbXBvbmVudCxcbiAgICBEeW5hbWljRmllbGROdW1iZXJDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkRGF0ZUNvbXBvbmVudCxcbiAgICBEeW5hbWljRmllbGREcm9wZG93bkNvbXBvbmVudCxcbiAgICBEeW5hbWljRmllbGRMb29rdXBDb21wb25lbnQsXG4gICAgRHluYW1pY0ZpZWxkVGV4dGFyZWFDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBmb3JtRmllbGRzOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgQElucHV0KCkgZm9ybVNlY3Rpb25zOiBEeW5hbWljRm9ybVNlY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBmaXhlZEZpbHRlcnM6IER5bmFtaWNGb3JtRmllbGRDb25maWdbXSA9IFtdOyAvLyBGaWx0cm9zIGZpeG9zIChzZW1wcmUgdmlzw612ZWlzIG5vIHRvcG8pXG4gIEBJbnB1dCgpIGZpbHRlclNlY3Rpb25zOiBEeW5hbWljRm9ybVNlY3Rpb25bXSA9IFtdOyAvLyBTZcOnw7VlcyBkZSBmaWx0cm9zIChjb2xhcHPDoXZlaXMpXG4gIEBJbnB1dCgpIGVudGl0eURhdGE6IGFueSA9IG51bGw7XG4gIEBJbnB1dCgpIG1vZGU6ICdmb3JtJyB8ICdmaWx0ZXInIHwgJ2lubGluZS1lZGl0JyA9ICdmb3JtJztcbiAgXG4gIC8vIERpc3BsYXkgTW9kZSBDb25maWd1cmF0aW9uXG4gIEBJbnB1dCgpIGRpc3BsYXlNb2RlOiBEeW5hbWljRm9ybURpc3BsYXlNb2RlID0gJ2lubGluZSc7XG4gIEBJbnB1dCgpIHZpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlhbG9nQ29uZmlnOiBEeW5hbWljRm9ybURpYWxvZ0NvbmZpZyA9IHt9O1xuICBASW5wdXQoKSBkcmF3ZXJDb25maWc6IER5bmFtaWNGb3JtRHJhd2VyQ29uZmlnID0ge307XG4gIFxuICAvLyBCdXR0b24gQ29uZmlndXJhdGlvblxuICBASW5wdXQoKSBzaG93U3VibWl0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dDYW5jZWxCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc3VibWl0QnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhbmNlbEJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJtaXRCdXR0b25JY29uOiBzdHJpbmcgPSAncGkgcGktY2hlY2snO1xuICBASW5wdXQoKSBjYW5jZWxCdXR0b25JY29uOiBzdHJpbmcgPSAncGkgcGktdGltZXMnO1xuICBcbiAgQE91dHB1dCgpIGZvcm1SZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPigpO1xuICBAT3V0cHV0KCkgZm9ybVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIG9uQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZmllbGRTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkgfT4oKTtcblxuICBmb3JtITogRm9ybUdyb3VwO1xuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIFxuICAvLyBJbmxpbmUgZWRpdCBtb2RlIHN0YXRlXG4gIGVkaXRpbmdGaWVsZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNhdmluZ0ZpZWxkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IGhhc0ZpZWxkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtRmllbGRzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgaGFzU2VjdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVNlY3Rpb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgaGFzRml4ZWRGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpeGVkRmlsdGVycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IGhhc0ZpbHRlclNlY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlY3Rpb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXQgYWxsRmllbGRzKCk6IER5bmFtaWNGb3JtRmllbGRDb25maWdbXSB7XG4gICAgLy8gUmV0b3JuYSB0b2RvcyBvcyBjYW1wb3MgKGRpcmV0b3MgKyBkYXMgc2XDp8O1ZXMgKyBmaWx0cm9zIGZpeG9zICsgc2XDp8O1ZXMgZGUgZmlsdHJvcylcbiAgICBjb25zdCBzZWN0aW9uRmllbGRzID0gdGhpcy5mb3JtU2VjdGlvbnMuZmxhdE1hcChzZWN0aW9uID0+IHNlY3Rpb24uZmllbGRzKTtcbiAgICBjb25zdCBmaWx0ZXJTZWN0aW9uRmllbGRzID0gdGhpcy5maWx0ZXJTZWN0aW9ucy5mbGF0TWFwKHNlY3Rpb24gPT4gc2VjdGlvbi5maWVsZHMpO1xuICAgIHJldHVybiBbLi4udGhpcy5mb3JtRmllbGRzLCAuLi5zZWN0aW9uRmllbGRzLCAuLi50aGlzLmZpeGVkRmlsdGVycywgLi4uZmlsdGVyU2VjdGlvbkZpZWxkc107XG4gIH1cblxuICBnZXQgaXNJbmxpbmVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlNb2RlID09PSAnaW5saW5lJztcbiAgfVxuXG4gIGdldCBpc0lubGluZUVkaXRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdpbmxpbmUtZWRpdCc7XG4gIH1cblxuICBnZXQgZmllbGRNb2RlKCk6ICdmb3JtJyB8ICdmaWx0ZXInIHtcbiAgICByZXR1cm4gdGhpcy5pc0lubGluZUVkaXRNb2RlID8gJ2Zvcm0nIDogdGhpcy5tb2RlIGFzICdmb3JtJyB8ICdmaWx0ZXInO1xuICB9XG5cbiAgZ2V0IGlzRGlhbG9nTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNwbGF5TW9kZSA9PT0gJ2RpYWxvZyc7XG4gIH1cblxuICBnZXQgaXNEcmF3ZXJNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXlNb2RlID09PSAnZHJhd2VyJztcbiAgfVxuXG4gIC8vIERpYWxvZyBjb25maWd1cmF0aW9uIHdpdGggZGVmYXVsdHNcbiAgZ2V0IGRpYWxvZ0hlYWRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5oZWFkZXIgfHwgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5mb3JtJyk7XG4gIH1cblxuICBnZXQgZGlhbG9nV2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dDb25maWcud2lkdGggfHwgJzYwMHB4JztcbiAgfVxuXG4gIGdldCBkaWFsb2dEcmFnZ2FibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLmRyYWdnYWJsZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5kaWFsb2dDb25maWcuZHJhZ2dhYmxlIDogZmFsc2U7XG4gIH1cblxuICBnZXQgZGlhbG9nUmVzaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5yZXNpemFibGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuZGlhbG9nQ29uZmlnLnJlc2l6YWJsZSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGRpYWxvZ01heGltaXphYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5tYXhpbWl6YWJsZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5kaWFsb2dDb25maWcubWF4aW1pemFibGUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBkaWFsb2dDbG9zZU9uRXNjYXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpYWxvZ0NvbmZpZy5jbG9zZU9uRXNjYXBlICE9PSB1bmRlZmluZWQgPyB0aGlzLmRpYWxvZ0NvbmZpZy5jbG9zZU9uRXNjYXBlIDogdHJ1ZTtcbiAgfVxuXG4gIGdldCBkaWFsb2dEaXNtaXNzYWJsZU1hc2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlhbG9nQ29uZmlnLmRpc21pc3NhYmxlTWFzayAhPT0gdW5kZWZpbmVkID8gdGhpcy5kaWFsb2dDb25maWcuZGlzbWlzc2FibGVNYXNrIDogZmFsc2U7XG4gIH1cblxuICAvLyBEcmF3ZXIgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHRzXG4gIGdldCBkcmF3ZXJIZWFkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kcmF3ZXJDb25maWcuaGVhZGVyIHx8IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZSgnZGVzaWduLmNvbXBvbmVudHNfYWkuZm9ybScpO1xuICB9XG5cbiAgZ2V0IGRyYXdlclBvc2l0aW9uKCk6ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nIHtcbiAgICByZXR1cm4gdGhpcy5kcmF3ZXJDb25maWcucG9zaXRpb24gfHwgJ3JpZ2h0JztcbiAgfVxuXG4gIGdldCBkcmF3ZXJTaG93Q2xvc2VJY29uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5zaG93Q2xvc2VJY29uICE9PSB1bmRlZmluZWQgPyB0aGlzLmRyYXdlckNvbmZpZy5zaG93Q2xvc2VJY29uIDogdHJ1ZTtcbiAgfVxuXG4gIGdldCBkcmF3ZXJDbG9zZU9uRXNjYXBlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRyYXdlckNvbmZpZy5jbG9zZU9uRXNjYXBlICE9PSB1bmRlZmluZWQgPyB0aGlzLmRyYXdlckNvbmZpZy5jbG9zZU9uRXNjYXBlIDogdHJ1ZTtcbiAgfVxuXG4gIGdldCBkcmF3ZXJEaXNtaXNzYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmF3ZXJDb25maWcuZGlzbWlzc2FibGUgIT09IHVuZGVmaW5lZCA/IHRoaXMuZHJhd2VyQ29uZmlnLmRpc21pc3NhYmxlIDogdHJ1ZTtcbiAgfVxuXG4gIGdldCBkcmF3ZXJTdHlsZSgpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZHJhd2VyUG9zaXRpb247XG4gICAgY29uc3QgaXNIb3Jpem9udGFsID0gcG9zaXRpb24gPT09ICdsZWZ0JyB8fCBwb3NpdGlvbiA9PT0gJ3JpZ2h0JztcbiAgICBcbiAgICAvLyBTZSB0ZW0gY3VzdG9tV2lkdGgsIHVzYSBlbGFcbiAgICBpZiAodGhpcy5kcmF3ZXJDb25maWcuY3VzdG9tV2lkdGgpIHtcbiAgICAgIHJldHVybiBpc0hvcml6b250YWwgXG4gICAgICAgID8geyB3aWR0aDogdGhpcy5kcmF3ZXJDb25maWcuY3VzdG9tV2lkdGggfVxuICAgICAgICA6IHsgaGVpZ2h0OiB0aGlzLmRyYXdlckNvbmZpZy5jdXN0b21XaWR0aCB9O1xuICAgIH1cbiAgICBcbiAgICAvLyBVc2EgbyB0YW1hbmhvIHBhZHJvbml6YWRvXG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuZHJhd2VyQ29uZmlnLnNpemUgfHwgJ21lZGl1bSc7XG4gICAgY29uc3Qgc2l6ZU1hcCA9IHtcbiAgICAgICdzbWFsbCc6IGlzSG9yaXpvbnRhbCA/ICcyNSUnIDogJzI1dmgnLFxuICAgICAgJ21lZGl1bSc6IGlzSG9yaXpvbnRhbCA/ICc0MCUnIDogJzQwdmgnLFxuICAgICAgJ2xhcmdlJzogaXNIb3Jpem9udGFsID8gJzYwJScgOiAnNjB2aCcsXG4gICAgICAneGxhcmdlJzogaXNIb3Jpem9udGFsID8gJzgwJScgOiAnODB2aCcsXG4gICAgICAnZnVsbCc6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6ICcxMDB2aCdcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IHNpemVWYWx1ZSA9IHNpemVNYXBbc2l6ZV07XG4gICAgcmV0dXJuIGlzSG9yaXpvbnRhbCBcbiAgICAgID8geyB3aWR0aDogc2l6ZVZhbHVlIH1cbiAgICAgIDogeyBoZWlnaHQ6IHNpemVWYWx1ZSB9O1xuICB9XG5cbiAgZ2V0IHN1Ym1pdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3VibWl0QnV0dG9uTGFiZWwgfHwgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKCdkZXNpZ24uY29tcG9uZW50c19haS5zYXZlJyk7XG4gIH1cblxuICBnZXQgY2FuY2VsTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jYW5jZWxCdXR0b25MYWJlbCB8fCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUoJ2Rlc2lnbi5jb21wb25lbnRzX2FpLmNhbmNlbCcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG1hc2tTZXJ2aWNlOiBNYXNrU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICBpZiAodGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICB0aGlzLmxvYWRFbnRpdHlEYXRhKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0dXBDb25kaXRpb25hbEZpZWxkc1dhdGNoZXIoKTtcbiAgICB0aGlzLmZvcm1SZWFkeS5lbWl0KHRoaXMuZm9ybSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGVudGl0eURhdGEgY2hhbmdlcyBmaXJzdFxuICAgIGlmIChjaGFuZ2VzWydlbnRpdHlEYXRhJ10gJiYgdGhpcy5mb3JtKSB7XG4gICAgICBpZiAodGhpcy5lbnRpdHlEYXRhKSB7XG4gICAgICAgIHRoaXMubG9hZEVudGl0eURhdGEoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFdoZW4gZGlhbG9nL2RyYXdlciBvcGVucywgZW5zdXJlIGZvcm0gaXMgbG9hZGVkIHdpdGggZW50aXR5RGF0YVxuICAgIGlmIChjaGFuZ2VzWyd2aXNpYmxlJ10gJiYgY2hhbmdlc1sndmlzaWJsZSddLmN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICBcbiAgICAgIC8vIElmIG9wZW5pbmcgd2l0aCBlbnRpdHlEYXRhLCByZWxvYWQgaXQgdG8gZW5zdXJlIGZvcm0gaXMgcG9wdWxhdGVkXG4gICAgICBpZiAodGhpcy5lbnRpdHlEYXRhICYmIHRoaXMuZm9ybSkge1xuICAgICAgICB0aGlzLmxvYWRFbnRpdHlEYXRhKCk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmVudGl0eURhdGEgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgIC8vIElmIG9wZW5pbmcgd2l0aG91dCBlbnRpdHlEYXRhIChuZXcgcmVjb3JkKSwgcmVzZXQgZm9ybVxuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1Db250cm9sczogYW55ID0ge307XG4gICAgXG4gICAgLy8gUHJvY2Vzc2EgdG9kb3Mgb3MgY2FtcG9zIChkaXJldG9zICsgZGFzIHNlw6fDtWVzKVxuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoZmllbGQpO1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMubW9kZSA9PT0gJ2ZpbHRlcicgPyBbXSA6IChmaWVsZC52YWxpZGF0b3JzIHx8IFtdKTtcbiAgICAgIFxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZmIuY29udHJvbChcbiAgICAgICAgeyB2YWx1ZTogZGVmYXVsdFZhbHVlLCBkaXNhYmxlZDogZmllbGQuZGlzYWJsZWQgfHwgZmFsc2UgfSxcbiAgICAgICAgdmFsaWRhdG9yc1xuICAgICAgKTtcbiAgICAgIFxuICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLmZpZWxkXSA9IGNvbnRyb2w7XG4gICAgfSk7XG4gICAgXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICAgIHRoaXMuYXBwbHlJbml0aWFsRGlzYWJsZWRTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsdWUoZmllbGQ6IER5bmFtaWNGb3JtRmllbGRDb25maWcpOiBhbnkge1xuICAgIGlmIChmaWVsZC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZpZWxkLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICBjYXNlICdkcm9wZG93bic6XG4gICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2ZpbHRlcicgPyBudWxsIDogJyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUluaXRpYWxEaXNhYmxlZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkLmRpc2FibGVkV2hlbikge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZC5maWVsZCk7XG4gICAgICAgIGlmIChjb250cm9sICYmIHRoaXMuaXNGaWVsZERpc2FibGVkKGZpZWxkKSkge1xuICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2FkRW50aXR5RGF0YSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnRpdHlEYXRhICYmIHRoaXMuZm9ybSkge1xuICAgICAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IHRoaXMucHJvY2Vzc0VudGl0eURhdGEodGhpcy5lbnRpdHlEYXRhKTtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHByb2Nlc3NlZERhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0VudGl0eURhdGEoZW50aXR5OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHByb2Nlc3NlZERhdGEgPSB7IC4uLmVudGl0eSB9O1xuICAgIFxuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdkYXRlJyAmJiBwcm9jZXNzZWREYXRhW2ZpZWxkLmZpZWxkXSkge1xuICAgICAgICBjb25zdCBkYXRlVmFsdWUgPSBwcm9jZXNzZWREYXRhW2ZpZWxkLmZpZWxkXTtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRlVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gQ29udmVydCBkYXRlIHN0cmluZyAoeXl5eS1NTS1kZCBvciBJU08pIHRvIERhdGUgb2JqZWN0IGZvciBwLWNhbGVuZGFyXG4gICAgICAgICAgLy8gVXNlIGRhdGUtb25seSBjb25zdHJ1Y3RvciB0byBhdm9pZCB0aW1lem9uZS9ob3VyIGlzc3Vlc1xuICAgICAgICAgIGNvbnN0IHBhcnRzID0gZGF0ZVZhbHVlLnN1YnN0cmluZygwLCAxMCkuc3BsaXQoJy0nKTtcbiAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoK3BhcnRzWzBdLCArcGFydHNbMV0gLSAxLCArcGFydHNbMl0pO1xuICAgICAgICAgICAgaWYgKCFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtmaWVsZC5maWVsZF0gPSBkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xvb2t1cCcgJiYgcHJvY2Vzc2VkRGF0YVtmaWVsZC5maWVsZF0pIHtcbiAgICAgICAgY29uc3QgbG9va3VwVmFsdWUgPSBwcm9jZXNzZWREYXRhW2ZpZWxkLmZpZWxkXTtcbiAgICAgICAgLy8gS2VlcCB0aGUgZnVsbCBvYmplY3QgaWYgaXQgaGFzIGRpc3BsYXkgZGF0YSwgb3RoZXJ3aXNlIGV4dHJhY3QgSURcbiAgICAgICAgaWYgKHR5cGVvZiBsb29rdXBWYWx1ZSA9PT0gJ29iamVjdCcgJiYgbG9va3VwVmFsdWUuaWQpIHtcbiAgICAgICAgICBjb25zdCBoYXNEaXNwbGF5RGF0YSA9IGZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHMgXG4gICAgICAgICAgICA/IGZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHMuc29tZShmID0+IHRoaXMuZ2V0TmVzdGVkVmFsdWUobG9va3VwVmFsdWUsIGYpKVxuICAgICAgICAgICAgOiBsb29rdXBWYWx1ZVtmaWVsZC5sb29rdXBEaXNwbGF5RmllbGQgfHwgJ25hbWUnXTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoaGFzRGlzcGxheURhdGEpIHtcbiAgICAgICAgICAgIC8vIEtlZXAgdGhlIGZ1bGwgb2JqZWN0IHRvIGF2b2lkIHVubmVjZXNzYXJ5IEFQSSBjYWxsc1xuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtmaWVsZC5maWVsZF0gPSBsb29rdXBWYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gT25seSBoYXMgSUQsIGV4dHJhY3QgaXRcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbZmllbGQuZmllbGRdID0gbG9va3VwVmFsdWUuaWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHByb2Nlc3NlZERhdGE7XG4gIH1cblxuICBwcml2YXRlIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChjdXJyZW50LCBrZXkpID0+IGN1cnJlbnQ/LltrZXldLCBvYmopO1xuICB9XG5cbiAgcmVzZXRGb3JtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgIGNvbnN0IHJlc2V0VmFsdWVzOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICByZXNldFZhbHVlc1tmaWVsZC5maWVsZF0gPSB0aGlzLmdldERlZmF1bHRWYWx1ZShmaWVsZCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9ybS5yZXNldChyZXNldFZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzRmlsdGVyVmFsdWUoZm9ybVZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHByb2Nlc3NlZFZhbHVlID0geyAuLi5mb3JtVmFsdWUgfTtcbiAgICBcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBwcm9jZXNzZWRWYWx1ZVtmaWVsZC5maWVsZF07XG4gICAgICBcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbG9va3VwJykge1xuICAgICAgICBpZiAoZmllbGRWYWx1ZSAmJiB0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ29iamVjdCcgJiYgZmllbGRWYWx1ZS5pZCkge1xuICAgICAgICAgIHByb2Nlc3NlZFZhbHVlW2ZpZWxkLmZpZWxkXSA9IGZpZWxkVmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGRWYWx1ZSAmJiB0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBwcm9jZXNzZWRWYWx1ZVtmaWVsZC5maWVsZF0gPSB7IGlkOiBmaWVsZFZhbHVlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvY2Vzc2VkVmFsdWVbZmllbGQuZmllbGRdID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBwcm9jZXNzZWRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0Zvcm1WYWx1ZShmb3JtVmFsdWU6IGFueSk6IGFueSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkVmFsdWUgPSB7IC4uLmZvcm1WYWx1ZSB9O1xuICAgIFxuICAgIGlmICh0aGlzLmVudGl0eURhdGE/LmlkKSB7XG4gICAgICBwcm9jZXNzZWRWYWx1ZS5pZCA9IHRoaXMuZW50aXR5RGF0YS5pZDtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5hbGxGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gcHJvY2Vzc2VkVmFsdWVbZmllbGQuZmllbGRdO1xuICAgICAgXG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ2xvb2t1cCcpIHtcbiAgICAgICAgLy8gS2VlcCB0aGUgZnVsbCBvYmplY3QgZm9yIGxvb2t1cCBmaWVsZHNcbiAgICAgICAgaWYgKGZpZWxkVmFsdWUgJiYgdHlwZW9mIGZpZWxkVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgLy8gT2JqZWN0IGlzIGFscmVhZHkgY29tcGxldGUsIGtlZXAgaXQgYXMgaXNcbiAgICAgICAgICBwcm9jZXNzZWRWYWx1ZVtmaWVsZC5maWVsZF0gPSBmaWVsZFZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVmFsdWUgJiYgZmllbGRWYWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAvLyBJZiBpdCdzIGp1c3QgYW4gSUQsIHdyYXAgaXQgaW4gYW4gb2JqZWN0XG4gICAgICAgICAgcHJvY2Vzc2VkVmFsdWVbZmllbGQuZmllbGRdID0geyBpZDogZmllbGRWYWx1ZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZFZhbHVlW2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgIGlmIChmaWVsZFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIC8vIFNlcmlhbGl6ZSBhcyB5eXl5LU1NLWRkIHVzaW5nIGxvY2FsIGRhdGUgY29tcG9uZW50cyAobm8gVVRDIHNoaWZ0KVxuICAgICAgICAgIGNvbnN0IHkgPSBmaWVsZFZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgY29uc3QgbSA9IFN0cmluZyhmaWVsZFZhbHVlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgIGNvbnN0IGQgPSBTdHJpbmcoZmllbGRWYWx1ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgICAgcHJvY2Vzc2VkVmFsdWVbZmllbGQuZmllbGRdID0gYCR7eX0tJHttfS0ke2R9YDtcbiAgICAgICAgfSBlbHNlIGlmICghZmllbGRWYWx1ZSkge1xuICAgICAgICAgIHByb2Nlc3NlZFZhbHVlW2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoWyd0ZXh0JywgJ3RleHRhcmVhJywgJ251bWJlcicsICdlbnVtJywgJ2Ryb3Bkb3duJ10uaW5jbHVkZXMoZmllbGQudHlwZSkpIHtcbiAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcnIHx8IGZpZWxkVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHByb2Nlc3NlZFZhbHVlW2ZpZWxkLmZpZWxkXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gcHJvY2Vzc2VkVmFsdWU7XG4gIH1cblxuICBnZXRGaWVsZEdyaWRDbGFzcyhmaWVsZDogRHluYW1pY0Zvcm1GaWVsZENvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICAvLyBDb2xzcGFuIGJhc2UgKHBhZHLDo286IDYpXG4gICAgbGV0IGJhc2VDb2xzcGFuID0gZmllbGQuY29sc3BhbiB8fCA2O1xuICAgIFxuICAgIC8vIFZlcmlmaWNhIGNvbmRpw6fDtWVzIGRlIGNvbHNwYW4gZGluw6JtaWNvXG4gICAgaWYgKGZpZWxkLmNvbHNwYW5XaGVuICYmIGZpZWxkLmNvbHNwYW5XaGVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgY29uZGl0aW9uIG9mIGZpZWxkLmNvbHNwYW5XaGVuKSB7XG4gICAgICAgIGNvbnN0IGRlcGVuZGVudEZpZWxkVmFsdWUgPSB0aGlzLmZvcm0uZ2V0KGNvbmRpdGlvbi5maWVsZCk/LnZhbHVlO1xuICAgICAgICBpZiAoZGVwZW5kZW50RmllbGRWYWx1ZSA9PT0gY29uZGl0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgYmFzZUNvbHNwYW4gPSBjb25kaXRpb24uY29sc3BhbjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBBZGljaW9uYSBjbGFzc2UgYmFzZVxuICAgIGNsYXNzZXMucHVzaChgY29sLSR7YmFzZUNvbHNwYW59YCk7XG4gICAgXG4gICAgLy8gU3Vwb3J0YSB0YW50byBvIG9iamV0byBzaXplIHF1YW50byBhcyBwcm9wcmllZGFkZXMgYW50aWdhcyAocGFyYSBjb21wYXRpYmlsaWRhZGUpXG4gICAgY29uc3Qgc2l6ZVhzID0gZmllbGQuc2l6ZT8ueHMgPz8gZmllbGQuY29sc3BhblhzO1xuICAgIGNvbnN0IHNpemVTbSA9IGZpZWxkLnNpemU/LnNtID8/IGZpZWxkLmNvbHNwYW5TbTtcbiAgICBjb25zdCBzaXplTWQgPSBmaWVsZC5zaXplPy5tZCA/PyBmaWVsZC5jb2xzcGFuTWQ7XG4gICAgY29uc3Qgc2l6ZUxnID0gZmllbGQuc2l6ZT8ubGcgPz8gZmllbGQuY29sc3BhbkxnO1xuICAgIGNvbnN0IHNpemVYbCA9IGZpZWxkLnNpemU/LnhsID8/IGZpZWxkLmNvbHNwYW5YbDtcbiAgICBcbiAgICAvLyBBZGljaW9uYSBjbGFzc2VzIHJlc3BvbnNpdmFzIHNlIGRlZmluaWRhc1xuICAgIGlmIChzaXplWHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xhc3Nlcy5wdXNoKGBjb2wteHMtJHtzaXplWHN9YCk7XG4gICAgfVxuICAgIGlmIChzaXplU20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xhc3Nlcy5wdXNoKGBjb2wtc20tJHtzaXplU219YCk7XG4gICAgfVxuICAgIGlmIChzaXplTWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xhc3Nlcy5wdXNoKGBjb2wtbWQtJHtzaXplTWR9YCk7XG4gICAgfVxuICAgIGlmIChzaXplTGcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xhc3Nlcy5wdXNoKGBjb2wtbGctJHtzaXplTGd9YCk7XG4gICAgfVxuICAgIGlmIChzaXplWGwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xhc3Nlcy5wdXNoKGBjb2wteGwtJHtzaXplWGx9YCk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGlzRmllbGRWaXNpYmxlKGZpZWxkOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWVsZC52aXNpYmxlV2hlbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZGVwZW5kZW50RmllbGRWYWx1ZSA9IHRoaXMuZm9ybS5nZXQoZmllbGQudmlzaWJsZVdoZW4uZmllbGQpPy52YWx1ZTtcbiAgICByZXR1cm4gZGVwZW5kZW50RmllbGRWYWx1ZSA9PT0gZmllbGQudmlzaWJsZVdoZW4udmFsdWU7XG4gIH1cblxuICBpc0ZpZWxkRGlzYWJsZWQoZmllbGQ6IER5bmFtaWNGb3JtRmllbGRDb25maWcpOiBib29sZWFuIHtcbiAgICBpZiAoZmllbGQuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICBpZiAoISgnZGlzYWJsZWRXaGVuJyBpbiBmaWVsZCkgfHwgIWZpZWxkLmRpc2FibGVkV2hlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcGVuZGVudEZpZWxkVmFsdWUgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkLmRpc2FibGVkV2hlbiEuZmllbGQpPy52YWx1ZTtcbiAgICBcbiAgICBpZiAoZmllbGQuZGlzYWJsZWRXaGVuIS52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICFkZXBlbmRlbnRGaWVsZFZhbHVlO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZGVwZW5kZW50RmllbGRWYWx1ZSA9PT0gZmllbGQuZGlzYWJsZWRXaGVuIS52YWx1ZTtcbiAgfVxuXG4gIHNldHVwQ29uZGl0aW9uYWxGaWVsZHNXYXRjaGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2libGVEZXBlbmRlbnRGaWVsZHMgPSB0aGlzLmFsbEZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQudmlzaWJsZVdoZW4pO1xuICAgIGNvbnN0IHZpc2libGVXYXRjaGVkRmllbGRzID0gWy4uLm5ldyBTZXQodmlzaWJsZURlcGVuZGVudEZpZWxkcy5tYXAoZmllbGQgPT4gZmllbGQudmlzaWJsZVdoZW4hLmZpZWxkKSldO1xuXG4gICAgY29uc3QgZGlzYWJsZWREZXBlbmRlbnRGaWVsZHMgPSB0aGlzLmFsbEZpZWxkcy5maWx0ZXIoZmllbGQgPT4gZmllbGQuZGlzYWJsZWRXaGVuKTtcbiAgICBjb25zdCBkaXNhYmxlZFdhdGNoZWRGaWVsZHMgPSBbLi4ubmV3IFNldChkaXNhYmxlZERlcGVuZGVudEZpZWxkcy5tYXAoZmllbGQgPT4gZmllbGQuZGlzYWJsZWRXaGVuIS5maWVsZCkpXTtcblxuICAgIGNvbnN0IGFsbFdhdGNoZWRGaWVsZHMgPSBbLi4ubmV3IFNldChbLi4udmlzaWJsZVdhdGNoZWRGaWVsZHMsIC4uLmRpc2FibGVkV2F0Y2hlZEZpZWxkc10pXTtcblxuICAgIGFsbFdhdGNoZWRGaWVsZHMuZm9yRWFjaChmaWVsZE5hbWUgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGROYW1lKTtcbiAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jbGVhckhpZGRlbkZpZWxkcygpO1xuICAgICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWRGaWVsZHMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVEaXNhYmxlZEZpZWxkcygpOiB2b2lkIHtcbiAgICB0aGlzLmFsbEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIGlmIChmaWVsZC5kaXNhYmxlZFdoZW4pIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoZmllbGQuZmllbGQpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnN0IHNob3VsZEJlRGlzYWJsZWQgPSB0aGlzLmlzRmllbGREaXNhYmxlZChmaWVsZCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHNob3VsZEJlRGlzYWJsZWQgJiYgY29udHJvbC5lbmFibGVkKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICghc2hvdWxkQmVEaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkICYmICFmaWVsZC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgY29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFySGlkZGVuRmllbGRzKCk6IHZvaWQge1xuICAgIHRoaXMuYWxsRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgaWYgKGZpZWxkLnZpc2libGVXaGVuICYmICF0aGlzLmlzRmllbGRWaXNpYmxlKGZpZWxkKSkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZC5maWVsZCk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgY29uc3QgcmVzZXRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGZpZWxkKTtcbiAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHJlc2V0VmFsdWUpO1xuICAgICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgICAgY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZmlsdGVyJykge1xuICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICB9XG4gIH1cblxuICBnZXRUeXBlUGVyc29uVmFsdWUoKTogJ05BVFVSQUxfUEVSU09OJyB8ICdKVVJJRElDQUxfUEVSU09OJyB7XG4gICAgY29uc3QgdHlwZVBlcnNvblZhbHVlID0gdGhpcy5mb3JtPy5nZXQoJ3R5cGVQZXJzb24nKT8udmFsdWU7XG4gICAgcmV0dXJuIHR5cGVQZXJzb25WYWx1ZSB8fCAnSlVSSURJQ0FMX1BFUlNPTic7XG4gIH1cblxuICAvLyBEaXNwbGF5IE1vZGUgQ29udHJvbCBNZXRob2RzXG4gIG9wZW4oZW50aXR5PzogYW55KTogdm9pZCB7XG4gICAgaWYgKGVudGl0eSkge1xuICAgICAgdGhpcy5lbnRpdHlEYXRhID0gZW50aXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudGl0eURhdGEgPSBudWxsO1xuICAgICAgdGhpcy5yZXNldEZvcm0oKTsgLy8gUmVzZXQgZm9ybSB3aGVuIG9wZW5pbmcgZm9yIG5ldyBlbnRpdHlcbiAgICB9XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7IC8vIFJlc2V0IGxvYWRpbmcgc3RhdGVcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHRydWUpO1xuICB9XG5cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7IC8vIFJlc2V0IGxvYWRpbmcgc3RhdGVcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5yZXNldEZvcm0oKTsgLy8gUmVzZXQgZm9ybSB3aGVuIGNsb3NpbmdcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGhhbmRsZUNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBoYW5kbGVTdWJtaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2Zvcm0nICYmIHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5tb2RlICE9PSAnZmlsdGVyJykge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5tb2RlID09PSAnZmlsdGVyJyBcbiAgICAgID8gdGhpcy5wcm9jZXNzRmlsdGVyVmFsdWUodGhpcy5mb3JtLnZhbHVlKVxuICAgICAgOiB0aGlzLnByb2Nlc3NGb3JtVmFsdWUodGhpcy5mb3JtLnZhbHVlKTtcbiAgICBcbiAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdChmb3JtVmFsdWUpO1xuICB9XG5cbiAgLy8gSW5saW5lIEVkaXQgTW9kZSBNZXRob2RzXG4gIHN0YXJ0RWRpdEZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbmxpbmVFZGl0TW9kZSkge1xuICAgICAgdGhpcy5lZGl0aW5nRmllbGQgPSBmaWVsZE5hbWU7XG4gICAgICBcbiAgICAgIC8vIEVuc3VyZSB0aGUgZmllbGQgaGFzIHRoZSBjdXJyZW50IHZhbHVlIGZyb20gZW50aXR5RGF0YVxuICAgICAgaWYgKHRoaXMuZW50aXR5RGF0YSkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldChmaWVsZE5hbWUpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5hbGxGaWVsZHMuZmluZChmID0+IGYuZmllbGQgPT09IGZpZWxkTmFtZSk7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmVudGl0eURhdGFbZmllbGROYW1lXTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBGb3IgbG9va3VwIGZpZWxkcyBpbiBpbmxpbmUtZWRpdCBtb2RlLCBrZWVwIHRoZSBmdWxsIG9iamVjdFxuICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdW5uZWNlc3NhcnkgQVBJIGNhbGxzIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgZGF0YVxuICAgICAgICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2xvb2t1cCcgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgLy8gS2VlcCB0aGUgZnVsbCBvYmplY3QgLSB0aGUgbG9va3VwIGNvbXBvbmVudCB3aWxsIHVzZSBpdFxuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZD8udHlwZSA9PT0gJ2RhdGUnICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0ZSBzdHJpbmcgdG8gRGF0ZSBvYmplY3QgZm9yIHAtY2FsZW5kYXIgKGRhdGUtb25seSwgbm8gdGltZSBjb21wb25lbnQpXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbHVlLnN1YnN0cmluZygwLCAxMCkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCtwYXJ0c1swXSwgK3BhcnRzWzFdIC0gMSwgK3BhcnRzWzJdKTtcbiAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gZGF0ZSA6IHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc0ZpZWxkRWRpdGluZyhmaWVsZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdGaWVsZCA9PT0gZmllbGROYW1lO1xuICB9XG5cbiAgc2F2ZUlubGluZUZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzSW5saW5lRWRpdE1vZGUpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KGZpZWxkTmFtZSk7XG4gICAgaWYgKCFjb250cm9sIHx8IGNvbnRyb2wuaW52YWxpZCkge1xuICAgICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2F2aW5nRmllbGQgPSB0cnVlO1xuICAgIFxuICAgIGxldCBmaWVsZFZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBcbiAgICAvLyBGb3IgbG9va3VwIGZpZWxkcywga2VlcCB0aGUgZnVsbCBvYmplY3QgKGRvbid0IGV4dHJhY3QgSUQpXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmFsbEZpZWxkcy5maW5kKGYgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKTtcbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICdsb29rdXAnICYmIGZpZWxkVmFsdWUgJiYgdHlwZW9mIGZpZWxkVmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICAvLyBJZiBpdCdzIGp1c3QgYW4gSUQsIHdyYXAgaXQgaW4gYW4gb2JqZWN0XG4gICAgICBmaWVsZFZhbHVlID0geyBpZDogZmllbGRWYWx1ZSB9O1xuICAgIH1cblxuICAgIC8vIEZvciBkYXRlIGZpZWxkcywgc2VyaWFsaXplIGFzIHl5eXktTU0tZGQgKG5vIHRpbWUgY29tcG9uZW50KVxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2RhdGUnICYmIGZpZWxkVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCB5ID0gZmllbGRWYWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgbSA9IFN0cmluZyhmaWVsZFZhbHVlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgZCA9IFN0cmluZyhmaWVsZFZhbHVlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGZpZWxkVmFsdWUgPSBgJHt5fS0ke219LSR7ZH1gO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmZpZWxkU2F2ZS5lbWl0KHsgZmllbGQ6IGZpZWxkTmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUgfSk7XG4gIH1cblxuICBjYW5jZWxJbmxpbmVFZGl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW5saW5lRWRpdE1vZGUgJiYgdGhpcy5lZGl0aW5nRmllbGQpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KHRoaXMuZWRpdGluZ0ZpZWxkKTtcbiAgICAgIGlmIChjb250cm9sICYmIHRoaXMuZW50aXR5RGF0YSkge1xuICAgICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLmVudGl0eURhdGFbdGhpcy5lZGl0aW5nRmllbGRdO1xuICAgICAgICBjb250cm9sLnNldFZhbHVlKG9yaWdpbmFsVmFsdWUpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVkaXRpbmdGaWVsZCA9IG51bGw7XG4gICAgICB0aGlzLnNhdmluZ0ZpZWxkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gTWV0aG9kIHRvIGJlIGNhbGxlZCBieSBwYXJlbnQgYWZ0ZXIgc2F2ZSBjb21wbGV0ZXNcbiAgY29tcGxldGVJbmxpbmVFZGl0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdGluZ0ZpZWxkID0gbnVsbDtcbiAgICB0aGlzLnNhdmluZ0ZpZWxkID0gZmFsc2U7XG4gIH1cblxuICBnZXRGaWVsZERpc3BsYXlWYWx1ZShmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmVudGl0eURhdGEpIHJldHVybiAnJztcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5hbGxGaWVsZHMuZmluZChmID0+IGYuZmllbGQgPT09IGZpZWxkTmFtZSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmVudGl0eURhdGFbZmllbGROYW1lXTtcblxuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcblxuICAgIC8vIEZvciBsb29rdXAgZmllbGRzLCByZXR1cm4gdGhlIGRpc3BsYXkgbmFtZVxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ2xvb2t1cCcgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5uYW1lKSB7XG4gICAgICByZXR1cm4gdmFsdWUubmFtZTtcbiAgICB9XG5cbiAgICAvLyBGb3IgbG9va3VwIGZpZWxkcyB3aXRoIG11bHRpcGxlIGRpc3BsYXkgZmllbGRzXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnbG9va3VwJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGZpZWxkLmxvb2t1cERpc3BsYXlGaWVsZHMpIHtcbiAgICAgIHJldHVybiBmaWVsZC5sb29rdXBEaXNwbGF5RmllbGRzXG4gICAgICAgIC5tYXAoZiA9PiB0aGlzLmdldE5lc3RlZFZhbHVlKHZhbHVlLCBmKSlcbiAgICAgICAgLmZpbHRlcih2ID0+IHYpXG4gICAgICAgIC5qb2luKCcgLSAnKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgZHJvcGRvd24vZW51bSBmaWVsZHMsIGZpbmQgdGhlIG1hdGNoaW5nIG9wdGlvbiBsYWJlbFxuICAgIGlmICgoZmllbGQ/LnR5cGUgPT09ICdkcm9wZG93bicgfHwgZmllbGQ/LnR5cGUgPT09ICdlbnVtJykgJiYgZmllbGQpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC5vcHRpb25zIHx8IGZpZWxkLmVudW1PcHRpb25zIHx8IFtdO1xuICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSBmaWVsZC5vcHRpb25WYWx1ZSB8fCAndmFsdWUnO1xuICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSBmaWVsZC5vcHRpb25MYWJlbCB8fCAnbGFiZWwnO1xuICAgICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdFZhbCA9IHR5cGVvZiBvcHQgPT09ICdvYmplY3QnID8gb3B0W29wdGlvblZhbHVlXSA6IG9wdDtcbiAgICAgICAgcmV0dXJuIG9wdFZhbCA9PT0gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIGlmIChtYXRjaGluZ09wdGlvbikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG1hdGNoaW5nT3B0aW9uID09PSAnb2JqZWN0JyA/IG1hdGNoaW5nT3B0aW9uW29wdGlvbkxhYmVsXSA6IG1hdGNoaW5nT3B0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvciBudW1iZXIgZmllbGRzLCBmb3JtYXQgYXBwcm9wcmlhdGVseVxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGZpZWxkLm51bWJlck1vZGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdChmaWVsZC5sb2NhbGUgfHwgJ3B0LUJSJywge1xuICAgICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgIGN1cnJlbmN5OiBmaWVsZC5jdXJyZW5jeSB8fCAnQlJMJ1xuICAgICAgICB9KS5mb3JtYXQodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdChmaWVsZC5sb2NhbGUgfHwgJ3B0LUJSJywge1xuICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IGZpZWxkLm1pbkZyYWN0aW9uRGlnaXRzIHx8IDAsXG4gICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogZmllbGQubWF4RnJhY3Rpb25EaWdpdHMgfHwgMlxuICAgICAgfSkuZm9ybWF0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgZGF0ZSBmaWVsZHMsIGZvcm1hdCBhcyBkYXRlXG4gICAgaWYgKGZpZWxkPy50eXBlID09PSAnZGF0ZScgJiYgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsZVNlcnZpY2UuZm9ybWF0RGF0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIHRleHQgZmllbGRzIHdpdGggZG9jdW1lbnQgbWFzaywgZm9ybWF0IHRoZSB2YWx1ZVxuICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3RleHQnICYmIGZpZWxkLm1hc2sgPT09ICdkb2N1bWVudCcgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGRlcGVuZHNPbiA9IGZpZWxkLm1hc2tEZXBlbmRzT24gfHwgJ3R5cGVQZXJzb24nO1xuICAgICAgY29uc3QgdHlwZVBlcnNvbiA9IHRoaXMuZW50aXR5RGF0YVtkZXBlbmRzT25dIHx8ICdKVVJJRElDQUxfUEVSU09OJztcbiAgICAgIHJldHVybiB0aGlzLm1hc2tTZXJ2aWNlLmFwcGx5RG9jdW1lbnRNYXNrKFN0cmluZyh2YWx1ZSksIHR5cGVQZXJzb24pO1xuICAgIH1cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd0ZXh0JyAmJiBmaWVsZC5tYXNrID09PSAnY3BmJyAmJiB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubWFza1NlcnZpY2UuYXBwbHlDcGZNYXNrKFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cbiAgICBpZiAoZmllbGQ/LnR5cGUgPT09ICd0ZXh0JyAmJiBmaWVsZC5tYXNrID09PSAnY25waicgJiYgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLm1hc2tTZXJ2aWNlLmFwcGx5Q25wak1hc2soU3RyaW5nKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbn1cbiIsIjwhLS0gTW9kbyBJbmxpbmUgKHBhZHLDo28pIC0tPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSW5saW5lTW9kZVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9ybUNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48IS0tIE1vZG8gRGlhbG9nIC0tPlxuPHAtZGlhbG9nXG4gICpuZ0lmPVwiaXNEaWFsb2dNb2RlXCJcbiAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgW2hlYWRlcl09XCJkaWFsb2dIZWFkZXIgfCB0cmFuc2xhdGVcIlxuICBbbW9kYWxdPVwidHJ1ZVwiXG4gIFtzdHlsZV09XCJ7IHdpZHRoOiBkaWFsb2dXaWR0aCB9XCJcbiAgW2RyYWdnYWJsZV09XCJkaWFsb2dEcmFnZ2FibGVcIlxuICBbcmVzaXphYmxlXT1cImRpYWxvZ1Jlc2l6YWJsZVwiXG4gIFttYXhpbWl6YWJsZV09XCJkaWFsb2dNYXhpbWl6YWJsZVwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cImRpYWxvZ0Nsb3NlT25Fc2NhcGVcIlxuICBbZGlzbWlzc2FibGVNYXNrXT1cImRpYWxvZ0Rpc21pc3NhYmxlTWFza1wiXG4gIChvbkhpZGUpPVwiY2xvc2UoKVwiPlxuICBcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm1Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gIFxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCIgKm5nSWY9XCJzaG93U3VibWl0QnV0dG9uIHx8IHNob3dDYW5jZWxCdXR0b25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWZvb3RlclwiPlxuICAgICAgPHAtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd0NhbmNlbEJ1dHRvblwiXG4gICAgICAgIFtsYWJlbF09XCJjYW5jZWxMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtpY29uXT1cImNhbmNlbEJ1dHRvbkljb25cIlxuICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUNhbmNlbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj5cbiAgICAgIDwvcC1idXR0b24+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93U3VibWl0QnV0dG9uXCJcbiAgICAgICAgW2xhYmVsXT1cInN1Ym1pdExhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2ljb25dPVwic3VibWl0QnV0dG9uSWNvblwiXG4gICAgICAgIChvbkNsaWNrKT1cImhhbmRsZVN1Ym1pdCgpXCJcbiAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIj5cbiAgICAgIDwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZGlhbG9nPlxuXG48IS0tIE1vZG8gRHJhd2VyIC0tPlxuPHAtZHJhd2VyXG4gICpuZ0lmPVwiaXNEcmF3ZXJNb2RlXCJcbiAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgW2hlYWRlcl09XCJkcmF3ZXJIZWFkZXIgfCB0cmFuc2xhdGVcIlxuICBbcG9zaXRpb25dPVwiZHJhd2VyUG9zaXRpb25cIlxuICBbc3R5bGVdPVwiZHJhd2VyU3R5bGVcIlxuICBbc2hvd0Nsb3NlSWNvbl09XCJkcmF3ZXJTaG93Q2xvc2VJY29uXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwiZHJhd2VyQ2xvc2VPbkVzY2FwZVwiXG4gIFttb2RhbF09XCJkcmF3ZXJEaXNtaXNzYWJsZVwiXG4gIChvbkhpZGUpPVwiY2xvc2UoKVwiPlxuICBcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvcm1Db250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gIFxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCIgKm5nSWY9XCJzaG93U3VibWl0QnV0dG9uIHx8IHNob3dDYW5jZWxCdXR0b25cIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWZvb3RlclwiPlxuICAgICAgPHAtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd0NhbmNlbEJ1dHRvblwiXG4gICAgICAgIFtsYWJlbF09XCJjYW5jZWxMYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtpY29uXT1cImNhbmNlbEJ1dHRvbkljb25cIlxuICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXG4gICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUNhbmNlbCgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIj5cbiAgICAgIDwvcC1idXR0b24+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93U3VibWl0QnV0dG9uXCJcbiAgICAgICAgW2xhYmVsXT1cInN1Ym1pdExhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2ljb25dPVwic3VibWl0QnV0dG9uSWNvblwiXG4gICAgICAgIChvbkNsaWNrKT1cImhhbmRsZVN1Ym1pdCgpXCJcbiAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIj5cbiAgICAgIDwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZHJhd2VyPlxuXG48IS0tIFRlbXBsYXRlIGRvIEZvcm11bMOhcmlvIChyZXV0aWxpesOhdmVsKSAtLT5cbjxuZy10ZW1wbGF0ZSAjZm9ybUNvbnRlbnQ+XG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZHluYW1pYy1mb3JtXCI+XG4gICAgXG4gICAgPCEtLSBGaWx0cm9zIEZpeG9zIChhcGVuYXMgbm8gbW9kbyBmaWx0ZXIpIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJtb2RlID09PSAnZmlsdGVyJyAmJiBoYXNGaXhlZEZpbHRlcnNcIiBjbGFzcz1cImZpeGVkLWZpbHRlcnMtc2VjdGlvblwiPlxuICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZml4ZWRGaWx0ZXJzXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIFtuZ0NsYXNzXT1cImdldEZpZWxkR3JpZENsYXNzKGZpZWxkKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ2FtcG9zIERpcmV0b3MgKHNlbSBzZcOnw6NvKSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaGFzRmllbGRzXCI+XG4gICAgICA8IS0tIE1vZG8gSW5saW5lIEVkaXQgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvcm1GaWVsZHNcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgY2xhc3M9XCJpbmxpbmUtZWRpdC1maWVsZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubGluZUVkaXRGaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTW9kbyBGb3JtIE5vcm1hbCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmb3JtRmllbGRzXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImlzRmllbGRWaXNpYmxlKGZpZWxkKVwiIFtuZ0NsYXNzXT1cImdldEZpZWxkR3JpZENsYXNzKGZpZWxkKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2XDp8O1ZXMgZGUgQ2FtcG9zIChtb2RvIGZvcm0pIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJoYXNTZWN0aW9uc1wiIGNsYXNzPVwic2VjdGlvbnMtY29udGFpbmVyXCI+XG4gICAgICA8cC1wYW5lbCBcbiAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgZm9ybVNlY3Rpb25zXCJcbiAgICAgICAgW3RvZ2dsZWFibGVdPVwic2VjdGlvbi50b2dnbGVhYmxlICE9PSBmYWxzZVwiXG4gICAgICAgIFtjb2xsYXBzZWRdPVwic2VjdGlvbi5jb2xsYXBzZWQgfHwgZmFsc2VcIlxuICAgICAgICBbc3R5bGVDbGFzc109XCInc2VjdGlvbi1wYW5lbCdcIj5cbiAgICAgICAgXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwic2VjdGlvbi5pY29uXCIgW2NsYXNzXT1cInNlY3Rpb24uaWNvbiArICcgc2VjdGlvbi1pY29uJ1wiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPnt7IHNlY3Rpb24udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSBNb2RvIElubGluZSBFZGl0IC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbmxpbmVFZGl0TW9kZVwiIGNsYXNzPVwiaW5saW5lLWVkaXQtZmllbGRzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBjbGFzcz1cImlubGluZS1lZGl0LWZpZWxkXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVFZGl0RmllbGRUZW1wbGF0ZTsgY29udGV4dDogeyBmaWVsZDogZmllbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gTW9kbyBGb3JtIE5vcm1hbCAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0lubGluZUVkaXRNb2RlXCIgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2Ygc2VjdGlvbi5maWVsZHNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ZpZWxkVmlzaWJsZShmaWVsZClcIiBbbmdDbGFzc109XCJnZXRGaWVsZEdyaWRDbGFzcyhmaWVsZClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvcC1wYW5lbD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2XDp8O1ZXMgZGUgRmlsdHJvcyAoYXBlbmFzIG5vIG1vZG8gZmlsdGVyKSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwibW9kZSA9PT0gJ2ZpbHRlcicgJiYgaGFzRmlsdGVyU2VjdGlvbnNcIiBjbGFzcz1cImZpbHRlci1zZWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgIDxwLXBhbmVsIFxuICAgICAgICAqbmdGb3I9XCJsZXQgc2VjdGlvbiBvZiBmaWx0ZXJTZWN0aW9uc1wiXG4gICAgICAgIFtoZWFkZXJdPVwic2VjdGlvbi50aXRsZVwiXG4gICAgICAgIFt0b2dnbGVhYmxlXT1cInRydWVcIlxuICAgICAgICBbY29sbGFwc2VkXT1cInRydWVcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHNlY3Rpb24uZmllbGRzXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNGaWVsZFZpc2libGUoZmllbGQpXCIgW25nQ2xhc3NdPVwiZ2V0RmllbGRHcmlkQ2xhc3MoZmllbGQpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmaWVsZFRlbXBsYXRlOyBjb250ZXh0OiB7IGZpZWxkOiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3AtcGFuZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEJvdMO1ZXMgaW5saW5lIChhcGVuYXMgcGFyYSBtb2RvIGlubGluZSkgLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzSW5saW5lTW9kZSAmJiAoc2hvd1N1Ym1pdEJ1dHRvbiB8fCBzaG93Q2FuY2VsQnV0dG9uKVwiIGNsYXNzPVwiZm9ybS1hY3Rpb25zXCI+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93Q2FuY2VsQnV0dG9uXCJcbiAgICAgICAgW2xhYmVsXT1cImNhbmNlbExhYmVsIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2ljb25dPVwiY2FuY2VsQnV0dG9uSWNvblwiXG4gICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlQ2FuY2VsKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiPlxuICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dTdWJtaXRCdXR0b25cIlxuICAgICAgICBbbGFiZWxdPVwic3VibWl0TGFiZWwgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbaWNvbl09XCJzdWJtaXRCdXR0b25JY29uXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiaGFuZGxlU3VibWl0KClcIlxuICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiPlxuICAgICAgPC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cblxuICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRlbXBsYXRlIGRlIENhbXBvIChyZXV0aWxpesOhdmVsKSAtLT5cbjxuZy10ZW1wbGF0ZSAjZmllbGRUZW1wbGF0ZSBsZXQtZmllbGQ9XCJmaWVsZFwiPlxuICA8IS0tIFRleHQgRmllbGQgLS0+XG4gIDxzaWEtZHluYW1pYy1maWVsZC10ZXh0XG4gICAgKm5nSWY9XCJmaWVsZC50eXBlID09PSAndGV4dCdcIlxuICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgW21vZGVdPVwiZmllbGRNb2RlXCI+XG4gIDwvc2lhLWR5bmFtaWMtZmllbGQtdGV4dD5cblxuICA8IS0tIFRleHRhcmVhIEZpZWxkIC0tPlxuICA8c2lhLWR5bmFtaWMtZmllbGQtdGV4dGFyZWFcbiAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICd0ZXh0YXJlYSdcIlxuICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgW21vZGVdPVwiZmllbGRNb2RlXCI+XG4gIDwvc2lhLWR5bmFtaWMtZmllbGQtdGV4dGFyZWE+XG5cbiAgPCEtLSBOdW1iZXIgRmllbGQgLS0+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1udW1iZXJcbiAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdudW1iZXInXCJcbiAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgIFtmb3JtXT1cImZvcm1cIlxuICAgIFttb2RlXT1cImZpZWxkTW9kZVwiPlxuICA8L3NpYS1keW5hbWljLWZpZWxkLW51bWJlcj5cblxuICA8IS0tIERhdGUgRmllbGQgLS0+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1kYXRlXG4gICAgKm5nSWY9XCJmaWVsZC50eXBlID09PSAnZGF0ZSdcIlxuICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgW21vZGVdPVwiZmllbGRNb2RlXCI+XG4gIDwvc2lhLWR5bmFtaWMtZmllbGQtZGF0ZT5cblxuICA8IS0tIERyb3Bkb3duL0VudW0gRmllbGQgLS0+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1kcm9wZG93blxuICAgICpuZ0lmPVwiZmllbGQudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBmaWVsZC50eXBlID09PSAnZW51bSdcIlxuICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgW2Zvcm1dPVwiZm9ybVwiXG4gICAgW21vZGVdPVwiZmllbGRNb2RlXCI+XG4gIDwvc2lhLWR5bmFtaWMtZmllbGQtZHJvcGRvd24+XG5cbiAgPCEtLSBMb29rdXAgRmllbGQgLS0+XG4gIDxzaWEtZHluYW1pYy1maWVsZC1sb29rdXBcbiAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09ICdsb29rdXAnXCJcbiAgICBbZmllbGRdPVwiZmllbGRcIlxuICAgIFtmb3JtXT1cImZvcm1cIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgW21vZGVdPVwiZmllbGRNb2RlXCI+XG4gIDwvc2lhLWR5bmFtaWMtZmllbGQtbG9va3VwPlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48IS0tIFRlbXBsYXRlIGRlIENhbXBvIElubGluZSBFZGl0IC0tPlxuPG5nLXRlbXBsYXRlICNpbmxpbmVFZGl0RmllbGRUZW1wbGF0ZSBsZXQtZmllbGQ9XCJmaWVsZFwiPlxuICA8ZGl2IGNsYXNzPVwiZWRpdC1pbmxpbmUtZmllbGRcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJmaWVsZC1sYWJlbFwiPnt7IGZpZWxkLmxhYmVsIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICBcbiAgICA8IS0tIERpc3BsYXkgTW9kZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQtZGlzcGxheVwiIFxuICAgICAgICAgKm5nSWY9XCIhaXNGaWVsZEVkaXRpbmcoZmllbGQuZmllbGQpXCIgXG4gICAgICAgICAoY2xpY2spPVwic3RhcnRFZGl0RmllbGQoZmllbGQuZmllbGQpXCJcbiAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJmaWVsZC5kaXNhYmxlZFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJkaXNwbGF5LXZhbHVlXCIgXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXBsYWNlaG9sZGVyXT1cImZpZWxkLnBsYWNlaG9sZGVyIHx8ICgnY3JteC5idXNpbmVzcy5ub3RfaW5mb3JtZWQnIHwgdHJhbnNsYXRlKVwiPlxuICAgICAgICB7eyBnZXRGaWVsZERpc3BsYXlWYWx1ZShmaWVsZC5maWVsZCkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxpIGNsYXNzPVwicGkgcGktcGVuY2lsIGVkaXQtaWNvblwiICpuZ0lmPVwiIWZpZWxkLmRpc2FibGVkXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDwhLS0gRWRpdCBNb2RlIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1lZGl0XCIgKm5nSWY9XCJpc0ZpZWxkRWRpdGluZyhmaWVsZC5maWVsZClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgZmllbGQ6IGZpZWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgXG4gICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImVkaXQtYWN0aW9uc1wiPlxuICAgICAgICA8cC1idXR0b24gXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgIGljb249XCJwaSBwaS1jaGVja1wiIFxuICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwic2F2ZUlubGluZUZpZWxkKGZpZWxkLmZpZWxkKVwiIFxuICAgICAgICAgIFtsb2FkaW5nXT1cInNhdmluZ0ZpZWxkXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5nZXQoZmllbGQuZmllbGQpPy5pbnZhbGlkXCI+XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgIDxwLWJ1dHRvbiBcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgXG4gICAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCIgXG4gICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIChvbkNsaWNrKT1cImNhbmNlbElubGluZUVkaXQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInNhdmluZ0ZpZWxkXCI+XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIFxuICAgICAgPCEtLSBFcnJvciBNZXNzYWdlIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldChmaWVsZC5maWVsZCk/LmludmFsaWQgJiYgZm9ybS5nZXQoZmllbGQuZmllbGQpPy50b3VjaGVkXCI+XG4gICAgICAgIDxzbWFsbCBjbGFzcz1cInAtZXJyb3JcIj5cbiAgICAgICAgICB7eyBmb3JtLmdldChmaWVsZC5maWVsZCk/LmVycm9ycz8uWydyZXF1aXJlZCddID8gKCdjcm14LmJ1c2luZXNzLnJlcXVpcmVkX2ZpZWxkJyB8IHRyYW5zbGF0ZSkgOiAnJyB9fVxuICAgICAgICA8L3NtYWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -103,30 +103,12 @@ export class EntityService {
103
103
  .pipe(catchError(this.handleError));
104
104
  }
105
105
  /**
106
- * Sanitiza uma entidade antes de enviar para a API.
107
- * Objetos aninhados com `id` são reduzidos a `{ id }` para evitar
108
- * problemas com referências circulares ($ref) e dados desnecessários.
106
+ * Realiza deep clone da entidade antes de enviar para a API.
107
+ * Quebra referências compartilhadas em memória para evitar que o
108
+ * JSON.stringify gere notação $ref em objetos duplicados.
109
109
  */
110
110
  sanitizeEntity(entity) {
111
- if (!entity || typeof entity !== 'object')
112
- return entity;
113
- const sanitized = {};
114
- for (const key of Object.keys(entity)) {
115
- const value = entity[key];
116
- if (value === null || value === undefined) {
117
- sanitized[key] = value;
118
- }
119
- else if (Array.isArray(value)) {
120
- sanitized[key] = value.map((item) => item && typeof item === 'object' && item.id ? { id: item.id } : item);
121
- }
122
- else if (typeof value === 'object' && value.id && key !== '_discriminator') {
123
- sanitized[key] = { id: value.id };
124
- }
125
- else {
126
- sanitized[key] = value;
127
- }
128
- }
129
- return sanitized;
111
+ return JSON.parse(JSON.stringify(entity));
130
112
  }
131
113
  /**
132
114
  * Create new entity
@@ -196,4 +178,4 @@ export class EntityService {
196
178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EntityService, decorators: [{
197
179
  type: Injectable
198
180
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined }] });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvc2VydmljZXMvZW50aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUF1Q2pELE1BQU0sT0FBZ0IsYUFBYTtJQU1yQjtJQUNBO0lBSkYsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUVsQyxZQUNZLElBQWdCLEVBQ2hCLGtCQUF1QztRQUR2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFFakQseURBQXlEO1FBQ3pELDZEQUE2RDtJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ08sa0JBQWtCLENBQUMsVUFBc0I7UUFDakQsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLFdBQVcsR0FBRyxFQUFFLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUM1RixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBRTlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENB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QUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsRUFBTztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDO2FBQzdDLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQ2YsVUFBVSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLEdBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO2FBQzNGLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQ3BCLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQzdCLENBQUM7SUFDTixDQUFDO3dHQXhObUIsYUFBYTs0R0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQURsQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBTb3J0TWV0YSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG9yZGVyOiBudW1iZXI7IC8vIDEgZm9yIGFzYywgLTEgZm9yIGRlc2Ncbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0UGFyYW1zIHtcbiAgcGFnZT86IG51bWJlcjtcbiAgc2l6ZT86IG51bWJlcjtcbiAgc29ydD86IFNvcnRNZXRhW107XG4gIGZpbHRlclF1ZXJ5Pzogc3RyaW5nO1xuICBkaXNwbGF5RmllbGRzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9keVBhcmFtcyB7XG4gIG9mZnNldD86IG51bWJlcjtcbiAgc2l6ZT86IG51bWJlcjtcbiAgb3JkZXJCeT86IHN0cmluZztcbiAgZmlsdGVyPzogc3RyaW5nO1xuICBkaXNwbGF5ZmllbGRzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUxpc3RSZXNwb25zZTxUPiB7XG4gIGNvbnRlbnRzOiBUW107XG4gIHRvdGFsRWxlbWVudHM6IG51bWJlcjtcbiAgdG90YWxQYWdlczogbnVtYmVyO1xuICBzaXplPzogbnVtYmVyO1xuICBudW1iZXI/OiBudW1iZXI7XG4gIGZpcnN0PzogYm9vbGVhbjtcbiAgbGFzdD86IGJvb2xlYW47XG59XG5cbi8vIEludGVyZmFjZSBwYXJhIG8gc2VydmnDp28gZGUgdHJhZHXDp8OjbyAoZHVjayB0eXBpbmcpXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uU2VydmljZSB7XG4gIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgcGFyYW1zPzogYW55KTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW50aXR5U2VydmljZTxUPiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBlbnRpdHlVcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGFjdGlvbnNVcmw6IHN0cmluZztcbiAgcHJvdGVjdGVkIHF1ZXJpZXNVcmw6IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCB0cmFuc2xhdGlvblNlcnZpY2U/OiBUcmFuc2xhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBxdWVyaWVzVXJsIGluIG5nT25Jbml0IG9yIGEgc2VwYXJhdGUgbWV0aG9kXG4gICAgLy8gc2luY2UgYWJzdHJhY3QgcHJvcGVydGllcyBjYW4ndCBiZSBhY2Nlc3NlZCBpbiBjb25zdHJ1Y3RvclxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHNlcnZpY2UgLSBjYWxsIHRoaXMgYWZ0ZXIgc2V0dGluZyBhY3Rpb25zVXJsXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZVNlcnZpY2UoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyaWVzVXJsID0gdGhpcy5hY3Rpb25zVXJsLnJlcGxhY2UoJ2FjdGlvbnMnLCAncXVlcmllcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgTGlzdFBhcmFtcyB0byBIdHRwUGFyYW1zIGZvciBHRVQgcmVxdWVzdHNcbiAgICovXG4gIHByb3RlY3RlZCBnZXRMaXN0UXVlcnlQYXJhbXMobGlzdFBhcmFtczogTGlzdFBhcmFtcyk6IEh0dHBQYXJhbXMge1xuICAgIGNvbnN0IHsgcGFnZSA9IDAsIHNpemUgPSAxMCwgc29ydCA9IFtdLCBmaWx0ZXJRdWVyeSA9ICcnLCBkaXNwbGF5RmllbGRzID0gW10gfSA9IGxpc3RQYXJhbXM7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnc2l6ZScsIFN0cmluZyhzaXplKSk7XG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnb2Zmc2V0JywgU3RyaW5nKHBhZ2UpKTtcbiAgICBcbiAgICBpZiAoc29ydCAmJiBzb3J0Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3JkZXJCeSA9IHNvcnRcbiAgICAgICAgLm1hcCgocykgPT4ge1xuICAgICAgICAgIGxldCBvcmRlciA9ICcnO1xuICAgICAgICAgIGlmIChzLm9yZGVyID09PSAxKSBvcmRlciA9ICcgYXNjJztcbiAgICAgICAgICBlbHNlIGlmIChzLm9yZGVyID09PSAtMSkgb3JkZXIgPSAnIGRlc2MnO1xuICAgICAgICAgIHJldHVybiBgJHtzLmZpZWxkfSR7b3JkZXJ9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdvcmRlcmJ5Jywgb3JkZXJCeSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlclF1ZXJ5KSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdmaWx0ZXInLCBmaWx0ZXJRdWVyeSk7XG4gICAgfVxuXG4gICAgaWYgKGRpc3BsYXlGaWVsZHMgJiYgZGlzcGxheUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ2Rpc3BsYXlmaWVsZHMnLCBkaXNwbGF5RmllbGRzLmpvaW4oJywnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IExpc3RQYXJhbXMgdG8gYm9keSBwYXJhbWV0ZXJzIGZvciBQT1NUIHJlcXVlc3RzXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Qm9keVBhcmFtcyhsaXN0UGFyYW1zOiBMaXN0UGFyYW1zKTogQm9keVBhcmFtcyB7XG4gICAgY29uc3QgeyBwYWdlID0gMCwgc2l6ZSA9IDEwLCBzb3J0ID0gW10sIGZpbHRlclF1ZXJ5ID0gJycsIGRpc3BsYXlGaWVsZHMgPSBbXSB9ID0gbGlzdFBhcmFtcztcbiAgICBjb25zdCBib2R5UGFyYW1zOiBCb2R5UGFyYW1zID0ge307XG5cbiAgICBib2R5UGFyYW1zLnNpemUgPSBzaXplO1xuICAgIGJvZHlQYXJhbXMub2Zmc2V0ID0gcGFnZTtcblxuICAgIGlmIChzb3J0ICYmIHNvcnQubGVuZ3RoKSB7XG4gICAgICBib2R5UGFyYW1zLm9yZGVyQnkgPSBzb3J0XG4gICAgICAgIC5tYXAoKHMpID0+IHtcbiAgICAgICAgICBsZXQgb3JkZXIgPSAnJztcbiAgICAgICAgICBpZiAocy5vcmRlciA9PT0gMSkgb3JkZXIgPSAnIGFzYyc7XG4gICAgICAgICAgZWxzZSBpZiAocy5vcmRlciA9PT0gLTEpIG9yZGVyID0gJyBkZXNjJztcbiAgICAgICAgICByZXR1cm4gYCR7cy5maWVsZH0ke29yZGVyfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJRdWVyeSkge1xuICAgICAgYm9keVBhcmFtcy5maWx0ZXIgPSBmaWx0ZXJRdWVyeTtcbiAgICB9XG5cbiAgICBpZiAoZGlzcGxheUZpZWxkcyAmJiBkaXNwbGF5RmllbGRzLmxlbmd0aCkge1xuICAgICAgYm9keVBhcmFtcy5kaXNwbGF5ZmllbGRzID0gZGlzcGxheUZpZWxkcy5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHlQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBlcnJvciBoYW5kbGVyXG4gICAqIE5vdGU6IFRoaXMganVzdCBsb2dzIHRoZSBlcnJvciBhbmQgcmUtdGhyb3dzIHRoZSBvcmlnaW5hbCBIdHRwRXJyb3JSZXNwb25zZVxuICAgKiBzbyB0aGF0IHRoZSBIVFRQIGludGVyY2VwdG9yIGNhbiBoYW5kbGUgaXQgcHJvcGVybHkgKHNob3cgdG9hc3QsIGV0Yy4pXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlRXJyb3IgPSAoZXJyb3I6IGFueSk6IE9ic2VydmFibGU8bmV2ZXI+ID0+IHtcbiAgICBjb25zb2xlLmVycm9yKCdFbnRpdHlTZXJ2aWNlIEVycm9yOicsIGVycm9yKTtcbiAgICAvLyBSZS10aHJvdyB0aGUgb3JpZ2luYWwgZXJyb3Igc28gdGhlIGludGVyY2VwdG9yIGNhbiBoYW5kbGUgaXRcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gIH07XG5cbiAgLyoqXG4gICAqIExpc3QgZW50aXRpZXMgd2l0aCBwYWdpbmF0aW9uLCBzb3J0aW5nLCBhbmQgZmlsdGVyaW5nXG4gICAqL1xuICBsaXN0KGxpc3RQYXJhbXM6IExpc3RQYXJhbXMgPSB7fSk6IE9ic2VydmFibGU8RW50aXR5TGlzdFJlc3BvbnNlPFQ+PiB7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRMaXN0UXVlcnlQYXJhbXMobGlzdFBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8RW50aXR5TGlzdFJlc3BvbnNlPFQ+Pih0aGlzLmVudGl0eVVybCwgeyBwYXJhbXMgfSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbnRpdHkgYnkgSURcbiAgICovXG4gIGdldChpZDogYW55KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4oYCR7dGhpcy5lbnRpdHlVcmx9LyR7aWR9YClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXphIHVtYSBlbnRpZGFkZSBhbnRlcyBkZSBlbnZpYXIgcGFyYSBhIEFQSS5cbiAgICogT2JqZXRvcyBhbmluaGFkb3MgY29tIGBpZGAgc8OjbyByZWR1emlkb3MgYSBgeyBpZCB9YCBwYXJhIGV2aXRhclxuICAgKiBwcm9ibGVtYXMgY29tIHJlZmVyw6puY2lhcyBjaXJjdWxhcmVzICgkcmVmKSBlIGRhZG9zIGRlc25lY2Vzc8Ohcmlvcy5cbiAgICovXG4gIHByb3RlY3RlZCBzYW5pdGl6ZUVudGl0eShlbnRpdHk6IGFueSk6IGFueSB7XG4gICAgaWYgKCFlbnRpdHkgfHwgdHlwZW9mIGVudGl0eSAhPT0gJ29iamVjdCcpIHJldHVybiBlbnRpdHk7XG5cbiAgICBjb25zdCBzYW5pdGl6ZWQ6IGFueSA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVudGl0eSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZW50aXR5W2tleV07XG4gICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBzYW5pdGl6ZWRba2V5XSA9IHZhbHVlLm1hcCgoaXRlbTogYW55KSA9PlxuICAgICAgICAgIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0uaWQgPyB7IGlkOiBpdGVtLmlkIH0gOiBpdGVtXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuaWQgJiYga2V5ICE9PSAnX2Rpc2NyaW1pbmF0b3InKSB7XG4gICAgICAgIHNhbml0aXplZFtrZXldID0geyBpZDogdmFsdWUuaWQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNhbml0aXplZFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBlbnRpdHlcbiAgICovXG4gIGluc2VydChlbnRpdHk6IFQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odGhpcy5lbnRpdHlVcmwsIHRoaXMuc2FuaXRpemVFbnRpdHkoZW50aXR5KSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBlbnRpdHlcbiAgICovXG4gIHVwZGF0ZShpZDogYW55LCBlbnRpdHk6IFQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxUPihgJHt0aGlzLmVudGl0eVVybH0vJHtpZH1gLCB0aGlzLnNhbml0aXplRW50aXR5KGVudGl0eSkpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgZW50aXR5IGJ5IElEXG4gICAqL1xuICBkZWxldGUoaWQ6IGFueSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGAke3RoaXMuZW50aXR5VXJsfS8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB1bmRlZmluZWQpLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgY3VzdG9tIGZpbHRlciBhY3Rpb25cbiAgICovXG4gIGxpc3RDdXN0b21GaWx0ZXIobGlzdFBhcmFtczogTGlzdFBhcmFtcywgYWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEVudGl0eUxpc3RSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGJvZHlQYXJhbXMgPSB0aGlzLmdldEJvZHlQYXJhbXMobGlzdFBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEVudGl0eUxpc3RSZXNwb25zZTxUPj4oYCR7dGhpcy5hY3Rpb25zVXJsfS8ke2FjdGlvbn1gLCBib2R5UGFyYW1zKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBjdXN0b20gcXVlcnlcbiAgICovXG4gIGV4ZWN1dGVRdWVyeShxdWVyeU5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5xdWVyaWVzVXJsfS8ke3F1ZXJ5TmFtZX1gLCBwYXJhbXMpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGN1c3RvbSBhY3Rpb25cbiAgICovXG4gIGV4ZWN1dGVBY3Rpb24oYWN0aW9uTmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmFjdGlvbnNVcmx9LyR7YWN0aW9uTmFtZX1gLCBwYXJhbXMpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBlbnRpdHkgZXhpc3RzIGJ5IElEXG4gICAqL1xuICBleGlzdHMoaWQ6IGFueSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuaGVhZChgJHt0aGlzLmVudGl0eVVybH0vJHtpZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBbZmFsc2VdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgZGVsZXRlIGVudGl0aWVzXG4gICAqL1xuICBidWxrRGVsZXRlKGlkczogYW55W10pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4oYCR7dGhpcy5hY3Rpb25zVXJsfS9idWxrRGVsZXRlYCwgeyBpZHMgfSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHVuZGVmaW5lZCksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzLWFpL3NyYy9saWIvc2VydmljZXMvZW50aXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUF1Q2pELE1BQU0sT0FBZ0IsYUFBYTtJQU1yQjtJQUNBO0lBSkYsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUVsQyxZQUNZLElBQWdCLEVBQ2hCLGtCQUF1QztRQUR2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFFakQseURBQXlEO1FBQ3pELDZEQUE2RDtJQUMvRCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ08sa0JBQWtCLENBQUMsVUFBc0I7UUFDakQsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLFdBQVcsR0FBRyxFQUFFLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQztRQUM1RixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBRTlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENB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SSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxFQUFFLEVBQUUsTUFBTSxDQUFDO2FBQ25FLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEVBQU87UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsQ0FBQzthQUM3QyxJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUNmLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxHQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQzthQUMzRixJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUNwQixVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUM3QixDQUFDO0lBQ04sQ0FBQzt3R0F4TW1CLGFBQWE7NEdBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydE1ldGEge1xuICBmaWVsZDogc3RyaW5nO1xuICBvcmRlcjogbnVtYmVyOyAvLyAxIGZvciBhc2MsIC0xIGZvciBkZXNjXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFBhcmFtcyB7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHNpemU/OiBudW1iZXI7XG4gIHNvcnQ/OiBTb3J0TWV0YVtdO1xuICBmaWx0ZXJRdWVyeT86IHN0cmluZztcbiAgZGlzcGxheUZpZWxkcz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJvZHlQYXJhbXMge1xuICBvZmZzZXQ/OiBudW1iZXI7XG4gIHNpemU/OiBudW1iZXI7XG4gIG9yZGVyQnk/OiBzdHJpbmc7XG4gIGZpbHRlcj86IHN0cmluZztcbiAgZGlzcGxheWZpZWxkcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlMaXN0UmVzcG9uc2U8VD4ge1xuICBjb250ZW50czogVFtdO1xuICB0b3RhbEVsZW1lbnRzOiBudW1iZXI7XG4gIHRvdGFsUGFnZXM6IG51bWJlcjtcbiAgc2l6ZT86IG51bWJlcjtcbiAgbnVtYmVyPzogbnVtYmVyO1xuICBmaXJzdD86IGJvb2xlYW47XG4gIGxhc3Q/OiBib29sZWFuO1xufVxuXG4vLyBJbnRlcmZhY2UgcGFyYSBvIHNlcnZpw6dvIGRlIHRyYWR1w6fDo28gKGR1Y2sgdHlwaW5nKVxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGlvblNlcnZpY2Uge1xuICB0cmFuc2xhdGUoa2V5OiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IHN0cmluZztcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eVNlcnZpY2U8VD4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZW50aXR5VXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhY3Rpb25zVXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBxdWVyaWVzVXJsOiBzdHJpbmcgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgdHJhbnNsYXRpb25TZXJ2aWNlPzogVHJhbnNsYXRpb25TZXJ2aWNlXG4gICkge1xuICAgIC8vIEluaXRpYWxpemUgcXVlcmllc1VybCBpbiBuZ09uSW5pdCBvciBhIHNlcGFyYXRlIG1ldGhvZFxuICAgIC8vIHNpbmNlIGFic3RyYWN0IHByb3BlcnRpZXMgY2FuJ3QgYmUgYWNjZXNzZWQgaW4gY29uc3RydWN0b3JcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBzZXJ2aWNlIC0gY2FsbCB0aGlzIGFmdGVyIHNldHRpbmcgYWN0aW9uc1VybFxuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVTZXJ2aWNlKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcmllc1VybCA9IHRoaXMuYWN0aW9uc1VybC5yZXBsYWNlKCdhY3Rpb25zJywgJ3F1ZXJpZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IExpc3RQYXJhbXMgdG8gSHR0cFBhcmFtcyBmb3IgR0VUIHJlcXVlc3RzXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0TGlzdFF1ZXJ5UGFyYW1zKGxpc3RQYXJhbXM6IExpc3RQYXJhbXMpOiBIdHRwUGFyYW1zIHtcbiAgICBjb25zdCB7IHBhZ2UgPSAwLCBzaXplID0gMTAsIHNvcnQgPSBbXSwgZmlsdGVyUXVlcnkgPSAnJywgZGlzcGxheUZpZWxkcyA9IFtdIH0gPSBsaXN0UGFyYW1zO1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIFxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NpemUnLCBTdHJpbmcoc2l6ZSkpO1xuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ29mZnNldCcsIFN0cmluZyhwYWdlKSk7XG4gICAgXG4gICAgaWYgKHNvcnQgJiYgc29ydC5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG9yZGVyQnkgPSBzb3J0XG4gICAgICAgIC5tYXAoKHMpID0+IHtcbiAgICAgICAgICBsZXQgb3JkZXIgPSAnJztcbiAgICAgICAgICBpZiAocy5vcmRlciA9PT0gMSkgb3JkZXIgPSAnIGFzYyc7XG4gICAgICAgICAgZWxzZSBpZiAocy5vcmRlciA9PT0gLTEpIG9yZGVyID0gJyBkZXNjJztcbiAgICAgICAgICByZXR1cm4gYCR7cy5maWVsZH0ke29yZGVyfWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcsICcpO1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnb3JkZXJieScsIG9yZGVyQnkpO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJRdWVyeSkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnZmlsdGVyJywgZmlsdGVyUXVlcnkpO1xuICAgIH1cblxuICAgIGlmIChkaXNwbGF5RmllbGRzICYmIGRpc3BsYXlGaWVsZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdkaXNwbGF5ZmllbGRzJywgZGlzcGxheUZpZWxkcy5qb2luKCcsJykpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBMaXN0UGFyYW1zIHRvIGJvZHkgcGFyYW1ldGVycyBmb3IgUE9TVCByZXF1ZXN0c1xuICAgKi9cbiAgcHJvdGVjdGVkIGdldEJvZHlQYXJhbXMobGlzdFBhcmFtczogTGlzdFBhcmFtcyk6IEJvZHlQYXJhbXMge1xuICAgIGNvbnN0IHsgcGFnZSA9IDAsIHNpemUgPSAxMCwgc29ydCA9IFtdLCBmaWx0ZXJRdWVyeSA9ICcnLCBkaXNwbGF5RmllbGRzID0gW10gfSA9IGxpc3RQYXJhbXM7XG4gICAgY29uc3QgYm9keVBhcmFtczogQm9keVBhcmFtcyA9IHt9O1xuXG4gICAgYm9keVBhcmFtcy5zaXplID0gc2l6ZTtcbiAgICBib2R5UGFyYW1zLm9mZnNldCA9IHBhZ2U7XG5cbiAgICBpZiAoc29ydCAmJiBzb3J0Lmxlbmd0aCkge1xuICAgICAgYm9keVBhcmFtcy5vcmRlckJ5ID0gc29ydFxuICAgICAgICAubWFwKChzKSA9PiB7XG4gICAgICAgICAgbGV0IG9yZGVyID0gJyc7XG4gICAgICAgICAgaWYgKHMub3JkZXIgPT09IDEpIG9yZGVyID0gJyBhc2MnO1xuICAgICAgICAgIGVsc2UgaWYgKHMub3JkZXIgPT09IC0xKSBvcmRlciA9ICcgZGVzYyc7XG4gICAgICAgICAgcmV0dXJuIGAke3MuZmllbGR9JHtvcmRlcn1gO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVyUXVlcnkpIHtcbiAgICAgIGJvZHlQYXJhbXMuZmlsdGVyID0gZmlsdGVyUXVlcnk7XG4gICAgfVxuXG4gICAgaWYgKGRpc3BsYXlGaWVsZHMgJiYgZGlzcGxheUZpZWxkcy5sZW5ndGgpIHtcbiAgICAgIGJvZHlQYXJhbXMuZGlzcGxheWZpZWxkcyA9IGRpc3BsYXlGaWVsZHMuam9pbignLCcpO1xuICAgIH1cblxuICAgIHJldHVybiBib2R5UGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgZXJyb3IgaGFuZGxlclxuICAgKiBOb3RlOiBUaGlzIGp1c3QgbG9ncyB0aGUgZXJyb3IgYW5kIHJlLXRocm93cyB0aGUgb3JpZ2luYWwgSHR0cEVycm9yUmVzcG9uc2VcbiAgICogc28gdGhhdCB0aGUgSFRUUCBpbnRlcmNlcHRvciBjYW4gaGFuZGxlIGl0IHByb3Blcmx5IChzaG93IHRvYXN0LCBldGMuKVxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZUVycm9yID0gKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPG5ldmVyPiA9PiB7XG4gICAgY29uc29sZS5lcnJvcignRW50aXR5U2VydmljZSBFcnJvcjonLCBlcnJvcik7XG4gICAgLy8gUmUtdGhyb3cgdGhlIG9yaWdpbmFsIGVycm9yIHNvIHRoZSBpbnRlcmNlcHRvciBjYW4gaGFuZGxlIGl0XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBMaXN0IGVudGl0aWVzIHdpdGggcGFnaW5hdGlvbiwgc29ydGluZywgYW5kIGZpbHRlcmluZ1xuICAgKi9cbiAgbGlzdChsaXN0UGFyYW1zOiBMaXN0UGFyYW1zID0ge30pOiBPYnNlcnZhYmxlPEVudGl0eUxpc3RSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuZ2V0TGlzdFF1ZXJ5UGFyYW1zKGxpc3RQYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEVudGl0eUxpc3RSZXNwb25zZTxUPj4odGhpcy5lbnRpdHlVcmwsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZW50aXR5IGJ5IElEXG4gICAqL1xuICBnZXQoaWQ6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KGAke3RoaXMuZW50aXR5VXJsfS8ke2lkfWApXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFsaXphIGRlZXAgY2xvbmUgZGEgZW50aWRhZGUgYW50ZXMgZGUgZW52aWFyIHBhcmEgYSBBUEkuXG4gICAqIFF1ZWJyYSByZWZlcsOqbmNpYXMgY29tcGFydGlsaGFkYXMgZW0gbWVtw7NyaWEgcGFyYSBldml0YXIgcXVlIG9cbiAgICogSlNPTi5zdHJpbmdpZnkgZ2VyZSBub3Rhw6fDo28gJHJlZiBlbSBvYmpldG9zIGR1cGxpY2Fkb3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2FuaXRpemVFbnRpdHkoZW50aXR5OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGVudGl0eSkpO1xuICB9XG5cblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBlbnRpdHlcbiAgICovXG4gIGluc2VydChlbnRpdHk6IFQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odGhpcy5lbnRpdHlVcmwsIHRoaXMuc2FuaXRpemVFbnRpdHkoZW50aXR5KSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBleGlzdGluZyBlbnRpdHlcbiAgICovXG4gIHVwZGF0ZShpZDogYW55LCBlbnRpdHk6IFQpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxUPihgJHt0aGlzLmVudGl0eVVybH0vJHtpZH1gLCB0aGlzLnNhbml0aXplRW50aXR5KGVudGl0eSkpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgZW50aXR5IGJ5IElEXG4gICAqL1xuICBkZWxldGUoaWQ6IGFueSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KGAke3RoaXMuZW50aXR5VXJsfS8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB1bmRlZmluZWQpLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgY3VzdG9tIGZpbHRlciBhY3Rpb25cbiAgICovXG4gIGxpc3RDdXN0b21GaWx0ZXIobGlzdFBhcmFtczogTGlzdFBhcmFtcywgYWN0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEVudGl0eUxpc3RSZXNwb25zZTxUPj4ge1xuICAgIGNvbnN0IGJvZHlQYXJhbXMgPSB0aGlzLmdldEJvZHlQYXJhbXMobGlzdFBhcmFtcyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEVudGl0eUxpc3RSZXNwb25zZTxUPj4oYCR7dGhpcy5hY3Rpb25zVXJsfS8ke2FjdGlvbn1gLCBib2R5UGFyYW1zKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBjdXN0b20gcXVlcnlcbiAgICovXG4gIGV4ZWN1dGVRdWVyeShxdWVyeU5hbWU6IHN0cmluZywgcGFyYW1zOiBhbnkgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5xdWVyaWVzVXJsfS8ke3F1ZXJ5TmFtZX1gLCBwYXJhbXMpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGN1c3RvbSBhY3Rpb25cbiAgICovXG4gIGV4ZWN1dGVBY3Rpb24oYWN0aW9uTmFtZTogc3RyaW5nLCBwYXJhbXM6IGFueSA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmFjdGlvbnNVcmx9LyR7YWN0aW9uTmFtZX1gLCBwYXJhbXMpXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBlbnRpdHkgZXhpc3RzIGJ5IElEXG4gICAqL1xuICBleGlzdHMoaWQ6IGFueSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuaGVhZChgJHt0aGlzLmVudGl0eVVybH0vJHtpZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIHJldHVybiBbZmFsc2VdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgZGVsZXRlIGVudGl0aWVzXG4gICAqL1xuICBidWxrRGVsZXRlKGlkczogYW55W10pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4oYCR7dGhpcy5hY3Rpb25zVXJsfS9idWxrRGVsZXRlYCwgeyBpZHMgfSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHVuZGVmaW5lZCksXG4gICAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcbiAgICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -171,30 +171,12 @@ class EntityService {
171
171
  .pipe(catchError(this.handleError));
172
172
  }
173
173
  /**
174
- * Sanitiza uma entidade antes de enviar para a API.
175
- * Objetos aninhados com `id` são reduzidos a `{ id }` para evitar
176
- * problemas com referências circulares ($ref) e dados desnecessários.
174
+ * Realiza deep clone da entidade antes de enviar para a API.
175
+ * Quebra referências compartilhadas em memória para evitar que o
176
+ * JSON.stringify gere notação $ref em objetos duplicados.
177
177
  */
178
178
  sanitizeEntity(entity) {
179
- if (!entity || typeof entity !== 'object')
180
- return entity;
181
- const sanitized = {};
182
- for (const key of Object.keys(entity)) {
183
- const value = entity[key];
184
- if (value === null || value === undefined) {
185
- sanitized[key] = value;
186
- }
187
- else if (Array.isArray(value)) {
188
- sanitized[key] = value.map((item) => item && typeof item === 'object' && item.id ? { id: item.id } : item);
189
- }
190
- else if (typeof value === 'object' && value.id && key !== '_discriminator') {
191
- sanitized[key] = { id: value.id };
192
- }
193
- else {
194
- sanitized[key] = value;
195
- }
196
- }
197
- return sanitized;
179
+ return JSON.parse(JSON.stringify(entity));
198
180
  }
199
181
  /**
200
182
  * Create new entity
@@ -4576,7 +4558,9 @@ class DynamicFormComponent {
4576
4558
  this.form.markAllAsTouched();
4577
4559
  return;
4578
4560
  }
4579
- this.loading = true;
4561
+ if (this.mode !== 'filter') {
4562
+ this.loading = true;
4563
+ }
4580
4564
  const formValue = this.mode === 'filter'
4581
4565
  ? this.processFilterValue(this.form.value)
4582
4566
  : this.processFormValue(this.form.value);