ontimize-web-ngx 15.3.0 → 15.3.1

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.
@@ -383,7 +383,7 @@ export class OTableComponent extends AbstractOServiceComponent {
383
383
  }
384
384
  ;
385
385
  if (Util.isDefined(oTableGlobalConfig.showChartsOnDemandOption)) {
386
- this.showReportOnDemandOption = oTableGlobalConfig.showChartsOnDemandOption;
386
+ this.showChartsOnDemandOption = oTableGlobalConfig.showChartsOnDemandOption;
387
387
  }
388
388
  ;
389
389
  if (Util.isDefined(oTableGlobalConfig.showReportOnDemandOption)) {
@@ -2776,4 +2776,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
2776
2776
  type: ViewChildren,
2777
2777
  args: [MatTooltip]
2778
2778
  }] } });
2779
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9vLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL28tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBR0wsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBR04sUUFBUSxFQUNSLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFN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QUFZO3NCQURYLGVBQWU7dUJBQUMscUJBQXFCO2dCQUl0Qyx1QkFBdUI7c0JBRHRCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUtyRCxrQkFBa0I7c0JBRGpCLGVBQWU7dUJBQUMsMkJBQTJCO2dCQUk1QyxnQ0FBZ0M7c0JBRC9CLFlBQVk7dUJBQUMsOEJBQThCO2dCQU81QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBK0JqQyx1QkFBdUI7c0JBRHRCLFlBQVk7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU0xRCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2hhbmdlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IERvbVBvcnRhbE91dGxldCwgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBWaWV3UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0TWVudSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEJvb2xlYW5Db252ZXJ0ZXIsIEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLCBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFLCBPbnRpbWl6ZVNlcnZpY2VQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zbmFja2Jhci5zZXJ2aWNlJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLXRhYmxlLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLXRhYmxlLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Db2x1bW5EaXNwbGF5LCBPRmlsdGVyRGVmaW5pdGlvbiwgT0dyb3VwZWRDb2x1bW5UeXBlcywgT1RhYmxlR2xvYmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3R5cGVzL2V4cHJlc3Npb24udHlwZSc7XG5pbXBvcnQgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9vLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgT1F1ZXJ5RGF0YUFyZ3MgfSBmcm9tICcuLi8uLi90eXBlcy9xdWVyeS1kYXRhLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBRdWlja0ZpbHRlckZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvcXVpY2stZmlsdGVyLWZ1bmN0aW9uLnR5cGUnO1xuaW1wb3J0IHsgU1FMT3JkZXIgfSBmcm9tICcuLi8uLi90eXBlcy9zcWwtb3JkZXIudHlwZSc7XG5pbXBvcnQgeyBPQ29sdW1uQWdncmVnYXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tYWdncmVnYXRlLnR5cGUnO1xuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHsgVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdCB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLnR5cGUnO1xuaW1wb3J0IHsgT1RhYmxlSW5pdGlhbGl6YXRpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1pbml0aWFsaXphdGlvbi1vcHRpb25zLnR5cGUnO1xuaW1wb3J0IHsgT1RhYmxlTWVudVBlcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1tZW51LXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgT1RhYmxlUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVdyYXBwZXIgfSBmcm9tICcuLi8uLi91dGlsL2FzeW5jJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL2ZpbHRlci1leHByZXNzaW9uLnV0aWxzJztcbmltcG9ydCB7IFBlcm1pc3Npb25zVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvc2VydmljZS51dGlscyc7XG5pbXBvcnQgeyBTUUxUeXBlcyB9IGZyb20gJy4uLy4uL3V0aWwvc3FsdHlwZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jb250ZXh0bWVudS9vLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudCB9IGZyb20gJy4uL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uQ2FsY3VsYXRlZENvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uL2NhbGN1bGF0ZWQvby10YWJsZS1jb2x1bW4tY2FsY3VsYXRlZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Jhc2VUYWJsZUNlbGxSZW5kZXJlciB9IGZyb20gJy4vY29sdW1uL2NlbGwtcmVuZGVyZXIvby1iYXNlLXRhYmxlLWNlbGwtcmVuZGVyZXIuY2xhc3MnO1xuaW1wb3J0IHsgT0NvbHVtbiB9IGZyb20gJy4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uL28tdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVFeHBvcnRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHsgT1RhYmxlQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvY29udGV4dG1lbnUvby10YWJsZS1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IERlZmF1bHRPVGFibGVPcHRpb25zIH0gZnJvbSAnLi9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS1vcHRpb25zLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9kaWFsb2cvZmlsdGVyLWJ5LWNvbHVtbi9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE9CYXNlVGFibGVQYWdpbmF0b3IgfSBmcm9tICcuL2V4dGVuc2lvbnMvZm9vdGVyL3BhZ2luYXRvci9vLWJhc2UtdGFibGUtcGFnaW5hdG9yLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtYnV0dG9uL28tdGFibGUtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmUgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbi1zZWxlY3QtYWxsL28tdGFibGUtY29sdW1uLXNlbGVjdC1hbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9GaWx0ZXJDb2x1bW4gfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbnMtZmlsdGVyL2NvbHVtbnMvby10YWJsZS1jb2x1bW5zLWZpbHRlci1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbnMtZmlsdGVyL28tdGFibGUtY29sdW1ucy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1ucy1ncm91cGluZy9jb2x1bW5zL28tdGFibGUtY29sdW1ucy1ncm91cGluZy1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtaGVhZGVyL28tdGFibGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1pbnNlcnRhYmxlLXJvdy9vLXRhYmxlLWluc2VydGFibGUtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW9wdGlvbi9vLXRhYmxlLW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlRGF0YVNvdXJjZVNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS1kYXRhc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnLi9leHRlbnNpb25zL28tdGFibGUtc3RyYXRlZ3kuc2VydmljZSc7XG5pbXBvcnQgeyBPVGFibGVEYW8gfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS5kYW8nO1xuaW1wb3J0IHsgT1RhYmxlR3JvdXBlZFJvdyB9IGZyb20gJy4vZXh0ZW5zaW9ucy9yb3cvby10YWJsZS1yb3ctZ3JvdXAuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlUm93RXhwYW5kYWJsZUNvbXBvbmVudCwgT1RhYmxlUm93RXhwYW5kZWRDaGFuZ2UgfSBmcm9tICcuL2V4dGVuc2lvbnMvcm93L3RhYmxlLXJvdy1leHBhbmRhYmxlL28tdGFibGUtcm93LWV4cGFuZGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9NYXRTb3J0IH0gZnJvbSAnLi9leHRlbnNpb25zL3NvcnQvby1tYXQtc29ydCc7XG5pbXBvcnQgeyBPVGFibGVCYXNlIH0gZnJvbSAnLi9vLXRhYmxlLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT19UQUJMRV9HTE9CQUxfQ09ORklHIH0gZnJvbSAnLi91dGlscy9vLXRhYmxlLnRva2Vucyc7XG5cbmltcG9ydCB0eXBlIHsgSU9Db250ZXh0TWVudUNvbnRleHQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tY29udGV4dC1tZW51LmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZUJ1dHRvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1idXR0b24uaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQnV0dG9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1idXR0b25zLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZUNvbHVtbnNHcm91cGluZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1jb2x1bW5zLWdyb3VwaW5nLWludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVNZW51IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZVBhZ2luYXRvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1wYWdpbmF0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlUXVpY2tmaWx0ZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtcXVpY2tmaWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRSA9IFtcbiAgLy8gdmlzaWJsZS1jb2x1bW5zIFtzdHJpbmddOiB2aXNpYmxlIGNvbHVtbnMsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAndmlzaWJsZUNvbHVtbnM6IHZpc2libGUtY29sdW1ucycsXG5cbiAgLy8gdmlzaWJsZS1jb2x1bW5zLWJ5LWRlZmF1bHQgW3N0cmluZ106IGNvbHVtbnMgdGhhdCBhcmUgdmlzaWJsZSBieSBkZWZhdWx0LCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2RlZmF1bHRWaXNpYmxlQ29sdW1uczogZGVmYXVsdC12aXNpYmxlLWNvbHVtbnMnLFxuXG4gIC8vIGVkaXRhYmxlLWNvbHVtbnMgW3N0cmluZ106IGNvbHVtbnMgdGhhdCBjYW4gYmUgZWRpdGVkIGRpcmVjdGx5IG92ZXIgdGhlIHRhYmxlLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgLy8gJ2VkaXRhYmxlQ29sdW1uczogZWRpdGFibGUtY29sdW1ucycsXG5cbiAgLy8gc29ydC1jb2x1bW5zIFtzdHJpbmddOiBpbml0aWFsIHNvcnRpbmcsIHdpdGggdGhlIGZvcm1hdCBjb2x1bW46W0FTQ3xERVNDXSwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdzb3J0Q29sdW1uczogc29ydC1jb2x1bW5zJyxcblxuICAncXVpY2tGaWx0ZXJDYWxsYmFjazogcXVpY2stZmlsdGVyLWZ1bmN0aW9uJyxcblxuICAvLyBkZWxldGUtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGRlbGV0ZSBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2RlbGV0ZUJ1dHRvbjogZGVsZXRlLWJ1dHRvbicsXG5cbiAgLy8gcmVmcmVzaC1idXR0b24gW25vfHllc106IHNob3cgcmVmcmVzaCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ3JlZnJlc2hCdXR0b246IHJlZnJlc2gtYnV0dG9uJyxcblxuICAvLyBjb2x1bW5zLXZpc2liaWxpdHktYnV0dG9uIFtub3x5ZXNdOiBzaG93IGNvbHVtbnMgdmlzaWJpbGl0eSBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2NvbHVtbnNWaXNpYmlsaXR5QnV0dG9uOiBjb2x1bW5zLXZpc2liaWxpdHktYnV0dG9uJyxcblxuICAvLyAvLyBjb2x1bW5zLXJlc2l6ZS1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyByZXNpemUgYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gIC8vICdjb2x1bW5zUmVzaXplQnV0dG9uOiBjb2x1bW5zLXJlc2l6ZS1idXR0b24nLFxuXG4gIC8vIC8vIGNvbHVtbnMtZ3JvdXAtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGNvbHVtbnMgZ3JvdXAgYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gIC8vICdjb2x1bW5zR3JvdXBCdXR0b246IGNvbHVtbnMtZ3JvdXAtYnV0dG9uJyxcblxuICAvLyBleHBvcnQtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGV4cG9ydCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2V4cG9ydEJ1dHRvbjogZXhwb3J0LWJ1dHRvbicsXG5cbiAgLy8gc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGNvbmZpZ3VyYXRpb24gYnV0dG9uIGluIGhlYWRlci4gRGVmYXVsdDogeWVzLlxuICAnc2hvd0NvbmZpZ3VyYXRpb25PcHRpb246IHNob3ctY29uZmlndXJhdGlvbi1vcHRpb24nLFxuXG4gIC8vIHNob3ctYnV0dG9ucy10ZXh0IFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgdGV4dCBvZiBoZWFkZXIgYnV0dG9ucy4gRGVmYXVsdDogeWVzLlxuICAnc2hvd0J1dHRvbnNUZXh0OiBzaG93LWJ1dHRvbnMtdGV4dCcsXG5cbiAgLy8gc2VsZWN0LWFsbC1jaGVja2JveCBbeWVzfG5vfHRydWV8ZmFsc2VdOiAgc2hvdyBpbiB0aGUgbWVudSB0aGUgb3B0aW9uIG9mIHNlbGVjdGlvbiBjaGVjayBib3hlcyAuIERlZmF1bHQ6IG5vLlxuICAnc2VsZWN0QWxsQ2hlY2tib3g6IHNlbGVjdC1hbGwtY2hlY2tib3gnLFxuXG4gIC8vIHBhZ2luYXRpb24tY29udHJvbHMgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBwYWdpbmF0aW9uIGNvbnRyb2xzLiBEZWZhdWx0OiB5ZXMuXG4gICdwYWdpbmF0aW9uQ29udHJvbHM6IHBhZ2luYXRpb24tY29udHJvbHMnLFxuXG4gIC8vIGZpeC1oZWFkZXIgW3llc3xub3x0cnVlfGZhbHNlXTogZml4ZWQgaGVhZGVyIGFuZCBmb290ZXIgd2hlbiB0aGUgY29udGVudCBpcyBncmVhdGhlciB0aGFuIGl0cyBvd24gaGVpZ2h0LiBEZWZhdWx0OiB5ZXMuXG4gICdmaXhlZEhlYWRlcjogZml4ZWQtaGVhZGVyJyxcblxuICAvLyBzaG93LXRpdGxlIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgdGhlIHRhYmxlIHRpdGxlLiBEZWZhdWx0OiBuby5cbiAgJ3Nob3dUaXRsZTogc2hvdy10aXRsZScsXG5cbiAgLy8gZWRpdGlvbi1tb2RlIFtub25lIHwgaW5saW5lIHwgY2xpY2sgfCBkYmxjbGlja106IGVkaXRpb24gbW9kZS4gRGVmYXVsdCBub25lXG4gICdlZGl0aW9uTW9kZTogZWRpdGlvbi1tb2RlJyxcblxuICAvLyBzZWxlY3Rpb24tbW9kZSBbbm9uZSB8IHNpbXBsZSB8IG11bHRpcGxlIF06IHNlbGVjdGlvbiBtb2RlLiBEZWZhdWx0IG11bHRpcGxlXG4gICdzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb24tbW9kZScsXG5cbiAgJ2hvcml6b250YWxTY3JvbGw6IGhvcml6b250YWwtc2Nyb2xsJyxcblxuICAnc2hvd1BhZ2luYXRvckZpcnN0TGFzdEJ1dHRvbnM6IHNob3ctcGFnaW5hdG9yLWZpcnN0LWxhc3QtYnV0dG9ucycsXG5cbiAgJ2F1dG9BbGlnblRpdGxlczogYXV0by1hbGlnbi10aXRsZXMnLFxuXG4gICdtdWx0aXBsZVNvcnQ6IG11bHRpcGxlLXNvcnQnLFxuICAvLyBzZWxlY3QtYWxsLWNoZWNrYm94LXZpc2libGUgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBzZWxlY3Rpb24gY2hlY2sgYm94ZXMuRGVmYXVsdDogbm8uXG4gICdzZWxlY3RBbGxDaGVja2JveFZpc2libGU6IHNlbGVjdC1hbGwtY2hlY2tib3gtdmlzaWJsZScsXG5cbiAgJ29yZGVyYWJsZScsXG5cbiAgJ3Jlc2l6YWJsZScsXG5cbiAgJ2tlZXBTZWxlY3RlZEl0ZW1zOiBrZWVwLXNlbGVjdGVkLWl0ZW1zJyxcblxuICAvLyBleHBvcnQtbW9kZSBbJ3Zpc2libGUnfCdsb2NhbCd8J2FsbCddOiBzZXRzIHRoZSBtb2RlIHRvIGV4cG9ydCBkYXRhLiBEZWZhdWx0OiAndmlzaWJsZSdcbiAgJ2V4cG9ydE1vZGU6IGV4cG9ydC1tb2RlJyxcblxuICAvLyBleHBvcnRTZXJ2aWNlVHlwZSBbIHN0cmluZyBdOiBUaGUgc2VydmljZSB1c2VkIGJ5IHRoZSB0YWJsZSBmb3IgZXhwb3J0aW5nIGl0J3MgZGF0YSwgaXQgbXVzdCBpbXBsZW1lbnQgJ0lFeHBvcnRTZXJ2aWNlJyBpbnRlcmZhY2UuIERlZmF1bHQ6ICdPbnRpbWl6ZUV4cG9ydFNlcnZpY2UnXG4gICdleHBvcnRTZXJ2aWNlVHlwZTogZXhwb3J0LXNlcnZpY2UtdHlwZScsXG5cbiAgLy8gYXV0by1hZGp1c3QgW3RydWV8ZmFsc2VdOiBBdXRvIGFkanVzdCBjb2x1bW4gd2lkdGggdG8gZml0IGl0cyBjb250ZW50LiBEZWZhdWx0OiB0cnVlXG4gICdhdXRvQWRqdXN0OiBhdXRvLWFkanVzdCcsXG5cbiAgLy8gc2hvdy1maWx0ZXItb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgZmlsdGVyIG1lbnUgb3B0aW9uIGluIHRoZSBoZWFkZXIgbWVudS4gRGVmYXVsdDogeWVzLlxuICAnc2hvd0ZpbHRlck9wdGlvbjogc2hvdy1maWx0ZXItb3B0aW9uJyxcblxuICAvLyB2aXNpYmxlLWV4cG9ydC1kaWFsb2ctYnV0dG9ucyBbc3RyaW5nXTogdmlzaWJsZSBidXR0b25zIGluIGV4cG9ydCBkaWFsb2csIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQvbm8gY29uZmlndXJlZDogc2hvdyBhbGwuIEVtcHR5IHZhbHVlOiBoaWRlIGFsbC5cbiAgJ3Zpc2libGVFeHBvcnREaWFsb2dCdXR0b25zOiB2aXNpYmxlLWV4cG9ydC1kaWFsb2ctYnV0dG9ucycsXG5cbiAgLy8gcm93LWNsYXNzIFtmdW5jdGlvbiwgKHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgc3RyaW5nW11dOiBhZGRzIHRoZSBjbGFzcyBvciBjbGFzc2VzIHJldHVybmVkIGJ5IHRoZSBwcm92aWRlZCBmdW5jdGlvbiB0byB0aGUgdGFibGUgcm93cy5cbiAgJ3Jvd0NsYXNzOiByb3ctY2xhc3MnLFxuXG4gIC8vIGZpbHRlci1jb2x1bW4tYWN0aXZlLWJ5LWRlZmF1bHQgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBpY29uIGZpbHRlciBieSBkZWZhdWx0IGluIHRoZSB0YWJsZS4gRGVmYXVsdDp5ZXNcbiAgJ2ZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDpmaWx0ZXItY29sdW1uLWFjdGl2ZS1ieS1kZWZhdWx0JyxcblxuICAvLyBncm91cGVkLWNvbHVtbnMgW3N0cmluZ106IGdyb3VwZWQgY29sdW1ucyBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2dyb3VwZWRDb2x1bW5zOiBncm91cGVkLWNvbHVtbnMnLFxuXG4gIC8vIGdyb3VwYWJsZVtib29sZWFuXTogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBjb2x1bW4gY2FuIGJlIGdyb3VwYWJsZS4gQnkgZGVmYXVsdDogdHJ1ZVxuICAnZ3JvdXBhYmxlJyxcblxuICAvLyBleHBhbmQtZ3JvdXBzLXNhbWUtbGV2ZWxbYm9vbGVhbl06IEluZGljYXRlcyBpZiBjbGljayBpbiByb3cgZXhwYW5kcy9jb2xsYXBzZXMgYWxsIHJvd3Mgb24gc2FtZSBsZXZlbC4gQnkgZGVmYXVsdDogdHJ1ZVxuICAnZXhwYW5kR3JvdXBzU2FtZUxldmVsOiBleHBhbmQtZ3JvdXBzLXNhbWUtbGV2ZWwnLFxuXG4gIC8vIGNvbGxhcHNlLWdyb3VwZWQtY29sdW1ucyBbeWVzfG5vfHRydWV8ZmFsc2VdOiBXaGV0aGVyIGNvbGxhcHNlIHRoZSBncm91cGVkIGNvbHVtbnMgYnkgZGVmYXVsdFxuICAnY29sbGFwc2VHcm91cGVkQ29sdW1uczogY29sbGFwc2UtZ3JvdXBlZC1jb2x1bW5zJyxcblxuICAvLyB2aXJ0dWFsLXNjcm9sbCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBXaGV0aGVyIGVuYWJsZWQgb3Igbm90IHRoZSB2aXJ0dWFsIHNjcm9sbFxuICAndmlydHVhbFNjcm9sbDogdmlydHVhbC1zY3JvbGwnLFxuXG4gIC8vY29udGV4dC1tZW51IFt5ZXN8bm98dHJ1ZXxmYWxzZV06IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSB0YWJsZSBjb250ZXh0IG1lbnVcbiAgJ2NvbnRleHRNZW51OiBjb250ZXh0LW1lbnUnLFxuXG4gIC8vIHNob3ctZXhwYW5kYWJsZS1pY29uLWZ1bmN0aW9uIFtmdW5jdGlvbl06IEV4cGFuZGFibGUgZnVuY3Rpb24gdG8gY2hlY2sgaWYgZXhwYW5kYWJsZSBoYXMgZGF0YSB0byBzaG93IG9yIG5vdCBpY29uXG4gICdzaG93RXhwYW5kYWJsZUljb25GdW5jdGlvbjogc2hvdy1leHBhbmRhYmxlLWljb24tZnVuY3Rpb24nLFxuXG4gIC8vIHNob3ctcmVwb3J0LW9uLWRlbWFuZC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyByZXBvcnQgb24gZGVtYW5kIG9wdGlvbiBpbiB0aGUgdGFibGUgbWVudS4gRGVmYXVsdDogeWVzLlxuICAnc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBzaG93LXJlcG9ydC1vbi1kZW1hbmQtb3B0aW9uJyxcblxuICAvLyBzaG93LWNoYXJ0cy1vbi1kZW1hbmQtb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgY2hhcnRzIG9uIGRlbWFuZCBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51XG4gICdzaG93Q2hhcnRzT25EZW1hbmRPcHRpb246IHNob3ctY2hhcnRzLW9uLWRlbWFuZC1vcHRpb24nLFxuXG4gIC8vIHNob3ctcmVzZXQtd2lkdGgtb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgcmVzZXQgd2lkdGggbWVudSBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51XG4gICdzaG93UmVzZXRXaWR0aE9wdGlvbjogc2hvdy1yZXNldC13aWR0aC1vcHRpb24nLFxuXG4gICdkaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb246IGRpc2FibGUtc2VsZWN0aW9uLWZ1bmN0aW9uJyxcblxuICAnbm9uSGlkYWJsZUNvbHVtbnM6IG5vbi1oaWRhYmxlLWNvbHVtbnMnLFxuICAncmVhZE9ubHk6IHJlYWQtb25seScsXG4gICdyZWFkT25seUNvbmZpZ3VyYXRpb246IHJlYWQtb25seS1jb25maWd1cmF0aW9uJyxcbiAgJ3Nob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5OiBzaG93LW5vdGlmaWNhdGlvbi1vZi1yZWFkLW9ubHknXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVEFCTEUgPSBbXG4gICdvblJvd1NlbGVjdGVkJyxcbiAgJ29uUm93RGVzZWxlY3RlZCcsXG4gICdvblJvd0RlbGV0ZWQnXG5dO1xuXG5jb25zdCBzdGlja3lIZWFkZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93IC5tYXQtbWRjLXRhYmxlLXN0aWNreSc7XG5jb25zdCBzdGlja3lGb290ZXJTZWxlY3RvciA9ICcubWF0LW1kYy1mb290ZXItcm93IC5tYXQtbWRjLXRhYmxlLXN0aWNreSc7XG5jb25zdCByb3dTZWxlY3RvciA9ICcubWF0LW1kYy1yb3cnO1xuY29uc3QgaGVhZGVyU2VsZWN0b3IgPSAnLm1hdC1tZGMtaGVhZGVyLXJvdyc7XG5jb25zdCBmb290ZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93JztcblxudHlwZSBEaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb24gPSAoaXRlbTogYW55KSA9PiBib29sZWFuO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9UYWJsZUNvbXBvbmVudFN0YXRlU2VydmljZSB9LFxuICAgIHsgcHJvdmlkZTogVklSVFVBTF9TQ1JPTExfU1RSQVRFR1ksIHVzZUNsYXNzOiBPVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3kgfSxcbiAgICB7IHByb3ZpZGU6IE9UYWJsZUJhc2UsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE9UYWJsZUNvbXBvbmVudCkgfVxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxuICAgIF0pXG4gIF0sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRSxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVEFCTEUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm9udGltaXplLXRhYmxlXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm8tdGFibGUtZml4ZWRdJzogJ2ZpeGVkSGVhZGVyJyxcbiAgICAnW2NsYXNzLm8tdGFibGUtZGlzYWJsZWRdJzogJyFlbmFibGVkJyxcbiAgICAnKGRvY3VtZW50OmNsaWNrKSc6ICdoYW5kbGVET01DbGljaygkZXZlbnQpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQ8T1RhYmxlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgcHVibGljIHN0YXRpYyBERUZBVUxUX0JBU0VfU0laRV9TUElOTkVSID0gMTAwO1xuICBwdWJsaWMgc3RhdGljIEZJUlNUX0xBU1RfQ0VMTF9QQURESU5HID0gMjQ7XG4gIHB1YmxpYyBzdGF0aWMgRVhQQU5ERURfUk9XX0NPTlRBSU5FUl9DTEFTUyA9ICdleHBhbmRlZC1yb3ctY29udGFpbmVyLSc7XG4gIHB1YmxpYyBzdGF0aWMgQVZBSUxBQkxFX0dST1VQSU5HX0NPTFVNTlNfUkVOREVSRVJTID0gWydjdXJyZW5jeScsICdpbnRlZ2VyJywgJ3JlYWwnXTtcblxuICBwdWJsaWMgREVUQUlMX01PREVfTk9ORSA9IENvZGVzLkRFVEFJTF9NT0RFX05PTkU7XG4gIHB1YmxpYyBFRElUX01PREVfTk9ORSA9IENvZGVzLkVESVRJT05fTU9ERV9OT05FO1xuXG4gIHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZTtcblxuICBwdWJsaWMgcGFnaW5hdG9yOiBPVGFibGVQYWdpbmF0b3I7XG5cbiAgc29ydDogT01hdFNvcnQ7XG5cbiAgQFZpZXdDaGlsZChPTWF0U29ydClcbiAgc2V0IG9NYXRTb3J0KF9zb3J0OiBPTWF0U29ydCkge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChfc29ydCkgJiZcbiAgICAgICghVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0KSB8fCAoVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0KSAmJiBVdGlsLnN0cmluZ2lmeSh0aGlzLnNvcnQpICE9PSBVdGlsLnN0cmluZ2lmeShfc29ydCkpKSkge1xuICAgICAgdGhpcy5zb3J0ID0gX3NvcnQ7XG4gICAgICB0aGlzLnJlZ2lzdGVyU29ydExpc3RlbmVyKCk7XG4gICAgICB0aGlzLnNldERhdGFzb3VyY2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcHVibGljIHZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHB1YmxpYyBvVGFibGVHbG9iYWxDb25maWc6IE9UYWJsZUdsb2JhbENvbmZpZztcbiAgQFZpZXdDaGlsZCgndmlydHVhbFNjcm9sbFZpZXdQb3J0Jykgc2V0IGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCh2YWx1ZTogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgaWYgKHZhbHVlICE9IHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVIZWFkZXJBbmRGb290ZXJTdGlja3lQb3NpdGlvbnMoKTtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmlld3BvcnRTaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24gPSB0aGlzLmNoZWNrVmlld1BvcnRTdWJqZWN0LnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gb25seSBmb3IgaW5zaWRlVGFiQnVnV29ya2Fyb3VuZFxuICBwcm90ZWN0ZWQgdGFibGVIZWFkZXJzOiBBcnJheTxPVGFibGVIZWFkZXJDb21wb25lbnQ+ID0gW107XG5cbiAgQFZpZXdDaGlsZCgnc3Bpbm5lckNvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBzcGlubmVyQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIEBDb250ZW50Q2hpbGQoT1RhYmxlUm93RXhwYW5kYWJsZUNvbXBvbmVudClcbiAgdGFibGVSb3dFeHBhbmRhYmxlOiBPVGFibGVSb3dFeHBhbmRhYmxlQ29tcG9uZW50O1xuXG4gIF9maWx0ZXJDb2x1bW5zOiBBcnJheTxPRmlsdGVyQ29sdW1uPjtcbiAgcG9ydGFsSG9zdDogQXJyYXk8RG9tUG9ydGFsT3V0bGV0PiA9IFtdO1xuICBvbkRhdGFMb2FkZWRDZWxsUmVuZGVyZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuXG5cbiAgcHVibGljIHRhYmxlQ29udGV4dE1lbnU6IE9Db250ZXh0TWVudUNvbXBvbmVudDtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2VsZWN0QWxsQ2hlY2tib3g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGV4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93Q29uZmlndXJhdGlvbk9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBjb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93RmlsdGVyT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dSZXBvcnRPbkRlbWFuZE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93Q2hhcnRzT25EZW1hbmRPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd0J1dHRvbnNUZXh0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93UmVzZXRXaWR0aE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBFeHBhbmRhYmxlIGlucHV0IGNhbGxiYWNrIGZ1bmN0aW9uXG4gIHNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uOiAocm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICByZWFkT25seUZ1bmN0aW9uOiAoY29uZmlndXJhdGlvbjogYW55KSA9PiBib29sZWFuO1xuICByZWFkT25seUNvbmZpZ3VyYXRpb246IGFueTtcblxuICBpc0NvbXBvbmVudFJlYWRPbmx5KHNlbGVjdG9yOiBzdHJpbmcsIGF0dHI6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5Q29uZmlndXJhdGlvbj8uW3NlbGVjdG9yXT8uW2F0dHJdO1xuICB9XG4gIHByb3RlY3RlZCBfb1RhYmxlT3B0aW9uczogT1RhYmxlT3B0aW9ucztcblxuICBnZXQgb1RhYmxlT3B0aW9ucygpOiBPVGFibGVPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fb1RhYmxlT3B0aW9ucztcbiAgfVxuXG4gIHNldCBvVGFibGVPcHRpb25zKHZhbHVlOiBPVGFibGVPcHRpb25zKSB7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucyA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHF1aWNrRmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdmFsdWUgPSBVdGlsLnBhcnNlQm9vbGVhbihTdHJpbmcodmFsdWUpKTtcbiAgICB0aGlzLl9xdWlja0ZpbHRlciA9IHZhbHVlO1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZmlsdGVyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcXVpY2tGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3F1aWNrRmlsdGVyO1xuICB9XG5cbiAgc2V0IGZpbHRlckNhc2VTZW5zaXRpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9maWx0ZXJDYXNlU2Vuc2l0aXZlID0gQm9vbGVhbkNvbnZlcnRlcih2YWx1ZSk7XG4gICAgaWYgKHRoaXMuX29UYWJsZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA9IHRoaXMuX2ZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlckNhc2VTZW5zaXRpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgaW5zZXJ0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHJlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZGVsZXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGZpeGVkSGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dUaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBlZGl0aW9uTW9kZTogc3RyaW5nID0gQ29kZXMuRURJVElPTl9NT0RFX05PTkU7XG4gIHNlbGVjdGlvbk1vZGU6IHN0cmluZyA9IENvZGVzLlNFTEVDVElPTl9NT0RFX01VTFRJUExFO1xuXG4gIHByb3RlY3RlZCBfaG9yaXpvbnRhbFNjcm9sbCA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2V0IGhvcml6b250YWxTY3JvbGwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ob3Jpem9udGFsU2Nyb2xsID0gQm9vbGVhbkNvbnZlcnRlcih2YWx1ZSk7XG4gICAgdGhpcy5yZWZyZXNoQ29sdW1uc1dpZHRoRnJvbU9yaWdpbmFsRGVmaW5pdGlvbigpO1xuICB9XG5cbiAgZ2V0IGhvcml6b250YWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hvcml6b250YWxTY3JvbGw7XG4gIH1cblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1BhZ2luYXRvckZpcnN0TGFzdEJ1dHRvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgYXV0b0FsaWduVGl0bGVzOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIG11bHRpcGxlU29ydDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBvcmRlcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcmVzaXphYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGF1dG9BZGp1c3Q6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZ3JvdXBhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGV4cGFuZEdyb3Vwc1NhbWVMZXZlbDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBjb2xsYXBzZUdyb3VwZWRDb2x1bW5zOiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICB2aXJ0dWFsU2Nyb2xsOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGNvbnRleHRNZW51OiBib29sZWFuID0gdHJ1ZTtcbiAgLy8gTWFpbnRhaW5pbmcgdGhpcyBnZXR0ZXIgdG8gYWxsb3cgY29tcG9uZW50IGV4dGVuc2lvbnMgKGF2b2lkaW5nIGEgYnJlYWtpbmcgY2hhbmdlKVxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vZW5hYmxlZDtcbiAgfVxuICBwcm90ZWN0ZWQgX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTogYm9vbGVhbjtcbiAgc2V0IHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZSA9IEJvb2xlYW5Db252ZXJ0ZXIodmFsdWUpO1xuICAgIGlmICh0aGlzLnN0YXRlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RBbGxDaGVja2JveFZpc2libGUgPSBCb29sZWFuQ29udmVydGVyKHRoaXMuc3RhdGUuc2VsZWN0Q29sdW1uVmlzaWJsZSk7XG4gICAgfVxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSB0aGlzLl9zZWxlY3RBbGxDaGVja2JveFZpc2libGU7XG4gICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgfVxuXG4gIGdldCBzZWxlY3RBbGxDaGVja2JveFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTtcbiAgfVxuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBrZWVwU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IHRydWU7XG5cbiAgcHVibGljIGV4cG9ydE1vZGU6IHN0cmluZyA9IENvZGVzLkVYUE9SVF9NT0RFX1ZJU0lCTEU7XG4gIHB1YmxpYyBleHBvcnRTZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgdmlzaWJsZUV4cG9ydERpYWxvZ0J1dHRvbnM6IHN0cmluZztcbiAgcHVibGljIGRhb1RhYmxlOiBPVGFibGVEYW8gfCBudWxsO1xuICBwdWJsaWMgZGF0YVNvdXJjZTogT1RhYmxlRGF0YVNvdXJjZSB8IG51bGw7XG4gIHB1YmxpYyB2aXNpYmxlQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgc2VhcmNoZWFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgZGVmYXVsdFZpc2libGVDb2x1bW5zOiBzdHJpbmc7XG4gIHB1YmxpYyBncm91cGVkQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgbm9uSGlkYWJsZUNvbHVtbnM6IHN0cmluZztcblxuICBwdWJsaWMgc29ydENvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIGdyb3VwZWRDb2x1bW5UeXBlczogT0dyb3VwZWRDb2x1bW5UeXBlc1tdID0gW107XG4gIHB1YmxpYyByb3dDbGFzczogKHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLypwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBwcm90ZWN0ZWQgX3Zpc2libGVDb2xBcnJheTogc3RyaW5nW10gPSBbXTtcblxuICBnZXQgdmlzaWJsZUNvbEFycmF5KCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbEFycmF5O1xuICB9XG5cbiAgc2V0IHZpc2libGVDb2xBcnJheShhcmc6IGFueVtdKSB7XG4gICAgY29uc3QgcGVybWlzc2lvbnNCbG9ja2VkID0gdGhpcy5wZXJtaXNzaW9ucyAmJiB0aGlzLnBlcm1pc3Npb25zLmNvbHVtbnMgPyB0aGlzLnBlcm1pc3Npb25zLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZSA9PT0gZmFsc2UpLm1hcChjb2wgPT4gY29sLmF0dHIpIDogW107XG4gICAgY29uc3QgcGVybWlzc2lvbnNDaGVja2VkID0gYXJnLmZpbHRlcih2YWx1ZSA9PiBwZXJtaXNzaW9uc0Jsb2NrZWQuaW5kZXhPZih2YWx1ZSkgPT09IC0xKTtcbiAgICB0aGlzLl92aXNpYmxlQ29sQXJyYXkgPSBwZXJtaXNzaW9uc0NoZWNrZWQ7XG4gICAgaWYgKHRoaXMuX29UYWJsZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5zU2VsZWN0aW9uQ29sID0gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5pbmRleE9mKENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCkgIT09IC0xO1xuICAgICAgY29uc3QgY29udGFpbnNFeHBhbmRhYmxlQ29sID0gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5pbmRleE9mKENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpICE9PSAtMTtcbiAgICAgIGlmIChjb250YWluc1NlbGVjdGlvbkNvbCkge1xuICAgICAgICB0aGlzLl92aXNpYmxlQ29sQXJyYXkudW5zaGlmdChDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRhaW5zU2VsZWN0aW9uQ29sICYmIGNvbnRhaW5zRXhwYW5kYWJsZUNvbCkge1xuICAgICAgICB0aGlzLl92aXNpYmxlQ29sQXJyYXkgPSBbdGhpcy5fdmlzaWJsZUNvbEFycmF5WzBdXS5jb25jYXQoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSwgdGhpcy5fdmlzaWJsZUNvbEFycmF5LnNwbGljZSgxKSk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250YWluc0V4cGFuZGFibGVDb2wpIHtcbiAgICAgICAgICB0aGlzLl92aXNpYmxlQ29sQXJyYXkudW5zaGlmdChDb2Rlcy5OQU1FX0NPTFVNTl9FWFBBTkRBQkxFKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuX3Zpc2libGVDb2xBcnJheTtcbiAgICAgIHRoaXMuZ3JvdXBpbmdIZWFkZXJzUm93cyA9IHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMubWFwKHZpc2libGVDb2wgPT4gJ2dyb3VwSGVhZGVyLScgKyB2aXNpYmxlQ29sKTtcbiAgICB9XG4gIH1cblxuICBzb3J0Q29sQXJyYXk6IFNRTE9yZGVyW10gPSBbXTtcbiAgLyplbmQgb2YgcGFyc2VkIGlucHV0cyB2YXJpYWJsZXMgKi9cblxuICBwcm90ZWN0ZWQgdGFiR3JvdXBDb250YWluZXI6IE1hdFRhYkdyb3VwO1xuICBwcm90ZWN0ZWQgdGFiQ29udGFpbmVyOiBNYXRUYWI7XG4gIHRhYkdyb3VwQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJvdGVjdGVkIHBlbmRpbmdRdWVyeTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgcGVuZGluZ1F1ZXJ5RmlsdGVyID0gdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBzZXRTdGF0aWNEYXRhOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBhdm9pZFF1ZXJ5Q29sdW1uczogQXJyYXk8YW55PiA9IFtdO1xuICBwcm90ZWN0ZWQgYXN5bmNMb2FkQ29sdW1uczogQXJyYXk8YW55PiA9IFtdO1xuICBwcm90ZWN0ZWQgYXN5bmNMb2FkU3Vic2NyaXB0aW9uczogb2JqZWN0ID0ge307XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjb250ZXh0TWVudVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgdmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIG9uUm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25Sb3dEZXNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uUm93RGVsZXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvblJlaW5pdGlhbGl6ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvbkNvbnRlbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25GaWx0ZXJCeUNvbHVtbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBvVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQ6IE9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudDtcbiAgcHVibGljIG9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQ6IE9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG93VG90YWxzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgc2hvd1RvdGFsczogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc2hvd1RvdGFsc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ1NvcnRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBsb2FkaW5nU29ydGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubG9hZGluZ1NvcnRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdTY3JvbGxTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBsb2FkaW5nU2Nyb2xsOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU2Nyb2xsU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwdWJsaWMgc2hvd0xvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmxvYWRpbmcucGlwZShkZWJvdW5jZVRpbWUoMjAwKSksIC8vIGF2b2lkIGRpc3BsYXlpbmcgbG9hZGluZyBzcGlubmVyIGZvciBhIHZlcnkgc2hvcnQgdGltZVxuICAgIHRoaXMubG9hZGluZ1NvcnRpbmcsXG4gICAgdGhpcy5sb2FkaW5nU2Nyb2xsXG4gIF0pLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHByZXZbMF0gPT09IGN1cnJbMF0gJiYgcHJldlsxXSA9PT0gY3VyclsxXSAmJiBwcmV2WzJdID09PSBjdXJyWzJdKSwgLy8gYXZvaWQgZW1pdHRpbmcgc2FtZSB2YWx1ZSBtdWx0aXBsZSB0aW1lc1xuICAgIG1hcCgocmVzOiBib29sZWFuW10pID0+IHJlcy5zb21lKHIgPT4gcikpXG4gICk7XG5cbiAgcHVibGljIG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQ6IE9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQ7XG4gIHB1YmxpYyBzaG93Rmlyc3RJbnNlcnRhYmxlUm93OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93TGFzdEluc2VydGFibGVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGV4cGFuZGFibGVJdGVtOiBTZWxlY3Rpb25Nb2RlbDxhbnk+O1xuXG4gIHByb3RlY3RlZCBjbGlja1RpbWVyO1xuICBwcm90ZWN0ZWQgY2xpY2tEZWxheSA9IDIwMDtcbiAgcHJvdGVjdGVkIGNsaWNrUHJldmVudCA9IGZhbHNlO1xuICBwdWJsaWMgZWRpdGluZ0NlbGw6IGFueTtcbiAgcHJvdGVjdGVkIGVkaXRpbmdSb3c6IGFueTtcblxuICBzZXQgY3VycmVudFBhZ2UodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jdXJyZW50UGFnZSA9IHZhbDtcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHZhbDtcbiAgICAgIGlmICh0aGlzLm1hdHBhZ2luYXRvcikge1xuICAgICAgICB0aGlzLm1hdHBhZ2luYXRvci5wYWdlSW5kZXggPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGN1cnJlbnRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlO1xuICB9XG5cbiAgcHVibGljIG9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50OiBPVGFibGVRdWlja2ZpbHRlcjtcbiAgcHJvdGVjdGVkIHNvcnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIG9uUmVuZGVyZWREYXRhQ2hhbmdlOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBwcmV2aW91c1JlbmRlcmVyRGF0YTtcblxuICBxdWlja0ZpbHRlckNhbGxiYWNrOiBRdWlja0ZpbHRlckZ1bmN0aW9uO1xuICBkaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb246IERpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjtcblxuICBAVmlld0NoaWxkKCd0YWJsZUJvZHknKVxuICBwcm90ZWN0ZWQgdGFibGVCb2R5RWw6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlSGVhZGVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHRhYmxlSGVhZGVyRWw6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlVG9vbGJhcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICB0YWJsZVRvb2xiYXJFbDogRWxlbWVudFJlZjtcblxuICBob3Jpem9udGFsU2Nyb2xsZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBvblVwZGF0ZVNjcm9sbGVkU3RhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgcm93V2lkdGg7XG5cbiAgc3RvcmVQYWdpbmF0aW9uU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiBJbiB0aGUgY2FzZSB0aGUgdGFibGUgaGF2ZW50IHBhZ2luYXRpb25Db250cm9sIGFuZCBwYWdlYWJsZSwgdGhlIHRhYmxlIGhhcyBwYWdpbmF0aW9uIHZpcnR1YWwqL1xuICBwYWdlU2Nyb2xsVmlydHVhbCA9IDE7XG5cbiAgcHVibGljIHN0YXRpYyBERUZBVUxUX1JPV19IRUlHSFQgPSAzNjtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPVGFibGVQZXJtaXNzaW9ucztcbiAgbWF0TWVudTogTWF0TWVudTtcblxuICBAVmlld0NoaWxkKCd0YWJsZU1lbnUnKVxuICBvVGFibGVNZW51OiBPVGFibGVNZW51O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oT1RhYmxlT3B0aW9uQ29tcG9uZW50KVxuICB0YWJsZU9wdGlvbnM6IFF1ZXJ5TGlzdDxPVGFibGVPcHRpb25Db21wb25lbnQ+O1xuXG4gIG9UYWJsZUJ1dHRvbnM6IE9UYWJsZUJ1dHRvbnM7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihPVGFibGVCdXR0b25Db21wb25lbnQpXG4gIHRhYmxlQnV0dG9uczogUXVlcnlMaXN0PE9UYWJsZUJ1dHRvbj47XG5cbiAgQENvbnRlbnRDaGlsZCgnby10YWJsZS1xdWlja2ZpbHRlcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHF1aWNrZmlsdGVyQ29udGVudENoaWxkOiBPVGFibGVRdWlja2ZpbHRlcjtcblxuXG4gIEBDb250ZW50Q2hpbGRyZW4oT1RhYmxlRXhwb3J0QnV0dG9uQ29tcG9uZW50KVxuICBleHBvcnRPcHRzVGVtcGxhdGU6IFF1ZXJ5TGlzdDxPVGFibGVFeHBvcnRCdXR0b25Db21wb25lbnQ+XG5cbiAgQENvbnRlbnRDaGlsZChPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmUpXG4gIHRhYmxlQ29sdW1uU2VsZWN0QWxsQ29udGVudENoaWxkOiBPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmU7XG5cblxuXG4gIHB1YmxpYyBncm91cGVkQ29sdW1uc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgW10pXG4gIHVwZGF0ZVNjcm9sbGVkU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvZHlXaWR0aCA9IHRoaXMudGFibGVCb2R5RWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsV2lkdGggPSB0aGlzLnRhYmxlQm9keUVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSB0aGlzLmhvcml6b250YWxTY3JvbGxlZDtcbiAgICAgICAgdGhpcy5ob3Jpem9udGFsU2Nyb2xsZWQgPSBzY3JvbGxXaWR0aCA+IGJvZHlXaWR0aDtcbiAgICAgICAgaWYgKHByZXZpb3VzU3RhdGUgIT09IHRoaXMuaG9yaXpvbnRhbFNjcm9sbGVkKSB7XG4gICAgICAgICAgdGhpcy5vblVwZGF0ZVNjcm9sbGVkU3RhdGUuZW1pdCh0aGlzLmhvcml6b250YWxTY3JvbGxlZCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrVmlld3BvcnRTaXplKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2lzQ29sdW1uRmlsdGVyc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCBpc0NvbHVtbkZpbHRlcnNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ29sdW1uRmlsdGVyc0FjdGl2ZTtcbiAgfVxuXG4gIHNldCBpc0NvbHVtbkZpbHRlcnNBY3RpdmUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdmFsO1xuICB9XG5cbiAgZ3JvdXBpbmdIZWFkZXJzUm93czogc3RyaW5nW10gPSBbXTtcblxuICBwdWJsaWMgb1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50OiBPVGFibGVDb2x1bW5zR3JvdXBpbmc7XG5cbiAgQENvbnRlbnRDaGlsZChPVGFibGVDb250ZXh0TWVudUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgY29udGV4dE1lbnVDb250ZW50Q2hpbGQ6IE9UYWJsZUNvbnRleHRNZW51Q29tcG9uZW50O1xuXG4gIHByb3RlY3RlZCB0cmlnZ2VyU2VsZWN0aW9uRXZlbnRzOiBib29sZWFuID0gdHJ1ZTtcblxuICBAVmlld0NoaWxkcmVuKE1hdFRvb2x0aXApXG4gIHRvb2x0aXA6IFF1ZXJ5TGlzdDxNYXRUb29sdGlwPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFZJUlRVQUxfU0NST0xMX1NUUkFURUdZKSBwdWJsaWMgcmVhZG9ubHkgc2Nyb2xsU3RyYXRlZ3k6IE9UYWJsZVZpcnR1YWxTY3JvbGxTdHJhdGVneVxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgZWxSZWYsIGZvcm0pO1xuXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucyA9IG5ldyBEZWZhdWx0T1RhYmxlT3B0aW9ucygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFiR3JvdXBDb250YWluZXIgPSB0aGlzLmluamVjdG9yLmdldChNYXRUYWJHcm91cCk7XG4gICAgICB0aGlzLnRhYkNvbnRhaW5lciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1hdFRhYik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgZHVlIHRvIG5vdCBhbHdheXMgaXMgY29udGFpbmVkIG9uIHRhYi5cbiAgICB9XG5cbiAgICB0aGlzLnNuYWNrQmFyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFNuYWNrQmFyU2VydmljZSk7XG4gICAgdGhpcy5nZXRJbmplY3Rpb25Ub2tlbkNvbmZpZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbmplY3Rpb25Ub2tlbkNvbmZpZygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb1RhYmxlR2xvYmFsQ29uZmlnID0gdGhpcy5pbmplY3Rvci5nZXQoT19UQUJMRV9HTE9CQUxfQ09ORklHKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcuYXV0b0FkanVzdCkpIHtcbiAgICAgICAgdGhpcy5hdXRvQWRqdXN0ID0gb1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BZGp1c3Q7XG4gICAgICB9O1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5hdXRvQWxpZ25UaXRsZXMpKSB7XG4gICAgICAgIHRoaXMuYXV0b0FsaWduVGl0bGVzID0gb1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BbGlnblRpdGxlcztcbiAgICAgIH1cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0KSkge1xuICAgICAgICB0aGlzLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCA9IG9UYWJsZUdsb2JhbENvbmZpZy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQob1RhYmxlR2xvYmFsQ29uZmlnLmVkaXRpb25Nb2RlKSAmJiBDb2Rlcy5pc1ZhbGlkRWRpdGlvbk1vZGUob1RhYmxlR2xvYmFsQ29uZmlnLmVkaXRpb25Nb2RlKSkge1xuICAgICAgICB0aGlzLmVkaXRpb25Nb2RlID0gb1RhYmxlR2xvYmFsQ29uZmlnLmVkaXRpb25Nb2RlO1xuICAgICAgfVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5kZXRhaWxNb2RlICYmIENvZGVzLmlzVmFsaWREZXRhaWxNb2RlKG9UYWJsZUdsb2JhbENvbmZpZy5kZXRhaWxNb2RlKSkpIHtcbiAgICAgICAgdGhpcy5kZXRhaWxNb2RlID0gb1RhYmxlR2xvYmFsQ29uZmlnLmRldGFpbE1vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcucm93SGVpZ2h0KSAmJiBDb2Rlcy5pc1ZhbGlkUm93SGVpZ2h0KG9UYWJsZUdsb2JhbENvbmZpZy5yb3dIZWlnaHQpKSB7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0ID0gb1RhYmxlR2xvYmFsQ29uZmlnLnJvd0hlaWdodDtcbiAgICAgIH07XG5cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcuc2hvd0NoYXJ0c09uRGVtYW5kT3B0aW9uKSkge1xuICAgICAgICB0aGlzLnNob3dSZXBvcnRPbkRlbWFuZE9wdGlvbiA9IG9UYWJsZUdsb2JhbENvbmZpZy5zaG93Q2hhcnRzT25EZW1hbmRPcHRpb247XG4gICAgICB9O1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5zaG93UmVwb3J0T25EZW1hbmRPcHRpb24pKSB7XG4gICAgICAgIHRoaXMuc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uID0gb1RhYmxlR2xvYmFsQ29uZmlnLnNob3dSZXBvcnRPbkRlbWFuZE9wdGlvbjtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSBpcyBvcHRpb25hbFxuICAgIH1cblxuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5zdGF0ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIGlmICh0aGlzLm9UYWJsZUJ1dHRvbnMgJiYgdGhpcy50YWJsZUJ1dHRvbnMgJiYgdGhpcy50YWJsZUJ1dHRvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vVGFibGVCdXR0b25zLnJlZ2lzdGVyQnV0dG9ucyh0aGlzLnRhYmxlQnV0dG9ucy50b0FycmF5KCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5hZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy5pbml0VGFibGVBZnRlclZpZXdJbml0KCk7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5tYXRNZW51ID0gdGhpcy5vVGFibGVNZW51Lm1hdE1lbnU7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUucmVnaXN0ZXJPcHRpb25zKHRoaXMudGFibGVPcHRpb25zLnRvQXJyYXkoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlKSB7XG4gICAgICB0aGlzLmV4cGFuZGFibGVJdGVtID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odGhpcy50YWJsZVJvd0V4cGFuZGFibGUubXVsdGlwbGUsIFtdKTtcbiAgICAgIHRoaXMuY3JlYXRlRXhwYW5kYWJsZUNvbHVtbigpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAodGhpcy50YWJsZUNvbHVtblNlbGVjdEFsbENvbnRlbnRDaGlsZCkge1xuICAgICAgLy9cbiAgICAgIHRoaXMuc2V0Q3VzdG9tRGVmaW5pdGlvbkluU2VsZWN0Q29sdW1uKHRoaXMudGFibGVDb2x1bW5TZWxlY3RBbGxDb250ZW50Q2hpbGQpXG4gICAgfVxuICB9XG5cbiAgc2V0Q3VzdG9tRGVmaW5pdGlvbkluU2VsZWN0Q29sdW1uKGRlZmluaXRpb246IE9UYWJsZUNvbHVtblNlbGVjdEFsbERpcmVjdGl2ZSkge1xuICAgIGlmIChkZWZpbml0aW9uLnRpdGxlKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi50aXRsZSA9IGRlZmluaXRpb24udGl0bGU7XG4gICAgfVxuICAgIGlmIChkZWZpbml0aW9uLndpZHRoKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi53aWR0aCA9IGRlZmluaXRpb24ud2lkdGg7XG4gICAgfVxuICAgIGlmIChkZWZpbml0aW9uLm1pbldpZHRoKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5taW5XaWR0aCA9IGRlZmluaXRpb24ubWluV2lkdGg7XG4gICAgfVxuICAgIGlmIChkZWZpbml0aW9uLm1heFdpZHRoKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5tYXhXaWR0aCA9IGRlZmluaXRpb24ubWF4V2lkdGg7XG4gICAgfVxuICAgIGlmIChkZWZpbml0aW9uLnJlc2l6YWJsZSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ucmVzaXphYmxlID0gZGVmaW5pdGlvbi5yZXNpemFibGU7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcE5hbWU6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNoYW5nZXMuYXV0b0FkanVzdCkgJiYgY2hhbmdlcy5hdXRvQWRqdXN0LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5hdXRvQWRqdXN0LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIHRoaXMuYXV0b0FkanVzdCA9IGNoYW5nZXMuYXV0b0FkanVzdC5jdXJyZW50VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlSGVhZGVyQW5kRm9vdGVyU3RpY2t5UG9zaXRpb25zKCkge1xuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgY29uc3Qgem9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbFN0cmF0ZWd5LnN0aWNreUNoYW5nZS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5maXhlZEhlYWRlciB8fCB0aGlzLmhhc0luc2VydGFibGVSb3coKSlcbiAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc3RpY2t5SGVhZGVyU2VsZWN0b3IpLmZvckVhY2goKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgZWwuc3R5bGUudG9wID0gLSB4ICsgJ3B4JztcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzdGlja3lGb290ZXJTZWxlY3RvcikuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbC5zdHlsZS5ib3R0b20gPSB4ICsgJ3B4JztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlRXhwYW5kYWJsZUNvbHVtbigpIHtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4gPSBuZXcgT0NvbHVtbigpO1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbi52aXNpYmxlID0gdGhpcy50YWJsZVJvd0V4cGFuZGFibGUgJiYgdGhpcy50YWJsZVJvd0V4cGFuZGFibGUuZXhwYW5kYWJsZUNvbHVtblZpc2libGU7XG4gICAgdGhpcy51cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcblxuICAgIC8vZGV0YWNoIGFsbCBwb3J0YSBob3N0IGNyZWF0ZWRcbiAgICBpZiAodGhpcy5wb3J0YWxIb3N0KSB7XG4gICAgICB0aGlzLnBvcnRhbEhvc3QuZm9yRWFjaCh4ID0+IHguZGV0YWNoKCkpO1xuICAgIH1cbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGdldFN1ZmZpeENvbHVtbkluc2VydGFibGUoKSB7XG4gICAgcmV0dXJuIENvZGVzLlNVRkZJWF9DT0xVTU5fSU5TRVJUQUJMRTtcbiAgfVxuXG4gIGdldEFjdGlvbnNQZXJtaXNzaW9ucygpOiBPUGVybWlzc2lvbnNbXSB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMgPyAodGhpcy5wZXJtaXNzaW9ucy5hY3Rpb25zIHx8IFtdKSA6IFtdO1xuICB9XG5cbiAgZ2V0TWVudVBlcm1pc3Npb25zKCk6IE9UYWJsZU1lbnVQZXJtaXNzaW9ucyB7XG4gICAgY29uc3QgcmVzdWx0OiBPVGFibGVNZW51UGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zID8gdGhpcy5wZXJtaXNzaW9ucy5tZW51IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiB7XG4gICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGl0ZW1zOiBbXVxuICAgIH07XG4gIH1cblxuICBnZXRPQ29sdW1uUGVybWlzc2lvbnMoYXR0cjogc3RyaW5nKTogT1Blcm1pc3Npb25zIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmNvbHVtbnMgfHwgW10pIDogW107XG4gICAgcmV0dXJuIGNvbHVtbnMuZmluZChjb21wID0+IGNvbXAuYXR0ciA9PT0gYXR0cikgfHwgeyBhdHRyOiBhdHRyLCBlbmFibGVkOiB0cnVlLCB2aXNpYmxlOiB0cnVlIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QWN0aW9uUGVybWlzc2lvbnMoYXR0cjogc3RyaW5nKTogT1Blcm1pc3Npb25zIHtcbiAgICBjb25zdCBhY3Rpb25zUGVybSA9IHRoaXMucGVybWlzc2lvbnMgPyAodGhpcy5wZXJtaXNzaW9ucy5hY3Rpb25zIHx8IFtdKSA6IFtdO1xuICAgIGNvbnN0IHBlcm1pc3Npb25zOiBPUGVybWlzc2lvbnMgPSBhY3Rpb25zUGVybS5maW5kKHAgPT4gcC5hdHRyID09PSBhdHRyKTtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMgfHwge1xuICAgICAgYXR0cjogYXR0cixcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBlbmFibGVkOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKGF0dHI6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbnNQZXJtID0gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gICAgY29uc3QgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IGFjdGlvbnNQZXJtLmZpbmQocCA9PiBwLmF0dHIgPT09IGF0dHIpO1xuICAgIGNvbnN0IGVuYWJsZWRQZXJtaXNpb24gPSBQZXJtaXNzaW9uc1V0aWxzLmNoZWNrRW5hYmxlZFBlcm1pc3Npb24ocGVybWlzc2lvbnMpO1xuICAgIGlmICghZW5hYmxlZFBlcm1pc2lvbikge1xuICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1BFUk1JU1NJT04nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuYWJsZWRQZXJtaXNpb247XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHdoYXQgaW5pdGlhbGl6ZSB2YXJzIGFuZCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBpbml0aWFsaXplKCk6IGFueSB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucyA9IG5ldyBEZWZhdWx0T1RhYmxlT3B0aW9ucygpO1xuICAgIGlmICh0aGlzLnRhYkdyb3VwQ29udGFpbmVyICYmIHRoaXMudGFiQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyVGFiTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHBhcmFtcyBvZiB0aGUgdGFibGVcbiAgICB0aGlzLmluaXRpYWxpemVQYXJhbXMoKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZURhbygpO1xuXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFRhYmxlUGVybWlzc2lvbnModGhpcy5vYXR0ciwgdGhpcy5hY3RSb3V0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZURhbygpIHtcbiAgICAvLyBDb25maWd1cmUgZGFvIG1ldGhvZHNcbiAgICBjb25zdCBxdWVyeU1ldGhvZE5hbWUgPSB0aGlzLnBhZ2VhYmxlID8gdGhpcy5wYWdpbmF0ZWRRdWVyeU1ldGhvZCA6IHRoaXMucXVlcnlNZXRob2Q7XG4gICAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICAgIHF1ZXJ5OiBxdWVyeU1ldGhvZE5hbWUsXG4gICAgICB1cGRhdGU6IHRoaXMudXBkYXRlTWV0aG9kLFxuICAgICAgZGVsZXRlOiB0aGlzLmRlbGV0ZU1ldGhvZCxcbiAgICAgIGluc2VydDogdGhpcy5pbnNlcnRNZXRob2RcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc3RhdGljRGF0YSkge1xuICAgICAgdGhpcy5xdWVyeU9uQmluZCA9IGZhbHNlO1xuICAgICAgdGhpcy5xdWVyeU9uSW5pdCA9IGZhbHNlO1xuICAgICAgdGhpcy5kYW9UYWJsZSA9IG5ldyBPVGFibGVEYW8odW5kZWZpbmVkLCB0aGlzLmVudGl0eSwgbWV0aG9kcyk7XG4gICAgICB0aGlzLnNldERhdGFBcnJheSh0aGlzLnN0YXRpY0RhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZVNlcnZpY2UoKTtcbiAgICAgIHRoaXMuZGFvVGFibGUgPSBuZXcgT1RhYmxlRGFvKHRoaXMuZGF0YVNlcnZpY2UsIHRoaXMuZW50aXR5LCBtZXRob2RzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgcmVpbml0aWFsaXplIHRhYmxlIGFkZGluZyBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICByZWluaXRpYWxpemUob3B0aW9uczogT1RhYmxlSW5pdGlhbGl6YXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGNsb25lZE9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdlbnRpdHknKSkge1xuICAgICAgICB0aGlzLmVudGl0eSA9IGNsb25lZE9wdHMuZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ3NlcnZpY2UnKSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBjbG9uZWRPcHRzLnNlcnZpY2U7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnY29sdW1ucycpKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IGNsb25lZE9wdHMuY29sdW1ucztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCd2aXNpYmxlQ29sdW1ucycpKSB7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSBjbG9uZWRPcHRzLnZpc2libGVDb2x1bW5zO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWaXNpYmxlQ29sdW1ucycpKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZpc2libGVDb2x1bW5zID0gY2xvbmVkT3B0cy5kZWZhdWx0VmlzaWJsZUNvbHVtbnM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgna2V5cycpKSB7XG4gICAgICAgIHRoaXMua2V5cyA9IGNsb25lZE9wdHMua2V5cztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdzb3J0Q29sdW1ucycpKSB7XG4gICAgICAgIHRoaXMuc29ydENvbHVtbnMgPSBjbG9uZWRPcHRzLnNvcnRDb2x1bW5zO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ3BhcmVudEtleXMnKSkge1xuICAgICAgICB0aGlzLnBhcmVudEtleXMgPSBjbG9uZWRPcHRzLnBhcmVudEtleXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdmaWx0ZXJDb2x1bW5zJykpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQpIHtcbiAgICAgICAgICB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgPSBuZXcgT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCh0aGlzLmluamVjdG9yLCB0aGlzKTtcbiAgICAgICAgICB0aGlzLm9UYWJsZU1lbnUub25WaXNpYmxlRmlsdGVyT3B0aW9uQ2hhbmdlLm5leHQodGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQpO1xuICAgICAgICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5jb2x1bW5zID0gY2xvbmVkT3B0cy5maWx0ZXJDb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5jb2x1bW5zID0gdGhpcy5zZWFyY2hlYWJsZUNvbHVtbnMuam9pbihcIjtcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB0aGlzLnN0YXRlLnJlc2V0KHRoaXMucGFnZWFibGUpO1xuICAgIHRoaXMuaW5pdFRhYmxlQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIHRoaXMub25SZWluaXRpYWxpemUuZW1pdChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0VGFibGVBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucGFyc2VWaXNpYmxlQ29sdW1ucygpO1xuICAgIHRoaXMucGFyc2VTZWFyY2hlYWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLnNldERhdGFzb3VyY2UoKTtcbiAgICB0aGlzLnBhcnNlR3JvdXBlZENvbHVtbnMoKTtcbiAgICB0aGlzLnBhcnNlR3JvdXBlZENvbHVtblR5cGVzKCk7XG4gICAgdGhpcy5wYXJzZVNvcnRDb2x1bW5zKCk7XG4gICAgdGhpcy5zZXRGaWx0ZXJzQ29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMuYWRkRGVmYXVsdFJvd0J1dHRvbnMoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQpKSB7XG4gICAgICB0aGlzLnNldEdyb3VwQ29sdW1ucyh0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudC5jb2x1bW5zQXJyYXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gIH1cbiAgcGFyc2VTZWFyY2hlYWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zZWFyY2hlYWJsZUNvbHVtbnMgPSB0aGlzLnZpc2libGVDb2xBcnJheS5maWx0ZXIoY29sID0+IHtcbiAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oY29sKTtcbiAgICAgIHJldHVybiBvQ29sICYmIG9Db2wuc2VhcmNoYWJsZTtcbiAgICB9KVxuXG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNvcnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UpIHtcbiAgICAgIHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjcm9sbFN0cmF0ZWd5KSB7XG4gICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnMpLmZvckVhY2goaWR4ID0+IHtcbiAgICAgIGlmICh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbaWR4XSkge1xuICAgICAgICB0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbaWR4XS51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1cGRhdGUgc3RvcmUgbG9jYWxzdG9yYWdlLCBjYWxsIG9mIHRoZSBJTG9jYWxTdG9yYWdlXG4gICAqL1xuICBnZXREYXRhVG9TdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0RGF0YVRvU3RvcmUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnOiBhbnkpIHtcbiAgICBjb25zdCBxdWlja0ZpbHRlciA9IChhcmcgYXMgT1RhYmxlUXVpY2tmaWx0ZXIpO1xuICAgIC8vIGZvcmNpbmcgcXVpY2tGaWx0ZXJDb21wb25lbnQgdG8gYmUgdW5kZWZpbmVkLCB0YWJsZSB1c2VzIG9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50ID0gcXVpY2tGaWx0ZXI7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQpKSB7XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnNldFZhbHVlKHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJWYWx1ZSwgZmFsc2UpO1xuICAgICAgdGhpcy5xdWlja0ZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQub25DaGFuZ2Uuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdCh2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJQYWdpbmF0aW9uKHZhbHVlOiBPVGFibGVQYWdpbmF0b3IpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25Db250cm9scyA9IHRydWU7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29udGV4dE1lbnUodmFsdWU6IE9Db250ZXh0TWVudUNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVDb250ZXh0TWVudSA9IHZhbHVlO1xuICAgIHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlQ29udGV4dE1lbnUub25TaG93LnN1YnNjcmliZSgocGFyYW1zOiBJT0NvbnRleHRNZW51Q29udGV4dCkgPT4ge1xuICAgICAgcGFyYW1zLmNsYXNzID0gJ28tdGFibGUtY29udGV4dC1tZW51ICcgKyB0aGlzLnJvd0hlaWdodDtcbiAgICAgIGlmIChwYXJhbXMuZGF0YSAmJiAhdGhpcy5pc1Jvd1NlbGVjdGVkKHBhcmFtcy5kYXRhLnJvd1ZhbHVlKSkge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocGFyYW1zLmRhdGEucm93VmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVnaXN0ZXJEZWZhdWx0Q29sdW1uKGNvbHVtbjogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4pKSkge1xuICAgICAgLy8gYSBkZWZhdWx0IGNvbHVtbiBkZWZpbml0aW9uIHRyeWluZyB0byByZXBsYWNlIGFuIGFscmVhZHkgZXhpc3RpbmcgZGVmaW5pdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xEZWY6IE9Db2x1bW4gPSB0aGlzLmNyZWF0ZU9Db2x1bW4oY29sdW1uLCB0aGlzKTtcbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIGFsbCBjb2x1bW5zIGFuZCBwcm9wZXJ0aWVzIGluIHZhciBjb2x1bW5zQXJyYXlcbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgcmVnaXN0ZXJDb2x1bW4oY29sdW1uOiBPVGFibGVDb2x1bW5Db21wb25lbnQgfCBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50IHwgYW55KSB7XG4gICAgY29uc3QgY29sdW1uQXR0ciA9ICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykgPyBjb2x1bW4gOiBjb2x1bW4uYXR0cjtcbiAgICBjb25zdCBjb2x1bW5QZXJtaXNzaW9uczogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRPQ29sdW1uUGVybWlzc2lvbnMoY29sdW1uQXR0cik7XG4gICAgaWYgKCFjb2x1bW5QZXJtaXNzaW9ucy52aXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRGVmYXVsdENvbHVtbihjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbkRlZiA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbkRlZikgJiYgVXRpbC5pc0RlZmluZWQoY29sdW1uRGVmLmRlZmluaXRpb24pKSB7XG4gICAgICAvLyBhIG8tdGFibGUtY29sdW1uIGRlZmluaXRpb24gdHJ5aW5nIHRvIHJlcGxhY2UgYW4gYWxyZWFkeSBleGlzdGluZyBvLXRhYmxlLWNvbHVtbiBkZWZpbml0aW9uXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sRGVmOiBPQ29sdW1uID0gdGhpcy5jcmVhdGVPQ29sdW1uKGNvbHVtbi5hdHRyLCB0aGlzLCBjb2x1bW4pO1xuICAgIGxldCBjb2x1bW5XaWR0aCA9IHRoaXMuZ2V0Q29sdW1uV2lkdGhGcm9tU3RhdGUoY29sRGVmKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uV2lkdGgpKSB7XG4gICAgICBjb2xEZWYud2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiAoY29sdW1uLmFzeW5jTG9hZCB8fCBjb2x1bW4udHlwZSA9PT0gJ2FjdGlvbicpKSB7XG4gICAgICB0aGlzLmF2b2lkUXVlcnlDb2x1bW5zLnB1c2goY29sdW1uLmF0dHIpO1xuICAgICAgaWYgKGNvbHVtbi5hc3luY0xvYWQpIHtcbiAgICAgICAgdGhpcy5hc3luY0xvYWRDb2x1bW5zLnB1c2goY29sdW1uLmF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWY6IE9Db2x1bW4pIHtcbiAgICBjb2xEZWYudmlzaWJsZSA9ICh0aGlzLl92aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihjb2xEZWYuYXR0cikgIT09IC0xKTtcbiAgICAvLyBGaW5kIGNvbHVtbiBkZWZpbml0aW9uIGJ5IG5hbWVcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RpbmcgPSB0aGlzLmdldE9Db2x1bW4oY29sRGVmLmF0dHIpO1xuICAgIGlmIChhbHJlYWR5RXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmVwbGFjaW5nSW5kZXggPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuaW5kZXhPZihhbHJlYWR5RXhpc3RpbmcpO1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zW3JlcGxhY2luZ0luZGV4XSA9IGNvbERlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnB1c2goY29sRGVmKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDb2x1bW5zT3JkZXIoKTtcbiAgICB0aGlzLnJlZnJlc2hFZGl0aW9uTW9kZVdhcm4oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoRWRpdGlvbk1vZGVXYXJuKCkge1xuICAgIGlmICh0aGlzLmVkaXRpb25Nb2RlICE9PSBDb2Rlcy5FRElUSU9OX01PREVfTk9ORSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlZGl0YWJsZUNvbHVtbnMgPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiB7XG4gICAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29sLmVkaXRvcik7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoZWRpdGFibGVDb2x1bW5zLmxlbmd0aCA+IDAgJiYgIXRoaXMuaGFzSW5zZXJ0YWJsZVJvdygpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVXNpbmcgYSBjb2x1bW4gd2l0aCBhIGVkaXRvciBidXQgdGhlcmUgaXMgbm8gZWRpdGlvbi1tb2RlIGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcmVnaXN0ZXJDb2x1bW5BZ2dyZWdhdGUoY29sdW1uOiBPQ29sdW1uQWdncmVnYXRlKSB7XG4gICAgdGhpcy5zaG93VG90YWxzU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGFscmVhZHlFeGlzdGluZyA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgaWYgKGFscmVhZHlFeGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXBsYWNpbmdJbmRleCA9IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5pbmRleE9mKGFscmVhZHlFeGlzdGluZyk7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnNbcmVwbGFjaW5nSW5kZXhdLmFnZ3JlZ2F0ZSA9IGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlclRhYmxlSGVhZGVycyh0YWJsZUhlYWRlcjogT1RhYmxlSGVhZGVyQ29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMudGFibGVIZWFkZXJzLmZpbmRJbmRleChoZWFkZXIgPT4gaGVhZGVyLmNvbHVtbi5hdHRyID09PSB0YWJsZUhlYWRlci5jb2x1bW4uYXR0cikgPT09IC0xKSB7XG4gICAgICB0aGlzLnRhYmxlSGVhZGVycy5wdXNoKHRhYmxlSGVhZGVyKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVZpc2libGVDb2x1bW5zKGRlZmF1bHRDb25maWd1cmF0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5jb2x1bW5zRGlzcGxheSkge1xuICAgICAgLy8gZmlsdGVyaW5nIGNvbHVtbnMgdGhhdCBtaWdodCBiZSBpbiBzdGF0ZSBzdG9yYWdlIGJ1dCBub3QgaW4gdGhlIGFjdHVhbCB0YWJsZSBkZWZpbml0aW9uXG4gICAgICBsZXQgc3RhdGVDb2xzOiBPQ29sdW1uRGlzcGxheVtdID0gW107XG4gICAgICB0aGlzLnN0YXRlLmNvbHVtbnNEaXNwbGF5LmZvckVhY2goKG9Db2wsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVmlzaWJsZUNvbEluQ29sdW1ucyA9IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuYXR0ciA9PT0gb0NvbC5hdHRyKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChpc1Zpc2libGVDb2xJbkNvbHVtbnMpIHtcbiAgICAgICAgICBzdGF0ZUNvbHMucHVzaChvQ29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBsb2FkIHRoZSBjb2x1bW4gJyArIG9Db2wuYXR0ciArICcgZnJvbSB0aGUgbG9jYWxzdG9yYWdlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGRlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN0YXRlQ29scyA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZUNvbHMgPSB0aGlzLmNoZWNrQ2hhbmdlc1Zpc2libGVDb2x1bW1uc0luSW5pdGlhbENvbmZpZ3VyYXRpb24oc3RhdGVDb2xzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnNvcnQoKGE6IE9Db2x1bW4sIGI6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhBID0gc3RhdGVDb2xzLmZpbmRJbmRleChjb2wgPT4gY29sLmF0dHIgPT09IGEuYXR0cik7XG4gICAgICAgIGNvbnN0IGluZGV4QiA9IHN0YXRlQ29scy5maW5kSW5kZXgoY29sID0+IGNvbC5hdHRyID09PSBiLmF0dHIpO1xuICAgICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnZpc2libGVDb2xBcnJheSA9IHN0YXRlQ29scy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZpc2libGUpLm1hcChpdGVtID0+IGl0ZW0uYXR0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZUNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuZGVmYXVsdFZpc2libGVDb2x1bW5zID8gdGhpcy5kZWZhdWx0VmlzaWJsZUNvbHVtbnMgOiB0aGlzLnZpc2libGVDb2x1bW5zLCB0cnVlKTtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGEuYXR0cikgLSB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGIuYXR0cikpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQ2hhbmdlc1Zpc2libGVDb2x1bW1uc0luSW5pdGlhbENvbmZpZ3VyYXRpb24oc3RhdGVDb2xzOiBPQ29sdW1uRGlzcGxheVtdKTogT0NvbHVtbkRpc3BsYXlbXSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5jb2x1bW5zRGlzcGxheS5maWx0ZXIoeCA9PiB4LnZpc2libGUpLm1hcCh4ID0+IHguYXR0cik7XG5cbiAgICAgIGNvbnN0IHZpc2libGVDb2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLnZpc2libGVDb2x1bW5zLCB0cnVlKTtcblxuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gdmlzaWJsZS1jb2x1bW5zIHRoYXQgdGhleSBhcmVudCBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlXG4gICAgICAvLyBpbiB0aGlzIGNhc2UgeW91IGhhdmUgdG8gYWRkIHRoaXMgY29sdW1uIHRvIHRoaXMudmlzaWJsZUNvbEFycmF5XG4gICAgICBjb25zdCBjb2xUb0FkZEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyh2aXNpYmxlQ29sQXJyYXksIG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5KTtcbiAgICAgIGNvbFRvQWRkSW5WaXNpYmxlQ29sLmZvckVhY2goKGNvbEFkZCkgPT4ge1xuICAgICAgICBsZXQgaW5kZXhDb2wgPSBzdGF0ZUNvbHMuZmluZEluZGV4KGNvbCA9PiBjb2wuYXR0ciA9PT0gY29sQWRkKTtcbiAgICAgICAgaWYgKGluZGV4Q29sID4gLTEpIHtcbiAgICAgICAgICBzdGF0ZUNvbHNbaW5kZXhDb2xdLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlQ29scy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB2aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihhLmF0dHIpIC0gdmlzaWJsZUNvbEFycmF5LmluZGV4T2YoYi5hdHRyKSk7XG4gICAgICB9KTtcblxuXG4gICAgICAvLyBGaW5kIHZhbHVlcyBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlIHRoYXQgdGhleSBhcmVudCBpbiB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgLy8gaW4gdGhpcyBjYXNlIHlvdSBoYXZlIHRvIGRlbGV0ZSB0aGlzIGNvbHVtbiB0byB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgY29uc3QgY29sVG9EZWxldGVJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXMob3JpZ2luYWxWaXNpYmxlQ29sQXJyYXksIHZpc2libGVDb2xBcnJheSk7XG4gICAgICBpZiAoY29sVG9EZWxldGVJblZpc2libGVDb2wubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGF0ZUNvbHMgPSBzdGF0ZUNvbHMuZmlsdGVyKGNvbCA9PiBjb2xUb0RlbGV0ZUluVmlzaWJsZUNvbC5pbmRleE9mKGNvbC5hdHRyKSA9PT0gLTEpO1xuICAgICAgfVxuXG4gICAgICAvL0lmIHRoZSBjb2x1bW5zIGluIG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5IGhhcyBjaGFuZ2VkIHRoZSBzb3J0aW5nXG4gICAgICBjb25zdCBjaGFuZ2VTb3J0VmlzaWJsZUNvbHVtbnMgPSBKU09OLnN0cmluZ2lmeSh2aXNpYmxlQ29sQXJyYXkpICE9PSBKU09OLnN0cmluZ2lmeShvcmlnaW5hbFZpc2libGVDb2xBcnJheSk7XG4gICAgICBpZiAoY2hhbmdlU29ydFZpc2libGVDb2x1bW5zICYmIHZpc2libGVDb2xBcnJheS5sZW5ndGggPT09IG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5Lmxlbmd0aCkge1xuICAgICAgICB2aXNpYmxlQ29sQXJyYXkuZm9yRWFjaCgoY29sLCB0b0luZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUluZGV4VG9DaGFuZ2UgPSBzdGF0ZUNvbHMuZmluZEluZGV4KHN0YXRlQ29sID0+IHN0YXRlQ29sLmF0dHIgPT09IGNvbCk7XG4gICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHN0YXRlQ29scywgZnJvbUluZGV4VG9DaGFuZ2UsIHRvSW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhdGVDb2xzO1xuICB9XG5cbiAgcGFyc2VTb3J0Q29sdW1ucygpIHtcbiAgICBjb25zdCBzb3J0Q29sdW1uc1BhcmFtID0gdGhpcy5zdGF0ZS5zb3J0Q29sdW1ucyB8fCB0aGlzLnNvcnRDb2x1bW5zO1xuICAgIHRoaXMuc29ydENvbEFycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnMoc29ydENvbHVtbnNQYXJhbSk7XG5cbiAgICAvLyBjaGVja2luZyB0aGUgb3JpZ2luYWwgc29ydCBjb2x1bW5zIHdpdGggdGhlIHNvcnQgY29sdW1ucyBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaW4gbG9jYWwgc3RvcmFnZVxuICAgIGlmICh0aGlzLnN0YXRlLnNvcnRDb2x1bW5zICYmIHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc29ydENvbHVtbnMpIHtcblxuICAgICAgY29uc3QgaW5pdGlhbENvbmZpZ1NvcnRDb2x1bW5zQXJyYXkgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNvcnRDb2x1bW5zKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU29ydENvbHVtbnNBcnJheSA9IFNlcnZpY2VVdGlscy5wYXJzZVNvcnRDb2x1bW5zKHRoaXMuc29ydENvbHVtbnMpO1xuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gdmlzaWJsZS1jb2x1bW5zIHRoYXQgdGhleSBhcmVudCBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlXG4gICAgICAvLyBpbiB0aGlzIGNhc2UgeW91IGhhdmUgdG8gYWRkIHRoaXMgY29sdW1uIHRvIHRoaXMudmlzaWJsZUNvbEFycmF5XG4gICAgICBjb25zdCBjb2xUb0FkZEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyhvcmlnaW5hbFNvcnRDb2x1bW5zQXJyYXksIGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5KTtcbiAgICAgIGlmIChjb2xUb0FkZEluVmlzaWJsZUNvbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbFRvQWRkSW5WaXNpYmxlQ29sLmZvckVhY2goY29sQWRkID0+IHtcbiAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKGNvbEFkZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xUb0RlbEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyhpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSwgb3JpZ2luYWxTb3J0Q29sdW1uc0FycmF5KTtcbiAgICAgIGlmIChjb2xUb0RlbEluVmlzaWJsZUNvbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbFRvRGVsSW5WaXNpYmxlQ29sLmZvckVhY2goKGNvbERlbCkgPT4ge1xuICAgICAgICAgIHRoaXMuc29ydENvbEFycmF5LmZvckVhY2goKGNvbCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5jb2x1bW5OYW1lID09PSBjb2xEZWwuY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVuc3VyaW5nIGNvbHVtbiBleGlzdGVuY2UgYW5kIGNoZWNraW5nIGl0cyBvcmRlcmFibGUgc3RhdGVcbiAgICBmb3IgKGxldCBpID0gdGhpcy5zb3J0Q29sQXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLnNvcnRDb2xBcnJheVtpXS5jb2x1bW5OYW1lO1xuICAgICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2xOYW1lKTtcbiAgICAgIGlmICghVXRpbC5pc0RlZmluZWQob0NvbCkgfHwgIW9Db2wub3JkZXJhYmxlKSB7XG4gICAgICAgIHRoaXMuc29ydENvbEFycmF5LnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBlbnN1cmVDb2x1bW5zT3JkZXIoKSB7XG5cbiAgICBsZXQgY29sdW1uc09yZGVyID0gW107XG4gICAgaWYgKHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIGNvbHVtbnNPcmRlciA9IHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkubWFwKGl0ZW0gPT4gaXRlbS5hdHRyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uc09yZGVyID0gdGhpcy5jb2xBcnJheS5maWx0ZXIoYXR0ciA9PiB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGF0dHIpID09PSAtMSk7XG4gICAgICBjb2x1bW5zT3JkZXIucHVzaCguLi50aGlzLnZpc2libGVDb2xBcnJheSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnNvcnQoKGE6IE9Db2x1bW4sIGI6IE9Db2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW5zT3JkZXIuaW5kZXhPZihhLmF0dHIpID09PSAtMSkge1xuICAgICAgICAvLyBpZiBpdCBpcyBub3QgaW4gbG9jYWwgc3RvcmFnZSBiZWNhdXNlIGl0IGlzIG5ldywga2VlcCBvcmRlclxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zT3JkZXIuaW5kZXhPZihhLmF0dHIpIC0gY29sdW1uc09yZGVyLmluZGV4T2YoYi5hdHRyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gIH1cblxuICBpbml0aWFsaXplUGFyYW1zKCk6IHZvaWQge1xuICAgIC8vIElmIHZpc2libGUtY29sdW1ucyBpcyBub3QgcHJlc2VudCB0aGVuIHZpc2libGUtY29sdW1ucyBpcyBhbGwgY29sdW1uc1xuICAgIGlmICghdGhpcy52aXNpYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbEFycmF5LmZvckVhY2goKHg6IHN0cmluZykgPT4gdGhpcy5yZWdpc3RlckNvbHVtbih4KSk7XG4gICAgICB0aGlzLmVuc3VyZUNvbHVtbnNPcmRlcigpO1xuICAgIH1cbiAgICAvLyBJbml0aWFsaXplIHF1aWNrRmlsdGVyXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXIgPSB0aGlzLnF1aWNrRmlsdGVyO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcGFnaW5hdG9yXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRpb25Db250cm9scykge1xuICAgICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgT0Jhc2VUYWJsZVBhZ2luYXRvcigpO1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB0aGlzLnF1ZXJ5Um93cztcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICB0aGlzLnBhZ2luYXRvci5zaG93Rmlyc3RMYXN0QnV0dG9ucyA9IHRoaXMuc2hvd1BhZ2luYXRvckZpcnN0TGFzdEJ1dHRvbnM7XG4gICAgfVxuXG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSkpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSAhIXRoaXMuc3RhdGUuc2VsZWN0Q29sdW1uVmlzaWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hlY2tpbmcgdGhlIG9yaWdpbmFsIHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSB3aXRoIHNlbGVjdC1jb2x1bW4tdmlzaWJsZSBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc2VsZWN0Q29sdW1uVmlzaWJsZSlcbiAgICAgICAgJiYgdGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGUgPT09IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc2VsZWN0Q29sdW1uVmlzaWJsZSkge1xuICAgICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gISF0aGlzLnN0YXRlLnNlbGVjdENvbHVtblZpc2libGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gdGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9Jbml0aWFsaXplIHNob3cgZmlsdGVyIGJ5IGNvbHVtbiBpY29uXG4gICAgdGhpcy5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSB0aGlzLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrYm94Q29sdW1uKCk7XG5cbiAgICBpZiAodGhpcy5zdG9yZVN0YXRlKSB7XG4gICAgICAvLyBpZiBxdWVyeS1yb3dzIGluIGluaXRpYWwgY29uZmlndXJhdGlvbiBpcyBlcXVhbHMgdG8gb3JpZ2luYWwgcXVlcnktcm93cyBpbnB1dFxuICAgICAgLy8gcXVlcnlfcm93cyB3aWxsIGJlIHRoZSB2YWx1ZSBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5xdWVyeVJvd3MpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzKVxuICAgICAgICAmJiB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnF1ZXJ5Um93cyA9PT0gdGhpcy5vcmlnaW5hbFF1ZXJ5Um93cykge1xuICAgICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUucXVlcnlSb3dzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLl9zZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLmlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKCksIFtdLCB0cnVlLCB0aGlzLmNvbXBhcmVSb3coKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb247XG4gIH1cblxuICB1cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCkge1xuICAgIGlmICghdGhpcy50YWJsZVJvd0V4cGFuZGFibGUgfHwgIXRoaXMudGFibGVSb3dFeHBhbmRhYmxlLmV4cGFuZGFibGVDb2x1bW5WaXNpYmxlKSB7IHJldHVybjsgfVxuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdID09PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QgJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1sxXSAhPT0gQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucyA9IFt0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdXS5jb25jYXQoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSwgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5zcGxpY2UoMSkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1swXSAhPT0gQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyVGFiTGlzdGVuZXIoKSB7XG4gICAgLy8gV2hlbiB0YWJsZSBpcyBjb250YWluZWQgaW50byB0YWIgY29tcG9uZW50LCBpdCBpcyBuZWNlc3NhcnkgdG8gaW5pdCB0YWJsZSBjb21wb25lbnQgd2hlbiBhdHRhY2hlZCB0byBET00uXG4gICAgdGhpcy50YWJHcm91cENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMudGFiR3JvdXBDb250YWluZXIuc2VsZWN0ZWRUYWJDaGFuZ2Uuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgIGxldCBpbnRlcnZhbDtcbiAgICAgIGNvbnN0IHRpbWVyQ2FsbGJhY2sgPSAodGFiOiBNYXRUYWIpID0+IHtcbiAgICAgICAgaWYgKHRhYiAmJiB0YWIuY29udGVudC5pc0F0dGFjaGVkKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgaWYgKHRhYiA9PT0gdGhpcy50YWJDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zaWRlVGFiQnVnV29ya2Fyb3VuZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ1F1ZXJ5KSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlcnlEYXRhKHRoaXMucGVuZGluZ1F1ZXJ5RmlsdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsgdGltZXJDYWxsYmFjayhldnQudGFiKTsgfSwgMTAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNpZGVUYWJCdWdXb3JrYXJvdW5kKCkge1xuICAgIHRoaXMucmVmcmVzaFNvcnRIZWFkZXJzKCk7XG4gIH1cblxuICByZWdpc3RlclNvcnRMaXN0ZW5lcigpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0KSkge1xuICAgICAgdGhpcy5zb3J0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5zb3J0U3Vic2NyaXB0aW9uID0gdGhpcy5zb3J0Lm9Tb3J0Q2hhbmdlLnN1YnNjcmliZSh0aGlzLm9uU29ydENoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuc29ydC5zZXRNdWx0aXBsZVNvcnQodGhpcy5tdWx0aXBsZVNvcnQpO1xuICAgIH1cblxuXG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydGluZ1N1YmplY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvKiB0aGUgbG9hZGluZ1NvcnRpbmdTdWJqZWN0IG5vdCByZWZyZXNoIGluIHRoZSB0ZW1wbGF0ZVxuICAgIGJlY2F1c2UgY2hhbmdlIGRldGVjdGlvbiBub3Qgd29ya2luZyB3aXRoIHZpcnR1YWwgc2Nyb2xsaW5nICovXG4gICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICBpZiAobmdab25lKSB7XG4gICAgICBuZ1pvbmUucnVuKCgpID0+IHRoaXMubG9hZGluZ1NvcnRpbmdTdWJqZWN0Lm5leHQodmFsdWUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRpbmdTb3J0aW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uU29ydENoYW5nZShzb3J0QXJyYXk6IGFueVtdKSB7XG4gICAgdGhpcy5zb3J0Q29sQXJyYXkgPSBbXTtcbiAgICBzb3J0QXJyYXkuZm9yRWFjaCgoc29ydCkgPT4ge1xuICAgICAgaWYgKHNvcnQuZGlyZWN0aW9uICE9PSAnJykge1xuICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiBzb3J0LmlkLFxuICAgICAgICAgIGFzY2VuZGVudDogc29ydC5kaXJlY3Rpb24gPT09IENvZGVzLkFTQ19TT1JUXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTb3J0aW5nU3ViamVjdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRhc291cmNlKCkge1xuICAgIC8vRGVsZXRlZCBwcmV2aW91cyBpbnN0YW5jZSBhbmQgc3Vic2NyaWJlcnNcbiAgICBkZWxldGUgdGhpcy5kYXRhU291cmNlO1xuICAgIGlmICh0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlKSB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBkYXRhU291cmNlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlU2VydmljZS5nZXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlID0gdGhpcy5kYXRhU291cmNlLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BFZGl0aW9uKCk7XG4gICAgICB0aGlzLmNoZWNrU2VsZWN0ZWRJdGVtRGF0YSgpO1xuICAgICAgaWYgKCF0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlU29ydGluZ1N1YmplY3QoZmFsc2UpO1xuICAgICAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBhbmRlZFJvd0NvbnRhaW5lckNsYXNzKHJvd0luZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBPVGFibGVDb21wb25lbnQuRVhQQU5ERURfUk9XX0NPTlRBSU5FUl9DTEFTUyArIHJvd0luZGV4O1xuICB9XG5cbiAgcHVibGljIGdldEV4cGFuZGFibGVJdGVtcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUl0ZW0uc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdG8gZXhwYW5kIG9yIGNvbGxhcHNlIHRoZSBleHBhbmRhYmxlIHJvdy5cbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHBhcmFtIHJvd0luZGV4XG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHVibGljIHRvb2dsZVJvd0V4cGFuZGFibGUoaXRlbTogYW55LCByb3dJbmRleDogbnVtYmVyLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRhYmxlSXRlbS50b2dnbGUoaXRlbSk7XG5cbiAgICBpZiAodGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XSkge1xuICAgICAgdGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XS5kZXRhY2goKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRTdGF0ZUV4cGFuZChpdGVtKSA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIGNvbnN0IGV2ZW50VGFibGVSb3dFeHBhbmRhYmxlQ2hhbmdlID0gdGhpcy5lbWl0VGFibGVSb3dFeHBhbmRhYmxlQ2hhbmdlRXZlbnQoaXRlbSwgcm93SW5kZXgpO1xuICAgICAgdGhpcy50YWJsZVJvd0V4cGFuZGFibGUub25Db2xsYXBzZWQuZW1pdChldmVudFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9ydGFsSG9zdFtyb3dJbmRleF0gPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyB0aGlzLmdldEV4cGFuZGVkUm93Q29udGFpbmVyQ2xhc3Mocm93SW5kZXgpKSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5hcHBSZWYsXG4gICAgICAgIHRoaXMuaW5qZWN0b3JcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlUG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLnRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmLCB7ICRpbXBsaWNpdDogaXRlbSB9KTtcbiAgICAgIHRoaXMucG9ydGFsSG9zdFtyb3dJbmRleF0uYXR0YWNoVGVtcGxhdGVQb3J0YWwodGVtcGxhdGVQb3J0YWwpO1xuICAgICAgY29uc3QgZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UgPSB0aGlzLmVtaXRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2VFdmVudChpdGVtLCByb3dJbmRleCk7XG4gICAgICB0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5vbkV4cGFuZGVkLmVtaXQoZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZUV2ZW50KGRhdGEsIHJvd0luZGV4KSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgT1RhYmxlUm93RXhwYW5kZWRDaGFuZ2UoKTtcbiAgICBldmVudC5yb3dJbmRleCA9IHJvd0luZGV4O1xuICAgIGV2ZW50LmRhdGEgPSBkYXRhO1xuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGlzRXhwYW5kZWQoZGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUl0ZW0uaXNTZWxlY3RlZChkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGF0ZUV4cGFuZChyb3cpIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkKHJvdykgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCc7XG4gIH1cblxuICBwdWJsaWMgaXNDb2x1bW5FeHBhbmRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbikpID8gdGhpcy5fb1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLnZpc2libGUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBoYXNFeHBhbmRlZFJvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpO1xuICB9XG5cbiAgcHVibGljIGhhc0luc2VydGFibGVSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtVmlzaWJsZUNvbHVtbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBtYW5hZ2VzIHRoZSBjYWxsIHRvIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmaWx0ZXJcbiAgICogQHBhcmFtIG92cnJBcmdzXG4gICAqL1xuICBxdWVyeURhdGEoZmlsdGVyPzogYW55LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKSB7XG4gICAgLy8gSWYgdGFiIGV4aXN0cyBhbmQgaXMgbm90IGFjdGl2ZSB0aGVuIHdhaXQgZm9yIHF1ZXJ5RGF0YVxuICAgIGlmICh0aGlzLmlzSW5zaWRlSW5hY3RpdmVUYWIoKSkge1xuICAgICAgdGhpcy5wZW5kaW5nUXVlcnkgPSB0cnVlO1xuICAgICAgdGhpcy5wZW5kaW5nUXVlcnlGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ1F1ZXJ5ID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUXVlcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnF1ZXJ5Q2VsbFJlbmRlcmVycygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBzdXBlci5xdWVyeURhdGEoZmlsdGVyLCBvdnJyQXJncyk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNJbnNpZGVJbmFjdGl2ZVRhYigpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGFiQ29udGFpbmVyICYmIHRoaXMudGFiR3JvdXBDb250YWluZXIpIHtcbiAgICAgIHJlc3VsdCA9ICEodGhpcy50YWJDb250YWluZXIuaXNBY3RpdmUgfHwgKHRoaXMudGFiR3JvdXBDb250YWluZXIuc2VsZWN0ZWRJbmRleCA9PT0gdGhpcy50YWJDb250YWluZXIucG9zaXRpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGxldCBmaWx0ZXIgPSBleGlzdGluZ0ZpbHRlcjtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcikubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBwYXJlbnRJdGVtRXhwciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25Gcm9tT2JqZWN0KGZpbHRlcik7XG4gICAgICAgIGZpbHRlciA9IHt9O1xuICAgICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0gPSBwYXJlbnRJdGVtRXhwcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlQ29sRmlsdGVyID0gdGhpcy5nZXRDb2x1bW5GaWx0ZXJzRXhwcmVzc2lvbigpO1xuICAgICAgLy8gQWRkIGNvbHVtbiBmaWx0ZXJzIGJhc2ljIGV4cHJlc3Npb24gdG8gY3VycmVudCBmaWx0ZXJcbiAgICAgIGlmIChiZUNvbEZpbHRlciAmJiAhVXRpbC5pc0RlZmluZWQoZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldKSkge1xuICAgICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0gPSBiZUNvbEZpbHRlcjtcbiAgICAgIH0gZWxzZSBpZiAoYmVDb2xGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldID1cbiAgICAgICAgICBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRDb21wbGV4RXhwcmVzc2lvbihmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0sIGJlQ29sRmlsdGVyLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZ2V0Q29tcG9uZW50RmlsdGVyKGZpbHRlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UXVpY2tGaWx0ZXJFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSAmJiB0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5maWx0ZXJFeHByZXNzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29sdW1uRmlsdGVyc0V4cHJlc3Npb24oKTogRXhwcmVzc2lvbiB7XG4gICAgLy8gQXBwbHkgY29sdW1uIGZpbHRlcnNcbiAgICBjb25zdCBjb2x1bW5GaWx0ZXJzOiBPQ29sdW1uVmFsdWVGaWx0ZXJbXSA9IHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlcnMoKTtcbiAgICBjb25zdCBiZUNvbHVtbkZpbHRlcnM6IEFycmF5PEV4cHJlc3Npb24+ID0gW107XG4gICAgY29sdW1uRmlsdGVycy5mb3JFYWNoKGNvbEZpbHRlciA9PiB7XG4gICAgICAvLyBQcmVwYXJlIGJhc2ljIGV4cHJlc3Npb25zXG4gICAgICBzd2l0Y2ggKGNvbEZpbHRlci5vcGVyYXRvcikge1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU46XG4gICAgICAgICAgaWYgKFV0aWwuaXNBcnJheShjb2xGaWx0ZXIudmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgYmVzSW46IEFycmF5PEV4cHJlc3Npb24+ID0gY29sRmlsdGVyLnZhbHVlcy5tYXAodmFsdWUgPT4gRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkVxdWFscyhjb2xGaWx0ZXIuYXR0ciwgdmFsdWUpKTtcbiAgICAgICAgICAgIGxldCBiZUluOiBFeHByZXNzaW9uID0gYmVzSW4ucG9wKCk7XG4gICAgICAgICAgICBiZXNJbi5mb3JFYWNoKGJlID0+IHtcbiAgICAgICAgICAgICAgYmVJbiA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGJlSW4sIGJlLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfT1IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiZUNvbHVtbkZpbHRlcnMucHVzaChiZUluKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5CRVRXRUVOOlxuICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkoY29sRmlsdGVyLnZhbHVlcykgJiYgY29sRmlsdGVyLnZhbHVlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlRnJvbSA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25Nb3JlRXF1YWwoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXNbMF0pO1xuICAgICAgICAgICAgY29uc3QgYmVUbyA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MZXNzRXF1YWwoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXNbMV0pO1xuICAgICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oYmVGcm9tLCBiZVRvLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuRVFVQUw6XG4gICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkxpa2UoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXMpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUw6XG4gICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkxlc3NFcXVhbChjb2xGaWx0ZXIuYXR0ciwgY29sRmlsdGVyLnZhbHVlcykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTU9SRV9FUVVBTDpcbiAgICAgICAgICBiZUNvbHVtbkZpbHRlcnMucHVzaChGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTW9yZUVxdWFsKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICAvLyBCdWlsZCBjb21wbGV0ZSBjb2x1bW4gZmlsdGVycyBiYXNpYyBleHByZXNzaW9uXG4gICAgbGV0IGJlQ29sRmlsdGVyOiBFeHByZXNzaW9uID0gYmVDb2x1bW5GaWx0ZXJzLnBvcCgpO1xuICAgIGJlQ29sdW1uRmlsdGVycy5mb3JFYWNoKGJlID0+IHtcbiAgICAgIGJlQ29sRmlsdGVyID0gRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oYmVDb2xGaWx0ZXIsIGJlLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYmVDb2xGaWx0ZXI7XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uSW5mbyhxdWVyeVJlczogYW55KSB7XG4gICAgc3VwZXIudXBkYXRlUGFnaW5hdGlvbkluZm8ocXVlcnlSZXMpO1xuICB9XG5cbiAgaW5pdFZpZXdQb3J0KGRhdGE6IGFueVtdKSB7XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQgJiYgZGF0YSkge1xuICAgICAgY29uc3QgaGVhZGVyRWxSZWYgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihoZWFkZXJTZWxlY3Rvcik7XG4gICAgICBjb25zdCBmb290ZXJFbFJlZiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGZvb3RlclNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IHJvd0VsUmVmID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3Iocm93U2VsZWN0b3IpO1xuXG4gICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSBoZWFkZXJFbFJlZiA/IGhlYWRlckVsUmVmLm9mZnNldEhlaWdodCA6IDA7XG4gICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSBmb290ZXJFbFJlZiA/IGZvb3RlckVsUmVmLm9mZnNldEhlaWdodCA6IDA7XG4gICAgICBjb25zdCByb3dIZWlnaHQgPSByb3dFbFJlZiA/IHJvd0VsUmVmLm9mZnNldEhlaWdodCA6IE9UYWJsZUNvbXBvbmVudC5ERUZBVUxUX1JPV19IRUlHSFQ7XG5cbiAgICAgIC8vIHNldCBjb25maWcgdmlld3BvcnRcbiAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kuc2V0Q29uZmlnKHJvd0hlaWdodCwgaGVhZGVySGVpZ2h0LCBmb290ZXJIZWlnaHQpO1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNSZW5kZXJlckRhdGEgIT09IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneS5kYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGEoZGF0YTogYW55LCBzcWxUeXBlczogYW55KSB7XG4gICAgdGhpcy5kYW9UYWJsZS5zcWxUeXBlc0NoYW5nZS5uZXh0KHNxbFR5cGVzKTtcbiAgICB0aGlzLmRhb1RhYmxlLnNldERhdGFBcnJheShkYXRhKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblBhZ2luYXRlZERhdGFMb2FkZWQsIGRhdGEpO1xuICAgIH1cbiAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uRGF0YUxvYWRlZCwgdGhpcy5kYW9UYWJsZS5kYXRhKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5TZXRTdGF0aWNEYXRhKHN0YXRpY0RhdGEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuU2V0U3RhdGljRGF0YShzdGF0aWNEYXRhKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLmRhb1RhYmxlKTtcbiAgfVxuXG4gIHNob3dEaWFsb2dFcnJvcihlcnJvcjogc3RyaW5nLCBlcnJvck9wdGlvbmFsPzogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGVycm9yKSAmJiAhVXRpbC5pc09iamVjdChlcnJvcikpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCBlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCBlcnJvck9wdGlvbmFsKTtcbiAgICB9XG4gIH1cblxuICBwcm9qZWN0Q29udGVudENoYW5nZWQoKSB7XG4gICAgdGhpcy5sb2FkaW5nU2Nyb2xsU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgIHRoaXMuaW5pdFZpZXdQb3J0KHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEpO1xuXG4gICAgaWYgKHRoaXMucHJldmlvdXNSZW5kZXJlckRhdGEgIT09IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEpIHtcbiAgICAgIHRoaXMucHJldmlvdXNSZW5kZXJlckRhdGEgPSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhO1xuICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vbkNvbnRlbnRDaGFuZ2UsIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLnNlbGVjdGlvbiAmJiB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5nZXRTZWxlY3RlZEl0ZW1zKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNoZWNrU2VsZWN0ZWRJdGVtRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldEF0dHJpYnV0ZXNWYWx1ZXNUb1F1ZXJ5KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBzdXBlci5nZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpO1xuICAgIGlmICh0aGlzLmF2b2lkUXVlcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSBjb2x1bW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICAgIGlmICh0aGlzLmF2b2lkUXVlcnlDb2x1bW5zLmluZGV4T2YoY29sKSAhPT0gLTEpIHtcbiAgICAgICAgICBjb2x1bW5zLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIGdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcjogb2JqZWN0LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgcXVlcnlBcmd1bWVudHMgPSBzdXBlci5nZXRRdWVyeUFyZ3VtZW50cyhmaWx0ZXIsIG92cnJBcmdzKTtcbiAgICBPYmplY3QuYXNzaWduKHF1ZXJ5QXJndW1lbnRzWzNdLCB0aGlzLmdldFNxbFR5cGVzRm9yRmlsdGVyKHF1ZXJ5QXJndW1lbnRzWzFdKSk7XG4gICAgT2JqZWN0LmFzc2lnbihxdWVyeUFyZ3VtZW50c1szXSwgb3ZyckFyZ3MgPyBvdnJyQXJncy5zcWx0eXBlcyB8fCB7fSA6IHt9KTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgcXVlcnlBcmd1bWVudHNbNV0gPSB0aGlzLnBhZ2luYXRvci5pc1Nob3dpbmdBbGxSb3dzKHF1ZXJ5QXJndW1lbnRzWzVdKSA/IHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgOiBxdWVyeUFyZ3VtZW50c1s1XTtcbiAgICAgIHF1ZXJ5QXJndW1lbnRzWzZdID0gdGhpcy5zb3J0Q29sQXJyYXk7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeUFyZ3VtZW50cztcbiAgfVxuXG4gIGdldFNxbFR5cGVzRm9yRmlsdGVyKGZpbHRlcik6IG9iamVjdCB7XG4gICAgY29uc3QgYWxsU3FsVHlwZXMgPSB0aGlzLmdldFNxbFR5cGVzKCk7XG4gICAgY29uc3Qgc3FsVHlwZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhhbGxTcWxUeXBlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGZpbHRlci5pbmRleE9mKGtleSkgIT09IC0xICYmIGFsbFNxbFR5cGVzW2tleV0gIT09IFNRTFR5cGVzLk9USEVSKSB7XG4gICAgICAgIHNxbFR5cGVzW2tleV0gPSBhbGxTcWxUeXBlc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzcWxUeXBlcztcbiAgfVxuXG4gIG9uRXhwb3J0QnV0dG9uQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25FeHBvcnRCdXR0b25DbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VDb2x1bW5zVmlzaWJpbGl0eUNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQ2hhbmdlQ29sdW1uc1Zpc2liaWxpdHlDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25NYXRUYWJsZUNvbnRlbnRDaGFuZ2VkKCkge1xuICAgIC8vXG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgbmF2aWdhdGlvbiB0byBuZXcgaXRlbSBpbnNlcnRpb25cbiAgICovXG4gIGFkZCgpIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgaWYgKHRoaXMuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX0lOU0VSVCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIuaW5zZXJ0RGV0YWlsKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBzZWxlY3RlZCByb3dzXG4gICAqIEBwYXJhbSBbY2xlYXJTZWxlY3RlZEl0ZW1zXVxuICAgKi9cbiAgcmVtb3ZlKGNsZWFyU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIGlmICh0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ01FU1NBR0VTLk9QRVJBVElPTl9OT1RfQUxMT1dFRF9SRUFET05MWScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbihQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9ERUxFVEUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybSgnQ09ORklSTScsICdNRVNTQUdFUy5DT05GSVJNX0RFTEVURScpLnRoZW4ocmVzID0+IHtcbiAgICAgIGlmIChyZXMgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVNlcnZpY2UgJiYgKHRoaXMuZGVsZXRlTWV0aG9kIGluIHRoaXMuZGF0YVNlcnZpY2UpICYmIHRoaXMuZW50aXR5ICYmICh0aGlzLmtleXNBcnJheS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBTZXJ2aWNlVXRpbHMuZ2V0QXJyYXlQcm9wZXJ0aWVzKHNlbGVjdGVkSXRlbXMsIHRoaXMua2V5c0FycmF5KTtcbiAgICAgICAgICBjb25zdCBzcWxUeXBlc0FyZyA9IHRoaXMuZ2V0U3FsVHlwZXNPZktleXMoKTtcbiAgICAgICAgICB0aGlzLmRhb1RhYmxlLnJlbW92ZVF1ZXJ5KGZpbHRlcnMsIHNxbFR5cGVzQXJnKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5leHQ6ICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblJvd0RlbGV0ZWQsIHNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dEaWFsb2dFcnJvcihlLCAnTUVTU0FHRVMuRVJST1JfREVMRVRFJyk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJpbmcgdGhhdCB0aGUgZGVsZXRlZCBpdGVtcyB3aWxsIG5vdCBsb25nZXIgYmUgcGFydCBvZiB0aGUgc2VsZWN0aW9uTW9kZWxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5jbG9zZURldGFpbHMoZmlsdGVycywgeyBleGl0V2l0aG91dENvbmZpcm1hdGlvbjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVMb2NhbEl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xlYXJTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hzIHRhYmxlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhbmQgc2VsZWN0IGFsbCBjaGVja2JveFxuICAgKi9cbiAgc2hvd0FuZFNlbGVjdEFsbENoZWNrYm94KCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKCkpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdEFsbENoZWNrYm94KSB7XG4gICAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChjbGVhclNlbGVjdGVkSXRlbXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgcGFnZSBpbmRleFxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoY2xlYXJTZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVsb2FkcyBkYXRhXG4gICAqL1xuICByZWxvYWREYXRhKGNsZWFyU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbihQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9SRUZSRVNIKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5yZWZyZXNoU2VsZWN0aW9uKCk7XG4gICAgaWYgKGNsZWFyU2VsZWN0ZWRJdGVtcykge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUXVlcnkgPSB0cnVlO1xuICAgIGxldCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBxdWVyeUFyZ3MgPSB7XG4gICAgICAgIG9mZnNldDogdGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzLFxuICAgICAgICBsZW5ndGg6IHRoaXMucXVlcnlSb3dzXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLnN0b3BFZGl0aW9uKGZhbHNlKTtcbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBoYW5kbGVDbGljayhyb3c6IGFueSwgY29sdW1uOiBPQ29sdW1uLCByb3dJbmRleDogbnVtYmVyLCBjZWxsUmVmOiBFbGVtZW50UmVmLCBldmVudDogTW91c2VFdmVudCkge1xuXG4gICAgdGhpcy5jbGlja1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2xpY2tQcmV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLm9lbmFibGVkICYmICF0aGlzLnJlYWRPbmx5ICYmIGNvbHVtbi5lZGl0b3JcbiAgICAgICAgICAmJiAodGhpcy5kZXRhaWxNb2RlICE9PSBDb2Rlcy5ERVRBSUxfTU9ERV9DTElDSylcbiAgICAgICAgICAmJiAodGhpcy5lZGl0aW9uTW9kZSA9PT0gQ29kZXMuRURJVElPTl9NT0RFX0NMSUNLKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVDb2x1bW5FZGl0aW9uKGNvbHVtbiwgcm93LCBjZWxsUmVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRvSGFuZGxlQ2xpY2socm93LCBjb2x1bW4uYXR0ciwgcm93SW5kZXgsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jbGlja1ByZXZlbnQgPSBmYWxzZTtcbiAgICB9LCB0aGlzLmNsaWNrRGVsYXkpO1xuXG4gIH1cblxuICBkb0hhbmRsZUNsaWNrKHJvdzogYW55LCBjb2x1bW46IHN0cmluZywgcm93SW5kZXg6IG51bWJlciwgJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkgJiYgdGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9lbmFibGVkIHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCh0aGlzLmRldGFpbE1vZGUgPT09IENvZGVzLkRFVEFJTF9NT0RFX0NMSUNLKSkge1xuICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4LCBtb3VzZUV2ZW50OiAkZXZlbnQsIGNvbHVtbk5hbWU6IGNvbHVtbiwgY2VsbDogcm93W2NvbHVtbl0gfSk7XG4gICAgICB0aGlzLnNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKSAmJiAoJGV2ZW50LmN0cmxLZXkgfHwgJGV2ZW50Lm1ldGFLZXkpKSB7XG4gICAgICAvLyBUT0RPOiB0ZXN0ICRldmVudC5tZXRhS2V5IG9uIE1BQ1xuICAgICAgdGhpcy5zZWxlY3RlZFJvdyhyb3cpO1xuICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4LCBtb3VzZUV2ZW50OiAkZXZlbnQsIGNvbHVtbk5hbWU6IGNvbHVtbiwgY2VsbDogcm93W2NvbHVtbl0gfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKCkgJiYgJGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlU2VsZWN0aW9uKHJvdyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1NlbGVjdGlvbk1vZGVOb25lKCkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQocm93KSAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmVkaXRpb25FbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25BbmRFZGl0aW5nKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXgsIG1vdXNlRXZlbnQ6ICRldmVudCwgY29sdW1uTmFtZTogY29sdW1uLCBjZWxsOiByb3dbY29sdW1uXSB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNdWx0aXBsZVNlbGVjdGlvbihpdGVtOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmluZGV4T2YodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRbMF0pO1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuaW5kZXhPZihpdGVtKTtcbiAgICAgIGNvbnN0IGluZGV4RnJvbSA9IE1hdGgubWluKGZpcnN0LCBsYXN0KTtcbiAgICAgIGNvbnN0IGluZGV4VG8gPSBNYXRoLm1heChmaXJzdCwgbGFzdCk7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLnNsaWNlKGluZGV4RnJvbSwgaW5kZXhUbyArIDEpLmZvckVhY2goZSA9PiB0aGlzLnNlbGVjdGVkUm93KGUpKTtcbiAgICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25DbGljaywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpIHtcbiAgICBzdXBlci5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuc3RvcmVQYWdpbmF0aW9uU3RhdGUgPSB0cnVlO1xuICB9XG5cbiAgaGFuZGxlRG91YmxlQ2xpY2socm93OiBhbnksIGNvbHVtbjogT0NvbHVtbiwgcm93SW5kZXg6IG51bWJlciwgY2VsbFJlZjogRWxlbWVudFJlZiwgJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xpY2tUaW1lcik7XG4gICAgdGhpcy5jbGlja1ByZXZlbnQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIGlmICh0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ01FU1NBR0VTLk9QRVJBVElPTl9OT1RfQUxMT1dFRF9SRUFET05MWScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vZW5hYmxlZCAmJiBjb2x1bW4uZWRpdG9yXG4gICAgICAmJiAoIUNvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpXG4gICAgICAmJiAoQ29kZXMuaXNEb3VibGVDbGlja01vZGUodGhpcy5lZGl0aW9uTW9kZSkpKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlQ29sdW1uRWRpdGlvbihjb2x1bW4sIHJvdywgY2VsbFJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25Eb3VibGVDbGljay5lbWl0KHsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCwgbW91c2VFdmVudDogJGV2ZW50LCBjb2x1bW5OYW1lOiBjb2x1bW4uYXR0ciwgY2VsbDogcm93W2NvbHVtbi5hdHRyXSB9KTtcbiAgICAgIGlmICh0aGlzLm9lbmFibGVkICYmIENvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpIHtcbiAgICAgICAgdGhpcy5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IGVkaXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuc29tZShpdGVtID0+IGl0ZW0uZWRpdGluZyk7XG4gIH1cblxuICBoYW5kbGVET01DbGljayhldmVudCkge1xuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5Q29udGFpbmVyID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstb3ZlcmxheS1jb250YWluZXInKVswXTtcbiAgICBpZiAob3ZlcmxheUNvbnRhaW5lciAmJiBvdmVybGF5Q29udGFpbmVyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZUNvbnRhaW5lciA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuby10YWJsZS1jb250YWluZXInKTtcbiAgICBjb25zdCB0YWJsZUNvbnRlbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm8tdGFibGUtY29udGFpbmVyIHRhYmxlLm1hdC10YWJsZScpO1xuICAgIGlmICh0YWJsZUNvbnRhaW5lciAmJiB0YWJsZUNvbnRlbnQgJiYgdGFibGVDb250YWluZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAhdGFibGVDb250ZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aXZhdGVDb2x1bW5FZGl0aW9uKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnksIGNlbGxSZWY6IGFueSkge1xuICAgIGlmIChjZWxsUmVmICYmIGNvbHVtbi5lZGl0aW5nICYmIHRoaXMuZWRpdGluZ0NlbGwgPT09IGNlbGxSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0T0NvbHVtblBlcm1pc3Npb25zKGNvbHVtbi5hdHRyKTtcbiAgICBpZiAoY29sdW1uUGVybWlzc2lvbnMuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHtjb2x1bW4uYXR0cn0gZWRpdGlvbiBub3QgYWxsb3dlZCBkdWUgdG8gcGVybWlzc2lvbnNgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uQW5kRWRpdGluZygpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICB0aGlzLmVkaXRpbmdDZWxsID0gY2VsbFJlZjtcbiAgICBjb25zdCByb3dEYXRhID0ge307XG4gICAgdGhpcy5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICByb3dEYXRhW2tleV0gPSByb3dba2V5XTtcbiAgICB9KTtcbiAgICByb3dEYXRhW2NvbHVtbi5hdHRyXSA9IHJvd1tjb2x1bW4uYXR0cl07XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gcm93O1xuICAgIGNvbHVtbi5lZGl0aW5nID0gdHJ1ZTtcbiAgICBjb2x1bW4uZWRpdG9yLnN0YXJ0RWRpdGlvbihyb3dEYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZUNlbGxEYXRhKGNvbHVtbjogT0NvbHVtbiwgZGF0YTogYW55LCBzYXZlQ2hhbmdlczogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX1VQREFURSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBPYnNlcnZhYmxlKGlubmVyT2JzZXJ2ZXIgPT4ge1xuICAgICAgICBpbm5lck9ic2VydmVyLmVycm9yKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGNvbHVtbi5lZGl0aW5nID0gZmFsc2U7XG4gICAgaWYgKHNhdmVDaGFuZ2VzICYmIHRoaXMuZWRpdGluZ1JvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZWRpdGluZ1JvdywgZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuc3RvcEVkaXRpb24oKTtcbiAgICBpZiAoc2F2ZUNoYW5nZXMgJiYgY29sdW1uLmVkaXRvci51cGRhdGVSZWNvcmRPbkVkaXQpIHtcbiAgICAgIGNvbnN0IHRvVXBkYXRlID0ge307XG4gICAgICB0b1VwZGF0ZVtjb2x1bW4uYXR0cl0gPSBkYXRhW2NvbHVtbi5hdHRyXTtcbiAgICAgIGNvbnN0IGt2ID0gdGhpcy5leHRyYWN0S2V5c0Zyb21SZWNvcmQoZGF0YSk7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVSZWNvcmQoa3YsIHRvVXBkYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRLZXlzVmFsdWVzKCk6IGFueVtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKHJvd1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2hvd3NTZWxlY3RzKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblNob3dzU2VsZWN0cygpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpemVDaGVja2JveENvbHVtbigpIHtcbiAgICAvLyBJbml0aWFsaXppbmcgcm93IHNlbGVjdGlvbiBsaXN0ZW5lclxuICAgIGlmICghdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uRGF0YTogU2VsZWN0aW9uQ2hhbmdlPGFueT4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyAmJiBzZWxlY3Rpb25EYXRhKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblJvd1NlbGVjdGVkLCBzZWxlY3Rpb25EYXRhLmFkZGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEucmVtb3ZlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUm93RGVzZWxlY3RlZCwgc2VsZWN0aW9uRGF0YS5yZW1vdmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkNvbHVtblN0YXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0aW9uQ29sdW1uU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcbiAgICAgICYmIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnNbMF0gIT09IENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmICF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXG4gICAgICAmJiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdID09PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMuc2hpZnQoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtUm93U2VsZWN0ZWRJbkN1cnJlbnREYXRhKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSA/IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZmlsdGVyKHggPT4gIXRoaXMuaXNEaXNhYmxlQ2hlY2tib3goeCkgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHgpKS5sZW5ndGggOiAwO1xuICB9XG5cbiAgcHVibGljIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1Sb3dzID4gMCAmJiBudW1TZWxlY3RlZCAhPT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBtYXN0ZXJUb2dnbGUoZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlKTogdm9pZCB7XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0QWxsKCkgOiB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5zZXRTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3Rpb25DaGVja2JveFRvZ2dsZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UsIHJvdzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlU2luZ2xlKCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0ZWRSb3cocm93KSA6IHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgdGhpcy5zdGF0ZS5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RlZFJvdyhyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWQocm93KTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMuc3RhdGUuc2VsZWN0aW9uID0gW107XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGVkKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZUNoZWNrYm94KGl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQoaXRlbSkpIHtcbiAgICAgIC8qKlRoZSBzZWxlY3RlZCBpdGVtIGlzIGNsZWFyZWQgaWYgdGhlIGl0ZW0gY2hhbmdlcyB2YWx1ZSovXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcihpdGVtKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRCeUtleXMoa2V5VmFsdWVzOiBBcnJheTxhbnk+KSB7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5nZXREYXRhQXJyYXkoKS5maWx0ZXIocm93ID0+IHtcbiAgICAgIHJldHVybiBrZXlWYWx1ZXMuZmluZEluZGV4KGtleVZhbHVlID0+IHJvd1t0aGlzLmtleXNdID09PSBrZXlWYWx1ZSkgPiAtMTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoLi4ucm93c1RvU2VsZWN0KTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQnlNdWx0aXBsZUtleXMoa2V5VmFsdWVzOiBBcnJheTxPYmplY3Q+KSB7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5nZXREYXRhQXJyYXkoKS5maWx0ZXIocm93ID0+IHtcbiAgICAgIHJldHVybiBrZXlWYWx1ZXMuZmluZEluZGV4KGtleVZhbHVlID0+XG4gICAgICAgIE9iamVjdC5rZXlzKGtleVZhbHVlKS5ldmVyeShrZXkgPT4ga2V5VmFsdWVba2V5XSA9PT0gcm93W2tleV0pXG4gICAgICApPi0xO1xuICAgIH0pO1xuICAgIHJvd3NUb1NlbGVjdC5ldmVyeShyb3dUb1NlbGVjdCA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93VG9TZWxlY3QpKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQnlSb3dJZHMocm93SWRzOiBBcnJheTxudW1iZXI+KSB7XG4gICAgcm93SWRzLmZvckVhY2gocm93SWQgPT4gdGhpcy5zZWxlY3RlZFJvdyh0aGlzLmdldERhdGFBcnJheSgpW3Jvd0lkXSkpO1xuICB9XG5cbiAgZ2V0IHNob3dEZWxldGVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlQnV0dG9uO1xuICB9XG5cbiAgZ2V0VHJhY2tCeUZ1bmN0aW9uKCk6IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4ge1xuXG4gICAgICBsZXQgaXRlbUlkOiBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKHRoaXMuaXNHcm91cChpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgaXRlbUlkICs9IGl0ZW0uY29sdW1uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5c0xlbmdodCA9IHNlbGYua2V5c0FycmF5Lmxlbmd0aDtcbiAgICAgICAgc2VsZi5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gaWR4IDwgKGtleXNMZW5naHQgLSAxKSA/ICc7JyA6ICcnO1xuICAgICAgICAgIGl0ZW1JZCArPSBpdGVtW2tleV0gKyBzdWZmaXg7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNBc3luY0FuZFZpc2libGVDb2xzID0gdGhpcy5hc3luY0xvYWRDb2x1bW5zLnNvbWUoYyA9PiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKGMpKTtcbiAgICAgIGlmIChzZWxmLmFzeW5jTG9hZENvbHVtbnMubGVuZ3RoICYmIGhhc0FzeW5jQW5kVmlzaWJsZUNvbHMgJiYgIXNlbGYuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgc2VsZi5xdWVyeVJvd0FzeW5jRGF0YShpbmRleCwgaXRlbSk7XG4gICAgICAgIGlmIChzZWxmLnBhZ2luYXRvciAmJiBpbmRleCA9PT0gKHNlbGYucGFnaW5hdG9yLnBhZ2VTaXplIC0gMSkpIHtcbiAgICAgICAgICBzZWxmLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1JZDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcXVlcnlSb3dBc3luY0RhdGEocm93SW5kZXg6IG51bWJlciwgcm93RGF0YTogYW55KSB7XG4gICAgY29uc3Qga3YgPSBTZXJ2aWNlVXRpbHMuZ2V0T2JqZWN0UHJvcGVydGllcyhyb3dEYXRhLCB0aGlzLmtleXNBcnJheSk7XG4gICAgLy8gUmVwZWF0aW5nIGNoZWNraW5nIG9mIHZpc2libGUgY29sdW1uXG4gICAgY29uc3QgYXYgPSB0aGlzLmFzeW5jTG9hZENvbHVtbnMuZmlsdGVyKGMgPT4gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5pbmRleE9mKGMpICE9PSAtMSk7XG4gICAgaWYgKGF2Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2tpcHBpbmcgcXVlcnkgaWYgdGhlcmUgYXJlIG5vdCB2aXNpYmxlIGFzeW5jcm9uIGNvbHVtbnNcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUXVlcnlBcmdzID0gW2t2LCBhdiwgdGhpcy5lbnRpdHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuICAgIGlmICh0aGlzLmRhdGFTZXJ2aWNlICYmIChxdWVyeU1ldGhvZE5hbWUgaW4gdGhpcy5kYXRhU2VydmljZSkgJiYgdGhpcy5lbnRpdHkpIHtcbiAgICAgIGlmICh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbcm93SW5kZXhdKSB7XG4gICAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0gPSB0aGlzLmRhdGFTZXJ2aWNlW3F1ZXJ5TWV0aG9kTmFtZV1cbiAgICAgICAgLmFwcGx5KHRoaXMuZGF0YVNlcnZpY2UsIGNvbHVtblF1ZXJ5QXJncylcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkocmVzLmRhdGEpICYmIHJlcy5kYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVzLmRhdGFbMF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNPYmplY3QocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGFvVGFibGUuc2V0QXN5bmNocm9ub3VzQ29sdW1uKGRhdGEsIHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhZ2UgdGFibGUgZGF0YS5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudEFsbERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHJlbmRlcmVkIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsUmVuZGVyZWRWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5nZXRBbGxSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSB0YWJsZSByZW5kZXJlciBkYXRhLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0UmVuZGVyZWRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmdldEN1cnJlbnRSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgc3FsIHR5cGVzIGZyb20gZGF0YSBzb3VyY2UgYW5kIHRhYmxlIGNvbHVtbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFNxbFR5cGVzKCkge1xuICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhU291cmNlLnNxbFR5cGVzKSA/IHRoaXMuZGF0YVNvdXJjZS5zcWxUeXBlcyA6IHt9O1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKChjb2w6IE9Db2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2wuc3FsVHlwZSkge1xuICAgICAgICBhbGxTcWxUeXBlc1tjb2wuYXR0cl0gPSBjb2wuc3FsVHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWxsU3FsVHlwZXM7XG4gIH1cblxuICBzZXRPVGFibGVDb2x1bW5zRmlsdGVyKHRhYmxlQ29sdW1uc0ZpbHRlcjogT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCA9IHRhYmxlQ29sdW1uc0ZpbHRlcjtcbiAgfVxuXG4gIGdldCBmaWx0ZXJDb2x1bW5zKCk6IE9GaWx0ZXJDb2x1bW5bXSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZmlsdGVyQ29sdW1ucyA9PT0gdGhpcy5vcmlnaW5hbEZpbHRlckNvbHVtbnNcbiAgICAgICYmIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucykge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxGaWx0ZXJDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IG9yaWdpbmFsRmlsdGVyQ29sdW1ucygpOiBBcnJheTxPRmlsdGVyQ29sdW1uPiB7XG4gICAgbGV0IHNvcnRDb2x1bW5zRmlsdGVyID0gW107XG4gICAgaWYgKHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgc29ydENvbHVtbnNGaWx0ZXIgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuY29sdW1uc0FycmF5O1xuICAgIH1cbiAgICByZXR1cm4gc29ydENvbHVtbnNGaWx0ZXI7XG4gIH1cblxuICBnZXQgb3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBVdGlsLnBhcnNlQXJyYXkodGhpcy5ncm91cGVkQ29sdW1ucywgdHJ1ZSk7XG4gIH1cblxuICBnZXRTdG9yZWRDb2x1bW5zRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdG9yZWRGaWx0ZXJzO1xuICB9XG5cbiAgZ2V0U3RvcmVkR3JvdXBlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc3RvcmVkQ29uZmlndXJhdGlvbnM7XG4gIH1cblxuICBvbkZpbHRlckJ5Q29sdW1uQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25GaWx0ZXJCeUNvbHVtbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvblN0b3JlRmlsdGVyQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25TdG9yZUZpbHRlckNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkxvYWRGaWx0ZXJDbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkxvYWRGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGVhckZpbHRlckNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQ2xlYXJGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBmaWx0ZXJzKGNvbHVtbiBmaWx0ZXIsIHF1aWNrZmlsdGVyIGFuZCBmaWx0ZXIgYnVpbGRlcikgYW5kIHJlbG9hZCBkYXRhXG4gICAqIEBwYXJhbSBbdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGVdXG4gICAqL1xuICBjbGVhckZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuY2xlYXJDb2x1bW5GaWx0ZXJzKHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51ICYmIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24pIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24uc2V0QWN0aXZlKHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlKTtcbiAgICB9XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh2b2lkIDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckJ1aWxkZXIpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5jbGVhckZpbHRlcigpO1xuICAgICAgdGhpcy5maWx0ZXJCdWlsZGVyLnRyaWdnZXJSZWxvYWQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVyKGF0dHI6IHN0cmluZywgdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVyKGF0dHIsIHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gIH1cblxuICBmaWx0ZXJCeUNvbHVtbihjb2x1bW5WYWx1ZUZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmFkZENvbHVtbkZpbHRlcihjb2x1bW5WYWx1ZUZpbHRlcik7XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlLCBjb2x1bW5zQXR0cj86IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVycyh0cmlnZ2VyRGF0YXNvdXJjZVVwZGF0ZSwgY29sdW1uc0F0dHIpO1xuICAgIHRoaXMub25GaWx0ZXJCeUNvbHVtbkNoYW5nZS5lbWl0KCk7XG4gICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyYWJsZShjb2x1bW46IE9Db2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSA/IHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5pc0NvbHVtbkZpbHRlcmFibGUoY29sdW1uLmF0dHIpIDogdGhpcy5pc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbik7XG4gIH1cblxuICBpc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaGVhYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uYXR0cik7XG4gIH1cbiAgaXNDb2x1bW5GaWx0ZXJBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cihjb2x1bW4uYXR0cikpO1xuICB9XG5cbiAgb3BlbkNvbHVtbkZpbHRlckRpYWxvZyhjb2x1bW46IE9Db2x1bW4sIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihPVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgIHRhYmxlOiB0aGlzXG4gICAgICB9LFxuICAgICAgbWluV2lkdGg6ICczODBweCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ28tZGlhbG9nLWNsYXNzJywgJ28tdGFibGUtZGlhbG9nJ11cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgc3dpdGNoIChyZXN1bHQpIHtcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkFDQ0VQVDpcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZUZpbHRlciA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRDb2x1bW5WYWx1ZXNGaWx0ZXIoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5Q29sdW1uKGNvbHVtblZhbHVlRmlsdGVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkNMRUFSOlxuICAgICAgICAgIGNvbnN0IGNvbCA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb2x1bW47XG4gICAgICAgICAgdGhpcy5jbGVhckNvbHVtbkZpbHRlcihjb2wuYXR0cik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU29ydEZpbHRlclZhbHVlc0NoYW5nZS5zdWJzY3JpYmUoc29ydGVkRmlsdGVyYWJsZUNvbHVtbiA9PiB7XG4gICAgICAvLyBndWFyZGFyIGVuIGxvY2Fsc3RvcmFnZSBlbCBjYW1iaW9cbiAgICAgIHRoaXMuc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRlZEZpbHRlcmFibGVDb2x1bW4pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRDb2x1bW5GaWx0ZXI6IE9GaWx0ZXJDb2x1bW4pIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICAvLyBpZiBleGlzdHMgaW4gc3RhdGUgdGhlbiB1cGRhdGVkIHNvcnQgdmFsdWVcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuZmlsdGVyQ29sdW1ucy5maW5kKHggPT4geC5hdHRyID09PSBzb3J0Q29sdW1uRmlsdGVyLmF0dHIpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGZpbHRlckNvbHVtbikpIHtcbiAgICAgICAgZmlsdGVyQ29sdW1uLnNvcnQgPSBzb3J0Q29sdW1uRmlsdGVyLnNvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbHNlIGV4aXN0cyBpbiBzdGF0ZSB0aGVuIGFkZGVkIGZpbHRlciBjb2x1bW5cbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLnB1c2goc29ydENvbHVtbkZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucyA9IHRoaXMuZmlsdGVyQ29sdW1ucztcbiAgfVxuXG4gIGdldFN0YXJ0Vmlld0ZpbHRlckNvbHVtbihjb2x1bW46IE9Db2x1bW4pOiAnbW9udGgnIHwgJ3llYXInIHwgJ211bHRpLXllYXInIHwgJycge1xuICAgIGxldCBzdGFydFZpZXc7XG4gICAgLy8gYXQgZmlyc3QsIGdldCBzdGF0ZSBpbiBsb2NhbHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogT0ZpbHRlckNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5hdHRyID09PSBjb2x1bW4uYXR0cikge1xuICAgICAgICAgIHN0YXJ0VmlldyA9IGVsZW1lbnQuc3RhcnRWaWV3O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHN0YXJ0VmlldykgJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICBzdGFydFZpZXcgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuZ2V0U3RhcnRWaWV3VmFsdWVPZkZpbHRlckNvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXJ0VmlldztcbiAgfVxuXG4gIGdldFNvcnRGaWx0ZXJDb2x1bW4oY29sdW1uOiBPQ29sdW1uKTogJ2FzYycgfCAnZGVzYycgfCAnJyB7XG4gICAgbGV0IHNvcnRDb2x1bW47XG4gICAgLy8gYXQgZmlyc3QsIGdldCBzdGF0ZSBpbiBsb2NhbHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICBjb25zdCBmaWx0ZXJDb2wgPSB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMuZmluZCgoZWxlbWVudDogT0ZpbHRlckNvbHVtbikgPT4gZWxlbWVudC5hdHRyID09PSBjb2x1bW4uYXR0cik7XG4gICAgICBpZiAoZmlsdGVyQ29sKSB7XG4gICAgICAgIHNvcnRDb2x1bW4gPSBmaWx0ZXJDb2wuc29ydDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBub3QgdmFsdWUgaW4gbG9jYWxzdG9yYWdlLCBnZXQgc29ydCB2YWx1ZSBpbiBvLXRhYmxlLWNvbHVtbi1maWx0ZXItY29sdW1uIGNvbXBvbmVudFxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoc29ydENvbHVtbikgJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICBzb3J0Q29sdW1uID0gdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LmdldFNvcnRWYWx1ZU9mRmlsdGVyQ29sdW1uKGNvbHVtbi5hdHRyKTtcbiAgICB9XG5cbiAgICAvLyBpZiBlaXRoZXIgdmFsdWUgaW4gby10YWJsZS1jb2x1bW4tZmlsdGVyLWNvbHVtbiBvciBsb2NhbHN0b3JhZ2UsIGdldCBzb3J0IHZhbHVlIGluIHNvcnRDb2xBcnJheVxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoc29ydENvbHVtbikgJiYgdGhpcy5zb3J0Q29sQXJyYXkuZmluZCh4ID0+IHguY29sdW1uTmFtZSA9PT0gY29sdW1uLmF0dHIpKSB7XG4gICAgICBzb3J0Q29sdW1uID0gdGhpcy5pc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uKSA/ICdhc2MnIDogJ2Rlc2MnO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0Q29sdW1uO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVUYWJsZU1lbnVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5tZW51ICYmIHRoaXMucGVybWlzc2lvbnMubWVudS5lbmFibGVkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgc2hvd1RhYmxlTWVudUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBwZXJtaXNzaW9uSGlkZGVuID0gISEodGhpcy5wZXJtaXNzaW9ucyAmJiB0aGlzLnBlcm1pc3Npb25zLm1lbnUgJiYgdGhpcy5wZXJtaXNzaW9ucy5tZW51LnZpc2libGUgPT09IGZhbHNlKTtcbiAgICBpZiAocGVybWlzc2lvbkhpZGRlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzdGF0aWNPcHQgPSB0aGlzLnNlbGVjdEFsbENoZWNrYm94IHx8IHRoaXMuZXhwb3J0QnV0dG9uIHx8IHRoaXMuc2hvd0NvbmZpZ3VyYXRpb25PcHRpb24gfHwgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbiB8fCAodGhpcy5zaG93RmlsdGVyT3B0aW9uICYmIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gc3RhdGljT3B0IHx8IHRoaXMudGFibGVPcHRpb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBzZXRPVGFibGVJbnNlcnRhYmxlUm93KHRhYmxlSW5zZXJ0YWJsZVJvdzogT1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCkge1xuICAgIGNvbnN0IGluc2VydFBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0QWN0aW9uUGVybWlzc2lvbnMoUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fSU5TRVJUKTtcbiAgICBpZiAoaW5zZXJ0UGVybS52aXNpYmxlKSB7XG4gICAgICB0YWJsZUluc2VydGFibGVSb3cuZW5hYmxlZCA9IGluc2VydFBlcm0uZW5hYmxlZDtcbiAgICAgIHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCA9IHRhYmxlSW5zZXJ0YWJsZVJvdztcbiAgICAgIHRoaXMuc2hvd0ZpcnN0SW5zZXJ0YWJsZVJvdyA9IHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0ZpcnN0Um93KCk7XG4gICAgICB0aGlzLnNob3dMYXN0SW5zZXJ0YWJsZVJvdyA9ICF0aGlzLnNob3dGaXJzdEluc2VydGFibGVSb3c7XG4gICAgICB0aGlzLm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaW5pdGlhbGl6ZUVkaXRvcnMoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGlvbkFuZEVkaXRpbmcoY2xlYXJTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKGNsZWFyU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1uc1xuICAgICAgLmZpbHRlcihvQ29sdW1uID0+IG9Db2x1bW4uZWRpdGluZylcbiAgICAgIC5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuICAgICAgICBvQ29sdW1uLmVkaXRpbmcgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrU2VsZWN0ZWRJdGVtRGF0YSgpIHtcbiAgICB0aGlzLnRyaWdnZXJTZWxlY3Rpb25FdmVudHMgPSBmYWxzZTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pICYmIHRoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3RhdGUuc2VsZWN0aW9uLmZvckVhY2goc2VsZWN0ZWRJdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtS2V5cyA9IE9iamVjdC5rZXlzKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgIC8vIGZpbmRpbmcgc2VsZWN0ZWQgaXRlbSBkYXRhIGluIHRoZSB0YWJsZSByZW5kZXJlZCBkYXRhXG4gICAgICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZmluZChkYXRhID0+XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtS2V5cy5ldmVyeShrZXkgPT4gZGF0YVtrZXldID09PSBzZWxlY3RlZEl0ZW1ba2V5XSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZvdW5kSXRlbSkge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoZm91bmRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyA9IHRydWU7XG4gIH1cblxuICB1c2VEZXRhaWxCdXR0b24oY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbi50eXBlID09PSAnZWRpdEJ1dHRvbkluUm93JyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RldGFpbEJ1dHRvbkluUm93JztcbiAgfVxuXG4gIG9uRGV0YWlsQnV0dG9uQ2xpY2soY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgdGhpcy5lZGl0RGV0YWlsKHJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGV0YWlsQnV0dG9uSW5Sb3cnOlxuICAgICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGV0YWlsQnV0dG9uSWNvbihjb2x1bW46IE9Db2x1bW4pIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5lZGl0QnV0dG9uSW5Sb3dJY29uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RldGFpbEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5kZXRhaWxCdXR0b25JblJvd0ljb247XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdXNlUGxhaW5SZW5kZXIoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51c2VEZXRhaWxCdXR0b24oY29sdW1uKSAmJiAhY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRvciB8fCAoIWNvbHVtbi5lZGl0aW5nIHx8ICF0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkpO1xuICB9XG5cbiAgdXNlQ2VsbFJlbmRlcmVyKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRpbmcgfHwgY29sdW1uLmVkaXRpbmcgJiYgIXRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHVzZUNlbGxFZGl0b3IoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gQWRkIGNvbHVtbi5lZGl0b3IgaW5zdGFuY2VvZiBPVGFibGVDZWxsRWRpdG9yQm9vbGVhbkNvbXBvbmVudCB0byBjb25kaXRpb25cbiAgICBpZiAoY29sdW1uLmVkaXRvciAmJiBjb2x1bW4uZWRpdG9yLmF1dG9Db21taXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbi5lZGl0b3IgJiYgY29sdW1uLmVkaXRpbmcgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdyk7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9NVUxUSVBMRTtcbiAgfVxuXG4gIGlzU2VsZWN0aW9uTW9kZVNpbmdsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9TSU5HTEU7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVOb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09IENvZGVzLlNFTEVDVElPTl9NT0RFX05PTkU7XG4gIH1cblxuICBvbkNoYW5nZVBhZ2UoZXZ0OiBQYWdlRXZlbnQpIHtcbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZ0LnBhZ2VJbmRleDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBnb2luZ0JhY2sgPSBldnQucGFnZUluZGV4IDwgdGhpcy5jdXJyZW50UGFnZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZ0LnBhZ2VJbmRleDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdG9yLmlzU2hvd2luZ0FsbFJvd3MoZXZ0LnBhZ2VTaXplKSA/IHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgOiBldnQucGFnZVNpemU7XG5cbiAgICBjb25zdCBvbGRRdWVyeVJvd3MgPSB0aGlzLnF1ZXJ5Um93cztcbiAgICBjb25zdCBjaGFuZ2luZ1BhZ2VTaXplID0gKG9sZFF1ZXJ5Um93cyAhPT0gcGFnZVNpemUpO1xuICAgIHRoaXMucXVlcnlSb3dzID0gcGFnZVNpemU7XG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSBwYWdlU2l6ZTtcblxuICAgIGxldCBuZXdTdGFydFJlY29yZDogbnVtYmVyO1xuICAgIGxldCBxdWVyeUxlbmd0aDogbnVtYmVyO1xuXG4gICAgaWYgKGdvaW5nQmFjayB8fCBjaGFuZ2luZ1BhZ2VTaXplKSB7XG4gICAgICBuZXdTdGFydFJlY29yZCA9ICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpO1xuICAgICAgcXVlcnlMZW5ndGggPSB0aGlzLnF1ZXJ5Um93cztcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3RhcnRSZWNvcmQgPSBNYXRoLm1heCh0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0LCAodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzKSk7XG4gICAgICBjb25zdCBuZXdFbmRSZWNvcmQgPSBNYXRoLm1pbihuZXdTdGFydFJlY29yZCArIHRoaXMucXVlcnlSb3dzLCB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyKTtcbiAgICAgIHF1ZXJ5TGVuZ3RoID0gdGhpcy5kaXNhYmxlUGFnZVNpemVDYWxjdWxhdGlvbiA/IHRoaXMucXVlcnlSb3dzIDogTWF0aC5taW4odGhpcy5xdWVyeVJvd3MsIG5ld0VuZFJlY29yZCAtIG5ld1N0YXJ0UmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgb2Zmc2V0OiBuZXdTdGFydFJlY29yZCxcbiAgICAgIGxlbmd0aDogcXVlcnlMZW5ndGhcbiAgICB9O1xuICAgIHRoaXMuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBnZXRPQ29sdW1uKGF0dHI6IHN0cmluZyk6IE9Db2x1bW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zID8gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGF0dHIpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaW5zZXJ0UmVjb3JkKHJlY29yZERhdGE6IGFueSwgc3FsVHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICBpZiAodGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zZXJ0IG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBiZWNhdXNlIHRoZSB0YWJsZSBpcyByZWFkLW9ubHkuYClcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fSU5TRVJUKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzcWxUeXBlcykpIHtcbiAgICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gdGhpcy5nZXRTcWxUeXBlcygpO1xuICAgICAgc3FsVHlwZXMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKHJlY29yZERhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGFvVGFibGUuaW5zZXJ0UXVlcnkocmVjb3JkRGF0YSwgc3FsVHlwZXMpO1xuICB9XG5cbiAgdXBkYXRlUmVjb3JkKGZpbHRlcjogYW55LCB1cGRhdGVEYXRhOiBhbnksIHNxbFR5cGVzPzogb2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgaWYgKHRoaXMuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVwZGF0ZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgYmVjYXVzZSB0aGUgdGFibGUgaXMgcmVhZC1vbmx5LmApXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fVVBEQVRFKSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICB9XG4gICAgY29uc3Qgc3FsVHlwZXNBcmcgPSBzcWxUeXBlcyB8fCB7fTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNxbFR5cGVzKSkge1xuICAgICAgY29uc3QgYWxsU3FsVHlwZXMgPSB0aGlzLmdldFNxbFR5cGVzKCk7XG4gICAgICBPYmplY3Qua2V5cyhmaWx0ZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZURhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGFvVGFibGUudXBkYXRlUXVlcnkoZmlsdGVyLCB1cGRhdGVEYXRhLCBzcWxUeXBlc0FyZyk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIGRhdGEgdGFibGVcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldERhdGFBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYW9UYWJsZS5kYXRhO1xuICB9XG5cblxuICAvKipcbiAgICogU2V0cyBkYXRhIHRhYmxlIHdoZW4gaXMgc3RhdGljIChPTkxZIElOIFRISVMgQ0FTRSlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHNldERhdGFBcnJheShkYXRhOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuZGFvVGFibGUpIHtcbiAgICAgIC8vIHJlbW90ZSBwYWdpbmF0aW9uIGhhcyBubyBzZW5zZSB3aGVuIHVzaW5nIHN0YXRpYy1kYXRhXG4gICAgICB0aGlzLnBhZ2VhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXRpY0RhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5kYW9UYWJsZS51c2luZ1N0YXRpY0RhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5kYW9UYWJsZS5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICAgIHRoaXMub25EYXRhTG9hZGVkLmVtaXQodGhpcy5kYW9UYWJsZS5kYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVsZXRlTG9jYWxJdGVtcygpIHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSB0aGlzLmdldERhdGFBcnJheSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goKHNlbGVjdGVkSXRlbTogYW55KSA9PiB7XG4gICAgICBmb3IgKGxldCBqID0gZGF0YUFycmF5Lmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICAgIGlmIChVdGlsLmVxdWFscyhzZWxlY3RlZEl0ZW0sIGRhdGFBcnJheVtqXSkpIHtcbiAgICAgICAgICBkYXRhQXJyYXkuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIHRoaXMuc2V0RGF0YUFycmF5KGRhdGFBcnJheSk7XG4gIH1cblxuICBpc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyKTtcbiAgICByZXR1cm4gZm91bmQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzQ29sdW1uRGVzY1NvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyICYmICFzb3J0Qy5hc2NlbmRlbnQpO1xuICAgIHJldHVybiBmb3VuZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaGFzVGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhVXRpbC5pc0RlZmluZWQodmFsdWUpIHx8ICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgIXZhbHVlKTtcbiAgfVxuXG4gIHNldEZpbHRlcnNDb25maWd1cmF0aW9uKHN0b3JhZ2U6IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3MgPSB0aGlzLnN0YXRlKSB7XG4gICAgLypcbiAgICAgIENoZWNraW5nIHRoZSBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpdGggdGhlIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGlmIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGlzIGVxdWFscyB0byBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIGlucHV0XG4gICAgICBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpbGwgYmUgdGhlIHZhbHVlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAqL1xuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNhc2VTZW5zaXRpdmUgIT09IHRoaXMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY2FzZS1zZW5zaXRpdmUnKSA/IHN0b3JhZ2VbJ2ZpbHRlci1jYXNlLXNlbnNpdGl2ZSddIDogdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH1cblxuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCAhPT0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQpIHtcbiAgICAgIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbmZGaWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY29sdW1uLWFjdGl2ZScpID8gc3RvcmFnZVsnZmlsdGVyLWNvbHVtbi1hY3RpdmUnXSA6IHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0O1xuICAgICAgdGhpcy5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSBjb25mRmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0IHx8IHRoaXMuc3RhdGUuY29sdW1uVmFsdWVGaWx0ZXJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuY29sdW1uVmFsdWVGaWx0ZXJzKSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmluaXRpYWxpemVDb2x1bW5zRmlsdGVycyh0aGlzLnN0YXRlLmNvbHVtblZhbHVlRmlsdGVycyk7XG4gICAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnNldFZhbHVlKHN0b3JhZ2VbJ2ZpbHRlciddKTtcbiAgICAgIChzdG9yYWdlWydvQ29sdW1ucyddIHx8IFtdKS5mb3JFYWNoKChvQ29sRGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4ob0NvbERhdGEuYXR0cik7XG4gICAgICAgIGlmIChvQ29sICYmIG9Db2xEYXRhLmhhc093blByb3BlcnR5KCdzZWFyY2hpbmcnKSkge1xuICAgICAgICAgIG9Db2wuc2VhcmNoaW5nID0gb0NvbERhdGEuc2VhcmNoaW5nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJCdWlsZGVyICYmIFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuZmlsdGVyQnVpbGRlclZhbHVlcykpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5zZXRGaWx0ZXJWYWx1ZXMoc3RvcmFnZS5maWx0ZXJCdWlsZGVyVmFsdWVzKTtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci50cmlnZ2VyUmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdG9yZUNvbmZpZ3VyYXRpb25DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblN0b3JlQ29uZmlndXJhdGlvbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkFwcGx5Q29uZmlndXJhdGlvbkNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQXBwbHlDb25maWd1cmF0aW9uQ2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RGVmYXVsdENvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5pbml0aWFsaXplUGFyYW1zKCk7XG4gICAgdGhpcy5wYXJzZVZpc2libGVDb2x1bW5zKHRydWUpO1xuICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21PcmlnaW5hbERlZmluaXRpb24oKTtcbiAgICB0aGlzLnJlaW5pdGlhbGl6YXRlUXVpY2tGaWx0ZXJDb2x1bW5zKCk7XG4gICAgdGhpcy5yZXNldFF1ZXJ5Um93cygpO1xuICAgIGNvbnN0IGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnModGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5zb3J0Q29sdW1ucyk7XG4gICAgdGhpcy5yZWluaXRpYWxpemVTb3J0Q29sdW1ucyhpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSk7XG4gICAgdGhpcy5vblJlaW5pdGlhbGl6ZS5lbWl0KG51bGwpO1xuICAgIHRoaXMuY2xlYXJGaWx0ZXJzKGZhbHNlKTtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuICByZXNldFF1ZXJ5Um93cygpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5xdWVyeVJvd3MpKSB7XG4gICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzO1xuICAgIH1cbiAgfVxuICBhcHBseUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0b3JlZENvbmZpZ3VyYXRpb24gPSB0aGlzLnN0YXRlLmdldFN0b3JlZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWUpO1xuICAgIGlmIChzdG9yZWRDb25maWd1cmF0aW9uKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gc3RvcmVkQ29uZmlndXJhdGlvblsnc3RvcmVkLXByb3BlcnRpZXMnXSB8fCBbXTtcblxuICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgICAgICAgIGNhc2UgJ3NvcnQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnJlaW5pdGlhbGl6ZVNvcnRDb2x1bW5zKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdvQ29sdW1ucy1kaXNwbGF5JzpcbiAgICAgICAgICAgIHRoaXMucGFyc2VWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3F1aWNrLWZpbHRlcic6XG4gICAgICAgICAgY2FzZSAnY29sdW1ucy1maWx0ZXInOlxuICAgICAgICAgIGNhc2UgJ2ZpbHRlci1idWlsZGVyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyc0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2dyb3VwZWQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnBhcnNlR3JvdXBlZENvbHVtbnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUucXVlcnlSb3dzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGVBbGlnbkNsYXNzKG9Db2w6IE9Db2x1bW4pIHtcblxuICAgIGNvbnN0IGhhc1RpdGxlQWxpZ24gPSBVdGlsLmlzRGVmaW5lZChvQ29sLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduKTtcbiAgICBjb25zdCBhdXRvQWxpZ24gPSAodGhpcy5hdXRvQWxpZ25UaXRsZXMgJiYgIWhhc1RpdGxlQWxpZ24pIHx8IChoYXNUaXRsZUFsaWduICYmIG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduID09PSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQVVUTyk7XG4gICAgaWYgKCFhdXRvQWxpZ24pIHtcbiAgICAgIHJldHVybiBvQ29sLmdldFRpdGxlQWxpZ25DbGFzcygpO1xuICAgIH1cblxuICAgIGxldCBhbGlnbiA9IHRoaXMuZ2V0Q2VsbEFsaWduQ2xhc3Mob0NvbCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGFsaWduKSAmJiBhbGlnbi5sZW5ndGggPiAwKSB7XG4gICAgICBhbGlnbiA9IGFsaWduLnN1YnN0cmluZygyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChvQ29sLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQ0VOVEVSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdyZWFsJzpcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fRU5EO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhbGlnbiA9IENvZGVzLkNPTFVNTl9USVRMRV9BTElHTl9TVEFSVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsaWduO1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbEFsaWduQ2xhc3MoY29sdW1uOiBPQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29sdW1uLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5kZWZpbml0aW9uLmNvbnRlbnRBbGlnbikgPyAnby0nICsgY29sdW1uLmRlZmluaXRpb24uY29udGVudEFsaWduIDogJyc7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRHcm91cEhlYWRlckNlbGxBbGlnbkNsYXNzKGNvbHVtbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTmFtZUFycmF5ID0gW107XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uc3Vic3RyKCdncm91cEhlYWRlci0nLmxlbmd0aCkpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChvQ29sKSkge1xuICAgICAgY2xhc3NOYW1lQXJyYXkucHVzaCh0aGlzLmdldENlbGxBbGlnbkNsYXNzKG9Db2wpKTtcbiAgICAgIGNsYXNzTmFtZUFycmF5LnB1c2gob0NvbC5jbGFzc05hbWUgPyBvQ29sLmNsYXNzTmFtZSA6ICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZUFycmF5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZERlZmF1bHRSb3dCdXR0b25zKCkge1xuICAgIC8vIGNoZWNrIHBlcm1pc3Npb25zXG4gICAgaWYgKHRoaXMuZWRpdEJ1dHRvbkluUm93KSB7XG4gICAgICB0aGlzLmFkZEJ1dHRvbkluUm93KCdlZGl0QnV0dG9uSW5Sb3cnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV0YWlsQnV0dG9uSW5Sb3cpIHtcbiAgICAgIHRoaXMuYWRkQnV0dG9uSW5Sb3coJ2RldGFpbEJ1dHRvbkluUm93Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEJ1dHRvbkluUm93KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbERlZjogT0NvbHVtbiA9IHRoaXMuY3JlYXRlT0NvbHVtbihuYW1lLCB0aGlzKTtcbiAgICBjb2xEZWYudHlwZSA9IG5hbWU7XG4gICAgY29sRGVmLnZpc2libGUgPSB0cnVlO1xuICAgIGNvbERlZi5zZWFyY2hhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLm9yZGVyYWJsZSA9IGZhbHNlO1xuICAgIGNvbERlZi5yZXNpemFibGUgPSBmYWxzZTtcbiAgICBjb2xEZWYuZ3JvdXBhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgIGNvbERlZi53aWR0aCA9ICc0OHB4JztcbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMucHVzaChuYW1lKTtcbiAgfVxuXG4gIGdldCBoZWFkZXJIZWlnaHQoKSB7XG4gICAgbGV0IGhlaWdodCA9IDA7XG4gICAgaWYgKHRoaXMudGFibGVIZWFkZXJFbCAmJiB0aGlzLnRhYmxlSGVhZGVyRWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgaGVpZ2h0ICs9IHRoaXMudGFibGVIZWFkZXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVUb29sYmFyRWwgJiYgdGhpcy50YWJsZVRvb2xiYXJFbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBoZWlnaHQgKz0gdGhpcy50YWJsZVRvb2xiYXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIGlzRGV0YWlsTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxNb2RlICE9PSBDb2Rlcy5ERVRBSUxfTU9ERV9OT05FO1xuICB9XG5cbiAgY29weUFsbCgpIHtcbiAgICBVdGlsLmNvcHlUb0NsaXBib2FyZChKU09OLnN0cmluZ2lmeSh0aGlzLmdldFJlbmRlcmVkVmFsdWUoKSkpO1xuICB9XG5cbiAgY29weVNlbGVjdGlvbigpIHtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5kYXRhU291cmNlLmdldFJlbmRlcmVkRGF0YSh0aGlzLmdldFNlbGVjdGVkSXRlbXMoKSk7XG4gICAgVXRpbC5jb3B5VG9DbGlwYm9hcmQoSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRJdGVtcykpO1xuICB9XG5cbiAgZGVzdHJveUFjdGl2ZWRUb29sdGlwcygpIHtcbiAgICB0aGlzLnRvb2x0aXAuZm9yRWFjaCh0cCA9PiB7XG4gICAgICBpZiAodHAuX292ZXJsYXlSZWYpIHtcbiAgICAgICAgdHAuX292ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgbmF2aWdhdGlvbiB0byBpdGVtIGRldGFpbCwgcmVjZWl2aW5nIGl0ZW0gZGF0YVxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyBkZXRhaWxcbiAgICovXG4gIHZpZXdEZXRhaWwoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkgJiYgdGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oJ2RldGFpbCcpIHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZXN0cm95QWN0aXZlZFRvb2x0aXBzKCk7XG4gICAgc3VwZXIudmlld0RldGFpbChpdGVtKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIG5hdmlnYXRpb24gdG8gaXRlbSBlZGl0aW9uLCByZWNlaXZpbmcgaXRlbSBkYXRhXG4gICAqIEBwYXJhbSBpdGVtXG4gICAqIEByZXR1cm5zIGRldGFpbFxuICAgKi9cbiAgZWRpdERldGFpbChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSAmJiB0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbignZWRpdCcpIHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIuZWRpdERldGFpbChpdGVtKTtcbiAgfVxuXG4gIGdldE9Db2x1bW5Gcm9tVGgodGg6IGFueSk6IE9Db2x1bW4ge1xuICAgIGxldCByZXN1bHQ6IE9Db2x1bW47XG4gICAgY29uc3QgY2xhc3NMaXN0OiBhbnlbXSA9IEFycmF5LmZyb20oKHRoIGFzIEVsZW1lbnQpLmNsYXNzTGlzdCB8fCBbXSk7XG4gICAgY29uc3QgY29sdW1uQ2xhc3MgPSBjbGFzc0xpc3QuZmluZCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IChjbGFzc05hbWUuc3RhcnRzV2l0aCgnbWF0LWNvbHVtbi0nKSkpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW5DbGFzcykpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW5DbGFzcy5zdWJzdHIoJ21hdC1jb2x1bW4tJy5sZW5ndGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldE9Db2x1bW5Gcm9tR3JvdXBIZWFkZXJDb2x1bW4oYXR0cjogc3RyaW5nKTogT0NvbHVtbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T0NvbHVtbihhdHRyLnN1YnN0cignZ3JvdXBIZWFkZXItJy5sZW5ndGgpKTtcbiAgfVxuXG4gIGdldFRoV2lkdGhGcm9tT0NvbHVtbihvQ29sdW1uOiBPQ29sdW1uKTogYW55IHtcbiAgICBsZXQgd2lkdGhDb2x1bW46IG51bWJlcjtcbiAgICBjb25zdCB0aEFycmF5ID0gdGhpcy50YWJsZUhlYWRlckVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aEFycmF5Lmxlbmd0aCAmJiAhVXRpbC5pc0RlZmluZWQod2lkdGhDb2x1bW4pOyBpKyspIHtcbiAgICAgIGNvbnN0IHRoID0gdGhBcnJheVtpXTtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHRoLmNsYXNzTGlzdDtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2xhc3NMaXN0Lmxlbmd0aCAmJiAhVXRpbC5pc0RlZmluZWQod2lkdGhDb2x1bW4pOyBqKyspIHtcbiAgICAgICAgaWYgKGNsYXNzTGlzdFtqXSA9PT0gJ21hdC1jb2x1bW4tJyArIG9Db2x1bW4uYXR0cikge1xuICAgICAgICAgIHdpZHRoQ29sdW1uID0gdGguY2xpZW50V2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHdpZHRoQ29sdW1uO1xuICB9XG5cbiAgZ2V0Q29sdW1uSW5zZXJ0YWJsZShuYW1lKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZSArIHRoaXMuZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc1NlbGVjdGlvbk1vZGVOb25lKCkgJiYgdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpO1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbldpZHRoRnJvbVN0YXRlKGNvbERlZjogT0NvbHVtbik6IHN0cmluZyB7XG4gICAgLy8xLiBCeSBkZWZhdWx0LCBzZXQgd2lkdGggZGVmaW5pdGlvblxuICAgIGxldCBjb2x1bW5XaWR0aCA9IGNvbERlZi5kZWZpbml0aW9uICYmIGNvbERlZi5kZWZpbml0aW9uLndpZHRoID8gY29sRGVmLmRlZmluaXRpb24ud2lkdGggOiB2b2lkIDA7XG4gICAgY29uc3Qgc3RvcmVkRGF0YSA9IHRoaXMuc3RhdGUuZ2V0Q29sdW1uRGlzcGxheShjb2xEZWYpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzdG9yZWREYXRhKSAmJiBVdGlsLmlzRGVmaW5lZChzdG9yZWREYXRhLndpZHRoKSkge1xuICAgICAgLy8yLiBTZXQgd2lkdGggaWYgdGhlIHdpZHRoIGlzIHN0b3JlZFxuICAgICAgY29sdW1uV2lkdGggPSBzdG9yZWREYXRhLndpZHRoO1xuICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbnMgc2F2ZWQgaW4gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvblxuICAgICAgLy8gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgICBpZiAodGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5jb2x1bW5zRGlzcGxheSkge1xuICAgICAgICBjb25zdCBpbml0aWFsU3RvcmVkRGF0YSA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZ2V0Q29sdW1uRGlzcGxheShjb2xEZWYpO1xuICAgICAgICAvLyBJZiBvcmlnaW5hbCB3aWR0aCBjaGFuZ2VkIHRoZW4gdGhlIHdpZHRoIGlzIHJlc2V0ZWQgd2l0aCB0aGlzIHZhbHVlXG4gICAgICAgIGlmIChpbml0aWFsU3RvcmVkRGF0YSAmJiBpbml0aWFsU3RvcmVkRGF0YS53aWR0aCAmJiBjb2xEZWYuZGVmaW5pdGlvbi5vcmlnaW5hbFdpZHRoKSB7XG4gICAgICAgICAgaWYgKGluaXRpYWxTdG9yZWREYXRhLndpZHRoICE9PSBjb2xEZWYuZGVmaW5pdGlvbi5vcmlnaW5hbFdpZHRoKSB7XG4gICAgICAgICAgICBjb2x1bW5XaWR0aCA9IGNvbERlZi5kZWZpbml0aW9uLm9yaWdpbmFsV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5XaWR0aDtcbiAgfVxuXG4gIHJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tTG9jYWxTdG9yYWdlKCkge1xuICAgIHRoaXMub1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZvckVhY2goeCA9PiB7XG4gICAgICB4LndpZHRoID0gdGhpcy5nZXRDb2x1bW5XaWR0aEZyb21TdGF0ZSh4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tT3JpZ2luYWxEZWZpbml0aW9uKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihjID0+IGMudmlzaWJsZSkuZm9yRWFjaChjID0+IHtcbiAgICAgICAgYy53aWR0aCA9IGMuRE9NV2lkdGggPSB2b2lkIDA7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChjLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKGMuZGVmaW5pdGlvbi53aWR0aCkpIHtcbiAgICAgICAgICBjLndpZHRoID0gYy5kZWZpbml0aW9uLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGMuc2V0UmVuZGVyV2lkdGgodGhpcy5ob3Jpem9udGFsU2Nyb2xsLCB0aGlzLmdldENsaWVudFdpZHRoQ29sdW1uKGMpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9Db2x1bW4oYXR0cj86IHN0cmluZywgdGFibGU/OiBPVGFibGVDb21wb25lbnQsIGNvbHVtbj86IE9UYWJsZUNvbHVtbkNvbXBvbmVudCAmIE9UYWJsZUNvbHVtbkNhbGN1bGF0ZWRDb21wb25lbnQpOiBPQ29sdW1uIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBPQ29sdW1uKCk7XG4gICAgaWYgKGF0dHIpIHtcbiAgICAgIGluc3RhbmNlLmF0dHIgPSBhdHRyO1xuICAgIH1cbiAgICBpZiAodGFibGUpIHtcbiAgICAgIGluc3RhbmNlLnNldERlZmF1bHRQcm9wZXJ0aWVzKHtcbiAgICAgICAgb3JkZXJhYmxlOiB0aGlzLm9yZGVyYWJsZSxcbiAgICAgICAgcmVzaXphYmxlOiB0aGlzLnJlc2l6YWJsZSxcbiAgICAgICAgZ3JvdXBhYmxlOiB0aGlzLmdyb3VwYWJsZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4pIHtcbiAgICAgIGluc3RhbmNlLnNldENvbHVtblByb3BlcnRpZXMoY29sdW1uKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT1RhYmxlQnV0dG9ucyhhcmc6IE9UYWJsZUJ1dHRvbnMpIHtcbiAgICB0aGlzLm9UYWJsZUJ1dHRvbnMgPSBhcmc7XG4gICAgaWYgKHRoaXMub1RhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9UYWJsZUJ1dHRvbnMucmVnaXN0ZXJCdXR0b25zKHRoaXMudGFibGVCdXR0b25zLnRvQXJyYXkoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldENsaWVudFdpZHRoQ29sdW1uKGNvbDogT0NvbHVtbik6IG51bWJlciB7XG4gICAgcmV0dXJuIGNvbC5ET01XaWR0aCB8fCB0aGlzLmdldFRoV2lkdGhGcm9tT0NvbHVtbihjb2wpO1xuICB9XG5cbiAgcHVibGljIGdldE1pbldpZHRoQ29sdW1uKGNvbDogT0NvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKGNvbC5taW5XaWR0aCwgQ29kZXMuREVGQVVMVF9DT0xVTU5fTUlOX1dJRFRIKSArICdweCc7XG4gIH1cblxuICBzaG93RXhwYW5kYWJsZVJvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgZW5hYmxlIHZpcnR1YWwgc2Nyb2xsXG4gICAqL1xuICBnZXQgZW5hYmxlZFZpcnR1YWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlydHVhbFNjcm9sbCAmJiAhdGhpcy5zaG93RXhwYW5kYWJsZVJvdygpICYmIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5sZW5ndGggPT09IDA7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBncm91cGVkIGNvbHVtbnNcbiAgICovXG4gIHBhcnNlR3JvdXBlZENvbHVtbnMoKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuc3RhdGUuZ3JvdXBlZENvbHVtbnMgfHwgdGhpcy5vcmlnaW5hbEdyb3VwZWRDb2x1bW5zQXJyYXk7XG4gICAgaWYgKHRoaXMuc3RhdGUuZ3JvdXBlZENvbHVtbnMgJiYgdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5ncm91cGVkQ29sdW1ucykge1xuICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZ3JvdXBlZENvbHVtbnNcbiAgICAgICAgLmZpbHRlcih4ID0+ICF0aGlzLm9yaWdpbmFsR3JvdXBlZENvbHVtbnNBcnJheS5pbmNsdWRlcyh4KSk7XG5cbiAgICAgIGlmIChkaWZmZXJlbmNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5vcmlnaW5hbEdyb3VwZWRDb2x1bW5zQXJyYXk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0R3JvdXBDb2x1bW5zKHJlc3VsdCk7XG4gIH1cbiAgcGFyc2VHcm91cGVkQ29sdW1uVHlwZXMoKSB7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMgPSB0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5UeXBlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgYnkgY29sdW1uXG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIGdyb3VwQnlDb2x1bW4oY29sdW1uOiBPQ29sdW1uLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5jaGVja0dyb3VwQnlDb2x1bW4oY29sdW1uLmF0dHIsIHRydWUpO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5UeXBlcyhjb2x1bW4uYXR0ciwgdHJ1ZSwgdHlwZSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVHcm91cGVkQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZ3JvdXAgYnkgY29sdW1uXG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIHVuR3JvdXBCeUNvbHVtbihjb2x1bW46IE9Db2x1bW4pIHtcbiAgICB0aGlzLmNoZWNrR3JvdXBCeUNvbHVtbihjb2x1bW4uYXR0ciwgZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlR3JvdXBlZENvbHVtblR5cGVzKGNvbHVtbi5hdHRyLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gIH1cblxuICAvKipcbiAgICogVW5ncm91cCBieSBhbGwgY29sdW1uc1xuICAgKi9cbiAgdW5Hcm91cEJ5QWxsQ29sdW1ucygpIHtcbiAgICB0aGlzLnNldEdyb3VwQ29sdW1ucyhbXSk7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMgPSBbXTtcbiAgfVxuXG4gIHNldEdyb3VwQ29sdW1ucyh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlR3JvdXBlZENvbHVtbnMoKTtcbiAgfVxuICBzZXRHcm91cGVkQ29sdW1uVHlwZXModmFsdWU6IE9Hcm91cGVkQ29sdW1uVHlwZXNbXSkge1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzID0gdmFsdWU7XG4gIH1cbiAgY2hlY2tHcm91cEJ5Q29sdW1uKGZpZWxkOiBzdHJpbmcsIGFkZDogYm9vbGVhbikge1xuICAgIGxldCBmb3VuZCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5ncm91cGVkQ29sdW1uc0FycmF5KSB7XG4gICAgICBpZiAoY29sdW1uID09PSBmaWVsZCkge1xuICAgICAgICBmb3VuZCA9IHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5pbmRleE9mKGNvbHVtbiwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmb3VuZCAhPSBudWxsICYmIGZvdW5kID49IDApIHtcbiAgICAgIGlmICghYWRkKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5zcGxpY2UoZm91bmQsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5wdXNoKGZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGl0ZW0gaXMgZ3JvdXBcbiAgICogQHBhcmFtIGluZGV4XG4gICAqIEBwYXJhbSBpdGVtXG4gICAqIEByZXR1cm5zIHRydWUgaWYgZ3JvdXBcbiAgICovXG4gIGlzR3JvdXAoaW5kZXgsIGl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXRlbSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3c7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGl0ZW0gaXMgbm90IGdyb3VwXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyB0cnVlIGlmIG5vdCBncm91cFxuICAgKi9cbiAgaXNOb3RHcm91cChpbmRleCwgaXRlbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKGl0ZW0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KTtcbiAgfVxuXG4gIGdldExhc3RHcm91cHMoKSB7XG4gICAgLy8gR2V0IGxhc3QgZ3JvdXBzXG4gICAgY29uc3Qgc2NvcmVzID0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YTtcbiAgICBjb25zdCBtYXhMZXZlbCA9IHNjb3Jlcy5yZWR1Y2UoKGFjYywgY3VycikgPT4gY3Vyci5sZXZlbCA+IGFjYyA/IGN1cnIubGV2ZWwgOiBhY2MsIDApO1xuICAgIGNvbnN0IG1heExldmVsUmVuZGVyZWREYXRhID0gc2NvcmVzLnJlZHVjZSgociwgbykgPT4gby5sZXZlbCA9PT0gbWF4TGV2ZWwgPyBbLi4uciwgb10gOiByLCBbXSk7XG4gICAgcmV0dXJuIG1heExldmVsUmVuZGVyZWREYXRhLmxlbmd0aDtcbiAgfVxuXG4gIGdyb3VwSGVhZGVyQ2xpY2socm93OiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnRvZ2dsZUdyb3VwQnlDb2x1bW4ocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnN0YW5jZU9mT1RhYmxlQ2VsbFJlbmRlcmVyU2VydmljZUNvbXBvbmVudChyZW5kZXJlcjogT0Jhc2VUYWJsZUNlbGxSZW5kZXJlcikge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChyZW5kZXJlcikgJiYgKHJlbmRlcmVyIGFzIGFueSkub25EYXRhTG9hZGVkICYmIChyZW5kZXJlciBhcyBhbnkpLnF1ZXJ5QWxsRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbHVtbiBkYXRhIGJ5IGF0dHJcbiAgICogQHBhcmFtIGF0dHJcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcmV0dXJucyBjb2x1bW4gZGF0YSBieSBhdHRyXG4gICAqL1xuICBnZXRDb2x1bW5EYXRhQnlBdHRyKGF0dHIsIHJvdzogYW55KTogYW55IHtcbiAgICBsZXQgb3BlcmF0aW9uID0gbnVsbDtcbiAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1uVHlwZXMubGVuZ3RoICE9IDAgJiYgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uYXR0ciA9PSBhdHRyKSAhPSAtMSkge1xuICAgICAgb3BlcmF0aW9uID0gdGhpcy5ncm91cGVkQ29sdW1uVHlwZXNbdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uYXR0ciA9PSBhdHRyKV0udHlwZTtcbiAgICB9XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihhdHRyKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wpKSB7XG4gICAgICByZXR1cm4gcm93W2F0dHJdO1xuICAgIH1cbiAgICBjb25zdCB1c2VSZW5kZXJlciA9IG9Db2wucmVuZGVyZXIgJiYgb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICBpZiAob3BlcmF0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KHJvd1tvQ29sLmF0dHJdKTtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldEN1cnJlbnRMYW5nKCk7XG4gICAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgICBjYXNlIFwiWUVBUlwiOiByZXR1cm4gZGF0ZS55ZWFyKCk7XG4gICAgICAgIGNhc2UgXCJNT05USFwiOiByZXR1cm4gbW9tZW50KCkubG9jYWxlKGxhbmd1YWdlKS5tb250aChkYXRlLm1vbnRoKCkpLmZvcm1hdChcIk1NTU1cIik7XG4gICAgICAgIGNhc2UgXCJZRUFSX01PTlRIXCI6IHJldHVybiBtb21lbnQoKS5sb2NhbGUobGFuZ3VhZ2UpLm1vbnRoKGRhdGUubW9udGgoKSkueWVhcihkYXRlLnllYXIoKSkuZm9ybWF0KFwiTU1NTSwgWVlZWVwiKTtcbiAgICAgICAgY2FzZSBcIllFQVJfTU9OVEhfREFZXCI6IHJldHVybiB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBkYXRlR3JvdXBlZENvbHVtblR5cGVzKGF0dHI6IHN0cmluZywgYWRkOiBib29sZWFuLCBvcGVyYXRpb24/OiBzdHJpbmcpIHtcbiAgICBsZXQgZ3JvdXBlZENvbHVtbnM6IE9Hcm91cGVkQ29sdW1uVHlwZXNbXSA9IFtdO1xuICAgIGxldCBpbmRleCA9IHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmF0dHIgPT0gYXR0cik7XG4gICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICBpZiAoIWFkZCkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMucHVzaCh7IFwiYXR0clwiOiBhdHRyLCBcInR5cGVcIjogb3BlcmF0aW9uIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5UeXBlcyA9IGdyb3VwZWRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lR3JvdXBIZWFkZXIocm93OiBPVGFibGVHcm91cGVkUm93KTogc3RyaW5nIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gJyc7XG4gICAgaWYgKHJvdy5sZXZlbCA8PSAxMCkge1xuICAgICAgY2xhc3NOYW1lID0gJ28tdGFibGUtZ3JvdXAtcm93IG8tdGFibGUtZ3JvdXAtcm93LWxldmVsLScgKyByb3cubGV2ZWw7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBwcml2YXRlIHN0b3BFZGl0aW9uKGNsZWFyU2VsZWN0aW9uPzogYm9vbGVhbikge1xuICAgIGNsZWFyU2VsZWN0aW9uID0gY2xlYXJTZWxlY3Rpb24gPyBjbGVhclNlbGVjdGlvbiA6IGZhbHNlO1xuICAgIHRoaXMuZWRpdGluZ0NlbGwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25BbmRFZGl0aW5nKGNsZWFyU2VsZWN0aW9uKTtcbiAgfVxuXG4gIHN0b3JlRmlsdGVySW5TdGF0ZShhcmc6IE9GaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RvcmVGaWx0ZXIoYXJnKTtcbiAgfVxuXG4gIHJlaW5pdGlhbGl6YXRlUXVpY2tGaWx0ZXJDb2x1bW5zKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1uc1xuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNlYXJjaGFibGUgJiYgY29sdW1uLnZpc2libGUpXG4gICAgICAuZm9yRWFjaChjb2x1bW4gPT4gY29sdW1uLnNlYXJjaGluZyA9IHRydWUpXG4gIH1cblxuICByZWluaXRpYWxpemVTb3J0Q29sdW1ucyhzb3J0Q29sdW1ucz86IFNRTE9yZGVyW10pIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVycyA9IFtdO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzb3J0Q29sdW1ucykpIHtcbiAgICAgIHRoaXMuc29ydENvbEFycmF5ID0gc29ydENvbHVtbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VTb3J0Q29sdW1ucygpO1xuICAgIH1cbiAgICB0aGlzLnNvcnQuc2V0U29ydENvbHVtbnModGhpcy5zb3J0Q29sQXJyYXkpO1xuICAgIHRoaXMucmVmcmVzaFNvcnRIZWFkZXJzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVmcmVzaFNvcnRIZWFkZXJzKCkge1xuICAgIHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcihoZWFkZXIgPT4gVXRpbC5pc0RlZmluZWQoaGVhZGVyLm1hdFNvcnRIZWFkZXIpKS5mb3JFYWNoKGhlYWRlciA9PiBoZWFkZXIubWF0U29ydEhlYWRlci5yZWZyZXNoKCkpO1xuICB9XG5cbiAgZ2V0UXVpY2tGaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSA/XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnZhbHVlIDpcbiAgICAgICcnO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5Q2VsbFJlbmRlcmVycygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHF1aWNrRmlsdGVyVmFsdWUgPSB0aGlzLmdldFF1aWNrRmlsdGVyVmFsdWUoKTtcblxuICAgIGlmICgoVXRpbC5pc0RlZmluZWQocXVpY2tGaWx0ZXJWYWx1ZSkgJiYgcXVpY2tGaWx0ZXJWYWx1ZS5sZW5ndGggPiAwKSB8fCB0aGlzLnNvcnRDb2xBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5vVGFibGVPcHRpb25zLmNvbHVtbnNcbiAgICAgICAgLmZpbHRlcihvQ29sID0+IG9Db2wuc2VhcmNoaW5nICYmIHRoaXMuaXNJbnN0YW5jZU9mT1RhYmxlQ2VsbFJlbmRlcmVyU2VydmljZUNvbXBvbmVudChvQ29sLnJlbmRlcmVyKSlcbiAgICAgICAgLm1hcChvQ29sID0+IChvQ29sLnJlbmRlcmVyIGFzIGFueSkucXVlcnlBbGxEYXRhKCkpO1xuXG4gICAgICByZXR1cm4gcXVlcmllcy5sZW5ndGggPiAwID8gY29tYmluZUxhdGVzdChxdWVyaWVzKSA6IG9mKG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICB0YWJsZVF1aWNrRmlsdGVyQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucXVlcnlDZWxsUmVuZGVyZXJzKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5xdWlja0ZpbHRlciA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG9uTWF0U29ydENoYW5nZVxuICBwdWJsaWMgZmlsdGVyRGF0YSh2YWx1ZT86IHN0cmluZywgbG9hZE1vcmU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgLy9cbiAgfVxuXG4gIHNldE9UYWJsZUNvbHVtbnNHcm91cGluZyh2YWx1ZTogT1RhYmxlQ29sdW1uc0dyb3VwaW5nKSB7XG4gICAgdGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldENvbHVtbkdyb3VwaW5nQ29tcG9uZW50KGNvbHVtbkF0dHI6IHN0cmluZyk6IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudCB7XG4gICAgbGV0IHJlc3VsdDogT1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29sdW1uQ29tcG9uZW50O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudCkpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50LmdldENvbHVtbkdyb3VwaW5nKGNvbHVtbkF0dHIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdXNlQ29sdW1uR3JvdXBpbmdBZ2dyZWdhdGUoY29sdW1uQXR0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW5BdHRyKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHNxbFR5cGUgPSB0aGlzLmdldFNxbFR5cGVzKClbY29sdW1uQXR0cl07XG4gICAgY29uc3QgaGFzRGVmYXVsdEFnZ3JlZ2F0ZSA9IFNRTFR5cGVzLmlzTnVtZXJpY1NRTFR5cGUoc3FsVHlwZSlcbiAgICAgICYmICghVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcikgfHwgT1RhYmxlQ29tcG9uZW50LkFWQUlMQUJMRV9HUk9VUElOR19DT0xVTU5TX1JFTkRFUkVSUy5pbmNsdWRlcyhvQ29sLnR5cGUpKTtcblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gaGFzRGVmYXVsdEFnZ3JlZ2F0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50LnVzZUNvbHVtbkFnZ3JlZ2F0ZShjb2x1bW5BdHRyLCBoYXNEZWZhdWx0QWdncmVnYXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja1ZpZXdwb3J0U2l6ZSgpIHtcbiAgICAvLyBJdHMgYSB0ZW1wb3JhcmlseSBmaXhlZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTAxMTdcbiAgICAvLyBTb2x2ZSB0aGUgaXNzdWUgd2hlbiBzd2l0Y2hpbmcgdGFicyB3aGVuIHRoZSB2aXJ0dWFsIHNjcm9sbGluZyBjb21wb25lbnQgaXMgdXNlZFxuICAgIC8vIGluIGEgbWF0IC0gdGFiIGNvbXBvbmVudCBhbmQgdmlydHVhbCBzY3JvbGwgd29yayBhYm5vcm1hbGx5XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNob3cgZXhwYW5kYWJsZSBpY29uIG9yIG5vdCBpZiBoYXMgZGF0YSBvciBub3RcbiAgc2hvd0V4cGFuZGFibGVJY29uKHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChVdGlsLmlzRGVmaW5lZCh0aGlzLnNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uKSAmJiB0aGlzLnNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uIGluc3RhbmNlb2YgRnVuY3Rpb24pID8gVXRpbC53cmFwSW50b09ic2VydmFibGUodGhpcy5zaG93RXhwYW5kYWJsZUljb25GdW5jdGlvbihyb3csIHJvd0luZGV4KSkgOiBvZih0cnVlKTtcbiAgfVxuXG4gIGdldENvbHVtbnNOb3RJbmNsdWRlZCgpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNvbHNOb3RJbmNsdWRlZCA9IFtdO1xuICAgIGNvbHNOb3RJbmNsdWRlZCA9IHRoaXMub1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihjID0+IHZvaWQgMCAhPT0gYy5yZW5kZXJlciAmJiAoYy50eXBlID09PSAnaW1hZ2UnIHx8IGMudHlwZSA9PT0gJ2FjdGlvbicpKS5tYXAoYyA9PiBjLmF0dHIpO1xuICAgIGNvbHNOb3RJbmNsdWRlZC5wdXNoKENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgY29sc05vdEluY2x1ZGVkLnB1c2goQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSk7XG4gICAgcmV0dXJuIGNvbHNOb3RJbmNsdWRlZDtcbiAgfVxuXG4gIGdldENvbHVtbk5hbWVzKGNvbHVtbnM6IHN0cmluZ1tdKTogeyBbY29sdW1uSWQ6IHN0cmluZ106IHN0cmluZzsgfSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW5OYW1lcyA9IHt9O1xuICAgIGNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgIGNvbnN0IG9Db2x1bW4gPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmluZChvYyA9PiBvYy5hdHRyID09PSBjKTtcbiAgICAgIHRhYmxlQ29sdW1uTmFtZXNbY10gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KG9Db2x1bW4udGl0bGUgPyBvQ29sdW1uLnRpdGxlIDogb0NvbHVtbi5hdHRyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGFibGVDb2x1bW5OYW1lcztcbiAgfVxuXG4gIHJlc2V0Q29sdW1uc1dpZHRoKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGMuZGVmaW5pdGlvbikpIHtcbiAgICAgICAgYy53aWR0aCA9IFV0aWwuaXNEZWZpbmVkKGMuZGVmaW5pdGlvbi53aWR0aCkgPyBjLmRlZmluaXRpb24ud2lkdGggOiBjLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYy53aWR0aCA9IFwiYXV0b1wiO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uc0RPTVdpZHRoKCk7XG4gIH1cblxuICB1cGRhdGVDb2x1bW5zRE9NV2lkdGgoKSB7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICBjLkRPTVdpZHRoID0gdGhpcy5nZXRUaFdpZHRoRnJvbU9Db2x1bW4oYyk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHB1YmxpYyBpc0Rpc2FibGVDaGVja2JveChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgZGlzYWJsZSA9IGZhbHNlO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbih7IC4uLml0ZW0gfSk7XG4gICAgfVxuICAgIHJldHVybiBkaXNhYmxlO1xuXG4gIH1cblxuICBnZXRTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0U25hY2tTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLnNuYWNrQmFyU2VydmljZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8tdGFibGUtY29udGFpbmVyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiIFtzdHlsZS5kaXNwbGF5XT1cImlzVmlzaWJsZSgpPyAnJyA6ICdub25lJ1wiXG4gIFtjbGFzcy5ibG9jay1ldmVudHNdPVwic2hvd0xvYWRpbmcgfCBhc3luY1wiPlxuXG4gIDxvLWRhdGEtdG9vbGJhciAjdGFibGVUb29sYmFyICpuZ0lmPVwiaGFzQ29udHJvbHMoKVwiIFt0aXRsZV09XCJ0aXRsZVwiIFtzaG93LXRpdGxlXT1cInNob3dUaXRsZVwiIGNsYXNzPVwiby10YWJsZS10b29sYmFyXCI+XG4gICAgPG5nLWNvbnRhaW5lciBvLWRhdGEtdG9vbGJhci1wcm9qZWN0aW9uLXN0YXJ0PlxuICAgICAgPG8tdGFibGUtYnV0dG9ucyAjdGFibGVCdXR0b25zIFtpbnNlcnQtYnV0dG9uXT1cImluc2VydEJ1dHRvblwiIFtyZWZyZXNoLWJ1dHRvbl09XCJyZWZyZXNoQnV0dG9uXCIgW2RlbGV0ZS1idXR0b25dPVwic2hvd0RlbGV0ZUJ1dHRvblwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJvLXRhYmxlLWJ1dHRvblwiPjwvbmctY29udGVudD5cbiAgICAgIDwvby10YWJsZS1idXR0b25zPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLXRhYmxlLXRvb2xiYXJdW3Bvc2l0aW9uPXN0YXJ0XVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby10YWJsZS10b29sYmFyXVtwb3NpdGlvbj1lbmRdXCIgbmdQcm9qZWN0QXM9XCJbby1kYXRhLXRvb2xiYXItY3VzdG9tLXByb2plY3Rpb24tZW5kXVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby10YWJsZS10b29sYmFyXVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGFpbmVyIG8tZGF0YS10b29sYmFyLXByb2plY3Rpb24tZW5kPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrZmlsdGVyQ29udGVudENoaWxkOyBlbHNlIGRlZmF1bHRRdWlja0ZpbHRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJvLXRhYmxlLXF1aWNrZmlsdGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRRdWlja0ZpbHRlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrRmlsdGVyXCI+XG4gICAgICAgICAgPG8tdGFibGUtcXVpY2tmaWx0ZXIgKG9uQ2hhbmdlKT1cInRhYmxlUXVpY2tGaWx0ZXJDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICA8L28tdGFibGUtcXVpY2tmaWx0ZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd1RhYmxlTWVudUJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm8tdGFibGUtbWVudS1idXR0b25cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGFibGVNZW51Lm1hdE1lbnVcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6bW9yZV92ZXJ0XCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG8tdGFibGUtbWVudSAjdGFibGVNZW51IFtzZWxlY3QtYWxsLWNoZWNrYm94XT1cInNlbGVjdEFsbENoZWNrYm94XCIgW2V4cG9ydC1idXR0b25dPVwiZXhwb3J0QnV0dG9uXCJcbiAgICAgICAgW2NvbHVtbnMtdmlzaWJpbGl0eS1idXR0b25dPVwiY29sdW1uc1Zpc2liaWxpdHlCdXR0b25cIiBbc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbl09XCJzaG93Q29uZmlndXJhdGlvbk9wdGlvblwiXG4gICAgICAgIFtzaG93LWZpbHRlci1vcHRpb25dPVwic2hvd0ZpbHRlck9wdGlvblwiIFtzaG93LXJlcG9ydC1vbi1kZW1hbmQtb3B0aW9uXT1cInNob3dSZXBvcnRPbkRlbWFuZE9wdGlvblwiXG4gICAgICAgIFtzaG93LWNoYXJ0cy1vbi1kZW1hbmQtb3B0aW9uXT1cInNob3dDaGFydHNPbkRlbWFuZE9wdGlvblwiIFtzaG93LXJlc2V0LXdpZHRoLW9wdGlvbl09XCJzaG93UmVzZXRXaWR0aE9wdGlvblwiIFtzaG93LWdyb3VwLWJ5LW9wdGlvbl09XCJncm91cGFibGVcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby10YWJsZS1vcHRpb25cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L28tdGFibGUtbWVudT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vLWRhdGEtdG9vbGJhcj5cblxuICA8ZGl2ICN0YWJsZUJvZHkgY2xhc3M9XCJvLXRhYmxlLWJvZHkgby1zY3JvbGxcIiBbY2xhc3MuaG9yaXpvbnRhbC1zY3JvbGxdPVwiaG9yaXpvbnRhbFNjcm9sbFwiIFtjbGFzcy5zY3JvbGxlZF09XCJob3Jpem9udGFsU2Nyb2xsZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVuYWJsZWRWaXJ0dWFsU2Nyb2xsOyBlbHNlIHRhYmxlV2l0aFZpcnR1YWxTY3JvbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXRhYmxlLW92ZXJmbG93IG8tc2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVXaXRoVmlydHVhbFNjcm9sbD5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgI3ZpcnR1YWxTY3JvbGxWaWV3UG9ydCBmeEZsZXg+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8IS0tVEFCTEUgUEFHSU5BVE9SLS0+XG4gIDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hdG9yICYmIChzaG93TG9hZGluZyB8IGFzeW5jKT09PWZhbHNlXCIgI21hdHBhZ2luYXRvciBbbGVuZ3RoXT1cImRhdGFTb3VyY2U/LnJlc3VsdHNMZW5ndGhcIiBbcGFnZUluZGV4XT1cInBhZ2luYXRvci5wYWdlSW5kZXhcIiBbcGFnZVNpemVdPVwicXVlcnlSb3dzXCJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2luYXRvci5wYWdlU2l6ZU9wdGlvbnNcIiAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJwYWdpbmF0b3Iuc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcIj5cbiAgPC9tYXQtcGFnaW5hdG9yPlxuXG4gIDwhLS1MT0FESU5HLS0+XG4gIDxkaXYgI3NwaW5uZXJDb250YWluZXIgKm5nSWY9XCJzaG93TG9hZGluZyB8IGFzeW5jXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIFtuZ1N0eWxlXT1cInsndG9wLnB4JzogaGVhZGVySGVpZ2h0fVwiXG4gICAgY2xhc3M9XCJzcGlubmVyLWNvbnRhaW5lclwiIFtjbGFzcy5zcGlubmVyLWNvbnRhaW5lci1zY3JvbGxhYmxlXT1cImxvYWRpbmdTY3JvbGwgfCBhc3luY1wiPlxuICAgIDxvLXRhYmxlLXNrZWxldG9uPjwvby10YWJsZS1za2VsZXRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEaXNhYmxlIGJsb2NrZXIgLS0+XG4gIDxkaXYgKm5nSWY9XCIhZW5hYmxlZFwiIGNsYXNzPVwiby10YWJsZS1kaXNhYmxlZC1ibG9ja2VyXCI+PC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0YWJsZT5cblxuICA8dGFibGUgKm5nSWY9XCIoc2hvd0xvYWRpbmcgfCBhc3luYyk9PT1mYWxzZVwiIG1hdC10YWJsZSAjdGFibGUgW2NsYXNzLmF1dG9hZGp1c3RlZF09XCJhdXRvQWRqdXN0XCIgW3RyYWNrQnldPVwiZ2V0VHJhY2tCeUZ1bmN0aW9uKClcIiBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgb01hdFNvcnRcbiAgICBbb01hdFNvcnRDb2x1bW5zXT1cInNvcnRDb2xBcnJheVwiIFtuZ0NsYXNzXT1cInJvd0hlaWdodE9ic2VydmFibGUgfCBhc3luY1wiIChjZGtPYnNlcnZlQ29udGVudCk9XCJwcm9qZWN0Q29udGVudENoYW5nZWQoKVwiXG4gICAgW29UYWJsZUV4cGFuZGVkRm9vdGVyXT1cIiEobG9hZGluZyB8IGFzeW5jKVwiIFtvVGFibGVFeHBhbmRlZEZvb3RlckNvbHNwYW5dPVwidmlzaWJsZUNvbEFycmF5Lmxlbmd0aFwiIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPVwic2hvd0V4cGFuZGFibGVSb3coKVwiXG4gICAgYXJpYS1kZXNjcmliZWRieT1cIm9udGltaXplLXdlYiB0YWJsZVwiPlxuXG4gICAgPCEtLUNoZWNrYm94IENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubmFtZVwiICpuZ0lmPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZUNvbHVtblNlbGVjdEFsbENvbnRlbnRDaGlsZDsgZWxzZSBjdXN0b21IZWFkZXJTZWxlY3RBbGxUZW1wbGF0ZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCIgKm5nSWY9XCJpc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpXCI+XG4gICAgICAgICAgICA8by10YWJsZS1oZWFkZXItc2VsZWN0LWFsbCBbY29sdW1uXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uXCI+PC9vLXRhYmxlLWhlYWRlci1zZWxlY3QtYWxsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCBuYW1lPVwiaWRbXVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlQ2hlY2tib3gocm93KVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdGlvbkNoZWNrYm94VG9nZ2xlKCRldmVudCwgcm93KVwiIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUhlYWRlclNlbGVjdEFsbFRlbXBsYXRlPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzcy5yZXNpemFibGVdPVwicmVzaXphYmxlXCIgY2xhc3M9XCJtYXQtaGVhZGVyLXNlbGVjdC1hbGwtd2l0aC10aXRsZSBvLWNlbnRlclwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLndpZHRoXCIgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbilcIlxuICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubWF4V2lkdGhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgPG8tdGFibGUtaGVhZGVyLXNlbGVjdC1hbGwgW2NvbHVtbl09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtblwiPjwvby10YWJsZS1oZWFkZXItc2VsZWN0LWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiby1jZW50ZXJcIiBbc3R5bGUud2lkdGhdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4ob1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5tYXhXaWR0aFwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggbmFtZT1cImlkW11cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUNoZWNrYm94KHJvdylcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3Rpb25DaGVja2JveFRvZ2dsZSgkZXZlbnQsIHJvdylcIiBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cblxuICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLUV4cGFuZGFibGUgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJvVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4ubmFtZVwiICpuZ0lmPVwiaXNDb2x1bW5FeHBhbmRhYmxlKClcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgIHt7IG9UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbi50aXRsZSB9fVxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7bGV0IHJvd0luZGV4ID0gZGF0YUluZGV4XCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNob3dFeHBhbmRhYmxlSWNvbihyb3csIHJvd0luZGV4KSB8IGFzeW5jXCIgKGNsaWNrKT1cInRvb2dsZVJvd0V4cGFuZGFibGUocm93LCByb3dJbmRleCwgJGV2ZW50KVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0V4cGFuZGVkKHJvdylcIj57eyB0YWJsZVJvd0V4cGFuZGFibGUuaWNvbkNvbGxhcHNlIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0V4cGFuZGVkKHJvdylcIj57eyB0YWJsZVJvd0V4cGFuZGFibGUuaWNvbkV4cGFuZCB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gR2VuZXJpYyBjb2x1bW4gZGVmaW5pdGlvbiAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygb1RhYmxlT3B0aW9ucy5jb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiPlxuICAgICAgPCEtLURlZmluZSBoZWFkZXItY2VsbC0tPlxuXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImdldFRpdGxlQWxpZ25DbGFzcyhjb2x1bW4pXCIgW2NsYXNzLnJlc2l6YWJsZV09XCJyZXNpemFibGVcIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihjb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgIDxvLXRhYmxlLWhlYWRlciBbY29sdW1uXT1cImNvbHVtblwiPjwvby10YWJsZS1oZWFkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90aD5cblxuXG4gICAgICA8IS0tRGVmaW5lIG1hdC1jZWxsLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYmxlLm11bHRpVGVtcGxhdGVEYXRhUm93czsgZWxzZSBjZWxsVGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3NcIj5cbiAgICAgICAgPHRkICNjZWxsIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXggPSBpbmRleCBcIiBbbmdDbGFzc109XCJbY29sdW1uLmNsYXNzTmFtZSwgZ2V0Q2VsbEFsaWduQ2xhc3MoY29sdW1uKV1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljayhyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNlbGwsICRldmVudClcIiAoZGJsY2xpY2spPVwiaGFuZGxlRG91YmxlQ2xpY2socm93LCBjb2x1bW4sIHJvd0luZGV4LCBjZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICBbY2xhc3MuZW1wdHktY2VsbF09XCJpc0VtcHR5KHJvd1tjb2x1bW4ubmFtZV0pXCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhY29sdW1uLmhhc1Rvb2x0aXAoKVwiIFttYXRUb29sdGlwXT1cImNvbHVtbi5nZXRUb29sdGlwKHJvdylcIlxuICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjc1MFwiIG1hdFRvb2x0aXBDbGFzcz1cIm8tdGFibGUtY2VsbC10b29sdGlwXCJcbiAgICAgICAgICBbY2xhc3Muby1tYXQtY2VsbC1tdWx0aWxpbmVdPVwiKGNvbHVtbi5pc011bHRpbGluZSB8IGFzeW5jKVwiIFtvQ29udGV4dE1lbnVdPVwidGFibGVDb250ZXh0TWVudVwiXG4gICAgICAgICAgW29Db250ZXh0TWVudURhdGFdPVwieyBjZWxsTmFtZTpjb2x1bW4ubmFtZSwgcm93VmFsdWU6cm93LCByb3dJbmRleDpyb3dJbmRleH1cIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImdldE1pbldpZHRoQ29sdW1uKGNvbHVtbilcIiBbc3R5bGUubWF4LXdpZHRoXT1cImNvbHVtbi5tYXhXaWR0aFwiXG4gICAgICAgICAgW2NsYXNzLm8tdGFibGUtZWRpdGluZy1jZWxsXT1cImlzUm93U2VsZWN0ZWQocm93KSAmJiBjb2x1bW4uZWRpdGluZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsUmVuZGVyZXI7Y29udGV4dDp7Y29sdW1uOmNvbHVtbixyb3c6cm93fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2NlbGxUZW1wbGF0ZU11bHRpVGVtcGxhdGVEYXRhUm93cz5cbiAgICAgICAgPHRkICNjZWxsIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXggPSBkYXRhSW5kZXggXCIgW25nQ2xhc3NdPVwiW2NvbHVtbi5jbGFzc05hbWUsIGdldENlbGxBbGlnbkNsYXNzKGNvbHVtbildXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2socm93LCBjb2x1bW4sIHJvd0luZGV4LCBjZWxsLCAkZXZlbnQpXCIgKGRibGNsaWNrKT1cImhhbmRsZURvdWJsZUNsaWNrKHJvdywgY29sdW1uLCByb3dJbmRleCwgY2VsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgW2NsYXNzLmVtcHR5LWNlbGxdPVwiaXNFbXB0eShyb3dbY29sdW1uLm5hbWVdKVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIWNvbHVtbi5oYXNUb29sdGlwKClcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uZ2V0VG9vbHRpcChyb3cpXCJcbiAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI3NTBcIiBtYXRUb29sdGlwQ2xhc3M9XCJvLXRhYmxlLWNlbGwtdG9vbHRpcFwiXG4gICAgICAgICAgW2NsYXNzLm8tbWF0LWNlbGwtbXVsdGlsaW5lXT1cIihjb2x1bW4uaXNNdWx0aWxpbmUgfCBhc3luYylcIiBbb0NvbnRleHRNZW51XT1cInRhYmxlQ29udGV4dE1lbnVcIlxuICAgICAgICAgIFtvQ29udGV4dE1lbnVEYXRhXT1cInsgY2VsbE5hbWU6Y29sdW1uLm5hbWUsIHJvd1ZhbHVlOnJvdywgcm93SW5kZXg6cm93SW5kZXh9XCIgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihjb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5vLXRhYmxlLWVkaXRpbmctY2VsbF09XCJpc1Jvd1NlbGVjdGVkKHJvdykgJiYgY29sdW1uLmVkaXRpbmdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFJlbmRlcmVyO2NvbnRleHQ6e2NvbHVtbjpjb2x1bW4scm93OnJvd31cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwhLS1EZWZpbmUgbWF0LWZvb3Rlci1jZWxsLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFscyB8IGFzeW5jXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW25nQ2xhc3NdPVwiY29sdW1uLmNsYXNzTmFtZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiICpuZ0lmPVwiY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLnRpdGxlXCI+XG4gICAgICAgICAgICB7eyBjb2x1bW4uYWdncmVnYXRlLnRpdGxlIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLnJlbmRlcmVyXCI+XG4gICAgICAgICAgICB7eyBkYXRhU291cmNlLmdldEFnZ3JlZ2F0ZURhdGEoY29sdW1uKSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbHVtbi5yZW5kZXJlciAmJiBjb2x1bW4uYWdncmVnYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLnJlbmRlcmVyLnRlbXBsYXRlcmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y2VsbHZhbHVlOiBkYXRhU291cmNlLmdldEFnZ3JlZ2F0ZURhdGEoY29sdW1uKX1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRXhwYW5kZWQgQ29udGVudCBDb2x1bW4gLSBUaGUgZGV0YWlsIHJvdyBpcyBtYWRlIHVwIG9mIHRoaXMgb25lIGNvbHVtbiB0aGF0IHNwYW5zIGFjcm9zcyBhbGwgY29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXhwYW5kZWRSb3dcIj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXg9IGRhdGFJbmRleFwiIFthdHRyLmNvbHNwYW5dPVwib1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5sZW5ndGhcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImdldEV4cGFuZGVkUm93Q29udGFpbmVyQ2xhc3Mocm93SW5kZXgpXCIgW0BkZXRhaWxFeHBhbmRdPVwiZ2V0U3RhdGVFeHBhbmQocm93KVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tRk9PVEVSLUlOU0VSVEFCTEUtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0xhc3RJbnNlcnRhYmxlUm93ICYmIG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5uYW1lICsgZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpXCIgKm5nSWY9XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBvVGFibGVPcHRpb25zLmNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lKyBnZXRTdWZmaXhDb2x1bW5JbnNlcnRhYmxlKClcIj5cblxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiAhb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImluc2VydGFibGUtZm9ybS1maWVsZCBvLXRhYmxlLWNlbGwtZWRpdG9yLXRleHQgby10YWJsZS1jZWxsLWVkaXRvclwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0UGxhY2Vob2xkZXIoY29sdW1uKVwiIFtpZF09XCJjb2x1bW4uYXR0clwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0Q29udHJvbChjb2x1bW4pXCIgW3JlcXVpcmVkXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5SZXF1aXJlZChjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uSGFzRXJyb3IoY29sdW1uLCAncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uUkVRVUlSRUQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnVzZUNlbGxFZGl0b3IoY29sdW1uKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uRWRpdG9yc1tjb2x1bW4uYXR0cl0udGVtcGxhdGVyZWZcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3d2YWx1ZTogb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5yb3dEYXRhIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGaXJzdEluc2VydGFibGVSb3cgJiYgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImdldENvbHVtbkluc2VydGFibGUob1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubmFtZSlcIiAqbmdJZj1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcIj5cbiAgICAgICAgPHRkIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG9UYWJsZU9wdGlvbnMuY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiZ2V0Q29sdW1uSW5zZXJ0YWJsZShjb2x1bW4ubmFtZSlcIj5cblxuICAgICAgICA8dGQgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiAhb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImluc2VydGFibGUtZm9ybS1maWVsZFwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0UGxhY2Vob2xkZXIoY29sdW1uKVwiIFtpZF09XCJjb2x1bW4uYXR0clwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0Q29udHJvbChjb2x1bW4pXCIgW3JlcXVpcmVkXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5SZXF1aXJlZChjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uSGFzRXJyb3IoY29sdW1uLCAncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uUkVRVUlSRUQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnVzZUNlbGxFZGl0b3IoY29sdW1uKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uRWRpdG9yc1tjb2x1bW4uYXR0cl0udGVtcGxhdGVyZWZcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3d2YWx1ZTogb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5yb3dEYXRhIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBEZWZpbml0aW9uIGNvbHVtbiBncm91cCBoZWFkZXIgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdyb3VwaW5nSGVhZGVyc1Jvd3M7IGxldCBpID0gaW5kZXhcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblwiPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGdyb3VwXCIgY2xhc3M9XCJncm91cGluZy1yb3dcIiBbb0NvbnRleHRNZW51XT1cInRhYmxlQ29udGV4dE1lbnVcIlxuICAgICAgICBbb0NvbnRleHRNZW51RGF0YV09XCJ7IGNlbGxOYW1lOmNvbHVtbiwgcm93VmFsdWU6Z3JvdXAsIHJvd0luZGV4Oml9XCIgW25nQ2xhc3NdPVwiZ2V0R3JvdXBIZWFkZXJDZWxsQWxpZ25DbGFzcyhjb2x1bW4pXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpPT09MFwiIGNsYXNzPVwiZ3JvdXBpbmctdGl0bGUtd3JhcHBlclwiIFtuZ1N0eWxlXT1cInsncGFkZGluZy1sZWZ0JzogMjAqKGdyb3VwLmxldmVsLTEpKydweCd9XCI+XG4gICAgICAgICAgPG1hdC1pY29uPnt7IGdyb3VwLmV4cGFuZGVkID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fTwvbWF0LWljb24+XG4gICAgICAgICAge3sgZ3JvdXAudGl0bGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cGluZy1hZ2dyZWdhdGVcIiAqbmdJZj1cImdyb3VwLmhhc0FjdGl2ZUFnZ3JlZ2F0ZSh2aXNpYmxlQ29sQXJyYXlbaV0pXCI+XG4gICAgICAgICAge3sgZ3JvdXAuZ2V0Q29sdW1uQWN0aXZlQWdncmVnYXRlVGl0bGUodmlzaWJsZUNvbEFycmF5W2ldKSB8IG9UcmFuc2xhdGUgfX0gOlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihjb2x1bW4pLnJlbmRlcmVyXCI+XG4gICAgICAgICAgICB7eyBncm91cC5nZXRDb2x1bW5BZ2dyZWdhdGVWYWx1ZSh2aXNpYmxlQ29sQXJyYXlbaV0pfX1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihjb2x1bW4pLnJlbmRlcmVyXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRPQ29sdW1uRnJvbUdyb3VwSGVhZGVyQ29sdW1uKGNvbHVtbikucmVuZGVyZXI/LnRlbXBsYXRlcmVmOyBjb250ZXh0OnsgY2VsbHZhbHVlOiAgZ3JvdXAuZ2V0Q29sdW1uQWdncmVnYXRlVmFsdWUodmlzaWJsZUNvbEFycmF5W2ldKSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInBvc2l0aW9uXCI+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+IHt7cm93fX0gPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ciAjdGFibGVIZWFkZXIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIm9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHN0aWNreTogZml4ZWRIZWFkZXJcIj48L3RyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZS5tdWx0aVRlbXBsYXRlRGF0YVJvd3M7IGVsc2Ugcm93VGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3NcIj5cbiAgICAgIDx0ciBtYXQtcm93IG9UYWJsZVJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uczsgd2hlbjppc05vdEdyb3VwOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIiBbbmdDbGFzc109XCJyb3cgfCBvVGFibGVSb3dDbGFzczogcm93SW5kZXg6IHJvd0NsYXNzXCI+XG4gICAgICA8L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjcm93VGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3M+XG4gICAgICA8dHIgbWF0LXJvdyBvVGFibGVSb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IG9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHdoZW46aXNOb3RHcm91cDsgbGV0IHJvd0luZGV4ID0gZGF0YUluZGV4XCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiIFtuZ0NsYXNzXT1cInJvdyB8IG9UYWJsZVJvd0NsYXNzOiByb3dJbmRleDogcm93Q2xhc3NcIj5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gUm93IEdyb3VwIGhlYWRlciAtLT5cbiAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZ3JvdXBpbmdIZWFkZXJzUm93czsgd2hlbjppc0dyb3VwXCIgKGNsaWNrKT1cImdyb3VwSGVhZGVyQ2xpY2socm93KVwiXG4gICAgICBbbmdDbGFzc109XCJnZXRDbGFzc05hbWVHcm91cEhlYWRlcihyb3cpXCI+XG4gICAgPC90cj5cblxuICAgIDwhLS0gRXhwYW5kZWQgZGV0YWlsIHJvdy0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNFeHBhbmRlZFJvd1wiPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiIGNsYXNzPVwiby10YWJsZS1yb3ctZXhwYW5kZWRcIj48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dMYXN0SW5zZXJ0YWJsZVJvd1wiPlxuICAgICAgPHRyIG1hdC1mb290ZXItcm93ICptYXRGb290ZXJSb3dEZWY9XCJvVGFibGVPcHRpb25zLmNvbHVtbnNJbnNlcnRhYmxlczsgc3RpY2t5OiB0cnVlXCJcbiAgICAgICAgKGtleXVwKT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaGFuZGxlS2V5Ym9hcmRFdmVudCgkZXZlbnQpXCIgY2xhc3M9XCJvLXRhYmxlLWluc2VydGFibGVcIj48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Rmlyc3RJbnNlcnRhYmxlUm93XCI+XG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIm9UYWJsZU9wdGlvbnMuY29sdW1uc0luc2VydGFibGVzOyBzdGlja3k6IHRydWVcIlxuICAgICAgICAoa2V5dXApPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5oYW5kbGVLZXlib2FyZEV2ZW50KCRldmVudClcIiBjbGFzcz1cIm8tdGFibGUtaW5zZXJ0YWJsZVwiPiA8L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxzIHwgYXN5bmNcIj5cbiAgICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwib1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uczsgc3RpY2t5OiB0cnVlXCIgY2xhc3M9XCJvLXRhYmxlLWFnZ3JlZ2F0ZVwiPlxuICAgICAgPC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC90YWJsZT5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZXh0TWVudUNvbnRlbnRDaGlsZCAmJiBjb250ZXh0TWVudVwiPlxuICA8by10YWJsZS1jb250ZXh0LW1lbnUgW2luc2VydF09XCJpbnNlcnRCdXR0b25cIiBbZWRpdF09XCJlZGl0aW9uTW9kZSAhPT0gRURJVF9NT0RFX05PTkVcIiBbdmlldy1kZXRhaWxdPVwiZGV0YWlsTW9kZSAhPT0gREVUQUlMX01PREVfTk9ORVwiXG4gICAgW3JlZnJlc2hdPVwicmVmcmVzaEJ1dHRvblwiIFtkZWxldGVdPVwiZGVsZXRlQnV0dG9uXCIgW2ZpbHRlcl09XCJzaG93RmlsdGVyT3B0aW9uXCIgW2dyb3VwLWJ5LXJvd109XCJncm91cGFibGVcIj5cbiAgPC9vLXRhYmxlLWNvbnRleHQtbWVudT5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2NlbGxSZW5kZXJlciBsZXQtcm93PVwicm93XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uLnJlbmRlcmVyICE9IG51bGwgJiYgKCFjb2x1bW4uZWRpdGluZyB8fCBjb2x1bW4uZWRpdGluZyAmJiAhaXNSb3dTZWxlY3RlZChyb3cpKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4ucmVuZGVyZXI/LnRlbXBsYXRlcmVmOyBjb250ZXh0OnsgY2VsbHZhbHVlOiByb3dbY29sdW1uLm5hbWVdLCByb3d2YWx1ZTpyb3cgfVwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc1Jvd1NlbGVjdGVkKHJvdykgJiYgY29sdW1uLmVkaXRpbmdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLmVkaXRvcj8udGVtcGxhdGVyZWY7IGNvbnRleHQ6eyBjZWxsdmFsdWU6IHJvd1tjb2x1bW4ubmFtZV0sIHJvd3ZhbHVlOnJvdyB9XCI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uLnR5cGUgPT09ICdlZGl0QnV0dG9uSW5Sb3cnIHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsQnV0dG9uSW5Sb3cnXCI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cIm8tYWN0aW9uLWNlbGwtcmVuZGVyZXJcIiAoY2xpY2spPVwib25EZXRhaWxCdXR0b25DbGljayhjb2x1bW4sIHJvdywgJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57eyBnZXREZXRhaWxCdXR0b25JY29uKGNvbHVtbikgfX08L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0Pnt7IHJvd1tjb2x1bW4ubmFtZV0gfX08L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
2779
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9vLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL28tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBR0wsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBR04sUUFBUSxFQUNSLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFN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QUFZO3NCQURYLGVBQWU7dUJBQUMscUJBQXFCO2dCQUl0Qyx1QkFBdUI7c0JBRHRCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUtyRCxrQkFBa0I7c0JBRGpCLGVBQWU7dUJBQUMsMkJBQTJCO2dCQUk1QyxnQ0FBZ0M7c0JBRC9CLFlBQVk7dUJBQUMsOEJBQThCO2dCQU81QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBK0JqQyx1QkFBdUI7c0JBRHRCLFlBQVk7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU0xRCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uQ2hhbmdlLCBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IERvbVBvcnRhbE91dGxldCwgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCwgVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBWaWV3UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0TWVudSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEJvb2xlYW5Db252ZXJ0ZXIsIEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLCBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFLCBPbnRpbWl6ZVNlcnZpY2VQcm92aWRlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZhY3Rvcmllcyc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zbmFja2Jhci5zZXJ2aWNlJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3MgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLXRhYmxlLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZS9vLXRhYmxlLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Db2x1bW5EaXNwbGF5LCBPRmlsdGVyRGVmaW5pdGlvbiwgT0dyb3VwZWRDb2x1bW5UeXBlcywgT1RhYmxlR2xvYmFsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4uLy4uL3R5cGVzL2V4cHJlc3Npb24udHlwZSc7XG5pbXBvcnQgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9vLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgT1F1ZXJ5RGF0YUFyZ3MgfSBmcm9tICcuLi8uLi90eXBlcy9xdWVyeS1kYXRhLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBRdWlja0ZpbHRlckZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvcXVpY2stZmlsdGVyLWZ1bmN0aW9uLnR5cGUnO1xuaW1wb3J0IHsgU1FMT3JkZXIgfSBmcm9tICcuLi8uLi90eXBlcy9zcWwtb3JkZXIudHlwZSc7XG5pbXBvcnQgeyBPQ29sdW1uQWdncmVnYXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tYWdncmVnYXRlLnR5cGUnO1xuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHsgVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdCB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLnR5cGUnO1xuaW1wb3J0IHsgT1RhYmxlSW5pdGlhbGl6YXRpb25PcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1pbml0aWFsaXphdGlvbi1vcHRpb25zLnR5cGUnO1xuaW1wb3J0IHsgT1RhYmxlTWVudVBlcm1pc3Npb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1tZW51LXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgT1RhYmxlUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVdyYXBwZXIgfSBmcm9tICcuLi8uLi91dGlsL2FzeW5jJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL2ZpbHRlci1leHByZXNzaW9uLnV0aWxzJztcbmltcG9ydCB7IFBlcm1pc3Npb25zVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvc2VydmljZS51dGlscyc7XG5pbXBvcnQgeyBTUUxUeXBlcyB9IGZyb20gJy4uLy4uL3V0aWwvc3FsdHlwZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9jb250ZXh0bWVudS9vLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuLi9mb3JtL28tZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudCB9IGZyb20gJy4uL28tc2VydmljZS1jb21wb25lbnQuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uQ2FsY3VsYXRlZENvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uL2NhbGN1bGF0ZWQvby10YWJsZS1jb2x1bW4tY2FsY3VsYXRlZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Jhc2VUYWJsZUNlbGxSZW5kZXJlciB9IGZyb20gJy4vY29sdW1uL2NlbGwtcmVuZGVyZXIvby1iYXNlLXRhYmxlLWNlbGwtcmVuZGVyZXIuY2xhc3MnO1xuaW1wb3J0IHsgT0NvbHVtbiB9IGZyb20gJy4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uL28tdGFibGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVFeHBvcnRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHsgT1RhYmxlQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvY29udGV4dG1lbnUvby10YWJsZS1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IERlZmF1bHRPVGFibGVPcHRpb25zIH0gZnJvbSAnLi9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS1vcHRpb25zLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9kaWFsb2cvZmlsdGVyLWJ5LWNvbHVtbi9vLXRhYmxlLWZpbHRlci1ieS1jb2x1bW4tZGF0YS1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE9CYXNlVGFibGVQYWdpbmF0b3IgfSBmcm9tICcuL2V4dGVuc2lvbnMvZm9vdGVyL3BhZ2luYXRvci9vLWJhc2UtdGFibGUtcGFnaW5hdG9yLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtYnV0dG9uL28tdGFibGUtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmUgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbi1zZWxlY3QtYWxsL28tdGFibGUtY29sdW1uLXNlbGVjdC1hbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9GaWx0ZXJDb2x1bW4gfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbnMtZmlsdGVyL2NvbHVtbnMvby10YWJsZS1jb2x1bW5zLWZpbHRlci1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWNvbHVtbnMtZmlsdGVyL28tdGFibGUtY29sdW1ucy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1ucy1ncm91cGluZy9jb2x1bW5zL28tdGFibGUtY29sdW1ucy1ncm91cGluZy1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtaGVhZGVyL28tdGFibGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1pbnNlcnRhYmxlLXJvdy9vLXRhYmxlLWluc2VydGFibGUtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVPcHRpb25Db21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW9wdGlvbi9vLXRhYmxlLW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlRGF0YVNvdXJjZVNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS1kYXRhc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnLi9leHRlbnNpb25zL28tdGFibGUtc3RyYXRlZ3kuc2VydmljZSc7XG5pbXBvcnQgeyBPVGFibGVEYW8gfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS5kYW8nO1xuaW1wb3J0IHsgT1RhYmxlR3JvdXBlZFJvdyB9IGZyb20gJy4vZXh0ZW5zaW9ucy9yb3cvby10YWJsZS1yb3ctZ3JvdXAuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlUm93RXhwYW5kYWJsZUNvbXBvbmVudCwgT1RhYmxlUm93RXhwYW5kZWRDaGFuZ2UgfSBmcm9tICcuL2V4dGVuc2lvbnMvcm93L3RhYmxlLXJvdy1leHBhbmRhYmxlL28tdGFibGUtcm93LWV4cGFuZGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9NYXRTb3J0IH0gZnJvbSAnLi9leHRlbnNpb25zL3NvcnQvby1tYXQtc29ydCc7XG5pbXBvcnQgeyBPVGFibGVCYXNlIH0gZnJvbSAnLi9vLXRhYmxlLWJhc2UuY2xhc3MnO1xuaW1wb3J0IHsgT19UQUJMRV9HTE9CQUxfQ09ORklHIH0gZnJvbSAnLi91dGlscy9vLXRhYmxlLnRva2Vucyc7XG5cbmltcG9ydCB0eXBlIHsgSU9Db250ZXh0TWVudUNvbnRleHQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tY29udGV4dC1tZW51LmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZUJ1dHRvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1idXR0b24uaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQnV0dG9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1idXR0b25zLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZUNvbHVtbnNHcm91cGluZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1jb2x1bW5zLWdyb3VwaW5nLWludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtZGF0YXNvdXJjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVNZW51IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZVBhZ2luYXRvciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1wYWdpbmF0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlUXVpY2tmaWx0ZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtcXVpY2tmaWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRSA9IFtcbiAgLy8gdmlzaWJsZS1jb2x1bW5zIFtzdHJpbmddOiB2aXNpYmxlIGNvbHVtbnMsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAndmlzaWJsZUNvbHVtbnM6IHZpc2libGUtY29sdW1ucycsXG5cbiAgLy8gdmlzaWJsZS1jb2x1bW5zLWJ5LWRlZmF1bHQgW3N0cmluZ106IGNvbHVtbnMgdGhhdCBhcmUgdmlzaWJsZSBieSBkZWZhdWx0LCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2RlZmF1bHRWaXNpYmxlQ29sdW1uczogZGVmYXVsdC12aXNpYmxlLWNvbHVtbnMnLFxuXG4gIC8vIGVkaXRhYmxlLWNvbHVtbnMgW3N0cmluZ106IGNvbHVtbnMgdGhhdCBjYW4gYmUgZWRpdGVkIGRpcmVjdGx5IG92ZXIgdGhlIHRhYmxlLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgLy8gJ2VkaXRhYmxlQ29sdW1uczogZWRpdGFibGUtY29sdW1ucycsXG5cbiAgLy8gc29ydC1jb2x1bW5zIFtzdHJpbmddOiBpbml0aWFsIHNvcnRpbmcsIHdpdGggdGhlIGZvcm1hdCBjb2x1bW46W0FTQ3xERVNDXSwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdzb3J0Q29sdW1uczogc29ydC1jb2x1bW5zJyxcblxuICAncXVpY2tGaWx0ZXJDYWxsYmFjazogcXVpY2stZmlsdGVyLWZ1bmN0aW9uJyxcblxuICAvLyBkZWxldGUtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGRlbGV0ZSBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2RlbGV0ZUJ1dHRvbjogZGVsZXRlLWJ1dHRvbicsXG5cbiAgLy8gcmVmcmVzaC1idXR0b24gW25vfHllc106IHNob3cgcmVmcmVzaCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ3JlZnJlc2hCdXR0b246IHJlZnJlc2gtYnV0dG9uJyxcblxuICAvLyBjb2x1bW5zLXZpc2liaWxpdHktYnV0dG9uIFtub3x5ZXNdOiBzaG93IGNvbHVtbnMgdmlzaWJpbGl0eSBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2NvbHVtbnNWaXNpYmlsaXR5QnV0dG9uOiBjb2x1bW5zLXZpc2liaWxpdHktYnV0dG9uJyxcblxuICAvLyAvLyBjb2x1bW5zLXJlc2l6ZS1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyByZXNpemUgYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gIC8vICdjb2x1bW5zUmVzaXplQnV0dG9uOiBjb2x1bW5zLXJlc2l6ZS1idXR0b24nLFxuXG4gIC8vIC8vIGNvbHVtbnMtZ3JvdXAtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGNvbHVtbnMgZ3JvdXAgYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gIC8vICdjb2x1bW5zR3JvdXBCdXR0b246IGNvbHVtbnMtZ3JvdXAtYnV0dG9uJyxcblxuICAvLyBleHBvcnQtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGV4cG9ydCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2V4cG9ydEJ1dHRvbjogZXhwb3J0LWJ1dHRvbicsXG5cbiAgLy8gc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGNvbmZpZ3VyYXRpb24gYnV0dG9uIGluIGhlYWRlci4gRGVmYXVsdDogeWVzLlxuICAnc2hvd0NvbmZpZ3VyYXRpb25PcHRpb246IHNob3ctY29uZmlndXJhdGlvbi1vcHRpb24nLFxuXG4gIC8vIHNob3ctYnV0dG9ucy10ZXh0IFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgdGV4dCBvZiBoZWFkZXIgYnV0dG9ucy4gRGVmYXVsdDogeWVzLlxuICAnc2hvd0J1dHRvbnNUZXh0OiBzaG93LWJ1dHRvbnMtdGV4dCcsXG5cbiAgLy8gc2VsZWN0LWFsbC1jaGVja2JveCBbeWVzfG5vfHRydWV8ZmFsc2VdOiAgc2hvdyBpbiB0aGUgbWVudSB0aGUgb3B0aW9uIG9mIHNlbGVjdGlvbiBjaGVjayBib3hlcyAuIERlZmF1bHQ6IG5vLlxuICAnc2VsZWN0QWxsQ2hlY2tib3g6IHNlbGVjdC1hbGwtY2hlY2tib3gnLFxuXG4gIC8vIHBhZ2luYXRpb24tY29udHJvbHMgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBwYWdpbmF0aW9uIGNvbnRyb2xzLiBEZWZhdWx0OiB5ZXMuXG4gICdwYWdpbmF0aW9uQ29udHJvbHM6IHBhZ2luYXRpb24tY29udHJvbHMnLFxuXG4gIC8vIGZpeC1oZWFkZXIgW3llc3xub3x0cnVlfGZhbHNlXTogZml4ZWQgaGVhZGVyIGFuZCBmb290ZXIgd2hlbiB0aGUgY29udGVudCBpcyBncmVhdGhlciB0aGFuIGl0cyBvd24gaGVpZ2h0LiBEZWZhdWx0OiB5ZXMuXG4gICdmaXhlZEhlYWRlcjogZml4ZWQtaGVhZGVyJyxcblxuICAvLyBzaG93LXRpdGxlIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgdGhlIHRhYmxlIHRpdGxlLiBEZWZhdWx0OiBuby5cbiAgJ3Nob3dUaXRsZTogc2hvdy10aXRsZScsXG5cbiAgLy8gZWRpdGlvbi1tb2RlIFtub25lIHwgaW5saW5lIHwgY2xpY2sgfCBkYmxjbGlja106IGVkaXRpb24gbW9kZS4gRGVmYXVsdCBub25lXG4gICdlZGl0aW9uTW9kZTogZWRpdGlvbi1tb2RlJyxcblxuICAvLyBzZWxlY3Rpb24tbW9kZSBbbm9uZSB8IHNpbXBsZSB8IG11bHRpcGxlIF06IHNlbGVjdGlvbiBtb2RlLiBEZWZhdWx0IG11bHRpcGxlXG4gICdzZWxlY3Rpb25Nb2RlOiBzZWxlY3Rpb24tbW9kZScsXG5cbiAgJ2hvcml6b250YWxTY3JvbGw6IGhvcml6b250YWwtc2Nyb2xsJyxcblxuICAnc2hvd1BhZ2luYXRvckZpcnN0TGFzdEJ1dHRvbnM6IHNob3ctcGFnaW5hdG9yLWZpcnN0LWxhc3QtYnV0dG9ucycsXG5cbiAgJ2F1dG9BbGlnblRpdGxlczogYXV0by1hbGlnbi10aXRsZXMnLFxuXG4gICdtdWx0aXBsZVNvcnQ6IG11bHRpcGxlLXNvcnQnLFxuICAvLyBzZWxlY3QtYWxsLWNoZWNrYm94LXZpc2libGUgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBzZWxlY3Rpb24gY2hlY2sgYm94ZXMuRGVmYXVsdDogbm8uXG4gICdzZWxlY3RBbGxDaGVja2JveFZpc2libGU6IHNlbGVjdC1hbGwtY2hlY2tib3gtdmlzaWJsZScsXG5cbiAgJ29yZGVyYWJsZScsXG5cbiAgJ3Jlc2l6YWJsZScsXG5cbiAgJ2tlZXBTZWxlY3RlZEl0ZW1zOiBrZWVwLXNlbGVjdGVkLWl0ZW1zJyxcblxuICAvLyBleHBvcnQtbW9kZSBbJ3Zpc2libGUnfCdsb2NhbCd8J2FsbCddOiBzZXRzIHRoZSBtb2RlIHRvIGV4cG9ydCBkYXRhLiBEZWZhdWx0OiAndmlzaWJsZSdcbiAgJ2V4cG9ydE1vZGU6IGV4cG9ydC1tb2RlJyxcblxuICAvLyBleHBvcnRTZXJ2aWNlVHlwZSBbIHN0cmluZyBdOiBUaGUgc2VydmljZSB1c2VkIGJ5IHRoZSB0YWJsZSBmb3IgZXhwb3J0aW5nIGl0J3MgZGF0YSwgaXQgbXVzdCBpbXBsZW1lbnQgJ0lFeHBvcnRTZXJ2aWNlJyBpbnRlcmZhY2UuIERlZmF1bHQ6ICdPbnRpbWl6ZUV4cG9ydFNlcnZpY2UnXG4gICdleHBvcnRTZXJ2aWNlVHlwZTogZXhwb3J0LXNlcnZpY2UtdHlwZScsXG5cbiAgLy8gYXV0by1hZGp1c3QgW3RydWV8ZmFsc2VdOiBBdXRvIGFkanVzdCBjb2x1bW4gd2lkdGggdG8gZml0IGl0cyBjb250ZW50LiBEZWZhdWx0OiB0cnVlXG4gICdhdXRvQWRqdXN0OiBhdXRvLWFkanVzdCcsXG5cbiAgLy8gc2hvdy1maWx0ZXItb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgZmlsdGVyIG1lbnUgb3B0aW9uIGluIHRoZSBoZWFkZXIgbWVudS4gRGVmYXVsdDogeWVzLlxuICAnc2hvd0ZpbHRlck9wdGlvbjogc2hvdy1maWx0ZXItb3B0aW9uJyxcblxuICAvLyB2aXNpYmxlLWV4cG9ydC1kaWFsb2ctYnV0dG9ucyBbc3RyaW5nXTogdmlzaWJsZSBidXR0b25zIGluIGV4cG9ydCBkaWFsb2csIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQvbm8gY29uZmlndXJlZDogc2hvdyBhbGwuIEVtcHR5IHZhbHVlOiBoaWRlIGFsbC5cbiAgJ3Zpc2libGVFeHBvcnREaWFsb2dCdXR0b25zOiB2aXNpYmxlLWV4cG9ydC1kaWFsb2ctYnV0dG9ucycsXG5cbiAgLy8gcm93LWNsYXNzIFtmdW5jdGlvbiwgKHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgc3RyaW5nW11dOiBhZGRzIHRoZSBjbGFzcyBvciBjbGFzc2VzIHJldHVybmVkIGJ5IHRoZSBwcm92aWRlZCBmdW5jdGlvbiB0byB0aGUgdGFibGUgcm93cy5cbiAgJ3Jvd0NsYXNzOiByb3ctY2xhc3MnLFxuXG4gIC8vIGZpbHRlci1jb2x1bW4tYWN0aXZlLWJ5LWRlZmF1bHQgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBpY29uIGZpbHRlciBieSBkZWZhdWx0IGluIHRoZSB0YWJsZS4gRGVmYXVsdDp5ZXNcbiAgJ2ZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDpmaWx0ZXItY29sdW1uLWFjdGl2ZS1ieS1kZWZhdWx0JyxcblxuICAvLyBncm91cGVkLWNvbHVtbnMgW3N0cmluZ106IGdyb3VwZWQgY29sdW1ucyBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ2dyb3VwZWRDb2x1bW5zOiBncm91cGVkLWNvbHVtbnMnLFxuXG4gIC8vIGdyb3VwYWJsZVtib29sZWFuXTogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRoZSBjb2x1bW4gY2FuIGJlIGdyb3VwYWJsZS4gQnkgZGVmYXVsdDogdHJ1ZVxuICAnZ3JvdXBhYmxlJyxcblxuICAvLyBleHBhbmQtZ3JvdXBzLXNhbWUtbGV2ZWxbYm9vbGVhbl06IEluZGljYXRlcyBpZiBjbGljayBpbiByb3cgZXhwYW5kcy9jb2xsYXBzZXMgYWxsIHJvd3Mgb24gc2FtZSBsZXZlbC4gQnkgZGVmYXVsdDogdHJ1ZVxuICAnZXhwYW5kR3JvdXBzU2FtZUxldmVsOiBleHBhbmQtZ3JvdXBzLXNhbWUtbGV2ZWwnLFxuXG4gIC8vIGNvbGxhcHNlLWdyb3VwZWQtY29sdW1ucyBbeWVzfG5vfHRydWV8ZmFsc2VdOiBXaGV0aGVyIGNvbGxhcHNlIHRoZSBncm91cGVkIGNvbHVtbnMgYnkgZGVmYXVsdFxuICAnY29sbGFwc2VHcm91cGVkQ29sdW1uczogY29sbGFwc2UtZ3JvdXBlZC1jb2x1bW5zJyxcblxuICAvLyB2aXJ0dWFsLXNjcm9sbCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBXaGV0aGVyIGVuYWJsZWQgb3Igbm90IHRoZSB2aXJ0dWFsIHNjcm9sbFxuICAndmlydHVhbFNjcm9sbDogdmlydHVhbC1zY3JvbGwnLFxuXG4gIC8vY29udGV4dC1tZW51IFt5ZXN8bm98dHJ1ZXxmYWxzZV06IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSB0YWJsZSBjb250ZXh0IG1lbnVcbiAgJ2NvbnRleHRNZW51OiBjb250ZXh0LW1lbnUnLFxuXG4gIC8vIHNob3ctZXhwYW5kYWJsZS1pY29uLWZ1bmN0aW9uIFtmdW5jdGlvbl06IEV4cGFuZGFibGUgZnVuY3Rpb24gdG8gY2hlY2sgaWYgZXhwYW5kYWJsZSBoYXMgZGF0YSB0byBzaG93IG9yIG5vdCBpY29uXG4gICdzaG93RXhwYW5kYWJsZUljb25GdW5jdGlvbjogc2hvdy1leHBhbmRhYmxlLWljb24tZnVuY3Rpb24nLFxuXG4gIC8vIHNob3ctcmVwb3J0LW9uLWRlbWFuZC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyByZXBvcnQgb24gZGVtYW5kIG9wdGlvbiBpbiB0aGUgdGFibGUgbWVudS4gRGVmYXVsdDogeWVzLlxuICAnc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBzaG93LXJlcG9ydC1vbi1kZW1hbmQtb3B0aW9uJyxcblxuICAvLyBzaG93LWNoYXJ0cy1vbi1kZW1hbmQtb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgY2hhcnRzIG9uIGRlbWFuZCBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51XG4gICdzaG93Q2hhcnRzT25EZW1hbmRPcHRpb246IHNob3ctY2hhcnRzLW9uLWRlbWFuZC1vcHRpb24nLFxuXG4gIC8vIHNob3ctcmVzZXQtd2lkdGgtb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgcmVzZXQgd2lkdGggbWVudSBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51XG4gICdzaG93UmVzZXRXaWR0aE9wdGlvbjogc2hvdy1yZXNldC13aWR0aC1vcHRpb24nLFxuXG4gICdkaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb246IGRpc2FibGUtc2VsZWN0aW9uLWZ1bmN0aW9uJyxcblxuICAnbm9uSGlkYWJsZUNvbHVtbnM6IG5vbi1oaWRhYmxlLWNvbHVtbnMnLFxuICAncmVhZE9ubHk6IHJlYWQtb25seScsXG4gICdyZWFkT25seUNvbmZpZ3VyYXRpb246IHJlYWQtb25seS1jb25maWd1cmF0aW9uJyxcbiAgJ3Nob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5OiBzaG93LW5vdGlmaWNhdGlvbi1vZi1yZWFkLW9ubHknXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVEFCTEUgPSBbXG4gICdvblJvd1NlbGVjdGVkJyxcbiAgJ29uUm93RGVzZWxlY3RlZCcsXG4gICdvblJvd0RlbGV0ZWQnXG5dO1xuXG5jb25zdCBzdGlja3lIZWFkZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93IC5tYXQtbWRjLXRhYmxlLXN0aWNreSc7XG5jb25zdCBzdGlja3lGb290ZXJTZWxlY3RvciA9ICcubWF0LW1kYy1mb290ZXItcm93IC5tYXQtbWRjLXRhYmxlLXN0aWNreSc7XG5jb25zdCByb3dTZWxlY3RvciA9ICcubWF0LW1kYy1yb3cnO1xuY29uc3QgaGVhZGVyU2VsZWN0b3IgPSAnLm1hdC1tZGMtaGVhZGVyLXJvdyc7XG5jb25zdCBmb290ZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93JztcblxudHlwZSBEaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb24gPSAoaXRlbTogYW55KSA9PiBib29sZWFuO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIE9udGltaXplU2VydmljZVByb3ZpZGVyLFxuICAgIENvbXBvbmVudFN0YXRlU2VydmljZVByb3ZpZGVyLFxuICAgIE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlLFxuICAgIHsgcHJvdmlkZTogT19DT01QT05FTlRfU1RBVEVfU0VSVklDRSwgdXNlQ2xhc3M6IE9UYWJsZUNvbXBvbmVudFN0YXRlU2VydmljZSB9LFxuICAgIHsgcHJvdmlkZTogVklSVFVBTF9TQ1JPTExfU1RSQVRFR1ksIHVzZUNsYXNzOiBPVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3kgfSxcbiAgICB7IHByb3ZpZGU6IE9UYWJsZUJhc2UsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE9UYWJsZUNvbXBvbmVudCkgfVxuICBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxuICAgIF0pXG4gIF0sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRSxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVEFCTEUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm9udGltaXplLXRhYmxlXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLm8tdGFibGUtZml4ZWRdJzogJ2ZpeGVkSGVhZGVyJyxcbiAgICAnW2NsYXNzLm8tdGFibGUtZGlzYWJsZWRdJzogJyFlbmFibGVkJyxcbiAgICAnKGRvY3VtZW50OmNsaWNrKSc6ICdoYW5kbGVET01DbGljaygkZXZlbnQpJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQ8T1RhYmxlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgcHVibGljIHN0YXRpYyBERUZBVUxUX0JBU0VfU0laRV9TUElOTkVSID0gMTAwO1xuICBwdWJsaWMgc3RhdGljIEZJUlNUX0xBU1RfQ0VMTF9QQURESU5HID0gMjQ7XG4gIHB1YmxpYyBzdGF0aWMgRVhQQU5ERURfUk9XX0NPTlRBSU5FUl9DTEFTUyA9ICdleHBhbmRlZC1yb3ctY29udGFpbmVyLSc7XG4gIHB1YmxpYyBzdGF0aWMgQVZBSUxBQkxFX0dST1VQSU5HX0NPTFVNTlNfUkVOREVSRVJTID0gWydjdXJyZW5jeScsICdpbnRlZ2VyJywgJ3JlYWwnXTtcblxuICBwdWJsaWMgREVUQUlMX01PREVfTk9ORSA9IENvZGVzLkRFVEFJTF9NT0RFX05PTkU7XG4gIHB1YmxpYyBFRElUX01PREVfTk9ORSA9IENvZGVzLkVESVRJT05fTU9ERV9OT05FO1xuXG4gIHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZTtcblxuICBwdWJsaWMgcGFnaW5hdG9yOiBPVGFibGVQYWdpbmF0b3I7XG5cbiAgc29ydDogT01hdFNvcnQ7XG5cbiAgQFZpZXdDaGlsZChPTWF0U29ydClcbiAgc2V0IG9NYXRTb3J0KF9zb3J0OiBPTWF0U29ydCkge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChfc29ydCkgJiZcbiAgICAgICghVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0KSB8fCAoVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0KSAmJiBVdGlsLnN0cmluZ2lmeSh0aGlzLnNvcnQpICE9PSBVdGlsLnN0cmluZ2lmeShfc29ydCkpKSkge1xuICAgICAgdGhpcy5zb3J0ID0gX3NvcnQ7XG4gICAgICB0aGlzLnJlZ2lzdGVyU29ydExpc3RlbmVyKCk7XG4gICAgICB0aGlzLnNldERhdGFzb3VyY2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcHVibGljIHZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHB1YmxpYyBvVGFibGVHbG9iYWxDb25maWc6IE9UYWJsZUdsb2JhbENvbmZpZztcbiAgQFZpZXdDaGlsZCgndmlydHVhbFNjcm9sbFZpZXdQb3J0Jykgc2V0IGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCh2YWx1ZTogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgaWYgKHZhbHVlICE9IHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVIZWFkZXJBbmRGb290ZXJTdGlja3lQb3NpdGlvbnMoKTtcbiAgICAgIGlmICh0aGlzLmNoZWNrVmlld3BvcnRTaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24gPSB0aGlzLmNoZWNrVmlld1BvcnRTdWJqZWN0LnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICBpZiAoeCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gb25seSBmb3IgaW5zaWRlVGFiQnVnV29ya2Fyb3VuZFxuICBwcm90ZWN0ZWQgdGFibGVIZWFkZXJzOiBBcnJheTxPVGFibGVIZWFkZXJDb21wb25lbnQ+ID0gW107XG5cbiAgQFZpZXdDaGlsZCgnc3Bpbm5lckNvbnRhaW5lcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBzcGlubmVyQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIEBDb250ZW50Q2hpbGQoT1RhYmxlUm93RXhwYW5kYWJsZUNvbXBvbmVudClcbiAgdGFibGVSb3dFeHBhbmRhYmxlOiBPVGFibGVSb3dFeHBhbmRhYmxlQ29tcG9uZW50O1xuXG4gIF9maWx0ZXJDb2x1bW5zOiBBcnJheTxPRmlsdGVyQ29sdW1uPjtcbiAgcG9ydGFsSG9zdDogQXJyYXk8RG9tUG9ydGFsT3V0bGV0PiA9IFtdO1xuICBvbkRhdGFMb2FkZWRDZWxsUmVuZGVyZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuXG5cbiAgcHVibGljIHRhYmxlQ29udGV4dE1lbnU6IE9Db250ZXh0TWVudUNvbXBvbmVudDtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2VsZWN0QWxsQ2hlY2tib3g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGV4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93Q29uZmlndXJhdGlvbk9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBjb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93RmlsdGVyT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dSZXBvcnRPbkRlbWFuZE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93Q2hhcnRzT25EZW1hbmRPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd0J1dHRvbnNUZXh0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93UmVzZXRXaWR0aE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICByZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBFeHBhbmRhYmxlIGlucHV0IGNhbGxiYWNrIGZ1bmN0aW9uXG4gIHNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uOiAocm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICByZWFkT25seUZ1bmN0aW9uOiAoY29uZmlndXJhdGlvbjogYW55KSA9PiBib29sZWFuO1xuICByZWFkT25seUNvbmZpZ3VyYXRpb246IGFueTtcblxuICBpc0NvbXBvbmVudFJlYWRPbmx5KHNlbGVjdG9yOiBzdHJpbmcsIGF0dHI6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlYWRPbmx5Q29uZmlndXJhdGlvbj8uW3NlbGVjdG9yXT8uW2F0dHJdO1xuICB9XG4gIHByb3RlY3RlZCBfb1RhYmxlT3B0aW9uczogT1RhYmxlT3B0aW9ucztcblxuICBnZXQgb1RhYmxlT3B0aW9ucygpOiBPVGFibGVPcHRpb25zIHtcbiAgICByZXR1cm4gdGhpcy5fb1RhYmxlT3B0aW9ucztcbiAgfVxuXG4gIHNldCBvVGFibGVPcHRpb25zKHZhbHVlOiBPVGFibGVPcHRpb25zKSB7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucyA9IHZhbHVlO1xuICB9XG5cbiAgc2V0IHF1aWNrRmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdmFsdWUgPSBVdGlsLnBhcnNlQm9vbGVhbihTdHJpbmcodmFsdWUpKTtcbiAgICB0aGlzLl9xdWlja0ZpbHRlciA9IHZhbHVlO1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZmlsdGVyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcXVpY2tGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3F1aWNrRmlsdGVyO1xuICB9XG5cbiAgc2V0IGZpbHRlckNhc2VTZW5zaXRpdmUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9maWx0ZXJDYXNlU2Vuc2l0aXZlID0gQm9vbGVhbkNvbnZlcnRlcih2YWx1ZSk7XG4gICAgaWYgKHRoaXMuX29UYWJsZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA9IHRoaXMuX2ZpbHRlckNhc2VTZW5zaXRpdmU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlckNhc2VTZW5zaXRpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNhc2VTZW5zaXRpdmU7XG4gIH1cblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgaW5zZXJ0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHJlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZGVsZXRlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGZpeGVkSGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dUaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBlZGl0aW9uTW9kZTogc3RyaW5nID0gQ29kZXMuRURJVElPTl9NT0RFX05PTkU7XG4gIHNlbGVjdGlvbk1vZGU6IHN0cmluZyA9IENvZGVzLlNFTEVDVElPTl9NT0RFX01VTFRJUExFO1xuXG4gIHByb3RlY3RlZCBfaG9yaXpvbnRhbFNjcm9sbCA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2V0IGhvcml6b250YWxTY3JvbGwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ob3Jpem9udGFsU2Nyb2xsID0gQm9vbGVhbkNvbnZlcnRlcih2YWx1ZSk7XG4gICAgdGhpcy5yZWZyZXNoQ29sdW1uc1dpZHRoRnJvbU9yaWdpbmFsRGVmaW5pdGlvbigpO1xuICB9XG5cbiAgZ2V0IGhvcml6b250YWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hvcml6b250YWxTY3JvbGw7XG4gIH1cblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1BhZ2luYXRvckZpcnN0TGFzdEJ1dHRvbnM6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgYXV0b0FsaWduVGl0bGVzOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIG11bHRpcGxlU29ydDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBvcmRlcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcmVzaXphYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGF1dG9BZGp1c3Q6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZ3JvdXBhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGV4cGFuZEdyb3Vwc1NhbWVMZXZlbDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBjb2xsYXBzZUdyb3VwZWRDb2x1bW5zOiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICB2aXJ0dWFsU2Nyb2xsOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGNvbnRleHRNZW51OiBib29sZWFuID0gdHJ1ZTtcbiAgLy8gTWFpbnRhaW5pbmcgdGhpcyBnZXR0ZXIgdG8gYWxsb3cgY29tcG9uZW50IGV4dGVuc2lvbnMgKGF2b2lkaW5nIGEgYnJlYWtpbmcgY2hhbmdlKVxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vZW5hYmxlZDtcbiAgfVxuICBwcm90ZWN0ZWQgX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTogYm9vbGVhbjtcbiAgc2V0IHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZSA9IEJvb2xlYW5Db252ZXJ0ZXIodmFsdWUpO1xuICAgIGlmICh0aGlzLnN0YXRlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RBbGxDaGVja2JveFZpc2libGUgPSBCb29sZWFuQ29udmVydGVyKHRoaXMuc3RhdGUuc2VsZWN0Q29sdW1uVmlzaWJsZSk7XG4gICAgfVxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSB0aGlzLl9zZWxlY3RBbGxDaGVja2JveFZpc2libGU7XG4gICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgfVxuXG4gIGdldCBzZWxlY3RBbGxDaGVja2JveFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTtcbiAgfVxuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBrZWVwU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IHRydWU7XG5cbiAgcHVibGljIGV4cG9ydE1vZGU6IHN0cmluZyA9IENvZGVzLkVYUE9SVF9NT0RFX1ZJU0lCTEU7XG4gIHB1YmxpYyBleHBvcnRTZXJ2aWNlVHlwZTogc3RyaW5nO1xuICBwdWJsaWMgdmlzaWJsZUV4cG9ydERpYWxvZ0J1dHRvbnM6IHN0cmluZztcbiAgcHVibGljIGRhb1RhYmxlOiBPVGFibGVEYW8gfCBudWxsO1xuICBwdWJsaWMgZGF0YVNvdXJjZTogT1RhYmxlRGF0YVNvdXJjZSB8IG51bGw7XG4gIHB1YmxpYyB2aXNpYmxlQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgc2VhcmNoZWFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgZGVmYXVsdFZpc2libGVDb2x1bW5zOiBzdHJpbmc7XG4gIHB1YmxpYyBncm91cGVkQ29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgbm9uSGlkYWJsZUNvbHVtbnM6IHN0cmluZztcblxuICBwdWJsaWMgc29ydENvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIGdyb3VwZWRDb2x1bW5UeXBlczogT0dyb3VwZWRDb2x1bW5UeXBlc1tdID0gW107XG4gIHB1YmxpYyByb3dDbGFzczogKHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLypwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBwcm90ZWN0ZWQgX3Zpc2libGVDb2xBcnJheTogc3RyaW5nW10gPSBbXTtcblxuICBnZXQgdmlzaWJsZUNvbEFycmF5KCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUNvbEFycmF5O1xuICB9XG5cbiAgc2V0IHZpc2libGVDb2xBcnJheShhcmc6IGFueVtdKSB7XG4gICAgY29uc3QgcGVybWlzc2lvbnNCbG9ja2VkID0gdGhpcy5wZXJtaXNzaW9ucyAmJiB0aGlzLnBlcm1pc3Npb25zLmNvbHVtbnMgPyB0aGlzLnBlcm1pc3Npb25zLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZSA9PT0gZmFsc2UpLm1hcChjb2wgPT4gY29sLmF0dHIpIDogW107XG4gICAgY29uc3QgcGVybWlzc2lvbnNDaGVja2VkID0gYXJnLmZpbHRlcih2YWx1ZSA9PiBwZXJtaXNzaW9uc0Jsb2NrZWQuaW5kZXhPZih2YWx1ZSkgPT09IC0xKTtcbiAgICB0aGlzLl92aXNpYmxlQ29sQXJyYXkgPSBwZXJtaXNzaW9uc0NoZWNrZWQ7XG4gICAgaWYgKHRoaXMuX29UYWJsZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5zU2VsZWN0aW9uQ29sID0gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5pbmRleE9mKENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCkgIT09IC0xO1xuICAgICAgY29uc3QgY29udGFpbnNFeHBhbmRhYmxlQ29sID0gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5pbmRleE9mKENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpICE9PSAtMTtcbiAgICAgIGlmIChjb250YWluc1NlbGVjdGlvbkNvbCkge1xuICAgICAgICB0aGlzLl92aXNpYmxlQ29sQXJyYXkudW5zaGlmdChDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRhaW5zU2VsZWN0aW9uQ29sICYmIGNvbnRhaW5zRXhwYW5kYWJsZUNvbCkge1xuICAgICAgICB0aGlzLl92aXNpYmxlQ29sQXJyYXkgPSBbdGhpcy5fdmlzaWJsZUNvbEFycmF5WzBdXS5jb25jYXQoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSwgdGhpcy5fdmlzaWJsZUNvbEFycmF5LnNwbGljZSgxKSk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb250YWluc0V4cGFuZGFibGVDb2wpIHtcbiAgICAgICAgICB0aGlzLl92aXNpYmxlQ29sQXJyYXkudW5zaGlmdChDb2Rlcy5OQU1FX0NPTFVNTl9FWFBBTkRBQkxFKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuX3Zpc2libGVDb2xBcnJheTtcbiAgICAgIHRoaXMuZ3JvdXBpbmdIZWFkZXJzUm93cyA9IHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMubWFwKHZpc2libGVDb2wgPT4gJ2dyb3VwSGVhZGVyLScgKyB2aXNpYmxlQ29sKTtcbiAgICB9XG4gIH1cblxuICBzb3J0Q29sQXJyYXk6IFNRTE9yZGVyW10gPSBbXTtcbiAgLyplbmQgb2YgcGFyc2VkIGlucHV0cyB2YXJpYWJsZXMgKi9cblxuICBwcm90ZWN0ZWQgdGFiR3JvdXBDb250YWluZXI6IE1hdFRhYkdyb3VwO1xuICBwcm90ZWN0ZWQgdGFiQ29udGFpbmVyOiBNYXRUYWI7XG4gIHRhYkdyb3VwQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJvdGVjdGVkIHBlbmRpbmdRdWVyeTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgcGVuZGluZ1F1ZXJ5RmlsdGVyID0gdW5kZWZpbmVkO1xuXG4gIHByb3RlY3RlZCBzZXRTdGF0aWNEYXRhOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBhdm9pZFF1ZXJ5Q29sdW1uczogQXJyYXk8YW55PiA9IFtdO1xuICBwcm90ZWN0ZWQgYXN5bmNMb2FkQ29sdW1uczogQXJyYXk8YW55PiA9IFtdO1xuICBwcm90ZWN0ZWQgYXN5bmNMb2FkU3Vic2NyaXB0aW9uczogb2JqZWN0ID0ge307XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjb250ZXh0TWVudVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgdmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIG9uUm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25Sb3dEZXNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uUm93RGVsZXRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvblJlaW5pdGlhbGl6ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvbkNvbnRlbnRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25GaWx0ZXJCeUNvbHVtbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHB1YmxpYyBvVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQ6IE9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudDtcbiAgcHVibGljIG9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQ6IE9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG93VG90YWxzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgc2hvd1RvdGFsczogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuc2hvd1RvdGFsc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ1NvcnRpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBsb2FkaW5nU29ydGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMubG9hZGluZ1NvcnRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdTY3JvbGxTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBsb2FkaW5nU2Nyb2xsOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU2Nyb2xsU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBwdWJsaWMgc2hvd0xvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLmxvYWRpbmcucGlwZShkZWJvdW5jZVRpbWUoMjAwKSksIC8vIGF2b2lkIGRpc3BsYXlpbmcgbG9hZGluZyBzcGlubmVyIGZvciBhIHZlcnkgc2hvcnQgdGltZVxuICAgIHRoaXMubG9hZGluZ1NvcnRpbmcsXG4gICAgdGhpcy5sb2FkaW5nU2Nyb2xsXG4gIF0pLnBpcGUoXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IHByZXZbMF0gPT09IGN1cnJbMF0gJiYgcHJldlsxXSA9PT0gY3VyclsxXSAmJiBwcmV2WzJdID09PSBjdXJyWzJdKSwgLy8gYXZvaWQgZW1pdHRpbmcgc2FtZSB2YWx1ZSBtdWx0aXBsZSB0aW1lc1xuICAgIG1hcCgocmVzOiBib29sZWFuW10pID0+IHJlcy5zb21lKHIgPT4gcikpXG4gICk7XG5cbiAgcHVibGljIG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQ6IE9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQ7XG4gIHB1YmxpYyBzaG93Rmlyc3RJbnNlcnRhYmxlUm93OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93TGFzdEluc2VydGFibGVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGV4cGFuZGFibGVJdGVtOiBTZWxlY3Rpb25Nb2RlbDxhbnk+O1xuXG4gIHByb3RlY3RlZCBjbGlja1RpbWVyO1xuICBwcm90ZWN0ZWQgY2xpY2tEZWxheSA9IDIwMDtcbiAgcHJvdGVjdGVkIGNsaWNrUHJldmVudCA9IGZhbHNlO1xuICBwdWJsaWMgZWRpdGluZ0NlbGw6IGFueTtcbiAgcHJvdGVjdGVkIGVkaXRpbmdSb3c6IGFueTtcblxuICBzZXQgY3VycmVudFBhZ2UodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jdXJyZW50UGFnZSA9IHZhbDtcbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHZhbDtcbiAgICAgIGlmICh0aGlzLm1hdHBhZ2luYXRvcikge1xuICAgICAgICB0aGlzLm1hdHBhZ2luYXRvci5wYWdlSW5kZXggPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGN1cnJlbnRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQYWdlO1xuICB9XG5cbiAgcHVibGljIG9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50OiBPVGFibGVRdWlja2ZpbHRlcjtcbiAgcHJvdGVjdGVkIHNvcnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIG9uUmVuZGVyZWREYXRhQ2hhbmdlOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBwcmV2aW91c1JlbmRlcmVyRGF0YTtcblxuICBxdWlja0ZpbHRlckNhbGxiYWNrOiBRdWlja0ZpbHRlckZ1bmN0aW9uO1xuICBkaXNhYmxlU2VsZWN0aW9uRnVuY3Rpb246IERpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjtcblxuICBAVmlld0NoaWxkKCd0YWJsZUJvZHknKVxuICBwcm90ZWN0ZWQgdGFibGVCb2R5RWw6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlSGVhZGVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHRhYmxlSGVhZGVyRWw6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlVG9vbGJhcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICB0YWJsZVRvb2xiYXJFbDogRWxlbWVudFJlZjtcblxuICBob3Jpem9udGFsU2Nyb2xsZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBvblVwZGF0ZVNjcm9sbGVkU3RhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgcm93V2lkdGg7XG5cbiAgc3RvcmVQYWdpbmF0aW9uU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiBJbiB0aGUgY2FzZSB0aGUgdGFibGUgaGF2ZW50IHBhZ2luYXRpb25Db250cm9sIGFuZCBwYWdlYWJsZSwgdGhlIHRhYmxlIGhhcyBwYWdpbmF0aW9uIHZpcnR1YWwqL1xuICBwYWdlU2Nyb2xsVmlydHVhbCA9IDE7XG5cbiAgcHVibGljIHN0YXRpYyBERUZBVUxUX1JPV19IRUlHSFQgPSAzNjtcbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zOiBPVGFibGVQZXJtaXNzaW9ucztcbiAgbWF0TWVudTogTWF0TWVudTtcblxuICBAVmlld0NoaWxkKCd0YWJsZU1lbnUnKVxuICBvVGFibGVNZW51OiBPVGFibGVNZW51O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oT1RhYmxlT3B0aW9uQ29tcG9uZW50KVxuICB0YWJsZU9wdGlvbnM6IFF1ZXJ5TGlzdDxPVGFibGVPcHRpb25Db21wb25lbnQ+O1xuXG4gIG9UYWJsZUJ1dHRvbnM6IE9UYWJsZUJ1dHRvbnM7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihPVGFibGVCdXR0b25Db21wb25lbnQpXG4gIHRhYmxlQnV0dG9uczogUXVlcnlMaXN0PE9UYWJsZUJ1dHRvbj47XG5cbiAgQENvbnRlbnRDaGlsZCgnby10YWJsZS1xdWlja2ZpbHRlcicsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHF1aWNrZmlsdGVyQ29udGVudENoaWxkOiBPVGFibGVRdWlja2ZpbHRlcjtcblxuXG4gIEBDb250ZW50Q2hpbGRyZW4oT1RhYmxlRXhwb3J0QnV0dG9uQ29tcG9uZW50KVxuICBleHBvcnRPcHRzVGVtcGxhdGU6IFF1ZXJ5TGlzdDxPVGFibGVFeHBvcnRCdXR0b25Db21wb25lbnQ+XG5cbiAgQENvbnRlbnRDaGlsZChPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmUpXG4gIHRhYmxlQ29sdW1uU2VsZWN0QWxsQ29udGVudENoaWxkOiBPVGFibGVDb2x1bW5TZWxlY3RBbGxEaXJlY3RpdmU7XG5cblxuXG4gIHB1YmxpYyBncm91cGVkQ29sdW1uc0FycmF5OiBzdHJpbmdbXSA9IFtdO1xuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgW10pXG4gIHVwZGF0ZVNjcm9sbGVkU3RhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJvZHlXaWR0aCA9IHRoaXMudGFibGVCb2R5RWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsV2lkdGggPSB0aGlzLnRhYmxlQm9keUVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSB0aGlzLmhvcml6b250YWxTY3JvbGxlZDtcbiAgICAgICAgdGhpcy5ob3Jpem9udGFsU2Nyb2xsZWQgPSBzY3JvbGxXaWR0aCA+IGJvZHlXaWR0aDtcbiAgICAgICAgaWYgKHByZXZpb3VzU3RhdGUgIT09IHRoaXMuaG9yaXpvbnRhbFNjcm9sbGVkKSB7XG4gICAgICAgICAgdGhpcy5vblVwZGF0ZVNjcm9sbGVkU3RhdGUuZW1pdCh0aGlzLmhvcml6b250YWxTY3JvbGxlZCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDApO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrVmlld3BvcnRTaXplKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2lzQ29sdW1uRmlsdGVyc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldCBpc0NvbHVtbkZpbHRlcnNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ29sdW1uRmlsdGVyc0FjdGl2ZTtcbiAgfVxuXG4gIHNldCBpc0NvbHVtbkZpbHRlcnNBY3RpdmUodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5faXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdmFsO1xuICB9XG5cbiAgZ3JvdXBpbmdIZWFkZXJzUm93czogc3RyaW5nW10gPSBbXTtcblxuICBwdWJsaWMgb1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50OiBPVGFibGVDb2x1bW5zR3JvdXBpbmc7XG5cbiAgQENvbnRlbnRDaGlsZChPVGFibGVDb250ZXh0TWVudUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgY29udGV4dE1lbnVDb250ZW50Q2hpbGQ6IE9UYWJsZUNvbnRleHRNZW51Q29tcG9uZW50O1xuXG4gIHByb3RlY3RlZCB0cmlnZ2VyU2VsZWN0aW9uRXZlbnRzOiBib29sZWFuID0gdHJ1ZTtcblxuICBAVmlld0NoaWxkcmVuKE1hdFRvb2x0aXApXG4gIHRvb2x0aXA6IFF1ZXJ5TGlzdDxNYXRUb29sdGlwPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFZJUlRVQUxfU0NST0xMX1NUUkFURUdZKSBwdWJsaWMgcmVhZG9ubHkgc2Nyb2xsU3RyYXRlZ3k6IE9UYWJsZVZpcnR1YWxTY3JvbGxTdHJhdGVneVxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgZWxSZWYsIGZvcm0pO1xuXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucyA9IG5ldyBEZWZhdWx0T1RhYmxlT3B0aW9ucygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudGFiR3JvdXBDb250YWluZXIgPSB0aGlzLmluamVjdG9yLmdldChNYXRUYWJHcm91cCk7XG4gICAgICB0aGlzLnRhYkNvbnRhaW5lciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1hdFRhYik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgZHVlIHRvIG5vdCBhbHdheXMgaXMgY29udGFpbmVkIG9uIHRhYi5cbiAgICB9XG5cbiAgICB0aGlzLnNuYWNrQmFyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KFNuYWNrQmFyU2VydmljZSk7XG4gICAgdGhpcy5nZXRJbmplY3Rpb25Ub2tlbkNvbmZpZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbmplY3Rpb25Ub2tlbkNvbmZpZygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb1RhYmxlR2xvYmFsQ29uZmlnID0gdGhpcy5pbmplY3Rvci5nZXQoT19UQUJMRV9HTE9CQUxfQ09ORklHKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcuYXV0b0FkanVzdCkpIHtcbiAgICAgICAgdGhpcy5hdXRvQWRqdXN0ID0gb1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BZGp1c3Q7XG4gICAgICB9O1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5hdXRvQWxpZ25UaXRsZXMpKSB7XG4gICAgICAgIHRoaXMuYXV0b0FsaWduVGl0bGVzID0gb1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BbGlnblRpdGxlcztcbiAgICAgIH1cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0KSkge1xuICAgICAgICB0aGlzLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCA9IG9UYWJsZUdsb2JhbENvbmZpZy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQob1RhYmxlR2xvYmFsQ29uZmlnLmVkaXRpb25Nb2RlKSAmJiBDb2Rlcy5pc1ZhbGlkRWRpdGlvbk1vZGUob1RhYmxlR2xvYmFsQ29uZmlnLmVkaXRpb25Nb2RlKSkge1xuICAgICAgICB0aGlzLmVkaXRpb25Nb2RlID0gb1RhYmxlR2xvYmFsQ29uZmlnLmVkaXRpb25Nb2RlO1xuICAgICAgfVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5kZXRhaWxNb2RlICYmIENvZGVzLmlzVmFsaWREZXRhaWxNb2RlKG9UYWJsZUdsb2JhbENvbmZpZy5kZXRhaWxNb2RlKSkpIHtcbiAgICAgICAgdGhpcy5kZXRhaWxNb2RlID0gb1RhYmxlR2xvYmFsQ29uZmlnLmRldGFpbE1vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcucm93SGVpZ2h0KSAmJiBDb2Rlcy5pc1ZhbGlkUm93SGVpZ2h0KG9UYWJsZUdsb2JhbENvbmZpZy5yb3dIZWlnaHQpKSB7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0ID0gb1RhYmxlR2xvYmFsQ29uZmlnLnJvd0hlaWdodDtcbiAgICAgIH07XG5cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcuc2hvd0NoYXJ0c09uRGVtYW5kT3B0aW9uKSkge1xuICAgICAgICB0aGlzLnNob3dDaGFydHNPbkRlbWFuZE9wdGlvbiA9IG9UYWJsZUdsb2JhbENvbmZpZy5zaG93Q2hhcnRzT25EZW1hbmRPcHRpb247XG4gICAgICB9O1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5zaG93UmVwb3J0T25EZW1hbmRPcHRpb24pKSB7XG4gICAgICAgIHRoaXMuc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uID0gb1RhYmxlR2xvYmFsQ29uZmlnLnNob3dSZXBvcnRPbkRlbWFuZE9wdGlvbjtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSBpcyBvcHRpb25hbFxuICAgIH1cblxuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5zdGF0ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIGlmICh0aGlzLm9UYWJsZUJ1dHRvbnMgJiYgdGhpcy50YWJsZUJ1dHRvbnMgJiYgdGhpcy50YWJsZUJ1dHRvbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vVGFibGVCdXR0b25zLnJlZ2lzdGVyQnV0dG9ucyh0aGlzLnRhYmxlQnV0dG9ucy50b0FycmF5KCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzdXBlci5hZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy5pbml0VGFibGVBZnRlclZpZXdJbml0KCk7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5tYXRNZW51ID0gdGhpcy5vVGFibGVNZW51Lm1hdE1lbnU7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUucmVnaXN0ZXJPcHRpb25zKHRoaXMudGFibGVPcHRpb25zLnRvQXJyYXkoKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlKSB7XG4gICAgICB0aGlzLmV4cGFuZGFibGVJdGVtID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odGhpcy50YWJsZVJvd0V4cGFuZGFibGUubXVsdGlwbGUsIFtdKTtcbiAgICAgIHRoaXMuY3JlYXRlRXhwYW5kYWJsZUNvbHVtbigpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAodGhpcy50YWJsZUNvbHVtblNlbGVjdEFsbENvbnRlbnRDaGlsZCkge1xuICAgICAgLy9cbiAgICAgIHRoaXMuc2V0Q3VzdG9tRGVmaW5pdGlvbkluU2VsZWN0Q29sdW1uKHRoaXMudGFibGVDb2x1bW5TZWxlY3RBbGxDb250ZW50Q2hpbGQpXG4gICAgfVxuICB9XG5cbiAgc2V0Q3VzdG9tRGVmaW5pdGlvbkluU2VsZWN0Q29sdW1uKGRlZmluaXRpb246IE9UYWJsZUNvbHVtblNlbGVjdEFsbERpcmVjdGl2ZSkge1xuICAgIGlmIChkZWZpbml0aW9uLnRpdGxlKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi50aXRsZSA9IGRlZmluaXRpb24udGl0bGU7XG4gICAgfVxuICAgIGlmIChkZWZpbml0aW9uLndpZHRoKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi53aWR0aCA9IGRlZmluaXRpb24ud2lkdGg7XG4gICAgfVxuICAgIGlmIChkZWZpbml0aW9uLm1pbldpZHRoKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5taW5XaWR0aCA9IGRlZmluaXRpb24ubWluV2lkdGg7XG4gICAgfVxuICAgIGlmIChkZWZpbml0aW9uLm1heFdpZHRoKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5tYXhXaWR0aCA9IGRlZmluaXRpb24ubWF4V2lkdGg7XG4gICAgfVxuICAgIGlmIChkZWZpbml0aW9uLnJlc2l6YWJsZSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ucmVzaXphYmxlID0gZGVmaW5pdGlvbi5yZXNpemFibGU7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcE5hbWU6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNoYW5nZXMuYXV0b0FkanVzdCkgJiYgY2hhbmdlcy5hdXRvQWRqdXN0LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5hdXRvQWRqdXN0LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIHRoaXMuYXV0b0FkanVzdCA9IGNoYW5nZXMuYXV0b0FkanVzdC5jdXJyZW50VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlSGVhZGVyQW5kRm9vdGVyU3RpY2t5UG9zaXRpb25zKCkge1xuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgY29uc3Qgem9uZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nWm9uZSk7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbFN0cmF0ZWd5LnN0aWNreUNoYW5nZS5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5maXhlZEhlYWRlciB8fCB0aGlzLmhhc0luc2VydGFibGVSb3coKSlcbiAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc3RpY2t5SGVhZGVyU2VsZWN0b3IpLmZvckVhY2goKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgZWwuc3R5bGUudG9wID0gLSB4ICsgJ3B4JztcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzdGlja3lGb290ZXJTZWxlY3RvcikuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbC5zdHlsZS5ib3R0b20gPSB4ICsgJ3B4JztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlRXhwYW5kYWJsZUNvbHVtbigpIHtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4gPSBuZXcgT0NvbHVtbigpO1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbi52aXNpYmxlID0gdGhpcy50YWJsZVJvd0V4cGFuZGFibGUgJiYgdGhpcy50YWJsZVJvd0V4cGFuZGFibGUuZXhwYW5kYWJsZUNvbHVtblZpc2libGU7XG4gICAgdGhpcy51cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcblxuICAgIC8vZGV0YWNoIGFsbCBwb3J0YSBob3N0IGNyZWF0ZWRcbiAgICBpZiAodGhpcy5wb3J0YWxIb3N0KSB7XG4gICAgICB0aGlzLnBvcnRhbEhvc3QuZm9yRWFjaCh4ID0+IHguZGV0YWNoKCkpO1xuICAgIH1cbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGdldFN1ZmZpeENvbHVtbkluc2VydGFibGUoKSB7XG4gICAgcmV0dXJuIENvZGVzLlNVRkZJWF9DT0xVTU5fSU5TRVJUQUJMRTtcbiAgfVxuXG4gIGdldEFjdGlvbnNQZXJtaXNzaW9ucygpOiBPUGVybWlzc2lvbnNbXSB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMgPyAodGhpcy5wZXJtaXNzaW9ucy5hY3Rpb25zIHx8IFtdKSA6IFtdO1xuICB9XG5cbiAgZ2V0TWVudVBlcm1pc3Npb25zKCk6IE9UYWJsZU1lbnVQZXJtaXNzaW9ucyB7XG4gICAgY29uc3QgcmVzdWx0OiBPVGFibGVNZW51UGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zID8gdGhpcy5wZXJtaXNzaW9ucy5tZW51IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQgOiB7XG4gICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIGl0ZW1zOiBbXVxuICAgIH07XG4gIH1cblxuICBnZXRPQ29sdW1uUGVybWlzc2lvbnMoYXR0cjogc3RyaW5nKTogT1Blcm1pc3Npb25zIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmNvbHVtbnMgfHwgW10pIDogW107XG4gICAgcmV0dXJuIGNvbHVtbnMuZmluZChjb21wID0+IGNvbXAuYXR0ciA9PT0gYXR0cikgfHwgeyBhdHRyOiBhdHRyLCBlbmFibGVkOiB0cnVlLCB2aXNpYmxlOiB0cnVlIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QWN0aW9uUGVybWlzc2lvbnMoYXR0cjogc3RyaW5nKTogT1Blcm1pc3Npb25zIHtcbiAgICBjb25zdCBhY3Rpb25zUGVybSA9IHRoaXMucGVybWlzc2lvbnMgPyAodGhpcy5wZXJtaXNzaW9ucy5hY3Rpb25zIHx8IFtdKSA6IFtdO1xuICAgIGNvbnN0IHBlcm1pc3Npb25zOiBPUGVybWlzc2lvbnMgPSBhY3Rpb25zUGVybS5maW5kKHAgPT4gcC5hdHRyID09PSBhdHRyKTtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMgfHwge1xuICAgICAgYXR0cjogYXR0cixcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBlbmFibGVkOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKGF0dHI6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbnNQZXJtID0gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gICAgY29uc3QgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IGFjdGlvbnNQZXJtLmZpbmQocCA9PiBwLmF0dHIgPT09IGF0dHIpO1xuICAgIGNvbnN0IGVuYWJsZWRQZXJtaXNpb24gPSBQZXJtaXNzaW9uc1V0aWxzLmNoZWNrRW5hYmxlZFBlcm1pc3Npb24ocGVybWlzc2lvbnMpO1xuICAgIGlmICghZW5hYmxlZFBlcm1pc2lvbikge1xuICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1BFUk1JU1NJT04nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuYWJsZWRQZXJtaXNpb247XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHdoYXQgaW5pdGlhbGl6ZSB2YXJzIGFuZCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBpbml0aWFsaXplKCk6IGFueSB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucyA9IG5ldyBEZWZhdWx0T1RhYmxlT3B0aW9ucygpO1xuICAgIGlmICh0aGlzLnRhYkdyb3VwQ29udGFpbmVyICYmIHRoaXMudGFiQ29udGFpbmVyKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyVGFiTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHBhcmFtcyBvZiB0aGUgdGFibGVcbiAgICB0aGlzLmluaXRpYWxpemVQYXJhbXMoKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZURhbygpO1xuXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFRhYmxlUGVybWlzc2lvbnModGhpcy5vYXR0ciwgdGhpcy5hY3RSb3V0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZURhbygpIHtcbiAgICAvLyBDb25maWd1cmUgZGFvIG1ldGhvZHNcbiAgICBjb25zdCBxdWVyeU1ldGhvZE5hbWUgPSB0aGlzLnBhZ2VhYmxlID8gdGhpcy5wYWdpbmF0ZWRRdWVyeU1ldGhvZCA6IHRoaXMucXVlcnlNZXRob2Q7XG4gICAgY29uc3QgbWV0aG9kcyA9IHtcbiAgICAgIHF1ZXJ5OiBxdWVyeU1ldGhvZE5hbWUsXG4gICAgICB1cGRhdGU6IHRoaXMudXBkYXRlTWV0aG9kLFxuICAgICAgZGVsZXRlOiB0aGlzLmRlbGV0ZU1ldGhvZCxcbiAgICAgIGluc2VydDogdGhpcy5pbnNlcnRNZXRob2RcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc3RhdGljRGF0YSkge1xuICAgICAgdGhpcy5xdWVyeU9uQmluZCA9IGZhbHNlO1xuICAgICAgdGhpcy5xdWVyeU9uSW5pdCA9IGZhbHNlO1xuICAgICAgdGhpcy5kYW9UYWJsZSA9IG5ldyBPVGFibGVEYW8odW5kZWZpbmVkLCB0aGlzLmVudGl0eSwgbWV0aG9kcyk7XG4gICAgICB0aGlzLnNldERhdGFBcnJheSh0aGlzLnN0YXRpY0RhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZVNlcnZpY2UoKTtcbiAgICAgIHRoaXMuZGFvVGFibGUgPSBuZXcgT1RhYmxlRGFvKHRoaXMuZGF0YVNlcnZpY2UsIHRoaXMuZW50aXR5LCBtZXRob2RzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgcmVpbml0aWFsaXplIHRhYmxlIGFkZGluZyBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICByZWluaXRpYWxpemUob3B0aW9uczogT1RhYmxlSW5pdGlhbGl6YXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGNsb25lZE9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdlbnRpdHknKSkge1xuICAgICAgICB0aGlzLmVudGl0eSA9IGNsb25lZE9wdHMuZW50aXR5O1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ3NlcnZpY2UnKSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBjbG9uZWRPcHRzLnNlcnZpY2U7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnY29sdW1ucycpKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IGNsb25lZE9wdHMuY29sdW1ucztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCd2aXNpYmxlQ29sdW1ucycpKSB7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSBjbG9uZWRPcHRzLnZpc2libGVDb2x1bW5zO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWaXNpYmxlQ29sdW1ucycpKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZpc2libGVDb2x1bW5zID0gY2xvbmVkT3B0cy5kZWZhdWx0VmlzaWJsZUNvbHVtbnM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgna2V5cycpKSB7XG4gICAgICAgIHRoaXMua2V5cyA9IGNsb25lZE9wdHMua2V5cztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdzb3J0Q29sdW1ucycpKSB7XG4gICAgICAgIHRoaXMuc29ydENvbHVtbnMgPSBjbG9uZWRPcHRzLnNvcnRDb2x1bW5zO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ3BhcmVudEtleXMnKSkge1xuICAgICAgICB0aGlzLnBhcmVudEtleXMgPSBjbG9uZWRPcHRzLnBhcmVudEtleXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdmaWx0ZXJDb2x1bW5zJykpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQpIHtcbiAgICAgICAgICB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgPSBuZXcgT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCh0aGlzLmluamVjdG9yLCB0aGlzKTtcbiAgICAgICAgICB0aGlzLm9UYWJsZU1lbnUub25WaXNpYmxlRmlsdGVyT3B0aW9uQ2hhbmdlLm5leHQodGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQpO1xuICAgICAgICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5jb2x1bW5zID0gY2xvbmVkT3B0cy5maWx0ZXJDb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5jb2x1bW5zID0gdGhpcy5zZWFyY2hlYWJsZUNvbHVtbnMuam9pbihcIjtcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICB0aGlzLnN0YXRlLnJlc2V0KHRoaXMucGFnZWFibGUpO1xuICAgIHRoaXMuaW5pdFRhYmxlQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIHRoaXMub25SZWluaXRpYWxpemUuZW1pdChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0VGFibGVBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMucGFyc2VWaXNpYmxlQ29sdW1ucygpO1xuICAgIHRoaXMucGFyc2VTZWFyY2hlYWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLnNldERhdGFzb3VyY2UoKTtcbiAgICB0aGlzLnBhcnNlR3JvdXBlZENvbHVtbnMoKTtcbiAgICB0aGlzLnBhcnNlR3JvdXBlZENvbHVtblR5cGVzKCk7XG4gICAgdGhpcy5wYXJzZVNvcnRDb2x1bW5zKCk7XG4gICAgdGhpcy5zZXRGaWx0ZXJzQ29uZmlndXJhdGlvbigpO1xuICAgIHRoaXMuYWRkRGVmYXVsdFJvd0J1dHRvbnMoKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQpKSB7XG4gICAgICB0aGlzLnNldEdyb3VwQ29sdW1ucyh0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudC5jb2x1bW5zQXJyYXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gIH1cbiAgcGFyc2VTZWFyY2hlYWJsZUNvbHVtbnMoKSB7XG4gICAgdGhpcy5zZWFyY2hlYWJsZUNvbHVtbnMgPSB0aGlzLnZpc2libGVDb2xBcnJheS5maWx0ZXIoY29sID0+IHtcbiAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oY29sKTtcbiAgICAgIHJldHVybiBvQ29sICYmIG9Db2wuc2VhcmNoYWJsZTtcbiAgICB9KVxuXG4gIH1cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgaWYgKHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNvcnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UpIHtcbiAgICAgIHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNjcm9sbFN0cmF0ZWd5KSB7XG4gICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnMpLmZvckVhY2goaWR4ID0+IHtcbiAgICAgIGlmICh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbaWR4XSkge1xuICAgICAgICB0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbaWR4XS51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB1cGRhdGUgc3RvcmUgbG9jYWxzdG9yYWdlLCBjYWxsIG9mIHRoZSBJTG9jYWxTdG9yYWdlXG4gICAqL1xuICBnZXREYXRhVG9TdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuZ2V0RGF0YVRvU3RvcmUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyUXVpY2tGaWx0ZXIoYXJnOiBhbnkpIHtcbiAgICBjb25zdCBxdWlja0ZpbHRlciA9IChhcmcgYXMgT1RhYmxlUXVpY2tmaWx0ZXIpO1xuICAgIC8vIGZvcmNpbmcgcXVpY2tGaWx0ZXJDb21wb25lbnQgdG8gYmUgdW5kZWZpbmVkLCB0YWJsZSB1c2VzIG9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbXBvbmVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50ID0gcXVpY2tGaWx0ZXI7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQpKSB7XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnNldFZhbHVlKHRoaXMuc3RhdGUucXVpY2tGaWx0ZXJWYWx1ZSwgZmFsc2UpO1xuICAgICAgdGhpcy5xdWlja0ZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQub25DaGFuZ2Uuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICAgIHRoaXMub25TZWFyY2guZW1pdCh2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJQYWdpbmF0aW9uKHZhbHVlOiBPVGFibGVQYWdpbmF0b3IpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25Db250cm9scyA9IHRydWU7XG4gICAgdGhpcy5wYWdpbmF0b3IgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29udGV4dE1lbnUodmFsdWU6IE9Db250ZXh0TWVudUNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVDb250ZXh0TWVudSA9IHZhbHVlO1xuICAgIHRoaXMuY29udGV4dE1lbnVTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlQ29udGV4dE1lbnUub25TaG93LnN1YnNjcmliZSgocGFyYW1zOiBJT0NvbnRleHRNZW51Q29udGV4dCkgPT4ge1xuICAgICAgcGFyYW1zLmNsYXNzID0gJ28tdGFibGUtY29udGV4dC1tZW51ICcgKyB0aGlzLnJvd0hlaWdodDtcbiAgICAgIGlmIChwYXJhbXMuZGF0YSAmJiAhdGhpcy5pc1Jvd1NlbGVjdGVkKHBhcmFtcy5kYXRhLnJvd1ZhbHVlKSkge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocGFyYW1zLmRhdGEucm93VmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVnaXN0ZXJEZWZhdWx0Q29sdW1uKGNvbHVtbjogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4pKSkge1xuICAgICAgLy8gYSBkZWZhdWx0IGNvbHVtbiBkZWZpbml0aW9uIHRyeWluZyB0byByZXBsYWNlIGFuIGFscmVhZHkgZXhpc3RpbmcgZGVmaW5pdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2xEZWY6IE9Db2x1bW4gPSB0aGlzLmNyZWF0ZU9Db2x1bW4oY29sdW1uLCB0aGlzKTtcbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIGFsbCBjb2x1bW5zIGFuZCBwcm9wZXJ0aWVzIGluIHZhciBjb2x1bW5zQXJyYXlcbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgcmVnaXN0ZXJDb2x1bW4oY29sdW1uOiBPVGFibGVDb2x1bW5Db21wb25lbnQgfCBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50IHwgYW55KSB7XG4gICAgY29uc3QgY29sdW1uQXR0ciA9ICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykgPyBjb2x1bW4gOiBjb2x1bW4uYXR0cjtcbiAgICBjb25zdCBjb2x1bW5QZXJtaXNzaW9uczogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRPQ29sdW1uUGVybWlzc2lvbnMoY29sdW1uQXR0cik7XG4gICAgaWYgKCFjb2x1bW5QZXJtaXNzaW9ucy52aXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRGVmYXVsdENvbHVtbihjb2x1bW4pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbkRlZiA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbkRlZikgJiYgVXRpbC5pc0RlZmluZWQoY29sdW1uRGVmLmRlZmluaXRpb24pKSB7XG4gICAgICAvLyBhIG8tdGFibGUtY29sdW1uIGRlZmluaXRpb24gdHJ5aW5nIHRvIHJlcGxhY2UgYW4gYWxyZWFkeSBleGlzdGluZyBvLXRhYmxlLWNvbHVtbiBkZWZpbml0aW9uXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sRGVmOiBPQ29sdW1uID0gdGhpcy5jcmVhdGVPQ29sdW1uKGNvbHVtbi5hdHRyLCB0aGlzLCBjb2x1bW4pO1xuICAgIGxldCBjb2x1bW5XaWR0aCA9IHRoaXMuZ2V0Q29sdW1uV2lkdGhGcm9tU3RhdGUoY29sRGVmKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uV2lkdGgpKSB7XG4gICAgICBjb2xEZWYud2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiAoY29sdW1uLmFzeW5jTG9hZCB8fCBjb2x1bW4udHlwZSA9PT0gJ2FjdGlvbicpKSB7XG4gICAgICB0aGlzLmF2b2lkUXVlcnlDb2x1bW5zLnB1c2goY29sdW1uLmF0dHIpO1xuICAgICAgaWYgKGNvbHVtbi5hc3luY0xvYWQpIHtcbiAgICAgICAgdGhpcy5hc3luY0xvYWRDb2x1bW5zLnB1c2goY29sdW1uLmF0dHIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWY6IE9Db2x1bW4pIHtcbiAgICBjb2xEZWYudmlzaWJsZSA9ICh0aGlzLl92aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihjb2xEZWYuYXR0cikgIT09IC0xKTtcbiAgICAvLyBGaW5kIGNvbHVtbiBkZWZpbml0aW9uIGJ5IG5hbWVcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RpbmcgPSB0aGlzLmdldE9Db2x1bW4oY29sRGVmLmF0dHIpO1xuICAgIGlmIChhbHJlYWR5RXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmVwbGFjaW5nSW5kZXggPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuaW5kZXhPZihhbHJlYWR5RXhpc3RpbmcpO1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zW3JlcGxhY2luZ0luZGV4XSA9IGNvbERlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnB1c2goY29sRGVmKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDb2x1bW5zT3JkZXIoKTtcbiAgICB0aGlzLnJlZnJlc2hFZGl0aW9uTW9kZVdhcm4oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoRWRpdGlvbk1vZGVXYXJuKCkge1xuICAgIGlmICh0aGlzLmVkaXRpb25Nb2RlICE9PSBDb2Rlcy5FRElUSU9OX01PREVfTk9ORSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlZGl0YWJsZUNvbHVtbnMgPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiB7XG4gICAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29sLmVkaXRvcik7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoZWRpdGFibGVDb2x1bW5zLmxlbmd0aCA+IDAgJiYgIXRoaXMuaGFzSW5zZXJ0YWJsZVJvdygpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignVXNpbmcgYSBjb2x1bW4gd2l0aCBhIGVkaXRvciBidXQgdGhlcmUgaXMgbm8gZWRpdGlvbi1tb2RlIGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcmVnaXN0ZXJDb2x1bW5BZ2dyZWdhdGUoY29sdW1uOiBPQ29sdW1uQWdncmVnYXRlKSB7XG4gICAgdGhpcy5zaG93VG90YWxzU3ViamVjdC5uZXh0KHRydWUpO1xuICAgIGNvbnN0IGFscmVhZHlFeGlzdGluZyA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgaWYgKGFscmVhZHlFeGlzdGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZXBsYWNpbmdJbmRleCA9IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5pbmRleE9mKGFscmVhZHlFeGlzdGluZyk7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnNbcmVwbGFjaW5nSW5kZXhdLmFnZ3JlZ2F0ZSA9IGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlclRhYmxlSGVhZGVycyh0YWJsZUhlYWRlcjogT1RhYmxlSGVhZGVyQ29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMudGFibGVIZWFkZXJzLmZpbmRJbmRleChoZWFkZXIgPT4gaGVhZGVyLmNvbHVtbi5hdHRyID09PSB0YWJsZUhlYWRlci5jb2x1bW4uYXR0cikgPT09IC0xKSB7XG4gICAgICB0aGlzLnRhYmxlSGVhZGVycy5wdXNoKHRhYmxlSGVhZGVyKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZVZpc2libGVDb2x1bW5zKGRlZmF1bHRDb25maWd1cmF0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5jb2x1bW5zRGlzcGxheSkge1xuICAgICAgLy8gZmlsdGVyaW5nIGNvbHVtbnMgdGhhdCBtaWdodCBiZSBpbiBzdGF0ZSBzdG9yYWdlIGJ1dCBub3QgaW4gdGhlIGFjdHVhbCB0YWJsZSBkZWZpbml0aW9uXG4gICAgICBsZXQgc3RhdGVDb2xzOiBPQ29sdW1uRGlzcGxheVtdID0gW107XG4gICAgICB0aGlzLnN0YXRlLmNvbHVtbnNEaXNwbGF5LmZvckVhY2goKG9Db2wsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVmlzaWJsZUNvbEluQ29sdW1ucyA9IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuYXR0ciA9PT0gb0NvbC5hdHRyKSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChpc1Zpc2libGVDb2xJbkNvbHVtbnMpIHtcbiAgICAgICAgICBzdGF0ZUNvbHMucHVzaChvQ29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBsb2FkIHRoZSBjb2x1bW4gJyArIG9Db2wuYXR0ciArICcgZnJvbSB0aGUgbG9jYWxzdG9yYWdlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGRlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN0YXRlQ29scyA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZUNvbHMgPSB0aGlzLmNoZWNrQ2hhbmdlc1Zpc2libGVDb2x1bW1uc0luSW5pdGlhbENvbmZpZ3VyYXRpb24oc3RhdGVDb2xzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnNvcnQoKGE6IE9Db2x1bW4sIGI6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhBID0gc3RhdGVDb2xzLmZpbmRJbmRleChjb2wgPT4gY29sLmF0dHIgPT09IGEuYXR0cik7XG4gICAgICAgIGNvbnN0IGluZGV4QiA9IHN0YXRlQ29scy5maW5kSW5kZXgoY29sID0+IGNvbC5hdHRyID09PSBiLmF0dHIpO1xuICAgICAgICByZXR1cm4gaW5kZXhBIC0gaW5kZXhCO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnZpc2libGVDb2xBcnJheSA9IHN0YXRlQ29scy5maWx0ZXIoaXRlbSA9PiBpdGVtLnZpc2libGUpLm1hcChpdGVtID0+IGl0ZW0uYXR0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmlzaWJsZUNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMuZGVmYXVsdFZpc2libGVDb2x1bW5zID8gdGhpcy5kZWZhdWx0VmlzaWJsZUNvbHVtbnMgOiB0aGlzLnZpc2libGVDb2x1bW5zLCB0cnVlKTtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGEuYXR0cikgLSB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGIuYXR0cikpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQ2hhbmdlc1Zpc2libGVDb2x1bW1uc0luSW5pdGlhbENvbmZpZ3VyYXRpb24oc3RhdGVDb2xzOiBPQ29sdW1uRGlzcGxheVtdKTogT0NvbHVtbkRpc3BsYXlbXSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5ID1cbiAgICAgICAgdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5jb2x1bW5zRGlzcGxheS5maWx0ZXIoeCA9PiB4LnZpc2libGUpLm1hcCh4ID0+IHguYXR0cik7XG5cbiAgICAgIGNvbnN0IHZpc2libGVDb2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLnZpc2libGVDb2x1bW5zLCB0cnVlKTtcblxuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gdmlzaWJsZS1jb2x1bW5zIHRoYXQgdGhleSBhcmVudCBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlXG4gICAgICAvLyBpbiB0aGlzIGNhc2UgeW91IGhhdmUgdG8gYWRkIHRoaXMgY29sdW1uIHRvIHRoaXMudmlzaWJsZUNvbEFycmF5XG4gICAgICBjb25zdCBjb2xUb0FkZEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyh2aXNpYmxlQ29sQXJyYXksIG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5KTtcbiAgICAgIGNvbFRvQWRkSW5WaXNpYmxlQ29sLmZvckVhY2goKGNvbEFkZCkgPT4ge1xuICAgICAgICBsZXQgaW5kZXhDb2wgPSBzdGF0ZUNvbHMuZmluZEluZGV4KGNvbCA9PiBjb2wuYXR0ciA9PT0gY29sQWRkKTtcbiAgICAgICAgaWYgKGluZGV4Q29sID4gLTEpIHtcbiAgICAgICAgICBzdGF0ZUNvbHNbaW5kZXhDb2xdLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlQ29scy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB2aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihhLmF0dHIpIC0gdmlzaWJsZUNvbEFycmF5LmluZGV4T2YoYi5hdHRyKSk7XG4gICAgICB9KTtcblxuXG4gICAgICAvLyBGaW5kIHZhbHVlcyBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlIHRoYXQgdGhleSBhcmVudCBpbiB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgLy8gaW4gdGhpcyBjYXNlIHlvdSBoYXZlIHRvIGRlbGV0ZSB0aGlzIGNvbHVtbiB0byB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgY29uc3QgY29sVG9EZWxldGVJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXMob3JpZ2luYWxWaXNpYmxlQ29sQXJyYXksIHZpc2libGVDb2xBcnJheSk7XG4gICAgICBpZiAoY29sVG9EZWxldGVJblZpc2libGVDb2wubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGF0ZUNvbHMgPSBzdGF0ZUNvbHMuZmlsdGVyKGNvbCA9PiBjb2xUb0RlbGV0ZUluVmlzaWJsZUNvbC5pbmRleE9mKGNvbC5hdHRyKSA9PT0gLTEpO1xuICAgICAgfVxuXG4gICAgICAvL0lmIHRoZSBjb2x1bW5zIGluIG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5IGhhcyBjaGFuZ2VkIHRoZSBzb3J0aW5nXG4gICAgICBjb25zdCBjaGFuZ2VTb3J0VmlzaWJsZUNvbHVtbnMgPSBKU09OLnN0cmluZ2lmeSh2aXNpYmxlQ29sQXJyYXkpICE9PSBKU09OLnN0cmluZ2lmeShvcmlnaW5hbFZpc2libGVDb2xBcnJheSk7XG4gICAgICBpZiAoY2hhbmdlU29ydFZpc2libGVDb2x1bW5zICYmIHZpc2libGVDb2xBcnJheS5sZW5ndGggPT09IG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5Lmxlbmd0aCkge1xuICAgICAgICB2aXNpYmxlQ29sQXJyYXkuZm9yRWFjaCgoY29sLCB0b0luZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUluZGV4VG9DaGFuZ2UgPSBzdGF0ZUNvbHMuZmluZEluZGV4KHN0YXRlQ29sID0+IHN0YXRlQ29sLmF0dHIgPT09IGNvbCk7XG4gICAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHN0YXRlQ29scywgZnJvbUluZGV4VG9DaGFuZ2UsIHRvSW5kZXgpO1xuICAgICAgICB9KTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhdGVDb2xzO1xuICB9XG5cbiAgcGFyc2VTb3J0Q29sdW1ucygpIHtcbiAgICBjb25zdCBzb3J0Q29sdW1uc1BhcmFtID0gdGhpcy5zdGF0ZS5zb3J0Q29sdW1ucyB8fCB0aGlzLnNvcnRDb2x1bW5zO1xuICAgIHRoaXMuc29ydENvbEFycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnMoc29ydENvbHVtbnNQYXJhbSk7XG5cbiAgICAvLyBjaGVja2luZyB0aGUgb3JpZ2luYWwgc29ydCBjb2x1bW5zIHdpdGggdGhlIHNvcnQgY29sdW1ucyBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaW4gbG9jYWwgc3RvcmFnZVxuICAgIGlmICh0aGlzLnN0YXRlLnNvcnRDb2x1bW5zICYmIHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc29ydENvbHVtbnMpIHtcblxuICAgICAgY29uc3QgaW5pdGlhbENvbmZpZ1NvcnRDb2x1bW5zQXJyYXkgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNvcnRDb2x1bW5zKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsU29ydENvbHVtbnNBcnJheSA9IFNlcnZpY2VVdGlscy5wYXJzZVNvcnRDb2x1bW5zKHRoaXMuc29ydENvbHVtbnMpO1xuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gdmlzaWJsZS1jb2x1bW5zIHRoYXQgdGhleSBhcmVudCBpbiBvcmlnaW5hbC12aXNpYmxlLWNvbHVtbnMgaW4gbG9jYWxzdG9yYWdlXG4gICAgICAvLyBpbiB0aGlzIGNhc2UgeW91IGhhdmUgdG8gYWRkIHRoaXMgY29sdW1uIHRvIHRoaXMudmlzaWJsZUNvbEFycmF5XG4gICAgICBjb25zdCBjb2xUb0FkZEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyhvcmlnaW5hbFNvcnRDb2x1bW5zQXJyYXksIGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5KTtcbiAgICAgIGlmIChjb2xUb0FkZEluVmlzaWJsZUNvbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbFRvQWRkSW5WaXNpYmxlQ29sLmZvckVhY2goY29sQWRkID0+IHtcbiAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKGNvbEFkZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xUb0RlbEluVmlzaWJsZUNvbCA9IFV0aWwuZGlmZmVyZW5jZUFycmF5cyhpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSwgb3JpZ2luYWxTb3J0Q29sdW1uc0FycmF5KTtcbiAgICAgIGlmIChjb2xUb0RlbEluVmlzaWJsZUNvbC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbFRvRGVsSW5WaXNpYmxlQ29sLmZvckVhY2goKGNvbERlbCkgPT4ge1xuICAgICAgICAgIHRoaXMuc29ydENvbEFycmF5LmZvckVhY2goKGNvbCwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5jb2x1bW5OYW1lID09PSBjb2xEZWwuY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVuc3VyaW5nIGNvbHVtbiBleGlzdGVuY2UgYW5kIGNoZWNraW5nIGl0cyBvcmRlcmFibGUgc3RhdGVcbiAgICBmb3IgKGxldCBpID0gdGhpcy5zb3J0Q29sQXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLnNvcnRDb2xBcnJheVtpXS5jb2x1bW5OYW1lO1xuICAgICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2xOYW1lKTtcbiAgICAgIGlmICghVXRpbC5pc0RlZmluZWQob0NvbCkgfHwgIW9Db2wub3JkZXJhYmxlKSB7XG4gICAgICAgIHRoaXMuc29ydENvbEFycmF5LnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIHByb3RlY3RlZCBlbnN1cmVDb2x1bW5zT3JkZXIoKSB7XG5cbiAgICBsZXQgY29sdW1uc09yZGVyID0gW107XG4gICAgaWYgKHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIGNvbHVtbnNPcmRlciA9IHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkubWFwKGl0ZW0gPT4gaXRlbS5hdHRyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uc09yZGVyID0gdGhpcy5jb2xBcnJheS5maWx0ZXIoYXR0ciA9PiB0aGlzLnZpc2libGVDb2xBcnJheS5pbmRleE9mKGF0dHIpID09PSAtMSk7XG4gICAgICBjb2x1bW5zT3JkZXIucHVzaCguLi50aGlzLnZpc2libGVDb2xBcnJheSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnNvcnQoKGE6IE9Db2x1bW4sIGI6IE9Db2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW5zT3JkZXIuaW5kZXhPZihhLmF0dHIpID09PSAtMSkge1xuICAgICAgICAvLyBpZiBpdCBpcyBub3QgaW4gbG9jYWwgc3RvcmFnZSBiZWNhdXNlIGl0IGlzIG5ldywga2VlcCBvcmRlclxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zT3JkZXIuaW5kZXhPZihhLmF0dHIpIC0gY29sdW1uc09yZGVyLmluZGV4T2YoYi5hdHRyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gIH1cblxuICBpbml0aWFsaXplUGFyYW1zKCk6IHZvaWQge1xuICAgIC8vIElmIHZpc2libGUtY29sdW1ucyBpcyBub3QgcHJlc2VudCB0aGVuIHZpc2libGUtY29sdW1ucyBpcyBhbGwgY29sdW1uc1xuICAgIGlmICghdGhpcy52aXNpYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbEFycmF5LmZvckVhY2goKHg6IHN0cmluZykgPT4gdGhpcy5yZWdpc3RlckNvbHVtbih4KSk7XG4gICAgICB0aGlzLmVuc3VyZUNvbHVtbnNPcmRlcigpO1xuICAgIH1cbiAgICAvLyBJbml0aWFsaXplIHF1aWNrRmlsdGVyXG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXIgPSB0aGlzLnF1aWNrRmlsdGVyO1xuXG4gICAgaWYgKHRoaXMuc3RhdGUuY3VycmVudFBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgcGFnaW5hdG9yXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvciAmJiB0aGlzLnBhZ2luYXRpb25Db250cm9scykge1xuICAgICAgdGhpcy5wYWdpbmF0b3IgPSBuZXcgT0Jhc2VUYWJsZVBhZ2luYXRvcigpO1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSB0aGlzLnF1ZXJ5Um93cztcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICB0aGlzLnBhZ2luYXRvci5zaG93Rmlyc3RMYXN0QnV0dG9ucyA9IHRoaXMuc2hvd1BhZ2luYXRvckZpcnN0TGFzdEJ1dHRvbnM7XG4gICAgfVxuXG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSkpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSAhIXRoaXMuc3RhdGUuc2VsZWN0Q29sdW1uVmlzaWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY2hlY2tpbmcgdGhlIG9yaWdpbmFsIHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSB3aXRoIHNlbGVjdC1jb2x1bW4tdmlzaWJsZSBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc2VsZWN0Q29sdW1uVmlzaWJsZSlcbiAgICAgICAgJiYgdGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGUgPT09IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc2VsZWN0Q29sdW1uVmlzaWJsZSkge1xuICAgICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gISF0aGlzLnN0YXRlLnNlbGVjdENvbHVtblZpc2libGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gdGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9Jbml0aWFsaXplIHNob3cgZmlsdGVyIGJ5IGNvbHVtbiBpY29uXG4gICAgdGhpcy5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSB0aGlzLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrYm94Q29sdW1uKCk7XG5cbiAgICBpZiAodGhpcy5zdG9yZVN0YXRlKSB7XG4gICAgICAvLyBpZiBxdWVyeS1yb3dzIGluIGluaXRpYWwgY29uZmlndXJhdGlvbiBpcyBlcXVhbHMgdG8gb3JpZ2luYWwgcXVlcnktcm93cyBpbnB1dFxuICAgICAgLy8gcXVlcnlfcm93cyB3aWxsIGJlIHRoZSB2YWx1ZSBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5xdWVyeVJvd3MpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzKVxuICAgICAgICAmJiB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnF1ZXJ5Um93cyA9PT0gdGhpcy5vcmlnaW5hbFF1ZXJ5Um93cykge1xuICAgICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUucXVlcnlSb3dzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLl9zZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLl9zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLmlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKCksIFtdLCB0cnVlLCB0aGlzLmNvbXBhcmVSb3coKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb247XG4gIH1cblxuICB1cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCkge1xuICAgIGlmICghdGhpcy50YWJsZVJvd0V4cGFuZGFibGUgfHwgIXRoaXMudGFibGVSb3dFeHBhbmRhYmxlLmV4cGFuZGFibGVDb2x1bW5WaXNpYmxlKSB7IHJldHVybjsgfVxuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdID09PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QgJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1sxXSAhPT0gQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucyA9IFt0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdXS5jb25jYXQoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSwgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5zcGxpY2UoMSkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1swXSAhPT0gQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyVGFiTGlzdGVuZXIoKSB7XG4gICAgLy8gV2hlbiB0YWJsZSBpcyBjb250YWluZWQgaW50byB0YWIgY29tcG9uZW50LCBpdCBpcyBuZWNlc3NhcnkgdG8gaW5pdCB0YWJsZSBjb21wb25lbnQgd2hlbiBhdHRhY2hlZCB0byBET00uXG4gICAgdGhpcy50YWJHcm91cENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMudGFiR3JvdXBDb250YWluZXIuc2VsZWN0ZWRUYWJDaGFuZ2Uuc3Vic2NyaWJlKChldnQpID0+IHtcbiAgICAgIGxldCBpbnRlcnZhbDtcbiAgICAgIGNvbnN0IHRpbWVyQ2FsbGJhY2sgPSAodGFiOiBNYXRUYWIpID0+IHtcbiAgICAgICAgaWYgKHRhYiAmJiB0YWIuY29udGVudC5pc0F0dGFjaGVkKSB7XG4gICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gICAgICAgICAgaWYgKHRhYiA9PT0gdGhpcy50YWJDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zaWRlVGFiQnVnV29ya2Fyb3VuZCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVuZGluZ1F1ZXJ5KSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlcnlEYXRhKHRoaXMucGVuZGluZ1F1ZXJ5RmlsdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsgdGltZXJDYWxsYmFjayhldnQudGFiKTsgfSwgMTAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNpZGVUYWJCdWdXb3JrYXJvdW5kKCkge1xuICAgIHRoaXMucmVmcmVzaFNvcnRIZWFkZXJzKCk7XG4gIH1cblxuICByZWdpc3RlclNvcnRMaXN0ZW5lcigpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zb3J0KSkge1xuICAgICAgdGhpcy5zb3J0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5zb3J0U3Vic2NyaXB0aW9uID0gdGhpcy5zb3J0Lm9Tb3J0Q2hhbmdlLnN1YnNjcmliZSh0aGlzLm9uU29ydENoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuc29ydC5zZXRNdWx0aXBsZVNvcnQodGhpcy5tdWx0aXBsZVNvcnQpO1xuICAgIH1cblxuXG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydGluZ1N1YmplY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvKiB0aGUgbG9hZGluZ1NvcnRpbmdTdWJqZWN0IG5vdCByZWZyZXNoIGluIHRoZSB0ZW1wbGF0ZVxuICAgIGJlY2F1c2UgY2hhbmdlIGRldGVjdGlvbiBub3Qgd29ya2luZyB3aXRoIHZpcnR1YWwgc2Nyb2xsaW5nICovXG4gICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICBpZiAobmdab25lKSB7XG4gICAgICBuZ1pvbmUucnVuKCgpID0+IHRoaXMubG9hZGluZ1NvcnRpbmdTdWJqZWN0Lm5leHQodmFsdWUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRpbmdTb3J0aW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uU29ydENoYW5nZShzb3J0QXJyYXk6IGFueVtdKSB7XG4gICAgdGhpcy5zb3J0Q29sQXJyYXkgPSBbXTtcbiAgICBzb3J0QXJyYXkuZm9yRWFjaCgoc29ydCkgPT4ge1xuICAgICAgaWYgKHNvcnQuZGlyZWN0aW9uICE9PSAnJykge1xuICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiBzb3J0LmlkLFxuICAgICAgICAgIGFzY2VuZGVudDogc29ydC5kaXJlY3Rpb24gPT09IENvZGVzLkFTQ19TT1JUXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTb3J0aW5nU3ViamVjdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRhc291cmNlKCkge1xuICAgIC8vRGVsZXRlZCBwcmV2aW91cyBpbnN0YW5jZSBhbmQgc3Vic2NyaWJlcnNcbiAgICBkZWxldGUgdGhpcy5kYXRhU291cmNlO1xuICAgIGlmICh0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlKSB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBkYXRhU291cmNlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlU2VydmljZS5nZXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpIHtcbiAgICB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlID0gdGhpcy5kYXRhU291cmNlLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnN0b3BFZGl0aW9uKCk7XG4gICAgICB0aGlzLmNoZWNrU2VsZWN0ZWRJdGVtRGF0YSgpO1xuICAgICAgaWYgKCF0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMudXBkYXRlU29ydGluZ1N1YmplY3QoZmFsc2UpO1xuICAgICAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBhbmRlZFJvd0NvbnRhaW5lckNsYXNzKHJvd0luZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBPVGFibGVDb21wb25lbnQuRVhQQU5ERURfUk9XX0NPTlRBSU5FUl9DTEFTUyArIHJvd0luZGV4O1xuICB9XG5cbiAgcHVibGljIGdldEV4cGFuZGFibGVJdGVtcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUl0ZW0uc2VsZWN0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdG8gZXhwYW5kIG9yIGNvbGxhcHNlIHRoZSBleHBhbmRhYmxlIHJvdy5cbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHBhcmFtIHJvd0luZGV4XG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHVibGljIHRvb2dsZVJvd0V4cGFuZGFibGUoaXRlbTogYW55LCByb3dJbmRleDogbnVtYmVyLCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRhYmxlSXRlbS50b2dnbGUoaXRlbSk7XG5cbiAgICBpZiAodGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XSkge1xuICAgICAgdGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XS5kZXRhY2goKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRTdGF0ZUV4cGFuZChpdGVtKSA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIGNvbnN0IGV2ZW50VGFibGVSb3dFeHBhbmRhYmxlQ2hhbmdlID0gdGhpcy5lbWl0VGFibGVSb3dFeHBhbmRhYmxlQ2hhbmdlRXZlbnQoaXRlbSwgcm93SW5kZXgpO1xuICAgICAgdGhpcy50YWJsZVJvd0V4cGFuZGFibGUub25Db2xsYXBzZWQuZW1pdChldmVudFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9ydGFsSG9zdFtyb3dJbmRleF0gPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxuICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLicgKyB0aGlzLmdldEV4cGFuZGVkUm93Q29udGFpbmVyQ2xhc3Mocm93SW5kZXgpKSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5hcHBSZWYsXG4gICAgICAgIHRoaXMuaW5qZWN0b3JcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlUG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLnRlbXBsYXRlUmVmLCB0aGlzLl92aWV3Q29udGFpbmVyUmVmLCB7ICRpbXBsaWNpdDogaXRlbSB9KTtcbiAgICAgIHRoaXMucG9ydGFsSG9zdFtyb3dJbmRleF0uYXR0YWNoVGVtcGxhdGVQb3J0YWwodGVtcGxhdGVQb3J0YWwpO1xuICAgICAgY29uc3QgZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UgPSB0aGlzLmVtaXRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2VFdmVudChpdGVtLCByb3dJbmRleCk7XG4gICAgICB0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5vbkV4cGFuZGVkLmVtaXQoZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZUV2ZW50KGRhdGEsIHJvd0luZGV4KSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgT1RhYmxlUm93RXhwYW5kZWRDaGFuZ2UoKTtcbiAgICBldmVudC5yb3dJbmRleCA9IHJvd0luZGV4O1xuICAgIGV2ZW50LmRhdGEgPSBkYXRhO1xuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgcHVibGljIGlzRXhwYW5kZWQoZGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUl0ZW0uaXNTZWxlY3RlZChkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGF0ZUV4cGFuZChyb3cpIHtcbiAgICByZXR1cm4gdGhpcy5pc0V4cGFuZGVkKHJvdykgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCc7XG4gIH1cblxuICBwdWJsaWMgaXNDb2x1bW5FeHBhbmRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbikpID8gdGhpcy5fb1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLnZpc2libGUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldCBoYXNFeHBhbmRlZFJvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpO1xuICB9XG5cbiAgcHVibGljIGhhc0luc2VydGFibGVSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtVmlzaWJsZUNvbHVtbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBtYW5hZ2VzIHRoZSBjYWxsIHRvIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmaWx0ZXJcbiAgICogQHBhcmFtIG92cnJBcmdzXG4gICAqL1xuICBxdWVyeURhdGEoZmlsdGVyPzogYW55LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKSB7XG4gICAgLy8gSWYgdGFiIGV4aXN0cyBhbmQgaXMgbm90IGFjdGl2ZSB0aGVuIHdhaXQgZm9yIHF1ZXJ5RGF0YVxuICAgIGlmICh0aGlzLmlzSW5zaWRlSW5hY3RpdmVUYWIoKSkge1xuICAgICAgdGhpcy5wZW5kaW5nUXVlcnkgPSB0cnVlO1xuICAgICAgdGhpcy5wZW5kaW5nUXVlcnlGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ1F1ZXJ5ID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUXVlcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnF1ZXJ5Q2VsbFJlbmRlcmVycygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBzdXBlci5xdWVyeURhdGEoZmlsdGVyLCBvdnJyQXJncyk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNJbnNpZGVJbmFjdGl2ZVRhYigpOiBib29sZWFuIHtcbiAgICBsZXQgcmVzdWx0OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGFiQ29udGFpbmVyICYmIHRoaXMudGFiR3JvdXBDb250YWluZXIpIHtcbiAgICAgIHJlc3VsdCA9ICEodGhpcy50YWJDb250YWluZXIuaXNBY3RpdmUgfHwgKHRoaXMudGFiR3JvdXBDb250YWluZXIuc2VsZWN0ZWRJbmRleCA9PT0gdGhpcy50YWJDb250YWluZXIucG9zaXRpb24pKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGxldCBmaWx0ZXIgPSBleGlzdGluZ0ZpbHRlcjtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpbHRlcikubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBwYXJlbnRJdGVtRXhwciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25Gcm9tT2JqZWN0KGZpbHRlcik7XG4gICAgICAgIGZpbHRlciA9IHt9O1xuICAgICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0gPSBwYXJlbnRJdGVtRXhwcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJlQ29sRmlsdGVyID0gdGhpcy5nZXRDb2x1bW5GaWx0ZXJzRXhwcmVzc2lvbigpO1xuICAgICAgLy8gQWRkIGNvbHVtbiBmaWx0ZXJzIGJhc2ljIGV4cHJlc3Npb24gdG8gY3VycmVudCBmaWx0ZXJcbiAgICAgIGlmIChiZUNvbEZpbHRlciAmJiAhVXRpbC5pc0RlZmluZWQoZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldKSkge1xuICAgICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0gPSBiZUNvbEZpbHRlcjtcbiAgICAgIH0gZWxzZSBpZiAoYmVDb2xGaWx0ZXIpIHtcbiAgICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldID1cbiAgICAgICAgICBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRDb21wbGV4RXhwcmVzc2lvbihmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0sIGJlQ29sRmlsdGVyLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZ2V0Q29tcG9uZW50RmlsdGVyKGZpbHRlcik7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UXVpY2tGaWx0ZXJFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSAmJiB0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5maWx0ZXJFeHByZXNzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29sdW1uRmlsdGVyc0V4cHJlc3Npb24oKTogRXhwcmVzc2lvbiB7XG4gICAgLy8gQXBwbHkgY29sdW1uIGZpbHRlcnNcbiAgICBjb25zdCBjb2x1bW5GaWx0ZXJzOiBPQ29sdW1uVmFsdWVGaWx0ZXJbXSA9IHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlcnMoKTtcbiAgICBjb25zdCBiZUNvbHVtbkZpbHRlcnM6IEFycmF5PEV4cHJlc3Npb24+ID0gW107XG4gICAgY29sdW1uRmlsdGVycy5mb3JFYWNoKGNvbEZpbHRlciA9PiB7XG4gICAgICAvLyBQcmVwYXJlIGJhc2ljIGV4cHJlc3Npb25zXG4gICAgICBzd2l0Y2ggKGNvbEZpbHRlci5vcGVyYXRvcikge1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuSU46XG4gICAgICAgICAgaWYgKFV0aWwuaXNBcnJheShjb2xGaWx0ZXIudmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgYmVzSW46IEFycmF5PEV4cHJlc3Npb24+ID0gY29sRmlsdGVyLnZhbHVlcy5tYXAodmFsdWUgPT4gRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkVxdWFscyhjb2xGaWx0ZXIuYXR0ciwgdmFsdWUpKTtcbiAgICAgICAgICAgIGxldCBiZUluOiBFeHByZXNzaW9uID0gYmVzSW4ucG9wKCk7XG4gICAgICAgICAgICBiZXNJbi5mb3JFYWNoKGJlID0+IHtcbiAgICAgICAgICAgICAgYmVJbiA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGJlSW4sIGJlLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfT1IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBiZUNvbHVtbkZpbHRlcnMucHVzaChiZUluKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5CRVRXRUVOOlxuICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkoY29sRmlsdGVyLnZhbHVlcykgJiYgY29sRmlsdGVyLnZhbHVlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlRnJvbSA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25Nb3JlRXF1YWwoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXNbMF0pO1xuICAgICAgICAgICAgY29uc3QgYmVUbyA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MZXNzRXF1YWwoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXNbMV0pO1xuICAgICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oYmVGcm9tLCBiZVRvLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuRVFVQUw6XG4gICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkxpa2UoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXMpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUw6XG4gICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkxlc3NFcXVhbChjb2xGaWx0ZXIuYXR0ciwgY29sRmlsdGVyLnZhbHVlcykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTU9SRV9FUVVBTDpcbiAgICAgICAgICBiZUNvbHVtbkZpbHRlcnMucHVzaChGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTW9yZUVxdWFsKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICAvLyBCdWlsZCBjb21wbGV0ZSBjb2x1bW4gZmlsdGVycyBiYXNpYyBleHByZXNzaW9uXG4gICAgbGV0IGJlQ29sRmlsdGVyOiBFeHByZXNzaW9uID0gYmVDb2x1bW5GaWx0ZXJzLnBvcCgpO1xuICAgIGJlQ29sdW1uRmlsdGVycy5mb3JFYWNoKGJlID0+IHtcbiAgICAgIGJlQ29sRmlsdGVyID0gRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oYmVDb2xGaWx0ZXIsIGJlLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYmVDb2xGaWx0ZXI7XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uSW5mbyhxdWVyeVJlczogYW55KSB7XG4gICAgc3VwZXIudXBkYXRlUGFnaW5hdGlvbkluZm8ocXVlcnlSZXMpO1xuICB9XG5cbiAgaW5pdFZpZXdQb3J0KGRhdGE6IGFueVtdKSB7XG5cbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQgJiYgZGF0YSkge1xuICAgICAgY29uc3QgaGVhZGVyRWxSZWYgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihoZWFkZXJTZWxlY3Rvcik7XG4gICAgICBjb25zdCBmb290ZXJFbFJlZiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGZvb3RlclNlbGVjdG9yKTtcbiAgICAgIGNvbnN0IHJvd0VsUmVmID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3Iocm93U2VsZWN0b3IpO1xuXG4gICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSBoZWFkZXJFbFJlZiA/IGhlYWRlckVsUmVmLm9mZnNldEhlaWdodCA6IDA7XG4gICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSBmb290ZXJFbFJlZiA/IGZvb3RlckVsUmVmLm9mZnNldEhlaWdodCA6IDA7XG4gICAgICBjb25zdCByb3dIZWlnaHQgPSByb3dFbFJlZiA/IHJvd0VsUmVmLm9mZnNldEhlaWdodCA6IE9UYWJsZUNvbXBvbmVudC5ERUZBVUxUX1JPV19IRUlHSFQ7XG5cbiAgICAgIC8vIHNldCBjb25maWcgdmlld3BvcnRcbiAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kuc2V0Q29uZmlnKHJvd0hlaWdodCwgaGVhZGVySGVpZ2h0LCBmb290ZXJIZWlnaHQpO1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNSZW5kZXJlckRhdGEgIT09IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneS5kYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGEoZGF0YTogYW55LCBzcWxUeXBlczogYW55KSB7XG4gICAgdGhpcy5kYW9UYWJsZS5zcWxUeXBlc0NoYW5nZS5uZXh0KHNxbFR5cGVzKTtcbiAgICB0aGlzLmRhb1RhYmxlLnNldERhdGFBcnJheShkYXRhKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblBhZ2luYXRlZERhdGFMb2FkZWQsIGRhdGEpO1xuICAgIH1cbiAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uRGF0YUxvYWRlZCwgdGhpcy5kYW9UYWJsZS5kYXRhKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5TZXRTdGF0aWNEYXRhKHN0YXRpY0RhdGEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuY2FuU2V0U3RhdGljRGF0YShzdGF0aWNEYXRhKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLmRhb1RhYmxlKTtcbiAgfVxuXG4gIHNob3dEaWFsb2dFcnJvcihlcnJvcjogc3RyaW5nLCBlcnJvck9wdGlvbmFsPzogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGVycm9yKSAmJiAhVXRpbC5pc09iamVjdChlcnJvcikpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCBlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hbGVydCgnRVJST1InLCBlcnJvck9wdGlvbmFsKTtcbiAgICB9XG4gIH1cblxuICBwcm9qZWN0Q29udGVudENoYW5nZWQoKSB7XG4gICAgdGhpcy5sb2FkaW5nU2Nyb2xsU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgIHRoaXMuaW5pdFZpZXdQb3J0KHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEpO1xuXG4gICAgaWYgKHRoaXMucHJldmlvdXNSZW5kZXJlckRhdGEgIT09IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEpIHtcbiAgICAgIHRoaXMucHJldmlvdXNSZW5kZXJlckRhdGEgPSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhO1xuICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vbkNvbnRlbnRDaGFuZ2UsIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlLnNlbGVjdGlvbiAmJiB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5nZXRTZWxlY3RlZEl0ZW1zKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNoZWNrU2VsZWN0ZWRJdGVtRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldEF0dHJpYnV0ZXNWYWx1ZXNUb1F1ZXJ5KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBzdXBlci5nZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpO1xuICAgIGlmICh0aGlzLmF2b2lkUXVlcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSBjb2x1bW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGNvbCA9IGNvbHVtbnNbaV07XG4gICAgICAgIGlmICh0aGlzLmF2b2lkUXVlcnlDb2x1bW5zLmluZGV4T2YoY29sKSAhPT0gLTEpIHtcbiAgICAgICAgICBjb2x1bW5zLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIGdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcjogb2JqZWN0LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgcXVlcnlBcmd1bWVudHMgPSBzdXBlci5nZXRRdWVyeUFyZ3VtZW50cyhmaWx0ZXIsIG92cnJBcmdzKTtcbiAgICBPYmplY3QuYXNzaWduKHF1ZXJ5QXJndW1lbnRzWzNdLCB0aGlzLmdldFNxbFR5cGVzRm9yRmlsdGVyKHF1ZXJ5QXJndW1lbnRzWzFdKSk7XG4gICAgT2JqZWN0LmFzc2lnbihxdWVyeUFyZ3VtZW50c1szXSwgb3ZyckFyZ3MgPyBvdnJyQXJncy5zcWx0eXBlcyB8fCB7fSA6IHt9KTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgcXVlcnlBcmd1bWVudHNbNV0gPSB0aGlzLnBhZ2luYXRvci5pc1Nob3dpbmdBbGxSb3dzKHF1ZXJ5QXJndW1lbnRzWzVdKSA/IHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgOiBxdWVyeUFyZ3VtZW50c1s1XTtcbiAgICAgIHF1ZXJ5QXJndW1lbnRzWzZdID0gdGhpcy5zb3J0Q29sQXJyYXk7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeUFyZ3VtZW50cztcbiAgfVxuXG4gIGdldFNxbFR5cGVzRm9yRmlsdGVyKGZpbHRlcik6IG9iamVjdCB7XG4gICAgY29uc3QgYWxsU3FsVHlwZXMgPSB0aGlzLmdldFNxbFR5cGVzKCk7XG4gICAgY29uc3Qgc3FsVHlwZXMgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhhbGxTcWxUeXBlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKGZpbHRlci5pbmRleE9mKGtleSkgIT09IC0xICYmIGFsbFNxbFR5cGVzW2tleV0gIT09IFNRTFR5cGVzLk9USEVSKSB7XG4gICAgICAgIHNxbFR5cGVzW2tleV0gPSBhbGxTcWxUeXBlc1trZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzcWxUeXBlcztcbiAgfVxuXG4gIG9uRXhwb3J0QnV0dG9uQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25FeHBvcnRCdXR0b25DbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2VDb2x1bW5zVmlzaWJpbGl0eUNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQ2hhbmdlQ29sdW1uc1Zpc2liaWxpdHlDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25NYXRUYWJsZUNvbnRlbnRDaGFuZ2VkKCkge1xuICAgIC8vXG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgbmF2aWdhdGlvbiB0byBuZXcgaXRlbSBpbnNlcnRpb25cbiAgICovXG4gIGFkZCgpIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgaWYgKHRoaXMuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX0lOU0VSVCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIuaW5zZXJ0RGV0YWlsKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBzZWxlY3RlZCByb3dzXG4gICAqIEBwYXJhbSBbY2xlYXJTZWxlY3RlZEl0ZW1zXVxuICAgKi9cbiAgcmVtb3ZlKGNsZWFyU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIGlmICh0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ01FU1NBR0VTLk9QRVJBVElPTl9OT1RfQUxMT1dFRF9SRUFET05MWScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbihQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9ERUxFVEUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICBpZiAoc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybSgnQ09ORklSTScsICdNRVNTQUdFUy5DT05GSVJNX0RFTEVURScpLnRoZW4ocmVzID0+IHtcbiAgICAgIGlmIChyZXMgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVNlcnZpY2UgJiYgKHRoaXMuZGVsZXRlTWV0aG9kIGluIHRoaXMuZGF0YVNlcnZpY2UpICYmIHRoaXMuZW50aXR5ICYmICh0aGlzLmtleXNBcnJheS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBTZXJ2aWNlVXRpbHMuZ2V0QXJyYXlQcm9wZXJ0aWVzKHNlbGVjdGVkSXRlbXMsIHRoaXMua2V5c0FycmF5KTtcbiAgICAgICAgICBjb25zdCBzcWxUeXBlc0FyZyA9IHRoaXMuZ2V0U3FsVHlwZXNPZktleXMoKTtcbiAgICAgICAgICB0aGlzLmRhb1RhYmxlLnJlbW92ZVF1ZXJ5KGZpbHRlcnMsIHNxbFR5cGVzQXJnKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5leHQ6ICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblJvd0RlbGV0ZWQsIHNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnJvcjogKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dEaWFsb2dFcnJvcihlLCAnTUVTU0FHRVMuRVJST1JfREVMRVRFJyk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRW5zdXJpbmcgdGhhdCB0aGUgZGVsZXRlZCBpdGVtcyB3aWxsIG5vdCBsb25nZXIgYmUgcGFydCBvZiB0aGUgc2VsZWN0aW9uTW9kZWxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtTGF5b3V0TWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtTGF5b3V0TWFuYWdlci5jbG9zZURldGFpbHMoZmlsdGVycywgeyBleGl0V2l0aG91dENvbmZpcm1hdGlvbjogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVMb2NhbEl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2xlYXJTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hzIHRhYmxlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhbmQgc2VsZWN0IGFsbCBjaGVja2JveFxuICAgKi9cbiAgc2hvd0FuZFNlbGVjdEFsbENoZWNrYm94KCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKCkpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdEFsbENoZWNrYm94KSB7XG4gICAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgICAgIHRoaXMuc2VsZWN0QWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChjbGVhclNlbGVjdGVkSXRlbXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgcGFnZSBpbmRleFxuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDA7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoY2xlYXJTZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVsb2FkcyBkYXRhXG4gICAqL1xuICByZWxvYWREYXRhKGNsZWFyU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbihQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9SRUZSRVNIKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5yZWZyZXNoU2VsZWN0aW9uKCk7XG4gICAgaWYgKGNsZWFyU2VsZWN0ZWRJdGVtcykge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nUXVlcnkgPSB0cnVlO1xuICAgIGxldCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBxdWVyeUFyZ3MgPSB7XG4gICAgICAgIG9mZnNldDogdGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzLFxuICAgICAgICBsZW5ndGg6IHRoaXMucXVlcnlSb3dzXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLnN0b3BFZGl0aW9uKGZhbHNlKTtcbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBoYW5kbGVDbGljayhyb3c6IGFueSwgY29sdW1uOiBPQ29sdW1uLCByb3dJbmRleDogbnVtYmVyLCBjZWxsUmVmOiBFbGVtZW50UmVmLCBldmVudDogTW91c2VFdmVudCkge1xuXG4gICAgdGhpcy5jbGlja1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2xpY2tQcmV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLm9lbmFibGVkICYmICF0aGlzLnJlYWRPbmx5ICYmIGNvbHVtbi5lZGl0b3JcbiAgICAgICAgICAmJiAodGhpcy5kZXRhaWxNb2RlICE9PSBDb2Rlcy5ERVRBSUxfTU9ERV9DTElDSylcbiAgICAgICAgICAmJiAodGhpcy5lZGl0aW9uTW9kZSA9PT0gQ29kZXMuRURJVElPTl9NT0RFX0NMSUNLKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVDb2x1bW5FZGl0aW9uKGNvbHVtbiwgcm93LCBjZWxsUmVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRvSGFuZGxlQ2xpY2socm93LCBjb2x1bW4uYXR0ciwgcm93SW5kZXgsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jbGlja1ByZXZlbnQgPSBmYWxzZTtcbiAgICB9LCB0aGlzLmNsaWNrRGVsYXkpO1xuXG4gIH1cblxuICBkb0hhbmRsZUNsaWNrKHJvdzogYW55LCBjb2x1bW46IHN0cmluZywgcm93SW5kZXg6IG51bWJlciwgJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkgJiYgdGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9lbmFibGVkIHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCh0aGlzLmRldGFpbE1vZGUgPT09IENvZGVzLkRFVEFJTF9NT0RFX0NMSUNLKSkge1xuICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4LCBtb3VzZUV2ZW50OiAkZXZlbnQsIGNvbHVtbk5hbWU6IGNvbHVtbiwgY2VsbDogcm93W2NvbHVtbl0gfSk7XG4gICAgICB0aGlzLnNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKSAmJiAoJGV2ZW50LmN0cmxLZXkgfHwgJGV2ZW50Lm1ldGFLZXkpKSB7XG4gICAgICAvLyBUT0RPOiB0ZXN0ICRldmVudC5tZXRhS2V5IG9uIE1BQ1xuICAgICAgdGhpcy5zZWxlY3RlZFJvdyhyb3cpO1xuICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4LCBtb3VzZUV2ZW50OiAkZXZlbnQsIGNvbHVtbk5hbWU6IGNvbHVtbiwgY2VsbDogcm93W2NvbHVtbl0gfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKCkgJiYgJGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlU2VsZWN0aW9uKHJvdyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1NlbGVjdGlvbk1vZGVOb25lKCkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQocm93KSAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmVkaXRpb25FbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25BbmRFZGl0aW5nKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXgsIG1vdXNlRXZlbnQ6ICRldmVudCwgY29sdW1uTmFtZTogY29sdW1uLCBjZWxsOiByb3dbY29sdW1uXSB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNdWx0aXBsZVNlbGVjdGlvbihpdGVtOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmluZGV4T2YodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRbMF0pO1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuaW5kZXhPZihpdGVtKTtcbiAgICAgIGNvbnN0IGluZGV4RnJvbSA9IE1hdGgubWluKGZpcnN0LCBsYXN0KTtcbiAgICAgIGNvbnN0IGluZGV4VG8gPSBNYXRoLm1heChmaXJzdCwgbGFzdCk7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLnNsaWNlKGluZGV4RnJvbSwgaW5kZXhUbyArIDEpLmZvckVhY2goZSA9PiB0aGlzLnNlbGVjdGVkUm93KGUpKTtcbiAgICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25DbGljaywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpIHtcbiAgICBzdXBlci5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuc3RvcmVQYWdpbmF0aW9uU3RhdGUgPSB0cnVlO1xuICB9XG5cbiAgaGFuZGxlRG91YmxlQ2xpY2socm93OiBhbnksIGNvbHVtbjogT0NvbHVtbiwgcm93SW5kZXg6IG51bWJlciwgY2VsbFJlZjogRWxlbWVudFJlZiwgJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xpY2tUaW1lcik7XG4gICAgdGhpcy5jbGlja1ByZXZlbnQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIGlmICh0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ01FU1NBR0VTLk9QRVJBVElPTl9OT1RfQUxMT1dFRF9SRUFET05MWScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vZW5hYmxlZCAmJiBjb2x1bW4uZWRpdG9yXG4gICAgICAmJiAoIUNvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpXG4gICAgICAmJiAoQ29kZXMuaXNEb3VibGVDbGlja01vZGUodGhpcy5lZGl0aW9uTW9kZSkpKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlQ29sdW1uRWRpdGlvbihjb2x1bW4sIHJvdywgY2VsbFJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25Eb3VibGVDbGljay5lbWl0KHsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCwgbW91c2VFdmVudDogJGV2ZW50LCBjb2x1bW5OYW1lOiBjb2x1bW4uYXR0ciwgY2VsbDogcm93W2NvbHVtbi5hdHRyXSB9KTtcbiAgICAgIGlmICh0aGlzLm9lbmFibGVkICYmIENvZGVzLmlzRG91YmxlQ2xpY2tNb2RlKHRoaXMuZGV0YWlsTW9kZSkpIHtcbiAgICAgICAgdGhpcy5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IGVkaXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuc29tZShpdGVtID0+IGl0ZW0uZWRpdGluZyk7XG4gIH1cblxuICBoYW5kbGVET01DbGljayhldmVudCkge1xuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5Q29udGFpbmVyID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstb3ZlcmxheS1jb250YWluZXInKVswXTtcbiAgICBpZiAob3ZlcmxheUNvbnRhaW5lciAmJiBvdmVybGF5Q29udGFpbmVyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZUNvbnRhaW5lciA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuby10YWJsZS1jb250YWluZXInKTtcbiAgICBjb25zdCB0YWJsZUNvbnRlbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm8tdGFibGUtY29udGFpbmVyIHRhYmxlLm1hdC10YWJsZScpO1xuICAgIGlmICh0YWJsZUNvbnRhaW5lciAmJiB0YWJsZUNvbnRlbnQgJiYgdGFibGVDb250YWluZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAhdGFibGVDb250ZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aXZhdGVDb2x1bW5FZGl0aW9uKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnksIGNlbGxSZWY6IGFueSkge1xuICAgIGlmIChjZWxsUmVmICYmIGNvbHVtbi5lZGl0aW5nICYmIHRoaXMuZWRpdGluZ0NlbGwgPT09IGNlbGxSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0T0NvbHVtblBlcm1pc3Npb25zKGNvbHVtbi5hdHRyKTtcbiAgICBpZiAoY29sdW1uUGVybWlzc2lvbnMuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHtjb2x1bW4uYXR0cn0gZWRpdGlvbiBub3QgYWxsb3dlZCBkdWUgdG8gcGVybWlzc2lvbnNgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uQW5kRWRpdGluZygpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICB0aGlzLmVkaXRpbmdDZWxsID0gY2VsbFJlZjtcbiAgICBjb25zdCByb3dEYXRhID0ge307XG4gICAgdGhpcy5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICByb3dEYXRhW2tleV0gPSByb3dba2V5XTtcbiAgICB9KTtcbiAgICByb3dEYXRhW2NvbHVtbi5hdHRyXSA9IHJvd1tjb2x1bW4uYXR0cl07XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gcm93O1xuICAgIGNvbHVtbi5lZGl0aW5nID0gdHJ1ZTtcbiAgICBjb2x1bW4uZWRpdG9yLnN0YXJ0RWRpdGlvbihyb3dEYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZUNlbGxEYXRhKGNvbHVtbjogT0NvbHVtbiwgZGF0YTogYW55LCBzYXZlQ2hhbmdlczogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX1VQREFURSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBPYnNlcnZhYmxlKGlubmVyT2JzZXJ2ZXIgPT4ge1xuICAgICAgICBpbm5lck9ic2VydmVyLmVycm9yKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGNvbHVtbi5lZGl0aW5nID0gZmFsc2U7XG4gICAgaWYgKHNhdmVDaGFuZ2VzICYmIHRoaXMuZWRpdGluZ1JvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZWRpdGluZ1JvdywgZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuc3RvcEVkaXRpb24oKTtcbiAgICBpZiAoc2F2ZUNoYW5nZXMgJiYgY29sdW1uLmVkaXRvci51cGRhdGVSZWNvcmRPbkVkaXQpIHtcbiAgICAgIGNvbnN0IHRvVXBkYXRlID0ge307XG4gICAgICB0b1VwZGF0ZVtjb2x1bW4uYXR0cl0gPSBkYXRhW2NvbHVtbi5hdHRyXTtcbiAgICAgIGNvbnN0IGt2ID0gdGhpcy5leHRyYWN0S2V5c0Zyb21SZWNvcmQoZGF0YSk7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVSZWNvcmQoa3YsIHRvVXBkYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRLZXlzVmFsdWVzKCk6IGFueVtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKHJvd1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2hvd3NTZWxlY3RzKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblNob3dzU2VsZWN0cygpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpemVDaGVja2JveENvbHVtbigpIHtcbiAgICAvLyBJbml0aWFsaXppbmcgcm93IHNlbGVjdGlvbiBsaXN0ZW5lclxuICAgIGlmICghdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uRGF0YTogU2VsZWN0aW9uQ2hhbmdlPGFueT4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyAmJiBzZWxlY3Rpb25EYXRhKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblJvd1NlbGVjdGVkLCBzZWxlY3Rpb25EYXRhLmFkZGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEucmVtb3ZlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUm93RGVzZWxlY3RlZCwgc2VsZWN0aW9uRGF0YS5yZW1vdmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkNvbHVtblN0YXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0aW9uQ29sdW1uU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcbiAgICAgICYmIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnNbMF0gIT09IENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmICF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXG4gICAgICAmJiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdID09PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMuc2hpZnQoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtUm93U2VsZWN0ZWRJbkN1cnJlbnREYXRhKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSA/IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZmlsdGVyKHggPT4gIXRoaXMuaXNEaXNhYmxlQ2hlY2tib3goeCkgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHgpKS5sZW5ndGggOiAwO1xuICB9XG5cbiAgcHVibGljIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1Sb3dzID4gMCAmJiBudW1TZWxlY3RlZCAhPT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBtYXN0ZXJUb2dnbGUoZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlKTogdm9pZCB7XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0QWxsKCkgOiB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5zZXRTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3Rpb25DaGVja2JveFRvZ2dsZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UsIHJvdzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlU2luZ2xlKCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0ZWRSb3cocm93KSA6IHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgdGhpcy5zdGF0ZS5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RlZFJvdyhyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWQocm93KTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMuc3RhdGUuc2VsZWN0aW9uID0gW107XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGVkKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZUNoZWNrYm94KGl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQoaXRlbSkpIHtcbiAgICAgIC8qKlRoZSBzZWxlY3RlZCBpdGVtIGlzIGNsZWFyZWQgaWYgdGhlIGl0ZW0gY2hhbmdlcyB2YWx1ZSovXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcihpdGVtKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRCeUtleXMoa2V5VmFsdWVzOiBBcnJheTxhbnk+KSB7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5nZXREYXRhQXJyYXkoKS5maWx0ZXIocm93ID0+IHtcbiAgICAgIHJldHVybiBrZXlWYWx1ZXMuZmluZEluZGV4KGtleVZhbHVlID0+IHJvd1t0aGlzLmtleXNdID09PSBrZXlWYWx1ZSkgPiAtMTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoLi4ucm93c1RvU2VsZWN0KTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQnlNdWx0aXBsZUtleXMoa2V5VmFsdWVzOiBBcnJheTxPYmplY3Q+KSB7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5nZXREYXRhQXJyYXkoKS5maWx0ZXIocm93ID0+IHtcbiAgICAgIHJldHVybiBrZXlWYWx1ZXMuZmluZEluZGV4KGtleVZhbHVlID0+XG4gICAgICAgIE9iamVjdC5rZXlzKGtleVZhbHVlKS5ldmVyeShrZXkgPT4ga2V5VmFsdWVba2V5XSA9PT0gcm93W2tleV0pXG4gICAgICApPi0xO1xuICAgIH0pO1xuICAgIHJvd3NUb1NlbGVjdC5ldmVyeShyb3dUb1NlbGVjdCA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93VG9TZWxlY3QpKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQnlSb3dJZHMocm93SWRzOiBBcnJheTxudW1iZXI+KSB7XG4gICAgcm93SWRzLmZvckVhY2gocm93SWQgPT4gdGhpcy5zZWxlY3RlZFJvdyh0aGlzLmdldERhdGFBcnJheSgpW3Jvd0lkXSkpO1xuICB9XG5cbiAgZ2V0IHNob3dEZWxldGVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlQnV0dG9uO1xuICB9XG5cbiAgZ2V0VHJhY2tCeUZ1bmN0aW9uKCk6IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4ge1xuXG4gICAgICBsZXQgaXRlbUlkOiBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKHRoaXMuaXNHcm91cChpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgaXRlbUlkICs9IGl0ZW0uY29sdW1uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5c0xlbmdodCA9IHNlbGYua2V5c0FycmF5Lmxlbmd0aDtcbiAgICAgICAgc2VsZi5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gaWR4IDwgKGtleXNMZW5naHQgLSAxKSA/ICc7JyA6ICcnO1xuICAgICAgICAgIGl0ZW1JZCArPSBpdGVtW2tleV0gKyBzdWZmaXg7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNBc3luY0FuZFZpc2libGVDb2xzID0gdGhpcy5hc3luY0xvYWRDb2x1bW5zLnNvbWUoYyA9PiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKGMpKTtcbiAgICAgIGlmIChzZWxmLmFzeW5jTG9hZENvbHVtbnMubGVuZ3RoICYmIGhhc0FzeW5jQW5kVmlzaWJsZUNvbHMgJiYgIXNlbGYuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgc2VsZi5xdWVyeVJvd0FzeW5jRGF0YShpbmRleCwgaXRlbSk7XG4gICAgICAgIGlmIChzZWxmLnBhZ2luYXRvciAmJiBpbmRleCA9PT0gKHNlbGYucGFnaW5hdG9yLnBhZ2VTaXplIC0gMSkpIHtcbiAgICAgICAgICBzZWxmLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1JZDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcXVlcnlSb3dBc3luY0RhdGEocm93SW5kZXg6IG51bWJlciwgcm93RGF0YTogYW55KSB7XG4gICAgY29uc3Qga3YgPSBTZXJ2aWNlVXRpbHMuZ2V0T2JqZWN0UHJvcGVydGllcyhyb3dEYXRhLCB0aGlzLmtleXNBcnJheSk7XG4gICAgLy8gUmVwZWF0aW5nIGNoZWNraW5nIG9mIHZpc2libGUgY29sdW1uXG4gICAgY29uc3QgYXYgPSB0aGlzLmFzeW5jTG9hZENvbHVtbnMuZmlsdGVyKGMgPT4gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5pbmRleE9mKGMpICE9PSAtMSk7XG4gICAgaWYgKGF2Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2tpcHBpbmcgcXVlcnkgaWYgdGhlcmUgYXJlIG5vdCB2aXNpYmxlIGFzeW5jcm9uIGNvbHVtbnNcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUXVlcnlBcmdzID0gW2t2LCBhdiwgdGhpcy5lbnRpdHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuICAgIGlmICh0aGlzLmRhdGFTZXJ2aWNlICYmIChxdWVyeU1ldGhvZE5hbWUgaW4gdGhpcy5kYXRhU2VydmljZSkgJiYgdGhpcy5lbnRpdHkpIHtcbiAgICAgIGlmICh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbcm93SW5kZXhdKSB7XG4gICAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0gPSB0aGlzLmRhdGFTZXJ2aWNlW3F1ZXJ5TWV0aG9kTmFtZV1cbiAgICAgICAgLmFwcGx5KHRoaXMuZGF0YVNlcnZpY2UsIGNvbHVtblF1ZXJ5QXJncylcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkocmVzLmRhdGEpICYmIHJlcy5kYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVzLmRhdGFbMF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNPYmplY3QocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGFvVGFibGUuc2V0QXN5bmNocm9ub3VzQ29sdW1uKGRhdGEsIHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhZ2UgdGFibGUgZGF0YS5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudEFsbERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHJlbmRlcmVkIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsUmVuZGVyZWRWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5nZXRBbGxSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSB0YWJsZSByZW5kZXJlciBkYXRhLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0UmVuZGVyZWRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmdldEN1cnJlbnRSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgc3FsIHR5cGVzIGZyb20gZGF0YSBzb3VyY2UgYW5kIHRhYmxlIGNvbHVtbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFNxbFR5cGVzKCkge1xuICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhU291cmNlLnNxbFR5cGVzKSA/IHRoaXMuZGF0YVNvdXJjZS5zcWxUeXBlcyA6IHt9O1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKChjb2w6IE9Db2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2wuc3FsVHlwZSkge1xuICAgICAgICBhbGxTcWxUeXBlc1tjb2wuYXR0cl0gPSBjb2wuc3FsVHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWxsU3FsVHlwZXM7XG4gIH1cblxuICBzZXRPVGFibGVDb2x1bW5zRmlsdGVyKHRhYmxlQ29sdW1uc0ZpbHRlcjogT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCA9IHRhYmxlQ29sdW1uc0ZpbHRlcjtcbiAgfVxuXG4gIGdldCBmaWx0ZXJDb2x1bW5zKCk6IE9GaWx0ZXJDb2x1bW5bXSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZmlsdGVyQ29sdW1ucyA9PT0gdGhpcy5vcmlnaW5hbEZpbHRlckNvbHVtbnNcbiAgICAgICYmIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucykge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxGaWx0ZXJDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IG9yaWdpbmFsRmlsdGVyQ29sdW1ucygpOiBBcnJheTxPRmlsdGVyQ29sdW1uPiB7XG4gICAgbGV0IHNvcnRDb2x1bW5zRmlsdGVyID0gW107XG4gICAgaWYgKHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgc29ydENvbHVtbnNGaWx0ZXIgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuY29sdW1uc0FycmF5O1xuICAgIH1cbiAgICByZXR1cm4gc29ydENvbHVtbnNGaWx0ZXI7XG4gIH1cblxuICBnZXQgb3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBVdGlsLnBhcnNlQXJyYXkodGhpcy5ncm91cGVkQ29sdW1ucywgdHJ1ZSk7XG4gIH1cblxuICBnZXRTdG9yZWRDb2x1bW5zRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdG9yZWRGaWx0ZXJzO1xuICB9XG5cbiAgZ2V0U3RvcmVkR3JvdXBlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc3RvcmVkQ29uZmlndXJhdGlvbnM7XG4gIH1cblxuICBvbkZpbHRlckJ5Q29sdW1uQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25GaWx0ZXJCeUNvbHVtbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvblN0b3JlRmlsdGVyQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25TdG9yZUZpbHRlckNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkxvYWRGaWx0ZXJDbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkxvYWRGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGVhckZpbHRlckNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQ2xlYXJGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBmaWx0ZXJzKGNvbHVtbiBmaWx0ZXIsIHF1aWNrZmlsdGVyIGFuZCBmaWx0ZXIgYnVpbGRlcikgYW5kIHJlbG9hZCBkYXRhXG4gICAqIEBwYXJhbSBbdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGVdXG4gICAqL1xuICBjbGVhckZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuY2xlYXJDb2x1bW5GaWx0ZXJzKHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51ICYmIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24pIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24uc2V0QWN0aXZlKHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlKTtcbiAgICB9XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh2b2lkIDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckJ1aWxkZXIpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5jbGVhckZpbHRlcigpO1xuICAgICAgdGhpcy5maWx0ZXJCdWlsZGVyLnRyaWdnZXJSZWxvYWQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVyKGF0dHI6IHN0cmluZywgdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVyKGF0dHIsIHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gIH1cblxuICBmaWx0ZXJCeUNvbHVtbihjb2x1bW5WYWx1ZUZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmFkZENvbHVtbkZpbHRlcihjb2x1bW5WYWx1ZUZpbHRlcik7XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlLCBjb2x1bW5zQXR0cj86IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVycyh0cmlnZ2VyRGF0YXNvdXJjZVVwZGF0ZSwgY29sdW1uc0F0dHIpO1xuICAgIHRoaXMub25GaWx0ZXJCeUNvbHVtbkNoYW5nZS5lbWl0KCk7XG4gICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyYWJsZShjb2x1bW46IE9Db2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSA/IHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5pc0NvbHVtbkZpbHRlcmFibGUoY29sdW1uLmF0dHIpIDogdGhpcy5pc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbik7XG4gIH1cblxuICBpc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaGVhYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uYXR0cik7XG4gIH1cbiAgaXNDb2x1bW5GaWx0ZXJBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cihjb2x1bW4uYXR0cikpO1xuICB9XG5cbiAgb3BlbkNvbHVtbkZpbHRlckRpYWxvZyhjb2x1bW46IE9Db2x1bW4sIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihPVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgIHRhYmxlOiB0aGlzXG4gICAgICB9LFxuICAgICAgbWluV2lkdGg6ICczODBweCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ28tZGlhbG9nLWNsYXNzJywgJ28tdGFibGUtZGlhbG9nJ11cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgc3dpdGNoIChyZXN1bHQpIHtcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkFDQ0VQVDpcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZUZpbHRlciA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRDb2x1bW5WYWx1ZXNGaWx0ZXIoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5Q29sdW1uKGNvbHVtblZhbHVlRmlsdGVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkNMRUFSOlxuICAgICAgICAgIGNvbnN0IGNvbCA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb2x1bW47XG4gICAgICAgICAgdGhpcy5jbGVhckNvbHVtbkZpbHRlcihjb2wuYXR0cik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU29ydEZpbHRlclZhbHVlc0NoYW5nZS5zdWJzY3JpYmUoc29ydGVkRmlsdGVyYWJsZUNvbHVtbiA9PiB7XG4gICAgICAvLyBndWFyZGFyIGVuIGxvY2Fsc3RvcmFnZSBlbCBjYW1iaW9cbiAgICAgIHRoaXMuc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRlZEZpbHRlcmFibGVDb2x1bW4pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRDb2x1bW5GaWx0ZXI6IE9GaWx0ZXJDb2x1bW4pIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICAvLyBpZiBleGlzdHMgaW4gc3RhdGUgdGhlbiB1cGRhdGVkIHNvcnQgdmFsdWVcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuZmlsdGVyQ29sdW1ucy5maW5kKHggPT4geC5hdHRyID09PSBzb3J0Q29sdW1uRmlsdGVyLmF0dHIpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGZpbHRlckNvbHVtbikpIHtcbiAgICAgICAgZmlsdGVyQ29sdW1uLnNvcnQgPSBzb3J0Q29sdW1uRmlsdGVyLnNvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbHNlIGV4aXN0cyBpbiBzdGF0ZSB0aGVuIGFkZGVkIGZpbHRlciBjb2x1bW5cbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLnB1c2goc29ydENvbHVtbkZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucyA9IHRoaXMuZmlsdGVyQ29sdW1ucztcbiAgfVxuXG4gIGdldFN0YXJ0Vmlld0ZpbHRlckNvbHVtbihjb2x1bW46IE9Db2x1bW4pOiAnbW9udGgnIHwgJ3llYXInIHwgJ211bHRpLXllYXInIHwgJycge1xuICAgIGxldCBzdGFydFZpZXc7XG4gICAgLy8gYXQgZmlyc3QsIGdldCBzdGF0ZSBpbiBsb2NhbHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogT0ZpbHRlckNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5hdHRyID09PSBjb2x1bW4uYXR0cikge1xuICAgICAgICAgIHN0YXJ0VmlldyA9IGVsZW1lbnQuc3RhcnRWaWV3O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHN0YXJ0VmlldykgJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICBzdGFydFZpZXcgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuZ2V0U3RhcnRWaWV3VmFsdWVPZkZpbHRlckNvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXJ0VmlldztcbiAgfVxuXG4gIGdldFNvcnRGaWx0ZXJDb2x1bW4oY29sdW1uOiBPQ29sdW1uKTogJ2FzYycgfCAnZGVzYycgfCAnJyB7XG4gICAgbGV0IHNvcnRDb2x1bW47XG4gICAgLy8gYXQgZmlyc3QsIGdldCBzdGF0ZSBpbiBsb2NhbHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICBjb25zdCBmaWx0ZXJDb2wgPSB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMuZmluZCgoZWxlbWVudDogT0ZpbHRlckNvbHVtbikgPT4gZWxlbWVudC5hdHRyID09PSBjb2x1bW4uYXR0cik7XG4gICAgICBpZiAoZmlsdGVyQ29sKSB7XG4gICAgICAgIHNvcnRDb2x1bW4gPSBmaWx0ZXJDb2wuc29ydDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBub3QgdmFsdWUgaW4gbG9jYWxzdG9yYWdlLCBnZXQgc29ydCB2YWx1ZSBpbiBvLXRhYmxlLWNvbHVtbi1maWx0ZXItY29sdW1uIGNvbXBvbmVudFxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoc29ydENvbHVtbikgJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICBzb3J0Q29sdW1uID0gdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LmdldFNvcnRWYWx1ZU9mRmlsdGVyQ29sdW1uKGNvbHVtbi5hdHRyKTtcbiAgICB9XG5cbiAgICAvLyBpZiBlaXRoZXIgdmFsdWUgaW4gby10YWJsZS1jb2x1bW4tZmlsdGVyLWNvbHVtbiBvciBsb2NhbHN0b3JhZ2UsIGdldCBzb3J0IHZhbHVlIGluIHNvcnRDb2xBcnJheVxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoc29ydENvbHVtbikgJiYgdGhpcy5zb3J0Q29sQXJyYXkuZmluZCh4ID0+IHguY29sdW1uTmFtZSA9PT0gY29sdW1uLmF0dHIpKSB7XG4gICAgICBzb3J0Q29sdW1uID0gdGhpcy5pc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uKSA/ICdhc2MnIDogJ2Rlc2MnO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0Q29sdW1uO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVUYWJsZU1lbnVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5tZW51ICYmIHRoaXMucGVybWlzc2lvbnMubWVudS5lbmFibGVkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgc2hvd1RhYmxlTWVudUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBwZXJtaXNzaW9uSGlkZGVuID0gISEodGhpcy5wZXJtaXNzaW9ucyAmJiB0aGlzLnBlcm1pc3Npb25zLm1lbnUgJiYgdGhpcy5wZXJtaXNzaW9ucy5tZW51LnZpc2libGUgPT09IGZhbHNlKTtcbiAgICBpZiAocGVybWlzc2lvbkhpZGRlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzdGF0aWNPcHQgPSB0aGlzLnNlbGVjdEFsbENoZWNrYm94IHx8IHRoaXMuZXhwb3J0QnV0dG9uIHx8IHRoaXMuc2hvd0NvbmZpZ3VyYXRpb25PcHRpb24gfHwgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbiB8fCAodGhpcy5zaG93RmlsdGVyT3B0aW9uICYmIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gc3RhdGljT3B0IHx8IHRoaXMudGFibGVPcHRpb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBzZXRPVGFibGVJbnNlcnRhYmxlUm93KHRhYmxlSW5zZXJ0YWJsZVJvdzogT1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCkge1xuICAgIGNvbnN0IGluc2VydFBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0QWN0aW9uUGVybWlzc2lvbnMoUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fSU5TRVJUKTtcbiAgICBpZiAoaW5zZXJ0UGVybS52aXNpYmxlKSB7XG4gICAgICB0YWJsZUluc2VydGFibGVSb3cuZW5hYmxlZCA9IGluc2VydFBlcm0uZW5hYmxlZDtcbiAgICAgIHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCA9IHRhYmxlSW5zZXJ0YWJsZVJvdztcbiAgICAgIHRoaXMuc2hvd0ZpcnN0SW5zZXJ0YWJsZVJvdyA9IHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0ZpcnN0Um93KCk7XG4gICAgICB0aGlzLnNob3dMYXN0SW5zZXJ0YWJsZVJvdyA9ICF0aGlzLnNob3dGaXJzdEluc2VydGFibGVSb3c7XG4gICAgICB0aGlzLm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaW5pdGlhbGl6ZUVkaXRvcnMoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGlvbkFuZEVkaXRpbmcoY2xlYXJTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKGNsZWFyU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1uc1xuICAgICAgLmZpbHRlcihvQ29sdW1uID0+IG9Db2x1bW4uZWRpdGluZylcbiAgICAgIC5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuICAgICAgICBvQ29sdW1uLmVkaXRpbmcgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrU2VsZWN0ZWRJdGVtRGF0YSgpIHtcbiAgICB0aGlzLnRyaWdnZXJTZWxlY3Rpb25FdmVudHMgPSBmYWxzZTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pICYmIHRoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3RhdGUuc2VsZWN0aW9uLmZvckVhY2goc2VsZWN0ZWRJdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtS2V5cyA9IE9iamVjdC5rZXlzKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgIC8vIGZpbmRpbmcgc2VsZWN0ZWQgaXRlbSBkYXRhIGluIHRoZSB0YWJsZSByZW5kZXJlZCBkYXRhXG4gICAgICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZmluZChkYXRhID0+XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtS2V5cy5ldmVyeShrZXkgPT4gZGF0YVtrZXldID09PSBzZWxlY3RlZEl0ZW1ba2V5XSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZvdW5kSXRlbSkge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoZm91bmRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyA9IHRydWU7XG4gIH1cblxuICB1c2VEZXRhaWxCdXR0b24oY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbi50eXBlID09PSAnZWRpdEJ1dHRvbkluUm93JyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RldGFpbEJ1dHRvbkluUm93JztcbiAgfVxuXG4gIG9uRGV0YWlsQnV0dG9uQ2xpY2soY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgdGhpcy5lZGl0RGV0YWlsKHJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGV0YWlsQnV0dG9uSW5Sb3cnOlxuICAgICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGV0YWlsQnV0dG9uSWNvbihjb2x1bW46IE9Db2x1bW4pIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5lZGl0QnV0dG9uSW5Sb3dJY29uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RldGFpbEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5kZXRhaWxCdXR0b25JblJvd0ljb247XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdXNlUGxhaW5SZW5kZXIoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51c2VEZXRhaWxCdXR0b24oY29sdW1uKSAmJiAhY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRvciB8fCAoIWNvbHVtbi5lZGl0aW5nIHx8ICF0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkpO1xuICB9XG5cbiAgdXNlQ2VsbFJlbmRlcmVyKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRpbmcgfHwgY29sdW1uLmVkaXRpbmcgJiYgIXRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHVzZUNlbGxFZGl0b3IoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gQWRkIGNvbHVtbi5lZGl0b3IgaW5zdGFuY2VvZiBPVGFibGVDZWxsRWRpdG9yQm9vbGVhbkNvbXBvbmVudCB0byBjb25kaXRpb25cbiAgICBpZiAoY29sdW1uLmVkaXRvciAmJiBjb2x1bW4uZWRpdG9yLmF1dG9Db21taXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbi5lZGl0b3IgJiYgY29sdW1uLmVkaXRpbmcgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdyk7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9NVUxUSVBMRTtcbiAgfVxuXG4gIGlzU2VsZWN0aW9uTW9kZVNpbmdsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9TSU5HTEU7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVOb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09IENvZGVzLlNFTEVDVElPTl9NT0RFX05PTkU7XG4gIH1cblxuICBvbkNoYW5nZVBhZ2UoZXZ0OiBQYWdlRXZlbnQpIHtcbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZ0LnBhZ2VJbmRleDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBnb2luZ0JhY2sgPSBldnQucGFnZUluZGV4IDwgdGhpcy5jdXJyZW50UGFnZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZ0LnBhZ2VJbmRleDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdG9yLmlzU2hvd2luZ0FsbFJvd3MoZXZ0LnBhZ2VTaXplKSA/IHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgOiBldnQucGFnZVNpemU7XG5cbiAgICBjb25zdCBvbGRRdWVyeVJvd3MgPSB0aGlzLnF1ZXJ5Um93cztcbiAgICBjb25zdCBjaGFuZ2luZ1BhZ2VTaXplID0gKG9sZFF1ZXJ5Um93cyAhPT0gcGFnZVNpemUpO1xuICAgIHRoaXMucXVlcnlSb3dzID0gcGFnZVNpemU7XG4gICAgdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgPSBwYWdlU2l6ZTtcblxuICAgIGxldCBuZXdTdGFydFJlY29yZDogbnVtYmVyO1xuICAgIGxldCBxdWVyeUxlbmd0aDogbnVtYmVyO1xuXG4gICAgaWYgKGdvaW5nQmFjayB8fCBjaGFuZ2luZ1BhZ2VTaXplKSB7XG4gICAgICBuZXdTdGFydFJlY29yZCA9ICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpO1xuICAgICAgcXVlcnlMZW5ndGggPSB0aGlzLnF1ZXJ5Um93cztcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U3RhcnRSZWNvcmQgPSBNYXRoLm1heCh0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0LCAodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzKSk7XG4gICAgICBjb25zdCBuZXdFbmRSZWNvcmQgPSBNYXRoLm1pbihuZXdTdGFydFJlY29yZCArIHRoaXMucXVlcnlSb3dzLCB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyKTtcbiAgICAgIHF1ZXJ5TGVuZ3RoID0gdGhpcy5kaXNhYmxlUGFnZVNpemVDYWxjdWxhdGlvbiA/IHRoaXMucXVlcnlSb3dzIDogTWF0aC5taW4odGhpcy5xdWVyeVJvd3MsIG5ld0VuZFJlY29yZCAtIG5ld1N0YXJ0UmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeUFyZ3M6IE9RdWVyeURhdGFBcmdzID0ge1xuICAgICAgb2Zmc2V0OiBuZXdTdGFydFJlY29yZCxcbiAgICAgIGxlbmd0aDogcXVlcnlMZW5ndGhcbiAgICB9O1xuICAgIHRoaXMuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBnZXRPQ29sdW1uKGF0dHI6IHN0cmluZyk6IE9Db2x1bW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zID8gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGF0dHIpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaW5zZXJ0UmVjb3JkKHJlY29yZERhdGE6IGFueSwgc3FsVHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICBpZiAodGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zZXJ0IG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBiZWNhdXNlIHRoZSB0YWJsZSBpcyByZWFkLW9ubHkuYClcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fSU5TRVJUKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzcWxUeXBlcykpIHtcbiAgICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gdGhpcy5nZXRTcWxUeXBlcygpO1xuICAgICAgc3FsVHlwZXMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKHJlY29yZERhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGFvVGFibGUuaW5zZXJ0UXVlcnkocmVjb3JkRGF0YSwgc3FsVHlwZXMpO1xuICB9XG5cbiAgdXBkYXRlUmVjb3JkKGZpbHRlcjogYW55LCB1cGRhdGVEYXRhOiBhbnksIHNxbFR5cGVzPzogb2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgaWYgKHRoaXMuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVwZGF0ZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgYmVjYXVzZSB0aGUgdGFibGUgaXMgcmVhZC1vbmx5LmApXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fVVBEQVRFKSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICB9XG4gICAgY29uc3Qgc3FsVHlwZXNBcmcgPSBzcWxUeXBlcyB8fCB7fTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNxbFR5cGVzKSkge1xuICAgICAgY29uc3QgYWxsU3FsVHlwZXMgPSB0aGlzLmdldFNxbFR5cGVzKCk7XG4gICAgICBPYmplY3Qua2V5cyhmaWx0ZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZURhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGFvVGFibGUudXBkYXRlUXVlcnkoZmlsdGVyLCB1cGRhdGVEYXRhLCBzcWxUeXBlc0FyZyk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIGRhdGEgdGFibGVcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldERhdGFBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYW9UYWJsZS5kYXRhO1xuICB9XG5cblxuICAvKipcbiAgICogU2V0cyBkYXRhIHRhYmxlIHdoZW4gaXMgc3RhdGljIChPTkxZIElOIFRISVMgQ0FTRSlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHNldERhdGFBcnJheShkYXRhOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuZGFvVGFibGUpIHtcbiAgICAgIC8vIHJlbW90ZSBwYWdpbmF0aW9uIGhhcyBubyBzZW5zZSB3aGVuIHVzaW5nIHN0YXRpYy1kYXRhXG4gICAgICB0aGlzLnBhZ2VhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXRpY0RhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5kYW9UYWJsZS51c2luZ1N0YXRpY0RhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5kYW9UYWJsZS5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICAgIHRoaXMub25EYXRhTG9hZGVkLmVtaXQodGhpcy5kYW9UYWJsZS5kYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVsZXRlTG9jYWxJdGVtcygpIHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSB0aGlzLmdldERhdGFBcnJheSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goKHNlbGVjdGVkSXRlbTogYW55KSA9PiB7XG4gICAgICBmb3IgKGxldCBqID0gZGF0YUFycmF5Lmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICAgIGlmIChVdGlsLmVxdWFscyhzZWxlY3RlZEl0ZW0sIGRhdGFBcnJheVtqXSkpIHtcbiAgICAgICAgICBkYXRhQXJyYXkuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIHRoaXMuc2V0RGF0YUFycmF5KGRhdGFBcnJheSk7XG4gIH1cblxuICBpc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyKTtcbiAgICByZXR1cm4gZm91bmQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzQ29sdW1uRGVzY1NvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyICYmICFzb3J0Qy5hc2NlbmRlbnQpO1xuICAgIHJldHVybiBmb3VuZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaGFzVGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhVXRpbC5pc0RlZmluZWQodmFsdWUpIHx8ICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgIXZhbHVlKTtcbiAgfVxuXG4gIHNldEZpbHRlcnNDb25maWd1cmF0aW9uKHN0b3JhZ2U6IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3MgPSB0aGlzLnN0YXRlKSB7XG4gICAgLypcbiAgICAgIENoZWNraW5nIHRoZSBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpdGggdGhlIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGlmIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGlzIGVxdWFscyB0byBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIGlucHV0XG4gICAgICBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpbGwgYmUgdGhlIHZhbHVlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAqL1xuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNhc2VTZW5zaXRpdmUgIT09IHRoaXMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY2FzZS1zZW5zaXRpdmUnKSA/IHN0b3JhZ2VbJ2ZpbHRlci1jYXNlLXNlbnNpdGl2ZSddIDogdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH1cblxuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCAhPT0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQpIHtcbiAgICAgIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbmZGaWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY29sdW1uLWFjdGl2ZScpID8gc3RvcmFnZVsnZmlsdGVyLWNvbHVtbi1hY3RpdmUnXSA6IHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0O1xuICAgICAgdGhpcy5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSBjb25mRmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0IHx8IHRoaXMuc3RhdGUuY29sdW1uVmFsdWVGaWx0ZXJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuY29sdW1uVmFsdWVGaWx0ZXJzKSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmluaXRpYWxpemVDb2x1bW5zRmlsdGVycyh0aGlzLnN0YXRlLmNvbHVtblZhbHVlRmlsdGVycyk7XG4gICAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnNldFZhbHVlKHN0b3JhZ2VbJ2ZpbHRlciddKTtcbiAgICAgIChzdG9yYWdlWydvQ29sdW1ucyddIHx8IFtdKS5mb3JFYWNoKChvQ29sRGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4ob0NvbERhdGEuYXR0cik7XG4gICAgICAgIGlmIChvQ29sICYmIG9Db2xEYXRhLmhhc093blByb3BlcnR5KCdzZWFyY2hpbmcnKSkge1xuICAgICAgICAgIG9Db2wuc2VhcmNoaW5nID0gb0NvbERhdGEuc2VhcmNoaW5nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJCdWlsZGVyICYmIFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuZmlsdGVyQnVpbGRlclZhbHVlcykpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5zZXRGaWx0ZXJWYWx1ZXMoc3RvcmFnZS5maWx0ZXJCdWlsZGVyVmFsdWVzKTtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci50cmlnZ2VyUmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdG9yZUNvbmZpZ3VyYXRpb25DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblN0b3JlQ29uZmlndXJhdGlvbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkFwcGx5Q29uZmlndXJhdGlvbkNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQXBwbHlDb25maWd1cmF0aW9uQ2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RGVmYXVsdENvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5pbml0aWFsaXplUGFyYW1zKCk7XG4gICAgdGhpcy5wYXJzZVZpc2libGVDb2x1bW5zKHRydWUpO1xuICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21PcmlnaW5hbERlZmluaXRpb24oKTtcbiAgICB0aGlzLnJlaW5pdGlhbGl6YXRlUXVpY2tGaWx0ZXJDb2x1bW5zKCk7XG4gICAgdGhpcy5yZXNldFF1ZXJ5Um93cygpO1xuICAgIGNvbnN0IGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnModGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5zb3J0Q29sdW1ucyk7XG4gICAgdGhpcy5yZWluaXRpYWxpemVTb3J0Q29sdW1ucyhpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSk7XG4gICAgdGhpcy5vblJlaW5pdGlhbGl6ZS5lbWl0KG51bGwpO1xuICAgIHRoaXMuY2xlYXJGaWx0ZXJzKGZhbHNlKTtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuICByZXNldFF1ZXJ5Um93cygpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5xdWVyeVJvd3MpKSB7XG4gICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzO1xuICAgIH1cbiAgfVxuICBhcHBseUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0b3JlZENvbmZpZ3VyYXRpb24gPSB0aGlzLnN0YXRlLmdldFN0b3JlZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWUpO1xuICAgIGlmIChzdG9yZWRDb25maWd1cmF0aW9uKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gc3RvcmVkQ29uZmlndXJhdGlvblsnc3RvcmVkLXByb3BlcnRpZXMnXSB8fCBbXTtcblxuICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgICAgICAgIGNhc2UgJ3NvcnQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnJlaW5pdGlhbGl6ZVNvcnRDb2x1bW5zKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdvQ29sdW1ucy1kaXNwbGF5JzpcbiAgICAgICAgICAgIHRoaXMucGFyc2VWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3F1aWNrLWZpbHRlcic6XG4gICAgICAgICAgY2FzZSAnY29sdW1ucy1maWx0ZXInOlxuICAgICAgICAgIGNhc2UgJ2ZpbHRlci1idWlsZGVyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyc0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2dyb3VwZWQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnBhcnNlR3JvdXBlZENvbHVtbnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUucXVlcnlSb3dzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGVBbGlnbkNsYXNzKG9Db2w6IE9Db2x1bW4pIHtcblxuICAgIGNvbnN0IGhhc1RpdGxlQWxpZ24gPSBVdGlsLmlzRGVmaW5lZChvQ29sLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduKTtcbiAgICBjb25zdCBhdXRvQWxpZ24gPSAodGhpcy5hdXRvQWxpZ25UaXRsZXMgJiYgIWhhc1RpdGxlQWxpZ24pIHx8IChoYXNUaXRsZUFsaWduICYmIG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduID09PSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQVVUTyk7XG4gICAgaWYgKCFhdXRvQWxpZ24pIHtcbiAgICAgIHJldHVybiBvQ29sLmdldFRpdGxlQWxpZ25DbGFzcygpO1xuICAgIH1cblxuICAgIGxldCBhbGlnbiA9IHRoaXMuZ2V0Q2VsbEFsaWduQ2xhc3Mob0NvbCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGFsaWduKSAmJiBhbGlnbi5sZW5ndGggPiAwKSB7XG4gICAgICBhbGlnbiA9IGFsaWduLnN1YnN0cmluZygyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChvQ29sLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQ0VOVEVSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdyZWFsJzpcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fRU5EO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhbGlnbiA9IENvZGVzLkNPTFVNTl9USVRMRV9BTElHTl9TVEFSVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsaWduO1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbEFsaWduQ2xhc3MoY29sdW1uOiBPQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29sdW1uLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5kZWZpbml0aW9uLmNvbnRlbnRBbGlnbikgPyAnby0nICsgY29sdW1uLmRlZmluaXRpb24uY29udGVudEFsaWduIDogJyc7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRHcm91cEhlYWRlckNlbGxBbGlnbkNsYXNzKGNvbHVtbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTmFtZUFycmF5ID0gW107XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uc3Vic3RyKCdncm91cEhlYWRlci0nLmxlbmd0aCkpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChvQ29sKSkge1xuICAgICAgY2xhc3NOYW1lQXJyYXkucHVzaCh0aGlzLmdldENlbGxBbGlnbkNsYXNzKG9Db2wpKTtcbiAgICAgIGNsYXNzTmFtZUFycmF5LnB1c2gob0NvbC5jbGFzc05hbWUgPyBvQ29sLmNsYXNzTmFtZSA6ICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZUFycmF5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZERlZmF1bHRSb3dCdXR0b25zKCkge1xuICAgIC8vIGNoZWNrIHBlcm1pc3Npb25zXG4gICAgaWYgKHRoaXMuZWRpdEJ1dHRvbkluUm93KSB7XG4gICAgICB0aGlzLmFkZEJ1dHRvbkluUm93KCdlZGl0QnV0dG9uSW5Sb3cnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV0YWlsQnV0dG9uSW5Sb3cpIHtcbiAgICAgIHRoaXMuYWRkQnV0dG9uSW5Sb3coJ2RldGFpbEJ1dHRvbkluUm93Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEJ1dHRvbkluUm93KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbERlZjogT0NvbHVtbiA9IHRoaXMuY3JlYXRlT0NvbHVtbihuYW1lLCB0aGlzKTtcbiAgICBjb2xEZWYudHlwZSA9IG5hbWU7XG4gICAgY29sRGVmLnZpc2libGUgPSB0cnVlO1xuICAgIGNvbERlZi5zZWFyY2hhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLm9yZGVyYWJsZSA9IGZhbHNlO1xuICAgIGNvbERlZi5yZXNpemFibGUgPSBmYWxzZTtcbiAgICBjb2xEZWYuZ3JvdXBhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgIGNvbERlZi53aWR0aCA9ICc0OHB4JztcbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMucHVzaChuYW1lKTtcbiAgfVxuXG4gIGdldCBoZWFkZXJIZWlnaHQoKSB7XG4gICAgbGV0IGhlaWdodCA9IDA7XG4gICAgaWYgKHRoaXMudGFibGVIZWFkZXJFbCAmJiB0aGlzLnRhYmxlSGVhZGVyRWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgaGVpZ2h0ICs9IHRoaXMudGFibGVIZWFkZXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVUb29sYmFyRWwgJiYgdGhpcy50YWJsZVRvb2xiYXJFbC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBoZWlnaHQgKz0gdGhpcy50YWJsZVRvb2xiYXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIGlzRGV0YWlsTW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZXRhaWxNb2RlICE9PSBDb2Rlcy5ERVRBSUxfTU9ERV9OT05FO1xuICB9XG5cbiAgY29weUFsbCgpIHtcbiAgICBVdGlsLmNvcHlUb0NsaXBib2FyZChKU09OLnN0cmluZ2lmeSh0aGlzLmdldFJlbmRlcmVkVmFsdWUoKSkpO1xuICB9XG5cbiAgY29weVNlbGVjdGlvbigpIHtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5kYXRhU291cmNlLmdldFJlbmRlcmVkRGF0YSh0aGlzLmdldFNlbGVjdGVkSXRlbXMoKSk7XG4gICAgVXRpbC5jb3B5VG9DbGlwYm9hcmQoSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRJdGVtcykpO1xuICB9XG5cbiAgZGVzdHJveUFjdGl2ZWRUb29sdGlwcygpIHtcbiAgICB0aGlzLnRvb2x0aXAuZm9yRWFjaCh0cCA9PiB7XG4gICAgICBpZiAodHAuX292ZXJsYXlSZWYpIHtcbiAgICAgICAgdHAuX292ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgbmF2aWdhdGlvbiB0byBpdGVtIGRldGFpbCwgcmVjZWl2aW5nIGl0ZW0gZGF0YVxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyBkZXRhaWxcbiAgICovXG4gIHZpZXdEZXRhaWwoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkgJiYgdGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oJ2RldGFpbCcpIHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZXN0cm95QWN0aXZlZFRvb2x0aXBzKCk7XG4gICAgc3VwZXIudmlld0RldGFpbChpdGVtKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIG5hdmlnYXRpb24gdG8gaXRlbSBlZGl0aW9uLCByZWNlaXZpbmcgaXRlbSBkYXRhXG4gICAqIEBwYXJhbSBpdGVtXG4gICAqIEByZXR1cm5zIGRldGFpbFxuICAgKi9cbiAgZWRpdERldGFpbChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSAmJiB0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbignZWRpdCcpIHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3VwZXIuZWRpdERldGFpbChpdGVtKTtcbiAgfVxuXG4gIGdldE9Db2x1bW5Gcm9tVGgodGg6IGFueSk6IE9Db2x1bW4ge1xuICAgIGxldCByZXN1bHQ6IE9Db2x1bW47XG4gICAgY29uc3QgY2xhc3NMaXN0OiBhbnlbXSA9IEFycmF5LmZyb20oKHRoIGFzIEVsZW1lbnQpLmNsYXNzTGlzdCB8fCBbXSk7XG4gICAgY29uc3QgY29sdW1uQ2xhc3MgPSBjbGFzc0xpc3QuZmluZCgoY2xhc3NOYW1lOiBzdHJpbmcpID0+IChjbGFzc05hbWUuc3RhcnRzV2l0aCgnbWF0LWNvbHVtbi0nKSkpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW5DbGFzcykpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW5DbGFzcy5zdWJzdHIoJ21hdC1jb2x1bW4tJy5sZW5ndGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldE9Db2x1bW5Gcm9tR3JvdXBIZWFkZXJDb2x1bW4oYXR0cjogc3RyaW5nKTogT0NvbHVtbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T0NvbHVtbihhdHRyLnN1YnN0cignZ3JvdXBIZWFkZXItJy5sZW5ndGgpKTtcbiAgfVxuXG4gIGdldFRoV2lkdGhGcm9tT0NvbHVtbihvQ29sdW1uOiBPQ29sdW1uKTogYW55IHtcbiAgICBsZXQgd2lkdGhDb2x1bW46IG51bWJlcjtcbiAgICBjb25zdCB0aEFycmF5ID0gdGhpcy50YWJsZUhlYWRlckVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aEFycmF5Lmxlbmd0aCAmJiAhVXRpbC5pc0RlZmluZWQod2lkdGhDb2x1bW4pOyBpKyspIHtcbiAgICAgIGNvbnN0IHRoID0gdGhBcnJheVtpXTtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHRoLmNsYXNzTGlzdDtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2xhc3NMaXN0Lmxlbmd0aCAmJiAhVXRpbC5pc0RlZmluZWQod2lkdGhDb2x1bW4pOyBqKyspIHtcbiAgICAgICAgaWYgKGNsYXNzTGlzdFtqXSA9PT0gJ21hdC1jb2x1bW4tJyArIG9Db2x1bW4uYXR0cikge1xuICAgICAgICAgIHdpZHRoQ29sdW1uID0gdGguY2xpZW50V2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHdpZHRoQ29sdW1uO1xuICB9XG5cbiAgZ2V0Q29sdW1uSW5zZXJ0YWJsZShuYW1lKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmFtZSArIHRoaXMuZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc1NlbGVjdGlvbk1vZGVOb25lKCkgJiYgdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpO1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbldpZHRoRnJvbVN0YXRlKGNvbERlZjogT0NvbHVtbik6IHN0cmluZyB7XG4gICAgLy8xLiBCeSBkZWZhdWx0LCBzZXQgd2lkdGggZGVmaW5pdGlvblxuICAgIGxldCBjb2x1bW5XaWR0aCA9IGNvbERlZi5kZWZpbml0aW9uICYmIGNvbERlZi5kZWZpbml0aW9uLndpZHRoID8gY29sRGVmLmRlZmluaXRpb24ud2lkdGggOiB2b2lkIDA7XG4gICAgY29uc3Qgc3RvcmVkRGF0YSA9IHRoaXMuc3RhdGUuZ2V0Q29sdW1uRGlzcGxheShjb2xEZWYpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzdG9yZWREYXRhKSAmJiBVdGlsLmlzRGVmaW5lZChzdG9yZWREYXRhLndpZHRoKSkge1xuICAgICAgLy8yLiBTZXQgd2lkdGggaWYgdGhlIHdpZHRoIGlzIHN0b3JlZFxuICAgICAgY29sdW1uV2lkdGggPSBzdG9yZWREYXRhLndpZHRoO1xuICAgICAgLy8gY2hlY2sgdGhhdCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbnMgc2F2ZWQgaW4gdGhlIGluaXRpYWwgY29uZmlndXJhdGlvblxuICAgICAgLy8gaW4gdGhlIGxvY2FsIHN0b3JhZ2UgaXMgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgICBpZiAodGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5jb2x1bW5zRGlzcGxheSkge1xuICAgICAgICBjb25zdCBpbml0aWFsU3RvcmVkRGF0YSA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZ2V0Q29sdW1uRGlzcGxheShjb2xEZWYpO1xuICAgICAgICAvLyBJZiBvcmlnaW5hbCB3aWR0aCBjaGFuZ2VkIHRoZW4gdGhlIHdpZHRoIGlzIHJlc2V0ZWQgd2l0aCB0aGlzIHZhbHVlXG4gICAgICAgIGlmIChpbml0aWFsU3RvcmVkRGF0YSAmJiBpbml0aWFsU3RvcmVkRGF0YS53aWR0aCAmJiBjb2xEZWYuZGVmaW5pdGlvbi5vcmlnaW5hbFdpZHRoKSB7XG4gICAgICAgICAgaWYgKGluaXRpYWxTdG9yZWREYXRhLndpZHRoICE9PSBjb2xEZWYuZGVmaW5pdGlvbi5vcmlnaW5hbFdpZHRoKSB7XG4gICAgICAgICAgICBjb2x1bW5XaWR0aCA9IGNvbERlZi5kZWZpbml0aW9uLm9yaWdpbmFsV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5XaWR0aDtcbiAgfVxuXG4gIHJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tTG9jYWxTdG9yYWdlKCkge1xuICAgIHRoaXMub1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZvckVhY2goeCA9PiB7XG4gICAgICB4LndpZHRoID0gdGhpcy5nZXRDb2x1bW5XaWR0aEZyb21TdGF0ZSh4KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tT3JpZ2luYWxEZWZpbml0aW9uKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihjID0+IGMudmlzaWJsZSkuZm9yRWFjaChjID0+IHtcbiAgICAgICAgYy53aWR0aCA9IGMuRE9NV2lkdGggPSB2b2lkIDA7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChjLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKGMuZGVmaW5pdGlvbi53aWR0aCkpIHtcbiAgICAgICAgICBjLndpZHRoID0gYy5kZWZpbml0aW9uLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGMuc2V0UmVuZGVyV2lkdGgodGhpcy5ob3Jpem9udGFsU2Nyb2xsLCB0aGlzLmdldENsaWVudFdpZHRoQ29sdW1uKGMpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9Db2x1bW4oYXR0cj86IHN0cmluZywgdGFibGU/OiBPVGFibGVDb21wb25lbnQsIGNvbHVtbj86IE9UYWJsZUNvbHVtbkNvbXBvbmVudCAmIE9UYWJsZUNvbHVtbkNhbGN1bGF0ZWRDb21wb25lbnQpOiBPQ29sdW1uIHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBPQ29sdW1uKCk7XG4gICAgaWYgKGF0dHIpIHtcbiAgICAgIGluc3RhbmNlLmF0dHIgPSBhdHRyO1xuICAgIH1cbiAgICBpZiAodGFibGUpIHtcbiAgICAgIGluc3RhbmNlLnNldERlZmF1bHRQcm9wZXJ0aWVzKHtcbiAgICAgICAgb3JkZXJhYmxlOiB0aGlzLm9yZGVyYWJsZSxcbiAgICAgICAgcmVzaXphYmxlOiB0aGlzLnJlc2l6YWJsZSxcbiAgICAgICAgZ3JvdXBhYmxlOiB0aGlzLmdyb3VwYWJsZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4pIHtcbiAgICAgIGluc3RhbmNlLnNldENvbHVtblByb3BlcnRpZXMoY29sdW1uKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT1RhYmxlQnV0dG9ucyhhcmc6IE9UYWJsZUJ1dHRvbnMpIHtcbiAgICB0aGlzLm9UYWJsZUJ1dHRvbnMgPSBhcmc7XG4gICAgaWYgKHRoaXMub1RhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9UYWJsZUJ1dHRvbnMucmVnaXN0ZXJCdXR0b25zKHRoaXMudGFibGVCdXR0b25zLnRvQXJyYXkoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldENsaWVudFdpZHRoQ29sdW1uKGNvbDogT0NvbHVtbik6IG51bWJlciB7XG4gICAgcmV0dXJuIGNvbC5ET01XaWR0aCB8fCB0aGlzLmdldFRoV2lkdGhGcm9tT0NvbHVtbihjb2wpO1xuICB9XG5cbiAgcHVibGljIGdldE1pbldpZHRoQ29sdW1uKGNvbDogT0NvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKGNvbC5taW5XaWR0aCwgQ29kZXMuREVGQVVMVF9DT0xVTU5fTUlOX1dJRFRIKSArICdweCc7XG4gIH1cblxuICBzaG93RXhwYW5kYWJsZVJvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgZW5hYmxlIHZpcnR1YWwgc2Nyb2xsXG4gICAqL1xuICBnZXQgZW5hYmxlZFZpcnR1YWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlydHVhbFNjcm9sbCAmJiAhdGhpcy5zaG93RXhwYW5kYWJsZVJvdygpICYmIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5sZW5ndGggPT09IDA7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBncm91cGVkIGNvbHVtbnNcbiAgICovXG4gIHBhcnNlR3JvdXBlZENvbHVtbnMoKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuc3RhdGUuZ3JvdXBlZENvbHVtbnMgfHwgdGhpcy5vcmlnaW5hbEdyb3VwZWRDb2x1bW5zQXJyYXk7XG4gICAgaWYgKHRoaXMuc3RhdGUuZ3JvdXBlZENvbHVtbnMgJiYgdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5ncm91cGVkQ29sdW1ucykge1xuICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZ3JvdXBlZENvbHVtbnNcbiAgICAgICAgLmZpbHRlcih4ID0+ICF0aGlzLm9yaWdpbmFsR3JvdXBlZENvbHVtbnNBcnJheS5pbmNsdWRlcyh4KSk7XG5cbiAgICAgIGlmIChkaWZmZXJlbmNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5vcmlnaW5hbEdyb3VwZWRDb2x1bW5zQXJyYXk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0R3JvdXBDb2x1bW5zKHJlc3VsdCk7XG4gIH1cbiAgcGFyc2VHcm91cGVkQ29sdW1uVHlwZXMoKSB7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMgPSB0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5UeXBlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgYnkgY29sdW1uXG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIGdyb3VwQnlDb2x1bW4oY29sdW1uOiBPQ29sdW1uLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5jaGVja0dyb3VwQnlDb2x1bW4oY29sdW1uLmF0dHIsIHRydWUpO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5UeXBlcyhjb2x1bW4uYXR0ciwgdHJ1ZSwgdHlwZSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVHcm91cGVkQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZ3JvdXAgYnkgY29sdW1uXG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIHVuR3JvdXBCeUNvbHVtbihjb2x1bW46IE9Db2x1bW4pIHtcbiAgICB0aGlzLmNoZWNrR3JvdXBCeUNvbHVtbihjb2x1bW4uYXR0ciwgZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlR3JvdXBlZENvbHVtblR5cGVzKGNvbHVtbi5hdHRyLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gIH1cblxuICAvKipcbiAgICogVW5ncm91cCBieSBhbGwgY29sdW1uc1xuICAgKi9cbiAgdW5Hcm91cEJ5QWxsQ29sdW1ucygpIHtcbiAgICB0aGlzLnNldEdyb3VwQ29sdW1ucyhbXSk7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMgPSBbXTtcbiAgfVxuXG4gIHNldEdyb3VwQ29sdW1ucyh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlR3JvdXBlZENvbHVtbnMoKTtcbiAgfVxuICBzZXRHcm91cGVkQ29sdW1uVHlwZXModmFsdWU6IE9Hcm91cGVkQ29sdW1uVHlwZXNbXSkge1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzID0gdmFsdWU7XG4gIH1cbiAgY2hlY2tHcm91cEJ5Q29sdW1uKGZpZWxkOiBzdHJpbmcsIGFkZDogYm9vbGVhbikge1xuICAgIGxldCBmb3VuZCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5ncm91cGVkQ29sdW1uc0FycmF5KSB7XG4gICAgICBpZiAoY29sdW1uID09PSBmaWVsZCkge1xuICAgICAgICBmb3VuZCA9IHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5pbmRleE9mKGNvbHVtbiwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmb3VuZCAhPSBudWxsICYmIGZvdW5kID49IDApIHtcbiAgICAgIGlmICghYWRkKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5zcGxpY2UoZm91bmQsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5wdXNoKGZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGl0ZW0gaXMgZ3JvdXBcbiAgICogQHBhcmFtIGluZGV4XG4gICAqIEBwYXJhbSBpdGVtXG4gICAqIEByZXR1cm5zIHRydWUgaWYgZ3JvdXBcbiAgICovXG4gIGlzR3JvdXAoaW5kZXgsIGl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXRlbSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3c7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGl0ZW0gaXMgbm90IGdyb3VwXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyB0cnVlIGlmIG5vdCBncm91cFxuICAgKi9cbiAgaXNOb3RHcm91cChpbmRleCwgaXRlbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKGl0ZW0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KTtcbiAgfVxuXG4gIGdldExhc3RHcm91cHMoKSB7XG4gICAgLy8gR2V0IGxhc3QgZ3JvdXBzXG4gICAgY29uc3Qgc2NvcmVzID0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YTtcbiAgICBjb25zdCBtYXhMZXZlbCA9IHNjb3Jlcy5yZWR1Y2UoKGFjYywgY3VycikgPT4gY3Vyci5sZXZlbCA+IGFjYyA/IGN1cnIubGV2ZWwgOiBhY2MsIDApO1xuICAgIGNvbnN0IG1heExldmVsUmVuZGVyZWREYXRhID0gc2NvcmVzLnJlZHVjZSgociwgbykgPT4gby5sZXZlbCA9PT0gbWF4TGV2ZWwgPyBbLi4uciwgb10gOiByLCBbXSk7XG4gICAgcmV0dXJuIG1heExldmVsUmVuZGVyZWREYXRhLmxlbmd0aDtcbiAgfVxuXG4gIGdyb3VwSGVhZGVyQ2xpY2socm93OiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnRvZ2dsZUdyb3VwQnlDb2x1bW4ocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnN0YW5jZU9mT1RhYmxlQ2VsbFJlbmRlcmVyU2VydmljZUNvbXBvbmVudChyZW5kZXJlcjogT0Jhc2VUYWJsZUNlbGxSZW5kZXJlcikge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChyZW5kZXJlcikgJiYgKHJlbmRlcmVyIGFzIGFueSkub25EYXRhTG9hZGVkICYmIChyZW5kZXJlciBhcyBhbnkpLnF1ZXJ5QWxsRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbHVtbiBkYXRhIGJ5IGF0dHJcbiAgICogQHBhcmFtIGF0dHJcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcmV0dXJucyBjb2x1bW4gZGF0YSBieSBhdHRyXG4gICAqL1xuICBnZXRDb2x1bW5EYXRhQnlBdHRyKGF0dHIsIHJvdzogYW55KTogYW55IHtcbiAgICBsZXQgb3BlcmF0aW9uID0gbnVsbDtcbiAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1uVHlwZXMubGVuZ3RoICE9IDAgJiYgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uYXR0ciA9PSBhdHRyKSAhPSAtMSkge1xuICAgICAgb3BlcmF0aW9uID0gdGhpcy5ncm91cGVkQ29sdW1uVHlwZXNbdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uYXR0ciA9PSBhdHRyKV0udHlwZTtcbiAgICB9XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihhdHRyKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wpKSB7XG4gICAgICByZXR1cm4gcm93W2F0dHJdO1xuICAgIH1cbiAgICBjb25zdCB1c2VSZW5kZXJlciA9IG9Db2wucmVuZGVyZXIgJiYgb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICBpZiAob3BlcmF0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KHJvd1tvQ29sLmF0dHJdKTtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldEN1cnJlbnRMYW5nKCk7XG4gICAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgICBjYXNlIFwiWUVBUlwiOiByZXR1cm4gZGF0ZS55ZWFyKCk7XG4gICAgICAgIGNhc2UgXCJNT05USFwiOiByZXR1cm4gbW9tZW50KCkubG9jYWxlKGxhbmd1YWdlKS5tb250aChkYXRlLm1vbnRoKCkpLmZvcm1hdChcIk1NTU1cIik7XG4gICAgICAgIGNhc2UgXCJZRUFSX01PTlRIXCI6IHJldHVybiBtb21lbnQoKS5sb2NhbGUobGFuZ3VhZ2UpLm1vbnRoKGRhdGUubW9udGgoKSkueWVhcihkYXRlLnllYXIoKSkuZm9ybWF0KFwiTU1NTSwgWVlZWVwiKTtcbiAgICAgICAgY2FzZSBcIllFQVJfTU9OVEhfREFZXCI6IHJldHVybiB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBkYXRlR3JvdXBlZENvbHVtblR5cGVzKGF0dHI6IHN0cmluZywgYWRkOiBib29sZWFuLCBvcGVyYXRpb24/OiBzdHJpbmcpIHtcbiAgICBsZXQgZ3JvdXBlZENvbHVtbnM6IE9Hcm91cGVkQ29sdW1uVHlwZXNbXSA9IFtdO1xuICAgIGxldCBpbmRleCA9IHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmF0dHIgPT0gYXR0cik7XG4gICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICBpZiAoIWFkZCkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMucHVzaCh7IFwiYXR0clwiOiBhdHRyLCBcInR5cGVcIjogb3BlcmF0aW9uIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5UeXBlcyA9IGdyb3VwZWRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lR3JvdXBIZWFkZXIocm93OiBPVGFibGVHcm91cGVkUm93KTogc3RyaW5nIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gJyc7XG4gICAgaWYgKHJvdy5sZXZlbCA8PSAxMCkge1xuICAgICAgY2xhc3NOYW1lID0gJ28tdGFibGUtZ3JvdXAtcm93IG8tdGFibGUtZ3JvdXAtcm93LWxldmVsLScgKyByb3cubGV2ZWw7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBwcml2YXRlIHN0b3BFZGl0aW9uKGNsZWFyU2VsZWN0aW9uPzogYm9vbGVhbikge1xuICAgIGNsZWFyU2VsZWN0aW9uID0gY2xlYXJTZWxlY3Rpb24gPyBjbGVhclNlbGVjdGlvbiA6IGZhbHNlO1xuICAgIHRoaXMuZWRpdGluZ0NlbGwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25BbmRFZGl0aW5nKGNsZWFyU2VsZWN0aW9uKTtcbiAgfVxuXG4gIHN0b3JlRmlsdGVySW5TdGF0ZShhcmc6IE9GaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RvcmVGaWx0ZXIoYXJnKTtcbiAgfVxuXG4gIHJlaW5pdGlhbGl6YXRlUXVpY2tGaWx0ZXJDb2x1bW5zKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1uc1xuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNlYXJjaGFibGUgJiYgY29sdW1uLnZpc2libGUpXG4gICAgICAuZm9yRWFjaChjb2x1bW4gPT4gY29sdW1uLnNlYXJjaGluZyA9IHRydWUpXG4gIH1cblxuICByZWluaXRpYWxpemVTb3J0Q29sdW1ucyhzb3J0Q29sdW1ucz86IFNRTE9yZGVyW10pIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVycyA9IFtdO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzb3J0Q29sdW1ucykpIHtcbiAgICAgIHRoaXMuc29ydENvbEFycmF5ID0gc29ydENvbHVtbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VTb3J0Q29sdW1ucygpO1xuICAgIH1cbiAgICB0aGlzLnNvcnQuc2V0U29ydENvbHVtbnModGhpcy5zb3J0Q29sQXJyYXkpO1xuICAgIHRoaXMucmVmcmVzaFNvcnRIZWFkZXJzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVmcmVzaFNvcnRIZWFkZXJzKCkge1xuICAgIHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcihoZWFkZXIgPT4gVXRpbC5pc0RlZmluZWQoaGVhZGVyLm1hdFNvcnRIZWFkZXIpKS5mb3JFYWNoKGhlYWRlciA9PiBoZWFkZXIubWF0U29ydEhlYWRlci5yZWZyZXNoKCkpO1xuICB9XG5cbiAgZ2V0UXVpY2tGaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSA/XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnZhbHVlIDpcbiAgICAgICcnO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5Q2VsbFJlbmRlcmVycygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHF1aWNrRmlsdGVyVmFsdWUgPSB0aGlzLmdldFF1aWNrRmlsdGVyVmFsdWUoKTtcblxuICAgIGlmICgoVXRpbC5pc0RlZmluZWQocXVpY2tGaWx0ZXJWYWx1ZSkgJiYgcXVpY2tGaWx0ZXJWYWx1ZS5sZW5ndGggPiAwKSB8fCB0aGlzLnNvcnRDb2xBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5vVGFibGVPcHRpb25zLmNvbHVtbnNcbiAgICAgICAgLmZpbHRlcihvQ29sID0+IG9Db2wuc2VhcmNoaW5nICYmIHRoaXMuaXNJbnN0YW5jZU9mT1RhYmxlQ2VsbFJlbmRlcmVyU2VydmljZUNvbXBvbmVudChvQ29sLnJlbmRlcmVyKSlcbiAgICAgICAgLm1hcChvQ29sID0+IChvQ29sLnJlbmRlcmVyIGFzIGFueSkucXVlcnlBbGxEYXRhKCkpO1xuXG4gICAgICByZXR1cm4gcXVlcmllcy5sZW5ndGggPiAwID8gY29tYmluZUxhdGVzdChxdWVyaWVzKSA6IG9mKG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICB0YWJsZVF1aWNrRmlsdGVyQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucXVlcnlDZWxsUmVuZGVyZXJzKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5xdWlja0ZpbHRlciA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG9uTWF0U29ydENoYW5nZVxuICBwdWJsaWMgZmlsdGVyRGF0YSh2YWx1ZT86IHN0cmluZywgbG9hZE1vcmU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgLy9cbiAgfVxuXG4gIHNldE9UYWJsZUNvbHVtbnNHcm91cGluZyh2YWx1ZTogT1RhYmxlQ29sdW1uc0dyb3VwaW5nKSB7XG4gICAgdGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldENvbHVtbkdyb3VwaW5nQ29tcG9uZW50KGNvbHVtbkF0dHI6IHN0cmluZyk6IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudCB7XG4gICAgbGV0IHJlc3VsdDogT1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29sdW1uQ29tcG9uZW50O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudCkpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50LmdldENvbHVtbkdyb3VwaW5nKGNvbHVtbkF0dHIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdXNlQ29sdW1uR3JvdXBpbmdBZ2dyZWdhdGUoY29sdW1uQXR0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW5BdHRyKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHNxbFR5cGUgPSB0aGlzLmdldFNxbFR5cGVzKClbY29sdW1uQXR0cl07XG4gICAgY29uc3QgaGFzRGVmYXVsdEFnZ3JlZ2F0ZSA9IFNRTFR5cGVzLmlzTnVtZXJpY1NRTFR5cGUoc3FsVHlwZSlcbiAgICAgICYmICghVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcikgfHwgT1RhYmxlQ29tcG9uZW50LkFWQUlMQUJMRV9HUk9VUElOR19DT0xVTU5TX1JFTkRFUkVSUy5pbmNsdWRlcyhvQ29sLnR5cGUpKTtcblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gaGFzRGVmYXVsdEFnZ3JlZ2F0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50LnVzZUNvbHVtbkFnZ3JlZ2F0ZShjb2x1bW5BdHRyLCBoYXNEZWZhdWx0QWdncmVnYXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja1ZpZXdwb3J0U2l6ZSgpIHtcbiAgICAvLyBJdHMgYSB0ZW1wb3JhcmlseSBmaXhlZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTAxMTdcbiAgICAvLyBTb2x2ZSB0aGUgaXNzdWUgd2hlbiBzd2l0Y2hpbmcgdGFicyB3aGVuIHRoZSB2aXJ0dWFsIHNjcm9sbGluZyBjb21wb25lbnQgaXMgdXNlZFxuICAgIC8vIGluIGEgbWF0IC0gdGFiIGNvbXBvbmVudCBhbmQgdmlydHVhbCBzY3JvbGwgd29yayBhYm5vcm1hbGx5XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNob3cgZXhwYW5kYWJsZSBpY29uIG9yIG5vdCBpZiBoYXMgZGF0YSBvciBub3RcbiAgc2hvd0V4cGFuZGFibGVJY29uKHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChVdGlsLmlzRGVmaW5lZCh0aGlzLnNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uKSAmJiB0aGlzLnNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uIGluc3RhbmNlb2YgRnVuY3Rpb24pID8gVXRpbC53cmFwSW50b09ic2VydmFibGUodGhpcy5zaG93RXhwYW5kYWJsZUljb25GdW5jdGlvbihyb3csIHJvd0luZGV4KSkgOiBvZih0cnVlKTtcbiAgfVxuXG4gIGdldENvbHVtbnNOb3RJbmNsdWRlZCgpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNvbHNOb3RJbmNsdWRlZCA9IFtdO1xuICAgIGNvbHNOb3RJbmNsdWRlZCA9IHRoaXMub1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihjID0+IHZvaWQgMCAhPT0gYy5yZW5kZXJlciAmJiAoYy50eXBlID09PSAnaW1hZ2UnIHx8IGMudHlwZSA9PT0gJ2FjdGlvbicpKS5tYXAoYyA9PiBjLmF0dHIpO1xuICAgIGNvbHNOb3RJbmNsdWRlZC5wdXNoKENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgY29sc05vdEluY2x1ZGVkLnB1c2goQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSk7XG4gICAgcmV0dXJuIGNvbHNOb3RJbmNsdWRlZDtcbiAgfVxuXG4gIGdldENvbHVtbk5hbWVzKGNvbHVtbnM6IHN0cmluZ1tdKTogeyBbY29sdW1uSWQ6IHN0cmluZ106IHN0cmluZzsgfSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW5OYW1lcyA9IHt9O1xuICAgIGNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgIGNvbnN0IG9Db2x1bW4gPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmluZChvYyA9PiBvYy5hdHRyID09PSBjKTtcbiAgICAgIHRhYmxlQ29sdW1uTmFtZXNbY10gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KG9Db2x1bW4udGl0bGUgPyBvQ29sdW1uLnRpdGxlIDogb0NvbHVtbi5hdHRyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGFibGVDb2x1bW5OYW1lcztcbiAgfVxuXG4gIHJlc2V0Q29sdW1uc1dpZHRoKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGMuZGVmaW5pdGlvbikpIHtcbiAgICAgICAgYy53aWR0aCA9IFV0aWwuaXNEZWZpbmVkKGMuZGVmaW5pdGlvbi53aWR0aCkgPyBjLmRlZmluaXRpb24ud2lkdGggOiBjLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYy53aWR0aCA9IFwiYXV0b1wiO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uc0RPTVdpZHRoKCk7XG4gIH1cblxuICB1cGRhdGVDb2x1bW5zRE9NV2lkdGgoKSB7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICBjLkRPTVdpZHRoID0gdGhpcy5nZXRUaFdpZHRoRnJvbU9Db2x1bW4oYyk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHB1YmxpYyBpc0Rpc2FibGVDaGVja2JveChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgZGlzYWJsZSA9IGZhbHNlO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbih7IC4uLml0ZW0gfSk7XG4gICAgfVxuICAgIHJldHVybiBkaXNhYmxlO1xuXG4gIH1cblxuICBnZXRTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0U25hY2tTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLnNuYWNrQmFyU2VydmljZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8tdGFibGUtY29udGFpbmVyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiIFtzdHlsZS5kaXNwbGF5XT1cImlzVmlzaWJsZSgpPyAnJyA6ICdub25lJ1wiXG4gIFtjbGFzcy5ibG9jay1ldmVudHNdPVwic2hvd0xvYWRpbmcgfCBhc3luY1wiPlxuXG4gIDxvLWRhdGEtdG9vbGJhciAjdGFibGVUb29sYmFyICpuZ0lmPVwiaGFzQ29udHJvbHMoKVwiIFt0aXRsZV09XCJ0aXRsZVwiIFtzaG93LXRpdGxlXT1cInNob3dUaXRsZVwiIGNsYXNzPVwiby10YWJsZS10b29sYmFyXCI+XG4gICAgPG5nLWNvbnRhaW5lciBvLWRhdGEtdG9vbGJhci1wcm9qZWN0aW9uLXN0YXJ0PlxuICAgICAgPG8tdGFibGUtYnV0dG9ucyAjdGFibGVCdXR0b25zIFtpbnNlcnQtYnV0dG9uXT1cImluc2VydEJ1dHRvblwiIFtyZWZyZXNoLWJ1dHRvbl09XCJyZWZyZXNoQnV0dG9uXCIgW2RlbGV0ZS1idXR0b25dPVwic2hvd0RlbGV0ZUJ1dHRvblwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJvLXRhYmxlLWJ1dHRvblwiPjwvbmctY29udGVudD5cbiAgICAgIDwvby10YWJsZS1idXR0b25zPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLXRhYmxlLXRvb2xiYXJdW3Bvc2l0aW9uPXN0YXJ0XVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby10YWJsZS10b29sYmFyXVtwb3NpdGlvbj1lbmRdXCIgbmdQcm9qZWN0QXM9XCJbby1kYXRhLXRvb2xiYXItY3VzdG9tLXByb2plY3Rpb24tZW5kXVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby10YWJsZS10b29sYmFyXVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGFpbmVyIG8tZGF0YS10b29sYmFyLXByb2plY3Rpb24tZW5kPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrZmlsdGVyQ29udGVudENoaWxkOyBlbHNlIGRlZmF1bHRRdWlja0ZpbHRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJvLXRhYmxlLXF1aWNrZmlsdGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRRdWlja0ZpbHRlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrRmlsdGVyXCI+XG4gICAgICAgICAgPG8tdGFibGUtcXVpY2tmaWx0ZXIgKG9uQ2hhbmdlKT1cInRhYmxlUXVpY2tGaWx0ZXJDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICA8L28tdGFibGUtcXVpY2tmaWx0ZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd1RhYmxlTWVudUJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm8tdGFibGUtbWVudS1idXR0b25cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGFibGVNZW51Lm1hdE1lbnVcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6bW9yZV92ZXJ0XCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG8tdGFibGUtbWVudSAjdGFibGVNZW51IFtzZWxlY3QtYWxsLWNoZWNrYm94XT1cInNlbGVjdEFsbENoZWNrYm94XCIgW2V4cG9ydC1idXR0b25dPVwiZXhwb3J0QnV0dG9uXCJcbiAgICAgICAgW2NvbHVtbnMtdmlzaWJpbGl0eS1idXR0b25dPVwiY29sdW1uc1Zpc2liaWxpdHlCdXR0b25cIiBbc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbl09XCJzaG93Q29uZmlndXJhdGlvbk9wdGlvblwiXG4gICAgICAgIFtzaG93LWZpbHRlci1vcHRpb25dPVwic2hvd0ZpbHRlck9wdGlvblwiIFtzaG93LXJlcG9ydC1vbi1kZW1hbmQtb3B0aW9uXT1cInNob3dSZXBvcnRPbkRlbWFuZE9wdGlvblwiXG4gICAgICAgIFtzaG93LWNoYXJ0cy1vbi1kZW1hbmQtb3B0aW9uXT1cInNob3dDaGFydHNPbkRlbWFuZE9wdGlvblwiIFtzaG93LXJlc2V0LXdpZHRoLW9wdGlvbl09XCJzaG93UmVzZXRXaWR0aE9wdGlvblwiIFtzaG93LWdyb3VwLWJ5LW9wdGlvbl09XCJncm91cGFibGVcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby10YWJsZS1vcHRpb25cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L28tdGFibGUtbWVudT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vLWRhdGEtdG9vbGJhcj5cblxuICA8ZGl2ICN0YWJsZUJvZHkgY2xhc3M9XCJvLXRhYmxlLWJvZHkgby1zY3JvbGxcIiBbY2xhc3MuaG9yaXpvbnRhbC1zY3JvbGxdPVwiaG9yaXpvbnRhbFNjcm9sbFwiIFtjbGFzcy5zY3JvbGxlZF09XCJob3Jpem9udGFsU2Nyb2xsZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVuYWJsZWRWaXJ0dWFsU2Nyb2xsOyBlbHNlIHRhYmxlV2l0aFZpcnR1YWxTY3JvbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXRhYmxlLW92ZXJmbG93IG8tc2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVXaXRoVmlydHVhbFNjcm9sbD5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgI3ZpcnR1YWxTY3JvbGxWaWV3UG9ydCBmeEZsZXg+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8IS0tVEFCTEUgUEFHSU5BVE9SLS0+XG4gIDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hdG9yICYmIChzaG93TG9hZGluZyB8IGFzeW5jKT09PWZhbHNlXCIgI21hdHBhZ2luYXRvciBbbGVuZ3RoXT1cImRhdGFTb3VyY2U/LnJlc3VsdHNMZW5ndGhcIiBbcGFnZUluZGV4XT1cInBhZ2luYXRvci5wYWdlSW5kZXhcIiBbcGFnZVNpemVdPVwicXVlcnlSb3dzXCJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2luYXRvci5wYWdlU2l6ZU9wdGlvbnNcIiAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJwYWdpbmF0b3Iuc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcIj5cbiAgPC9tYXQtcGFnaW5hdG9yPlxuXG4gIDwhLS1MT0FESU5HLS0+XG4gIDxkaXYgI3NwaW5uZXJDb250YWluZXIgKm5nSWY9XCJzaG93TG9hZGluZyB8IGFzeW5jXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIFtuZ1N0eWxlXT1cInsndG9wLnB4JzogaGVhZGVySGVpZ2h0fVwiXG4gICAgY2xhc3M9XCJzcGlubmVyLWNvbnRhaW5lclwiIFtjbGFzcy5zcGlubmVyLWNvbnRhaW5lci1zY3JvbGxhYmxlXT1cImxvYWRpbmdTY3JvbGwgfCBhc3luY1wiPlxuICAgIDxvLXRhYmxlLXNrZWxldG9uPjwvby10YWJsZS1za2VsZXRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEaXNhYmxlIGJsb2NrZXIgLS0+XG4gIDxkaXYgKm5nSWY9XCIhZW5hYmxlZFwiIGNsYXNzPVwiby10YWJsZS1kaXNhYmxlZC1ibG9ja2VyXCI+PC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0YWJsZT5cblxuICA8dGFibGUgKm5nSWY9XCIoc2hvd0xvYWRpbmcgfCBhc3luYyk9PT1mYWxzZVwiIG1hdC10YWJsZSAjdGFibGUgW2NsYXNzLmF1dG9hZGp1c3RlZF09XCJhdXRvQWRqdXN0XCIgW3RyYWNrQnldPVwiZ2V0VHJhY2tCeUZ1bmN0aW9uKClcIiBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgb01hdFNvcnRcbiAgICBbb01hdFNvcnRDb2x1bW5zXT1cInNvcnRDb2xBcnJheVwiIFtuZ0NsYXNzXT1cInJvd0hlaWdodE9ic2VydmFibGUgfCBhc3luY1wiIChjZGtPYnNlcnZlQ29udGVudCk9XCJwcm9qZWN0Q29udGVudENoYW5nZWQoKVwiXG4gICAgW29UYWJsZUV4cGFuZGVkRm9vdGVyXT1cIiEobG9hZGluZyB8IGFzeW5jKVwiIFtvVGFibGVFeHBhbmRlZEZvb3RlckNvbHNwYW5dPVwidmlzaWJsZUNvbEFycmF5Lmxlbmd0aFwiIFttdWx0aVRlbXBsYXRlRGF0YVJvd3NdPVwic2hvd0V4cGFuZGFibGVSb3coKVwiXG4gICAgYXJpYS1kZXNjcmliZWRieT1cIm9udGltaXplLXdlYiB0YWJsZVwiPlxuXG4gICAgPCEtLUNoZWNrYm94IENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubmFtZVwiICpuZ0lmPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZUNvbHVtblNlbGVjdEFsbENvbnRlbnRDaGlsZDsgZWxzZSBjdXN0b21IZWFkZXJTZWxlY3RBbGxUZW1wbGF0ZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCIgKm5nSWY9XCJpc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpXCI+XG4gICAgICAgICAgICA8by10YWJsZS1oZWFkZXItc2VsZWN0LWFsbCBbY29sdW1uXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uXCI+PC9vLXRhYmxlLWhlYWRlci1zZWxlY3QtYWxsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCBuYW1lPVwiaWRbXVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlQ2hlY2tib3gocm93KVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdGlvbkNoZWNrYm94VG9nZ2xlKCRldmVudCwgcm93KVwiIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUhlYWRlclNlbGVjdEFsbFRlbXBsYXRlPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzcy5yZXNpemFibGVdPVwicmVzaXphYmxlXCIgY2xhc3M9XCJtYXQtaGVhZGVyLXNlbGVjdC1hbGwtd2l0aC10aXRsZSBvLWNlbnRlclwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLndpZHRoXCIgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbilcIlxuICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubWF4V2lkdGhcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgICAgPG8tdGFibGUtaGVhZGVyLXNlbGVjdC1hbGwgW2NvbHVtbl09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtblwiPjwvby10YWJsZS1oZWFkZXItc2VsZWN0LWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiby1jZW50ZXJcIiBbc3R5bGUud2lkdGhdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4ob1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5tYXhXaWR0aFwiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggbmFtZT1cImlkW11cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUNoZWNrYm94KHJvdylcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3Rpb25DaGVja2JveFRvZ2dsZSgkZXZlbnQsIHJvdylcIiBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cblxuICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj48L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLUV4cGFuZGFibGUgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJvVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4ubmFtZVwiICpuZ0lmPVwiaXNDb2x1bW5FeHBhbmRhYmxlKClcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgIHt7IG9UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbi50aXRsZSB9fVxuICAgICAgPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7bGV0IHJvd0luZGV4ID0gZGF0YUluZGV4XCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNob3dFeHBhbmRhYmxlSWNvbihyb3csIHJvd0luZGV4KSB8IGFzeW5jXCIgKGNsaWNrKT1cInRvb2dsZVJvd0V4cGFuZGFibGUocm93LCByb3dJbmRleCwgJGV2ZW50KVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0V4cGFuZGVkKHJvdylcIj57eyB0YWJsZVJvd0V4cGFuZGFibGUuaWNvbkNvbGxhcHNlIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0V4cGFuZGVkKHJvdylcIj57eyB0YWJsZVJvd0V4cGFuZGFibGUuaWNvbkV4cGFuZCB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gR2VuZXJpYyBjb2x1bW4gZGVmaW5pdGlvbiAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygb1RhYmxlT3B0aW9ucy5jb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiPlxuICAgICAgPCEtLURlZmluZSBoZWFkZXItY2VsbC0tPlxuXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImdldFRpdGxlQWxpZ25DbGFzcyhjb2x1bW4pXCIgW2NsYXNzLnJlc2l6YWJsZV09XCJyZXNpemFibGVcIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihjb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgIDxvLXRhYmxlLWhlYWRlciBbY29sdW1uXT1cImNvbHVtblwiPjwvby10YWJsZS1oZWFkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90aD5cblxuXG4gICAgICA8IS0tRGVmaW5lIG1hdC1jZWxsLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYmxlLm11bHRpVGVtcGxhdGVEYXRhUm93czsgZWxzZSBjZWxsVGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3NcIj5cbiAgICAgICAgPHRkICNjZWxsIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXggPSBpbmRleCBcIiBbbmdDbGFzc109XCJbY29sdW1uLmNsYXNzTmFtZSwgZ2V0Q2VsbEFsaWduQ2xhc3MoY29sdW1uKV1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljayhyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNlbGwsICRldmVudClcIiAoZGJsY2xpY2spPVwiaGFuZGxlRG91YmxlQ2xpY2socm93LCBjb2x1bW4sIHJvd0luZGV4LCBjZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICBbY2xhc3MuZW1wdHktY2VsbF09XCJpc0VtcHR5KHJvd1tjb2x1bW4ubmFtZV0pXCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhY29sdW1uLmhhc1Rvb2x0aXAoKVwiIFttYXRUb29sdGlwXT1cImNvbHVtbi5nZXRUb29sdGlwKHJvdylcIlxuICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjc1MFwiIG1hdFRvb2x0aXBDbGFzcz1cIm8tdGFibGUtY2VsbC10b29sdGlwXCJcbiAgICAgICAgICBbY2xhc3Muby1tYXQtY2VsbC1tdWx0aWxpbmVdPVwiKGNvbHVtbi5pc011bHRpbGluZSB8IGFzeW5jKVwiIFtvQ29udGV4dE1lbnVdPVwidGFibGVDb250ZXh0TWVudVwiXG4gICAgICAgICAgW29Db250ZXh0TWVudURhdGFdPVwieyBjZWxsTmFtZTpjb2x1bW4ubmFtZSwgcm93VmFsdWU6cm93LCByb3dJbmRleDpyb3dJbmRleH1cIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImdldE1pbldpZHRoQ29sdW1uKGNvbHVtbilcIiBbc3R5bGUubWF4LXdpZHRoXT1cImNvbHVtbi5tYXhXaWR0aFwiXG4gICAgICAgICAgW2NsYXNzLm8tdGFibGUtZWRpdGluZy1jZWxsXT1cImlzUm93U2VsZWN0ZWQocm93KSAmJiBjb2x1bW4uZWRpdGluZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsUmVuZGVyZXI7Y29udGV4dDp7Y29sdW1uOmNvbHVtbixyb3c6cm93fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2NlbGxUZW1wbGF0ZU11bHRpVGVtcGxhdGVEYXRhUm93cz5cbiAgICAgICAgPHRkICNjZWxsIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXggPSBkYXRhSW5kZXggXCIgW25nQ2xhc3NdPVwiW2NvbHVtbi5jbGFzc05hbWUsIGdldENlbGxBbGlnbkNsYXNzKGNvbHVtbildXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2socm93LCBjb2x1bW4sIHJvd0luZGV4LCBjZWxsLCAkZXZlbnQpXCIgKGRibGNsaWNrKT1cImhhbmRsZURvdWJsZUNsaWNrKHJvdywgY29sdW1uLCByb3dJbmRleCwgY2VsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgW2NsYXNzLmVtcHR5LWNlbGxdPVwiaXNFbXB0eShyb3dbY29sdW1uLm5hbWVdKVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIWNvbHVtbi5oYXNUb29sdGlwKClcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uZ2V0VG9vbHRpcChyb3cpXCJcbiAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI3NTBcIiBtYXRUb29sdGlwQ2xhc3M9XCJvLXRhYmxlLWNlbGwtdG9vbHRpcFwiXG4gICAgICAgICAgW2NsYXNzLm8tbWF0LWNlbGwtbXVsdGlsaW5lXT1cIihjb2x1bW4uaXNNdWx0aWxpbmUgfCBhc3luYylcIiBbb0NvbnRleHRNZW51XT1cInRhYmxlQ29udGV4dE1lbnVcIlxuICAgICAgICAgIFtvQ29udGV4dE1lbnVEYXRhXT1cInsgY2VsbE5hbWU6Y29sdW1uLm5hbWUsIHJvd1ZhbHVlOnJvdywgcm93SW5kZXg6cm93SW5kZXh9XCIgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihjb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5vLXRhYmxlLWVkaXRpbmctY2VsbF09XCJpc1Jvd1NlbGVjdGVkKHJvdykgJiYgY29sdW1uLmVkaXRpbmdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFJlbmRlcmVyO2NvbnRleHQ6e2NvbHVtbjpjb2x1bW4scm93OnJvd31cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwhLS1EZWZpbmUgbWF0LWZvb3Rlci1jZWxsLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFscyB8IGFzeW5jXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW25nQ2xhc3NdPVwiY29sdW1uLmNsYXNzTmFtZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiICpuZ0lmPVwiY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLnRpdGxlXCI+XG4gICAgICAgICAgICB7eyBjb2x1bW4uYWdncmVnYXRlLnRpdGxlIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLnJlbmRlcmVyXCI+XG4gICAgICAgICAgICB7eyBkYXRhU291cmNlLmdldEFnZ3JlZ2F0ZURhdGEoY29sdW1uKSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbHVtbi5yZW5kZXJlciAmJiBjb2x1bW4uYWdncmVnYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLnJlbmRlcmVyLnRlbXBsYXRlcmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y2VsbHZhbHVlOiBkYXRhU291cmNlLmdldEFnZ3JlZ2F0ZURhdGEoY29sdW1uKX1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRXhwYW5kZWQgQ29udGVudCBDb2x1bW4gLSBUaGUgZGV0YWlsIHJvdyBpcyBtYWRlIHVwIG9mIHRoaXMgb25lIGNvbHVtbiB0aGF0IHNwYW5zIGFjcm9zcyBhbGwgY29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXhwYW5kZWRSb3dcIj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXg9IGRhdGFJbmRleFwiIFthdHRyLmNvbHNwYW5dPVwib1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5sZW5ndGhcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImdldEV4cGFuZGVkUm93Q29udGFpbmVyQ2xhc3Mocm93SW5kZXgpXCIgW0BkZXRhaWxFeHBhbmRdPVwiZ2V0U3RhdGVFeHBhbmQocm93KVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tRk9PVEVSLUlOU0VSVEFCTEUtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0xhc3RJbnNlcnRhYmxlUm93ICYmIG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5uYW1lICsgZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpXCIgKm5nSWY9XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBvVGFibGVPcHRpb25zLmNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lKyBnZXRTdWZmaXhDb2x1bW5JbnNlcnRhYmxlKClcIj5cblxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiAhb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImluc2VydGFibGUtZm9ybS1maWVsZCBvLXRhYmxlLWNlbGwtZWRpdG9yLXRleHQgby10YWJsZS1jZWxsLWVkaXRvclwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0UGxhY2Vob2xkZXIoY29sdW1uKVwiIFtpZF09XCJjb2x1bW4uYXR0clwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0Q29udHJvbChjb2x1bW4pXCIgW3JlcXVpcmVkXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5SZXF1aXJlZChjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uSGFzRXJyb3IoY29sdW1uLCAncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uUkVRVUlSRUQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnVzZUNlbGxFZGl0b3IoY29sdW1uKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uRWRpdG9yc1tjb2x1bW4uYXR0cl0udGVtcGxhdGVyZWZcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3d2YWx1ZTogb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5yb3dEYXRhIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGaXJzdEluc2VydGFibGVSb3cgJiYgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImdldENvbHVtbkluc2VydGFibGUob1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubmFtZSlcIiAqbmdJZj1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcIj5cbiAgICAgICAgPHRkIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG9UYWJsZU9wdGlvbnMuY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiZ2V0Q29sdW1uSW5zZXJ0YWJsZShjb2x1bW4ubmFtZSlcIj5cblxuICAgICAgICA8dGQgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiAhb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImluc2VydGFibGUtZm9ybS1maWVsZFwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0UGxhY2Vob2xkZXIoY29sdW1uKVwiIFtpZF09XCJjb2x1bW4uYXR0clwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0Q29udHJvbChjb2x1bW4pXCIgW3JlcXVpcmVkXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5SZXF1aXJlZChjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uSGFzRXJyb3IoY29sdW1uLCAncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uUkVRVUlSRUQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnVzZUNlbGxFZGl0b3IoY29sdW1uKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uRWRpdG9yc1tjb2x1bW4uYXR0cl0udGVtcGxhdGVyZWZcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3d2YWx1ZTogb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5yb3dEYXRhIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBEZWZpbml0aW9uIGNvbHVtbiBncm91cCBoZWFkZXIgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdyb3VwaW5nSGVhZGVyc1Jvd3M7IGxldCBpID0gaW5kZXhcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblwiPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGdyb3VwXCIgY2xhc3M9XCJncm91cGluZy1yb3dcIiBbb0NvbnRleHRNZW51XT1cInRhYmxlQ29udGV4dE1lbnVcIlxuICAgICAgICBbb0NvbnRleHRNZW51RGF0YV09XCJ7IGNlbGxOYW1lOmNvbHVtbiwgcm93VmFsdWU6Z3JvdXAsIHJvd0luZGV4Oml9XCIgW25nQ2xhc3NdPVwiZ2V0R3JvdXBIZWFkZXJDZWxsQWxpZ25DbGFzcyhjb2x1bW4pXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpPT09MFwiIGNsYXNzPVwiZ3JvdXBpbmctdGl0bGUtd3JhcHBlclwiIFtuZ1N0eWxlXT1cInsncGFkZGluZy1sZWZ0JzogMjAqKGdyb3VwLmxldmVsLTEpKydweCd9XCI+XG4gICAgICAgICAgPG1hdC1pY29uPnt7IGdyb3VwLmV4cGFuZGVkID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fTwvbWF0LWljb24+XG4gICAgICAgICAge3sgZ3JvdXAudGl0bGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cGluZy1hZ2dyZWdhdGVcIiAqbmdJZj1cImdyb3VwLmhhc0FjdGl2ZUFnZ3JlZ2F0ZSh2aXNpYmxlQ29sQXJyYXlbaV0pXCI+XG4gICAgICAgICAge3sgZ3JvdXAuZ2V0Q29sdW1uQWN0aXZlQWdncmVnYXRlVGl0bGUodmlzaWJsZUNvbEFycmF5W2ldKSB8IG9UcmFuc2xhdGUgfX0gOlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihjb2x1bW4pLnJlbmRlcmVyXCI+XG4gICAgICAgICAgICB7eyBncm91cC5nZXRDb2x1bW5BZ2dyZWdhdGVWYWx1ZSh2aXNpYmxlQ29sQXJyYXlbaV0pfX1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihjb2x1bW4pLnJlbmRlcmVyXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRPQ29sdW1uRnJvbUdyb3VwSGVhZGVyQ29sdW1uKGNvbHVtbikucmVuZGVyZXI/LnRlbXBsYXRlcmVmOyBjb250ZXh0OnsgY2VsbHZhbHVlOiAgZ3JvdXAuZ2V0Q29sdW1uQWdncmVnYXRlVmFsdWUodmlzaWJsZUNvbEFycmF5W2ldKSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInBvc2l0aW9uXCI+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+IHt7cm93fX0gPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ciAjdGFibGVIZWFkZXIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIm9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHN0aWNreTogZml4ZWRIZWFkZXJcIj48L3RyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZS5tdWx0aVRlbXBsYXRlRGF0YVJvd3M7IGVsc2Ugcm93VGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3NcIj5cbiAgICAgIDx0ciBtYXQtcm93IG9UYWJsZVJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uczsgd2hlbjppc05vdEdyb3VwOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIiBbbmdDbGFzc109XCJyb3cgfCBvVGFibGVSb3dDbGFzczogcm93SW5kZXg6IHJvd0NsYXNzXCI+XG4gICAgICA8L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjcm93VGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3M+XG4gICAgICA8dHIgbWF0LXJvdyBvVGFibGVSb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IG9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHdoZW46aXNOb3RHcm91cDsgbGV0IHJvd0luZGV4ID0gZGF0YUluZGV4XCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiIFtuZ0NsYXNzXT1cInJvdyB8IG9UYWJsZVJvd0NsYXNzOiByb3dJbmRleDogcm93Q2xhc3NcIj5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gUm93IEdyb3VwIGhlYWRlciAtLT5cbiAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZ3JvdXBpbmdIZWFkZXJzUm93czsgd2hlbjppc0dyb3VwXCIgKGNsaWNrKT1cImdyb3VwSGVhZGVyQ2xpY2socm93KVwiXG4gICAgICBbbmdDbGFzc109XCJnZXRDbGFzc05hbWVHcm91cEhlYWRlcihyb3cpXCI+XG4gICAgPC90cj5cblxuICAgIDwhLS0gRXhwYW5kZWQgZGV0YWlsIHJvdy0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNFeHBhbmRlZFJvd1wiPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiIGNsYXNzPVwiby10YWJsZS1yb3ctZXhwYW5kZWRcIj48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dMYXN0SW5zZXJ0YWJsZVJvd1wiPlxuICAgICAgPHRyIG1hdC1mb290ZXItcm93ICptYXRGb290ZXJSb3dEZWY9XCJvVGFibGVPcHRpb25zLmNvbHVtbnNJbnNlcnRhYmxlczsgc3RpY2t5OiB0cnVlXCJcbiAgICAgICAgKGtleXVwKT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaGFuZGxlS2V5Ym9hcmRFdmVudCgkZXZlbnQpXCIgY2xhc3M9XCJvLXRhYmxlLWluc2VydGFibGVcIj48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Rmlyc3RJbnNlcnRhYmxlUm93XCI+XG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIm9UYWJsZU9wdGlvbnMuY29sdW1uc0luc2VydGFibGVzOyBzdGlja3k6IHRydWVcIlxuICAgICAgICAoa2V5dXApPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5oYW5kbGVLZXlib2FyZEV2ZW50KCRldmVudClcIiBjbGFzcz1cIm8tdGFibGUtaW5zZXJ0YWJsZVwiPiA8L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxzIHwgYXN5bmNcIj5cbiAgICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwib1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uczsgc3RpY2t5OiB0cnVlXCIgY2xhc3M9XCJvLXRhYmxlLWFnZ3JlZ2F0ZVwiPlxuICAgICAgPC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC90YWJsZT5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZXh0TWVudUNvbnRlbnRDaGlsZCAmJiBjb250ZXh0TWVudVwiPlxuICA8by10YWJsZS1jb250ZXh0LW1lbnUgW2luc2VydF09XCJpbnNlcnRCdXR0b25cIiBbZWRpdF09XCJlZGl0aW9uTW9kZSAhPT0gRURJVF9NT0RFX05PTkVcIiBbdmlldy1kZXRhaWxdPVwiZGV0YWlsTW9kZSAhPT0gREVUQUlMX01PREVfTk9ORVwiXG4gICAgW3JlZnJlc2hdPVwicmVmcmVzaEJ1dHRvblwiIFtkZWxldGVdPVwiZGVsZXRlQnV0dG9uXCIgW2ZpbHRlcl09XCJzaG93RmlsdGVyT3B0aW9uXCIgW2dyb3VwLWJ5LXJvd109XCJncm91cGFibGVcIj5cbiAgPC9vLXRhYmxlLWNvbnRleHQtbWVudT5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2NlbGxSZW5kZXJlciBsZXQtcm93PVwicm93XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uLnJlbmRlcmVyICE9IG51bGwgJiYgKCFjb2x1bW4uZWRpdGluZyB8fCBjb2x1bW4uZWRpdGluZyAmJiAhaXNSb3dTZWxlY3RlZChyb3cpKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4ucmVuZGVyZXI/LnRlbXBsYXRlcmVmOyBjb250ZXh0OnsgY2VsbHZhbHVlOiByb3dbY29sdW1uLm5hbWVdLCByb3d2YWx1ZTpyb3cgfVwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc1Jvd1NlbGVjdGVkKHJvdykgJiYgY29sdW1uLmVkaXRpbmdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLmVkaXRvcj8udGVtcGxhdGVyZWY7IGNvbnRleHQ6eyBjZWxsdmFsdWU6IHJvd1tjb2x1bW4ubmFtZV0sIHJvd3ZhbHVlOnJvdyB9XCI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uLnR5cGUgPT09ICdlZGl0QnV0dG9uSW5Sb3cnIHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsQnV0dG9uSW5Sb3cnXCI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cIm8tYWN0aW9uLWNlbGwtcmVuZGVyZXJcIiAoY2xpY2spPVwib25EZXRhaWxCdXR0b25DbGljayhjb2x1bW4sIHJvdywgJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57eyBnZXREZXRhaWxCdXR0b25JY29uKGNvbHVtbikgfX08L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0Pnt7IHJvd1tjb2x1bW4ubmFtZV0gfX08L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=