@alfresco/adf-content-services 8.1.0-15993930410 → 8.1.0-16024893197

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.
@@ -449,6 +449,7 @@ export class DocumentListComponent extends DataTableSchema {
449
449
  if (typeof node === 'string') {
450
450
  this.resetNewFolderPagination();
451
451
  this.currentFolderId = node;
452
+ this.filterValue = {};
452
453
  this.folderChange.emit(new NodeEntryEvent({ id: node }));
453
454
  this.reload();
454
455
  return true;
@@ -457,6 +458,7 @@ export class DocumentListComponent extends DataTableSchema {
457
458
  if (this.canNavigateFolder(node)) {
458
459
  this.resetNewFolderPagination();
459
460
  this.currentFolderId = this.getNodeFolderDestinationId(node);
461
+ this.filterValue = {};
460
462
  this.folderChange.emit(new NodeEntryEvent({ id: this.currentFolderId }));
461
463
  this.reload();
462
464
  return true;
@@ -960,4 +962,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
960
962
  type: HostListener,
961
963
  args: ['contextmenu', ['$event']]
962
964
  }] } });
963
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2RvY3VtZW50LWxpc3QvY29tcG9uZW50cy9kb2N1bWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvZG9jdW1lbnQtbGlzdC9jb21wb25lbnRzL2RvY3VtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsMENBQTBDO0FBQzFDLHlEQUF5RDtBQUV6RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMscUNBQXFDLEVBQ3JDLG1DQUFtQyxFQUduQyx1QkFBdUIsRUFHdkIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQiwrQkFBK0IsRUFDL0Isa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFJN0IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3ZCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFtQixVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JGLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFB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c0JBRGIsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGdCQUFnQjtzQkFEZixLQUFLO2dCQUtGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFPRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBT0YsZUFBZTtzQkFEbEIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTix3QkFBd0I7c0JBRHZCLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQVNQLE9BQU87c0JBRE4sTUFBTTtnQkFLUCxLQUFLO3NCQURKLE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFLUCxlQUFlO3NCQURkLE1BQU07Z0JBS1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQUtQLHdCQUF3QjtzQkFEdkIsTUFBTTtnQkFLUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBS1AseUJBQXlCO3NCQUR4QixNQUFNO2dCQUlQLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQTBSeEMsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgcnhqcy9uby1zdWJqZWN0LXZhbHVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cblxuaW1wb3J0IHtcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIENvbHVtbnNTZWxlY3RvckNvbXBvbmVudCxcbiAgICBDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBDdXN0b21Mb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEN1c3RvbU5vUGVybWlzc2lvblRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIERhdGFDZWxsRXZlbnQsXG4gICAgRGF0YUNvbHVtbixcbiAgICBEYXRhQ29sdW1uTGlzdENvbXBvbmVudCxcbiAgICBEYXRhUm93LFxuICAgIERhdGFSb3dBY3Rpb25FdmVudCxcbiAgICBEYXRhU29ydGluZyxcbiAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgRGF0YVRhYmxlU2NoZW1hLFxuICAgIERhdGFUYWJsZVNlcnZpY2UsXG4gICAgRW1wdHlMaXN0Q29tcG9uZW50LFxuICAgIExvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTWFpbk1lbnVEYXRhVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOb0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOb1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBQYWdpbmF0ZWRDb21wb25lbnQsXG4gICAgUGFnaW5hdGlvbk1vZGVsLFxuICAgIFJlcXVlc3RQYWdpbmF0aW9uTW9kZWwsXG4gICAgU2hvd0hlYWRlck1vZGUsXG4gICAgVGh1bWJuYWlsU2VydmljZSxcbiAgICBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIFVzZXJQcmVmZXJlbmNlVmFsdWVzXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBOb2RlLCBOb2RlRW50cnksIE5vZGVQYWdpbmcsIE5vZGVzQXBpLCBQYWdpbmF0aW9uIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UsIE5vZGVzQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXJTZWFyY2ggfSBmcm9tICcuLi8uLi9zZWFyY2gnO1xuaW1wb3J0IHsgUm93RmlsdGVyIH0gZnJvbSAnLi4vZGF0YS9yb3ctZmlsdGVyLm1vZGVsJztcbmltcG9ydCB7IFNoYXJlRGF0YVJvdyB9IGZyb20gJy4uL2RhdGEvc2hhcmUtZGF0YS1yb3cubW9kZWwnO1xuaW1wb3J0IHsgU2hhcmVEYXRhVGFibGVBZGFwdGVyIH0gZnJvbSAnLi4vZGF0YS9zaGFyZS1kYXRhdGFibGUtYWRhcHRlcic7XG5pbXBvcnQgeyBDb250ZW50QWN0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvY29udGVudC1hY3Rpb24ubW9kZWwnO1xuaW1wb3J0IHsgRG9jdW1lbnRMb2FkZXJOb2RlIH0gZnJvbSAnLi4vbW9kZWxzL2RvY3VtZW50LWZvbGRlci5tb2RlbCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU3R5bGVNb2RlbCB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9ucy1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBwcmVzZXRzRGVmYXVsdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldC5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudExpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZG9jdW1lbnQtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2tTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jay5zZXJ2aWNlJztcbmltcG9ydCB7IEFERl9ET0NVTUVOVF9QQVJFTlRfQ09NUE9ORU5UIH0gZnJvbSAnLi9kb2N1bWVudC1saXN0LnRva2VuJztcbmltcG9ydCB7IEZpbGVBdXRvRG93bmxvYWRDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUtYXV0by1kb3dubG9hZC9maWxlLWF1dG8tZG93bmxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IE5vZGVFbnRpdHlFdmVudCwgTm9kZUVudHJ5RXZlbnQgfSBmcm9tICcuL25vZGUuZXZlbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZpbHRlckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZmlsdGVyLWhlYWRlci9maWx0ZXItaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IEFsZnJlc2NvQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FsZnJlc2NvLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuY29uc3QgQllURVNfVE9fTUJfQ09OVkVSU0lPTl9WQUxVRSA9IDEwNDg1NzY7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWRvY3VtZW50LWxpc3QnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgRmlsdGVySGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBOb0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgRW1wdHlMaXN0Q29tcG9uZW50LFxuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBOb1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBNYWluTWVudURhdGFUYWJsZVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBDb2x1bW5zU2VsZWN0b3JDb21wb25lbnRcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb2N1bWVudC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kb2N1bWVudC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFERl9ET0NVTUVOVF9QQVJFTlRfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IERvY3VtZW50TGlzdENvbXBvbmVudFxuICAgICAgICB9LFxuICAgICAgICBEYXRhVGFibGVTZXJ2aWNlXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtZG9jdW1lbnQtbGlzdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudExpc3RDb21wb25lbnQgZXh0ZW5kcyBEYXRhVGFibGVTY2hlbWEgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgUGFnaW5hdGVkQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgU0lOR0xFX0NMSUNLX05BVklHQVRJT046IHN0cmluZyA9ICdjbGljayc7XG4gICAgc3RhdGljIERPVUJMRV9DTElDS19OQVZJR0FUSU9OOiBzdHJpbmcgPSAnZGJsY2xpY2snO1xuXG4gICAgREVGQVVMVF9QQUdJTkFUSU9OOiBQYWdpbmF0aW9uID0gbmV3IFBhZ2luYXRpb24oe1xuICAgICAgICBoYXNNb3JlSXRlbXM6IGZhbHNlLFxuICAgICAgICBza2lwQ291bnQ6IDAsXG4gICAgICAgIG1heEl0ZW1zOiAyNSxcbiAgICAgICAgdG90YWxJdGVtczogMFxuICAgIH0pO1xuXG4gICAgREVGQVVMVF9TT1JUSU5HOiBEYXRhU29ydGluZ1tdID0gW25ldyBEYXRhU29ydGluZygnbmFtZScsICdhc2MnKSwgbmV3IERhdGFTb3J0aW5nKCdpc0ZvbGRlcicsICdkZXNjJyldO1xuXG4gICAgQENvbnRlbnRDaGlsZChEYXRhQ29sdW1uTGlzdENvbXBvbmVudClcbiAgICBjb2x1bW5MaXN0OiBEYXRhQ29sdW1uTGlzdENvbXBvbmVudDtcblxuICAgIEBDb250ZW50Q2hpbGQoQ3VzdG9tTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBjdXN0b21Mb2FkaW5nQ29udGVudDogQ3VzdG9tTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoQ3VzdG9tTm9QZXJtaXNzaW9uVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tTm9QZXJtaXNzaW9uc1RlbXBsYXRlOiBDdXN0b21Ob1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tTm9Db250ZW50VGVtcGxhdGU6IEN1c3RvbUVtcHR5Q29udGVudFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqIEluY2x1ZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSBpbiB0aGUgc2VydmVyIHJlcXVlc3QuIEZvciBleGFtcGxlOiBhc3NvY2lhdGlvbiwgaXNMaW5rLCBpc0xvY2tlZCBhbmQgb3RoZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jbHVkZUZpZWxkczogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIHRoZSBOb2RlIGxpc3QgdXNpbmcgdGhlICp3aGVyZSogY29uZGl0aW9uIG9mIHRoZSBSRVNUIEFQSVxuICAgICAqIChmb3IgZXhhbXBsZSwgaXNGb2xkZXI9dHJ1ZSkuIFNlZSB0aGUgUkVTVCBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHdoZXJlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmUgYSBzZXQgb2YgQ1NTIHN0eWxlcyB0byBhcHBseSBkZXBlbmRpbmcgb24gdGhlIHBlcm1pc3Npb25cbiAgICAgKiBvZiB0aGUgdXNlciBvbiB0aGF0IG5vZGUuIFNlZSB0aGUgUGVybWlzc2lvbiBTdHlsZSBtb2RlbFxuICAgICAqIHBhZ2UgZm9yIGZ1cnRoZXIgZGV0YWlscyBhbmQgZXhhbXBsZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwZXJtaXNzaW9uc1N0eWxlOiBQZXJtaXNzaW9uU3R5bGVNb2RlbFtdID0gW107XG5cbiAgICAvKiogVGhlIGRlZmF1bHQgcm91dGUgZm9yIGFsbCB0aGUgbG9jYXRpb24tYmFzZWQgY29sdW1ucyAoaWYgZGVjbGFyZWQpLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9jYXRpb25Gb3JtYXQ6IHN0cmluZyA9ICcvJztcblxuICAgIC8qKiBUb2dnbGVzIG5hdmlnYXRpb24gdG8gZm9sZGVyIGNvbnRlbnQgb3IgZmlsZSBwcmV2aWV3ICovXG4gICAgQElucHV0KClcbiAgICBuYXZpZ2F0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgaGVhZGVyICovXG4gICAgQElucHV0KClcbiAgICBzaG93SGVhZGVyID0gU2hvd0hlYWRlck1vZGUuRGF0YTtcblxuICAgIC8qKlxuICAgICAqIFVzZXIgaW50ZXJhY3Rpb24gZm9yIGZvbGRlciBuYXZpZ2F0aW9uIG9yIGZpbGUgcHJldmlldy5cbiAgICAgKiBWYWxpZCB2YWx1ZXMgYXJlIFwiY2xpY2tcIiBhbmQgXCJkYmxjbGlja1wiLiBEZWZhdWx0IHZhbHVlOiBcImRibGNsaWNrXCJcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRpb25Nb2RlOiBzdHJpbmcgPSBEb2N1bWVudExpc3RDb21wb25lbnQuRE9VQkxFX0NMSUNLX05BVklHQVRJT047IC8vIGNsaWNrfGRibGNsaWNrXG5cbiAgICAvKiogU2hvdyBkb2N1bWVudCB0aHVtYm5haWxzIHJhdGhlciB0aGFuIGljb25zICovXG4gICAgQElucHV0KClcbiAgICB0aHVtYm5haWxzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBSb3cgc2VsZWN0aW9uIG1vZGUuIENhbiBiZSBudWxsLCBgc2luZ2xlYCBvciBgbXVsdGlwbGVgLiBGb3IgYG11bHRpcGxlYCBtb2RlLFxuICAgICAqIHlvdSBjYW4gdXNlIENtZCAobWFjT1MpIG9yIEN0cmwgKFdpbikgbW9kaWZpZXIga2V5IHRvIHRvZ2dsZSBzZWxlY3Rpb24gZm9yIG11bHRpcGxlIHJvd3MuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgPSAnc2luZ2xlJzsgLy8gbnVsbHxzaW5nbGV8bXVsdGlwbGVcblxuICAgIC8qKiBUb2dnbGVzIG11bHRpc2VsZWN0IG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG11bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyBjb250ZW50IGFjdGlvbnMgZm9yIGVhY2ggcm93ICovXG4gICAgQElucHV0KClcbiAgICBjb250ZW50QWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFBvc2l0aW9uIG9mIHRoZSBjb250ZW50IGFjdGlvbnMgZHJvcGRvd24gbWVudS4gQ2FuIGJlIHNldCB0byBcImxlZnRcIiBvciBcInJpZ2h0XCIuICovXG4gICAgQElucHV0KClcbiAgICBjb250ZW50QWN0aW9uc1Bvc2l0aW9uOiBzdHJpbmcgPSAncmlnaHQnOyAvLyBsZWZ0fHJpZ2h0XG5cbiAgICAvKiogVG9nZ2xlcyBjb250ZXh0IG1lbnVzIGZvciBlYWNoIHJvdyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29udGV4dE1lbnVBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogQ3VzdG9tIGltYWdlIGZvciBlbXB0eSBmb2xkZXIuIERlZmF1bHQgdmFsdWU6ICcuL2Fzc2V0cy9pbWFnZXMvZW1wdHlfZG9jX2xpYi5zdmcnICovXG4gICAgQElucHV0KClcbiAgICBlbXB0eUZvbGRlckltYWdlVXJsOiBzdHJpbmcgPSAnLi9hc3NldHMvaW1hZ2VzL2VtcHR5X2RvY19saWIuc3ZnJztcblxuICAgIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSwgdGhpcyBlbmFibGVzIHlvdSB0byBkcm9wIGZpbGVzIGRpcmVjdGx5IGludG8gc3ViZm9sZGVycyBzaG93blxuICAgICAqIGFzIGl0ZW1zIGluIHRoZSBsaXN0IG9yIGludG8gYW5vdGhlciBmaWxlIHRvIHRyaWdnZXIgdXBkYXRpbmcgaXQncyB2ZXJzaW9uLlxuICAgICAqIFdoZW4gZmFsc2UsIHRoZSBkcm9wcGVkIGZpbGUgd2lsbCBiZSBhZGRlZCB0byB0aGVcbiAgICAgKiBjdXJyZW50IGZvbGRlciAoaWUsIHRoZSBvbmUgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIHNob3duIGluIHRoZSBsaXN0KS5cbiAgICAgKiBTZWUgdGhlIFVwbG9hZCBkaXJlY3RpdmUgZm9yIGZ1cnRoZXIgZGV0YWlscyBhYm91dCBob3cgdGhlIGZpbGUgZHJvcCBpc1xuICAgICAqIGhhbmRsZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd0Ryb3BGaWxlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBkZWZhdWx0IHNvcnRpbmcuIFRoZSBmb3JtYXQgaXMgYW4gYXJyYXkgb2YgMiBzdHJpbmdzIGBba2V5LCBkaXJlY3Rpb25dYFxuICAgICAqIGkuZS4gYFsnbmFtZScsICdkZXNjJ11gIG9yIGBbJ25hbWUnLCAnYXNjJ11gLiBTZXQgdGhpcyB2YWx1ZSBvbmx5IGlmIHlvdSB3YW50IHRvXG4gICAgICogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc29ydGluZyBkZXRlY3RlZCBieSB0aGUgY29tcG9uZW50IGJhc2VkIG9uIGNvbHVtbnMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzb3J0aW5nOiBzdHJpbmdbXSB8IERhdGFTb3J0aW5nID0gWyduYW1lJywgJ2FzYyddO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBkZWZhdWx0IHNvcnRpbmcuIFRoZSBmb3JtYXQgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBgW2tleSBkaXJlY3Rpb24sIG90aGVyS2V5IG90aGVyRGlyZWN0aW9uXWBcbiAgICAgKiBpLmUuIGBbJ25hbWUgZGVzYycsICdub2RlVHlwZSBhc2MnXWAgb3IgYFsnbmFtZSBhc2MnXWAuIFNldCB0aGlzIHZhbHVlIGlmIHlvdSB3YW50IGEgYmFzZVxuICAgICAqIHJ1bGUgdG8gYmUgYWRkZWQgdG8gdGhlIHNvcnRpbmcgYXBhcnQgZnJvbSB0aGUgb25lIGRyaXZlbiBieSB0aGUgaGVhZGVyLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWRkaXRpb25hbFNvcnRpbmc6IERhdGFTb3J0aW5nID0gbmV3IERhdGFTb3J0aW5nKCdpc0ZvbGRlcicsICdkZXNjJyk7XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHNvcnRpbmcgbW9kZS4gQ2FuIGJlIGVpdGhlciBgY2xpZW50YCAoaXRlbXMgaW4gdGhlIGxpc3RcbiAgICAgKiBhcmUgc29ydGVkIGNsaWVudC1zaWRlKSBvciBgc2VydmVyYCAodGhlIG9yZGVyaW5nIHN1cHBsaWVkIGJ5IHRoZVxuICAgICAqIHNlcnZlciBpcyB1c2VkIHdpdGhvdXQgZnVydGhlciBjbGllbnQtc2lkZSBzb3J0aW5nKS5cbiAgICAgKiBOb3RlIHRoYXQgdGhlIGBzZXJ2ZXJgIG9wdGlvbiAqZG9lcyBub3QqIHJlcXVlc3QgdGhlIHNlcnZlciB0byBzb3J0IHRoZSBkYXRhXG4gICAgICogYmVmb3JlIGRlbGl2ZXJpbmcgaXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzb3J0aW5nTW9kZTogJ3NlcnZlcicgfCAnY2xpZW50JyA9ICdzZXJ2ZXInO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGlubGluZSBzdHlsZSB0byBhcHBseSB0byBldmVyeSByb3cuIFNlZVxuICAgICAqIHRoZSBBbmd1bGFyIE5nU3R5bGVcbiAgICAgKiBkb2NzIGZvciBtb3JlIGRldGFpbHMgYW5kIHVzYWdlIGV4YW1wbGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93U3R5bGU6IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgICAvKiogVGhlIENTUyBjbGFzcyB0byBhcHBseSB0byBldmVyeSByb3cgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd1N0eWxlQ2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGxvYWRpbmcgc3RhdGUgYW5kIGFuaW1hdGVkIHNwaW5uZXJzIGZvciB0aGUgY29tcG9uZW50LiBVc2VkIGluXG4gICAgICogY29tYmluYXRpb24gd2l0aCBgbmF2aWdhdGU9ZmFsc2VgIHRvIHBlcmZvcm0gY3VzdG9tIG5hdmlnYXRpb24gYW5kIGxvYWRpbmdcbiAgICAgKiBzdGF0ZSBpbmRpY2F0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBfcm93RmlsdGVyOiBSb3dGaWx0ZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBmdW5jdGlvbiB0byBjaG9vc2Ugd2hldGhlciB0byBzaG93IG9yIGhpZGUgcm93cy5cbiAgICAgKiBTZWUgdGhlIFtSb3cgRmlsdGVyIE1vZGVsXShyb3ctZmlsdGVyLm1vZGVsLm1kKSBwYWdlIGZvclxuICAgICAqIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcm93RmlsdGVyKHJvd0ZpbHRlcjogUm93RmlsdGVyKSB7XG4gICAgICAgIHRoaXMuX3Jvd0ZpbHRlciA9IHJvd0ZpbHRlcjtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldEZpbHRlcih0aGlzLl9yb3dGaWx0ZXIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCByb3dGaWx0ZXIoKTogUm93RmlsdGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd0ZpbHRlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gZnVuY3Rpb24gdG8gY2hvb3NlIGltYWdlIGZpbGUgcGF0aHMgdG8gc2hvdy4gU2VlIHRoZVxuICAgICAqIFtJbWFnZSBSZXNvbHZlciBNb2RlbF0oaW1hZ2UtcmVzb2x2ZXIubW9kZWwubWQpIHBhZ2UgZm9yXG4gICAgICogbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGltYWdlUmVzb2x2ZXI6IGFueSB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHN0aWNreSBoZWFkZXIgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0aWNreUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGhlYWRlciBmaWx0ZXJzIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBoZWFkZXJGaWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogSW5pdGlhbCB2YWx1ZSBmb3IgZmlsdGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsdGVyVmFsdWU6IGFueTtcblxuICAgIC8qKiBUaGUgSUQgb2YgdGhlIGZvbGRlciBub2RlIHRvIGRpc3BsYXkgb3IgYSByZXNlcnZlZCBzdHJpbmcgYWxpYXMgZm9yIHNwZWNpYWwgc291cmNlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VycmVudEZvbGRlcklkOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2Ygbm9kZXMgdG8gYmUgcHJlLXNlbGVjdGVkLiBBbGwgbm9kZXMgaW4gdGhlXG4gICAgICogYXJyYXkgYXJlIHByZS1zZWxlY3RlZCBpbiBtdWx0aSBzZWxlY3Rpb24gbW9kZSwgYnV0IG9ubHkgdGhlIGZpcnN0IG5vZGVcbiAgICAgKiBpcyBwcmUtc2VsZWN0ZWQgaW4gc2luZ2xlIHNlbGVjdGlvbiBtb2RlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHJlc2VsZWN0Tm9kZXM6IE5vZGVFbnRyeVtdID0gW107XG5cbiAgICAvKiogVGhlIERvY3VtZW50IGxpc3Qgd2lsbCBzaG93IGFsbCB0aGUgbm9kZXMgY29udGFpbmVkIGluIHRoZSBOb2RlUGFnaW5nIGVudGl0eSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9kZTogTm9kZVBhZ2luZyA9IG51bGw7XG5cbiAgICAvKiogRGVmYXVsdCB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZSBzZXR0aW5ncy4gVXNlIHRoaXMgb25seSBpZiB5b3UgYXJlIG5vdCB1c2luZyBwYWdpbmF0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SXRlbXM6IG51bWJlciA9IHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLm1heEl0ZW1zO1xuXG4gICAgLyoqIEtleSBvZiBjb2x1bW5zIHByZXNldCBzZXQgaW4gZXh0ZW5zaW9uLmpzb24gICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5zUHJlc2V0S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgY29sdW1ucyB2aXNpYmlsaXR5IGZvciBEYXRhVGFibGVTY2hlbWEgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZXRDb2x1bW5zVmlzaWJpbGl0eShjb2x1bW5zVmlzaWJpbGl0eTogeyBbY29sdW1uSWQ6IHN0cmluZ106IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5ID0gY29sdW1uc1Zpc2liaWxpdHk7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgY29sdW1ucyB3aWR0aCBmb3IgRGF0YVRhYmxlU2NoZW1hICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2V0Q29sdW1uc1dpZHRocyhjb2x1bW5zV2lkdGhzOiB7IFtjb2x1bW5JZDogc3RyaW5nXTogbnVtYmVyIH0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zV2lkdGhzID0gY29sdW1uc1dpZHRocztcbiAgICB9XG5cbiAgICAvKiogU2V0cyBjb2x1bW5zIG9yZGVyIGZvciBEYXRhVGFibGVTY2hlbWEgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZXRDb2x1bW5zT3JkZXIoY29sdW1uc09yZGVyOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnNPcmRlciA9IGNvbHVtbnNPcmRlcjtcbiAgICB9XG5cbiAgICAvKiogTGltaXQgb2YgcG9zc2libGUgdmlzaWJsZSBjb2x1bW5zLCBpbmNsdWRpbmcgXCIkdGh1bWJuYWlsXCIgY29sdW1uIGlmIHByb3ZpZGVkICovXG4gICAgQElucHV0KClcbiAgICBtYXhDb2x1bW5zVmlzaWJsZT86IG51bWJlcjtcblxuICAgIC8qKiBFbmFibGVzIGNvbHVtbiByZXNpemluZyBmb3IgZGF0YXRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBpc1Jlc2l6aW5nRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEVuYWJsZXMgYmx1ciB3aGVuIHJlc2l6aW5nIGRhdGF0YWJsZSBjb2x1bW5zICovXG4gICAgQElucHV0KClcbiAgICBibHVyT25SZXNpemUgPSB0cnVlO1xuXG4gICAgLyoqIERpc3BsYXkgY2hlY2tib3hlcyBpbiBkYXRhdGFibGUgcm93cyBvbiBob3ZlciBvbmx5ICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5Q2hlY2tib3hlc09uSG92ZXIgPSBmYWxzZTtcblxuICAgIC8qKiBEaXNwbGF5IGRyYWcgYW5kIGRyb3AgaGludC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlEcmFnQW5kRHJvcEhpbnQgPSB0cnVlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgYSBsaXN0IG5vZGUgKi9cbiAgICBAT3V0cHV0KClcbiAgICBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRpdHlFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZG91YmxlLWNsaWNrcyBhIGxpc3Qgbm9kZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5vZGVEYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudGl0eUV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgY3VycmVudCBkaXNwbGF5IGZvbGRlciBjaGFuZ2VzICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9sZGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlRW50cnlFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBhY3RzIHVwb24gZmlsZXMgd2l0aCBlaXRoZXIgc2luZ2xlIG9yIGRvdWJsZSBjbGlja1xuICAgICAqIChkZXBlbmRzIG9uIGBuYXZpZ2F0aW9uLW1vZGVgKS4gVXNlZnVsIGZvciBpbnRlZ3JhdGlvbiB3aXRoIHRoZVxuICAgICAqIFZpZXdlciBjb21wb25lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHJldmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudGl0eUV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgRG9jdW1lbnQgTGlzdCBoYXMgbG9hZGVkIGFsbCBpdGVtcyBhbmQgaXMgcmVhZHkgZm9yIHVzZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlUGFnaW5nPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgQVBJIGZhaWxzIHRvIGdldCB0aGUgRG9jdW1lbnQgTGlzdCBkYXRhICovXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIG5vZGUgc2VsZWN0aW9uIGNoYW5nZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5vZGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJ5W10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgZmlsdGVyIHZhbHVlIGlzIHNlbGVjdGVkICovXG4gICAgQE91dHB1dCgpXG4gICAgZmlsdGVyU2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJTZWFyY2hbXT4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gY29sdW1uIHdpZHRocyBjaGFuZ2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb2x1bW5zV2lkdGhDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtjb2x1bW5JZDogc3RyaW5nXTogbnVtYmVyIH0gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGNvbHVtbnMgdmlzaWJpbGl0eSBjaGFuZ2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb2x1bW5zVmlzaWJpbGl0eUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2NvbHVtbklkOiBzdHJpbmddOiBib29sZWFuIH0gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGNvbHVtbnMgb3JkZXIgY2hhbmdlICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uc09yZGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10gfCB1bmRlZmluZWQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCByb3cgaXRlbXMgY291bnQgaW4gdGhlIHRhYmxlIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZGF0YVRhYmxlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBkYXRhVGFibGU6IERhdGFUYWJsZUNvbXBvbmVudDtcblxuICAgIGFjdGlvbnM6IENvbnRlbnRBY3Rpb25Nb2RlbFtdID0gW107XG4gICAgY29udGV4dEFjdGlvbkhhbmRsZXI6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgZGF0YTogU2hhcmVEYXRhVGFibGVBZGFwdGVyO1xuICAgIG5vUGVybWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNlbGVjdGlvbiA9IG5ldyBBcnJheTxOb2RlRW50cnk+KCk7XG4gICAgJGZvbGRlck5vZGU6IFN1YmplY3Q8Tm9kZT4gPSBuZXcgU3ViamVjdDxOb2RlPigpO1xuICAgIGFsbG93RmlsdGVyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgICBvcmRlckJ5OiBzdHJpbmdbXSA9IG51bGw7XG4gICAgcHJlc2VsZWN0ZWRSb3dzOiBEYXRhUm93W10gPSBbXTtcblxuICAgIC8vIEBkZXByZWNhdGVkIDMuMC4wXG4gICAgZm9sZGVyTm9kZTogTm9kZTtcblxuICAgIHByaXZhdGUgX3BhZ2luYXRpb246IFBhZ2luYXRpb25Nb2RlbCA9IHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OO1xuICAgIHBhZ2luYXRpb246IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uTW9kZWw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uTW9kZWw+KHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OKTtcbiAgICBzb3J0aW5nU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PERhdGFTb3J0aW5nW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhU29ydGluZ1tdPih0aGlzLkRFRkFVTFRfU09SVElORyk7XG5cbiAgICBwcml2YXRlIHJvd01lbnVDYWNoZTogeyBba2V5OiBzdHJpbmddOiBDb250ZW50QWN0aW9uTW9kZWxbXSB9ID0ge307XG4gICAgcHJpdmF0ZSBsb2FkaW5nVGltZW91dDogYW55O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgcHJpdmF0ZSBfbm9kZXNBcGk6IE5vZGVzQXBpO1xuICAgIGdldCBub2Rlc0FwaSgpOiBOb2Rlc0FwaSB7XG4gICAgICAgIHRoaXMuX25vZGVzQXBpID0gdGhpcy5fbm9kZXNBcGkgPz8gbmV3IE5vZGVzQXBpKHRoaXMuYWxmcmVzY29BcGlTZXJ2aWNlLmdldEluc3RhbmNlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNBcGk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZG9jdW1lbnRMaXN0U2VydmljZTogRG9jdW1lbnRMaXN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0aHVtYm5haWxTZXJ2aWNlOiBUaHVtYm5haWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFsZnJlc2NvQXBpU2VydmljZTogQWxmcmVzY29BcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBOb2Rlc0FwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGF0YVRhYmxlU2VydmljZTogRGF0YVRhYmxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBsb2NrU2VydmljZTogTG9ja1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2dcbiAgICApIHtcbiAgICAgICAgc3VwZXIoYXBwQ29uZmlnLCAnZGVmYXVsdCcsIHByZXNldHNEZWZhdWx0TW9kZWwpO1xuICAgICAgICB0aGlzLm5vZGVTZXJ2aWNlLm5vZGVVcGRhdGVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgobm9kZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGVTZXJ2aWNlLnJvd1VwZGF0ZS5uZXh0KHsgaWQ6IG5vZGUuaWQsIG9iajogeyBlbnRyeTogbm9kZSB9IH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgICAgICAgICAgIC5zZWxlY3QoVXNlclByZWZlcmVuY2VWYWx1ZXMuUGFnaW5hdGlvblNpemUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHBhZ1NpemUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1heEl0ZW1zID0gdGhpcy5fcGFnaW5hdGlvbi5tYXhJdGVtcyA9IHBhZ1NpemU7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0QWN0aW9ucyhub2RlOiBOb2RlRW50cnkpIHtcbiAgICAgICAgaWYgKG5vZGU/LmVudHJ5KSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5nZXROb2RlQWN0aW9ucyhub2RlKTtcbiAgICAgICAgICAgIGlmIChhY3Rpb25zICYmIGFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zLm1hcCgoY3VycmVudEFjdGlvbjogQ29udGVudEFjdGlvbk1vZGVsKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBtb2RlbDogY3VycmVudEFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogdGhpcy5jb250ZXh0QWN0aW9uSGFuZGxlclxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlZmF1bHRTb3J0aW5nKCk6IERhdGFTb3J0aW5nIHtcbiAgICAgICAgbGV0IGRlZmF1bHRTb3J0aW5nOiBEYXRhU29ydGluZztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zb3J0aW5nKSkge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgZGlyZWN0aW9uXSA9IHRoaXMuc29ydGluZztcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0aW5nID0gbmV3IERhdGFTb3J0aW5nKGtleSwgZGlyZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0aW5nID0gbmV3IERhdGFTb3J0aW5nKHRoaXMuc29ydGluZy5rZXksIHRoaXMuc29ydGluZy5kaXJlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRTb3J0aW5nO1xuICAgIH1cblxuICAgIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmRhdGEgfHwgdGhpcy5kYXRhLmdldFJvd3MoKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucm93TWVudUNhY2hlID0ge307XG4gICAgICAgIHRoaXMubG9hZExheW91dFByZXNldHMoKTtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IFNoYXJlRGF0YVRhYmxlQWRhcHRlcihcbiAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsU2VydmljZSxcbiAgICAgICAgICAgIHRoaXMuY29udGVudFNlcnZpY2UsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdGhpcy5nZXREZWZhdWx0U29ydGluZygpLFxuICAgICAgICAgICAgdGhpcy5zb3J0aW5nTW9kZSxcbiAgICAgICAgICAgIHRoaXMuYWxsb3dEcm9wRmlsZXNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRhLnRodW1ibmFpbHMgPSB0aGlzLnRodW1ibmFpbHM7XG4gICAgICAgIHRoaXMuZGF0YS5wZXJtaXNzaW9uc1N0eWxlID0gdGhpcy5wZXJtaXNzaW9uc1N0eWxlO1xuXG4gICAgICAgIGlmICh0aGlzLl9yb3dGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRGaWx0ZXIodGhpcy5fcm93RmlsdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmltYWdlUmVzb2x2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRJbWFnZVJlc29sdmVyKHRoaXMuaW1hZ2VSZXNvbHZlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbnRleHRBY3Rpb25IYW5kbGVyLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgodmFsKSA9PiB0aGlzLmNvbnRleHRBY3Rpb25DYWxsYmFjayh2YWwpKTtcblxuICAgICAgICB0aGlzLmVuZm9yY2VTaW5nbGVDbGlja05hdmlnYXRpb25Gb3JNb2JpbGUoKTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyVmFsdWUgJiYgT2JqZWN0LmtleXModGhpcy5maWx0ZXJWYWx1ZSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zaG93SGVhZGVyID0gU2hvd0hlYWRlck1vZGUuQWx3YXlzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnNQcmVzZXRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHJlc2V0S2V5KHRoaXMuY29sdW1uc1ByZXNldEtleSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UucmVsb2FkJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlLnJlc2V0U2VsZWN0aW9uJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkxpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTGlzdC5jb2x1bW5zLmNoYW5nZXMucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVEYXRhdGFibGVTY2hlbWEoKTtcbiAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICghY2hhbmdlc1sncHJlc2VsZWN0Tm9kZXMnXSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zb3J0aW5nKSkge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgZGlyZWN0aW9uXSA9IHRoaXMuc29ydGluZztcbiAgICAgICAgICAgIHRoaXMub3JkZXJCeSA9IHRoaXMuYnVpbGRPcmRlckJ5QXJyYXkoa2V5LCBkaXJlY3Rpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcmRlckJ5ID0gdGhpcy5idWlsZE9yZGVyQnlBcnJheSh0aGlzLnNvcnRpbmcua2V5LCB0aGlzLnNvcnRpbmcuZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS50aHVtYm5haWxzID0gdGhpcy50aHVtYm5haWxzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuc29ydGluZ01vZGUgJiYgIWNoYW5nZXMuc29ydGluZ01vZGUuZmlyc3RDaGFuZ2UgJiYgdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc29ydGluZ01vZGUgPSBjaGFuZ2VzLnNvcnRpbmdNb2RlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNvcnRpbmcgJiYgIWNoYW5nZXMuc29ydGluZy5maXJzdENoYW5nZSAmJiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gY2hhbmdlcy5zb3J0aW5nLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChuZXdWYWx1ZSAmJiBuZXdWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2tleSwgZGlyZWN0aW9uXSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRTb3J0aW5nKG5ldyBEYXRhU29ydGluZyhrZXksIGRpcmVjdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvbGRlcklkICYmIGNoYW5nZXNbJ2N1cnJlbnRGb2xkZXJJZCddPy5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXNbJ2N1cnJlbnRGb2xkZXJJZCddPy5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRGb2xkZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLm5vZGU/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlID0gdGhpcy5fcGFnaW5hdGlvbiA/IHRoaXMuX3BhZ2luYXRpb24ubWVyZ2UgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEubG9hZFBhZ2UoY2hhbmdlcy5ub2RlLmN1cnJlbnRWYWx1ZSwgbWVyZ2UsIG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmVFeGlzdGluZ1NlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMub25QcmVzZWxlY3ROb2RlcygpO1xuICAgICAgICAgICAgICAgIHRoaXMub25EYXRhUmVhZHkoY2hhbmdlcy5ub2RlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZXMuaW1hZ2VSZXNvbHZlcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRJbWFnZVJlc29sdmVyKGNoYW5nZXMuaW1hZ2VSZXNvbHZlci5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVsb2FkKGhpZGVMb2FkaW5nU3Bpbm5lciA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5yZWxvYWRXaXRob3V0UmVzZXR0aW5nU2VsZWN0aW9uKGhpZGVMb2FkaW5nU3Bpbm5lcik7XG4gICAgfVxuXG4gICAgcmVsb2FkV2l0aG91dFJlc2V0dGluZ1NlbGVjdGlvbihoaWRlTG9hZGluZ1NwaW5uZXIgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5ub2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmxvYWRQYWdlKHRoaXMubm9kZSwgdGhpcy5fcGFnaW5hdGlvbi5tZXJnZSwgbnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZUV4aXN0aW5nU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uUHJlc2VsZWN0Tm9kZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc3luY1BhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMub25EYXRhUmVhZHkodGhpcy5ub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcihoaWRlTG9hZGluZ1NwaW5uZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29udGV4dEFjdGlvbkNhbGxiYWNrKGFjdGlvbikge1xuICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVDb250ZW50QWN0aW9uKGFjdGlvbi5ub2RlLCBhY3Rpb24ubW9kZWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Tm9kZUFjdGlvbnMobm9kZTogTm9kZUVudHJ5IHwgYW55KTogQ29udGVudEFjdGlvbk1vZGVsW10ge1xuICAgICAgICBpZiAobm9kZT8uZW50cnkpIHtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5lbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSAnZG9jdW1lbnQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLmVudHJ5LmlzRm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gJ2ZvbGRlcic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5yb3dNZW51Q2FjaGVbbm9kZS5lbnRyeS5pZF07XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEFjdGlvbihhY3Rpb24sIG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uc0J5VGFyZ2V0ID0gdGhpcy5hY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSB0eXBlb2YgZW50cnkudmlzaWJsZSA9PT0gJ2Z1bmN0aW9uJyA/IGVudHJ5LnZpc2libGUobm9kZSkgOiBlbnRyeS52aXNpYmxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNWaXNpYmxlICYmIGVudHJ5LnRhcmdldC50b0xvd2VyQ2FzZSgpID09PSB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGFjdGlvbikgPT4gbmV3IENvbnRlbnRBY3Rpb25Nb2RlbChhY3Rpb24pKTtcblxuICAgICAgICAgICAgICAgIGFjdGlvbnNCeVRhcmdldC5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoQWN0aW9uKGFjdGlvbiwgbm9kZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnJvd01lbnVDYWNoZVtub2RlLmVudHJ5LmlkXSA9IGFjdGlvbnNCeVRhcmdldDtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uc0J5VGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVmcmVzaEFjdGlvbihhY3Rpb246IENvbnRlbnRBY3Rpb25Nb2RlbCwgbm9kZTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGFjdGlvbi5kaXNhYmxlZCA9IHRoaXMuaXNBY3Rpb25EaXNhYmxlZChhY3Rpb24sIG5vZGUpO1xuICAgICAgICBhY3Rpb24udmlzaWJsZSA9IHRoaXMuaXNBY3Rpb25WaXNpYmxlKGFjdGlvbiwgbm9kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGlvblZpc2libGUoYWN0aW9uOiBDb250ZW50QWN0aW9uTW9kZWwsIG5vZGU6IE5vZGVFbnRyeSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi52aXNpYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLnZpc2libGUobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWN0aW9uLnZpc2libGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FjdGlvbkRpc2FibGVkKGFjdGlvbjogQ29udGVudEFjdGlvbk1vZGVsLCBub2RlOiBOb2RlRW50cnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uZGlzYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoYWN0aW9uLnBlcm1pc3Npb24gJiYgYWN0aW9uLmRpc2FibGVXaXRoTm9QZXJtaXNzaW9uICYmICF0aGlzLmNvbnRlbnRTZXJ2aWNlLmhhc0FsbG93YWJsZU9wZXJhdGlvbnMobm9kZS5lbnRyeSwgYWN0aW9uLnBlcm1pc3Npb24pKSB8fFxuICAgICAgICAgICAgdGhpcy5sb2NrU2VydmljZS5pc0xvY2tlZChub2RlLmVudHJ5KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSlcbiAgICBvblNob3dDb250ZXh0TWVudShlPzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGUgJiYgdGhpcy5jb250ZXh0TWVudUFjdGlvbnMpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5hdmlnYXRlVG8obm9kZTogTm9kZSB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0TmV3Rm9sZGVyUGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9sZGVySWQgPSBub2RlO1xuICAgICAgICAgICAgdGhpcy5mb2xkZXJDaGFuZ2UuZW1pdChuZXcgTm9kZUVudHJ5RXZlbnQoeyBpZDogbm9kZSB9IGFzIE5vZGUpKTtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbk5hdmlnYXRlRm9sZGVyKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldE5ld0ZvbGRlclBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXJJZCA9IHRoaXMuZ2V0Tm9kZUZvbGRlckRlc3RpbmF0aW9uSWQobm9kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2xkZXJDaGFuZ2UuZW1pdChuZXcgTm9kZUVudHJ5RXZlbnQoeyBpZDogdGhpcy5jdXJyZW50Rm9sZGVySWQgfSBhcyBOb2RlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROb2RlRm9sZGVyRGVzdGluYXRpb25JZChub2RlOiBOb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlua0ZvbGRlcihub2RlKSA/IG5vZGUucHJvcGVydGllc1snY206ZGVzdGluYXRpb24nXSA6IG5vZGUuaWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xpbmtGb2xkZXIobm9kZTogTm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5ub2RlVHlwZSA9PT0gJ2FwcDpmb2xkZXJsaW5rJyAmJiBub2RlLnByb3BlcnRpZXM/LlsnY206ZGVzdGluYXRpb24nXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUN1c3RvbVNvdXJjZURhdGEobm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9sZGVySWQgPSBub2RlSWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIGV4ZWN1dGluZyBjb250ZW50IGFjdGlvbiBmb3IgYSBkb2N1bWVudCBvciBmb2xkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGJlIHRoZSBjb250ZXh0IG9mIHRoZSBleGVjdXRpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWdhaW5zdCB0aGUgY29udGV4dC5cbiAgICAgKi9cbiAgICBleGVjdXRlQ29udGVudEFjdGlvbihub2RlOiBOb2RlRW50cnksIGFjdGlvbjogQ29udGVudEFjdGlvbk1vZGVsKSB7XG4gICAgICAgIGlmIChub2RlPy5lbnRyeSAmJiBhY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJTdWIgPSB0eXBlb2YgYWN0aW9uLmhhbmRsZXIgPT09ICdmdW5jdGlvbicgPyBhY3Rpb24uaGFuZGxlcihub2RlLCB0aGlzLCBhY3Rpb24ucGVybWlzc2lvbikgOiBvZih0cnVlKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uZXhlY3V0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBoYW5kbGVyU3ViKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlclN1Yi5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKCkgPT4gYWN0aW9uLmV4ZWN1dGUobm9kZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMb2FkaW5nU3RhdGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YT8uZ2V0Um93cygpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbG9hZEZvbGRlcihoaWRlTG9hZGluZ1NwaW5uZXIgPSBmYWxzZSkge1xuICAgICAgICBpZiAoIWhpZGVMb2FkaW5nU3Bpbm5lcikge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlLmlzQ3VzdG9tU291cmNlU2VydmljZSh0aGlzLmN1cnJlbnRGb2xkZXJJZCkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3VzdG9tU291cmNlRGF0YSh0aGlzLmN1cnJlbnRGb2xkZXJJZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UubG9hZEZvbGRlckJ5Tm9kZUlkKHRoaXMuY3VycmVudEZvbGRlcklkLCB0aGlzLl9wYWdpbmF0aW9uLCB0aGlzLmluY2x1ZGVGaWVsZHMsIHRoaXMud2hlcmUsIHRoaXMub3JkZXJCeSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKGRvY3VtZW50Tm9kZTogRG9jdW1lbnRMb2FkZXJOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50Tm9kZS5jdXJyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbGRlck5vZGUgPSBkb2N1bWVudE5vZGUuY3VycmVudE5vZGUuZW50cnk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGZvbGRlck5vZGUubmV4dChkb2N1bWVudE5vZGUuY3VycmVudE5vZGUuZW50cnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZUxvYWRlZChkb2N1bWVudE5vZGUuY2hpbGRyZW4pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzZXRTZWxlY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW107XG4gICAgICAgIHRoaXMubm9QZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25QYWdlTG9hZGVkKG5vZGVQYWdpbmc6IE5vZGVQYWdpbmcpIHtcbiAgICAgICAgaWYgKG5vZGVQYWdpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEubG9hZFBhZ2Uobm9kZVBhZ2luZywgdGhpcy5fcGFnaW5hdGlvbi5tZXJnZSwgdGhpcy5hbGxvd0Ryb3BGaWxlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmVzZXJ2ZUV4aXN0aW5nU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uUHJlc2VsZWN0Tm9kZXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMub25EYXRhUmVhZHkobm9kZVBhZ2luZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNvcnRpbmdDaGFuZ2VkKGV2ZW50OiBDdXN0b21FdmVudCkge1xuICAgICAgICB0aGlzLm9yZGVyQnkgPSB0aGlzLmJ1aWxkT3JkZXJCeUFycmF5KGV2ZW50LmRldGFpbC5zb3J0aW5nS2V5LCBldmVudC5kZXRhaWwuZGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5zb3J0aW5nID0gW2V2ZW50LmRldGFpbC5zb3J0aW5nS2V5LCBldmVudC5kZXRhaWwuZGlyZWN0aW9uXTtcbiAgICAgICAgdGhpcy5zb3J0aW5nU3ViamVjdC5uZXh0KFt0aGlzLmFkZGl0aW9uYWxTb3J0aW5nLCBldmVudC5kZXRhaWxdKTtcblxuICAgICAgICBpZiAodGhpcy5zb3J0aW5nTW9kZSA9PT0gJ3NlcnZlcicpIHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkT3JkZXJCeUFycmF5KGN1cnJlbnRLZXk6IHN0cmluZywgY3VycmVudERpcmVjdGlvbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gW2Ake3RoaXMuYWRkaXRpb25hbFNvcnRpbmcua2V5fSAke3RoaXMuYWRkaXRpb25hbFNvcnRpbmcuZGlyZWN0aW9ufWAsIGAke2N1cnJlbnRLZXl9ICR7Y3VycmVudERpcmVjdGlvbn1gXTtcbiAgICB9XG5cbiAgICBvblByZXZpZXdGaWxlKG5vZGU6IE5vZGVFbnRyeSkge1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgY29uc3Qgc2l6ZUluTUIgPSBub2RlLmVudHJ5Py5jb250ZW50Py5zaXplSW5CeXRlcyAvIEJZVEVTX1RPX01CX0NPTlZFUlNJT05fVkFMVUU7XG4gICAgICAgICAgICBjb25zdCBmaWxlQXV0b0Rvd25sb2FkRmxhZzogYm9vbGVhbiA9IHRoaXMuYXBwQ29uZmlnLmdldCgndmlld2VyLmVuYWJsZUZpbGVBdXRvRG93bmxvYWQnLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IHNpemVUaHJlc2hvbGQ6IG51bWJlciA9IHRoaXMuYXBwQ29uZmlnLmdldCgndmlld2VyLmZpbGVBdXRvRG93bmxvYWRTaXplVGhyZXNob2xkSW5NQicsIDE1KTtcblxuICAgICAgICAgICAgaWYgKGZpbGVBdXRvRG93bmxvYWRGbGFnICYmIHNpemVJbk1CICYmIHNpemVJbk1CID4gc2l6ZVRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oRmlsZUF1dG9Eb3dubG9hZENvbXBvbmVudCwgeyBkaXNhYmxlQ2xvc2U6IHRydWUsIGRhdGE6IG5vZGUgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlldy5lbWl0KG5ldyBOb2RlRW50aXR5RXZlbnQobm9kZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db2x1bW5zVmlzaWJpbGl0eUNoYW5nZShjb2x1bW5zOiBEYXRhQ29sdW1uW10pIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eSA9IGNvbHVtbnMucmVkdWNlKCh2aXNpYmxlQ29sdW1uc01hcCwgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmlzSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlQ29sdW1uc01hcFtjb2x1bW4uaWRdID0gIWNvbHVtbi5pc0hpZGRlbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZpc2libGVDb2x1bW5zTWFwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuY29sdW1uc1Zpc2liaWxpdHlDaGFuZ2VkLmVtaXQodGhpcy5jb2x1bW5zVmlzaWJpbGl0eSk7XG4gICAgfVxuXG4gICAgb25Db2x1bW5PcmRlckNoYW5nZShjb2x1bW5zV2l0aE5ld09yZGVyOiBEYXRhQ29sdW1uW10pIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zT3JkZXIgPSBjb2x1bW5zV2l0aE5ld09yZGVyLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zT3JkZXJDaGFuZ2VkLmVtaXQodGhpcy5jb2x1bW5zT3JkZXIpO1xuICAgIH1cblxuICAgIG9uQ29sdW1uc1dpZHRoQ2hhbmdlKGNvbHVtbnM6IERhdGFDb2x1bW5bXSkge1xuICAgICAgICBjb25zdCBuZXdDb2x1bW5zV2lkdGhzID0gY29sdW1ucy5yZWR1Y2UoKHdpZHRoc0NvbHVtbnNNYXAsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi53aWR0aCkge1xuICAgICAgICAgICAgICAgIHdpZHRoc0NvbHVtbnNNYXBbY29sdW1uLmlkXSA9IE1hdGguY2VpbChjb2x1bW4ud2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdpZHRoc0NvbHVtbnNNYXA7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aHMgPSB7IC4uLnRoaXMuY29sdW1uc1dpZHRocywgLi4ubmV3Q29sdW1uc1dpZHRocyB9O1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zV2lkdGhDaGFuZ2VkLmVtaXQodGhpcy5jb2x1bW5zV2lkdGhzKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQoY291bnQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQuZW1pdChjb3VudCk7XG4gICAgfVxuXG4gICAgb25Ob2RlQ2xpY2sobm9kZUVudHJ5OiBOb2RlRW50cnkpIHtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ25vZGUtY2xpY2snLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgbm9kZTogbm9kZUVudHJ5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBOb2RlRW50aXR5RXZlbnQobm9kZUVudHJ5KTtcbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdChldmVudCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZSAmJiB0aGlzLm5hdmlnYXRpb25Nb2RlID09PSBEb2N1bWVudExpc3RDb21wb25lbnQuU0lOR0xFX0NMSUNLX05BVklHQVRJT04pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVBY3Rpb25DbGljayhub2RlRW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlRGJsQ2xpY2sobm9kZUVudHJ5OiBOb2RlRW50cnkpIHtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ25vZGUtZGJsY2xpY2snLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgbm9kZTogbm9kZUVudHJ5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG5cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTm9kZUVudGl0eUV2ZW50KG5vZGVFbnRyeSk7XG4gICAgICAgIHRoaXMubm9kZURibENsaWNrLmVtaXQoZXZlbnQpO1xuXG4gICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGUgJiYgdGhpcy5uYXZpZ2F0aW9uTW9kZSA9PT0gRG9jdW1lbnRMaXN0Q29tcG9uZW50LkRPVUJMRV9DTElDS19OQVZJR0FUSU9OKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlQWN0aW9uQ2xpY2sobm9kZUVudHJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4ZWN1dGVBY3Rpb25DbGljayhub2RlRW50cnk6IE5vZGVFbnRyeSkge1xuICAgICAgICBpZiAobm9kZUVudHJ5Py5lbnRyeSkge1xuICAgICAgICAgICAgaWYgKG5vZGVFbnRyeS5lbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUHJldmlld0ZpbGUobm9kZUVudHJ5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5vZGVFbnRyeS5lbnRyeS5pc0ZvbGRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUbyhub2RlRW50cnkuZW50cnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZUVudHJ5LmVudHJ5WydndWlkJ10pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlOiB0aGlzLmluY2x1ZGVGaWVsZHNcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlc0FwaS5nZXROb2RlKG5vZGVFbnRyeS5lbnRyeVsnZ3VpZCddLCBvcHRpb25zKS50aGVuKChub2RlOiBOb2RlRW50cnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKG5vZGUuZW50cnkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Ob2RlU2VsZWN0KGV2ZW50OiB7IHJvdzogU2hhcmVEYXRhUm93OyBzZWxlY3Rpb246IEFycmF5PFNoYXJlRGF0YVJvdz4gfSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IGV2ZW50LnNlbGVjdGlvbi5tYXAoKGVudHJ5KSA9PiBlbnRyeS5ub2RlKTtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ25vZGUtc2VsZWN0Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgbm9kZTogZXZlbnQucm93ID8gZXZlbnQucm93Lm5vZGUgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vZGVTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgfVxuXG4gICAgb25Ob2RlVW5zZWxlY3QoZXZlbnQ6IHsgcm93OiBTaGFyZURhdGFSb3c7IHNlbGVjdGlvbjogQXJyYXk8U2hhcmVEYXRhUm93PiB9KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gZXZlbnQuc2VsZWN0aW9uLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5vZGUpO1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS11bnNlbGVjdCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIG5vZGU6IGV2ZW50LnJvdyA/IGV2ZW50LnJvdy5ub2RlIDogbnVsbCxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuc2VsZWN0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuICAgIH1cblxuICAgIG9uU2hvd1Jvd0NvbnRleHRNZW51KGV2ZW50OiBEYXRhQ2VsbEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHRNZW51QWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGFyZ3Mucm93Lm5vZGU7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIGFyZ3MuYWN0aW9ucyA9IHRoaXMuZ2V0Q29udGV4dEFjdGlvbnMobm9kZSkgfHwgW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNob3dSb3dBY3Rpb25zTWVudShldmVudDogRGF0YUNlbGxFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50QWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGFyZ3Mucm93Lm5vZGU7XG4gICAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgICAgIGFyZ3MuYWN0aW9ucyA9IHRoaXMuZ2V0Tm9kZUFjdGlvbnMobm9kZSkgfHwgW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkV4ZWN1dGVSb3dBY3Rpb24oZXZlbnQ6IERhdGFSb3dBY3Rpb25FdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50QWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IGFyZ3Mucm93Lm5vZGU7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBhcmdzLmFjdGlvbjtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUNvbnRlbnRBY3Rpb24obm9kZSwgYWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZW5mb3JjZVNpbmdsZUNsaWNrTmF2aWdhdGlvbkZvck1vYmlsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGUoKSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uTW9kZSA9IERvY3VtZW50TGlzdENvbXBvbmVudC5TSU5HTEVfQ0xJQ0tfTkFWSUdBVElPTjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbk5hdmlnYXRlRm9sZGVyKG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGNhbk5hdmlnYXRlRm9sZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG5vZGU/LmlzRm9sZGVyKSB7XG4gICAgICAgICAgICBjYW5OYXZpZ2F0ZUZvbGRlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FuTmF2aWdhdGVGb2xkZXI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRhdGFSZWFkeShub2RlUGFnaW5nOiBOb2RlUGFnaW5nKSB7XG4gICAgICAgIHRoaXMucmVhZHkuZW1pdChub2RlUGFnaW5nKTtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLm5leHQobm9kZVBhZ2luZy5saXN0LnBhZ2luYXRpb24pO1xuICAgIH1cblxuICAgIHVwZGF0ZVBhZ2luYXRpb24ocmVxdWVzdFBhZ2luYXRpb25Nb2RlbDogUmVxdWVzdFBhZ2luYXRpb25Nb2RlbCkge1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uLm1heEl0ZW1zID0gcmVxdWVzdFBhZ2luYXRpb25Nb2RlbC5tYXhJdGVtcztcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbi5za2lwQ291bnQgPSByZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLnNraXBDb3VudDtcbiAgICAgICAgdGhpcy5yZWxvYWQocmVxdWVzdFBhZ2luYXRpb25Nb2RlbC5tZXJnZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzeW5jUGFnaW5hdGlvbigpIHtcbiAgICAgICAgdGhpcy5ub2RlLmxpc3QucGFnaW5hdGlvbi5tYXhJdGVtcyA9IHRoaXMuX3BhZ2luYXRpb24ubWF4SXRlbXM7XG4gICAgICAgIHRoaXMubm9kZS5saXN0LnBhZ2luYXRpb24uc2tpcENvdW50ID0gdGhpcy5fcGFnaW5hdGlvbi5za2lwQ291bnQ7XG4gICAgfVxuXG4gICAgb25GaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoYWN0aXZlRmlsdGVyczogRmlsdGVyU2VhcmNoW10pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3Rpb24uZW1pdChhY3RpdmVGaWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZXNldE5ld0ZvbGRlclBhZ2luYXRpb24oKSB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb24uc2tpcENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbi5tYXhJdGVtcyA9IHRoaXMubWF4SXRlbXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnI6IGFueSkge1xuICAgICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKEpTT04ucGFyc2UoZXJyLm1lc3NhZ2UpLmVycm9yLnN0YXR1c0NvZGUgPT09IDQwMykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vUGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZ1N0YXRlKGZhbHNlKTtcbiAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycik7XG4gICAgfVxuXG4gICAgZ2V0UHJlc2VsZWN0ZWROb2Rlc0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk6IE5vZGVFbnRyeVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUHJlc2VsZWN0ZWROb2RlcygpID8gKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkgPyBbdGhpcy5wcmVzZWxlY3ROb2Rlc1swXV0gOiB0aGlzLnByZXNlbGVjdE5vZGVzKSA6IFtdO1xuICAgIH1cblxuICAgIGdldFByZXNlbGVjdGVkUm93c0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk6IERhdGFSb3dbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1ByZXNlbGVjdGVkUm93cygpID8gKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkgPyBbdGhpcy5wcmVzZWxlY3RlZFJvd3NbMF1dIDogdGhpcy5wcmVzZWxlY3RlZFJvd3MpIDogW107XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0aW9uQmFzZWRPblNlbGVjdGlvbk1vZGUoKTogRGF0YVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUHJlc2VsZWN0ZWRSb3dzKClcbiAgICAgICAgICAgID8gdGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKVxuICAgICAgICAgICAgICAgID8gW3RoaXMucHJlc2VsZWN0ZWRSb3dzWzBdXVxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhLmdldFNlbGVjdGVkUm93cygpXG4gICAgICAgICAgICA6IHRoaXMuZGF0YS5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICB9XG5cbiAgICBvblByZXNlbGVjdE5vZGVzKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNQcmVzZWxlY3RlZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJlc2VsZWN0Um93c09mUHJlc2VsZWN0ZWROb2RlcygpO1xuICAgICAgICAgICAgY29uc3QgcHJlc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRQcmVzZWxlY3RlZFJvd3NCYXNlZE9uU2VsZWN0aW9uTW9kZSgpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5kYXRhLmdldFNlbGVjdGVkUm93cygpIGFzIFNoYXJlRGF0YVJvd1tdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcHJlc2VsZWN0ZWRSb3dzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhVGFibGUuc2VsZWN0Um93KG5vZGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbk5vZGVTZWxlY3QoeyByb3c6IHVuZGVmaW5lZCwgc2VsZWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVzZXJ2ZUV4aXN0aW5nU2VsZWN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiB0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd09mU2VsZWN0aW9uID0gdGhpcy5kYXRhLmdldFJvd0J5Tm9kZUlkKHNlbGVjdGlvbi5lbnRyeS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHJvd09mU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd09mU2VsZWN0aW9uLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByZXNlbGVjdFJvd3NPZlByZXNlbGVjdGVkTm9kZXMoKSB7XG4gICAgICAgIHRoaXMucHJlc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIGNvbnN0IHByZXNlbGVjdGVkTm9kZXMgPSB0aGlzLmdldFByZXNlbGVjdGVkTm9kZXNCYXNlZE9uU2VsZWN0aW9uTW9kZSgpO1xuXG4gICAgICAgIHByZXNlbGVjdGVkTm9kZXMuZm9yRWFjaCgocHJlc2VsZWN0ZWROb2RlOiBOb2RlRW50cnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd09mUHJlc2VsZWN0ZWROb2RlID0gdGhpcy5kYXRhLmdldFJvd0J5Tm9kZUlkKHByZXNlbGVjdGVkTm9kZS5lbnRyeS5pZCk7XG4gICAgICAgICAgICBpZiAocm93T2ZQcmVzZWxlY3RlZE5vZGUpIHtcbiAgICAgICAgICAgICAgICByb3dPZlByZXNlbGVjdGVkTm9kZS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNlbGVjdGVkUm93cy5wdXNoKHJvd09mUHJlc2VsZWN0ZWROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdW5zZWxlY3RSb3dGcm9tTm9kZUlkKG5vZGVJZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHJvd1RvVW5zZWxlY3QgPSB0aGlzLmRhdGEuZ2V0Um93QnlOb2RlSWQobm9kZUlkKTtcbiAgICAgICAgaWYgKHJvd1RvVW5zZWxlY3Q/LmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJvd1RvVW5zZWxlY3QuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGUuc2VsZWN0Um93KHJvd1RvVW5zZWxlY3QsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uQmFzZWRPblNlbGVjdGlvbk1vZGUoKSBhcyBTaGFyZURhdGFSb3dbXTtcbiAgICAgICAgICAgIHRoaXMub25Ob2RlVW5zZWxlY3QoeyByb3c6IHVuZGVmaW5lZCwgc2VsZWN0aW9uIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NpbmdsZVNlbGVjdGlvbk1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNdWx0aXBsZVNlbGVjdGlvbk1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNQcmVzZWxlY3RlZE5vZGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZWxlY3ROb2Rlcz8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ByZXNlbGVjdGVkUm93cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlc2VsZWN0ZWRSb3dzPy5sZW5ndGggPiAwO1xuICAgIH1cbn1cbiIsIjxhZGYtZGF0YXRhYmxlXG4gICAgI2RhdGFUYWJsZVxuICAgIFtzZWxlY3Rpb25Nb2RlXT1cInNlbGVjdGlvbk1vZGVcIlxuICAgIFtkYXRhXT1cImRhdGFcIlxuICAgIFthY3Rpb25zXT1cImNvbnRlbnRBY3Rpb25zXCJcbiAgICBbYWN0aW9uc1Bvc2l0aW9uXT1cImNvbnRlbnRBY3Rpb25zUG9zaXRpb25cIlxuICAgIFttdWx0aXNlbGVjdF09XCJtdWx0aXNlbGVjdFwiXG4gICAgW2NvbnRleHRNZW51XT1cImNvbnRleHRNZW51QWN0aW9uc1wiXG4gICAgW3Jvd1N0eWxlXT1cInJvd1N0eWxlXCJcbiAgICBbcm93U3R5bGVDbGFzc109XCJyb3dTdHlsZUNsYXNzXCJcbiAgICBbc2hvd01haW5EYXRhdGFibGVBY3Rpb25zXT1cInRydWVcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIFtub1Blcm1pc3Npb25dPVwibm9QZXJtaXNzaW9uXCJcbiAgICBbc2hvd0hlYWRlcl09XCJzaG93SGVhZGVyXCJcbiAgICBbcm93TWVudUNhY2hlRW5hYmxlZF09XCJmYWxzZVwiXG4gICAgW3N0aWNreUhlYWRlcl09XCJzdGlja3lIZWFkZXJcIlxuICAgIFthbGxvd0ZpbHRlcmluZ109XCJhbGxvd0ZpbHRlcmluZ1wiXG4gICAgW2lzUmVzaXppbmdFbmFibGVkXT1cImlzUmVzaXppbmdFbmFibGVkXCJcbiAgICBbYmx1ck9uUmVzaXplXT1cImJsdXJPblJlc2l6ZVwiXG4gICAgW2Rpc3BsYXlDaGVja2JveGVzT25Ib3Zlcl09XCJkaXNwbGF5Q2hlY2tib3hlc09uSG92ZXJcIlxuICAgIChzaG93Um93Q29udGV4dE1lbnUpPVwib25TaG93Um93Q29udGV4dE1lbnUoJGV2ZW50KVwiXG4gICAgKHNob3dSb3dBY3Rpb25zTWVudSk9XCJvblNob3dSb3dBY3Rpb25zTWVudSgkZXZlbnQpXCJcbiAgICAoZXhlY3V0ZVJvd0FjdGlvbik9XCJvbkV4ZWN1dGVSb3dBY3Rpb24oJGV2ZW50KVwiXG4gICAgKGNvbHVtbnNXaWR0aENoYW5nZWQpPVwib25Db2x1bW5zV2lkdGhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKGNvbHVtbk9yZGVyQ2hhbmdlZCk9XCJvbkNvbHVtbk9yZGVyQ2hhbmdlKCRldmVudClcIlxuICAgIChzZWxlY3RlZEl0ZW1zQ291bnRDaGFuZ2VkKT1cIm9uU2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAocm93Q2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50LnZhbHVlPy5ub2RlKVwiXG4gICAgKHJvd0RibENsaWNrKT1cIm9uTm9kZURibENsaWNrKCRldmVudC52YWx1ZT8ubm9kZSlcIlxuICAgIChyb3ctc2VsZWN0KT1cIm9uTm9kZVNlbGVjdCgkYW55KCRldmVudCkuZGV0YWlsKVwiXG4gICAgKHJvdy11bnNlbGVjdCk9XCJvbk5vZGVVbnNlbGVjdCgkYW55KCRldmVudCkuZGV0YWlsKVwiXG4gICAgKHNvcnRpbmctY2hhbmdlZCk9XCJvblNvcnRpbmdDaGFuZ2VkKCRhbnkoJGV2ZW50KSlcIlxuICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlLWdhbGxlcnktdGh1bWJuYWlsc109XCJkYXRhLnRodW1ibmFpbHNcIj5cblxuICAgIDxkaXYgKm5nSWY9XCJoZWFkZXJGaWx0ZXJzXCI+XG4gICAgICAgIDxhZGYtZmlsdGVyLWhlYWRlclxuICAgICAgICAgICAgW2N1cnJlbnRGb2xkZXJJZF09XCJjdXJyZW50Rm9sZGVySWRcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgIChmaWx0ZXJTZWxlY3Rpb24pPVwib25GaWx0ZXJTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8YWRmLW5vLWNvbnRlbnQtdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxhZGYtZW1wdHktbGlzdCAqbmdJZj1cIiFjdXN0b21Ob0NvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZW1wdHktbGlzdF90ZW1wbGF0ZSBhZGYtZW1wdHktZm9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZW1wdHktZm9sZGVyLXRoaXMtc3BhY2UtaXMtZW1wdHlcIj57eydBREYtRE9DVU1FTlQtTElTVC5FTVBUWS5IRUFERVInIHwgdHJhbnNsYXRlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc3BsYXlEcmFnQW5kRHJvcEhpbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZW1wdHktZm9sZGVyLWRyYWctZHJvcFwiPnt7ICdBREYtREFUQVRBQkxFLkVNUFRZLkRSQUctQU5ELURST1AuVElUTEUnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWVtcHR5LWZvbGRlci1hbnktZmlsZXMtaGVyZS10by1hZGRcIj57eyAnQURGLURBVEFUQUJMRS5FTVBUWS5EUkFHLUFORC1EUk9QLlNVQlRJVExFJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBbYWx0XT1cIidBREYtREFUQVRBQkxFLkVNUFRZLkRSQUctQU5ELURST1AuVElUTEUnIHwgdHJhbnNsYXRlXCIgY2xhc3M9XCJhZGYtZW1wdHktZm9sZGVyLWltYWdlXCIgW3NyY109XCJlbXB0eUZvbGRlckltYWdlVXJsXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FkZi1lbXB0eS1saXN0PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlLCBlbXB0eS1mb2xkZXItY29udGVudFwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9hZGYtbm8tY29udGVudC10ZW1wbGF0ZT5cblxuICAgIDxhZGYtbm8tcGVybWlzc2lvbi10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1wZXJtaXNzaW9uX190ZW1wbGF0ZVwiICpuZ0lmPVwiIWN1c3RvbU5vUGVybWlzc2lvbnNUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5lcnJvcjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhZGYtbm8tcGVybWlzc2lvbl9fdGVtcGxhdGUtLXRleHRcIj57eyAnQURGLURPQ1VNRU5ULUxJU1QuTk9fUEVSTUlTU0lPTicgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi1jdXN0b20tbm8tcGVybWlzc2lvbi10ZW1wbGF0ZSwgbm8tcGVybWlzc2lvbi1jb250ZW50XCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2FkZi1uby1wZXJtaXNzaW9uLXRlbXBsYXRlPlxuXG4gICAgPGFkZi1sb2FkaW5nLWNvbnRlbnQtdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZG9jdW1lbnQtbGlzdC1sb2FkaW5nLWNvbnRhaW5lclwiICpuZ0lmPVwiIWN1c3RvbUxvYWRpbmdDb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwiYWRmLWRvY3VtZW50LWxpc3QtbG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRvY3VtZW50LWxpc3QtbG9hZGluZy1tYXJnaW5cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBREYtRE9DVU1FTlQtTElTVC5MT0FERVJfTEFCRUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIidwcmltYXJ5J1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cIidpbmRldGVybWluYXRlJ1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi1jdXN0b20tbG9hZGluZy1jb250ZW50LXRlbXBsYXRlXCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2FkZi1sb2FkaW5nLWNvbnRlbnQtdGVtcGxhdGU+XG5cbiAgICA8YWRmLW1haW4tbWVudS1kYXRhdGFibGUtdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbWFpbk1lbnVUcmlnZ2VyPlxuICAgICAgICAgICAgPGFkZi1kYXRhdGFibGUtY29sdW1uLXNlbGVjdG9yXG4gICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgICAgICAgICBbbWFpbk1lbnVUcmlnZ2VyXT1cIm1haW5NZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgIFtjb2x1bW5zU29ydGluZ109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFttYXhDb2x1bW5zVmlzaWJsZV09XCJtYXhDb2x1bW5zVmlzaWJsZVwiXG4gICAgICAgICAgICAgIChzdWJtaXRDb2x1bW5zVmlzaWJpbGl0eSk9XCJvbkNvbHVtbnNWaXNpYmlsaXR5Q2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYWRmLW1haW4tbWVudS1kYXRhdGFibGUtdGVtcGxhdGU+XG5cbjwvYWRmLWRhdGF0YWJsZT5cbiJdfQ==
965
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2RvY3VtZW50LWxpc3QvY29tcG9uZW50cy9kb2N1bWVudC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvZG9jdW1lbnQtbGlzdC9jb21wb25lbnRzL2RvY3VtZW50LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsMENBQTBDO0FBQzFDLHlEQUF5RDtBQUV6RCxPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMscUNBQXFDLEVBQ3JDLG1DQUFtQyxFQUduQyx1QkFBdUIsRUFHdkIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQiwrQkFBK0IsRUFDL0Isa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFJN0IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3ZCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFtQixVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JGLE9BQU8sRUFFSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFJL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7OztBQUVoRSxNQUFNLDRCQUE0QixHQUFHLE9BQU8sQ0FBQztBQStCN0MsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGVBQWU7YUFDL0MsNEJBQXVCLEdBQVcsT0FBTyxBQUFsQixDQUFtQjthQUMxQyw0QkFBdUIsR0FBVyxVQUFVLEFBQXJCLENBQXNCO0lBd0pwRDs7OztPQUlHO0lBQ0gsSUFDSSxTQUFTLENBQUMsU0FBb0I7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQThDRCxrREFBa0Q7SUFDbEQsSUFDSSxvQkFBb0IsQ0FBQyxpQkFBOEQ7UUFDbkYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQy9DLENBQUM7SUFFRCw2Q0FBNkM7SUFDN0MsSUFDSSxnQkFBZ0IsQ0FBQyxhQUF5RDtRQUMxRSxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUN2QyxDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLElBQ0ksZUFBZSxDQUFDLFlBQWtDO1FBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFvR0QsSUFBSSxRQUFRO1FBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFDWSxtQkFBd0MsRUFDeEMsVUFBc0IsRUFDdEIsU0FBMkIsRUFDM0Isc0JBQThDLEVBQzlDLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNsQyxrQkFBc0MsRUFDdEMsV0FBNEIsRUFDNUIsZ0JBQWtDLEVBQ2xDLFdBQXdCLEVBQ3hCLE1BQWlCO1FBRXpCLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFaekMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBMVY3Qix1QkFBa0IsR0FBZSxJQUFJLFVBQVUsQ0FBQztZQUM1QyxZQUFZLEVBQUUsS0FBSztZQUNuQixTQUFTLEVBQUUsQ0FBQztZQUNaLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLENBQUM7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsb0JBQWUsR0FBa0IsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUF5QnZHOzs7O1dBSUc7UUFFSCxxQkFBZ0IsR0FBMkIsRUFBRSxDQUFDO1FBRTlDLDBFQUEwRTtRQUUxRSxtQkFBYyxHQUFXLEdBQUcsQ0FBQztRQUU3QiwyREFBMkQ7UUFFM0QsYUFBUSxHQUFZLElBQUksQ0FBQztRQUV6Qix5QkFBeUI7UUFFekIsZUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFFakM7OztXQUdHO1FBRUgsbUJBQWMsR0FBVyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLGlCQUFpQjtRQUV6RixpREFBaUQ7UUFFakQsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUU1Qjs7O1dBR0c7UUFFSCxrQkFBYSxHQUFXLFFBQVEsQ0FBQyxDQUFDLHVCQUF1QjtRQUV6RCwrQkFBK0I7UUFFL0IsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0IsMkNBQTJDO1FBRTNDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBRWhDLHNGQUFzRjtRQUV0RiwyQkFBc0IsR0FBVyxPQUFPLENBQUMsQ0FBQyxhQUFhO1FBRXZELHlDQUF5QztRQUV6Qyx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFcEMsd0ZBQXdGO1FBRXhGLHdCQUFtQixHQUFXLG1DQUFtQyxDQUFDO1FBRWxFOzs7Ozs7O1dBT0c7UUFFSCxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQzs7OztXQUlHO1FBRUgsWUFBTyxHQUEyQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVsRDs7OztXQUlHO1FBRUgsc0JBQWlCLEdBQWdCLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVyRTs7Ozs7O1dBTUc7UUFFSCxnQkFBVyxHQUF3QixRQUFRLENBQUM7UUFjNUM7Ozs7V0FJRztRQUVILFlBQU8sR0FBWSxLQUFLLENBQUM7UUFHekIsZUFBVSxHQUFxQixJQUFJLENBQUM7UUFzQnBDOzs7O1dBSUc7UUFFSCxrQkFBYSxHQUFlLElBQUksQ0FBQztRQUVqQyxzQ0FBc0M7UUFFdEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFFOUIsdUNBQXVDO1FBRXZDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBTS9CLDBGQUEwRjtRQUUxRixvQkFBZSxHQUFXLElBQUksQ0FBQztRQUUvQjs7OztXQUlHO1FBRUgsbUJBQWMsR0FBZ0IsRUFBRSxDQUFDO1FBRWpDLG1GQUFtRjtRQUVuRixTQUFJLEdBQWUsSUFBSSxDQUFDO1FBRXhCLDhHQUE4RztRQUU5RyxhQUFRLEdBQVcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztRQTRCcEQsNENBQTRDO1FBRTVDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixtREFBbUQ7UUFFbkQsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFcEIseURBQXlEO1FBRXpELDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUVqQyxrQ0FBa0M7UUFFbEMsMkJBQXNCLEdBQUcsSUFBSSxDQUFDO1FBRTlCLCtDQUErQztRQUUvQyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFaEQsc0RBQXNEO1FBRXRELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFbkQsc0RBQXNEO1FBRXRELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFbEQ7Ozs7V0FJRztRQUVILFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUU5QywrRUFBK0U7UUFFL0UsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFFdkMsK0RBQStEO1FBRS9ELFVBQUssR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRWhDLDZDQUE2QztRQUU3QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFFL0MsOENBQThDO1FBRTlDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFFckQsd0NBQXdDO1FBRXhDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUE4QyxDQUFDO1FBRXJGLDZDQUE2QztRQUU3Qyw2QkFBd0IsR0FBRyxJQUFJLFlBQVksRUFBK0MsQ0FBQztRQUUzRix3Q0FBd0M7UUFFeEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFFL0Qsc0VBQXNFO1FBRXRFLDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBS25FLFlBQU8sR0FBeUIsRUFBRSxDQUFDO1FBQ25DLHlCQUFvQixHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRW5ELGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGNBQVMsR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO1FBQ25DLGdCQUFXLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFDakQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsWUFBTyxHQUFhLElBQUksQ0FBQztRQUN6QixvQkFBZSxHQUFjLEVBQUUsQ0FBQztRQUt4QixnQkFBVyxHQUFvQixJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDL0QsZUFBVSxHQUFxQyxJQUFJLGVBQWUsQ0FBa0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0csbUJBQWMsR0FBbUMsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVsRyxpQkFBWSxHQUE0QyxFQUFFLENBQUM7UUFHbEQsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQXNCN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN2RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0JBQXNCO2FBQ3RCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUM7YUFDM0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBZTtRQUM3QixJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNkLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDdkQsS0FBSyxFQUFFLGFBQWE7b0JBQ3BCLElBQUk7b0JBQ0osT0FBTyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7aUJBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ1IsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksY0FBMkIsQ0FBQztRQUNoQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3RDLGNBQWMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDSixjQUFjLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLENBQUMsQ0FBQyxnRUFBZ0UsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLHFCQUFxQixDQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksRUFDSixJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFDeEIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FDdEIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXhILElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQzVDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDdEYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDOUYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckYsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMxRCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0QsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDOUMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFlBQVksS0FBSyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hELENBQUM7aUJBQU0sSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRSxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSztRQUM3QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLCtCQUErQixDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELCtCQUErQixDQUFDLGtCQUFrQixHQUFHLEtBQUs7UUFDdEQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBTTtRQUN4QixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQXFCO1FBQ2hDLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBRWxCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxHQUFHLFVBQVUsQ0FBQztZQUN4QixDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUN0QixDQUFDO1lBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pELElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO3dCQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDckMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxPQUFPLENBQUM7Z0JBQ25CLENBQUM7Z0JBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU87cUJBQy9CLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNkLE1BQU0sU0FBUyxHQUFHLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7b0JBRTVGLE9BQU8sU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUFDO2dCQUM5RCxDQUFDLENBQUM7cUJBQ0QsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBRXJELGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7Z0JBQ25ELE9BQU8sZUFBZSxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQTBCLEVBQUUsSUFBZTtRQUM3RCxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQTBCLEVBQUUsSUFBZTtRQUMvRCxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBMEIsRUFBRSxJQUFlO1FBQ2hFLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFDSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLHVCQUF1QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ3ZDLENBQUM7WUFDQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzQixDQUFDO0lBQ0wsQ0FBQztJQUdELGlCQUFpQixDQUFDLENBQVM7UUFDdkIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQW1CO1FBQzFCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDakYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNkLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLDBCQUEwQixDQUFDLElBQVU7UUFDekMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFVO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRU8sc0JBQXNCLENBQUMsTUFBYztRQUN6QyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxvQkFBb0IsQ0FBQyxJQUFlLEVBQUUsTUFBMEI7UUFDNUQsSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sVUFBVSxHQUFHLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVuSCxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxVQUFVLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ3JELFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMvRixDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBYztRQUNsQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1IsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDeEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2IsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsa0JBQWtCLEdBQUcsS0FBSztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztZQUN2RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUN2SSxDQUFDLFlBQWdDLEVBQUUsRUFBRTtZQUNqQyxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDSixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUFZLENBQUMsVUFBc0I7UUFDL0IsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzVFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ3JDLENBQUM7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFrQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRWpFLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxVQUFrQixFQUFFLGdCQUF3QjtRQUNsRSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLFVBQVUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDdEgsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFlO1FBQ3pCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEdBQUcsNEJBQTRCLENBQUM7WUFDakYsTUFBTSxvQkFBb0IsR0FBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRyxNQUFNLGFBQWEsR0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVqRyxJQUFJLG9CQUFvQixJQUFJLFFBQVEsSUFBSSxRQUFRLEdBQUcsYUFBYSxFQUFFLENBQUM7Z0JBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNwRixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxPQUFxQjtRQUMzQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2xFLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDaEMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUNwRCxDQUFDO1lBRUQsT0FBTyxpQkFBaUIsQ0FBQztRQUM3QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELG1CQUFtQixDQUFDLG1CQUFpQztRQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBcUI7UUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDakUsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFDRCxPQUFPLGdCQUFnQixDQUFDO1FBQzVCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3BFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsMkJBQTJCLENBQUMsS0FBYTtRQUNyQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxXQUFXLENBQUMsU0FBb0I7UUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFO1lBQzNDLE1BQU0sRUFBRTtnQkFDSixNQUFNLEVBQUUsSUFBSTtnQkFDWixJQUFJLEVBQUUsU0FBUzthQUNsQjtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0RCxNQUFNLEtBQUssR0FBRyxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUsscUJBQXFCLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFDekYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFvQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUU7WUFDOUMsTUFBTSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxJQUFJO2dCQUNaLElBQUksRUFBRSxTQUFTO2FBQ2xCO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXRELE1BQU0sS0FBSyxHQUFHLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUN6RixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBb0I7UUFDbkMsSUFBSSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDbkIsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxPQUFPLEdBQUc7b0JBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhO2lCQUM5QixDQUFDO2dCQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBZSxFQUFFLEVBQUU7b0JBQzdFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUE0RDtRQUNyRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFO1lBQzVDLE1BQU0sRUFBRTtnQkFDSixJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3ZDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUM1QjtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUE0RDtRQUN2RSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFO1lBQzlDLE1BQU0sRUFBRTtnQkFDSixJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3ZDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUM1QjtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQW9CO1FBQ3JDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUMzQixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0RCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFvQjtRQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzNCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuRCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUF5QjtRQUN4QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzNCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHFDQUFxQztRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcscUJBQXFCLENBQUMsdUJBQXVCLENBQUM7UUFDeEUsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFVO1FBQ3hCLElBQUksaUJBQWlCLEdBQVksS0FBSyxDQUFDO1FBRXZDLElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO1FBRUQsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRU8sV0FBVyxDQUFDLFVBQXNCO1FBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGdCQUFnQixDQUFDLHNCQUE4QztRQUMzRCxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxRQUFRLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDO1FBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLGNBQWM7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO0lBQ3JFLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxhQUE2QjtRQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsd0JBQXdCO1FBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzlDLENBQUM7SUFFTyxXQUFXLENBQUMsR0FBUTtRQUN4QixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFLENBQUM7b0JBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2IsV0FBVztZQUNmLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsdUNBQXVDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3SCxDQUFDO0lBRUQsc0NBQXNDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5SCxDQUFDO0lBRUQsZ0NBQWdDO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFvQixDQUFDO1lBRWhFLEtBQUssTUFBTSxJQUFJLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO0lBQ0wsQ0FBQztJQUVPLHlCQUF5QjtRQUM3QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUM7WUFDakMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ2pCLGNBQWMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsK0JBQStCO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVDQUF1QyxFQUFFLENBQUM7UUFFeEUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsZUFBMEIsRUFBRSxFQUFFO1lBQ3BELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRixJQUFJLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3ZCLG9CQUFvQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQWM7UUFDaEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsSUFBSSxhQUFhLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDNUIsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsRUFBb0IsQ0FBQztZQUM1RSxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDTCxDQUFDO0lBRU8scUJBQXFCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLENBQUM7SUFDM0MsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixPQUFPLElBQUksQ0FBQyxhQUFhLEtBQUssVUFBVSxDQUFDO0lBQzdDLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDOytHQTEvQlEscUJBQXFCO21HQUFyQixxQkFBcUIsMjJEQVZuQjtZQUNQO2dCQUNJLE9BQU8sRUFBRSw2QkFBNkI7Z0JBQ3RDLFdBQVcsRUFBRSxxQkFBcUI7YUFDckM7WUFDRCxnQkFBZ0I7U0FDbkIsa0VBaUJhLHVCQUF1Qix1RkFHdkIscUNBQXFDLDhGQUdyQyxtQ0FBbUMsMEZBR25DLG1DQUFtQyxrTkMvSXJELHF4SUE0RkEsNnJIRElRLFlBQVksbUlBQ1osa0JBQWtCLDBzQkFDbEIscUJBQXFCLGtJQUNyQiwwQkFBMEIseUZBQzFCLGtCQUFrQixzREFDbEIsYUFBYSxrREFDYiw2QkFBNkIsOEZBQzdCLGFBQWEsb0xBQ2IsK0JBQStCLGtHQUMvQix3QkFBd0IsbU9BQ3hCLGtDQUFrQyw2RUFDbEMsd0JBQXdCOzs0RkFjbkIscUJBQXFCO2tCQTdCakMsU0FBUzsrQkFDSSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLDZCQUE2Qjt3QkFDN0IsYUFBYTt3QkFDYiwrQkFBK0I7d0JBQy9CLHdCQUF3Qjt3QkFDeEIsa0NBQWtDO3dCQUNsQyx3QkFBd0I7cUJBQzNCLGFBR1U7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLDZCQUE2Qjs0QkFDdEMsV0FBVyx1QkFBdUI7eUJBQ3JDO3dCQUNELGdCQUFnQjtxQkFDbkIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtpWUFnQnBDLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBSXJDLG9CQUFvQjtzQkFEbkIsWUFBWTt1QkFBQyxxQ0FBcUM7Z0JBSW5ELDJCQUEyQjtzQkFEMUIsWUFBWTt1QkFBQyxtQ0FBbUM7Z0JBSWpELHVCQUF1QjtzQkFEdEIsWUFBWTt1QkFBQyxtQ0FBbUM7Z0JBS2pELGFBQWE7c0JBRFosS0FBSztnQkFRTixLQUFLO3NCQURKLEtBQUs7Z0JBU04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixVQUFVO3NCQURULEtBQUs7Z0JBUU4sY0FBYztzQkFEYixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFRTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixzQkFBc0I7c0JBRHJCLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFZTixjQUFjO3NCQURiLEtBQUs7Z0JBU04sT0FBTztzQkFETixLQUFLO2dCQVNOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFXTixXQUFXO3NCQURWLEtBQUs7Z0JBU04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFTTixPQUFPO3NCQUROLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQVNGLFNBQVM7c0JBRFosS0FBSztnQkFxQk4sYUFBYTtzQkFEWixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFTTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFLRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBT0YsZ0JBQWdCO3NCQURuQixLQUFLO2dCQU9GLGVBQWU7c0JBRGxCLEtBQUs7Z0JBT04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFLTixTQUFTO3NCQURSLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFTUCxPQUFPO3NCQUROLE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNO2dCQUtQLEtBQUs7c0JBREosTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBS1AsZUFBZTtzQkFEZCxNQUFNO2dCQUtQLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFLUCx3QkFBd0I7c0JBRHZCLE1BQU07Z0JBS1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQUtQLHlCQUF5QjtzQkFEeEIsTUFBTTtnQkFJUCxTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkEwUnhDLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIHJ4anMvbm8tc3ViamVjdC12YWx1ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uICovXG5cbmltcG9ydCB7XG4gICAgQXBwQ29uZmlnU2VydmljZSxcbiAgICBDb2x1bW5zU2VsZWN0b3JDb21wb25lbnQsXG4gICAgQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQ3VzdG9tTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBDdXN0b21Ob1Blcm1pc3Npb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBEYXRhQ2VsbEV2ZW50LFxuICAgIERhdGFDb2x1bW4sXG4gICAgRGF0YUNvbHVtbkxpc3RDb21wb25lbnQsXG4gICAgRGF0YVJvdyxcbiAgICBEYXRhUm93QWN0aW9uRXZlbnQsXG4gICAgRGF0YVNvcnRpbmcsXG4gICAgRGF0YVRhYmxlQ29tcG9uZW50LFxuICAgIERhdGFUYWJsZVNjaGVtYSxcbiAgICBEYXRhVGFibGVTZXJ2aWNlLFxuICAgIEVtcHR5TGlzdENvbXBvbmVudCxcbiAgICBMb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE1haW5NZW51RGF0YVRhYmxlVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTm9Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTm9QZXJtaXNzaW9uVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgUGFnaW5hdGVkQ29tcG9uZW50LFxuICAgIFBhZ2luYXRpb25Nb2RlbCxcbiAgICBSZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLFxuICAgIFNob3dIZWFkZXJNb2RlLFxuICAgIFRodW1ibmFpbFNlcnZpY2UsXG4gICAgVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICBVc2VyUHJlZmVyZW5jZVZhbHVlc1xufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgTm9kZSwgTm9kZUVudHJ5LCBOb2RlUGFnaW5nLCBOb2Rlc0FwaSwgUGFnaW5hdGlvbiB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlLCBOb2Rlc0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuaW1wb3J0IHsgRmlsdGVyU2VhcmNoIH0gZnJvbSAnLi4vLi4vc2VhcmNoJztcbmltcG9ydCB7IFJvd0ZpbHRlciB9IGZyb20gJy4uL2RhdGEvcm93LWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBTaGFyZURhdGFSb3cgfSBmcm9tICcuLi9kYXRhL3NoYXJlLWRhdGEtcm93Lm1vZGVsJztcbmltcG9ydCB7IFNoYXJlRGF0YVRhYmxlQWRhcHRlciB9IGZyb20gJy4uL2RhdGEvc2hhcmUtZGF0YXRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgQ29udGVudEFjdGlvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbnRlbnQtYWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IERvY3VtZW50TG9hZGVyTm9kZSB9IGZyb20gJy4uL21vZGVscy9kb2N1bWVudC1mb2xkZXIubW9kZWwnO1xuaW1wb3J0IHsgUGVybWlzc2lvblN0eWxlTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvcGVybWlzc2lvbnMtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgcHJlc2V0c0RlZmF1bHRNb2RlbCB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQubW9kZWwnO1xuaW1wb3J0IHsgRG9jdW1lbnRMaXN0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RvY3VtZW50LWxpc3Quc2VydmljZSc7XG5pbXBvcnQgeyBMb2NrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2suc2VydmljZSc7XG5pbXBvcnQgeyBBREZfRE9DVU1FTlRfUEFSRU5UX0NPTVBPTkVOVCB9IGZyb20gJy4vZG9jdW1lbnQtbGlzdC50b2tlbic7XG5pbXBvcnQgeyBGaWxlQXV0b0Rvd25sb2FkQ29tcG9uZW50IH0gZnJvbSAnLi9maWxlLWF1dG8tZG93bmxvYWQvZmlsZS1hdXRvLWRvd25sb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb2RlRW50aXR5RXZlbnQsIE5vZGVFbnRyeUV2ZW50IH0gZnJvbSAnLi9ub2RlLmV2ZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXJIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2ZpbHRlci1oZWFkZXIvZmlsdGVyLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBBbGZyZXNjb0FwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hbGZyZXNjby1hcGkuc2VydmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmNvbnN0IEJZVEVTX1RPX01CX0NPTlZFUlNJT05fVkFMVUUgPSAxMDQ4NTc2O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1kb2N1bWVudC1saXN0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBEYXRhVGFibGVDb21wb25lbnQsXG4gICAgICAgIEZpbHRlckhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgTm9Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIEVtcHR5TGlzdENvbXBvbmVudCxcbiAgICAgICAgVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTm9QZXJtaXNzaW9uVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIExvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWFpbk1lbnVEYXRhVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgQ29sdW1uc1NlbGVjdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBREZfRE9DVU1FTlRfUEFSRU5UX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBEb2N1bWVudExpc3RDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgRGF0YVRhYmxlU2VydmljZVxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7IGNsYXNzOiAnYWRmLWRvY3VtZW50LWxpc3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRMaXN0Q29tcG9uZW50IGV4dGVuZHMgRGF0YVRhYmxlU2NoZW1hIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIFBhZ2luYXRlZENvbXBvbmVudCB7XG4gICAgc3RhdGljIFNJTkdMRV9DTElDS19OQVZJR0FUSU9OOiBzdHJpbmcgPSAnY2xpY2snO1xuICAgIHN0YXRpYyBET1VCTEVfQ0xJQ0tfTkFWSUdBVElPTjogc3RyaW5nID0gJ2RibGNsaWNrJztcblxuICAgIERFRkFVTFRfUEFHSU5BVElPTjogUGFnaW5hdGlvbiA9IG5ldyBQYWdpbmF0aW9uKHtcbiAgICAgICAgaGFzTW9yZUl0ZW1zOiBmYWxzZSxcbiAgICAgICAgc2tpcENvdW50OiAwLFxuICAgICAgICBtYXhJdGVtczogMjUsXG4gICAgICAgIHRvdGFsSXRlbXM6IDBcbiAgICB9KTtcblxuICAgIERFRkFVTFRfU09SVElORzogRGF0YVNvcnRpbmdbXSA9IFtuZXcgRGF0YVNvcnRpbmcoJ25hbWUnLCAnYXNjJyksIG5ldyBEYXRhU29ydGluZygnaXNGb2xkZXInLCAnZGVzYycpXTtcblxuICAgIEBDb250ZW50Q2hpbGQoRGF0YUNvbHVtbkxpc3RDb21wb25lbnQpXG4gICAgY29sdW1uTGlzdDogRGF0YUNvbHVtbkxpc3RDb21wb25lbnQ7XG5cbiAgICBAQ29udGVudENoaWxkKEN1c3RvbUxvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tTG9hZGluZ0NvbnRlbnQ6IEN1c3RvbUxvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKEN1c3RvbU5vUGVybWlzc2lvblRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIGN1c3RvbU5vUGVybWlzc2lvbnNUZW1wbGF0ZTogQ3VzdG9tTm9QZXJtaXNzaW9uVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKEN1c3RvbUVtcHR5Q29udGVudFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIGN1c3RvbU5vQ29udGVudFRlbXBsYXRlOiBDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICAgIC8qKiBJbmNsdWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUgaW4gdGhlIHNlcnZlciByZXF1ZXN0LiBGb3IgZXhhbXBsZTogYXNzb2NpYXRpb24sIGlzTGluaywgaXNMb2NrZWQgYW5kIG90aGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGluY2x1ZGVGaWVsZHM6IHN0cmluZ1tdO1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVycyB0aGUgTm9kZSBsaXN0IHVzaW5nIHRoZSAqd2hlcmUqIGNvbmRpdGlvbiBvZiB0aGUgUkVTVCBBUElcbiAgICAgKiAoZm9yIGV4YW1wbGUsIGlzRm9sZGVyPXRydWUpLiBTZWUgdGhlIFJFU1QgQVBJIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB3aGVyZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIGEgc2V0IG9mIENTUyBzdHlsZXMgdG8gYXBwbHkgZGVwZW5kaW5nIG9uIHRoZSBwZXJtaXNzaW9uXG4gICAgICogb2YgdGhlIHVzZXIgb24gdGhhdCBub2RlLiBTZWUgdGhlIFBlcm1pc3Npb24gU3R5bGUgbW9kZWxcbiAgICAgKiBwYWdlIGZvciBmdXJ0aGVyIGRldGFpbHMgYW5kIGV4YW1wbGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGVybWlzc2lvbnNTdHlsZTogUGVybWlzc2lvblN0eWxlTW9kZWxbXSA9IFtdO1xuXG4gICAgLyoqIFRoZSBkZWZhdWx0IHJvdXRlIGZvciBhbGwgdGhlIGxvY2F0aW9uLWJhc2VkIGNvbHVtbnMgKGlmIGRlY2xhcmVkKS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvY2F0aW9uRm9ybWF0OiBzdHJpbmcgPSAnLyc7XG5cbiAgICAvKiogVG9nZ2xlcyBuYXZpZ2F0aW9uIHRvIGZvbGRlciBjb250ZW50IG9yIGZpbGUgcHJldmlldyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGhlYWRlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0hlYWRlciA9IFNob3dIZWFkZXJNb2RlLkRhdGE7XG5cbiAgICAvKipcbiAgICAgKiBVc2VyIGludGVyYWN0aW9uIGZvciBmb2xkZXIgbmF2aWdhdGlvbiBvciBmaWxlIHByZXZpZXcuXG4gICAgICogVmFsaWQgdmFsdWVzIGFyZSBcImNsaWNrXCIgYW5kIFwiZGJsY2xpY2tcIi4gRGVmYXVsdCB2YWx1ZTogXCJkYmxjbGlja1wiXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBuYXZpZ2F0aW9uTW9kZTogc3RyaW5nID0gRG9jdW1lbnRMaXN0Q29tcG9uZW50LkRPVUJMRV9DTElDS19OQVZJR0FUSU9OOyAvLyBjbGlja3xkYmxjbGlja1xuXG4gICAgLyoqIFNob3cgZG9jdW1lbnQgdGh1bWJuYWlscyByYXRoZXIgdGhhbiBpY29ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGh1bWJuYWlsczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUm93IHNlbGVjdGlvbiBtb2RlLiBDYW4gYmUgbnVsbCwgYHNpbmdsZWAgb3IgYG11bHRpcGxlYC4gRm9yIGBtdWx0aXBsZWAgbW9kZSxcbiAgICAgKiB5b3UgY2FuIHVzZSBDbWQgKG1hY09TKSBvciBDdHJsIChXaW4pIG1vZGlmaWVyIGtleSB0byB0b2dnbGUgc2VsZWN0aW9uIGZvciBtdWx0aXBsZSByb3dzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogc3RyaW5nID0gJ3NpbmdsZSc7IC8vIG51bGx8c2luZ2xlfG11bHRpcGxlXG5cbiAgICAvKiogVG9nZ2xlcyBtdWx0aXNlbGVjdCBtb2RlICovXG4gICAgQElucHV0KClcbiAgICBtdWx0aXNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgY29udGVudCBhY3Rpb25zIGZvciBlYWNoIHJvdyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29udGVudEFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBQb3NpdGlvbiBvZiB0aGUgY29udGVudCBhY3Rpb25zIGRyb3Bkb3duIG1lbnUuIENhbiBiZSBzZXQgdG8gXCJsZWZ0XCIgb3IgXCJyaWdodFwiLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29udGVudEFjdGlvbnNQb3NpdGlvbjogc3RyaW5nID0gJ3JpZ2h0JzsgLy8gbGVmdHxyaWdodFxuXG4gICAgLyoqIFRvZ2dsZXMgY29udGV4dCBtZW51cyBmb3IgZWFjaCByb3cgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRleHRNZW51QWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEN1c3RvbSBpbWFnZSBmb3IgZW1wdHkgZm9sZGVyLiBEZWZhdWx0IHZhbHVlOiAnLi9hc3NldHMvaW1hZ2VzL2VtcHR5X2RvY19saWIuc3ZnJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW1wdHlGb2xkZXJJbWFnZVVybDogc3RyaW5nID0gJy4vYXNzZXRzL2ltYWdlcy9lbXB0eV9kb2NfbGliLnN2Zyc7XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHRydWUsIHRoaXMgZW5hYmxlcyB5b3UgdG8gZHJvcCBmaWxlcyBkaXJlY3RseSBpbnRvIHN1YmZvbGRlcnMgc2hvd25cbiAgICAgKiBhcyBpdGVtcyBpbiB0aGUgbGlzdCBvciBpbnRvIGFub3RoZXIgZmlsZSB0byB0cmlnZ2VyIHVwZGF0aW5nIGl0J3MgdmVyc2lvbi5cbiAgICAgKiBXaGVuIGZhbHNlLCB0aGUgZHJvcHBlZCBmaWxlIHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gICAgICogY3VycmVudCBmb2xkZXIgKGllLCB0aGUgb25lIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBzaG93biBpbiB0aGUgbGlzdCkuXG4gICAgICogU2VlIHRoZSBVcGxvYWQgZGlyZWN0aXZlIGZvciBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgaG93IHRoZSBmaWxlIGRyb3AgaXNcbiAgICAgKiBoYW5kbGVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dEcm9wRmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZGVmYXVsdCBzb3J0aW5nLiBUaGUgZm9ybWF0IGlzIGFuIGFycmF5IG9mIDIgc3RyaW5ncyBgW2tleSwgZGlyZWN0aW9uXWBcbiAgICAgKiBpLmUuIGBbJ25hbWUnLCAnZGVzYyddYCBvciBgWyduYW1lJywgJ2FzYyddYC4gU2V0IHRoaXMgdmFsdWUgb25seSBpZiB5b3Ugd2FudCB0b1xuICAgICAqIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNvcnRpbmcgZGV0ZWN0ZWQgYnkgdGhlIGNvbXBvbmVudCBiYXNlZCBvbiBjb2x1bW5zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc29ydGluZzogc3RyaW5nW10gfCBEYXRhU29ydGluZyA9IFsnbmFtZScsICdhc2MnXTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgZGVmYXVsdCBzb3J0aW5nLiBUaGUgZm9ybWF0IGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgYFtrZXkgZGlyZWN0aW9uLCBvdGhlcktleSBvdGhlckRpcmVjdGlvbl1gXG4gICAgICogaS5lLiBgWyduYW1lIGRlc2MnLCAnbm9kZVR5cGUgYXNjJ11gIG9yIGBbJ25hbWUgYXNjJ11gLiBTZXQgdGhpcyB2YWx1ZSBpZiB5b3Ugd2FudCBhIGJhc2VcbiAgICAgKiBydWxlIHRvIGJlIGFkZGVkIHRvIHRoZSBzb3J0aW5nIGFwYXJ0IGZyb20gdGhlIG9uZSBkcml2ZW4gYnkgdGhlIGhlYWRlci5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFkZGl0aW9uYWxTb3J0aW5nOiBEYXRhU29ydGluZyA9IG5ldyBEYXRhU29ydGluZygnaXNGb2xkZXInLCAnZGVzYycpO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBzb3J0aW5nIG1vZGUuIENhbiBiZSBlaXRoZXIgYGNsaWVudGAgKGl0ZW1zIGluIHRoZSBsaXN0XG4gICAgICogYXJlIHNvcnRlZCBjbGllbnQtc2lkZSkgb3IgYHNlcnZlcmAgKHRoZSBvcmRlcmluZyBzdXBwbGllZCBieSB0aGVcbiAgICAgKiBzZXJ2ZXIgaXMgdXNlZCB3aXRob3V0IGZ1cnRoZXIgY2xpZW50LXNpZGUgc29ydGluZykuXG4gICAgICogTm90ZSB0aGF0IHRoZSBgc2VydmVyYCBvcHRpb24gKmRvZXMgbm90KiByZXF1ZXN0IHRoZSBzZXJ2ZXIgdG8gc29ydCB0aGUgZGF0YVxuICAgICAqIGJlZm9yZSBkZWxpdmVyaW5nIGl0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc29ydGluZ01vZGU6ICdzZXJ2ZXInIHwgJ2NsaWVudCcgPSAnc2VydmVyJztcblxuICAgIC8qKlxuICAgICAqIFRoZSBpbmxpbmUgc3R5bGUgdG8gYXBwbHkgdG8gZXZlcnkgcm93LiBTZWVcbiAgICAgKiB0aGUgQW5ndWxhciBOZ1N0eWxlXG4gICAgICogZG9jcyBmb3IgbW9yZSBkZXRhaWxzIGFuZCB1c2FnZSBleGFtcGxlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd1N0eWxlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gICAgLyoqIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gZXZlcnkgcm93ICovXG4gICAgQElucHV0KClcbiAgICByb3dTdHlsZUNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSBsb2FkaW5nIHN0YXRlIGFuZCBhbmltYXRlZCBzcGlubmVycyBmb3IgdGhlIGNvbXBvbmVudC4gVXNlZCBpblxuICAgICAqIGNvbWJpbmF0aW9uIHdpdGggYG5hdmlnYXRlPWZhbHNlYCB0byBwZXJmb3JtIGN1c3RvbSBuYXZpZ2F0aW9uIGFuZCBsb2FkaW5nXG4gICAgICogc3RhdGUgaW5kaWNhdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgX3Jvd0ZpbHRlcjogUm93RmlsdGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gZnVuY3Rpb24gdG8gY2hvb3NlIHdoZXRoZXIgdG8gc2hvdyBvciBoaWRlIHJvd3MuXG4gICAgICogU2VlIHRoZSBbUm93IEZpbHRlciBNb2RlbF0ocm93LWZpbHRlci5tb2RlbC5tZCkgcGFnZSBmb3JcbiAgICAgKiBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJvd0ZpbHRlcihyb3dGaWx0ZXI6IFJvd0ZpbHRlcikge1xuICAgICAgICB0aGlzLl9yb3dGaWx0ZXIgPSByb3dGaWx0ZXI7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRGaWx0ZXIodGhpcy5fcm93RmlsdGVyKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2xkZXJJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgcm93RmlsdGVyKCk6IFJvd0ZpbHRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dGaWx0ZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGZ1bmN0aW9uIHRvIGNob29zZSBpbWFnZSBmaWxlIHBhdGhzIHRvIHNob3cuIFNlZSB0aGVcbiAgICAgKiBbSW1hZ2UgUmVzb2x2ZXIgTW9kZWxdKGltYWdlLXJlc29sdmVyLm1vZGVsLm1kKSBwYWdlIGZvclxuICAgICAqIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpbWFnZVJlc29sdmVyOiBhbnkgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBzdGlja3kgaGVhZGVyIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzdGlja3lIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBoZWFkZXIgZmlsdGVycyBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVyRmlsdGVyczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEluaXRpYWwgdmFsdWUgZm9yIGZpbHRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbHRlclZhbHVlOiBhbnk7XG5cbiAgICAvKiogVGhlIElEIG9mIHRoZSBmb2xkZXIgbm9kZSB0byBkaXNwbGF5IG9yIGEgcmVzZXJ2ZWQgc3RyaW5nIGFsaWFzIGZvciBzcGVjaWFsIHNvdXJjZXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGN1cnJlbnRGb2xkZXJJZDogc3RyaW5nID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIG5vZGVzIHRvIGJlIHByZS1zZWxlY3RlZC4gQWxsIG5vZGVzIGluIHRoZVxuICAgICAqIGFycmF5IGFyZSBwcmUtc2VsZWN0ZWQgaW4gbXVsdGkgc2VsZWN0aW9uIG1vZGUsIGJ1dCBvbmx5IHRoZSBmaXJzdCBub2RlXG4gICAgICogaXMgcHJlLXNlbGVjdGVkIGluIHNpbmdsZSBzZWxlY3Rpb24gbW9kZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByZXNlbGVjdE5vZGVzOiBOb2RlRW50cnlbXSA9IFtdO1xuXG4gICAgLyoqIFRoZSBEb2N1bWVudCBsaXN0IHdpbGwgc2hvdyBhbGwgdGhlIG5vZGVzIGNvbnRhaW5lZCBpbiB0aGUgTm9kZVBhZ2luZyBlbnRpdHkgKi9cbiAgICBASW5wdXQoKVxuICAgIG5vZGU6IE5vZGVQYWdpbmcgPSBudWxsO1xuXG4gICAgLyoqIERlZmF1bHQgdmFsdWUgaXMgc3RvcmVkIGluIHRoZSB1c2VyIHByZWZlcmVuY2Ugc2V0dGluZ3MuIFVzZSB0aGlzIG9ubHkgaWYgeW91IGFyZSBub3QgdXNpbmcgcGFnaW5hdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEl0ZW1zOiBudW1iZXIgPSB0aGlzLkRFRkFVTFRfUEFHSU5BVElPTi5tYXhJdGVtcztcblxuICAgIC8qKiBLZXkgb2YgY29sdW1ucyBwcmVzZXQgc2V0IGluIGV4dGVuc2lvbi5qc29uICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uc1ByZXNldEtleT86IHN0cmluZztcblxuICAgIC8qKiBTZXRzIGNvbHVtbnMgdmlzaWJpbGl0eSBmb3IgRGF0YVRhYmxlU2NoZW1hICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2V0Q29sdW1uc1Zpc2liaWxpdHkoY29sdW1uc1Zpc2liaWxpdHk6IHsgW2NvbHVtbklkOiBzdHJpbmddOiBib29sZWFuIH0gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eSA9IGNvbHVtbnNWaXNpYmlsaXR5O1xuICAgIH1cblxuICAgIC8qKiBTZXRzIGNvbHVtbnMgd2lkdGggZm9yIERhdGFUYWJsZVNjaGVtYSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNldENvbHVtbnNXaWR0aHMoY29sdW1uc1dpZHRoczogeyBbY29sdW1uSWQ6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuY29sdW1uc1dpZHRocyA9IGNvbHVtbnNXaWR0aHM7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgY29sdW1ucyBvcmRlciBmb3IgRGF0YVRhYmxlU2NoZW1hICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2V0Q29sdW1uc09yZGVyKGNvbHVtbnNPcmRlcjogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zT3JkZXIgPSBjb2x1bW5zT3JkZXI7XG4gICAgfVxuXG4gICAgLyoqIExpbWl0IG9mIHBvc3NpYmxlIHZpc2libGUgY29sdW1ucywgaW5jbHVkaW5nIFwiJHRodW1ibmFpbFwiIGNvbHVtbiBpZiBwcm92aWRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4Q29sdW1uc1Zpc2libGU/OiBudW1iZXI7XG5cbiAgICAvKiogRW5hYmxlcyBjb2x1bW4gcmVzaXppbmcgZm9yIGRhdGF0YWJsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNSZXNpemluZ0VuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBFbmFibGVzIGJsdXIgd2hlbiByZXNpemluZyBkYXRhdGFibGUgY29sdW1ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgYmx1ck9uUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKiBEaXNwbGF5IGNoZWNrYm94ZXMgaW4gZGF0YXRhYmxlIHJvd3Mgb24gaG92ZXIgb25seSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUNoZWNrYm94ZXNPbkhvdmVyID0gZmFsc2U7XG5cbiAgICAvKiogRGlzcGxheSBkcmFnIGFuZCBkcm9wIGhpbnQuICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5RHJhZ0FuZERyb3BIaW50ID0gdHJ1ZTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGEgbGlzdCBub2RlICovXG4gICAgQE91dHB1dCgpXG4gICAgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlRW50aXR5RXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGRvdWJsZS1jbGlja3MgYSBsaXN0IG5vZGUgKi9cbiAgICBAT3V0cHV0KClcbiAgICBub2RlRGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRpdHlFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGN1cnJlbnQgZGlzcGxheSBmb2xkZXIgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvbGRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJ5RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgYWN0cyB1cG9uIGZpbGVzIHdpdGggZWl0aGVyIHNpbmdsZSBvciBkb3VibGUgY2xpY2tcbiAgICAgKiAoZGVwZW5kcyBvbiBgbmF2aWdhdGlvbi1tb2RlYCkuIFVzZWZ1bCBmb3IgaW50ZWdyYXRpb24gd2l0aCB0aGVcbiAgICAgKiBWaWV3ZXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByZXZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRpdHlFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIERvY3VtZW50IExpc3QgaGFzIGxvYWRlZCBhbGwgaXRlbXMgYW5kIGlzIHJlYWR5IGZvciB1c2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZVBhZ2luZz4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIEFQSSBmYWlscyB0byBnZXQgdGhlIERvY3VtZW50IExpc3QgZGF0YSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBub2RlIHNlbGVjdGlvbiBjaGFuZ2UgKi9cbiAgICBAT3V0cHV0KClcbiAgICBub2RlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRyeVtdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBhIGZpbHRlciB2YWx1ZSBpcyBzZWxlY3RlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZpbHRlclNlbGVjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyU2VhcmNoW10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGNvbHVtbiB3aWR0aHMgY2hhbmdlICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uc1dpZHRoQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBbY29sdW1uSWQ6IHN0cmluZ106IG51bWJlciB9IHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBjb2x1bW5zIHZpc2liaWxpdHkgY2hhbmdlICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uc1Zpc2liaWxpdHlDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtjb2x1bW5JZDogc3RyaW5nXTogYm9vbGVhbiB9IHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBjb2x1bW5zIG9yZGVyIGNoYW5nZSAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNvbHVtbnNPcmRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgcm93IGl0ZW1zIGNvdW50IGluIHRoZSB0YWJsZSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IHVuZGVmaW5lZD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2RhdGFUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgZGF0YVRhYmxlOiBEYXRhVGFibGVDb21wb25lbnQ7XG5cbiAgICBhY3Rpb25zOiBDb250ZW50QWN0aW9uTW9kZWxbXSA9IFtdO1xuICAgIGNvbnRleHRBY3Rpb25IYW5kbGVyOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIGRhdGE6IFNoYXJlRGF0YVRhYmxlQWRhcHRlcjtcbiAgICBub1Blcm1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBzZWxlY3Rpb24gPSBuZXcgQXJyYXk8Tm9kZUVudHJ5PigpO1xuICAgICRmb2xkZXJOb2RlOiBTdWJqZWN0PE5vZGU+ID0gbmV3IFN1YmplY3Q8Tm9kZT4oKTtcbiAgICBhbGxvd0ZpbHRlcmluZzogYm9vbGVhbiA9IHRydWU7XG4gICAgb3JkZXJCeTogc3RyaW5nW10gPSBudWxsO1xuICAgIHByZXNlbGVjdGVkUm93czogRGF0YVJvd1tdID0gW107XG5cbiAgICAvLyBAZGVwcmVjYXRlZCAzLjAuMFxuICAgIGZvbGRlck5vZGU6IE5vZGU7XG5cbiAgICBwcml2YXRlIF9wYWdpbmF0aW9uOiBQYWdpbmF0aW9uTW9kZWwgPSB0aGlzLkRFRkFVTFRfUEFHSU5BVElPTjtcbiAgICBwYWdpbmF0aW9uOiBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbk1vZGVsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbk1vZGVsPih0aGlzLkRFRkFVTFRfUEFHSU5BVElPTik7XG4gICAgc29ydGluZ1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxEYXRhU29ydGluZ1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvcnRpbmdbXT4odGhpcy5ERUZBVUxUX1NPUlRJTkcpO1xuXG4gICAgcHJpdmF0ZSByb3dNZW51Q2FjaGU6IHsgW2tleTogc3RyaW5nXTogQ29udGVudEFjdGlvbk1vZGVsW10gfSA9IHt9O1xuICAgIHByaXZhdGUgbG9hZGluZ1RpbWVvdXQ6IGFueTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIHByaXZhdGUgX25vZGVzQXBpOiBOb2Rlc0FwaTtcbiAgICBnZXQgbm9kZXNBcGkoKTogTm9kZXNBcGkge1xuICAgICAgICB0aGlzLl9ub2Rlc0FwaSA9IHRoaXMuX25vZGVzQXBpID8/IG5ldyBOb2Rlc0FwaSh0aGlzLmFsZnJlc2NvQXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzQXBpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGRvY3VtZW50TGlzdFNlcnZpY2U6IERvY3VtZW50TGlzdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdGh1bWJuYWlsU2VydmljZTogVGh1bWJuYWlsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhbGZyZXNjb0FwaVNlcnZpY2U6IEFsZnJlc2NvQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub2RlU2VydmljZTogTm9kZXNBcGlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRhdGFUYWJsZVNlcnZpY2U6IERhdGFUYWJsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbG9ja1NlcnZpY2U6IExvY2tTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGFwcENvbmZpZywgJ2RlZmF1bHQnLCBwcmVzZXRzRGVmYXVsdE1vZGVsKTtcbiAgICAgICAgdGhpcy5ub2RlU2VydmljZS5ub2RlVXBkYXRlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlU2VydmljZS5yb3dVcGRhdGUubmV4dCh7IGlkOiBub2RlLmlkLCBvYmo6IHsgZW50cnk6IG5vZGUgfSB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG4gICAgICAgICAgICAuc2VsZWN0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLlBhZ2luYXRpb25TaXplKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChwYWdTaXplKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXhJdGVtcyA9IHRoaXMuX3BhZ2luYXRpb24ubWF4SXRlbXMgPSBwYWdTaXplO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0Q29udGV4dEFjdGlvbnMobm9kZTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGlmIChub2RlPy5lbnRyeSkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuZ2V0Tm9kZUFjdGlvbnMobm9kZSk7XG4gICAgICAgICAgICBpZiAoYWN0aW9ucyAmJiBhY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9ucy5tYXAoKGN1cnJlbnRBY3Rpb246IENvbnRlbnRBY3Rpb25Nb2RlbCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IGN1cnJlbnRBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3Q6IHRoaXMuY29udGV4dEFjdGlvbkhhbmRsZXJcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0U29ydGluZygpOiBEYXRhU29ydGluZyB7XG4gICAgICAgIGxldCBkZWZhdWx0U29ydGluZzogRGF0YVNvcnRpbmc7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc29ydGluZykpIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIGRpcmVjdGlvbl0gPSB0aGlzLnNvcnRpbmc7XG4gICAgICAgICAgICBkZWZhdWx0U29ydGluZyA9IG5ldyBEYXRhU29ydGluZyhrZXksIGRpcmVjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0U29ydGluZyA9IG5ldyBEYXRhU29ydGluZyh0aGlzLnNvcnRpbmcua2V5LCB0aGlzLnNvcnRpbmcuZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZhdWx0U29ydGluZztcbiAgICB9XG5cbiAgICBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kYXRhIHx8IHRoaXMuZGF0YS5nZXRSb3dzKCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJvd01lbnVDYWNoZSA9IHt9O1xuICAgICAgICB0aGlzLmxvYWRMYXlvdXRQcmVzZXRzKCk7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBTaGFyZURhdGFUYWJsZUFkYXB0ZXIoXG4gICAgICAgICAgICB0aGlzLnRodW1ibmFpbFNlcnZpY2UsXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRTZXJ2aWNlLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHRoaXMuZ2V0RGVmYXVsdFNvcnRpbmcoKSxcbiAgICAgICAgICAgIHRoaXMuc29ydGluZ01vZGUsXG4gICAgICAgICAgICB0aGlzLmFsbG93RHJvcEZpbGVzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGF0YS50aHVtYm5haWxzID0gdGhpcy50aHVtYm5haWxzO1xuICAgICAgICB0aGlzLmRhdGEucGVybWlzc2lvbnNTdHlsZSA9IHRoaXMucGVybWlzc2lvbnNTdHlsZTtcblxuICAgICAgICBpZiAodGhpcy5fcm93RmlsdGVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0RmlsdGVyKHRoaXMuX3Jvd0ZpbHRlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pbWFnZVJlc29sdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0SW1hZ2VSZXNvbHZlcih0aGlzLmltYWdlUmVzb2x2ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb250ZXh0QWN0aW9uSGFuZGxlci5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHZhbCkgPT4gdGhpcy5jb250ZXh0QWN0aW9uQ2FsbGJhY2sodmFsKSk7XG5cbiAgICAgICAgdGhpcy5lbmZvcmNlU2luZ2xlQ2xpY2tOYXZpZ2F0aW9uRm9yTW9iaWxlKCk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlICYmIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyVmFsdWUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0hlYWRlciA9IFNob3dIZWFkZXJNb2RlLkFsd2F5cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb2x1bW5zUHJlc2V0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnNldFByZXNldEtleSh0aGlzLmNvbHVtbnNQcmVzZXRLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb2N1bWVudExpc3RTZXJ2aWNlLnJlbG9hZCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0U2VydmljZS5yZXNldFNlbGVjdGlvbiQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5MaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxpc3QuY29sdW1ucy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YXRhYmxlU2NoZW1hKCk7XG4gICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKHRoaXMuY29sdW1ucyk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoIWNoYW5nZXNbJ3ByZXNlbGVjdE5vZGVzJ10pIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc29ydGluZykpIHtcbiAgICAgICAgICAgIGNvbnN0IFtrZXksIGRpcmVjdGlvbl0gPSB0aGlzLnNvcnRpbmc7XG4gICAgICAgICAgICB0aGlzLm9yZGVyQnkgPSB0aGlzLmJ1aWxkT3JkZXJCeUFycmF5KGtleSwgZGlyZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JkZXJCeSA9IHRoaXMuYnVpbGRPcmRlckJ5QXJyYXkodGhpcy5zb3J0aW5nLmtleSwgdGhpcy5zb3J0aW5nLmRpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEudGh1bWJuYWlscyA9IHRoaXMudGh1bWJuYWlscztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNvcnRpbmdNb2RlICYmICFjaGFuZ2VzLnNvcnRpbmdNb2RlLmZpcnN0Q2hhbmdlICYmIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNvcnRpbmdNb2RlID0gY2hhbmdlcy5zb3J0aW5nTW9kZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5zb3J0aW5nICYmICFjaGFuZ2VzLnNvcnRpbmcuZmlyc3RDaGFuZ2UgJiYgdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNoYW5nZXMuc29ydGluZy5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAobmV3VmFsdWUgJiYgbmV3VmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIGRpcmVjdGlvbl0gPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuc2V0U29ydGluZyhuZXcgRGF0YVNvcnRpbmcoa2V5LCBkaXJlY3Rpb24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2xkZXJJZCAmJiBjaGFuZ2VzWydjdXJyZW50Rm9sZGVySWQnXT8uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydjdXJyZW50Rm9sZGVySWQnXT8ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5ub2RlPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZSA9IHRoaXMuX3BhZ2luYXRpb24gPyB0aGlzLl9wYWdpbmF0aW9uLm1lcmdlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhLmxvYWRQYWdlKGNoYW5nZXMubm9kZS5jdXJyZW50VmFsdWUsIG1lcmdlLCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlRXhpc3RpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUHJlc2VsZWN0Tm9kZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YVJlYWR5KGNoYW5nZXMubm9kZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VzLmltYWdlUmVzb2x2ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEuc2V0SW1hZ2VSZXNvbHZlcihjaGFuZ2VzLmltYWdlUmVzb2x2ZXIuY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbG9hZChoaWRlTG9hZGluZ1NwaW5uZXIgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucmVsb2FkV2l0aG91dFJlc2V0dGluZ1NlbGVjdGlvbihoaWRlTG9hZGluZ1NwaW5uZXIpO1xuICAgIH1cblxuICAgIHJlbG9hZFdpdGhvdXRSZXNldHRpbmdTZWxlY3Rpb24oaGlkZUxvYWRpbmdTcGlubmVyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMubm9kZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5sb2FkUGFnZSh0aGlzLm5vZGUsIHRoaXMuX3BhZ2luYXRpb24ubWVyZ2UsIG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2VydmVFeGlzdGluZ1NlbGVjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vblByZXNlbGVjdE5vZGVzKCk7XG4gICAgICAgICAgICB0aGlzLnN5bmNQYWdpbmF0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm9uRGF0YVJlYWR5KHRoaXMubm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRGb2xkZXIoaGlkZUxvYWRpbmdTcGlubmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRleHRBY3Rpb25DYWxsYmFjayhhY3Rpb24pIHtcbiAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29udGVudEFjdGlvbihhY3Rpb24ubm9kZSwgYWN0aW9uLm1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE5vZGVBY3Rpb25zKG5vZGU6IE5vZGVFbnRyeSB8IGFueSk6IENvbnRlbnRBY3Rpb25Nb2RlbFtdIHtcbiAgICAgICAgaWYgKG5vZGU/LmVudHJ5KSB7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKG5vZGUuZW50cnkuaXNGaWxlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gJ2RvY3VtZW50JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5lbnRyeS5pc0ZvbGRlcikge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9ICdmb2xkZXInO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMucm93TWVudUNhY2hlW25vZGUuZW50cnkuaWRdO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hBY3Rpb24oYWN0aW9uLCBub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnNCeVRhcmdldCA9IHRoaXMuYWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gdHlwZW9mIGVudHJ5LnZpc2libGUgPT09ICdmdW5jdGlvbicgPyBlbnRyeS52aXNpYmxlKG5vZGUpIDogZW50cnkudmlzaWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzVmlzaWJsZSAmJiBlbnRyeS50YXJnZXQudG9Mb3dlckNhc2UoKSA9PT0gdGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAubWFwKChhY3Rpb24pID0+IG5ldyBDb250ZW50QWN0aW9uTW9kZWwoYWN0aW9uKSk7XG5cbiAgICAgICAgICAgICAgICBhY3Rpb25zQnlUYXJnZXQuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaEFjdGlvbihhY3Rpb24sIG5vZGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5yb3dNZW51Q2FjaGVbbm9kZS5lbnRyeS5pZF0gPSBhY3Rpb25zQnlUYXJnZXQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvbnNCeVRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZnJlc2hBY3Rpb24oYWN0aW9uOiBDb250ZW50QWN0aW9uTW9kZWwsIG5vZGU6IE5vZGVFbnRyeSkge1xuICAgICAgICBhY3Rpb24uZGlzYWJsZWQgPSB0aGlzLmlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uLCBub2RlKTtcbiAgICAgICAgYWN0aW9uLnZpc2libGUgPSB0aGlzLmlzQWN0aW9uVmlzaWJsZShhY3Rpb24sIG5vZGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25WaXNpYmxlKGFjdGlvbjogQ29udGVudEFjdGlvbk1vZGVsLCBub2RlOiBOb2RlRW50cnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb24udmlzaWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi52aXNpYmxlKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjdGlvbi52aXNpYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25EaXNhYmxlZChhY3Rpb246IENvbnRlbnRBY3Rpb25Nb2RlbCwgbm9kZTogTm9kZUVudHJ5KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uLmRpc2FibGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGFjdGlvbi5wZXJtaXNzaW9uICYmIGFjdGlvbi5kaXNhYmxlV2l0aE5vUGVybWlzc2lvbiAmJiAhdGhpcy5jb250ZW50U2VydmljZS5oYXNBbGxvd2FibGVPcGVyYXRpb25zKG5vZGUuZW50cnksIGFjdGlvbi5wZXJtaXNzaW9uKSkgfHxcbiAgICAgICAgICAgIHRoaXMubG9ja1NlcnZpY2UuaXNMb2NrZWQobm9kZS5lbnRyeSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsnJGV2ZW50J10pXG4gICAgb25TaG93Q29udGV4dE1lbnUoZT86IEV2ZW50KSB7XG4gICAgICAgIGlmIChlICYmIHRoaXMuY29udGV4dE1lbnVBY3Rpb25zKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvKG5vZGU6IE5vZGUgfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdGhpcy5yZXNldE5ld0ZvbGRlclBhZ2luYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZvbGRlcklkID0gbm9kZTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGVyQ2hhbmdlLmVtaXQobmV3IE5vZGVFbnRyeUV2ZW50KHsgaWQ6IG5vZGUgfSBhcyBOb2RlKSk7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jYW5OYXZpZ2F0ZUZvbGRlcihub2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXROZXdGb2xkZXJQYWdpbmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9sZGVySWQgPSB0aGlzLmdldE5vZGVGb2xkZXJEZXN0aW5hdGlvbklkKG5vZGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbGRlckNoYW5nZS5lbWl0KG5ldyBOb2RlRW50cnlFdmVudCh7IGlkOiB0aGlzLmN1cnJlbnRGb2xkZXJJZCB9IGFzIE5vZGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE5vZGVGb2xkZXJEZXN0aW5hdGlvbklkKG5vZGU6IE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaW5rRm9sZGVyKG5vZGUpID8gbm9kZS5wcm9wZXJ0aWVzWydjbTpkZXN0aW5hdGlvbiddIDogbm9kZS5pZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTGlua0ZvbGRlcihub2RlOiBOb2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSAnYXBwOmZvbGRlcmxpbmsnICYmIG5vZGUucHJvcGVydGllcz8uWydjbTpkZXN0aW5hdGlvbiddO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ3VzdG9tU291cmNlRGF0YShub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXJJZCA9IG5vZGVJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gZXhlY3V0aW5nIGNvbnRlbnQgYWN0aW9uIGZvciBhIGRvY3VtZW50IG9yIGZvbGRlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlIE5vZGUgdG8gYmUgdGhlIGNvbnRleHQgb2YgdGhlIGV4ZWN1dGlvbi5cbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiB0byBiZSBleGVjdXRlZCBhZ2FpbnN0IHRoZSBjb250ZXh0LlxuICAgICAqL1xuICAgIGV4ZWN1dGVDb250ZW50QWN0aW9uKG5vZGU6IE5vZGVFbnRyeSwgYWN0aW9uOiBDb250ZW50QWN0aW9uTW9kZWwpIHtcbiAgICAgICAgaWYgKG5vZGU/LmVudHJ5ICYmIGFjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlclN1YiA9IHR5cGVvZiBhY3Rpb24uaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyA/IGFjdGlvbi5oYW5kbGVyKG5vZGUsIHRoaXMsIGFjdGlvbi5wZXJtaXNzaW9uKSA6IG9mKHRydWUpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbi5leGVjdXRlID09PSAnZnVuY3Rpb24nICYmIGhhbmRsZXJTdWIpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyU3ViLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiBhY3Rpb24uZXhlY3V0ZShub2RlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExvYWRpbmdTdGF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5kYXRhPy5nZXRSb3dzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkRm9sZGVyKGhpZGVMb2FkaW5nU3Bpbm5lciA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghaGlkZUxvYWRpbmdTcGlubmVyKSB7XG4gICAgICAgICAgICB0aGlzLnNldExvYWRpbmdTdGF0ZSh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TGlzdFNlcnZpY2UuaXNDdXN0b21Tb3VyY2VTZXJ2aWNlKHRoaXMuY3VycmVudEZvbGRlcklkKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDdXN0b21Tb3VyY2VEYXRhKHRoaXMuY3VycmVudEZvbGRlcklkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0U2VydmljZS5sb2FkRm9sZGVyQnlOb2RlSWQodGhpcy5jdXJyZW50Rm9sZGVySWQsIHRoaXMuX3BhZ2luYXRpb24sIHRoaXMuaW5jbHVkZUZpZWxkcywgdGhpcy53aGVyZSwgdGhpcy5vcmRlckJ5KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoZG9jdW1lbnROb2RlOiBEb2N1bWVudExvYWRlck5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnROb2RlLmN1cnJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVyTm9kZSA9IGRvY3VtZW50Tm9kZS5jdXJyZW50Tm9kZS5lbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZm9sZGVyTm9kZS5uZXh0KGRvY3VtZW50Tm9kZS5jdXJyZW50Tm9kZS5lbnRyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlTG9hZGVkKGRvY3VtZW50Tm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNldFNlbGVjdGlvbigpIHtcbiAgICAgICAgdGhpcy5kYXRhVGFibGUucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgdGhpcy5ub1Blcm1pc3Npb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvblBhZ2VMb2FkZWQobm9kZVBhZ2luZzogTm9kZVBhZ2luZykge1xuICAgICAgICBpZiAobm9kZVBhZ2luZykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5sb2FkUGFnZShub2RlUGFnaW5nLCB0aGlzLl9wYWdpbmF0aW9uLm1lcmdlLCB0aGlzLmFsbG93RHJvcEZpbGVzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXNlcnZlRXhpc3RpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25QcmVzZWxlY3ROb2RlcygpO1xuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5vbkRhdGFSZWFkeShub2RlUGFnaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU29ydGluZ0NoYW5nZWQoZXZlbnQ6IEN1c3RvbUV2ZW50KSB7XG4gICAgICAgIHRoaXMub3JkZXJCeSA9IHRoaXMuYnVpbGRPcmRlckJ5QXJyYXkoZXZlbnQuZGV0YWlsLnNvcnRpbmdLZXksIGV2ZW50LmRldGFpbC5kaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLnNvcnRpbmcgPSBbZXZlbnQuZGV0YWlsLnNvcnRpbmdLZXksIGV2ZW50LmRldGFpbC5kaXJlY3Rpb25dO1xuICAgICAgICB0aGlzLnNvcnRpbmdTdWJqZWN0Lm5leHQoW3RoaXMuYWRkaXRpb25hbFNvcnRpbmcsIGV2ZW50LmRldGFpbF0pO1xuXG4gICAgICAgIGlmICh0aGlzLnNvcnRpbmdNb2RlID09PSAnc2VydmVyJykge1xuICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmRlckJ5QXJyYXkoY3VycmVudEtleTogc3RyaW5nLCBjdXJyZW50RGlyZWN0aW9uOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbYCR7dGhpcy5hZGRpdGlvbmFsU29ydGluZy5rZXl9ICR7dGhpcy5hZGRpdGlvbmFsU29ydGluZy5kaXJlY3Rpb259YCwgYCR7Y3VycmVudEtleX0gJHtjdXJyZW50RGlyZWN0aW9ufWBdO1xuICAgIH1cblxuICAgIG9uUHJldmlld0ZpbGUobm9kZTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBjb25zdCBzaXplSW5NQiA9IG5vZGUuZW50cnk/LmNvbnRlbnQ/LnNpemVJbkJ5dGVzIC8gQllURVNfVE9fTUJfQ09OVkVSU0lPTl9WQUxVRTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVBdXRvRG93bmxvYWRGbGFnOiBib29sZWFuID0gdGhpcy5hcHBDb25maWcuZ2V0KCd2aWV3ZXIuZW5hYmxlRmlsZUF1dG9Eb3dubG9hZCcsIHRydWUpO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZVRocmVzaG9sZDogbnVtYmVyID0gdGhpcy5hcHBDb25maWcuZ2V0KCd2aWV3ZXIuZmlsZUF1dG9Eb3dubG9hZFNpemVUaHJlc2hvbGRJbk1CJywgMTUpO1xuXG4gICAgICAgICAgICBpZiAoZmlsZUF1dG9Eb3dubG9hZEZsYWcgJiYgc2l6ZUluTUIgJiYgc2l6ZUluTUIgPiBzaXplVGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihGaWxlQXV0b0Rvd25sb2FkQ29tcG9uZW50LCB7IGRpc2FibGVDbG9zZTogdHJ1ZSwgZGF0YTogbm9kZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3LmVtaXQobmV3IE5vZGVFbnRpdHlFdmVudChub2RlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNvbHVtbnNWaXNpYmlsaXR5Q2hhbmdlKGNvbHVtbnM6IERhdGFDb2x1bW5bXSkge1xuICAgICAgICB0aGlzLmNvbHVtbnNWaXNpYmlsaXR5ID0gY29sdW1ucy5yZWR1Y2UoKHZpc2libGVDb2x1bW5zTWFwLCBjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaXNIaWRkZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZpc2libGVDb2x1bW5zTWFwW2NvbHVtbi5pZF0gPSAhY29sdW1uLmlzSGlkZGVuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmlzaWJsZUNvbHVtbnNNYXA7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eUNoYW5nZWQuZW1pdCh0aGlzLmNvbHVtbnNWaXNpYmlsaXR5KTtcbiAgICB9XG5cbiAgICBvbkNvbHVtbk9yZGVyQ2hhbmdlKGNvbHVtbnNXaXRoTmV3T3JkZXI6IERhdGFDb2x1bW5bXSkge1xuICAgICAgICB0aGlzLmNvbHVtbnNPcmRlciA9IGNvbHVtbnNXaXRoTmV3T3JkZXIubWFwKChjb2x1bW4pID0+IGNvbHVtbi5pZCk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNvbHVtbnNPcmRlckNoYW5nZWQuZW1pdCh0aGlzLmNvbHVtbnNPcmRlcik7XG4gICAgfVxuXG4gICAgb25Db2x1bW5zV2lkdGhDaGFuZ2UoY29sdW1uczogRGF0YUNvbHVtbltdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbHVtbnNXaWR0aHMgPSBjb2x1bW5zLnJlZHVjZSgod2lkdGhzQ29sdW1uc01hcCwgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhzQ29sdW1uc01hcFtjb2x1bW4uaWRdID0gTWF0aC5jZWlsKGNvbHVtbi53aWR0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd2lkdGhzQ29sdW1uc01hcDtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIHRoaXMuY29sdW1uc1dpZHRocyA9IHsgLi4udGhpcy5jb2x1bW5zV2lkdGhzLCAuLi5uZXdDb2x1bW5zV2lkdGhzIH07XG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aENoYW5nZWQuZW1pdCh0aGlzLmNvbHVtbnNXaWR0aHMpO1xuICAgIH1cblxuICAgIG9uU2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZChjb3VudDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZC5lbWl0KGNvdW50KTtcbiAgICB9XG5cbiAgICBvbk5vZGVDbGljayhub2RlRW50cnk6IE5vZGVFbnRyeSkge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS1jbGljaycsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBub2RlOiBub2RlRW50cnlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE5vZGVFbnRpdHlFdmVudChub2RlRW50cnkpO1xuICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KGV2ZW50KTtcblxuICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRlICYmIHRoaXMubmF2aWdhdGlvbk1vZGUgPT09IERvY3VtZW50TGlzdENvbXBvbmVudC5TSU5HTEVfQ0xJQ0tfTkFWSUdBVElPTikge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUFjdGlvbkNsaWNrKG5vZGVFbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVEYmxDbGljayhub2RlRW50cnk6IE5vZGVFbnRyeSkge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS1kYmxjbGljaycsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBub2RlOiBub2RlRW50cnlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBOb2RlRW50aXR5RXZlbnQobm9kZUVudHJ5KTtcbiAgICAgICAgdGhpcy5ub2RlRGJsQ2xpY2suZW1pdChldmVudCk7XG5cbiAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZSAmJiB0aGlzLm5hdmlnYXRpb25Nb2RlID09PSBEb2N1bWVudExpc3RDb21wb25lbnQuRE9VQkxFX0NMSUNLX05BVklHQVRJT04pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVBY3Rpb25DbGljayhub2RlRW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUFjdGlvbkNsaWNrKG5vZGVFbnRyeTogTm9kZUVudHJ5KSB7XG4gICAgICAgIGlmIChub2RlRW50cnk/LmVudHJ5KSB7XG4gICAgICAgICAgICBpZiAobm9kZUVudHJ5LmVudHJ5LmlzRmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25QcmV2aWV3RmlsZShub2RlRW50cnkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobm9kZUVudHJ5LmVudHJ5LmlzRm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvKG5vZGVFbnRyeS5lbnRyeSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChub2RlRW50cnkuZW50cnlbJ2d1aWQnXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6IHRoaXMuaW5jbHVkZUZpZWxkc1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzQXBpLmdldE5vZGUobm9kZUVudHJ5LmVudHJ5WydndWlkJ10sIG9wdGlvbnMpLnRoZW4oKG5vZGU6IE5vZGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG8obm9kZS5lbnRyeSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk5vZGVTZWxlY3QoZXZlbnQ6IHsgcm93OiBTaGFyZURhdGFSb3c7IHNlbGVjdGlvbjogQXJyYXk8U2hhcmVEYXRhUm93PiB9KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gZXZlbnQuc2VsZWN0aW9uLm1hcCgoZW50cnkpID0+IGVudHJ5Lm5vZGUpO1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnbm9kZS1zZWxlY3QnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBub2RlOiBldmVudC5yb3cgPyBldmVudC5yb3cubm9kZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubm9kZVNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcbiAgICB9XG5cbiAgICBvbk5vZGVVbnNlbGVjdChldmVudDogeyByb3c6IFNoYXJlRGF0YVJvdzsgc2VsZWN0aW9uOiBBcnJheTxTaGFyZURhdGFSb3c+IH0pIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBldmVudC5zZWxlY3Rpb24ubWFwKChlbnRyeSkgPT4gZW50cnkubm9kZSk7XG4gICAgICAgIGNvbnN0IGRvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdub2RlLXVuc2VsZWN0Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgbm9kZTogZXZlbnQucm93ID8gZXZlbnQucm93Lm5vZGUgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zZWxlY3Rpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vZGVTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgfVxuXG4gICAgb25TaG93Um93Q29udGV4dE1lbnUoZXZlbnQ6IERhdGFDZWxsRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dE1lbnVBY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gYXJncy5yb3cubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgYXJncy5hY3Rpb25zID0gdGhpcy5nZXRDb250ZXh0QWN0aW9ucyhub2RlKSB8fCBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd1Jvd0FjdGlvbnNNZW51KGV2ZW50OiBEYXRhQ2VsbEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRBY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gYXJncy5yb3cubm9kZTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgYXJncy5hY3Rpb25zID0gdGhpcy5nZXROb2RlQWN0aW9ucyhub2RlKSB8fCBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRXhlY3V0ZVJvd0FjdGlvbihldmVudDogRGF0YVJvd0FjdGlvbkV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRBY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gZXZlbnQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gYXJncy5yb3cubm9kZTtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGFyZ3MuYWN0aW9uO1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29udGVudEFjdGlvbihub2RlLCBhY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbmZvcmNlU2luZ2xlQ2xpY2tOYXZpZ2F0aW9uRm9yTW9iaWxlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc01vYmlsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Nb2RlID0gRG9jdW1lbnRMaXN0Q29tcG9uZW50LlNJTkdMRV9DTElDS19OQVZJR0FUSU9OO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuTmF2aWdhdGVGb2xkZXIobm9kZTogTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY2FuTmF2aWdhdGVGb2xkZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICBpZiAobm9kZT8uaXNGb2xkZXIpIHtcbiAgICAgICAgICAgIGNhbk5hdmlnYXRlRm9sZGVyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjYW5OYXZpZ2F0ZUZvbGRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRGF0YVJlYWR5KG5vZGVQYWdpbmc6IE5vZGVQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5yZWFkeS5lbWl0KG5vZGVQYWdpbmcpO1xuICAgICAgICB0aGlzLnBhZ2luYXRpb24ubmV4dChub2RlUGFnaW5nLmxpc3QucGFnaW5hdGlvbik7XG4gICAgfVxuXG4gICAgdXBkYXRlUGFnaW5hdGlvbihyZXF1ZXN0UGFnaW5hdGlvbk1vZGVsOiBSZXF1ZXN0UGFnaW5hdGlvbk1vZGVsKSB7XG4gICAgICAgIHRoaXMuX3BhZ2luYXRpb24ubWF4SXRlbXMgPSByZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLm1heEl0ZW1zO1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uLnNraXBDb3VudCA9IHJlcXVlc3RQYWdpbmF0aW9uTW9kZWwuc2tpcENvdW50O1xuICAgICAgICB0aGlzLnJlbG9hZChyZXF1ZXN0UGFnaW5hdGlvbk1vZGVsLm1lcmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN5bmNQYWdpbmF0aW9uKCkge1xuICAgICAgICB0aGlzLm5vZGUubGlzdC5wYWdpbmF0aW9uLm1heEl0ZW1zID0gdGhpcy5fcGFnaW5hdGlvbi5tYXhJdGVtcztcbiAgICAgICAgdGhpcy5ub2RlLmxpc3QucGFnaW5hdGlvbi5za2lwQ291bnQgPSB0aGlzLl9wYWdpbmF0aW9uLnNraXBDb3VudDtcbiAgICB9XG5cbiAgICBvbkZpbHRlclNlbGVjdGlvbkNoYW5nZShhY3RpdmVGaWx0ZXJzOiBGaWx0ZXJTZWFyY2hbXSkge1xuICAgICAgICB0aGlzLmZpbHRlclNlbGVjdGlvbi5lbWl0KGFjdGl2ZUZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJlc2V0TmV3Rm9sZGVyUGFnaW5hdGlvbigpIHtcbiAgICAgICAgdGhpcy5fcGFnaW5hdGlvbi5za2lwQ291bnQgPSAwO1xuICAgICAgICB0aGlzLl9wYWdpbmF0aW9uLm1heEl0ZW1zID0gdGhpcy5tYXhJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUVycm9yKGVycjogYW55KSB7XG4gICAgICAgIGlmIChlcnIubWVzc2FnZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoSlNPTi5wYXJzZShlcnIubWVzc2FnZSkuZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9QZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIC8qIGVtcHR5ICovXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpO1xuICAgICAgICB0aGlzLmVycm9yLmVtaXQoZXJyKTtcbiAgICB9XG5cbiAgICBnZXRQcmVzZWxlY3RlZE5vZGVzQmFzZWRPblNlbGVjdGlvbk1vZGUoKTogTm9kZUVudHJ5W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNQcmVzZWxlY3RlZE5vZGVzKCkgPyAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSA/IFt0aGlzLnByZXNlbGVjdE5vZGVzWzBdXSA6IHRoaXMucHJlc2VsZWN0Tm9kZXMpIDogW107XG4gICAgfVxuXG4gICAgZ2V0UHJlc2VsZWN0ZWRSb3dzQmFzZWRPblNlbGVjdGlvbk1vZGUoKTogRGF0YVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzUHJlc2VsZWN0ZWRSb3dzKCkgPyAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSA/IFt0aGlzLnByZXNlbGVjdGVkUm93c1swXV0gOiB0aGlzLnByZXNlbGVjdGVkUm93cykgOiBbXTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3Rpb25CYXNlZE9uU2VsZWN0aW9uTW9kZSgpOiBEYXRhUm93W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNQcmVzZWxlY3RlZFJvd3MoKVxuICAgICAgICAgICAgPyB0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpXG4gICAgICAgICAgICAgICAgPyBbdGhpcy5wcmVzZWxlY3RlZFJvd3NbMF1dXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRhdGEuZ2V0U2VsZWN0ZWRSb3dzKClcbiAgICAgICAgICAgIDogdGhpcy5kYXRhLmdldFNlbGVjdGVkUm93cygpO1xuICAgIH1cblxuICAgIG9uUHJlc2VsZWN0Tm9kZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1ByZXNlbGVjdGVkTm9kZXMoKSkge1xuICAgICAgICAgICAgdGhpcy5wcmVzZWxlY3RSb3dzT2ZQcmVzZWxlY3RlZE5vZGVzKCk7XG4gICAgICAgICAgICBjb25zdCBwcmVzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFByZXNlbGVjdGVkUm93c0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmRhdGEuZ2V0U2VsZWN0ZWRSb3dzKCkgYXMgU2hhcmVEYXRhUm93W107XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBwcmVzZWxlY3RlZFJvd3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5zZWxlY3RSb3cobm9kZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9uTm9kZVNlbGVjdCh7IHJvdzogdW5kZWZpbmVkLCBzZWxlY3Rpb24gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZXNlcnZlRXhpc3RpbmdTZWxlY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0aW9uIG9mIHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93T2ZTZWxlY3Rpb24gPSB0aGlzLmRhdGEuZ2V0Um93QnlOb2RlSWQoc2VsZWN0aW9uLmVudHJ5LmlkKTtcbiAgICAgICAgICAgICAgICBpZiAocm93T2ZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcm93T2ZTZWxlY3Rpb24uaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJlc2VsZWN0Um93c09mUHJlc2VsZWN0ZWROb2RlcygpIHtcbiAgICAgICAgdGhpcy5wcmVzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgY29uc3QgcHJlc2VsZWN0ZWROb2RlcyA9IHRoaXMuZ2V0UHJlc2VsZWN0ZWROb2Rlc0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk7XG5cbiAgICAgICAgcHJlc2VsZWN0ZWROb2Rlcy5mb3JFYWNoKChwcmVzZWxlY3RlZE5vZGU6IE5vZGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93T2ZQcmVzZWxlY3RlZE5vZGUgPSB0aGlzLmRhdGEuZ2V0Um93QnlOb2RlSWQocHJlc2VsZWN0ZWROb2RlLmVudHJ5LmlkKTtcbiAgICAgICAgICAgIGlmIChyb3dPZlByZXNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgICAgICAgIHJvd09mUHJlc2VsZWN0ZWROb2RlLmlzU2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlc2VsZWN0ZWRSb3dzLnB1c2gocm93T2ZQcmVzZWxlY3RlZE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1bnNlbGVjdFJvd0Zyb21Ob2RlSWQobm9kZUlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgcm93VG9VbnNlbGVjdCA9IHRoaXMuZGF0YS5nZXRSb3dCeU5vZGVJZChub2RlSWQpO1xuICAgICAgICBpZiAocm93VG9VbnNlbGVjdD8uaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgcm93VG9VbnNlbGVjdC5pc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5zZWxlY3RSb3cocm93VG9VbnNlbGVjdCwgZmFsc2UpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb25CYXNlZE9uU2VsZWN0aW9uTW9kZSgpIGFzIFNoYXJlRGF0YVJvd1tdO1xuICAgICAgICAgICAgdGhpcy5vbk5vZGVVbnNlbGVjdCh7IHJvdzogdW5kZWZpbmVkLCBzZWxlY3Rpb24gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc011bHRpcGxlU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ByZXNlbGVjdGVkTm9kZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbGVjdE5vZGVzPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzUHJlc2VsZWN0ZWRSb3dzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZWxlY3RlZFJvd3M/Lmxlbmd0aCA+IDA7XG4gICAgfVxufVxuIiwiPGFkZi1kYXRhdGFibGVcbiAgICAjZGF0YVRhYmxlXG4gICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW2FjdGlvbnNdPVwiY29udGVudEFjdGlvbnNcIlxuICAgIFthY3Rpb25zUG9zaXRpb25dPVwiY29udGVudEFjdGlvbnNQb3NpdGlvblwiXG4gICAgW211bHRpc2VsZWN0XT1cIm11bHRpc2VsZWN0XCJcbiAgICBbY29udGV4dE1lbnVdPVwiY29udGV4dE1lbnVBY3Rpb25zXCJcbiAgICBbcm93U3R5bGVdPVwicm93U3R5bGVcIlxuICAgIFtyb3dTdHlsZUNsYXNzXT1cInJvd1N0eWxlQ2xhc3NcIlxuICAgIFtzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnNdPVwidHJ1ZVwiXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiXG4gICAgW25vUGVybWlzc2lvbl09XCJub1Blcm1pc3Npb25cIlxuICAgIFtzaG93SGVhZGVyXT1cInNob3dIZWFkZXJcIlxuICAgIFtyb3dNZW51Q2FjaGVFbmFibGVkXT1cImZhbHNlXCJcbiAgICBbc3RpY2t5SGVhZGVyXT1cInN0aWNreUhlYWRlclwiXG4gICAgW2FsbG93RmlsdGVyaW5nXT1cImFsbG93RmlsdGVyaW5nXCJcbiAgICBbaXNSZXNpemluZ0VuYWJsZWRdPVwiaXNSZXNpemluZ0VuYWJsZWRcIlxuICAgIFtibHVyT25SZXNpemVdPVwiYmx1ck9uUmVzaXplXCJcbiAgICBbZGlzcGxheUNoZWNrYm94ZXNPbkhvdmVyXT1cImRpc3BsYXlDaGVja2JveGVzT25Ib3ZlclwiXG4gICAgKHNob3dSb3dDb250ZXh0TWVudSk9XCJvblNob3dSb3dDb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgICAoc2hvd1Jvd0FjdGlvbnNNZW51KT1cIm9uU2hvd1Jvd0FjdGlvbnNNZW51KCRldmVudClcIlxuICAgIChleGVjdXRlUm93QWN0aW9uKT1cIm9uRXhlY3V0ZVJvd0FjdGlvbigkZXZlbnQpXCJcbiAgICAoY29sdW1uc1dpZHRoQ2hhbmdlZCk9XCJvbkNvbHVtbnNXaWR0aENoYW5nZSgkZXZlbnQpXCJcbiAgICAoY29sdW1uT3JkZXJDaGFuZ2VkKT1cIm9uQ29sdW1uT3JkZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQpPVwib25TZWxlY3RlZEl0ZW1zQ291bnRDaGFuZ2VkKCRldmVudClcIlxuICAgIChyb3dDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQudmFsdWU/Lm5vZGUpXCJcbiAgICAocm93RGJsQ2xpY2spPVwib25Ob2RlRGJsQ2xpY2soJGV2ZW50LnZhbHVlPy5ub2RlKVwiXG4gICAgKHJvdy1zZWxlY3QpPVwib25Ob2RlU2VsZWN0KCRhbnkoJGV2ZW50KS5kZXRhaWwpXCJcbiAgICAocm93LXVuc2VsZWN0KT1cIm9uTm9kZVVuc2VsZWN0KCRhbnkoJGV2ZW50KS5kZXRhaWwpXCJcbiAgICAoc29ydGluZy1jaGFuZ2VkKT1cIm9uU29ydGluZ0NoYW5nZWQoJGFueSgkZXZlbnQpKVwiXG4gICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtZ2FsbGVyeS10aHVtYm5haWxzXT1cImRhdGEudGh1bWJuYWlsc1wiPlxuXG4gICAgPGRpdiAqbmdJZj1cImhlYWRlckZpbHRlcnNcIj5cbiAgICAgICAgPGFkZi1maWx0ZXItaGVhZGVyXG4gICAgICAgICAgICBbY3VycmVudEZvbGRlcklkXT1cImN1cnJlbnRGb2xkZXJJZFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgKGZpbHRlclNlbGVjdGlvbik9XCJvbkZpbHRlclNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxhZGYtbm8tY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGFkZi1lbXB0eS1saXN0ICpuZ0lmPVwiIWN1c3RvbU5vQ29udGVudFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lbXB0eS1saXN0X3RlbXBsYXRlIGFkZi1lbXB0eS1mb2xkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lbXB0eS1mb2xkZXItdGhpcy1zcGFjZS1pcy1lbXB0eVwiPnt7J0FERi1ET0NVTUVOVC1MSVNULkVNUFRZLkhFQURFUicgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzcGxheURyYWdBbmREcm9wSGludFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1lbXB0eS1mb2xkZXItZHJhZy1kcm9wXCI+e3sgJ0FERi1EQVRBVEFCTEUuRU1QVFkuRFJBRy1BTkQtRFJPUC5USVRMRScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZW1wdHktZm9sZGVyLWFueS1maWxlcy1oZXJlLXRvLWFkZFwiPnt7ICdBREYtREFUQVRBQkxFLkVNUFRZLkRSQUctQU5ELURST1AuU1VCVElUTEUnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIFthbHRdPVwiJ0FERi1EQVRBVEFCTEUuRU1QVFkuRFJBRy1BTkQtRFJPUC5USVRMRScgfCB0cmFuc2xhdGVcIiBjbGFzcz1cImFkZi1lbXB0eS1mb2xkZXItaW1hZ2VcIiBbc3JjXT1cImVtcHR5Rm9sZGVySW1hZ2VVcmxcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYWRmLWVtcHR5LWxpc3Q+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGUsIGVtcHR5LWZvbGRlci1jb250ZW50XCIgLz5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2FkZi1uby1jb250ZW50LXRlbXBsYXRlPlxuXG4gICAgPGFkZi1uby1wZXJtaXNzaW9uLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5vLXBlcm1pc3Npb25fX3RlbXBsYXRlXCIgKm5nSWY9XCIhY3VzdG9tTm9QZXJtaXNzaW9uc1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmVycm9yPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFkZi1uby1wZXJtaXNzaW9uX190ZW1wbGF0ZS0tdGV4dFwiPnt7ICdBREYtRE9DVU1FTlQtTElTVC5OT19QRVJNSVNTSU9OJyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWN1c3RvbS1uby1wZXJtaXNzaW9uLXRlbXBsYXRlLCBuby1wZXJtaXNzaW9uLWNvbnRlbnRcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYWRmLW5vLXBlcm1pc3Npb24tdGVtcGxhdGU+XG5cbiAgICA8YWRmLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kb2N1bWVudC1saXN0LWxvYWRpbmctY29udGFpbmVyXCIgKm5nSWY9XCIhY3VzdG9tTG9hZGluZ0NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZGYtZG9jdW1lbnQtbGlzdC1sb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZG9jdW1lbnQtbGlzdC1sb2FkaW5nLW1hcmdpblwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERi1ET0NVTUVOVC1MSVNULkxPQURFUl9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiJ2luZGV0ZXJtaW5hdGUnXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWN1c3RvbS1sb2FkaW5nLWNvbnRlbnQtdGVtcGxhdGVcIiAvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvYWRmLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZT5cblxuICAgIDxhZGYtbWFpbi1tZW51LWRhdGF0YWJsZS10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1tYWluTWVudVRyaWdnZXI+XG4gICAgICAgICAgICA8YWRmLWRhdGF0YWJsZS1jb2x1bW4tc2VsZWN0b3JcbiAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgICAgICAgIFttYWluTWVudVRyaWdnZXJdPVwibWFpbk1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgW2NvbHVtbnNTb3J0aW5nXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW21heENvbHVtbnNWaXNpYmxlXT1cIm1heENvbHVtbnNWaXNpYmxlXCJcbiAgICAgICAgICAgICAgKHN1Ym1pdENvbHVtbnNWaXNpYmlsaXR5KT1cIm9uQ29sdW1uc1Zpc2liaWxpdHlDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9hZGYtbWFpbi1tZW51LWRhdGF0YWJsZS10ZW1wbGF0ZT5cblxuPC9hZGYtZGF0YXRhYmxlPlxuIl19
@@ -8628,6 +8628,7 @@ class DocumentListComponent extends DataTableSchema {
8628
8628
  if (typeof node === 'string') {
8629
8629
  this.resetNewFolderPagination();
8630
8630
  this.currentFolderId = node;
8631
+ this.filterValue = {};
8631
8632
  this.folderChange.emit(new NodeEntryEvent({ id: node }));
8632
8633
  this.reload();
8633
8634
  return true;
@@ -8636,6 +8637,7 @@ class DocumentListComponent extends DataTableSchema {
8636
8637
  if (this.canNavigateFolder(node)) {
8637
8638
  this.resetNewFolderPagination();
8638
8639
  this.currentFolderId = this.getNodeFolderDestinationId(node);
8640
+ this.filterValue = {};
8639
8641
  this.folderChange.emit(new NodeEntryEvent({ id: this.currentFolderId }));
8640
8642
  this.reload();
8641
8643
  return true;