@sabstravtech/obtservices 0.2.2505190850 → 0.2.2505201645
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sabstravtech-obtservices-base.umd.js +19 -9
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/esm2015/base/lib/vendor/classes/cabhire-enterprise-search.js +4 -4
- package/esm2015/base/lib/vendor/classes/flight-enterprise-search.js +1 -1
- package/esm2015/base/lib/vendor/classes/rail-enterprise-search.js +7 -3
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +14 -5
- package/fesm2015/sabstravtech-obtservices-base.js +20 -7
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -3261,4 +3261,4 @@ export class FlightEnterpriseSearch extends BaseEnterpriseSearch {
|
|
|
3261
3261
|
}
|
|
3262
3262
|
FlightEnterpriseSearch.STORAGE_SESSION_PARAMS = 'search_flight';
|
|
3263
3263
|
FlightEnterpriseSearch.STORAGE_SESSION_RESULTS = 'results_flight';
|
|
3264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3pELE9BQU8sRUFBRSxJQUFJLEVBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQTZCLE1BQU0sTUFBTSxDQUFDO0FBSTNGLE9BQU8sRUFRTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBSWhCLG1CQUFtQixFQVNuQixXQUFXLEVBSVgsWUFBWSxFQUVaLFdBQVcsRUFLWixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCw0QkFBNEIsRUFFNUIsbUJBQW1CLEVBVW5CLGFBQWEsRUFNYixjQUFjLEVBS2QsZUFBZSxFQUNmLGNBQWMsRUFDZixNQUFNLGdCQUFnQixDQUFDO0FBUXhCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsa0JBQWtCLEVBR25CLE1BQU0seUNBQXlDLENBQUM7QUFFakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBS3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxx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RUFBQyxLQUFTO1FBQzFFLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUMsUUFBUSxFQUFDLGdCQUFnQixFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQTtJQUN6SCxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQXdCO1FBQ3JDLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsV0FBQyxPQUFBLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsT0FBSyxNQUFBLE9BQU8sQ0FBQyxDQUFDLENBQUMsMENBQUUsU0FBUyxDQUFBLENBQUEsRUFBQSxDQUFDO1lBQ25FLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7O0FBeG5JZSw2Q0FBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsOENBQXVCLEdBQUcsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBCYXNlRW50ZXJwcmlzZVNlYXJjaCB9IGZyb20gJy4vYmFzZS1lbnRlcnByaXNlJztcbmltcG9ydCB7IEJhc2VTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgYWdlcywgVHJhdmVsbGVyIH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmb3JrSm9pbiwgbGFzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVmFsdWVEaXNwbGF5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92YWx1ZS1kaXNwbGF5JztcbmltcG9ydCB7IEZsaWdodEZpbHRlcnMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1maWx0ZXJzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZWxlY3RGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdC1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzLFxuICBCYWdnYWdlQWxsb3dhbmNlLFxuICBCYXNrZXRJdGVtLFxuICBDdXJyZW5jeUNvZGUsXG4gIERlc3RpbmF0aW9uRW50cnksXG4gIEZhcmVDb25kaXRpb25FbnRyeSxcbiAgRmFyZUNvbmRpdGlvbnMsXG4gIEZhcmVUeXBlLFxuICBGbGlnaHRDYWJpbkNsYXNzLFxuICBGbGlnaHRJdGluZXJhcnksXG4gIEZsaWdodEpvdXJuZXksXG4gIEZsaWdodFBhc3Nlbmdlck9iamVjdCxcbiAgRmxpZ2h0UGFzc2VuZ2VyVHlwZSxcbiAgRmxpZ2h0U2VhdE1hcFNlYXRzLFxuICBHcm91cGVkRmllbGRzRnJhZ21lbnQsXG4gIEdyb3VwRmxpZ2h0cyxcbiAgSW5wdXRGbGlnaHRKb3VybmV5LFxuICBJdGluZXJhcnlTdW1tYXJ5LFxuICBNYXRjaGluZ0ZsaWdodHMsXG4gIFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyxcbiAgU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMsXG4gIFNlcnZpY2VUeXBlLFxuICBGbGlnaHRBbmNpbGxhcnlPcHRpb25zLFxuICBGbGlnaHRFeHRyYXNPcHRpb25zLFxuICBGbGlnaHRPcHRpb25zLFxuICBMb2NhdGlvblR5cGUsXG4gIFJhaWxTdGF0aW9uLFxuICBCYWdnYWdlVHlwZSxcbiAgRmxpZ2h0Sm91cm5leUV4Y2hhbmdlLFxuICBGbGlnaHRFeGNoYW5nZURldGFpbHMsXG4gIEZsaWdodEZhcmVSdWxlc1Jlc3BvbnNlLFxuICBGbGlnaHRVcHNlbGxPZmZlcnNSZXN1bHRcbn0gZnJvbSAnLi4vdHlwZXMvZ3JhcGhxbC50eXBlcyc7XG5pbXBvcnQge1xuICBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLFxuICBGbGlnaHRBbGxRdW90ZVJlc3VsdCxcbiAgRmxpZ2h0RGlyZWN0aW9uRW51bSxcbiAgRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LFxuICBGbGlnaHRHcm91cHMsXG4gIEZsaWdodEl0aW5lcmFyeUNsYXNzLFxuICBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgRmxpZ2h0TXVsdGksXG4gIEZsaWdodFF1b3RlUmVzdWx0QXJyYXksXG4gIEdyZWVuZXJDaG9pY2UsXG4gIEdyb3VwZWRGbGlnaHRzLFxuICBMb2NhdGlvbkRldGFpbHMsXG4gIExvY2F0aW9uVHlwZXMsXG4gIE1pbk1heCxcbiAgTmdiRGF0ZVN0cnVjdCxcbiAgT0JUQWlybGluZXNEZXRhaWxzLFxuICBPQlRBaXJwb3J0RGV0YWlscyxcbiAgT0JURmxpZ2h0Q2FiaW5DbGFzcyxcbiAgUHJlZmVycmVkRmxhZ3MsXG4gIFJlY2VudFNlYXJjaCxcbiAgUmVjb3JkUnVsZUFjdGlvbixcbiAgUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UsXG4gIFNhdmVGYXZvdXJpdGVTZWFyY2hSZXN1bHQsXG4gIFNlcnZpY2VQcm92aWRlcixcbiAgVHJhdmVsUG9saWNpZXNcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgQmFzZUZsaWdodFF1b3RlRmV0Y2hlciwgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL2ZsaWdodC1xdW90ZS5mZXRjaGVyJztcbmltcG9ydCB7XG4gIFVwZGF0ZUZsaWdodFNlYXRNYXBUeXBlLFxuICBCYXNlVXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWZsaWdodC1zZWF0LW1hcC51cGRhdGVyJztcbmltcG9ydCB7IEZ1bGxVc2VyRGV0YWlscywgVXNlclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0l1c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XG5pbXBvcnQge1xuICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxuICBGbGlnaHREaXNwbGF5VHlwZXMsXG4gIEZsaWdodEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2UsXG4gIEZsaWdodFRlbXBQYXJhbXNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7IElDaGVhcGVzdFByaWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZSc7XG5pbXBvcnQgeyBGbGlnaHRTZWFyY2hUeXBlIH0gZnJvbSAnLi9mbGlnaHQtc2VhcmNoLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBJTXVsdGlEZXN0aW5hdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LW11bHRpLWRlc3RpbmF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyRmF2b3J1cml0ZSB9IGZyb20gJy4vdXNlci1mYXZvdXJpdGUuZW51bSc7XG5pbXBvcnQge1xuICBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcbiAgQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyXG59IGZyb20gJy4uL2ZldGNoZXJzL2FwcGx5LWppdC1mbGlnaHQtcnVsZXMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGFsLW9wZW5lci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuL21vZGFsLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgSUZsaWdodFNlYXJjaEFyZ3MgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZsaWdodC1zZWFyY2gtYXJncy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JlZW5lckNob2ljZUltcGwgfSBmcm9tICcuL2dyZWVuZXJjaG9pc2UnO1xuaW1wb3J0IHsgQWlyVG9FdXJvIH0gZnJvbSAnLi4vZGF0YS9haXItdG8tZXVybyc7XG5pbXBvcnQgeyBBSVJUb1JhaWxVSyB9IGZyb20gJy4uL2RhdGEvYWlyLXRvLXJhaWwtdWsnO1xuaW1wb3J0IHsgRXJtVHJhdmVsbGVyVHlwZSB9IGZyb20gJy4vZXJtLXRyYXZlbGxlci10eXBlLmVudW0nO1xuaW1wb3J0IHtcbiAgQmFzZUdldEZsaWdodEV4dHJhc09wdGlvbnNGZXRjaGVyLFxuICBHZXRGbGlnaHRFeHRyYXNPcHRpb25zVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LWV4dHJhcy1vcHRpb25zLmZldGNoZXInO1xuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2VPYmplY3QsIElDaGVhcGVzdFByaWNlRGV0YWlscyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlYXBlc3QtcHJpY2Utb2JqZWN0JztcbmltcG9ydCB7IEZsaWdodEpvdXJuZXlUeXBlIH0gZnJvbSAnLi9mbGlnaHQtam91cm5leS10eXBlLXR5cGUuZW51bSc7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBGbGlnaHRBbW91bnQgfSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7IFRyYWlubGluZVNlYXJjaENvbmZpZ1R5cGVzIH0gZnJvbSAnLi9yYWlsLWVudGVycHJpc2Utc2VhcmNoJztcbmltcG9ydCB7XG4gIEJhc2VGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXIsXG4gIEZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWZsaWdodC1zZWFyY2gtZXhjaGFuZ2UuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlRmxpZ2h0RXhjaGFuZ2VEZXRhaWxzRmV0Y2hlcixcbiAgRmxpZ2h0RXhjaGFuZ2VEZXRhaWxzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWZsaWdodC1leGNoYW5nZS1kZXRhaWxzLmZldGNoZXInO1xuaW1wb3J0IHsgSUZhcmVSdWxlc0tleSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmFyZS1ydWxlcy1rZXknO1xuaW1wb3J0IHsgQmFza2V0RGV0YWlscyB9IGZyb20gJy4uL3NlcnZpY2VzL2VudGVycHJpc2UtYmFza2V0LnNlcnZpY2UnO1xuXG5jb25zdCBPVVRCT1VORCA9IDA7XG5leHBvcnQgaW50ZXJmYWNlIEFsbG93ZWRDbGFzcyB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxpZ2h0T3BlcmF0b3Ige1xuICBjb2RlOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXRhaWxFeHRyYXMge1xuICBhZGRpdGlvbmFsRGV0YWlsczoge1xuICAgIFtrZXk6IHN0cmluZ106IEFkZGl0aW9uYWw7XG4gIH07XG4gIHNlYXRzOiB7XG4gICAgW2tleTogc3RyaW5nXTogRmxpZ2h0U2VhdE1hcFNlYXRzO1xuICB9O1xuXG4gIGxveWFsdHk6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmdbXTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRpdGlvbmFsIHtcbiAgYWR2YW5jZWRBbmNpbGxhcnlPcHRpb25zOiBGbGlnaHRBbmNpbGxhcnlPcHRpb25zW107XG4gIGJhZ2dhZ2VBbGxvd2FuY2U6IGFueTtcbiAgZmxpZ2h0RXh0cmFzOiBhbnk7XG4gIHJlZHVjZWRNb2JpbGxpdHlBc3Npc3RhbmNlOiBhbnk7XG4gIG1lYWw6IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZWRGbGlnaHQge1xuICBmbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSB8IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW107XG4gIGZsaWdodElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIEFkZGl0aW9uYWxEZXRhaWxzIHtcbiAgYWR2YW5jZWRBbmNpbGxhcnlPcHRpb25zID0gJ2FkdmFuY2VkQW5jaWxsYXJ5T3B0aW9ucycsXG4gIGJhZ2dhZ2VBbGxvd2FuY2UgPSAnYmFnZ2FnZUFsbG93YW5jZScsXG4gIGZsaWdodEV4dHJhcyA9ICdmbGlnaHRFeHRyYXMnLFxuICByZWR1Y2VkTW9iaWxsaXR5QXNzaXN0YW5jZSA9ICdyZWR1Y2VkTW9iaWxsaXR5QXNzaXN0YW5jZScsXG4gIG1lYWwgPSAnbWVhbCdcbn1cblxuZXhwb3J0IHR5cGUgQWxsb3dlZENsYXNzZXMgPSBBbGxvd2VkQ2xhc3NbXTtcblxuZXhwb3J0IGVudW0gVGltZVdpbmRvdyB7XG4gIEFueXRpbWUgPSAnQW55dGltZScsXG4gIERlcGFydCA9ICdEZXBhcnQgQnknLFxuICBBcnJpdmUgPSAnQXJyaXZlIEJ5J1xufVxuXG5leHBvcnQgZW51bSBGbGlnaHRTb3J0VHlwZXMge1xuICBDaGVhcGVzdCA9ICdDaGVhcGVzdCcsXG4gIE1vc3RFeHBlbnNpdmUgPSAnTW9zdCBFeHBlbnNpdmUnLFxuICBGYXN0ZXN0ID0gJ0Zhc3Rlc3QnLFxuICBQcmVmZXJyZWQgPSAnUHJlZmVycmVkJyxcbiAgTG93ZXN0RW1pc3Npb25zID0gJ0xvd2VzdCBFbWlzc2lvbnMnLFxuICBEZXBhcnR1cmVUaW1lID0gJ0RlcGFydHVyZSBUaW1lJyxcbiAgQXJyaXZhbFRpbWUgPSAnQXJyaXZhbCBUaW1lJyxcbiAgUXVpY2tlc3QgPSAnUXVpY2tlc3QnLFxuICBNb3N0RGlyZWN0ID0gJ01vc3QgRGlyZWN0JyxcbiAgR3JlZW5lckNob2ljZSA9ICdHcmVlbmVyIENob2ljZScsXG4gIFNBRiA9ICdIaWdoZXN0IFNBRiBSYXRpbmcnXG59XG5cbmV4cG9ydCBjb25zdCBTQUZSYXRpbmdBcnJheSA9IFtcbiAge1xuICAgIHJhdGluZzogJ0FBQScsXG4gICAgc2NvcmU6IDBcbiAgfSxcbiAge1xuICAgIHJhdGluZzogJ0FBJyxcbiAgICBzY29yZTogMVxuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnQScsXG4gICAgc2NvcmU6IDJcbiAgfSxcbiAge1xuICAgIHJhdGluZzogJ0InLFxuICAgIHNjb3JlOiAzXG4gIH0sXG4gIHtcbiAgICByYXRpbmc6ICdDJyxcbiAgICBzY29yZTogNFxuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnRCcsXG4gICAgc2NvcmU6IDVcbiAgfSxcbiAge1xuICAgIHJhdGluZzogJ0UnLFxuICAgIHNjb3JlOiA2XG4gIH0sXG4gIHtcbiAgICByYXRpbmc6ICdOL0EnLFxuICAgIHNjb3JlOiA3XG4gIH1cbl07XG5cbmludGVyZmFjZSBGbGlnaHRTZXNzaW9uVHlwZSB7XG4gIHJlc3VsdHM6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXk7XG4gIGdyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzO1xuICBxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM7XG59XG5cbmludGVyZmFjZSBIaWRlRmxpZ2h0Q2FiaW5DbGFzc0ludGVyZmFjZSB7XG4gIGFueTogYm9vbGVhbjtcbiAgYnVzaW5lc3M6IGJvb2xlYW47XG4gIGVjb25vbXk6IGJvb2xlYW47XG4gIHByZW1pdW1FY29ub215OiBib29sZWFuO1xuICBmaXJzdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEZsaWdodEVudGVycHJpc2VTZWFyY2g8XG4gICAgRlFfUSBleHRlbmRzIEZsaWdodFF1b3RlRmV0Y2hlclR5cGUsXG4gICAgQUpGX1EgZXh0ZW5kcyBBcHBseUppdEZsaWdodFJ1bGVzVHlwZSxcbiAgICBHRkVPX0YgZXh0ZW5kcyBHZXRGbGlnaHRFeHRyYXNPcHRpb25zVHlwZSxcbiAgICBGU0VfRiBleHRlbmRzIEZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlclR5cGUsXG4gICAgRkVEX0YgZXh0ZW5kcyBGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyVHlwZSxcbiAgICBVRlNfVSBleHRlbmRzIFVwZGF0ZUZsaWdodFNlYXRNYXBUeXBlXG4gID5cbiAgZXh0ZW5kcyBCYXNlRW50ZXJwcmlzZVNlYXJjaDxGbGlnaHRUZW1wUGFyYW1zLCBGbGlnaHRBbGxRdW90ZVJlc3VsdCwgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheT5cbiAgaW1wbGVtZW50cyBGbGlnaHRFbnRlcnByaXNlU2VhcmNoSW50ZXJmYWNlXG57XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUEFSQU1TID0gJ3NlYXJjaF9mbGlnaHQnO1xuICBzdGF0aWMgcmVhZG9ubHkgU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFMgPSAncmVzdWx0c19mbGlnaHQnO1xuXG4gIHB1YmxpYyB0eXBlOiBTZXJ2aWNlVHlwZSA9IFNlcnZpY2VUeXBlLkZsaWdodDtcblxuICBhdmFsaWFibGVDbGFzc2VzOiBCZWhhdmlvclN1YmplY3Q8QWxsb3dlZENsYXNzZXM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4oW10pO1xuICB0aW1lQ3JpdGVyaWFPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGltZVdpbmRvd1tdPihbXSk7XG4gIGZsaWdodE9wZXJhdG9yczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodE9wZXJhdG9yW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRPcGVyYXRvcltdPihbXSk7XG4gIHNlbGVjdGVkRmxpZ2h0OiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPihudWxsKTtcbiAgc2VsZWN0ZWRVSWQ6IHN0cmluZyA9ICcnO1xuICBkaXJlY3REZWZhdWx0VmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9zaG93Q2FiaW5DbGFzc1NlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX3Nob3dQcmVmZXJyZWRBaXJsaW5lczogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX25lZ290aWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdGltZUFycmF5OiBWYWx1ZURpc3BsYXk8c3RyaW5nPltdO1xuICBwcml2YXRlIF9zb3J0QXJyYXk6IFZhbHVlRGlzcGxheTxGbGlnaHRTb3J0VHlwZXM+W10gPSBbXG4gICAgeyBkaXNwbGF5OiAnQ2hlYXBlc3QgRmlyc3QnLCB2YWx1ZTogRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0IH0sXG4gICAge1xuICAgICAgZGlzcGxheTogJ01vc3QgRXhwZW5zaXZlIEZpcnN0JyxcbiAgICAgIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZVxuICAgIH0sXG4gICAgeyBkaXNwbGF5OiAnRmFzdGVzdCBGaXJzdCcsIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuRmFzdGVzdCB9LFxuICAgIHsgZGlzcGxheTogJ1ByZWZlcnJlZCBGYXJlcyBGaXJzdCcsIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkIH0sXG4gICAge1xuICAgICAgZGlzcGxheTogJ0xvd2VzdCBDbzIgRW1pc3Npb25zIEZpcnN0JyxcbiAgICAgIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuTG93ZXN0RW1pc3Npb25zXG4gICAgfVxuICBdO1xuXG4gIHByaXZhdGUgX3NvcnRJdGluYXJ5Um91dGluZXM6IFJlY29yZDxcbiAgICBGbGlnaHRTb3J0VHlwZXMsXG4gICAgKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBudW1iZXJcbiAgPiA9IHtcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICByZXR1cm4gYS50b3RhbC5wcmljZSAtIGIudG90YWwucHJpY2U7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLk1vc3RFeHBlbnNpdmVdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgIHJldHVybiBiLnRvdGFsLnByaWNlIC0gYS50b3RhbC5wcmljZTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuRmFzdGVzdF06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xuICAgICAgICAoYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKSAtXG4gICAgICAgIChiLm91dGJvdW5kVG90YWxEdXJhdGlvbiArIChiLmluYm91bmRUb3RhbER1cmF0aW9uID8gYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkXTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgaWYgKGEucHJlZmVyZW5jZUxldmVsICYmIGIucHJlZmVyZW5jZUxldmVsKSB7XG4gICAgICAgIC8vIFNvcnQgYnkgcHJlZmVyZW5jZUxldmVsIGlmIGJvdGggaXRlbXMgaGF2ZSBub24tbnVsbCBwcmVmZXJlbmNlTGV2ZWxcbiAgICAgICAgaWYgKGEucHJlZmVyZW5jZUxldmVsID4gYi5wcmVmZXJlbmNlTGV2ZWwpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEucHJlZmVyZW5jZUxldmVsIDwgYi5wcmVmZXJlbmNlTGV2ZWwpIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChhLnByZWZlcmVuY2VMZXZlbCAmJiAhYi5wcmVmZXJlbmNlTGV2ZWwpIHtcbiAgICAgICAgLy8gUHV0IGl0ZW1zIHdpdGggbm9uLW51bGwgcHJlZmVyZW5jZUxldmVsIGJlZm9yZSBpdGVtcyB3aXRoIG51bGwgcHJlZmVyZW5jZUxldmVsXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoIWEucHJlZmVyZW5jZUxldmVsICYmIGIucHJlZmVyZW5jZUxldmVsKSB7XG4gICAgICAgIC8vIFB1dCBpdGVtcyB3aXRoIG51bGwgcHJlZmVyZW5jZUxldmVsIGFmdGVyIGl0ZW1zIHdpdGggbm9uLW51bGwgcHJlZmVyZW5jZUxldmVsXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICAvLyBTb3J0IGJ5IHByZWZlcnJlZFxuICAgICAgaWYgKGEucHJlZmVycmVkICYmICFiLnByZWZlcnJlZCkgcmV0dXJuIC0xO1xuICAgICAgaWYgKCFhLnByZWZlcnJlZCAmJiBiLnByZWZlcnJlZCkgcmV0dXJuIDE7XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Mb3dlc3RFbWlzc2lvbnNdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gYS5jbzJQZXJJdGVtIC0gYi5jbzJQZXJJdGVtO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xuICAgICAgaWYgKGFUaW1lLmlzQmVmb3JlKGJUaW1lKSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYVRpbWUuaXNTYW1lKGJUaW1lKSA/IDAgOiAxO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEub3V0Ym91bmRGbGlnaHRzW2Eub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdLmRhdGVUaW1lQXJyaXZpbmcpO1xuICAgICAgY29uc3QgYlRpbWUgPSBtb21lbnQoYi5vdXRib3VuZEZsaWdodHNbYi5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV0uZGF0ZVRpbWVBcnJpdmluZyk7XG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gK1xuICAgICAgICAoYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA/IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gOiAwKSAtXG4gICAgICAgIChiLm91dGJvdW5kVG90YWxEdXJhdGlvbiArIChiLmluYm91bmRUb3RhbER1cmF0aW9uID8gYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdERpcmVjdF06IChcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICApID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArXG4gICAgICAgIChhLm91dGJvdW5kRmxpZ2h0cyA/IGEub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA6IDApIC1cbiAgICAgICAgKGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCArIChiLm91dGJvdW5kRmxpZ2h0cyA/IGIub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA6IDApKVxuICAgICAgKTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuR3JlZW5lckNob2ljZV06IChcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICApID0+IHtcbiAgICAgIGlmIChhLmdyZWVuZXJDaG9pY2UgIT09IGIuZ3JlZW5lckNob2ljZSkge1xuICAgICAgICByZXR1cm4gYS5ncmVlbmVyQ2hvaWNlID8gLTEgOiAxO1xuICAgICAgfVxuICAgICAgaWYgKGEuZ3JlZW5lckNob2ljZSkge1xuICAgICAgICByZXR1cm4gYS5ncmVlbmVyQ2hvaWNlUGVyY2VudGFnZSAtIGIuZ3JlZW5lckNob2ljZVBlcmNlbnRhZ2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuU0FGXTogKGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLCBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgU0FGUmF0aW5nQXJyYXkuZmluZChzID0+IHMucmF0aW5nID09PSBhLnNhZlJhdGluZyk/LnNjb3JlIC1cbiAgICAgICAgU0FGUmF0aW5nQXJyYXkuZmluZChzID0+IHMucmF0aW5nID09PSBiLnNhZlJhdGluZyk/LnNjb3JlXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvLyBwcml2YXRlIF9zb3J0R3JvdXBlZFJvdXRpbmVzOiBSZWNvcmQ8XG4gIC8vICAgRmxpZ2h0U29ydFR5cGVzLFxuICAvLyAgIChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4gbnVtYmVyXG4gIC8vID4gPSB7XG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5DaGVhcGVzdF06IChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiBhLm1pblByaWNlIC0gYi5taW5QcmljZTtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZV06IChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiBiLm1pblByaWNlIC0gYS5tYXhQcmljZTtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuRmFzdGVzdF06IChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiBhLmRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZFxuICAvLyAgICAgICA/IGEub3V0Ym91bmRUb3RhbER1cmF0aW9uIC0gYi5vdXRib3VuZFRvdGFsRHVyYXRpb25cbiAgLy8gICAgICAgOiBhLmluYm91bmRUb3RhbER1cmF0aW9uIC0gYi5pbmJvdW5kVG90YWxEdXJhdGlvbjtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuUHJlZmVycmVkXTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIChiLnByZWZlcnJlZCA/IDEgOiAwKSAtIChhLnByZWZlcnJlZCA/IDEgOiAwKTtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuR3JlZW5lckNob2ljZV06ICgpID0+IHtcbiAgLy8gICAgIHJldHVybiAwO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5Mb3dlc3RFbWlzc2lvbnNdOiAoXG4gIC8vICAgICBhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXG4gIC8vICAgICBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHRcbiAgLy8gICApID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYS5jbzJQZXJJdGVtIC0gYi5jbzJQZXJJdGVtO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5EZXBhcnR1cmVUaW1lXTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5kZXBhcnREYXRlVGltZSk7XG4gIC8vICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLmRlcGFydERhdGVUaW1lKTtcbiAgLy8gICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcbiAgLy8gICAgICAgcmV0dXJuIC0xO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuQXJyaXZhbFRpbWVdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLmFycml2YWxEYXRlVGltZSk7XG4gIC8vICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLmFycml2YWxEYXRlVGltZSk7XG4gIC8vICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XG4gIC8vICAgICAgIHJldHVybiAtMTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLlF1aWNrZXN0XTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGEuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXG4gIC8vICAgICAgID8gYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gLSBiLm91dGJvdW5kVG90YWxEdXJhdGlvblxuICAvLyAgICAgICA6IChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cbiAgLy8gICAgICAgICAgIChiLmluYm91bmRUb3RhbER1cmF0aW9uID8gYi5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGEuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXG4gIC8vICAgICAgID8gYS5vdXRsZWdzLmxlbmd0aCAtIGIub3V0bGVncy5sZW5ndGhcbiAgLy8gICAgICAgOiAoYS5pbmxlZ3MgfHwgW10pLmxlbmd0aCAtIChiLmlubGVncyB8fCBbXSkubGVuZ3RoO1xuICAvLyAgIH1cbiAgLy8gfTtcbiAgcHJpdmF0ZSBfZmFyZVR5cGVBcnJheTogVmFsdWVEaXNwbGF5PEZhcmVUeXBlPltdID0gW1xuICAgIHsgdmFsdWU6IEZhcmVUeXBlLkZsZXhpYmxlLCBkaXNwbGF5OiAnRmxleGlibGUnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTGVpc3VyZSwgZGlzcGxheTogJ0xlaXN1cmUnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTG93ZXN0LCBkaXNwbGF5OiAnTG93ZXN0JyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOZWdvdGlhdGVkJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLk5vbk5lZ290aWF0ZWQsIGRpc3BsYXk6ICdOb24tTmVnb3RpYXRlZCcgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5SZXF1ZXN0RmFyZVJ1bGVzLCBkaXNwbGF5OiAnUmVxdWVzdCBGYXJlIFJ1bGVzJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlNlbGVjdEFuZFBybywgZGlzcGxheTogJ1NlbGVjdCAmIFBybycgfVxuICBdO1xuXG4gIHB1YmxpYyBtaW5pbXVtT3V0Qm91bmREYXRlID0ge1xuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcbiAgfTtcblxuICBwdWJsaWMgbWluaW11bUluQm91bmREYXRlID0ge1xuICAgIHllYXI6IG1vbWVudCgpLnllYXIoKSxcbiAgICBtb250aDogbW9tZW50KCkubW9udGgoKSArIDEsXG4gICAgZGF5OiBtb21lbnQoKS5kYXRlKClcbiAgfTtcbiAgcHJpdmF0ZSBfb3V0RGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHJpdmF0ZSBfb3V0VGltZTogc3RyaW5nO1xuICBwcml2YXRlIF9pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG4gIHByaXZhdGUgX2luVGltZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZXN0aW5hdGlvbkFpcnBvcnQ6IGFueTtcbiAgcHJpdmF0ZSBfZGVzdGluYXRpb25BaXJwb3J0RnVsbDogc3RyaW5nO1xuICBwcml2YXRlIF9vcmlnaW5BaXJwb3J0OiBhbnk7XG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnRGdWxsOiBzdHJpbmc7XG4gIHByaXZhdGUgX29yaWdpbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlO1xuICBwcml2YXRlIF9kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlO1xuICBwcml2YXRlIF92aWFBaXJwb3J0OiBhbnk7XG4gIHByaXZhdGUgX3ZpYUFpcnBvcnRGdWxsOiBzdHJpbmc7XG4gIHByaXZhdGUgX3Bhc3NlbmdlcnM6IGFueTtcbiAgLy8gcHJpdmF0ZSBncm91cGVkT2JqZWN0OiBGbGlnaHRJdGluZXJhcnlXaXRoU2VsZWN0ZWRbXTtcbiAgcHJvdGVjdGVkIHJlc3VsdFF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcztcbiAgcHJvdGVjdGVkIF9ncm91cGVkOiBHcm91cGVkRmxpZ2h0cyA9IG51bGw7XG4gIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gbnVsbDtcbiAgcHJvdGVjdGVkIHJlc3VsdHNTZXNzaW9uTmFtZSA9IEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XG4gIHByb3RlY3RlZCBtdWx0aVJlc3VsdHNTZXNzaW9uTmFtZSA9IEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1JFU1VMVFM7XG4gIHNlbGVjdGVkR3JvdXBGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zO1xuICBwdWJsaWMgb3V0Ym91bmRDYWJpbkNsYXNzOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfc2hvd0hvdGVsRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9mZXRjaGluZ1J1bGVzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2hvdGVsU2VhcmNoUmVxdWVzdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGZpbHRlcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoREVGQVVMVF9GTElHSFRfRklMVEVSUyk7XG4gIGR1cmFsU2luZ2xlRmlsdGVyOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVycz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMpO1xuICBzY2hlZHVsZWRGaWx0ZXJzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RmlsdGVyc1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICBwdWJsaWMgb3V0Ym91bmRTYW1lU2VhcmNoVHJhaW5saW5lU3RhdGlvbnM6IFJhaWxTdGF0aW9uW107XG4gIHB1YmxpYyBpbmJvdW5kU2FtZVNlYXJjaFRyYWlubGluZVN0YXRpb25zOiBSYWlsU3RhdGlvbltdO1xuXG4gIGNob29zZW5EaXNwbGF5VHlwZTogQmVoYXZpb3JTdWJqZWN0PEZsaWdodERpc3BsYXlUeXBlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIEZsaWdodERpc3BsYXlUeXBlcy5yZXR1cm5zXG4gICk7XG4gIGN1cnJlbnRTb3J0OiBGbGlnaHRTb3J0VHlwZXM7XG4gIGN1cnJlbnRGaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzO1xuICBjdXN0b21TY2hlZHVsZWRGaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzW10gPSBbXTtcbiAgc2VsZWN0ZWRHcm91cElkOiBudW1iZXI7XG4gIGV1cm9zdGFyRnJvbUZsaWdodFNlYXJjaFBlcmZvcm1lZDogYm9vbGVhbiA9IGZhbHNlO1xuICByYWlsRnJvbUZsaWdodFNlYXJjaFBlcmZvcm1lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBmYXN0dHJhY2tGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkOiBib29sZWFuID0gZmFsc2U7XG4gIHBhcmtpbmdGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkOiBib29sZWFuID0gZmFsc2U7XG4gIGhvdGVsRnJvbUZsaWdodFNlYXJjaFBlcmZvcm1lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9ydWxlQWN0aW9uU3VtbWFyeTogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2U7XG4gIG11bHRpOiBGbGlnaHRNdWx0aVtdO1xuICBzZWFyY2hCeVNjaGVkdWxlOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1tdW10gPSBbXTtcbiAgc2VsZWN0ZWRTZWdtZW50OiBudW1iZXIgPSAwO1xuICBzc29TZWFyY2hlZCA9IGZhbHNlO1xuICBfY2hlYXBlc3RQcmljZU9iamVjdDogSUNoZWFwZXN0UHJpY2VPYmplY3QgPSB7XG4gICAgZHVhbE91dGJvdW5kOiB7XG4gICAgICBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgY3VycmVuY3lDb2RlOiAnR0JQJyxcbiAgICAgIGZsaWdodDogbnVsbFxuICAgIH0sXG4gICAgZHVhbEluYm91bmQ6IHtcbiAgICAgIGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICBjdXJyZW5jeUNvZGU6ICdHQlAnLFxuICAgICAgZmxpZ2h0OiBudWxsXG4gICAgfSxcbiAgICByZXR1cm5zOiB7XG4gICAgICBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgY3VycmVuY3lDb2RlOiAnR0JQJyxcbiAgICAgIGZsaWdodDogbnVsbFxuICAgIH1cbiAgfTtcbiAgZ3JlZW5lckNob2ljZTogR3JlZW5lckNob2ljZUltcGw7XG4gIGlzTG9hZGluZ1NTTzogYm9vbGVhbjtcblxuICBwdWJsaWMgZ2V0IHNob3dDYWJpbkNsYXNzU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIC8vIG5vIHNldHRlciAtIHNldCBieSBVaSBDb25maWdcbiAgICByZXR1cm4gdGhpcy5fc2hvd0NhYmluQ2xhc3NTZWxlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dQcmVmZXJyZWRBaXJsaW5lcygpOiBib29sZWFuIHtcbiAgICAvLyBubyBzZXR0ZXIgLSBzZXQgYnkgVWkgQ29uZmlnXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dQcmVmZXJyZWRBaXJsaW5lcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmV0Y2hpbmdSdWxlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmV0Y2hpbmdSdWxlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZmV0Y2hpbmdSdWxlcyhuZXdWYWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9mZXRjaGluZ1J1bGVzID0gbmV3VmFsO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGVhcGVzdFByaWNlT2JqZWN0KCkge1xuICAgIHJldHVybiB0aGlzLl9jaGVhcGVzdFByaWNlT2JqZWN0O1xuICB9XG4gIHB1YmxpYyBnZXQgdGltZUFycmF5KCkge1xuICAgIHRoaXMuX3RpbWVBcnJheSA9XG4gICAgICB0aGlzLl90aW1lQXJyYXkgfHxcbiAgICAgIEFycmF5KDk2KVxuICAgICAgICAuZmlsbCgwKVxuICAgICAgICAubWFwKChfLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICBNYXRoLmZsb29yKGluZGV4IC8gNClcbiAgICAgICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgICAgJzonICtcbiAgICAgICAgICAgICAgKChpbmRleCAlIDQpICogMTUpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcbiAgICAgICAgICAgIGRpc3BsYXk6XG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xuICAgICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3RpbWVBcnJheTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJlZmVycmVkQ2FycmllcnMoKTogT0JUQWlybGluZXNEZXRhaWxzW10ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnM7XG4gIH1cblxuICBwdWJsaWMgc2V0IHByZWZlcnJlZENhcnJpZXJzKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHNbXSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IxKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1swXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IxKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMF0gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcjIoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdO1xuICB9XG5cbiAgcHVibGljIHNldCBvcGVyYXRvcjIodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1sxXSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMygpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl07XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMyh2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzJdID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgb3BlcmF0b3I0KCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1szXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3I0KHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbM10gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIF9taW5EYXRlOiBOZ2JEYXRlU3RydWN0O1xuICBwdWJsaWMgZ2V0IG1pbkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgdGhpcy5fbWluRGF0ZSA9IHRoaXMuX21pbkRhdGUgfHwgdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKG1vbWVudCgpKTtcbiAgICByZXR1cm4gdGhpcy5fbWluRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWR1bHRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hZHVsdHM7XG4gIH1cblxuICBwdWJsaWMgc2V0IGFkdWx0cyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmFkdWx0cyA9IE51bWJlcih2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoaWxkcmVuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgY2hpbGRyZW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IE51bWJlcih2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlcGFydExvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmRlcGFydExvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBkZXBhcnRMb2NhdGlvbih2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb24gPSB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9ICcnO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xuICAgICAgdGhpcy5fb3JpZ2luQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0RnVsbCA9IHZhbHVlLmRlc3RpbmF0aW9uO1xuICAgICAgdGhpcy5fb3JpZ2luTG9jYXRpb25UeXBlID0gdmFsdWUubG9jYXRpb25UeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHNob3dWaWEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5zaG93VmlhO1xuICB9XG5cbiAgc2V0IHNob3dWaWEoc2hvd1ZpYTogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5zaG93VmlhID0gc2hvd1ZpYTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpYSgpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy52aWE7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZpYSh2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMudmlhID0gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX3ZpYUFpcnBvcnQgPSAnJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLmdhdGV3YXkpIHtcbiAgICAgIHRoaXMuX3ZpYUFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xuICAgICAgdGhpcy5fdmlhQWlycG9ydEZ1bGwgPSB2YWx1ZS5kZXN0aW5hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmlhQWlycG9ydCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnlPcmlnaW5BaXBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fb3JpZ2luQWlycG9ydDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnlEZXN0aW5hdGlvbkFpcG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlcGFydERhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX291dERhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRlcGFydERhdGUodmFsdWU6IE5nYkRhdGVTdHJ1Y3QpIHtcbiAgICB0aGlzLl9vdXREYXRlID0gdmFsdWU7XG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fb3V0RGF0ZSwgdGhpcy5fb3V0VGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlcGFydFRpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0VGltZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGVwYXJ0VGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3V0VGltZSA9IHZhbHVlO1xuICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX291dERhdGUsIHRoaXMuX291dFRpbWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBvdXRCb3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IG91dEJvdW5kRGF0ZSh2YWx1ZTogbW9tZW50Lk1vbWVudCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XG4gICAgdGhpcy5taW5pbXVtSW5Cb3VuZERhdGUgPSB7XG4gICAgICB5ZWFyOiB2YWx1ZS55ZWFyKCksXG4gICAgICBtb250aDogdmFsdWUubW9udGgoKSArIDEsXG4gICAgICBkYXk6IHZhbHVlLmRhdGUoKVxuICAgIH07XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlICYmXG4gICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgJiZcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcih0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpXG4gICAgKSB7XG4gICAgICB0aGlzLmluYm91bmREYXRlID0gbW9tZW50KHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUpLmFkZCgxLCAnZGF5Jyk7XG4gICAgfVxuICAgIHRoaXMuX291dERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUodmFsdWUpO1xuICAgIHRoaXMuX291dFRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJldHVybkRhdGUoKTogTmdiRGF0ZVN0cnVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX2luRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmV0dXJuRGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX2luRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5faW5EYXRlLCB0aGlzLl9pblRpbWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBhcnJpdmVUaW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2luVGltZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXJyaXZlVGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faW5UaW1lID0gdmFsdWU7XG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluYm91bmREYXRlKCk6IG1vbWVudC5Nb21lbnQge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGluYm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlID0gdmFsdWUuaXNWYWxpZCgpID8gdmFsdWUgOiBudWxsO1xuICAgIHRoaXMuX2luRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XG4gICAgdGhpcy5faW5UaW1lID0gdGhpcy5oZWxwZXJzLmZvcm1hdFRpbWVDb2xvbih2YWx1ZSk7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBhcnJpdmVMb2NhdGlvbigpOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5hcnJpdmVMb2NhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYXJyaXZlTG9jYXRpb24odmFsdWU6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uID0gdmFsdWU7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9ICcnO1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0RnVsbCA9ICcnO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydEZ1bGwgPSB2YWx1ZS5kZXN0aW5hdGlvbjtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uTG9jYXRpb25UeXBlID0gdmFsdWUubG9jYXRpb25UeXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSBudWxsO1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0RnVsbCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNhYmluQ2xhc3M7XG4gIH1cblxuICBzZXQgY2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCByZXR1cm5DYWJpbkNsYXNzKCk6IEZsaWdodENhYmluQ2xhc3MgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3M7XG4gIH1cblxuICBzZXQgcmV0dXJuQ2FiaW5DbGFzcyh2YWx1ZTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcyA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBjaG9zZW5TZWFyY2hUeXBlKCk6IEZsaWdodFNlYXJjaFR5cGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZTtcbiAgfVxuXG4gIHNldCBjaG9zZW5TZWFyY2hUeXBlKHR5cGU6IEZsaWdodFNlYXJjaFR5cGUpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9IHR5cGU7XG5cbiAgICBpZiAodHlwZSAhPT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcbiAgICAgIHRoaXMubXVsdGlEZXN0aW5hdGlvbiA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWc6IG51bGwsXG4gICAgICAgICAgZGVzdDogbnVsbCxcbiAgICAgICAgICBkYXRlOiBtb21lbnQodGhpcy5oZWxwZXJzLm1vbWVudFJvdW5kTWludXRlcyh0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKSwgMzApKSxcbiAgICAgICAgICBvdXRUaW1lQ3JpdGVyaWE6IFRpbWVXaW5kb3cuRGVwYXJ0LFxuICAgICAgICAgIG91dFRpbWVGbGV4aWJpbGl0eTogMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb3JpZzogbnVsbCxcbiAgICAgICAgICBkZXN0OiBudWxsLFxuICAgICAgICAgIGRhdGU6IG1vbWVudCh0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpLCAzMCkpLFxuICAgICAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXG4gICAgICAgICAgb3V0VGltZUZsZXhpYmlsaXR5OiAyXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzUmV0dXJuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm47XG4gIH1cblxuICBnZXQgb3V0VGltZUNyaXRlcmlhKCk6IFRpbWVXaW5kb3cge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhO1xuICB9XG5cbiAgc2V0IG91dFRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEgPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgaW5UaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYTtcbiAgfVxuXG4gIHNldCBpblRpbWVDcml0ZXJpYSh2YWx1ZTogVGltZVdpbmRvdykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBvdXRUaW1lRmxleGliaWxpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVGbGV4aWJpbGl0eTtcbiAgfVxuXG4gIHNldCBvdXRUaW1lRmxleGliaWxpdHkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lRmxleGliaWxpdHkgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpblRpbWVGbGV4aWJpbGl0eSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lRmxleGliaWxpdHk7XG4gIH1cblxuICBzZXQgaW5UaW1lRmxleGliaWxpdHkodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVGbGV4aWJpbGl0eSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IG1heENvbm5lY3Rpb25zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tYXhDb25uZWN0aW9ucztcbiAgfVxuXG4gIHNldCBtYXhDb25uZWN0aW9ucyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zID0gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9tdWx0aURlc3RpbmF0aW9uOiBEZXN0aW5hdGlvbkVudHJ5W10gPSBbXTtcbiAgZ2V0IG11bHRpRGVzdGluYXRpb24oKTogSU11bHRpRGVzdGluYXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uO1xuICB9XG5cbiAgc2V0IG11bHRpRGVzdGluYXRpb24odmFsdWVBcnJheTogSU11bHRpRGVzdGluYXRpb25bXSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uID0gdmFsdWVBcnJheTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3dIb3RlbEZvcm0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Nob3dIb3RlbEZvcm07XG4gIH1cblxuICBwdWJsaWMgc2V0IHNob3dIb3RlbEZvcm0obmV3VmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0hvdGVsRm9ybSA9IG5ld1ZhbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaG90ZWxTZWFyY2hSZXF1ZXN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hvdGVsU2VhcmNoUmVxdWVzdGVkO1xuICB9XG5cbiAgcHVibGljIHNldCBob3RlbFNlYXJjaFJlcXVlc3RlZChuZXdWYWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ob3RlbFNlYXJjaFJlcXVlc3RlZCA9IG5ld1ZhbDtcbiAgfVxuXG4gIHNldE11bHRpRGVzdGluYXRpb25RdWVyeShtdWx0aURlc3RpbmF0aW9uOiBJTXVsdGlEZXN0aW5hdGlvbltdKTogRGVzdGluYXRpb25FbnRyeVtdIHtcbiAgICBjb25zdCBuZXdNdWx0aURlc3RpbmF0aW9uID0gdGhpcy5oZWxwZXJzLmNsb25lKG11bHRpRGVzdGluYXRpb24pO1xuICAgIHJldHVybiBuZXdNdWx0aURlc3RpbmF0aW9uLnJlZHVjZShcbiAgICAgIChkZXN0aW5hdGlvbkFycmF5OiBEZXN0aW5hdGlvbkVudHJ5W10sIGl0ZW06IElNdWx0aURlc3RpbmF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uT2JqZWN0ID0ge30gYXMgRGVzdGluYXRpb25FbnRyeTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3Qub3JpZyA9IGl0ZW0ub3JpZy5nYXRld2F5O1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kZXN0ID0gaXRlbS5kZXN0LmdhdGV3YXk7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0Lm9yaWdpbkxvY2F0aW9uVHlwZSA9IGl0ZW0ub3JpZy5sb2NhdGlvblR5cGU7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRlc3RpbmF0aW9uTG9jYXRpb25UeXBlID0gaXRlbS5kZXN0LmxvY2F0aW9uVHlwZTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3Qub3JpZ2luQWlycG9ydEZ1bGwgPSBpdGVtLm9yaWcuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRlc3RpbmF0aW9uQWlycG9ydEZ1bGwgPSBpdGVtLmRlc3QuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRhdGUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShpdGVtLmRhdGUpO1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5kZXBhcnR1cmVUaW1lV2luZG93ID1cbiAgICAgICAgICBpdGVtLm91dFRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5EZXBhcnRcbiAgICAgICAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KFxuICAgICAgICAgICAgICAgIGl0ZW0uZGF0ZSxcbiAgICAgICAgICAgICAgICAtaXRlbS5vdXRUaW1lRmxleGliaWxpdHksXG4gICAgICAgICAgICAgICAgaXRlbS5vdXRUaW1lRmxleGliaWxpdHlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5hcnJpdmFsVGltZVdpbmRvdyA9XG4gICAgICAgICAgaXRlbS5vdXRUaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuQXJyaXZlXG4gICAgICAgICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhpdGVtLmRhdGUsIC0yLCAyKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vdXRUaW1lRmxleGliaWxpdHkgPVxuICAgICAgICAgIGl0ZW0ub3V0VGltZUNyaXRlcmlhID09PSBUaW1lV2luZG93LkFycml2ZVxuICAgICAgICAgID8gMlxuICAgICAgICAgIDogaXRlbS5vdXRUaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuRGVwYXJ0XG4gICAgICAgICAgPyBOdW1iZXIoaXRlbS5vdXRUaW1lRmxleGliaWxpdHkgfHwgMClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGRlc3RpbmF0aW9uQXJyYXkucHVzaChkZXN0aW5hdGlvbk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkZXN0aW5hdGlvbkFycmF5O1xuICAgICAgfSxcbiAgICAgIFtdIGFzIERlc3RpbmF0aW9uRW50cnlbXVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9zc29PYmplY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSBudWxsO1xuICBzZXQgc3NvT2JqZWN0KHF1ZXJ5OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgdGhpcy5fc3NvT2JqZWN0ID0gcXVlcnk7XG4gIH1cblxuICBnZXQgc3NvT2JqZWN0KCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIHJldHVybiB0aGlzLl9zc29PYmplY3Q7XG4gIH1cbiAgLy8gZ2V0IG9ubHlcbiAgZ2V0IHNvcnREcm9wZG93blZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmxpZ2h0U29ydFR5cGVzPltdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydEFycmF5O1xuICB9XG5cbiAgZ2V0IGZhcmVUeXBlc1ZhbHVlcygpOiBWYWx1ZURpc3BsYXk8RmFyZVR5cGU+W10ge1xuICAgIHJldHVybiB0aGlzLl9mYXJlVHlwZUFycmF5O1xuICB9XG5cbiAgZ2V0IGZhcmVUeXBlKCk6IEZhcmVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlO1xuICB9XG5cbiAgc2V0IGZhcmVUeXBlKHZhbHVlOiBGYXJlVHlwZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBuZWdvdGlhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9uZWdvdGlhdGVkO1xuICB9XG5cbiAgc2V0IG5lZ290aWF0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9uZWdvdGlhdGVkID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW5jbHVkZU5lYXJieUFpcnBvcnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzO1xuICB9XG5cbiAgc2V0IGluY2x1ZGVOZWFyYnlBaXJwb3J0cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBieVNjaGVkdWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuYnlTY2hlZHVsZTtcbiAgfVxuXG4gIHNldCBieVNjaGVkdWxlKGV4dHJhOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmJ5U2NoZWR1bGUgPSBleHRyYTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmxpZ2h0ZmV0Y2hlcjogQmFzZUZsaWdodFF1b3RlRmV0Y2hlcjxGUV9RPixcbiAgICBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgYmFza2V0U2VydmljZTogRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgc3RvcmFnZVNlcnZpY2U6IEJhc2VTdG9yYWdlU2VydmljZSxcbiAgICBzZWFyY2hTZXJ2aWNlOiBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIGFwcGx5RmxpZ2h0UnVsZXM6IEJhc2VBcHBseUppdEZsaWdodFJ1bGVzRmV0Y2hlcjxBSkZfUT4sXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJhc2VNb2RhbE9wZW5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRFeHRyYXNPcHRpb25zOiBCYXNlR2V0RmxpZ2h0RXh0cmFzT3B0aW9uc0ZldGNoZXI8R0ZFT19GPixcbiAgICBwcml2YXRlIGdldEZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjogQmFzZUZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcjxGU0VfRj4sXG4gICAgcHJpdmF0ZSBnZXRGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyOiBCYXNlRmxpZ2h0RXhjaGFuZ2VEZXRhaWxzRmV0Y2hlcjxGRURfRj4sXG4gICAgcHJpdmF0ZSB1cGRhdGVGbGlnaHRTZWF0TWFwVXBkYXRlcjogQmFzZVVwZGF0ZUZsaWdodFNlYXRNYXBVcGRhdGVyPFVGU19VPlxuICApIHtcbiAgICBzdXBlcihzdG9yYWdlU2VydmljZSwgaGVscGVycywgc2VhcmNoU2VydmljZSwgdXNlclNlcnZpY2UpO1xuXG4gICAgY29uc3QgZGF0YToge1xuICAgICAgdGVtcFBhcmFtczogRmxpZ2h0VGVtcFBhcmFtcztcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogRmxpZ2h0VGVtcFBhcmFtcztcbiAgICB9ID0gc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0oRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUEFSQU1TKSB8fCB7XG4gICAgICB0ZW1wUGFyYW1zOiB7fSBhcyBGbGlnaHRUZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB7fSBhcyBGbGlnaHRUZW1wUGFyYW1zXG4gICAgfTtcblxuICAgIHRoaXMudXNlclNlcnZpY2UuZnVsbFVzZXJEZXRhaWxzLnVzZXJDb25maWdzLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCcrKysgVXNlciBDb25maWdzIEdyYWJiZWQgKysrJyk7XG4gICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFVzZXJGYXZvcnVyaXRlLkZsaWdodFNlYXJjaERlZmF1bHRzKSk7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLmRpcmVjdERlZmF1bHRWYWx1ZSA9IChcbiAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChVc2VyRmF2b3J1cml0ZS5GbGlnaHRTZWFyY2hEZWZhdWx0cykgYXMgYW55XG4gICAgICAgICk/LmRpcmVjdEJ5RGVmYXVsdDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoZGF0YS50ZW1wUGFyYW1zKTtcbiAgICB0aGlzLnVwZGF0ZVRlbXBQYXJhbXMocXVlcnkpO1xuICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IGRhdGEub3JpZ2luYWxVc2VyU2VhcmNoO1xuICAgIGlmIChzZWFyY2hTZXJ2aWNlLnNob3VsZEFkZFRyYXZlbGxlclN1YnNjcmlwdGlvbigpKSB7XG4gICAgICBzZWFyY2hTZXJ2aWNlLnRyYXZlbGxlckluZm9ybWF0aW9uLnN1YnNjcmliZSgodHJhdmVsbGVyczogVHJhdmVsbGVyW10pID0+IHtcbiAgICAgICAgdGhpcy50cmF2ZWxsZXJzID0gdHJhdmVsbGVycztcbiAgICAgICAgY29uc3Qgc3BsaXRUcmF2ZWxsZXJzID0gdGhpcy5oZWxwZXJzLnNlbGVjdGVkVHJhdmVsbGVycyh0cmF2ZWxsZXJzLCBTZXJ2aWNlVHlwZS5GbGlnaHQpO1xuICAgICAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gc3BsaXRUcmF2ZWxsZXJzLmFkdWx0cy5sZW5ndGg7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5jaGlsZHJlbiA9IHNwbGl0VHJhdmVsbGVycy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIC8vIHRoaXMudGVtcFBhcmFtcy5pbmZhbnRzID0gc3BsaXRUcmF2ZWxsZXJzLmluZmFudHMubGVuZ3RoO1xuICAgICAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXNlclNlcnZpY2UuY2hhbmdlVXNlci5zdWJzY3JpYmUoKF91c2VyOiBGdWxsVXNlckRldGFpbHMpID0+IHtcbiAgICAgIHRoaXMudGltZUNyaXRlcmlhT3B0aW9ucy5uZXh0KFtUaW1lV2luZG93LkFueXRpbWUsIFRpbWVXaW5kb3cuQXJyaXZlLCBUaW1lV2luZG93LkRlcGFydF0pOyAvLyBUT0RPIHVwZGF0ZSB3aXRoIGFueSBVRnNcbiAgICAgIHRoaXMuZmxpZ2h0T3BlcmF0b3JzLm5leHQoW3sgY29kZTogJ0JBJywgbmFtZTogJ0JyaXRpc2ggQWlyd2F5cycgfV0pOyAvLyBGZXRjaCB0aGVzZSBmcm9tIERCXG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaERlZmF1bHRzKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcblxuICAgIHRoaXMubmVnb3RpYXRlZCA9IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSA9PT0gRmFyZVR5cGUuTmVnb3RpYXRlZCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGdldEZsaWdodEV4Y2hhbmdlU2VhcmNoKFxuICAgIGJhc2tldEl0ZW1JZDogbnVtYmVyLFxuICAgIG91dGJvdW5kRGF0ZT86IHN0cmluZyxcbiAgICBpbmJvdW5kRGF0ZT86IHN0cmluZyxcbiAgICBvdXRib3VuZENsYXNzPzogc3RyaW5nLFxuICAgIHJldHVybkNsYXNzPzogc3RyaW5nXG4gICk6IFByb21pc2U8RmxpZ2h0Sm91cm5leUV4Y2hhbmdlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyXG4gICAgICAuZmV0Y2hPbmUoe1xuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQudG9TdHJpbmcoKSxcbiAgICAgICAgb3V0Ym91bmREYXRlLFxuICAgICAgICBpbmJvdW5kRGF0ZSxcbiAgICAgICAgb3V0Ym91bmRDbGFzcyxcbiAgICAgICAgcmV0dXJuQ2xhc3NcbiAgICAgIH0pXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBnZXRGbGlnaHRFeGNoYW5nZURldGFpbHMoXG4gICAgYmFza2V0SXRlbUlkOiBzdHJpbmcsXG4gICAgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICApOiBQcm9taXNlPEZsaWdodEV4Y2hhbmdlRGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLmdldEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXJcbiAgICAgIC5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGAke2Jhc2tldEl0ZW1JZH1gLFxuICAgICAgICBmbGlnaHRJdGluZXJhcnlcbiAgICAgIH0pXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1Jlc3VsdHMocmVzdWx0czogRmxpZ2h0QWxsUXVvdGVSZXN1bHQpOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5IHtcbiAgICB0aGlzLmlzTG9hZGluZ1NTTyA9IGZhbHNlO1xuICAgIGlmICghcmVzdWx0cykge1xuICAgICAgdGhpcy5fZ3JvdXBlZCA9IFtdO1xuICAgICAgdGhpcy5tdWx0aSA9IFtdO1xuICAgICAgdGhpcy5yZXN1bHRRdWVyeSA9IG51bGw7XG4gICAgICB0aGlzLnNlYXJjaEJ5U2NoZWR1bGUgPSBbXTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhpcy5fZ3JvdXBlZCA9IHJlc3VsdHMuZ3JvdXBlZCB8fCBbXTtcbiAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZDoge30sXG4gICAgICAgIGR1YWxTaW5nbGVXaGVuU2VsZWN0ZWQ6IHt9LFxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZToge31cbiAgICAgIH0sXG4gICAgICByZXN1bHRzLnJ1bGVBY3Rpb25TdW1tYXJ5IHx8IHt9XG4gICAgKTtcblxuICAgIHRoaXMucmVzdWx0UXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgdGhpcy5tdWx0aSA9IHJlc3VsdHMubXVsdGk7XG4gICAgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcbiAgICAgIHRoaXMuaW5pdE11bHRpQ2l0eVNlYXJjaEJ5U2NoZWR1bGUocmVzdWx0cywgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuKSB7XG4gICAgICB0aGlzLmluaXRNdWx0aUNpdHlTZWFyY2hCeVNjaGVkdWxlKHJlc3VsdHMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICAvLyBkZWxldGUgdGhpcy5yZXN1bHRRdWVyeVsnd2l0aEdyb3VwZWQnXTtcbiAgICBjb25zdCBkdWFsU2luZ2xlcyA9IHJlc3VsdHMubXVsdGkucmVkdWNlKFxuICAgICAgKFxuICAgICAgICBwcmV2aW91c0l0ZW1zOiB7XG4gICAgICAgICAgb3V0Ym91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcbiAgICAgICAgICBpbmJvdW5kOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz47XG4gICAgICAgIH0sXG4gICAgICAgIG5leHRJdGVtOiBJdGluZXJhcnlTdW1tYXJ5XG4gICAgICApID0+IHtcbiAgICAgICAgcHJldmlvdXNJdGVtc1tuZXh0SXRlbS5vcmRlciA9PT0gT1VUQk9VTkQgPyAnb3V0Ym91bmQnIDogJ2luYm91bmQnXSA9XG4gICAgICAgICAgbmV4dEl0ZW0ucmVzdWx0cy5yZWR1Y2UoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIGFjY3VtOiBSZWNvcmQ8bnVtYmVyLCBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4sXG4gICAgICAgICAgICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICAgICAgICAgICk6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPiA9PiB7XG4gICAgICAgICAgICAgIC8vIG9ubHkgdG9wIDUlIG9mIGZsaWdodCBub3cgdGhleSBhcmUgaW4gb3JkZXIgc28gaW5kZXggPCA1JSB0b3RhbFxuICAgICAgICAgICAgICBhY2N1bVtmbGlnaHQudWlkXSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgY2FuU2VsZWN0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmbGlnaHRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByZXZpb3VzSXRlbXNbbmV4dEl0ZW0ub3JkZXIgPT09IE9VVEJPVU5EID8gJ291dGJvdW5kJyA6ICdpbmJvdW5kJ11cbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gcHJldmlvdXNJdGVtcztcbiAgICAgIH0sXG4gICAgICB7IG91dGJvdW5kOiB7fSwgaW5ib3VuZDoge30gfVxuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2coZHVhbFNpbmdsZXMpO1xuICAgIGNvbnN0IGR1YWxJbmJvdW5kRmlsdGVycyA9IHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxuICAgICAgT2JqZWN0LnZhbHVlcyhkdWFsU2luZ2xlcy5pbmJvdW5kKSxcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXG4gICAgICB0aGlzLnZpYVxuICAgICk7XG5cbiAgICB0aGlzLmR1cmFsU2luZ2xlRmlsdGVyLm5leHQoXG4gICAgICB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhkdWFsU2luZ2xlcy5vdXRib3VuZCksXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxuICAgICAgICAgIHByaWNlOiBkdWFsSW5ib3VuZEZpbHRlcnMucHJpY2UsXG4gICAgICAgICAgYXJyaXZhbFJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsQWlycG9ydCxcbiAgICAgICAgICBkZXBhdHVyZVJldHVybkFpcnBvcnQ6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsXG4gICAgICAgICAgcmV0dXJuQXJyaXZhbFRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5hcnJpdmFsVGltZSxcbiAgICAgICAgICByZXR1cm5EdXJhdGlvbjogZHVhbEluYm91bmRGaWx0ZXJzLmR1cmF0aW9uLFxuICAgICAgICAgIHJldHVybkRlcGFydHVyZVRpbWU6IGR1YWxJbmJvdW5kRmlsdGVycy5kZXBhcnR1cmVUaW1lXG4gICAgICAgIH0sXG4gICAgICAgICh0aGlzLnZpYSBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgZGlzcGxheVR5cGUgPSB0aGlzLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5XG4gICAgPyBGbGlnaHREaXNwbGF5VHlwZXMuYnlQcmljZVxuICAgIDogKCFyZXN1bHRzLmpvdXJuZXlzPy5sZW5ndGggJiYgKHJlc3VsdHMubXVsdGlbMF0/LnJlc3VsdHMgfHwgcmVzdWx0cy5tdWx0aVsxXT8ucmVzdWx0cykpXG4gICAgICA/IEZsaWdodERpc3BsYXlUeXBlcy5kdWFsU2luZ2xlc1xuICAgICAgOiBGbGlnaHREaXNwbGF5VHlwZXMucmV0dXJucztcblxuICAgIHRoaXMuc2V0RmxpZ2h0RGlzcGxheVR5cGUoZGlzcGxheVR5cGUpO1xuXG4gICAgdGhpcy5fY2hlYXBlc3RQcmljZU9iamVjdC5yZXR1cm5zID0gdGhpcy5jcmVhdGVDaGVhcGVzdFByaWNlKHJlc3VsdHMuam91cm5leXMpO1xuICAgIHRoaXMuX2NoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kID0gdGhpcy5jcmVhdGVDaGVhcGVzdFByaWNlKFxuICAgICAgcmVzdWx0cy5tdWx0aVswXT8ucmVzdWx0cyBhcyBGbGlnaHRJdGluZXJhcnlbXVxuICAgICk7XG4gICAgdGhpcy5fY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZCA9IHRoaXMuY3JlYXRlQ2hlYXBlc3RQcmljZShcbiAgICAgIHJlc3VsdHMubXVsdGlbMV0/LnJlc3VsdHMgYXMgRmxpZ2h0SXRpbmVyYXJ5W11cbiAgICApO1xuXG4gICAgbGV0IHVwZGF0ZWRSZXN1bHRzID0geyAuLi5yZXN1bHRzIH07XG4gICAgdXBkYXRlZFJlc3VsdHMuc2VhcmNoQnlTY2hlZHVsZSA9IHRoaXMuc2VhcmNoQnlTY2hlZHVsZTtcbiAgICB0aGlzLmdyZWVuZXJDaG9pY2UgPSBuZXcgR3JlZW5lckNob2ljZUltcGwodXBkYXRlZFJlc3VsdHMpO1xuICAgIGNvbnN0IHJlc3VsdHNXaXRoRXh0ZW5zaW9ucyA9IHRoaXMubWFkZUZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKHVwZGF0ZWRSZXN1bHRzKTtcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXG4gICAgICByZXN1bHRzV2l0aEV4dGVuc2lvbnMuam91cm5leXMsXG4gICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTLFxuICAgICAgKHRoaXMudmlhIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZ2F0ZXdheVxuICAgICk7XG4gICAgdGhpcy5maWx0ZXJzLm5leHQodGhpcy5jdXJyZW50RmlsdGVycyk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgIT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5ICYmXG4gICAgICByZXN1bHRzV2l0aEV4dGVuc2lvbnMuc2VhcmNoQnlTY2hlZHVsZS5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuY3VzdG9tU2NoZWR1bGVkRmlsdGVycyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm11bHRpRGVzdGluYXRpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXG4gICAgICAgICAgcmVzdWx0c1dpdGhFeHRlbnNpb25zLnNlYXJjaEJ5U2NoZWR1bGVbaV0sXG4gICAgICAgICAgREVGQVVMVF9GTElHSFRfRklMVEVSU1xuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1c3RvbVNjaGVkdWxlZEZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5zY2hlZHVsZWRGaWx0ZXJzLm5leHQodGhpcy5jdXN0b21TY2hlZHVsZWRGaWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZFJlc3VsdHMgPyBbdXBkYXRlZFJlc3VsdHNdIDogW107XG4gIH1cblxuICBpbml0TXVsdGlDaXR5U2VhcmNoQnlTY2hlZHVsZShyZXN1bHRzOiBGbGlnaHRBbGxRdW90ZVJlc3VsdCwgaXNNdWx0aUNpdHk6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNlYXJjaEJ5U2NoZWR1bGUgPSBbXTtcbiAgICBpZiAocmVzdWx0cz8uam91cm5leXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5tdWx0aURlc3RpbmF0aW9uLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHRzLmpvdXJuZXlzLmZvckVhY2goKGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgICAgICBjb25zdCBmbGlnaHRzID0gaXNNdWx0aUNpdHlcbiAgICAgICAgICAgID8gZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKG91dGJvdW5kRmxpZ2h0OiBGbGlnaHRKb3VybmV5KSA9PiBvdXRib3VuZEZsaWdodC5zZWdtZW50R3JvdXAgPT09IGluZGV4XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogaW5kZXggPT09IDBcbiAgICAgICAgICAgID8gZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1xuICAgICAgICAgICAgOiBmbGlnaHQuaW5ib3VuZEZsaWdodHM7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuc2VhcmNoQnlTY2hlZHVsZVtpbmRleF0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQnlTY2hlZHVsZVtpbmRleF0gPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmxpZ2h0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoQnlTY2hlZHVsZVtpbmRleF0ucHVzaCh7XG4gICAgICAgICAgICAgIHByZWZlcnJlZDogZmxpZ2h0LnByZWZlcnJlZCxcbiAgICAgICAgICAgICAgcHJlZmVycmVkTWVzc2FnZXM6IGZsaWdodC5wcmVmZXJyZWRNZXNzYWdlcyxcbiAgICAgICAgICAgICAgcHJlZmVyZW5jZUxldmVsOiBmbGlnaHQucHJlZmVyZW5jZUxldmVsLFxuICAgICAgICAgICAgICBzb3VyY2U6IGZsaWdodC5zb3VyY2UsXG4gICAgICAgICAgICAgIGJhZ2dhZ2VBbGxvd2FuY2U6IGZsaWdodC5iYWdnYWdlQWxsb3dhbmNlLFxuICAgICAgICAgICAgICBkaXNjbG9zdXJlczogZmxpZ2h0LmRpc2Nsb3N1cmVzLFxuICAgICAgICAgICAgICBhZGRpdGlvbmFsOiBmbGlnaHQuYWRkaXRpb25hbCxcbiAgICAgICAgICAgICAgZmFyZUNvbmRpdGlvbnM6IGZsaWdodC5mYXJlQ29uZGl0aW9ucyxcbiAgICAgICAgICAgICAgb3V0Ym91bmRUb3RhbER1cmF0aW9uOiB0aGlzLmhlbHBlcnMuZ2V0VGltZURpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdPy5kYXRlVGltZUFycml2aW5nLFxuICAgICAgICAgICAgICAgIGZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBmbGlnaHRzLFxuICAgICAgICAgICAgICBzY2hlZHVsZUlkOiBmbGlnaHRzXG4gICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uaWQpXG4gICAgICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgICAgIC5qb2luKCcsJyksXG4gICAgICAgICAgICAgIGNvMlBlckl0ZW06IGZsaWdodHMucmVkdWNlKChhY2MsIG9iaikgPT4gYWNjICsgb2JqLmNvMlBlckl0ZW0sIDApLFxuICAgICAgICAgICAgICBjbzJQZXJQYXNzZW5nZXI6IGZsaWdodHMucmVkdWNlKChhY2MsIG9iaikgPT4gYWNjICsgb2JqLmNvMlBlclBhc3NlbmdlciwgMCksXG4gICAgICAgICAgICAgIGpvdXJuZXlIYXNoOiBmbGlnaHRzWzBdLmpvdXJuZXlIYXNoLFxuICAgICAgICAgICAgICBzYWZSYXRpbmc6IGZsaWdodHNbMF0uc2FmUmF0aW5nLFxuICAgICAgICAgICAgICBncmVlbmVyQ2hvaWNlOiBmYWxzZSxcbiAgICAgICAgICAgICAgZ3JlZW5lckNob2ljZVBlcmNlbnRhZ2U6IDAsXG4gICAgICAgICAgICAgIHNvdXJjZUlkOiBmbGlnaHQuc291cmNlSWQsXG4gICAgICAgICAgICAgIGluYm91bmRGbGlnaHRzOiBbXSxcbiAgICAgICAgICAgICAgdWlkOiBudWxsLFxuICAgICAgICAgICAgICB0b3RhbDogeyBwcmljZTogMCwgY3VycmVuY3k6IG51bGwgfSxcbiAgICAgICAgICAgICAgcGFzc2VuZ2VyQ291bnQ6IDAsXG4gICAgICAgICAgICAgIHZlcnNpb246ICcnLFxuICAgICAgICAgICAgICB0bWNQcmVmZXJyZWRMb2dvVXJsOiAnJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhmbGlnaHQ6RmxpZ2h0SXRpbmVyYXJ5LCBydWxlczpSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSkge1xuICAgIGNvbnN0IGlzRHVhbFNpbmdsZVdoZW5TZWxlY3RlZCAgPSB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgY29uc3QgaXNKb3VybmV5V2hlblNlbGVjdGVkID0gdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdO1xuICAgIGNvbnN0IGlzV2hlblNlbGVjdGVkQWxvbmUgPSB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdO1xuICAgIGlmIChpc0R1YWxTaW5nbGVXaGVuU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXSA9IHJ1bGVzLmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXTtcbiAgICB9IGVsc2UgaWYgKGlzSm91cm5leVdoZW5TZWxlY3RlZCkge1xuICAgICAgaWYgKHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXSkge1xuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF0gPSBydWxlcy5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNXaGVuU2VsZWN0ZWRBbG9uZSkge1xuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXSA9IHJ1bGVzLndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYWRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMocmVzdWx0czogYW55KTogRmxpZ2h0QWxsUXVvdGVSZXN1bHQge1xuICAgIHJlc3VsdHMuam91cm5leXMubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgZmxpZ2h0SXRlbSA9IHRoaXMuYWRkUnVsZXNUb0ZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKGZsaWdodEl0ZW0pO1xuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm11bHRpRGVzdGluYXRpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdHMuc2VhcmNoQnlTY2hlZHVsZVtpXT8ubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgICBmbGlnaHRJdGVtID0gdGhpcy5hZGRSdWxlc1RvRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoZmxpZ2h0SXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXN1bHRzLm11bHRpWzBdPy5yZXN1bHRzLm1hcCgoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgIGZsaWdodEl0ZW0gPSB0aGlzLmFkZFJ1bGVzVG9GbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhmbGlnaHRJdGVtKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdHMubXVsdGlbMV0/LnJlc3VsdHMubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgZmxpZ2h0SXRlbS5wcmVmZXJyZWQgPSBQcmVmZXJyZWRGbGFncy5ub25lO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBwdWJsaWMgYWRkUnVsZXNUb0ZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKFxuICAgIGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIHJ1bGVzOiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSA9IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICk6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zIHtcbiAgICBjb25zdCB7IGpvdXJuZXlXaGVuU2VsZWN0ZWQsIHdoZW5TZWxlY3RlZEFsb25lIH0gPSBydWxlcztcblxuICAgIGNvbnN0IHJ1bGVTb3VyY2UgPSBqb3VybmV5V2hlblNlbGVjdGVkW2l0ZW0uam91cm5leUhhc2hdIHx8IHdoZW5TZWxlY3RlZEFsb25lW2l0ZW0uam91cm5leUhhc2hdO1xuXG4gICAgaXRlbS5wcmVmZXJyZWQgPSBydWxlU291cmNlPy5jb21wYW55UHJlZmVycmVkXG4gICAgICA/IFByZWZlcnJlZEZsYWdzLmNvbXBhbnlQcmVmZXJyZWRcbiAgICAgIDogcnVsZVNvdXJjZT8ub2ZmaWNlUHJlZmVycmVkXG4gICAgICA/IFByZWZlcnJlZEZsYWdzLm9mZmljZVByZWZlcnJlZFxuICAgICAgOiBydWxlU291cmNlPy50bWNQcmVmZXJyZWRcbiAgICAgID8gUHJlZmVycmVkRmxhZ3MudG1jUHJlZmVycmVkXG4gICAgICA6IFByZWZlcnJlZEZsYWdzLm5vbmU7XG5cbiAgICBpdGVtLnByZWZlcnJlZE1lc3NhZ2VzID0ge1xuICAgICAgW1ByZWZlcnJlZEZsYWdzLmNvbXBhbnlQcmVmZXJyZWRdOiBydWxlU291cmNlPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fCAnJyxcbiAgICAgIFtQcmVmZXJyZWRGbGFncy5vZmZpY2VQcmVmZXJyZWRdOiBydWxlU291cmNlPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8ICcnLFxuICAgICAgW1ByZWZlcnJlZEZsYWdzLnRtY1ByZWZlcnJlZF06IHJ1bGVTb3VyY2U/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHwgJycsXG4gICAgICBbUHJlZmVycmVkRmxhZ3MuYWxsXTogYCR7cnVsZVNvdXJjZT8uY29tcGFueVByZWZlcnJlZE1lc3NhZ2UgfHwgJyd9ICR7cnVsZVNvdXJjZT8ub2ZmaWNlUHJlZmVycmVkTWVzc2FnZSB8fCAnJ30gJHtydWxlU291cmNlPy50bWNQcmVmZXJyZWRNZXNzYWdlIHx8ICcnfWAudHJpbSgpLFxuICAgICAgW1ByZWZlcnJlZEZsYWdzLm5vbmVdOiAnJ1xuICAgIH07XG5cbiAgICBpdGVtLnByZWZlcmVuY2VMZXZlbCA9ICtydWxlU291cmNlPy5wcmVmZXJlbmNlTGV2ZWwgfHwgbnVsbDtcbiAgICBpdGVtLnJlcXVpcmVzUmVhc29uS2V5cyA9IHJ1bGVTb3VyY2U/LnJlcXVpcmVzUmVhc29uS2V5cyB8fCBbXTtcbiAgICBpdGVtLnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPSBydWxlU291cmNlPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzIHx8IFtdO1xuICAgIGl0ZW0udW5hdmFpbGFibGUgPSBydWxlU291cmNlPy51bmF2YWlsYWJsZSB8fCBmYWxzZTtcbiAgICBpdGVtLnVuYXZhaWxhYmxlTWVzc2FnZSA9IHJ1bGVTb3VyY2U/LnVuYXZhaWxhYmxlTWVzc2FnZSB8fCAnJztcbiAgICBpdGVtLnRtY1ByZWZlcnJlZExvZ29VcmwgPSBydWxlU291cmNlPy50bWNQcmVmZXJyZWRMb2dvVXJsIHx8ICcnO1xuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuXG4gIHByb3RlY3RlZCBtYWtlU2Vzc2lvblJlc3VsdHMoZGF0YTogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSk6IEZsaWdodFNlc3Npb25UeXBlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0czogZGF0YSxcbiAgICAgIGdyb3VwZWQ6IHRoaXMuX2dyb3VwZWQsXG4gICAgICBxdWVyeTogdGhpcy5yZXN1bHRRdWVyeVxuICAgIH07XG4gIH1cblxuICBnZXRNYXhGbGlnaHRQcmljZUZvckJyYW5kKG1hdGNoaW5nQnJhbmRGbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSk6IG51bWJlciB7XG4gICAgbGV0IG1heCA9IDA7XG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaChmbGlnaHQgPT4ge1xuICAgICAgaWYgKG1heCA8IGZsaWdodD8udG90YWw/LnByaWNlKSB7XG4gICAgICAgIG1heCA9IGZsaWdodC50b3RhbC5wcmljZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWF4O1xuICB9XG4gIGdldE1pbkZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcbiAgICBsZXQgbWluID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgbWF0Y2hpbmdCcmFuZEZsaWdodHMuZm9yRWFjaChmbGlnaHQgPT4ge1xuICAgICAgaWYgKG1pbiA+IGZsaWdodD8udG90YWw/LnByaWNlKSB7XG4gICAgICAgIG1pbiA9IGZsaWdodC50b3RhbC5wcmljZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbWluO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0UXVlcnkoY2hlY2tJc1ZhbGlkOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyh0aGlzLnNlYXJjaFNlcnZpY2UubWFrZUZsaWdodFF1ZXJ5KCkpO1xuICAgIGlmIChjaGVja0lzVmFsaWQpIHtcbiAgICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXRQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMucmVzZXRRdWVyeSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNWYWxpZCgpIHtcbiAgICBpZiAoIXRoaXMuZG9DaGVja3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzID0gW107XG4gICAgdGhpcy52YWxpZGF0aW9uRmF2b3VyaXRlTWVzc2FnZXMgPSBbXTtcbiAgICBpZiAodGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XG4gICAgICB0aGlzLm11bHRpQ2l0eVZhbGlkYXRpb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLl9vcmlnaW5BaXJwb3J0KSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBhZGQgaW4gYSBkZXBhcnR1cmUgbG9jYXRpb24nLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0KSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1BsZWFzZSBhZGQgaW4gYW4gYXJyaXZhbCBkZXN0aW5hdGlvbicsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzQWZ0ZXIobW9tZW50KCkpKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ0RlcGFydHVyZSBkYXRlIGNhbiBub3QgYmUgaW4gdGhlIHBhc3QnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ICYmXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCAmJlxuICAgICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHRoaXMuX29yaWdpbkFpcnBvcnRcbiAgICAgICkge1xuICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdPcmlnaW4gYW5kIGRlc3RpbmF0aW9uIGFpcnBvcnQgY2Fubm90IGJlIHRoZSBzYW1lJywgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZS5kaWZmKHRoaXMub3V0Qm91bmREYXRlLCAnc2Vjb25kcycpIDw9IDAgJiZcbiAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgIT09IFRpbWVXaW5kb3cuQW55dGltZSAmJlxuICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhICE9PSBUaW1lV2luZG93LkFueXRpbWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKFxuICAgICAgICAgICdUaGUgdGltZSBvZiBhcnJpdmFsIGNhbm5vdCBiZSBsZXNzIHRoYW4gdGhlIHRpbWUgb2YgZGVwYXJ0dXJlJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pc1JldHVybikge1xuICAgICAgICAvLyBUT0RPIGNoZWNrIHRoYXQgcmV0dXJuIGRldGFpbHMgYXJlIHNldFxuICAgICAgICBpZiAodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc1NhbWVPckFmdGVyKHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSkpIHtcbiAgICAgICAgICB0aGlzLmFkZFZhbGlkYXRpb25NZXNzYWdlKCdSZXR1cm4gZGF0ZSBtdXN0IGJlIGFmdGVyIHRoZSBkZXBhcnR1cmUgZGF0ZScsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaXNWYWxpZC5uZXh0KHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCk7XG4gICAgdGhpcy5pc0Zhdm91cml0ZVZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uRmF2b3VyaXRlTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLm1lc3NhZ2VzLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMpO1xuICB9XG5cbiAgbXVsdGlDaXR5VmFsaWRhdGlvbigpIHtcbiAgICBsZXQgaXNlbXB0eVZhbHVlID0gZmFsc2U7XG4gICAgbGV0IGlzZW1wdHlMYW5kaW5nID0gZmFsc2U7XG4gICAgbGV0IGlzU2FtZVZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24ubWFwKChlbGVtZW50LCBpKSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQub3JpZykge1xuICAgICAgICBpc2VtcHR5VmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoaSA8IDIpIHtcbiAgICAgICAgICBpc2VtcHR5TGFuZGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50Lm9yaWcgPT09IGVsZW1lbnQuZGVzdCkgaXNTYW1lVmFsdWUgPSB0cnVlO1xuICAgIH0pO1xuICAgIGlmICghbW9tZW50KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uWzBdLmRhdGUpLmlzQWZ0ZXIobW9tZW50KCkpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdEZXBhcnR1cmUgZGF0ZSBjYW4gbm90IGJlIGluIHRoZSBwYXN0Jyk7XG4gICAgfVxuICAgIGlmIChpc2VtcHR5TGFuZGluZykgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMucHVzaCgnUGxlYXNlIHNlbGVjdCBsYW5kaW5nIGFpcnBvcnQocyknKTtcbiAgICBpZiAoaXNlbXB0eVZhbHVlKSB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IHRha2Ugb2ZmIGFpcnBvcnQocyknKTtcbiAgICBpZiAoaXNTYW1lVmFsdWUpXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdUYWtlIG9mZiBhbmQgbGFuZGluZyBsb2NhdGlvbihzKSBjYW5ub3QgYmUgdGhlIHNhbWUnKTtcbiAgfVxuICBzdGFydFNlYXJjaCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgdGhpcy5zZWxlY3RlZEZsaWdodC5uZXh0KG51bGwpO1xuICAgIGNvbnN0IHNzOiBhbnkgPSB0aGlzLnNzb09iamVjdDtcbiAgICBpZiAoc3MgJiYgIXNzLnNlYXJjaGVkKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZ1NTTyA9IHRydWU7XG4gICAgICBjb25zb2xlLndhcm4oJysrKyBTdGFydGluZyBzZWFyY2ggZnJvbSBzc28gb2JqZWN0ICsrKycpO1xuICAgICAgc3Muc2VhcmNoZWQgPSB0cnVlO1xuICAgICAgdGhpcy5mYXJlVHlwZSA9IHNzLmZhcmVUeXBlIGFzIEZhcmVUeXBlO1xuICAgICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSBzcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIC8vIHRoaXMuX29yaWdpbkFpcnBvcnQ9IHNzLm9yaWdpbkFpcnBvcnQ7XG4gICAgICB0aGlzLm91dGJvdW5kQ2FiaW5DbGFzcyA9IHNzLm91dGJvdW5kQ2FiaW5DbGFzcztcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHNzLm91dGJvdW5kQ2FiaW5DbGFzcztcbiAgICAgIGNvbnN0IHNwbGl0T3V0RGF0ZSA9IHNzLm91dGJvdW5kRGF0ZS5zcGxpdCgnLScpO1xuICAgICAgY29uc3Qgb3V0RGF0ZU9iaiA9IHtcbiAgICAgICAgeWVhcjogK3NwbGl0T3V0RGF0ZVswXSxcbiAgICAgICAgbW9udGg6ICtzcGxpdE91dERhdGVbMV0sXG4gICAgICAgIGRheTogK3NwbGl0T3V0RGF0ZVsyXVxuICAgICAgfTtcbiAgICAgIHRoaXMuZGVwYXJ0RGF0ZSA9IG91dERhdGVPYmo7XG4gICAgICB0aGlzLmRlcGFydFRpbWUgPSBgJHtzcy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cuc3Vic3RyKFxuICAgICAgICAwLFxuICAgICAgICAyXG4gICAgICApfToke3NzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdy5zdWJzdHIoMiwgMil9YDtcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHNzLnJldHVybkNhYmluQ2xhc3MgYXMgRmxpZ2h0Q2FiaW5DbGFzcztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNwbGl0UmV0RGF0ZSA9IHNzLnJldHVybkRhdGUuc3BsaXQoJy0nKTtcbiAgICAgICAgY29uc3QgUmV0RGF0ZU9iaiA9IHtcbiAgICAgICAgICB5ZWFyOiArc3BsaXRSZXREYXRlWzBdLFxuICAgICAgICAgIG1vbnRoOiArc3BsaXRSZXREYXRlWzFdLFxuICAgICAgICAgIGRheTogK3NwbGl0UmV0RGF0ZVsyXVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJldHVybkRhdGUgPSBSZXREYXRlT2JqO1xuICAgICAgICB0aGlzLmFycml2ZVRpbWUgPSBgJHtzcy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93LnN1YnN0cihcbiAgICAgICAgICAwLFxuICAgICAgICAgIDJcbiAgICAgICAgKX06JHtzcy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93LnN1YnN0cigyLCAyKX1gO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGArKysgVW5hYmxlIHRvIHNwbGl0IHJldHVybiBkYXRlIC0gbWF5IG5vdCBoYXZlIGJlZW4gcHJvdmlkZWQgKysrYCk7XG4gICAgICB9XG4gICAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gc3MubWF4Q29ubmVjdGlvbnMgPT09IDAgPyAwIDogbnVsbDtcbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IHNzLnJldHVyblRyaXAgPT09ICd0cnVlJyA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XG4gICAgICBjb25zb2xlLndhcm4oYCsrKyBSZWNvdmVyaW5nIHNzbyBvcmlnaW4gYWlycG9ydDogJHtzcy5vcmlnaW5BaXJwb3J0fSArKytgKTtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3Qoc3Mub3JpZ2luQWlycG9ydCkuc3Vic2NyaWJlKFxuICAgICAgICByZXN1bHRzID0+IHtcbiAgICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gKHJlc3VsdHMgYXMgYW55W10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gc3Mub3JpZ2luQWlycG9ydCk7XG4gICAgICAgICAgY29uc29sZS53YXJuKGArKysgUmVjb3ZlcmluZyBzc28gZGVzdGluYXRpb24gYWlycG9ydDogJHtzcy5kZXN0aW5hdGlvbkFpcnBvcnR9ICsrK2ApO1xuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3Qoc3MuZGVzdGluYXRpb25BaXJwb3J0KS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IChyZXN1bHRzIGFzIGFueVtdKS5maW5kKFxuICAgICAgICAgICAgICAgIGEgPT4gYS5nYXRld2F5ID09IHNzLmRlc3RpbmF0aW9uQWlycG9ydFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG5cbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignKysrIFNTTyBzZWFyY2ggaXMgdmFsaWQgKysrJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gT2JqZWN0LmZyZWV6ZSh0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy50ZW1wUGFyYW1zKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgICAgICAgICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsVXNlclNlYXJjaDogdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2hcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoXG4gICAgICAgICAgICAgICAgICBzc1xuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dGJvdW5kVGltZVdpbmRvdzogc3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVGltZVdpbmRvdzogc3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3NvT2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignKysrIHN0YXJ0aW5nIHNzbyBzZWFyY2ggKysrJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKHRoaXMuZmxpZ2h0ZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCcrKysgU2VhcmNoIGlzIGludmFsaWQ6ICcsIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLCAnICsrKycpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU1NPID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciByZWNvdmVyaW5nIGRlc3RpbmF0aW9uIGFpcnBvcnQ6ICR7ZXJyb3J9ICsrK2ApO1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1NTTyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3IgcmVjb3ZlcmluZyBvcmlnaW4gYWlycG9ydDogJHtlcnJvcn0gKysrYCk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdTU08gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZC52YWx1ZSkge1xuICAgICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRTZXNzaW9uSXRlbShGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMsIHtcbiAgICAgICAgICB0ZW1wUGFyYW1zOiB0aGlzLnRlbXBQYXJhbXMsXG4gICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KFxuICAgICAgICAgIHNzXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3c6IHNzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdyxcbiAgICAgICAgICAgICAgICByZXR1cm5UaW1lV2luZG93OiBzcy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZVJlY2VudFNlYXJjaCh0aGlzLmdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5KSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydFNlYXJjaCh0aGlzLmZsaWdodGZldGNoZXIuZmV0Y2hMaXN0KHF1ZXJ5KSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnbXRTZWFyY2gocXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzKTogT2JzZXJ2YWJsZTxGbGlnaHRBbGxRdW90ZVJlc3VsdD4ge1xuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICAgIHF1ZXJ5LnBhc3NlbmdlcnMgPSB0aGlzLl9wYXNzZW5nZXJzO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmxpZ2h0ZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpO1xuICAgIHRoaXMuX3N0YXJ0U2VhcmNoKHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldFJlY2VudFNlYXJjaFF1ZXJ5KHF1ZXJ5OiBJRmxpZ2h0U2VhcmNoQXJncyk6IFNhdmVSZWNlbnRTZWFyY2hNdXRhdGlvblZhcmlhYmxlcyB7XG4gICAgaWYgKCh0aGlzLnZpYSBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXkpIHtcbiAgICAgIHF1ZXJ5LnZpYSA9ICh0aGlzLnZpYSBhcyBPQlRBaXJwb3J0RGV0YWlscykuZ2F0ZXdheTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudmlhKSB7XG4gICAgICBxdWVyeS52aWEgPSB0aGlzLnZpYSBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3V0VGltZUZsZXhpYmlsaXR5ICYmIHRoaXMub3V0VGltZUNyaXRlcmlhID09PSBUaW1lV2luZG93LkRlcGFydCkge1xuICAgICAgcXVlcnkub3V0VGltZUZsZXhpYmlsaXR5ID0gdGhpcy5vdXRUaW1lRmxleGliaWxpdHk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm91dFRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5BcnJpdmUpIHtcbiAgICAgIHF1ZXJ5Lm91dFRpbWVGbGV4aWJpbGl0eSA9IDI7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5UaW1lRmxleGliaWxpdHkgJiYgdGhpcy5pblRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5EZXBhcnQpIHtcbiAgICAgIHF1ZXJ5LmluVGltZUZsZXhpYmlsaXR5ID0gdGhpcy5pblRpbWVGbGV4aWJpbGl0eTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW5UaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuQXJyaXZlKSB7XG4gICAgICBxdWVyeS5pblRpbWVGbGV4aWJpbGl0eSA9IDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcnZpY2VUeXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXG4gICAgICBzZWFyY2hBcmdzOiBxdWVyeSxcbiAgICAgIHRyYXZlbERhdGU6IHRoaXMub3V0Qm91bmREYXRlLmZvcm1hdCgpLFxuICAgICAgdHJhdmVsbGVyczogdGhpcy5oZWxwZXJzLmdldFRyYXZlbGxlcnNJZCh0aGlzLnRyYXZlbGxlcnMsIHRoaXMudXNlclNlcnZpY2UuYm9ibz8uaWQpXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdGFydFJlY2VudFNlYXJjaChyZWNlbnRTZWFyY2g6IFJlY2VudFNlYXJjaCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlY2VudFNlYXJjaEFyZ3MgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncztcbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5vdXRUaW1lRmxleGliaWxpdHkpIHtcbiAgICAgIHRoaXMub3V0VGltZUZsZXhpYmlsaXR5ID0gcmVjZW50U2VhcmNoQXJncy5vdXRUaW1lRmxleGliaWxpdHk7XG4gICAgfVxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kRGF0ZSkge1xuICAgICAgbGV0IG91dGJvdW5kVGltZVdpbmRvdyA9IHJlY2VudFNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgID8gcmVjZW50U2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgOiByZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICByZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kRGF0ZSxcbiAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93LFxuICAgICAgICB0aGlzLm91dFRpbWVGbGV4aWJpbGl0eSB8fCAyXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLnJldHVybkRhdGUpIHtcbiAgICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLmluVGltZUZsZXhpYmlsaXR5KSB7XG4gICAgICAgIHRoaXMuaW5UaW1lRmxleGliaWxpdHkgPSByZWNlbnRTZWFyY2hBcmdzLmluVGltZUZsZXhpYmlsaXR5O1xuICAgICAgfVxuICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSByZWNlbnRTZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgPyByZWNlbnRTZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgOiByZWNlbnRTZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93O1xuICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICByZWNlbnRTZWFyY2hBcmdzLnJldHVybkRhdGUsXG4gICAgICAgIHJldHVyblRpbWVXaW5kb3csXG4gICAgICAgIHRoaXMuaW5UaW1lRmxleGliaWxpdHkgfHwgMlxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5mYXJlVHlwZSA9IHJlY2VudFNlYXJjaEFyZ3MuZmFyZVR5cGU7XG4gICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IHJlY2VudFNlYXJjaEFyZ3MubWF4Q29ubmVjdGlvbnM7XG5cbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5vdXRib3VuZENhYmluQ2xhc3MpIHtcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaEFyZ3Mub3V0Ym91bmRDYWJpbkNsYXNzWzBdO1xuICAgIH1cbiAgICBpZiAocmVjZW50U2VhcmNoQXJncy5yZXR1cm5DYWJpbkNsYXNzKSB7XG4gICAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPSByZWNlbnRTZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3NbMF07XG4gICAgfVxuXG4gICAgdGhpcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHMgPSByZWNlbnRTZWFyY2hBcmdzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA/IHRydWUgOiBmYWxzZTtcblxuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IHJlY2VudFNlYXJjaEFyZ3M/Lm11bHRpRGVzdGluYXRpb24/Lmxlbmd0aFxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxuICAgICAgOiByZWNlbnRTZWFyY2hBcmdzLnJldHVyblRyaXBcbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XG5cbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgfVxuXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XG4gICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgfVxuXG4gICAgaWYgKHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYSkge1xuICAgICAgdGhpcy52aWEgPSByZWNlbnRTZWFyY2guc2VhcmNoQXJncy52aWE7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfbG9hZGluZyA9IHRydWU7XG4gICAgaWYgKCFyZWNlbnRTZWFyY2hBcmdzPy5tdWx0aURlc3RpbmF0aW9uPy5sZW5ndGgpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcbiAgICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkxvY2F0aW9uVHlwZVxuICAgICAgICApLFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcbiAgICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkFpcnBvcnQsXG4gICAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25Mb2NhdGlvblR5cGVcbiAgICAgICAgKVxuICAgICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xuICAgICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0ge1xuICAgICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHMpLFxuICAgICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIGxvY2F0aW9uVHlwZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3JpZ2luTG9jYXRpb25UeXBlXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0ge1xuICAgICAgICAgICAgZGVzdGluYXRpb246IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgICAgZ2F0ZXdheTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHMpLFxuICAgICAgICAgICAgY291bnRyeTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgICBwb3N0Y29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIGxvY2F0aW9uVHlwZTogcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MuZGVzdGluYXRpb25Mb2NhdGlvblR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNrRm9ySG90ZWxSZW1pbmRlcigpICYmIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0cy5IT1RFTC5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbU2VydmljZVR5cGUuSG90ZWxdLmNob3NlbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNldEhvdGVsUGFyYW1zKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucHJlZmVycmVkQ2FycmllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZlcnJlZENhcnJpZXJzOiBPQlRBaXJsaW5lc0RldGFpbHNbXSA9IFtdO1xuICAgICAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucHJlZmVycmVkQ2FycmllcnMubWFwKChwcmVmZXJyZWRDYXJyeTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW06IE9CVEFpcmxpbmVzRGV0YWlscykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbT8uY29kZSA9PT0gcHJlZmVycmVkQ2FycnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRDYXJyaWVycy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJlZmVycmVkQ2FycmllcnMgPSBwcmVmZXJyZWRDYXJyaWVycztcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNpbXVsdGFuZW91c1NlYXJjaGVzQ2hlY2sodHJ1ZSkudGhlbih2YWwgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2hBcmdzPy5tdWx0aURlc3RpbmF0aW9uPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KHJlY2VudFNlYXJjaEFyZ3MubXVsdGlEZXN0aW5hdGlvblswXS5kYXRlKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlTXVsdGlEZXN0aW5hdGlvbihyZWNlbnRTZWFyY2hBcmdzKTtcbiAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSB0aGlzLm11bHRpRGVzdGluYXRpb25bMF0ub3JpZztcbiAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB0aGlzLm11bHRpRGVzdGluYXRpb25bMF0uZGVzdDtcbiAgICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNrRm9ySG90ZWxSZW1pbmRlcigpICYmIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0cy5IT1RFTC5lbmFibGVkKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hvc2VuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRIb3RlbFBhcmFtcyh0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zaW11bHRhbmVvdXNTZWFyY2hlc0NoZWNrKHRydWUpLnRoZW4odmFsID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmaXJzdCBoZXJlXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgIH1cbiAgfVxuXG4gIHNldEhvdGVsUGFyYW1zKHN0YXJ0U2VhcmNoZXM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tpbl9kYXRlID0gdGhpcy5vdXRCb3VuZERhdGU7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaGVja291dF9kYXRlID0gdGhpcy5pbmJvdW5kRGF0ZTtcblxuICAgIGNvbnN0IGxvY2F0aW9uID0gIHRoaXMuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XG5cbiAgICBjb25zdCBob3RlbENvdW50eSA9IHtcbiAgICAgIGNDb2RlOiBsb2NhdGlvbj8uY291bnRyeUNvZGUsXG4gICAgICBjTmFtZTogbG9jYXRpb24/LmNvdW50cnlcbiAgICB9O1xuXG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jb3VudHJ5ID0gaG90ZWxDb3VudHk7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5sb2NhdGlvbl90eXBlX3NlbGVjdCA9IExvY2F0aW9uVHlwZXMuQ2l0eTtcblxuICAgIGNvbnN0IGNpdHlMb2NhdGlvbiA9IGxvY2F0aW9uPy5kZXN0aW5hdGlvbj8uc3BsaXQoJywnKVswXTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgIC5nZXRDaXR5TG9jYXRpb25zKGNpdHlMb2NhdGlvbiwgaG90ZWxDb3VudHkuY0NvZGUpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAocmVzdWx0czpMb2NhdGlvbkRldGFpbHNbXSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0ubG9jYXRpb24gPSByZXN1bHRzLmZpbmQocmVzID0+IHJlcy5uYW1lID09PSBjaXR5TG9jYXRpb24pIHx8IHJlc3VsdHNbMF07XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0ubG9jYXRpb24gJiYgc3RhcnRTZWFyY2hlcykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlTXVsdGlEZXN0aW5hdGlvbihmYXY6IGFueSwgc3RhcnRTZWFyY2g6Ym9vbGVhbiA9IHRydWUsIGNsb25lQmFza2V0SXRlbTpib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgbXVsdGlEZXN0aW5hdGlvbiA9IGNsb25lQmFza2V0SXRlbSA/IHRoaXMubXVsdGlEZXN0aW5hdGlvbiA6IGZhdi5tdWx0aURlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG11bHRpID0gKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbXVsdGlEZXN0aW5hdGlvbi5tYXAoXG4gICAgICAgIGFzeW5jIChhOiB7XG4gICAgICAgICAgZGF0ZTogc3RyaW5nIHwgbW9tZW50Lk1vbWVudDtcbiAgICAgICAgICBkZXN0OiBzdHJpbmc7XG4gICAgICAgICAgb3JpZzogc3RyaW5nO1xuICAgICAgICAgIG9yaWdpbkFpcnBvcnRGdWxsOiBhbnk7XG4gICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogYW55O1xuICAgICAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdztcbiAgICAgICAgICBkZXBhcnR1cmVUaW1lV2luZG93OiBzdHJpbmc7XG4gICAgICAgICAgYXJyaXZhbFRpbWVXaW5kb3c6IHN0cmluZztcbiAgICAgICAgICBvcmlnaW5Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZTtcbiAgICAgICAgICBkZXN0aW5hdGlvbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlO1xuICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgbGV0IGRlc3RpbmF0aW9uOiB7XG4gICAgICAgICAgICBkYXRlOiBtb21lbnQuTW9tZW50O1xuICAgICAgICAgICAgZGVzdDogYW55O1xuICAgICAgICAgICAgb3JpZzogYW55O1xuICAgICAgICAgICAgb3JpZ2luQWlycG9ydEZ1bGw6IGFueTtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydEZ1bGw6IGFueTtcbiAgICAgICAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdztcbiAgICAgICAgICAgIG91dFRpbWVGbGV4aWJpbGl0eT86IG51bWJlcjtcbiAgICAgICAgICAgIG9yaWdpbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlO1xuICAgICAgICAgICAgZGVzdGluYXRpb25Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZTtcbiAgICAgICAgICB9ID0ge1xuICAgICAgICAgICAgZGF0ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVzdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3JpZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3JpZ2luQWlycG9ydEZ1bGw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydEZ1bGw6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5Bbnl0aW1lLFxuICAgICAgICAgICAgb3V0VGltZUZsZXhpYmlsaXR5OiBudWxsLFxuICAgICAgICAgICAgb3JpZ2luTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGUuQSxcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGUuQVxuICAgICAgICAgIH07XG4gICAgICAgICAgZGVzdGluYXRpb24ub3JpZyA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLm9yaWcsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGEub3JpZ2luTG9jYXRpb25UeXBlKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAudGhlbihvcmlnUmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAob3JpZ1Jlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmdhdGV3YXkgPT0gYS5vcmlnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGRlc3RpbmF0aW9uLmRlc3QgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5kZXN0LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBhLmRlc3RpbmF0aW9uTG9jYXRpb25UeXBlKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAudGhlbihkZXN0UmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmdhdGV3YXkgPT0gYS5kZXN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZGVzdGluYXRpb24ub3JpZ2luQWlycG9ydEZ1bGwgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5kZXN0LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBhLmRlc3RpbmF0aW9uTG9jYXRpb25UeXBlKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAudGhlbihkZXN0UmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmRlc3RpbmF0aW9uID09IGEub3JpZ2luQWlycG9ydEZ1bGwpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBkZXN0aW5hdGlvbi5kZXN0aW5hdGlvbkFpcnBvcnRGdWxsID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEuZGVzdCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgYS5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAgICAgLnRoZW4oZGVzdFJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gKGRlc3RSZXN1bHRzIGFzIGFueVtdKS5maW5kKGIgPT4gYi5kZXN0aW5hdGlvbiA9PSBhLmRlc3RpbmF0aW9uQWlycG9ydEZ1bGwpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoYS5kZXBhcnR1cmVUaW1lV2luZG93KSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5vdXRUaW1lRmxleGliaWxpdHkgPSB0aGlzLmhlbHBlcnMuY2FsY3VsYXRlRHVyYXRpb25JbkhvdXJzKFxuICAgICAgICAgICAgICBhLmRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhLmRhdGUpIHtcbiAgICAgICAgICAgIGEuZGF0ZSA9IGNsb25lQmFza2V0SXRlbSA/IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKGEuZGF0ZSBhcyBtb21lbnQuTW9tZW50KSA6IGEuZGF0ZTtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmRhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgICAgICAgYS5kYXRlIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgYS5kZXBhcnR1cmVUaW1lV2luZG93IHx8IGEuYXJyaXZhbFRpbWVXaW5kb3csXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uLm91dFRpbWVGbGV4aWJpbGl0eSB8fCAyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghY2xvbmVCYXNrZXRJdGVtKSB7XG4gICAgICAgICAgICBpZiAoYS5kZXBhcnR1cmVUaW1lV2luZG93IHx8IGEuYXJyaXZhbFRpbWVXaW5kb3cpIHtcbiAgICAgICAgICAgICAgZGVzdGluYXRpb24ub3V0VGltZUNyaXRlcmlhID0gYS5kZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICAgICAgPyBUaW1lV2luZG93LkRlcGFydFxuICAgICAgICAgICAgICAgIDogVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKSkgYXMgYW55W107XG5cbiAgICB0aGlzLm11bHRpRGVzdGluYXRpb24gPSBtdWx0aTtcbiAgICB0aGlzLmRlcGFydExvY2F0aW9uID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uWzBdLm9yaWc7XG4gICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5kZXN0O1xuICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxuICAgIGRhdGVUaW1lOiBtb21lbnQuTW9tZW50LFxuICAgIHdpbmRvdzogVGltZVdpbmRvdyxcbiAgICB0eXBlOiBGbGlnaHRTZWFyY2hUeXBlXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgdGltZUZsZXhpYmlsaXR5ID1cbiAgICAgIHR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5XG4gICAgICAgID8gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVGbGV4aWJpbGl0eVxuICAgICAgICA6IHRoaXMudGVtcFBhcmFtcy5pblRpbWVGbGV4aWJpbGl0eTtcblxuICAgIHJldHVybiB3aW5kb3cgPT09IFRpbWVXaW5kb3cuRGVwYXJ0XG4gICAgICA/IHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLXRpbWVGbGV4aWJpbGl0eSwgdGltZUZsZXhpYmlsaXR5KVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlQXJyaXZhbFRpbWVXaW5kb3coXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxuICAgIHR5cGU6IEZsaWdodFNlYXJjaFR5cGVcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAod2luZG93ICE9PSBUaW1lV2luZG93LkFycml2ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZUZsZXhpYmlsaXR5ID1cbiAgICAgIHR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUub25lV2F5XG4gICAgICAgID8gdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVGbGV4aWJpbGl0eVxuICAgICAgICA6IHRoaXMudGVtcFBhcmFtcy5pblRpbWVGbGV4aWJpbGl0eTtcblxuICAgIHJldHVybiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coZGF0ZVRpbWUsIC10aW1lRmxleGliaWxpdHksIDApO1xuICB9XG5cbiAgY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKGRhdGU6IHN0cmluZywgdGltZVdpbmRvdz86IHN0cmluZywgaG91cnM6IG51bWJlciA9IDIpOiBtb21lbnQuTW9tZW50IHtcbiAgICBpZiAodGltZVdpbmRvdykge1xuICAgICAgY29uc3QgW3N0YXJ0VGltZV0gPSB0aW1lV2luZG93LnNwbGl0KCctJyk7XG4gICAgICBjb25zdCB1cGRhdGVkU3RhcnRUaW1lID0gbW9tZW50KHN0YXJ0VGltZSwgJ0hIbW0nKS5hZGQoaG91cnMsICdob3VycycpLmZvcm1hdCgnSEhtbScpO1xuICAgICAgcmV0dXJuIG1vbWVudChgJHtkYXRlfVQke3VwZGF0ZWRTdGFydFRpbWV9YCwgJ1lZWVktTU0tRERUSEhtbScpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbW9tZW50KGRhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlYXJjaFF1ZXJ5KFxuICAgIHRpbWVXaW5kb3c6IHtcbiAgICAgIG91dGJvdW5kVGltZVdpbmRvdzogc3RyaW5nO1xuICAgICAgcmV0dXJuVGltZVdpbmRvdzogc3RyaW5nO1xuICAgIH0gPSBudWxsXG4gICk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzIHtcbiAgICBjb25zdCBpc011bHRpQ2l0eUFjdGl2ZSA9IHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eTtcbiAgICB0aGlzLl9tdWx0aURlc3RpbmF0aW9uID0gaXNNdWx0aUNpdHlBY3RpdmVcbiAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXG4gICAgICA6IG51bGw7XG5cbiAgICB0aGlzLl9tdWx0aURlc3RpbmF0aW9uID1cbiAgICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxuICAgICAgICA/IHRoaXMuc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KHRoaXMudGVtcFBhcmFtcy5tdWx0aURlc3RpbmF0aW9uKVxuICAgICAgICA6IFtdO1xuXG4gICAgY29uc3QgbXVsdGlDaXR5Q29ubmVjdGlvbnMgPVxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zID09PSAwICYmIGlzTXVsdGlDaXR5QWN0aXZlXG4gICAgICAgID8gdGhpcy5fbXVsdGlEZXN0aW5hdGlvbi5sZW5ndGggLSAxXG4gICAgICAgIDogbnVsbDtcblxuICAgIGNvbnN0IGlzRmxpZ2h0c0dyb3VwZWQgPSB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpO1xuICAgIHJldHVybiB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHM8U2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXM+KFxuICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIGlzTXVsdGlDaXR5QWN0aXZlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG11bHRpRGVzdGluYXRpb246IHRoaXMuX211bHRpRGVzdGluYXRpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydDogdGhpcy5fb3JpZ2luQWlycG9ydCxcbiAgICAgICAgICAgICAgb3JpZ2luQWlycG9ydEZ1bGw6IHRoaXMuX29yaWdpbkFpcnBvcnRGdWxsLFxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6IHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0RnVsbCxcbiAgICAgICAgICAgICAgb3JpZ2luTG9jYXRpb25UeXBlOiB0aGlzLl9vcmlnaW5Mb2NhdGlvblR5cGUsXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uTG9jYXRpb25UeXBlOiB0aGlzLl9kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZSxcbiAgICAgICAgICAgICAgam9pbmVyT3JMZWF2ZXI6IHRoaXMuaXNFcm1UcmF2ZWxsZXIoKSxcbiAgICAgICAgICAgICAgb3V0Ym91bmREYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZSh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlKSxcbiAgICAgICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aW1lV2luZG93XG4gICAgICAgICAgICAgICAgPyB0aW1lV2luZG93Lm91dGJvdW5kVGltZVdpbmRvdy5yZXBsYWNlKC8lM0EvZywgJycpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxuICAgICAgICAgICAgICAgICAgICBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgb3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUNyaXRlcmlhLFxuICAgICAgICAgICAgICAgIEZsaWdodFNlYXJjaFR5cGUub25lV2F5XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXNzZW5nZXJzOiB0aGlzLl9wYXNzZW5nZXJzLFxuICAgICAgICAgIHJldHVyblRyaXA6IHRoaXMuaXNSZXR1cm4sXG4gICAgICAgICAgb3V0Ym91bmRDYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcyA/IFt0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzc10gOiBudWxsLFxuICAgICAgICAgIHJlcXVpcmVGcmVlQmFnOiBudWxsLFxuICAgICAgICAgIG1heENvbm5lY3Rpb25zOiBpc011bHRpQ2l0eUFjdGl2ZSA/IG11bHRpQ2l0eUNvbm5lY3Rpb25zIDogdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zLFxuICAgICAgICAgIGluY2x1ZGVOZWFyYnlBaXJwb3J0czogaXNNdWx0aUNpdHlBY3RpdmUgPyBudWxsIDogdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyxcbiAgICAgICAgICBwcmVmZXJyZWRDYXJyaWVyczogdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzLm1hcCgoY2FycmllcjogT0JUQWlybGluZXNEZXRhaWxzKSA9PlxuICAgICAgICAgICAgY2Fycmllcj8uY29kZSA/IGNhcnJpZXIuY29kZSA6IG51bGxcbiAgICAgICAgICApLFxuICAgICAgICAgIGZhcmVUeXBlOiB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGUsXG4gICAgICAgICAgdmlhOiB0aGlzLnZpYSA/ICh0aGlzLnZpYSBhcyBPQlRBaXJwb3J0RGV0YWlscyApLmdhdGV3YXkgOiBudWxsXG4gICAgICAgICAgLy8gd2l0aEdyb3VwZWQ6IGlzRmxpZ2h0c0dyb3VwZWRcbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5pc1JldHVyblxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICByZXR1cm5EYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZSh0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUpLFxuICAgICAgICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93OiB0aW1lV2luZG93XG4gICAgICAgICAgICAgICAgPyB0aW1lV2luZG93LnJldHVyblRpbWVXaW5kb3cucmVwbGFjZSgvJTNBL2csICcnKVxuICAgICAgICAgICAgICAgIDogdGhpcy5tYWtlRGVwYXJ0dXJlVGltZVdpbmRvdyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5UaW1lQ3JpdGVyaWEsXG4gICAgICAgICAgICAgICAgICAgIEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZVdpbmRvdzogdGhpcy5tYWtlQXJyaXZhbFRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluYm91bmREYXRlLFxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcbiAgICAgICAgICAgICAgICBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICByZXR1cm5DYWJpbkNsYXNzOiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzc1xuICAgICAgICAgICAgICAgID8gW3RoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge31cbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaXNFcm1UcmF2ZWxsZXIoKTogRXJtVHJhdmVsbGVyVHlwZSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmVybVRyYXZlbGxlclR5cGUgJiZcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5lcm1UcmF2ZWxsZXJUeXBlICE9PSBFcm1UcmF2ZWxsZXJUeXBlLk5vbmVcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuZXJtVHJhdmVsbGVyVHlwZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRyYXZlbGxlcnMoKSB7XG4gICAgY29uc3QgdHJhdmVsbGVyczogRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0W10gPSBbXTtcblxuXG4gICAgdGhpcy50cmF2ZWxsZXJzPy5mb3JFYWNoKHRyYXZlbGxlciA9PiB7XG5cbiAgICAgIGNvbnN0IG5ld0ZsaWdodFBhc3NPYmplY3Q6IEZsaWdodFBhc3Nlbmdlck9iamVjdCA9IHtcbiAgICAgICAgdHlwZTogdHJhdmVsbGVyLmFnZVR5cGUgPyB0cmF2ZWxsZXIuYWdlVHlwZSA9PT0gYWdlcy5BZHVsdCA/IEZsaWdodFBhc3NlbmdlclR5cGUuQWR1bHQgOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkNoaWxkIDogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCxcbiAgICAgICAgaWQ6IHRyYXZlbGxlci5pZCxcbiAgICAgICAgZ3Vlc3Q6IHRyYXZlbGxlci5ndWVzdFxuICAgICAgfVxuICAgICAgdHJhdmVsbGVycy5wdXNoKG5ld0ZsaWdodFBhc3NPYmplY3QpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcGFzc2VuZ2VycyA9IHRyYXZlbGxlcnM7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hEZWZhdWx0cygpIHtcbiAgICBjb25zdCBoaWRlQ2xhc3NlcyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PGFueT4oXG4gICAgICBVc2VyRmF2b3J1cml0ZS5GbGlnaHRTZWFyY2hEZWZhdWx0c1xuICAgICkgfHwge1xuICAgICAgY2xhc3NTZWxlY3Rpb246IHtcbiAgICAgICAgYW55OiBmYWxzZSxcbiAgICAgICAgYnVzaW5lc3M6IGZhbHNlLFxuICAgICAgICBlY29ub215OiBmYWxzZSxcbiAgICAgICAgZmlyc3Q6IGZhbHNlLFxuICAgICAgICBwcmVtaXVtOiBmYWxzZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB9W10gPSBbXTtcbiAgICBpZiAoIWhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmVjb25vbXkpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdFY29ub215JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215IH0pO1xuICAgIH1cblxuICAgIGlmICghaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24ucHJlbWl1bSkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ1ByZW1pdW0nLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLlByZW1pdW1FY29ub215IH0pO1xuICAgIH1cblxuICAgIGlmICghaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uYnVzaW5lc3MpIHtcbiAgICAgIG9wdGlvbnMucHVzaCh7IG5hbWU6ICdCdXNpbmVzcycsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQnVzaW5lc3MgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5maXJzdCkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0ZpcnN0JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdCB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmFueSkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0FueScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuQW55IH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3ModGhpcy5jYWJpbkNsYXNzLCBoaWRlQ2xhc3Nlcywgb3B0aW9ucyk7XG4gICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyh0aGlzLnJldHVybkNhYmluQ2xhc3MsIGhpZGVDbGFzc2VzLCBvcHRpb25zKTtcbiAgICB0aGlzLmF2YWxpYWJsZUNsYXNzZXMubmV4dChvcHRpb25zKTtcblxuICAgIGlmIChoaWRlQ2xhc3Nlcz8uaGlkZUZsaWdodENhYmluQ2xhc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fc2hvd0NhYmluQ2xhc3NTZWxlY3Rpb24gPSAhaGlkZUNsYXNzZXMuaGlkZUZsaWdodENhYmluQ2xhc3M7XG4gICAgICB0aGlzLmNhYmluQ2xhc3MgPSB0aGlzLmdldFVwZGF0ZWRDYWJpbkNsYXNzKHRoaXMuY2FiaW5DbGFzcywgaGlkZUNsYXNzZXMsIG9wdGlvbnMpO1xuICAgICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyh0aGlzLmNhYmluQ2xhc3MsIGhpZGVDbGFzc2VzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoaGlkZUNsYXNzZXM/LmhpZGVDaG9vc2VBaXJsaW5lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zaG93UHJlZmVycmVkQWlybGluZXMgPSAhaGlkZUNsYXNzZXMuaGlkZUNob29zZUFpcmxpbmVzO1xuICAgIH1cblxuICAgIGlmIChoaWRlQ2xhc3Nlcz8udGltZVNlbGVjdGlvbkRlZmF1bHQpIHtcbiAgICAgIHN3aXRjaCAoaGlkZUNsYXNzZXMudGltZVNlbGVjdGlvbkRlZmF1bHQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdhbnl0aW1lJzpcbiAgICAgICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhcnJpdmUnOlxuICAgICAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkZXBhcnQnOlxuICAgICAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XG4gICAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGArKysgVW5rbm93biB0aW1lIHNlbGVjdGlvbiBkZWZhdWx0OiAke2hpZGVDbGFzc2VzLnRpbWVTZWxlY3Rpb25EZWZhdWx0fSArKytgXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFVwZGF0ZWRDYWJpbkNsYXNzKFxuICAgIGNhYmluQ2xhc3M6IEZsaWdodENhYmluQ2xhc3MsXG4gICAgaGlkZUNsYXNzZXM6IGFueSxcbiAgICBvcHRpb25zOiB7IG5hbWU6IHN0cmluZzsgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcyB9W11cbiAgKTogRmxpZ2h0Q2FiaW5DbGFzcyB7XG4gICAgc3dpdGNoIChjYWJpbkNsYXNzKSB7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuQW55OlxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uYW55ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzczpcbiAgICAgICAgcmV0dXJuIGhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmJ1c2luZXNzID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5FY29ub215OlxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uZWNvbm9teSA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuRmlyc3Q6XG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5maXJzdCA/IG9wdGlvbnNbMF0udHlwZSA6IGNhYmluQ2xhc3M7XG4gICAgICBjYXNlIEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXk6XG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5wcmVtaXVtID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcbiAgICB9XG4gICAgcmV0dXJuIGNhYmluQ2xhc3M7XG4gIH1cbiAgdXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoX3ByZXZpb3VzSXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4pOiB2b2lkIHtcbiAgICAvLyBGbGlnaHRzIGNhbiBub3QgYmUgc2VhcmNoIGFmdGVyIG90aGVyIHByb2R1Y3RzIHNvIG5vIGRlZmF1bHRzIGNhbiBiZSBzZXQuXG4gIH1cblxuICB1cGRhdGVTZWFyY2hGcm9tRXhwaXJlZEJhc2tldEl0ZW0oYmFza2V0SXRlbTogQmFza2V0SXRlbSwgc2V0RGF0ZVRpbWU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgY29uc3Qgc2VhcmNoRmxpZ2h0c1F1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyA9IGJhc2tldEl0ZW0uc2VhcmNoUXVlcnk7XG4gICAgaWYgKHNldERhdGVUaW1lKSB7XG4gICAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kRGF0ZSkge1xuICAgICAgICBsZXQgb3V0Ym91bmRUaW1lV2luZG93ID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgID8gc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgIDogc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXG4gICAgICAgICAgc2VhcmNoRmxpZ2h0c1F1ZXJ5Lm91dGJvdW5kRGF0ZSxcbiAgICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3dcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EYXRlKSB7XG4gICAgICAgIGxldCByZXR1cm5UaW1lV2luZG93ID0gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgICA/IHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgOiBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGF0ZSxcbiAgICAgICAgICByZXR1cm5UaW1lV2luZG93XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRRdWVyeUZyb21CYXNrZXRJdGVtKGJhc2tldEl0ZW0pO1xuICAgIHRoaXMuX3Bhc3NlbmdlcnMgPSBzZWFyY2hGbGlnaHRzUXVlcnkucGFzc2VuZ2VycztcbiAgICB0aGlzLmFkdWx0cyA9IHRoaXMuX3Bhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSAnQURVTFQnKS5sZW5ndGg7XG4gICAgdGhpcy5jaGlsZHJlbiA9IHRoaXMuX3Bhc3NlbmdlcnMuZmlsdGVyKChhOiBhbnkpID0+IGEudHlwZSA9PSAnQ0hJTEQnKS5sZW5ndGg7XG4gICAgdGhpcy5hZGRUcmF2ZWxsZXJzRnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gIH1cblxuICAvLyBXZSB1c2UgdGhpcyBtZXRob2QgZm9yIGZlYXR1cmVzOiBSZWNlbnRTZWFyY2gsIEZhdm91cml0ZVNlYXJjaCwgRXhwaXJlZEJhc2tldCwgQ29weUJhc2tldCwgQ2xvbmVCYXNrZXRcbiAgLy8gTm90ZTogRG8gbm90IGluY2x1ZGUgZGF0ZXMgYW5kIHRhdmVsbGVycyBpbiB0aGlzIG1ldGhvZFxuICBhc3luYyBhcHBseVNlYXJjaFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcywgc3RhcnRTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSwgY2xvbmVCYXNrZXRJdGVtOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmZhcmVUeXBlID0gcXVlcnkuZmFyZVR5cGU7XG4gICAgdGhpcy5tYXhDb25uZWN0aW9ucyA9IHF1ZXJ5Lm1heENvbm5lY3Rpb25zO1xuICAgIGlmIChxdWVyeS5vdXRib3VuZENhYmluQ2xhc3MpIHtcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHF1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzc1swXSBhcyBGbGlnaHRDYWJpbkNsYXNzO1xuICAgIH1cbiAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPSBxdWVyeS5yZXR1cm5DYWJpbkNsYXNzID8gcXVlcnkucmV0dXJuQ2FiaW5DbGFzc1swXSBhcyBGbGlnaHRDYWJpbkNsYXNzIDogbnVsbDtcbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHF1ZXJ5LmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLmNob3NlblNlYXJjaFR5cGUgPSBBcnJheS5pc0FycmF5KHF1ZXJ5Py5tdWx0aURlc3RpbmF0aW9uKSAmJiBxdWVyeS5tdWx0aURlc3RpbmF0aW9uLmxlbmd0aFxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eVxuICAgICAgOiBxdWVyeS5yZXR1cm5UcmlwXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXG4gICAgICA6IEZsaWdodFNlYXJjaFR5cGUub25lV2F5O1xuICAgIGlmICghY2xvbmVCYXNrZXRJdGVtKSB7XG4gICAgICBpZiAocXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93KSB7XG4gICAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5Lm91dGJvdW5kQXJyaXZhbFRpbWVXaW5kb3cpIHtcbiAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xuICAgICAgfVxuICAgICAgaWYgKHF1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdykge1xuICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVlcnkudmlhKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydHNMaXN0KHF1ZXJ5LnZpYSkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICB0aGlzLnZpYSA9IChyZXN1bHRzIGFzIGFueVtdKS5maW5kKGEgPT4gYS5nYXRld2F5ID09IHF1ZXJ5LnZpYSk7XG4gICAgICAgIHRoaXMuc2hvd1ZpYSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93VmlhID0gZmFsc2U7XG4gICAgICB0aGlzLnZpYSA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHF1ZXJ5Py5tdWx0aURlc3RpbmF0aW9uKSB8fCAhcXVlcnkubXVsdGlEZXN0aW5hdGlvbi5sZW5ndGgpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcbiAgICAgICAgICBxdWVyeS5vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgIHF1ZXJ5Lm9yaWdpbkxvY2F0aW9uVHlwZVxuICAgICAgICApLFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0QWlycG9ydEJ5Q29kZShcbiAgICAgICAgICBxdWVyeS5kZXN0aW5hdGlvbkFpcnBvcnQsXG4gICAgICAgICAgcXVlcnkuZGVzdGluYXRpb25Mb2NhdGlvblR5cGVcbiAgICAgICAgKVxuICAgICAgXSkuc3Vic2NyaWJlKChbZGVwYXJ0TG9jYXRpb24sIGFycml2ZUxvY2F0aW9uXSkgPT4ge1xuICAgICAgICBpZiAoZGVwYXJ0TG9jYXRpb24gJiYgYXJyaXZlTG9jYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmRlcGFydExvY2F0aW9uID0ge1xuICAgICAgICAgICAgZGVzdGluYXRpb246IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgICAgZ2F0ZXdheTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHMpLFxuICAgICAgICAgICAgY291bnRyeTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgICBwb3N0Y29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGRlcGFydExvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIGxvY2F0aW9uVHlwZTogcXVlcnkub3JpZ2luTG9jYXRpb25UeXBlXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0ge1xuICAgICAgICAgICAgZGVzdGluYXRpb246IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC5uYW1lLFxuICAgICAgICAgICAgZ2F0ZXdheTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLmlhdGEsXG4gICAgICAgICAgICB0ZXJtaW5hbHM6IHRoaXMuc2VhcmNoU2VydmljZS5wcm9jZXNzVGVybWluYWxzKGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaC50ZXJtaW5hbHMpLFxuICAgICAgICAgICAgY291bnRyeTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnksXG4gICAgICAgICAgICBwb3N0Y29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LnBvc3Rjb2RlLFxuICAgICAgICAgICAgY291bnRyeUNvZGU6IGFycml2ZUxvY2F0aW9uLmlhdGFNYXRjaD8ubG9jYXRpb25EZXRhaWxzPy5jb3VudHJ5Q29kZSxcbiAgICAgICAgICAgIGxvY2F0aW9uVHlwZTogcXVlcnkuZGVzdGluYXRpb25Mb2NhdGlvblR5cGVcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHF1ZXJ5LnByZWZlcnJlZENhcnJpZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmZXJyZWRDYXJyaWVyczogT0JUQWlybGluZXNEZXRhaWxzW10gPSBbXTtcbiAgICAgICAgICAgIChxdWVyeS5wcmVmZXJyZWRDYXJyaWVycyBhcyBzdHJpbmdbXSkubWFwKChwcmVmZXJyZWRDYXJyeTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBaXJsaW5lc0xpc3QocHJlZmVycmVkQ2FycnkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW06IE9CVEFpcmxpbmVzRGV0YWlscykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbT8uY29kZSA9PT0gcHJlZmVycmVkQ2FycnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRDYXJyaWVycy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJlZmVycmVkQ2FycmllcnMgPSBwcmVmZXJyZWRDYXJyaWVycztcbiAgICAgICAgICAgICAgICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJlZmVycmVkQ2FycmllcnMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChxdWVyeT8ubXVsdGlEZXN0aW5hdGlvbj8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IG1vbWVudChxdWVyeS5tdWx0aURlc3RpbmF0aW9uWzBdLmRhdGUpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNdWx0aURlc3RpbmF0aW9uKHF1ZXJ5LCBzdGFydFNlYXJjaCwgY2xvbmVCYXNrZXRJdGVtKTtcbiAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSB0aGlzLm11bHRpRGVzdGluYXRpb25bMF0ub3JpZztcbiAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB0aGlzLm11bHRpRGVzdGluYXRpb25bMF0uZGVzdDtcbiAgICAgIGlmIChzdGFydFNlYXJjaCkge1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRvdGFsQmFnZ2FnZShmYXJlOiBGbGlnaHRJdGluZXJhcnksIGlzT3V0Ym91bmQgPSB0cnVlKTogbnVtYmVyIHtcbiAgICBjb25zdCBjaGVja0JhZ2dhZ2VzID0gdGhpcy5nZXRCYWdnYWdlQWxsb3dhbmNlKGZhcmUpO1xuICAgIGNvbnN0IGNoZWNrQmFnZ2FnZUFtb3VudHNPdXQgPSBjaGVja0JhZ2dhZ2VzXG4gICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdDaGVja0luJyAmJiAhYS5pc0luKVxuICAgICAgLm1hcChhID0+IGE/LnF0eSkgYXMgbnVtYmVyW107XG4gICAgY29uc3QgY2hlY2tCYWdnYWdlQW1vdW50c0luID0gY2hlY2tCYWdnYWdlc1xuICAgICAgPy5maWx0ZXIoYSA9PiBhPy50eXBlID09PSAnQ2hlY2tJbicgJiYgYS5pc0luKVxuICAgICAgLm1hcChhID0+IGE/LnF0eSkgYXMgbnVtYmVyW107XG4gICAgICBpZiAoaXNPdXRib3VuZCkge1xuICAgICAgICByZXR1cm4gY2hlY2tCYWdnYWdlQW1vdW50c091dC5sZW5ndGggPyBNYXRoLm1pbiguLi5jaGVja0JhZ2dhZ2VBbW91bnRzT3V0KSA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2hlY2tCYWdnYWdlQW1vdW50c0luLmxlbmd0aCA/IE1hdGgubWluKC4uLmNoZWNrQmFnZ2FnZUFtb3VudHNJbikgOiAwO1xuICAgICAgfVxuICB9XG5cbiAgZ2V0SGFuZEJhZ2dhZ2UoZmFyZTogRmxpZ2h0SXRpbmVyYXJ5KTogbnVtYmVyIHtcbiAgICBjb25zdCBjaGVja0JhZ2dhZ2VzID0gdGhpcy5nZXRCYWdnYWdlQWxsb3dhbmNlKGZhcmUpO1xuICAgIGNvbnN0IGhhbmRCYWdnYWdlQW1vdW50cyA9IGNoZWNrQmFnZ2FnZXNcbiAgICAgID8uZmlsdGVyKGEgPT4gYT8udHlwZSA9PT0gJ0hhbmRDYXJyeScpXG4gICAgICAubWFwKGEgPT4gYT8ucXR5KSBhcyBudW1iZXJbXTtcbiAgICByZXR1cm4gaGFuZEJhZ2dhZ2VBbW91bnRzLmxlbmd0aCA/IE1hdGgubWluKC4uLmhhbmRCYWdnYWdlQW1vdW50cykgOiAwO1xuICB9XG5cbiAgZ2V0QmFnZ2FnZUFsbG93YW5jZShmYXJlOiBGbGlnaHRJdGluZXJhcnkpOiB7IHR5cGU6IHN0cmluZzsgcXR5OiBudW1iZXI7IGlzSW46IGJvb2xlYW4gfVtdIHtcbiAgICBjb25zdCBjaGVja0JhZ2dhZ2VzOiB7IHR5cGU6IHN0cmluZzsgcXR5OiBudW1iZXI7IGlzSW46IGJvb2xlYW4gfVtdID0gW107XG4gICAgZmFyZT8ub3V0Ym91bmRGbGlnaHRzLmZvckVhY2goZmxpZ2h0ID0+IHtcbiAgICAgIGlmIChmbGlnaHQuYWRkaXRpb25hbD8uYmFnZ2FnZUFsbG93YW5jZT8ubGVuZ3RoKSB7XG4gICAgICAgIGNoZWNrQmFnZ2FnZXMucHVzaCguLi5mbGlnaHQuYWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChmYXJlPy5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpIHtcbiAgICAgIGZhcmUuaW5ib3VuZEZsaWdodHMuZm9yRWFjaChmbGlnaHQgPT4ge1xuICAgICAgICBpZiAoZmxpZ2h0Py5hZGRpdGlvbmFsPy5iYWdnYWdlQWxsb3dhbmNlPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGVja0JhZ2dhZ2VzLnB1c2goLi4uZmxpZ2h0LmFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjaGVja0JhZ2dhZ2VzO1xuICB9XG4gIC8vIGlzR3JvdXBlZEZsaWdodHModG9UZXN0OiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5KTogdG9UZXN0IGlzIEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdIHtcbiAgLy8gICByZXR1cm4gdG9UZXN0WzBdPy50eXBlID09PSAnRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0JztcbiAgLy8gfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIC0gZmlsdGVyIHRoZSByZXN1bHRzLCB0aGVuIHNvcnQgdGhlIHJlbWFpbmRlclxuICAgKiBAdG9kbyAtIEFkZCBmaWx0ZXJzIGZvciB0cmF2ZWwgcG9saWN5LCBmYXJlIHR5cGVzIGFuZCBhbmNpbGxpYXJpZXNcbiAgICovXG4gIGFwcGx5RmlsdGVycyhmaWx0ZXJzOiBGbGlnaHRGaWx0ZXJzLCBzb3J0VmFsdWU6IEZsaWdodFNvcnRUeXBlcyk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgIHRoaXMuY3VycmVudFNvcnQgPSBzb3J0VmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2coJysrKyBBcHBseWluZyBGaWx0ZXJzIHRvIGZsaWdodHM6ICcsIGZpbHRlcnMsICcgKysrJyk7XG4gICAgaWYgKHRoaXMuZnVsbFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChbXSk7XG4gICAgfVxuXG4gICAgLy8gY29uc3QgZmlsdGVyU2VsZWN0ZWRGbGlnaHRzOiAoXG4gICAgLy8gICBncm91cHNUb1Nob3c6IG51bWJlcltdLFxuICAgIC8vICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtXG4gICAgLy8gKSA9PiAoZjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuID0gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XG4gICAgLy8gICA/IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoXG4gICAgLy8gICAgID8gKGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkgPT4ge1xuICAgIC8vICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgIC8vICAgICAgICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCB8fFxuICAgIC8vICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxuICAgIC8vICAgICAgICAgICApO1xuICAgIC8vICAgICAgICAgfTtcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICAgIDogKGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSkgPT4ge1xuICAgIC8vICAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgIC8vICAgICAgICAgICByZXR1cm4gKFxuICAgIC8vICAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCB8fFxuICAgIC8vICAgICAgICAgICAgIGdyb3Vwc1RvU2hvdy5pbmNsdWRlcyhmbGlnaHRJdGluZXJhcnkudWlkKVxuICAgIC8vICAgICAgICAgICApO1xuICAgIC8vICAgICAgICAgfTtcbiAgICAvLyAgICAgICB9XG4gICAgLy8gICA6IChfZ3JvdXBzVG9TaG93OiBudW1iZXJbXSkgPT4ge1xuICAgIC8vICAgICAgIHJldHVybiAoX2ZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgLy8gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyAgICAgICB9O1xuICAgIC8vICAgICB9O1xuXG4gICAgY29uc3QgdGVzdGVyID0gKFxuICAgICAgZmlsdGVyc1RvdGVzdDogUmVjb3JkPG51bWJlciB8IHN0cmluZywgU2VsZWN0RmlsdGVyPixcbiAgICAgIHRlc3RGdW5jdGlvbjogKFxuICAgICAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXksXG4gICAgICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXJcbiAgICAgICkgPT4gYm9vbGVhblxuICAgICkgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKGZpbHRlcnNUb3Rlc3QpLmZpbHRlcihcbiAgICAgICAgKGZpbHRlcjogU2VsZWN0RmlsdGVyKSA9PiBmaWx0ZXIuc2VsZWN0ZWRcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuICEhc2VsZWN0ZWQuZmluZCgoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0ZXN0RnVuY3Rpb24oZmxpZ2h0SXRpbmVyYXJ5LCBmaWx0ZXIudmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHJlcGxhY2VGaWVsZHMgPSAoZmllbGQ6IHN0cmluZywgZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkXG4gICAgICAgIC5yZXBsYWNlKCdPVVRCT1VORF9ERVBBUlRVUkUnLCAnb3V0Ym91bmRGbGlnaHRzLjAnKVxuICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAnT1VUQk9VTkRfQVJSSVZBTCcsXG4gICAgICAgICAgJ291dGJvdW5kRmxpZ2h0cy4nICsgKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMSlcbiAgICAgICAgKVxuICAgICAgICAucmVwbGFjZSgnSU5CT1VORF9ERVBBUlRVUkUnLCAnaW5ib3VuZEZsaWdodHMuMCcpXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICdJTkJPVU5EX0FSUklWQUwnLFxuICAgICAgICAgICdpbmJvdW5kRmxpZ2h0cy4nICsgKChmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmxlbmd0aCAtIDEpXG4gICAgICAgICk7XG4gICAgfTtcbiAgICBjb25zdCBpc0JldHdlZW4gPSAoXG4gICAgICBtaW5tYXg6IE1pbk1heCxcbiAgICAgIGZpZWxkOiBzdHJpbmdcbiAgICApOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxuICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcbiAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHZhbCA+PSBtaW5tYXgubWluICYmIHZhbCA8PSBtaW5tYXgubWF4O1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgaXNUaW1lQmV0d2VlbiA9IChcbiAgICAgIG1pbm1heDogTWluTWF4LFxuICAgICAgZmllbGQ6IHN0cmluZ1xuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gbW9tZW50KFxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXG4gICAgICAgICAgKVxuICAgICAgICApLmdldCgnaG91cicpO1xuXG4gICAgICAgIC8vIG5vdyBhdHRlbXB0IHRvIGdldCB0aGUgbWluIC0gbWF5IG5lZWQgdG8gbm9ybWFsaXNlIHRoaXNcbiAgICAgICAgY29uc3QgdmFsMiA9IG1vbWVudChcbiAgICAgICAgICB0aGlzLmhlbHBlcnMuZnJvbU9iamVjdChcbiAgICAgICAgICAgIGZsaWdodEl0aW5lcmFyeSxcbiAgICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxuICAgICAgICAgIClcbiAgICAgICAgKS5nZXQoJ21pbnV0ZScpO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsVGltZTogbnVtYmVyID0gTnVtYmVyKGAke3ZhbH0uJHt0aGlzLmhlbHBlcnMubm9ybWFsaXNlTWludXRlVG9CYXNlMTAodmFsMil9YCk7XG4gICAgICAgIHJldHVybiB0b3RhbFRpbWUgPj0gbWlubWF4Lm1pbiAmJiB0b3RhbFRpbWUgPD0gbWlubWF4Lm1heDtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGZpZWxkSGFzVmFsdWUgPSAoXG4gICAgICBmaWVsZDoga2V5b2YgRmxpZ2h0Sm91cm5leVxuICAgICk6ICgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuKSA9PiB7XG4gICAgICByZXR1cm4gKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gZmxpZ2h0W2ZpZWxkXSA9PT0gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBvdXRJdGluZXJhcnlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKVtdID0gW107XG4gICAgY29uc3QgaW5JdGluZXJhcnlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKVtdID0gW107XG5cbiAgICBjb25zdCBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKVtdID0gW107XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuYXJyaXZhbFRpbWUsICdPVVRCT1VORF9BUlJJVkFMLmRhdGVUaW1lQXJyaXZpbmcnKVxuICAgICk7XG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLmRlcGFydHVyZVRpbWUsICdPVVRCT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnKVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKSk7XG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJykpO1xuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xuXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuc3RvcHMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuc3RvcHMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGggPT09IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnRvdGFsU3RvcHMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBvdXRTdG9wcyA9IGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBpblN0b3BzID0gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdG90YWxTdG9wcyA9IG91dFN0b3BzID4gaW5TdG9wcyA/IG91dFN0b3BzIDogaW5TdG9wcztcbiAgICAgICAgcmV0dXJuIHRvdGFsU3RvcHMgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMudG90YWxTdG9wcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoXG4gICAgICAgIGZpbHRlcnMudHJhdmVsUG9saWN5LFxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzUmVhc29uID0gZmxpZ2h0SXRpbmVyYXJ5LnVuYXZhaWxhYmxlXG4gICAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLlVOQVZBSUxBQkxFXG4gICAgICAgICAgICA6IGZsaWdodEl0aW5lcmFyeS5yZXF1aXJlc1JlYXNvbktleXM/Lmxlbmd0aFxuICAgICAgICAgICAgPyBUcmF2ZWxQb2xpY2llcy5BTExPV19XSVRIX1JFQVNPTlxuICAgICAgICAgICAgOiBUcmF2ZWxQb2xpY2llcy5JTl9QT0xJQ1k7XG4gICAgICAgICAgcmV0dXJuIHJlcXVpcmVzUmVhc29uID09PSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoXG4gICAgICAgIGZpbHRlcnMudHJhdmVsUG9saWN5LFxuICAgICAgICAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzUmVhc29uID0gZmxpZ2h0SXRpbmVyYXJ5LnVuYXZhaWxhYmxlXG4gICAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLlVOQVZBSUxBQkxFXG4gICAgICAgICAgICA6IGZsaWdodEl0aW5lcmFyeS5yZXF1aXJlc1JlYXNvbktleXM/Lmxlbmd0aFxuICAgICAgICAgICAgPyBUcmF2ZWxQb2xpY2llcy5BTExPV19XSVRIX1JFQVNPTlxuICAgICAgICAgICAgOiBUcmF2ZWxQb2xpY2llcy5JTl9QT0xJQ1k7XG4gICAgICAgICAgcmV0dXJuIHJlcXVpcmVzUmVhc29uID09PSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5iYWdnYWdlLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IGZsaWdodEl0aW5lcmFyeS5iYWdnYWdlQWxsb3dhbmNlXG4gICAgICAgICAgPy5maWx0ZXIoYSA9PiBhPy50eXBlID09PSAnQ2hlY2tJbicpXG4gICAgICAgICAgLm1hcChhID0+IGE/LnF0eSkgYXMgbnVtYmVyW107XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGggPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpIDogMDtcbiAgICAgICAgcmV0dXJuIGJhZ2dhZ2UgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuZGVwYXR1cmVBaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuYXJyaXZhbEFpcnBvcnQsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5kdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpKTtcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5wcmljZSwgJ3RvdGFsLnByaWNlJykpO1xuXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMucmV0dXJuQXJyaXZhbFRpbWUsICdJTkJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZycpXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSwgJ09VVEJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZycpXG4gICAgKTtcbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLCAnSU5CT1VORF9ERVBBUlRVUkUuZGF0ZVRpbWVEZXBhcnRpbmcnKVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRGVwYXJ0dXJlVGltZSwgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZycpXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnJldHVybkR1cmF0aW9uLCAnaW5ib3VuZFRvdGFsRHVyYXRpb24nKSk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKSk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnN0b3BzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cz8ubGVuZ3RoID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuc3RvcHMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGggPT09IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5zdG9wcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmJhZ2dhZ2UsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2VcbiAgICAgICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdDaGVja0luJylcbiAgICAgICAgICAubWFwKChiYWdnYWdlQWxsb3dhbmNlOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWdnYWdlQWxsb3dhbmNlLnF0eSk7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2U6IG51bWJlciA9IGJhZ2dhZ2VBcnJheS5sZW5ndGggPyBNYXRoLm1pbiguLi5iYWdnYWdlQXJyYXkpIDogMDtcbiAgICAgICAgcmV0dXJuIGJhZ2dhZ2UgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuYmFnZ2FnZSwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZVxuICAgICAgICAgID8uZmlsdGVyKGEgPT4gYT8udHlwZSA9PT0gJ0NoZWNrSW4nKVxuICAgICAgICAgIC5tYXAoKGJhZ2dhZ2VBbGxvd2FuY2U6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZ2dhZ2VBbGxvd2FuY2UucXR5KTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aCA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSkgOiAwO1xuICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmRlcGF0dXJlUmV0dXJuQWlycG9ydCwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuZGVwYXR1cmVSZXR1cm5BaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHNbMF0/Lm9yaWdpbkFpcnBvcnQgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5hcnJpdmFsUmV0dXJuQWlycG9ydCwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzW2ZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXVxuICAgICAgICAgICAgPy5kZXN0aW5hdGlvbkFpcnBvcnQgPT09IHZhbHVlXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5hcnJpdmFsUmV0dXJuQWlycG9ydCwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICA/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IG91dEpvdXJuZXlUZXN0ZXJzOiAoKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4gYm9vbGVhbilbXSA9IFtdO1xuICAgIG91dEpvdXJuZXlUZXN0ZXJzLnB1c2godGVzdGVyKGZpbHRlcnMuY2xhc3NlcywgZmllbGRIYXNWYWx1ZSgnY2FiaW5DbGFzcycpKSk7XG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKSk7XG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnByaXZhdGVGYXJlcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0Sm91cm5leSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5LmZhcmVJbmZvLnRpdGxlID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGluSm91cm5leVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiBib29sZWFuKVtdID0gW107XG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmNsYXNzZXMsIGZpZWxkSGFzVmFsdWUoJ2NhYmluQ2xhc3MnKSkpO1xuICAgIGluSm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5haXJsaW5lcywgZmllbGRIYXNWYWx1ZSgnbWFya2V0aW5nQ2FycmllcicpKSk7XG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMucHJpdmF0ZUZhcmVzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuZmFyZUluZm8udGl0bGUgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnZpYXMsIGZpZWxkSGFzVmFsdWUoJ29yaWdpbkFpcnBvcnQnKSkgfHxcbiAgICAgICAgdGVzdGVyKGZpbHRlcnMudmlhcywgZmllbGRIYXNWYWx1ZSgnZGVzdGluYXRpb25BaXJwb3J0JykpXG4gICAgKTtcbiAgICBpbkpvdXJuZXlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy52aWFzLCBmaWVsZEhhc1ZhbHVlKCdvcmlnaW5BaXJwb3J0JykpIHx8XG4gICAgICAgIHRlc3RlcihmaWx0ZXJzLnZpYXMsIGZpZWxkSGFzVmFsdWUoJ2Rlc3RpbmF0aW9uQWlycG9ydCcpKVxuICAgICk7XG5cbiAgICBjb25zdCBvdXRGaWx0ZXJJdGluZXJhcmllcyA9IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogYm9vbGVhbiwgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBhY2MgPSBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKSAmJlxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHxcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuICEhb3V0Sm91cm5leVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW5cbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApKVxuICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IGluRmlsdGVySXRpbmVyYXJpZXMgPSAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGluSXRpbmVyYXJ5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYzogYm9vbGVhbiwgdGVzdGVyMTogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYWNjICYmIHRlc3RlcjEoZmxpZ2h0SXRpbmVyYXJ5KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKSAmJlxuICAgICAgICAoIWZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cz8ubGVuZ3RoIHx8XG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzIHx8IFtdKS5maW5kKChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gISFpbkpvdXJuZXlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICB0ZXN0ZXIyOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiBib29sZWFuXG4gICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGluRHVhbEZpbHRlckl0aW5lcmFyaWVzID0gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBib29sZWFuLCB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApICYmXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cz8ubGVuZ3RoIHx8XG4gICAgICAgICAgISEoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fCBbXSkuZmluZChcbiAgICAgICAgICAgIChmbGlnaHRKb3VybmV5OiBGbGlnaHRKb3VybmV5KTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgIGFjYzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgIHRlc3RlcjI6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW5cbiAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMihmbGlnaHRKb3VybmV5KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApKVxuICAgICAgKTtcbiAgICB9O1xuXG5cbiAgICBjb25zdCBzZXRTZWxlY3RlZCA9IChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICBmbGlnaHQuc2VsZWN0ZWQgPSBmbGlnaHQudWlkID09PSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQ/LnVpZDtcbiAgICAgIGZsaWdodC5wcmVmZXJyZWQgPSB0aGlzLmhlbHBlcnMucHJlZmVycmVkRHVhbFNpbmdsZShcbiAgICAgICAgZmxpZ2h0LFxuICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgKTtcbiAgICAgIGZsaWdodC5wcmVmZXJyZWRNZXNzYWdlcyA9IHRoaXMuaGVscGVycy5wcmVmZXJyZWRNZXNzYWdlc0R1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQucHJlZmVyZW5jZUxldmVsID0gdGhpcy5oZWxwZXJzLnByZWZlcmVuY2VMZXZlbER1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQudW5hdmFpbGFibGUgPSB0aGlzLmhlbHBlcnMudW5hdmFpbGFibGVEdWFsU2luZ2xlKFxuICAgICAgICBmbGlnaHQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICApO1xuICAgICAgZmxpZ2h0LnJlcXVpcmVzUmVhc29uS2V5cyA9IHRoaXMuaGVscGVycy5yZXF1aXJlc1JlYXNvbkR1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25NZXNzYWdlcyA9IHRoaXMuaGVscGVycy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VEdWFsU2luZ2xlKFxuICAgICAgICBmbGlnaHQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICApO1xuICAgICAgZmxpZ2h0LnVuYXZhaWxhYmxlTWVzc2FnZSA9IHRoaXMuaGVscGVycy51bmF2YWlsYWJsZU1lc3NhZ2VEdWFsU2luZ2xlKFxuICAgICAgICBmbGlnaHQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICApO1xuICAgICAgcmV0dXJuIGZsaWdodDtcbiAgICB9O1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KFxuICAgICAgT2JqZWN0LmZyZWV6ZShcbiAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpLm1hcCgocmVzdWx0NDogRmxpZ2h0QWxsUXVvdGVSZXN1bHQpID0+IHtcbiAgICAgICAgICBsZXQgbmV3Sm91cm5leXM6IGFueSA9IHRoaXMuYnlTY2hlZHVsZVxuICAgICAgICAgICAgPyB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0NC5zZWFyY2hCeVNjaGVkdWxlW3RoaXMuc2VsZWN0ZWRTZWdtZW50XSlcbiAgICAgICAgICAgIDogdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdDQuam91cm5leXMpO1xuICAgICAgICAgIGlmIChmaWx0ZXJzLmZsaWdodE51bWJlcikge1xuICAgICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBvdXRib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLm91dGJvdW5kRmxpZ2h0cy5maW5kKG91dEZsaWdodCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gb3V0RmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXIgKyBvdXRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyO1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIudG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVycy5mbGlnaHROdW1iZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChvdXRib3VuZEZsaWdodHMpIHJldHVybiBmbGlnaHRJdGVtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWx0ZXJzLmluYm91bmRGbGlnaHROdW1iZXIpIHtcbiAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gbmV3Sm91cm5leXMuZmlsdGVyKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5ib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLmluYm91bmRGbGlnaHRzLmZpbmQoaW5GbGlnaHQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IGluRmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXIgKyBpbkZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlci50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXJzLmluYm91bmRGbGlnaHROdW1iZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChpbmJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLmlzQ2xvbmluZy5nZXRWYWx1ZSgpKSB7XG4gICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcigoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5Q2xvbmluZ0ZpbHRlcnMoZmxpZ2h0SXRlbSwgdGhpcy5zZWxlY3RlZFNlZ21lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpO1xuICAgICAgICAgIGxldCBuZXdEdWFsU2luZ2xlOiBJdGluZXJhcnlTdW1tYXJ5W10gPSByZXN1bHQ0Lm11bHRpIGFzIEl0aW5lcmFyeVN1bW1hcnlbXTtcbiAgICAgICAgICBpZiAodGhpcy5pc1JldHVybiAmJiAhdGhpcy5ieVNjaGVkdWxlKSB7XG4gICAgICAgICAgICBsZXQgbmV3SW5Kb3VybmV5czogYW55ID0gdGhpcy5oZWxwZXJzLmNsb25lKHJlc3VsdDQuam91cm5leXMpO1xuICAgICAgICAgICAgbmV3SW5Kb3VybmV5cyA9IG5ld0luSm91cm5leXMuZmlsdGVyKGluRmlsdGVySXRpbmVyYXJpZXMpO1xuICAgICAgICAgICAgbmV3Sm91cm5leXMgPSB0aGlzLm1lcmdlT3V0SW5Cb3VuZChuZXdKb3VybmV5cywgbmV3SW5Kb3VybmV5cyk7XG5cbiAgICAgICAgICAgIC8vIERVQUwgU0lOR0xFXG4gICAgICAgICAgICBsZXQgZHVhbFNpbmdsZUpvdXJuZXlzT3V0OiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IGR1YWxTaW5nbGVKb3VybmV5c0luOiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzT3V0ID0gdGhpcy5zZWxlY3RlZEZsaWdodC52YWx1ZVxuICAgICAgICAgICAgICAgID8gdGhpcy5oZWxwZXJzXG4gICAgICAgICAgICAgICAgICAgIC5jbG9uZShyZXN1bHQ0Lm11bHRpWzBdPy5yZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgIChpdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4gaXRlbS5qb3VybmV5SGFzaCA9PT0gdGhpcy5zZWxlY3RlZFVJZFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiB0aGlzLmhlbHBlcnNcbiAgICAgICAgICAgICAgICAgICAgLmNsb25lKHJlc3VsdDQubXVsdGlbMF0/LnJlc3VsdHMpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIob3V0RmlsdGVySXRpbmVyYXJpZXMpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRJdGluYXJ5Um91dGluZXNbc29ydFZhbHVlXSk7XG5cbiAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzSW4gPSB0aGlzLnNlbGVjdGVkRmxpZ2h0LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB0aGlzLmhlbHBlcnNcbiAgICAgICAgICAgICAgICAgICAgLmNsb25lKHJlc3VsdDQubXVsdGlbMV0/LnJlc3VsdHMpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoc2V0U2VsZWN0ZWQpIC8vTWFwIGZpcnN0IGFzIHRoaXMgYWZmZWN0cyB0aGUgZmlsdGVyXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoaW5EdWFsRmlsdGVySXRpbmVyYXJpZXMpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRJdGluYXJ5Um91dGluZXNbc29ydFZhbHVlXSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuaGVscGVyc1xuICAgICAgICAgICAgICAgICAgICAuY2xvbmUocmVzdWx0NC5tdWx0aVsxXT8ucmVzdWx0cylcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpbkR1YWxGaWx0ZXJJdGluZXJhcmllcylcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQodGhpcy5fc29ydEl0aW5hcnlSb3V0aW5lc1tzb3J0VmFsdWVdKTtcblxuICAgICAgICAgICAgICBpZiAoZmlsdGVycy5mbGlnaHROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leXNPdXQgPSBkdWFsU2luZ2xlSm91cm5leXNPdXQuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRib3VuZEZsaWdodHMgPSBmbGlnaHRJdGVtLm91dGJvdW5kRmxpZ2h0cy5maW5kKG91dEZsaWdodCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gb3V0RmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXIgKyBvdXRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIudG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVycy5mbGlnaHROdW1iZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvdXRib3VuZEZsaWdodHMpIHJldHVybiBmbGlnaHRJdGVtO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGZpbHRlcnMuaW5ib3VuZEZsaWdodE51bWJlcikge1xuICAgICAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5c0luID0gZHVhbFNpbmdsZUpvdXJuZXlzSW4uZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQoaW5GbGlnaHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IGluRmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXIgKyBpbkZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlci50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXJzLmluYm91bmRGbGlnaHROdW1iZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIHNvcnRpbmcgZHVhbCBzaW5nbGVzOiAke2Vycm9yfSArKytgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld0R1YWxTaW5nbGVbMF0pIHtcbiAgICAgICAgICAgICAgbmV3RHVhbFNpbmdsZVswXS5yZXN1bHRzID0gZHVhbFNpbmdsZUpvdXJuZXlzT3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld0R1YWxTaW5nbGVbMV0pIHtcbiAgICAgICAgICAgICAgbmV3RHVhbFNpbmdsZVsxXS5yZXN1bHRzID0gZHVhbFNpbmdsZUpvdXJuZXlzSW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld0pvdXJuZXlzLnNvcnQodGhpcy5fc29ydEl0aW5hcnlSb3V0aW5lc1tzb3J0VmFsdWVdKTtcbiAgICAgICAgICBsZXQgZmlsdGVyZWR5U2NoZWR1bGU6IEZsaWdodEl0aW5lcmFyeVtdW10gPSBbXTtcbiAgICAgICAgICByZXN1bHQ0LnNlYXJjaEJ5U2NoZWR1bGVbdGhpcy5zZWxlY3RlZFNlZ21lbnRdID0gbmV3Sm91cm5leXM7XG4gICAgICAgICAgZmlsdGVyZWR5U2NoZWR1bGUgPSByZXN1bHQ0LnNlYXJjaEJ5U2NoZWR1bGU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdGbGlnaHRBbGxRdW90ZVJlc3VsdCcsXG4gICAgICAgICAgICBqb3VybmV5czogIXRoaXMuYnlTY2hlZHVsZVxuICAgICAgICAgICAgICA/IDxGbGlnaHRJdGluZXJhcnlbXT5uZXdKb3VybmV5c1xuICAgICAgICAgICAgICA6IDxGbGlnaHRJdGluZXJhcnlbXT5yZXN1bHQ0LmpvdXJuZXlzLFxuICAgICAgICAgICAgbXVsdGk6IG5ld0R1YWxTaW5nbGUsXG4gICAgICAgICAgICBzZWFyY2hCeVNjaGVkdWxlOiB0aGlzLmJ5U2NoZWR1bGVcbiAgICAgICAgICAgICAgPyA8RmxpZ2h0SXRpbmVyYXJ5W11bXT5maWx0ZXJlZHlTY2hlZHVsZVxuICAgICAgICAgICAgICA6IDxGbGlnaHRJdGluZXJhcnlbXVtdPnJlc3VsdDQuc2VhcmNoQnlTY2hlZHVsZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApIGFzIHVua25vd24gYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheVxuICAgICk7XG4gICAgLy8gfVxuICB9XG5cbiAgYXBwbHlDbG9uaW5nRmlsdGVycyhmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnksIHNlbGVjdGVkU2VnbWVudDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmJ5U2NoZWR1bGUpIHtcbiAgICAgIGNvbnN0IG91dGJvdW5kTWF0Y2ggPSBmbGlnaHRJdGVtLm91dGJvdW5kRmxpZ2h0cy5ldmVyeShvdXRib3VuZEZsaWdodCA9PlxuICAgICAgICB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLm91dGJvdW5kRmxpZ2h0cy5zb21lKChjbG9uZWRPdXRib3VuZDogRmxpZ2h0Sm91cm5leSkgPT5cbiAgICAgICAgICBjbG9uZWRPdXRib3VuZC5tYXJrZXRpbmdGbGlnaHROdW1iZXIgPT09IG91dGJvdW5kRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlclxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpbmJvdW5kTWF0Y2ggPVxuICAgICAgICB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLmpvdXJuZXlUeXBlID09PSBGbGlnaHRKb3VybmV5VHlwZS5Sb3VuZHRyaXBcbiAgICAgICAgICA/IGZsaWdodEl0ZW0uaW5ib3VuZEZsaWdodHMuZXZlcnkoaW5ib3VuZEZsaWdodCA9PlxuICAgICAgICAgICAgICB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLmluYm91bmRGbGlnaHRzLnNvbWUoKGNsb25lZEluYm91bmQ6IEZsaWdodEpvdXJuZXkpID0+XG4gICAgICAgICAgICAgICAgY2xvbmVkSW5ib3VuZC5tYXJrZXRpbmdGbGlnaHROdW1iZXIgPT09IGluYm91bmRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IHRydWU7XG5cbiAgICAgIGNvbnN0IGxlbmd0aHNNYXRjaCA9XG4gICAgICAgIGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5vdXRib3VuZEZsaWdodHMubGVuZ3RoICYmXG4gICAgICAgICAgKHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuam91cm5leVR5cGUgIT09IEZsaWdodEpvdXJuZXlUeXBlLlJvdW5kdHJpcCB8fFxuICAgICAgICAgICAgZmxpZ2h0SXRlbS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGggPT09IHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuaW5ib3VuZEZsaWdodHMubGVuZ3RoKTtcbiAgICAgIHJldHVybiBvdXRib3VuZE1hdGNoICYmIGluYm91bmRNYXRjaCAmJiBsZW5ndGhzTWF0Y2g7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMuYnlTY2hlZHVsZSAmJiB0eXBlb2Ygc2VsZWN0ZWRTZWdtZW50ID09PSAnbnVtYmVyJyAmJiBzZWxlY3RlZFNlZ21lbnQgPj0gMCkge1xuICAgICAgY29uc3Qgb3V0Ym91bmRNYXRjaCA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmV2ZXJ5KG91dGJvdW5kRmxpZ2h0ID0+XG4gICAgICAgICAgdGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5vdXRib3VuZEZsaWdodHNbc2VsZWN0ZWRTZWdtZW50XS5tYXJrZXRpbmdGbGlnaHROdW1iZXIgPT09IG91dGJvdW5kRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlclxuICAgICAgKTtcbiAgICAgIHJldHVybiBvdXRib3VuZE1hdGNoO1xuICAgIH1cbiAgfVxuXG4gIG1lcmdlT3V0SW5Cb3VuZChvdXRib3VuZDogRmxpZ2h0SXRpbmVyYXJ5W10sIGluYm91bmQ6IEZsaWdodEl0aW5lcmFyeVtdKTogRmxpZ2h0SXRpbmVyYXJ5W10ge1xuICAgIGxldCBmbGlnaHRzOiBGbGlnaHRJdGluZXJhcnlbXSA9IFtdO1xuICAgIG91dGJvdW5kLmZvckVhY2gob3V0RmxpZ2h0ID0+IHtcbiAgICAgIGlmIChpbmJvdW5kLmZpbmQoYSA9PiBhLnVpZCA9PSBvdXRGbGlnaHQudWlkKSkgZmxpZ2h0c1tvdXRGbGlnaHQudWlkXSA9IG91dEZsaWdodDtcbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhmbGlnaHRzKTtcbiAgfVxuXG4gIHVwZGF0ZUxvd2VzdFByaWNlKHJlc3VsdHM6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpOiBJQ2hlYXBlc3RQcmljZSB7XG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCB8fCB0aGlzLnNlYXJjaFNlcnZpY2UuaXNGbGlnaHRzR3JvdXBlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgam91cm5leXMgPSAocmVzdWx0c1swXSBhcyBGbGlnaHRBbGxRdW90ZVJlc3VsdCkuam91cm5leXM7XG4gICAgaWYgKCFqb3VybmV5cy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZSwgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xuICAgICAgICByZXR1cm4gY2hlYXBlc3RQcmljZTtcbiAgICAgIH0sXG4gICAgICB7IGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGN1cnJlbmN5Q29kZTogY3VycmVuY3kgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ZWREdWFsU2luZ2xlKHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyk6IHZvaWQge1xuICAgIHRoaXMuZmV0Y2hpbmdSdWxlcyA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEZsaWdodC5uZXh0KHNlbGVjdGVkRmxpZ2h0KTtcbiAgICB0aGlzLnNlbGVjdGVkVUlkID0gc2VsZWN0ZWRGbGlnaHQuam91cm5leUhhc2g7XG4gICAgY29uc3QgYXBwbHlSdWxlc09ic2VydmFibGVzID0gdGhpcy5oZWxwZXJzLmNsb25lKHRoaXMuZnVsbFJlc3VsdHMpLm1hcCgocmVzdWx0NDogYW55KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBseUZsaWdodFJ1bGVzXG4gICAgICAgIC5mZXRjaE9uZSh7XG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogc2VsZWN0ZWRGbGlnaHQsXG4gICAgICAgICAgYXZhaWxhYmxlSW5ib3VuZEZsaWdodHM6IHJlc3VsdDQubXVsdGlbMV0/LnJlc3VsdHMsXG4gICAgICAgICAgc2VhcmNoSWQ6IHRoaXMucmF3UmVzdWx0cy5zZWFyY2hJZFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgIG1hcCgocnVsZXM6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVsZXM/LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbdGhpcy5zZWxlY3RlZFVJZF0pIHtcbiAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSB0aGlzLmhlbHBlcnMubWVyZ2VPYmplY3RzKHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBydWxlcyk7XG4gICAgICAgICAgICAgIHJlc3VsdDQubXVsdGlbMV0/LnJlc3VsdHMubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucmVtb3ZlUmVzdWx0ID0gdGhpcy5oZWxwZXJzLnJlbW92ZVJlc3VsdHNEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS5wcmVmZXJyZWQgPSB0aGlzLmhlbHBlcnMucHJlZmVycmVkRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucHJlZmVycmVkTWVzc2FnZXMgPSB0aGlzLmhlbHBlcnMucHJlZmVycmVkTWVzc2FnZXNEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS5wcmVmZXJlbmNlTGV2ZWwgPSB0aGlzLmhlbHBlcnMucHJlZmVyZW5jZUxldmVsRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucmVxdWlyZXNSZWFzb25LZXlzID0gdGhpcy5oZWxwZXJzLnJlcXVpcmVzUmVhc29uRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyA9IHRoaXMuaGVscGVycy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS51bmF2YWlsYWJsZSA9IHRoaXMuaGVscGVycy51bmF2YWlsYWJsZUR1YWxTaW5nbGUoXG4gICAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLnVuYXZhaWxhYmxlTWVzc2FnZSA9IHRoaXMuaGVscGVycy51bmF2YWlsYWJsZU1lc3NhZ2VEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAocmVzdWx0NC5tdWx0aVsxXT8ucmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdDQubXVsdGlbMV0ucmVzdWx0cyA9IHJlc3VsdDQubXVsdGlbMV0ucmVzdWx0cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+ICFmbGlnaHRJdGVtLnJlbW92ZVJlc3VsdFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBuZXdEdWFsU2luZ2xlOiBJdGluZXJhcnlTdW1tYXJ5W10gPSByZXN1bHQ0Lm11bHRpO1xuICAgICAgICAgICAgbGV0IGR1YWxTaW5nbGVKb3VybmV5c091dDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXSA9IFtcbiAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLmNsb25lKHNlbGVjdGVkRmxpZ2h0KVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIC8vIC5maWx0ZXIoKGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiBpdGVtLnVpZCA9PT0gc2VsZWN0ZWRGbGlnaHQudWlkKTtcblxuICAgICAgICAgICAgaWYgKG5ld0R1YWxTaW5nbGVbMF0pIHtcbiAgICAgICAgICAgICAgbmV3RHVhbFNpbmdsZVswXS5yZXN1bHRzID0gZHVhbFNpbmdsZUpvdXJuZXlzT3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mZXRjaGluZ1J1bGVzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIF90eXBlOiAnRmxpZ2h0QWxsUXVvdGVSZXN1bHQnLFxuICAgICAgICAgICAgICBqb3VybmV5czogPEZsaWdodEl0aW5lcmFyeVtdPnJlc3VsdDQuam91cm5leXMsXG4gICAgICAgICAgICAgIG11bHRpOiBuZXdEdWFsU2luZ2xlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmb3JrSm9pbihhcHBseVJ1bGVzT2JzZXJ2YWJsZXMpLnN1YnNjcmliZSgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICB0aGlzLnJlc3VsdHMubmV4dChPYmplY3QuZnJlZXplKHJlc3VsdHMpIGFzIEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XG4gICAgfSk7XG4gIH1cblxuICByZXNldFNlbGVjdGVkRHVhbFNpbmdsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkRmxpZ2h0Lm5leHQobnVsbCk7XG4gICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XG4gIH1cblxuXG4gIGFzeW5jIHNlbGVjdEdyb3VwZWRGbGlnaHQoXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSxcbiAgICBncm91cElkOiBudW1iZXIsXG4gICAgaXNMaWdodG5pbmc6IGJvb2xlYW4gPSBmYWxzZSAvLyB0ZW1wIGFyZyBhcyBzZWF0bWFwcyBvbiBvbiBsdVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmdldERlZmF1bHRCYXNrZXQoKTtcbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XG4gICAgY29uc3QgaXNTYWJyZVJ5YW5haXIgPSBzZWxlY3RlZEZsaWdodC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5TYWJyZUZsaWdodCAmJiBbLi4uc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLCAuLi5zZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0c10uc29tZShmbGlnaHQgPT4gZmxpZ2h0Lm1hcmtldGluZ0NhcnJpZXJOYW1lID09PVwiUnlhbmFpclwiIHx8IGZsaWdodC5vcGVyYXRpbmdDYXJyaWVyTmFtZSA9PT1cIlJ5YW5haXJcIik7XG4gICAgY29uc3QgaXNURlggPSBzZWxlY3RlZEZsaWdodC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5UcmF2ZWxmdXNpb247XG5cblxuICAgIGlmIChcbiAgICAgIChiYXNrZXQgJiYgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXkpIHx8XG4gICAgICAodGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkgJiZcbiAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kKVxuICAgICkge1xuICAgICAgLy8gdGVtcCBzdGF0ZW1lbnQgYXMgc2VhdG1hcHMgb24gb24gbHUsIGFsc28gb25seSBmb3IgVEZYIGZvciB0aGUgbW9tZW50XG4gICAgICBpZiAoaXNMaWdodG5pbmcgJiYgdGhpcy5jaGVja1NlYXRtYXBFeHRyYXNFbmFibGVkKHNlbGVjdGVkRmxpZ2h0KSkge1xuICAgICAgICBjb25zdCBkZXRhaWxFeHRyYXMgPSBhd2FpdCB0aGlzLmdldEZsaWdodERldGFpbEV4dHJhcyhzZWxlY3RlZEZsaWdodCwgZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKGRldGFpbEV4dHJhcz8udmFsaWQpIHtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzLFxuICAgICAgICAgICAgaXNURlggfHwgaXNTYWJyZVJ5YW5haXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYm9va1NpbmdsZUZsaWdodChpbnRCYXNrZXQsIHNlbGVjdGVkRmxpZ2h0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGJhc2tldCAmJlxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcbiAgICAgIChkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQgfHxcbiAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVPdXRib3VuZClcbiAgICApIHtcbiAgICAgIHRoaXMub3V0Ym91bmRDYWJpbkNsYXNzID0gc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzWzBdLmNhYmluQ2xhc3M7XG4gICAgICBpZiAoc2VsZWN0ZWRGbGlnaHQuc2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWQgPSAtMTtcbiAgICAgICAgdGhpcy5vdXRib3VuZENhYmluQ2xhc3MgPSAnJzsgLy8gcmVzZXQgb3V0Ym91bmRDYWJpbkNsYXNzXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gc2VsZWN0ZWRGbGlnaHQ7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkID0gZ3JvdXBJZDtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCk7XG4gICAgICB9XG4gICAgICBzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCA9ICFzZWxlY3RlZEZsaWdodC5zZWxlY3RlZDtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYmFza2V0ICYmXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiAmJlxuICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkluYm91bmQgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodFxuICAgICkge1xuICAgICAgLy8gdGVtcCBzdGF0ZW1lbnQgYXMgc2VhdG1hcHMgb24gb24gbHVcbiAgICAgIGlmIChpc0xpZ2h0bmluZyAmJiB0aGlzLmNoZWNrU2VhdG1hcEV4dHJhc0VuYWJsZWQoc2VsZWN0ZWRGbGlnaHQpKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbEV4dHJhcyA9IGF3YWl0IHRoaXMuZ2V0RmxpZ2h0RGV0YWlsRXh0cmFzKHNlbGVjdGVkRmxpZ2h0LCBkaXJlY3Rpb24pO1xuICAgICAgICBpZiAoZGV0YWlsRXh0cmFzPy52YWxpZCkge1xuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMsXG4gICAgICAgICAgICBkZXRhaWxFeHRyYXMsXG4gICAgICAgICAgICBpc1RGWCB8fCBpc1NhYnJlUnlhbmFpclxuICAgICAgICAgICk7XG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMsXG4gICAgICAgICAgICBkZXRhaWxFeHRyYXMsXG4gICAgICAgICAgICBpc1RGWCB8fCBpc1NhYnJlUnlhbmFpclxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5vdXRib3VuZENhYmluQ2xhc3MgPSAnJzsgLy8gcmVzZXQgb3V0Ym91bmRDYWJpbkNsYXNzXG4gICAgICAgICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHRoaXMuY3JlYXRlU2NoZW1hRGV0YWlscyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgICAgRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmRvQm9va2luZyhcbiAgICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgICAgc2NoZW1hRGV0YWlscyxcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQyxcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nVVRDXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xuICAgICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm91dGJvdW5kQ2FiaW5DbGFzcyA9ICcnOyAvLyByZXNldCBvdXRib3VuZENhYmluQ2xhc3NcbiAgICAgICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHRoaXMuY3JlYXRlU2NoZW1hRGV0YWlscyhzZWxlY3RlZEZsaWdodCwgRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwKTtcbiAgICAgICAgYXdhaXQgdGhpcy5kb0Jvb2tpbmcoXG4gICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LFxuICAgICAgICAgIHNjaGVtYURldGFpbHMsXG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nVVRDLFxuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nVVRDXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBiYXNrZXQgJiZcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodFxuICAgICkge1xuICAgICAgLy8gdGVtcCBzdGF0ZW1lbnQgYXMgc2VhdG1hcHMgb24gb24gbHVcbiAgICAgIGlmIChpc0xpZ2h0bmluZyAmJiB0aGlzLmNoZWNrU2VhdG1hcEV4dHJhc0VuYWJsZWQoc2VsZWN0ZWRGbGlnaHQpKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbEV4dHJhc091dCA9IGF3YWl0IHRoaXMuZ2V0RmxpZ2h0RGV0YWlsRXh0cmFzKHNlbGVjdGVkRmxpZ2h0LCBkaXJlY3Rpb24pO1xuICAgICAgICBpZiAoZGV0YWlsRXh0cmFzT3V0Py52YWxpZCkge1xuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMsXG4gICAgICAgICAgICBkZXRhaWxFeHRyYXNPdXQsXG4gICAgICAgICAgICBpc1RGWCB8fCBpc1NhYnJlUnlhbmFpclxuICAgICAgICAgICk7XG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMsXG4gICAgICAgICAgICBkZXRhaWxFeHRyYXNPdXQsXG4gICAgICAgICAgICBpc1RGWCB8fCBpc1NhYnJlUnlhbmFpclxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KFxuICAgICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGV0YWlsRXh0cmFzSW4gPSBhd2FpdCB0aGlzLmdldEZsaWdodERldGFpbEV4dHJhcyhzZWxlY3RlZEZsaWdodCwgZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKGRldGFpbEV4dHJhc0luPy52YWxpZCkge1xuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMsXG4gICAgICAgICAgICBkZXRhaWxFeHRyYXNJbixcbiAgICAgICAgICAgIGlzVEZYIHx8IGlzU2FicmVSeWFuYWlyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhc0luLFxuICAgICAgICAgICAgaXNURlggfHwgaXNTYWJyZVJ5YW5haXJcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuYm9va1NpbmdsZUZsaWdodChcbiAgICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZGlyZWN0aW9uICE9PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KFxuICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgZGlyZWN0aW9uICE9PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuYm9va1NpbmdsZUZsaWdodChcbiAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgc2VsZWN0RmxpZ2h0U2VhdE1hcENoZWNrKFxuICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtID0gbnVsbCxcbiAgICBnbXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvL2ZvciBTY2lvbiBhbmQgR28yIGZsaWdodFxuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xuICAgIGlmIChkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmQpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmR1YWxTaW5nbGVTZWF0Q2hlY2soZmxpZ2h0LCBpbnRCYXNrZXQsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jaGVja0ZvclNlYXRNYXAoZmxpZ2h0LCBpbnRCYXNrZXQsIGZhbHNlLCBnbXQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrRm9yU2VhdE1hcChcbiAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXG4gICAgZHVhbEluYm91bmQ6IGJvb2xlYW4sXG4gICAgZ210OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMuY2hlY2tTZWF0bWFwRXh0cmFzRW5hYmxlZChmbGlnaHQpKSB7XG4gICAgICBjb25zdCBpc1NhYnJlUnlhbmFpciA9IGZsaWdodC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5TYWJyZUZsaWdodCAmJiBbLi4uZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cywgLi4uZmxpZ2h0LmluYm91bmRGbGlnaHRzXS5zb21lKGZsaWdodCA9PiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUgPT09XCJSeWFuYWlyXCIgfHwgZmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXJOYW1lID09PVwiUnlhbmFpclwiKTtcblxuICAgICAgY29uc3QgaXNURlggPSBmbGlnaHQuc291cmNlID09PSBTZXJ2aWNlUHJvdmlkZXIuVHJhdmVsZnVzaW9uO1xuXG4gICAgICBjb25zdCBkZXRhaWxFeHRyYXMgPSBhd2FpdCB0aGlzLmdldEZsaWdodERldGFpbEV4dHJhcyhcbiAgICAgICAgZmxpZ2h0LFxuICAgICAgICBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVPdXRib3VuZCxcbiAgICAgICAgZ210XG4gICAgICApO1xuICAgICAgaWYgKGRldGFpbEV4dHJhcz8udmFsaWQpIHtcbiAgICAgICAgZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICBkZXRhaWxFeHRyYXMsXG4gICAgICAgICAgaXNURlggfHwgaXNTYWJyZVJ5YW5haXJcbiAgICAgICAgKTtcbiAgICAgICAgZmxpZ2h0LmluYm91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMsXG4gICAgICAgICAgZGV0YWlsRXh0cmFzLFxuICAgICAgICAgIGlzVEZYIHx8IGlzU2FicmVSeWFuYWlyXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkRmxpZ2h0Sm91cm5leXNUb0Jhc2tldChmbGlnaHQsIGludEJhc2tldCwgZmFsc2UsIGR1YWxJbmJvdW5kLCBnbXQpO1xuICAgICAgICByZXR1cm4gZGV0YWlsRXh0cmFzLmlzQm9va2luZztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5hZGRGbGlnaHRKb3VybmV5c1RvQmFza2V0KGZsaWdodCwgaW50QmFza2V0LCBmYWxzZSwgZHVhbEluYm91bmQsIGdtdCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgYXN5bmMgZHVhbFNpbmdsZVNlYXRDaGVjayhcbiAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXG4gICAgZHVhbEluYm91bmQ6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRvdXRib3VuZERTID0gdGhpcy5zZWxlY3RlZEZsaWdodC52YWx1ZTtcbiAgICBjb25zdCBvdXRydWxlcyA9IHRoaXMuZ2V0RmFyZVJ1bGVzKHNlbGVjdGVkb3V0Ym91bmREUz8uam91cm5leUhhc2gpO1xuICAgIGNvbnN0IG91dGZsaWdodENvcHkgPSA8RmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+dGhpcy5oZWxwZXJzLmNsb25lKHNlbGVjdGVkb3V0Ym91bmREUyk7XG4gICAgaWYgKG91dHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWQ/LnJlcXVpcmVzUmVhc29uKSB7XG4gICAgICBvdXRmbGlnaHRDb3B5LnJlcXVpcmVzUmVhc29uS2V5cyA9IG91dHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWQ/LnJlcXVpcmVzUmVhc29uS2V5cztcbiAgICAgIG91dGZsaWdodENvcHkucmVxdWlyZXNSZWFzb25NZXNzYWdlcyA9IG91dHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWQ/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXM7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2hlY2tGb3JTZWF0TWFwKG91dGZsaWdodENvcHksIGludEJhc2tldCwgZmFsc2UpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrRm9yU2VhdE1hcChmbGlnaHQsIGludEJhc2tldCwgZHVhbEluYm91bmQpO1xuICB9XG5cbiAgY2hlY2tTZWF0bWFwRXh0cmFzRW5hYmxlZChzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWF0TWFwQ29uZmlncyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgIEdEUzogeyBzaG93U2VhdE1hcHM6IGJvb2xlYW4gfTtcbiAgICAgIFNhYnJlTG93Q29zdDogeyBzaG93U2VhdE1hcHM6IGJvb2xlYW47IHNob3dFeHRyYXM6IGJvb2xlYW4gfTtcbiAgICAgIExDQzogeyBzaG93U2VhdE1hcHM6IGJvb2xlYW47IHNob3dFeHRyYXM6IGJvb2xlYW4gfTtcbiAgICAgIE5EQzogeyBzaG93U2VhdE1hcHM6IGJvb2xlYW4gfTtcbiAgICB9PihVc2VyRmF2b3J1cml0ZS5GbGlnaHRSZXN1bHRzQ29uZmlndXJhdGlvbik7XG5cbiAgICBjb25zdCBhbGxvd0FnZW50VG9WaWV3U2VhdE1hcHMgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdDx7XG4gICAgICBHRFM6IHsgc2hvd1NlYXRNYXBzOiBib29sZWFuIH07XG4gICAgICBTYWJyZUxvd0Nvc3Q6IHsgc2hvd1NlYXRNYXBzOiBib29sZWFufTtcbiAgICAgIExDQzogeyBzaG93U2VhdE1hcHM6IGJvb2xlYW4gfTtcbiAgICAgIE5EQzogeyBzaG93U2VhdE1hcHM6IGJvb2xlYW4gfTtcbiAgICB9PihVc2VyRmF2b3J1cml0ZS5BbGxvd0FnZW50VG9WaWV3U2VhdE1hcHMpO1xuXG4gICAgY29uc3QgcGVybWl0dGVkU2VydmljZXNMQ0M6IHN0cmluZ1tdID0gW1NlcnZpY2VQcm92aWRlci5UcmF2ZWxmdXNpb25dO1xuICAgIGNvbnN0IHBlcm1pdHRlZFNlcnZpY2VzR0RTOiBzdHJpbmdbXSA9IFtcbiAgICAgIFNlcnZpY2VQcm92aWRlci5TYWJyZUZsaWdodCxcbiAgICAgIFNlcnZpY2VQcm92aWRlci5UcmF2ZWxwb3J0RmxpZ2h0LFxuICAgICAgU2VydmljZVByb3ZpZGVyLkFtYWRldXNGbGlnaHRcbiAgICBdO1xuXG4gICAgY29uc3QgcGVybWl0dGVkU2VydmljZXNOREM6IHN0cmluZ1tdID0gW1NlcnZpY2VQcm92aWRlci5TYWJyZU5EQywgU2VydmljZVByb3ZpZGVyLkFtYWRldXNORENdO1xuICAgIGNvbnN0IHsgc291cmNlIH0gPSBzZWxlY3RlZEZsaWdodDtcblxuICAgIGNvbnN0IGlzUnlhbmFpciA9IFsuLi5zZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMsIC4uLnNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzXS5zb21lKGZsaWdodCA9PiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUgPT09XCJSeWFuYWlyXCIgfHwgZmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXJOYW1lID09PVwiUnlhbmFpclwiKVxuICAgIGlmIChzb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5TYWJyZUZsaWdodCAmJiBpc1J5YW5haXIpIHtcbiAgICAgIHJldHVybiBzZWF0TWFwQ29uZmlncz8uU2FicmVMb3dDb3N0Py5zaG93U2VhdE1hcHMgfHxcbiAgICAgIHNlYXRNYXBDb25maWdzPy5TYWJyZUxvd0Nvc3Q/LnNob3dFeHRyYXMgfHxcbiAgICAgICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCkgJiYgYWxsb3dBZ2VudFRvVmlld1NlYXRNYXBzPy5TYWJyZUxvd0Nvc3Q/LnNob3dTZWF0TWFwcyk7XG4gICAgfVxuXG4gICAgaWYgKHBlcm1pdHRlZFNlcnZpY2VzTENDLmluY2x1ZGVzKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNlYXRNYXBDb25maWdzPy5MQ0M/LnNob3dTZWF0TWFwcyB8fFxuICAgICAgICBzZWF0TWFwQ29uZmlncz8uTENDPy5zaG93RXh0cmFzIHx8XG4gICAgICAgICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCkgJiYgYWxsb3dBZ2VudFRvVmlld1NlYXRNYXBzPy5MQ0M/LnNob3dTZWF0TWFwcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBlcm1pdHRlZFNlcnZpY2VzR0RTLmluY2x1ZGVzKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNlYXRNYXBDb25maWdzPy5HRFM/LnNob3dTZWF0TWFwcyB8fFxuICAgICAgICAodGhpcy51c2VyU2VydmljZS51c2VySXNBZ2VudCgpICYmIGFsbG93QWdlbnRUb1ZpZXdTZWF0TWFwcz8uR0RTPy5zaG93U2VhdE1hcHMpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwZXJtaXR0ZWRTZXJ2aWNlc05EQy5pbmNsdWRlcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzZWF0TWFwQ29uZmlncz8uTkRDPy5zaG93U2VhdE1hcHMgfHxcbiAgICAgICAgKHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKSAmJiBhbGxvd0FnZW50VG9WaWV3U2VhdE1hcHM/Lk5EQz8uc2hvd1NlYXRNYXBzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICBmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10sXG4gICAgZGV0YWlsRXh0cmFzOiBEZXRhaWxFeHRyYXMsXG4gICAgaXNURlg6Ym9vbGVhbiA9IGZhbHNlXG4gICk6IEZsaWdodEpvdXJuZXlbXSB7XG4gICAgcmV0dXJuIGZsaWdodHMubWFwKGZsaWdodCA9PiB7XG4gICAgICBjb25zdCBpZDogc3RyaW5nID0gZmxpZ2h0LmlkO1xuICAgICAgY29uc3Qgc2VhdDogRmxpZ2h0U2VhdE1hcFNlYXRzID0gZGV0YWlsRXh0cmFzLnNlYXRzW2lkXTtcbiAgICAgIGNvbnN0IGxveWFsdHk6IHN0cmluZ1tdID0gZGV0YWlsRXh0cmFzLmxveWFsdHlbaWRdO1xuXG4gICAgICBpZiAoc2VhdCkge1xuICAgICAgICBkZWxldGUgc2VhdC5fX3R5cGVuYW1lO1xuICAgICAgICBmbGlnaHQuYWRkaXRpb25hbC5zZWF0ID0gc2VhdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGxveWFsdHkpIHtcbiAgICAgICAgZmxpZ2h0LmFkZGl0aW9uYWwubG95YWx0eSA9IGxveWFsdHk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxEZXRhaWxzID0gZGV0YWlsRXh0cmFzLmFkZGl0aW9uYWxEZXRhaWxzW2lkXTtcbiAgICAgIC8vIGhlcmUgaXQncyBvbmx5IFRGWFxuICAgICAgaWYgKGFkZGl0aW9uYWxEZXRhaWxzICYmIGlzVEZYKSB7XG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxEZXRhaWxzS2V5czogQWRkaXRpb25hbERldGFpbHNbXSA9IE9iamVjdC5rZXlzKFxuICAgICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzXG4gICAgICAgICkgYXMgQWRkaXRpb25hbERldGFpbHNbXTtcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxEZXRhaWxzS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICBhZGRpdGlvbmFsRGV0YWlsc0tleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleT09PSdiYWdnYWdlQWxsb3dhbmNlJykge1xuICAgICAgICAgICAgICBmbGlnaHQuYWRkaXRpb25hbFtrZXldID0gKGFkZGl0aW9uYWxEZXRhaWxzW2tleV0gfHwgW10pLmNvbmNhdChmbGlnaHQuYWRkaXRpb25hbFtrZXldIHx8IFtdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZsaWdodC5hZGRpdGlvbmFsW2tleV0gPSBhZGRpdGlvbmFsRGV0YWlsc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmxpZ2h0O1xuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgX3VwZGF0ZVRyYXZlbFBvbGljaWVzKCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgfHxcbiAgICAgICh0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5kdWFsU2luZ2xlV2hlblNlbGVjdGVkICYmXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmpvdXJuZXlIYXNoXSkgfHxcbiAgICAgICF0aGlzLm11bHRpIHx8XG4gICAgICB0aGlzLm11bHRpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtdWx0aUluYm91bmRzID0gKHRoaXMubXVsdGkgfHwgW10pLnJlZHVjZSgoYWNjOiBGbGlnaHRJdGluZXJhcnlbXSwgaXRlbTogRmxpZ2h0TXVsdGkpID0+IHtcbiAgICAgIGlmIChpdGVtLm9yZGVyID09PSAxICYmIGl0ZW0ucmVzdWx0cyAmJiBpdGVtLnJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICBhY2MgPSBhY2MuY29uY2F0KGl0ZW0ucmVzdWx0cyBhcyBGbGlnaHRJdGluZXJhcnlbXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgICBpZiAobXVsdGlJbmJvdW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoIXRoaXMucmF3UmVzdWx0cykge1xuICAgICAgICB0aGlzLnJhd1Jlc3VsdHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25JdGVtKHRoaXMucmVzdWx0c1Nlc3Npb25OYW1lICsgJ19yYXcnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mZXRjaGluZ1J1bGVzID0gdHJ1ZTtcblxuICAgICAgY29uc29sZS5sb2codGhpcy5yYXdSZXN1bHRzKTtcbiAgICAgIHRoaXMuYXBwbHlGbGlnaHRSdWxlc1xuICAgICAgICAuZmV0Y2hPbmUoe1xuICAgICAgICAgIHNlbGVjdGVkT3V0Ym91bmRGbGlnaHQ6IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCxcbiAgICAgICAgICBhdmFpbGFibGVJbmJvdW5kRmxpZ2h0czogbXVsdGlJbmJvdW5kcyxcbiAgICAgICAgICBzZWFyY2hJZDogdGhpcy5yYXdSZXN1bHRzLnNlYXJjaElkXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJ1bGVzOiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gdGhpcy5oZWxwZXJzLm1lcmdlT2JqZWN0cyh0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSwgcnVsZXMpO1xuICAgICAgICAgICAgICB0aGlzLl9hcHBseUZpbHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge30sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaGluZ1J1bGVzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYm9va1NpbmdsZUZsaWdodChcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpbmdvcmVJbnZva2VkOiBib29sZWFuID0gZmFsc2UsXG4gICAgZHVhbEluYm91bmQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgICBjb25zdCBzY2hlbWFEZXRhaWxzID0gdGhpcy5jcmVhdGVTY2hlbWFEZXRhaWxzKHNlbGVjdGVkRmxpZ2h0LCBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGUpO1xuICAgIGF3YWl0IHRoaXMuZG9Cb29raW5nKFxuICAgICAgaW50QmFza2V0LFxuICAgICAgc2VsZWN0ZWRGbGlnaHQsXG4gICAgICBzY2hlbWFEZXRhaWxzLFxuICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nLFxuICAgICAgJycsXG4gICAgICBpbmdvcmVJbnZva2VkLFxuICAgICAgZHVhbEluYm91bmRcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlU2NoZW1hRGV0YWlscyhmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLCBqb3VybmV5VHlwZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoam91cm5leVR5cGUgPT09IEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBmbGlnaHQub3V0Ym91bmRGbGlnaHRzLm1hcChcbiAgICAgICAgICAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnb3V0Ym91bmQnLCAwLCBzZWdtZW50SW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxuICAgICAgICBqb3VybmV5VHlwZTogRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlLFxuICAgICAgICB0YXhlczogZmxpZ2h0LnRheGVzLm1hcCgodGF4OiBGbGlnaHRBbW91bnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRheC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGN1cnJlbmN5OiB0YXguY3VycmVuY3ksXG4gICAgICAgICAgICBhbW91bnQ6IHRheC5hbW91bnRcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICAgZmFyZUNvbmRpdGlvbnM6IGZsaWdodC5mYXJlQ29uZGl0aW9uc1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXG4gICAgICAgICAgLi4uZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cy5tYXAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgJ291dGJvdW5kJywgMCwgc2VnbWVudEluZGV4KTtcbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICBpbmJvdW5kRmxpZ2h0czogW1xuICAgICAgICAgIC4uLmZsaWdodC5pbmJvdW5kRmxpZ2h0cy5tYXAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VTY2hlbWFGbGlnaHRzKGZsaWdodCwgJ2luYm91bmQnLCAwLCBzZWdtZW50SW5kZXgpO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIGpvdXJuZXlUeXBlOiBGbGlnaHRKb3VybmV5VHlwZS5Sb3VuZHRyaXAsXG4gICAgICAgIHRheGVzOiAoZmxpZ2h0LnRheGVzID8gZmxpZ2h0LnRheGVzIDogW10pLm1hcCgodGF4OiBGbGlnaHRBbW91bnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRheC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGN1cnJlbmN5OiB0YXguY3VycmVuY3ksXG4gICAgICAgICAgICBhbW91bnQ6IHRheC5hbW91bnRcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICAgZmFyZUNvbmRpdGlvbnM6IGZsaWdodC5mYXJlQ29uZGl0aW9uc1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGVCb29raW5nQmFza2V0T2JqZWN0KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBqb3VybmV5VHlwZTogc3RyaW5nXG4gICk6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzIHtcbiAgICBjb25zdCBzY2hlbWFEZXRhaWxzID0gdGhpcy5jcmVhdGVTY2hlbWFEZXRhaWxzKGZsaWdodCwgam91cm5leVR5cGUpO1xuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcbiAgICAgIGJhc2tldDogaWQsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcbiAgICAgIGNvMlBlckl0ZW06IGZsaWdodC5jbzJQZXJJdGVtLFxuICAgICAgY28yUGVyUGFzc2VuZ2VyOiBmbGlnaHQuY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgY3VycmVuY3k6IGZsaWdodC50b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXG4gICAgICBwcmljZTogK2ZsaWdodC50b3RhbC5wcmljZS50b0ZpeGVkKDIpLFxuICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXG4gICAgICBzZXJ2aWNlOiBmbGlnaHQuc291cmNlSWQudG9TdHJpbmcoKSxcbiAgICAgIG91dGJvdW5kRGF0ZTogZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1VUQ1xuICAgIH07XG4gICAgbGV0IGluYm91bmREYXRlID0gZmxpZ2h0Py5pbmJvdW5kRmxpZ2h0cz8uWzBdPy5kYXRlVGltZURlcGFydGluZ1VUQztcbiAgICBpZiAoaW5ib3VuZERhdGUpIHtcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2tpbmc7XG4gIH1cblxuICBjcmVhdGVMb3dlc3RCb29raW5nKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZHVhbEluYm91bmQ6IGJvb2xlYW4sXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICk6IGFueSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2hlYXBlc3RQcmljZU9iamVjdD8ucmV0dXJucyB8fFxuICAgICAgKHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdD8uZHVhbEluYm91bmQ/LmFtb3VudCArXG4gICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdD8uZHVhbE91dGJvdW5kPy5hbW91bnQgPFxuICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3Q/LnJldHVybnM/LmFtb3VudCAmJlxuICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3Q/LmR1YWxJbmJvdW5kPy5jdXJyZW5jeUNvZGUgPT1cbiAgICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3Q/LmR1YWxPdXRib3VuZD8uY3VycmVuY3lDb2RlKVxuICAgICkge1xuICAgICAgaWYgKHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggJiYgIXNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzLmxlbmd0aCkge1xuICAgICAgICBpZiAoIWR1YWxJbmJvdW5kKSB7XG4gICAgICAgICAgLy8gZHVhbCBvdXRcbiAgICAgICAgICBjb25zdCBjaGVhcEZsaWdodER1YWxPdXRib3VuZCA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuZmxpZ2h0O1xuICAgICAgICAgIGNvbnN0IGR1YWxPdXRib3VuZEJvb2tpbmcgPSB0aGlzLmNyZWF0ZUJvb2tpbmdCYXNrZXRPYmplY3QoXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGNoZWFwRmxpZ2h0RHVhbE91dGJvdW5kLFxuICAgICAgICAgICAgRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGZ1bGxQcmljZSA9IGR1YWxPdXRib3VuZEJvb2tpbmcucHJpY2U7XG4gICAgICAgICAgcmV0dXJuIHsgbG93ZXN0UHJpY2VCb29raW5nOiBkdWFsT3V0Ym91bmRCb29raW5nLCBsb3dlc3RGdWxsVG90YWw6IGZ1bGxQcmljZSB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGR1YWwgaW5cbiAgICAgICAgICBjb25zdCBjaGVhcEZsaWdodER1YWxJbmJvdW5kID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmZsaWdodDtcbiAgICAgICAgICBjb25zdCBkdWFsSW5ib3VuZEJvb2tpbmcgPSB0aGlzLmNyZWF0ZUJvb2tpbmdCYXNrZXRPYmplY3QoXG4gICAgICAgICAgICBpZCxcbiAgICAgICAgICAgIGNoZWFwRmxpZ2h0RHVhbEluYm91bmQsXG4gICAgICAgICAgICBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZnVsbFByaWNlID0gZHVhbEluYm91bmRCb29raW5nLnByaWNlO1xuICAgICAgICAgIHJldHVybiB7IGxvd2VzdFByaWNlQm9va2luZzogZHVhbEluYm91bmRCb29raW5nLCBsb3dlc3RGdWxsVG90YWw6IGZ1bGxQcmljZSB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZXR1cm4gZmxpZ2h0XG4gICAgICAgIGxldCBjaGVhcEZsaWdodER1YWxPdXRib3VuZCA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuZmxpZ2h0O1xuICAgICAgICBjaGVhcEZsaWdodER1YWxPdXRib3VuZC5pbmJvdW5kRmxpZ2h0cyA9XG4gICAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmZsaWdodC5vdXRib3VuZEZsaWdodHM7XG4gICAgICAgIGxldCBkdWFsT3V0Ym91bmRCb29raW5nID0gdGhpcy5jcmVhdGVCb29raW5nQmFza2V0T2JqZWN0KFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGNoZWFwRmxpZ2h0RHVhbE91dGJvdW5kLFxuICAgICAgICAgIEZsaWdodEpvdXJuZXlUeXBlLlJvdW5kdHJpcFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGNoZWFwRmxpZ2h0RHVhbEluYm91bmQgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuZmxpZ2h0O1xuICAgICAgICBjb25zdCBkdWFsSW5ib3VuZEJvb2tpbmcgPSB0aGlzLmNyZWF0ZUJvb2tpbmdCYXNrZXRPYmplY3QoXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY2hlYXBGbGlnaHREdWFsSW5ib3VuZCxcbiAgICAgICAgICBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGVcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBmdWxsUHJpY2UgPSBkdWFsT3V0Ym91bmRCb29raW5nLnByaWNlICsgZHVhbEluYm91bmRCb29raW5nLnByaWNlO1xuICAgICAgICBkdWFsT3V0Ym91bmRCb29raW5nLnByaWNlID0gK2Z1bGxQcmljZS50b0ZpeGVkKDIpO1xuICAgICAgICByZXR1cm4geyBsb3dlc3RQcmljZUJvb2tpbmc6IGR1YWxPdXRib3VuZEJvb2tpbmcsIGxvd2VzdEZ1bGxUb3RhbDogZnVsbFByaWNlIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNoZWFwRmxpZ2h0ID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LnJldHVybnMuZmxpZ2h0O1xuICAgICAgY29uc3Qgam91cm5leVR5cGUgPSB0aGlzLmlzUmV0dXJuID8gRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwIDogRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlO1xuICAgICAgY29uc3QgbG93ZXN0RnVsbEZsaWdodCA9IGNoZWFwRmxpZ2h0ID8gdGhpcy5jcmVhdGVCb29raW5nQmFza2V0T2JqZWN0KGlkLCBjaGVhcEZsaWdodCwgam91cm5leVR5cGUpOm51bGw7XG4gICAgICByZXR1cm4geyBsb3dlc3RQcmljZUJvb2tpbmc6IGxvd2VzdEZ1bGxGbGlnaHQsIGxvd2VzdEZ1bGxUb3RhbDogbG93ZXN0RnVsbEZsaWdodC5wcmljZSB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvQm9va2luZyhcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBzY2hlbWFEZXRhaWxzOiBhbnksXG4gICAgb3V0Ym91bmREYXRlOiBzdHJpbmcsXG4gICAgaW5ib3VuZERhdGU/OiBzdHJpbmcsXG4gICAgaW5nb3JlSW52b2tlZCA9IGZhbHNlLFxuICAgIGR1YWxJbmJvdW5kID0gZmFsc2VcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgY29uc3QgeyBzb3VyY2VJZCwgY28yUGVySXRlbSwgY28yUGVyUGFzc2VuZ2VyLCB0b3RhbCwgcmVxdWlyZXNSZWFzb25LZXlzIH0gPSBzZWxlY3RlZEZsaWdodDtcbiAgICBjb25zdCB7IGxvd2VzdFByaWNlQm9va2luZywgbG93ZXN0RnVsbFRvdGFsIH0gPSB0aGlzLmNyZWF0ZUxvd2VzdEJvb2tpbmcoXG4gICAgICBpbnRCYXNrZXQuaWQsXG4gICAgICBkdWFsSW5ib3VuZCxcbiAgICAgIHNlbGVjdGVkRmxpZ2h0XG4gICAgKTtcbiAgICBzY2hlbWFEZXRhaWxzLmhtdXAgPSB0b3RhbC5obXVwO1xuICAgIHRoaXMucmVzdWx0UXVlcnkuYXNTaW5nbGVzID0gZHVhbEluYm91bmQ7XG4gICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XG4gICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxuICAgICAgYmFza2V0OiBpbnRCYXNrZXQuaWQsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcbiAgICAgIGNvMlBlckl0ZW0sXG4gICAgICBjbzJQZXJQYXNzZW5nZXIsXG4gICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxuICAgICAgcHJpY2U6ICt0b3RhbC5wcmljZS50b0ZpeGVkKDIpLFxuICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXG4gICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxuICAgICAgb3V0Ym91bmREYXRlLFxuICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTpcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuYW1vdW50IHx8XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSAhPT0gdG90YWwuY3VycmVuY3lcbiAgICAgICAgICA/IDxDdXJyZW5jeUNvZGU+dGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgbG93ZXN0UHJpY2U6IGxvd2VzdEZ1bGxUb3RhbCxcbiAgICAgIGxvd2VzdFByaWNlRGV0YWlsOiBsb3dlc3RQcmljZUJvb2tpbmcsXG4gICAgICByZWFzb25LZXlzOiByZXF1aXJlc1JlYXNvbktleXNcbiAgICB9O1xuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xuICAgICAgYm9va2luZy5pbmJvdW5kRGF0ZSA9IGluYm91bmREYXRlO1xuICAgIH1cbiAgICAvLyBib29raW5nLmRldGFpbC5tYXJrdXAgPSBbe2Ftb3VudDogMCwgY29zdDowfV07XG4gICAgY29uc3Qgd2hhdEhhcHBlbmVkID0gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxuICAgICAgYm9va2luZyxcbiAgICAgIGludEJhc2tldCxcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcbiAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgIGZhbHNlLFxuICAgICAgaW5nb3JlSW52b2tlZFxuICAgICk7XG4gICAgaWYgKHdoYXRIYXBwZW5lZCA9PT0gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaCkge1xuICAgICAgdGhpcy5yZXNlYXJjaFdpdGhOZXdVc2VyKCk7XG4gICAgfVxuICAgIHJldHVybiB3aGF0SGFwcGVuZWQ7XG4gIH1cblxuICBhc3luYyBnZXRGbGlnaHREZXRhaWxFeHRyYXMoXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zIHwgRmxpZ2h0SXRpbmVyYXJ5LFxuICAgIGRpcmVjdGlvbjogRmxpZ2h0RGlyZWN0aW9uRW51bSxcbiAgICBnbXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB1c2Vycz86VHJhdmVsbGVyW11cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBvbmx5IFRGWCBmb3Igbm93LCByZW1vdmUgaWYgc3RhdGVtZW50IHdoZW4gd2UgZG8gdGhlIHJlc3RcbiAgICBjb25zdCBzZWF0cyA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICBNb2RhbFR5cGVzLkZsaWdodEV4dHJhc0RpYWxvZ0NvbXBvbmVudCxcbiAgICAgIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAnbW9kYWwtZmxpZ2h0LWV4dHJhcycsIGJhY2tkcm9wOiAnc3RhdGljJyB9LFxuICAgICAgeyBmbGlnaHQ6IHNlbGVjdGVkRmxpZ2h0LCBkaXJlY3Rpb24sIGdtdCwgdXNlcnMgfVxuICAgICk7XG4gICAgaWYgKHNlYXRzKSB7XG4gICAgICByZXR1cm4gc2VhdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdyZXRoaW5nIGxpZmUgY2hvaWNlcycpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFic29sdXRlQ2hlYXBlc3RQcmljZSgpOiBJQ2hlYXBlc3RQcmljZSB8IElDaGVhcGVzdFByaWNlRGV0YWlscyB7XG4gICAgaWYgKHRoaXMuY2hlYXBlc3RQcmljZSkgcmV0dXJuIHRoaXMuY2hlYXBlc3RQcmljZTtcbiAgICBsZXQgcHJpY2U6IElDaGVhcGVzdFByaWNlRGV0YWlscyA9IHsgYW1vdW50OiBudWxsLCBjdXJyZW5jeUNvZGU6IG51bGwsIGZsaWdodDogbnVsbCB9O1xuICAgIGlmIChcbiAgICAgICF0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QucmV0dXJucyB8fFxuICAgICAgKHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5hbW91bnQgKyB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbE91dGJvdW5kLmFtb3VudCA8XG4gICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5yZXR1cm5zPy5hbW91bnQgJiZcbiAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmN1cnJlbmN5Q29kZSA9PVxuICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuY3VycmVuY3lDb2RlKVxuICAgICkge1xuICAgICAgcHJpY2UuYW1vdW50ID1cbiAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmFtb3VudCArIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuYW1vdW50O1xuICAgICAgcHJpY2UuY3VycmVuY3lDb2RlID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmN1cnJlbmN5Q29kZTtcbiAgICB9IGVsc2UgcHJpY2UgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QucmV0dXJucztcbiAgICByZXR1cm4gcHJpY2U7XG4gIH1cblxuICBwcml2YXRlIG1ha2VTY2hlbWFGbGlnaHRzKFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRKb3VybmV5LFxuICAgIGZsaWdodEdyb3VwOiAnb3V0Ym91bmQnIHwgJ2luYm91bmQnLFxuICAgIGdyb3VwSW5kZXg6IG51bWJlcixcbiAgICBzZWdtZW50SW5kZXg6IG51bWJlclxuICApOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zZWxlY3RlZEZsaWdodCxcbiAgICAgIGpvdXJuZXlJbmZvOiB7XG4gICAgICAgIGZsaWdodEdyb3VwLFxuICAgICAgICBncm91cEluZGV4LFxuICAgICAgICBzZWdtZW50SW5kZXhcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRCYWdzQWxsb3dhbmNlVG9GbGlnaHRzU2NoZW1hKFxuICAgIHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRKb3VybmV5LFxuICAgIGZsaWdodFF1b3RlOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpc0luID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICBzZWxlY3RlZEZsaWdodC5hZGRpdGlvbmFsWydiYWdnYWdlQWxsb3dhbmNlQW1vdW50J10gPSAwO1xuICAgIGxldCBob2xkQmFnQW1vdW50ID0gWzBdO1xuICAgIGlmICghaXNJbikge1xuICAgICAgaG9sZEJhZ0Ftb3VudCA9IGZsaWdodFF1b3RlLm91dGJvdW5kRmxpZ2h0cy5yZWR1Y2UoKGFjYyxmbGlnaHQpPT57XG4gICAgICAgIGNvbnN0IGJhZ3MgPWZsaWdodC5hZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZmlsdGVyKChiYWc6IEJhZ2dhZ2VBbGxvd2FuY2UpPT5iYWcudHlwZSA9PT0gJ0NoZWNrSW4nICk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJhZ3MubWFwKChiYWc6QmFnZ2FnZUFsbG93YW5jZSk9PmJhZy5xdHkpO1xuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgIGFjYy5wdXNoKE1hdGgubWluKC4uLnJlc3VsdCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sW10pXG4gICAgfSBlbHNlIHtcbiAgICAgIGhvbGRCYWdBbW91bnQgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5yZWR1Y2UoKGFjYyxmbGlnaHQpPT57XG4gICAgICAgIGNvbnN0IGJhZ3MgPWZsaWdodC5hZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UuZmlsdGVyKChiYWc6IEJhZ2dhZ2VBbGxvd2FuY2UpPT5iYWcudHlwZSA9PT0gJ0NoZWNrSW4nICk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGJhZ3MubWFwKChiYWc6QmFnZ2FnZUFsbG93YW5jZSk9PmJhZy5xdHkpO1xuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCkge1xuICAgICAgICAgIGFjYy5wdXNoKE1hdGgubWluKC4uLnJlc3VsdCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sW10pXG4gICAgfVxuXG4gICAgc2VsZWN0ZWRGbGlnaHQuYWRkaXRpb25hbFsnYmFnZ2FnZUFsbG93YW5jZUFtb3VudCddID0gaG9sZEJhZ0Ftb3VudC5sZW5ndGhcbiAgICAgICAgPyBNYXRoLm1pbiguLi5ob2xkQmFnQW1vdW50KVxuICAgICAgICA6IDA7XG5cbiAgICBzZWxlY3RlZEZsaWdodC5hZGRpdGlvbmFsWydpc0hhbmRCYWdnYWdlJ10gPSAhIWZsaWdodFF1b3RlPy5iYWdnYWdlQWxsb3dhbmNlPy5maWx0ZXIoXG4gICAgICAoYmFnOiBCYWdnYWdlQWxsb3dhbmNlKSA9PiBiYWcudHlwZSA9PT0gQmFnZ2FnZVR5cGUuSGFuZENhcnJ5XG4gICAgKTtcblxuICAgIHJldHVybiBzZWxlY3RlZEZsaWdodDtcbiAgfVxuXG4gIGFzeW5jIGFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoXG4gICAgZmxpZ2h0UXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXG4gICAgaWdub3JlSW52b2tlOiBib29sZWFuID0gZmFsc2UsXG4gICAgZHVhbEluYm91bmQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBnbXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICBsZXQgcmVxdWlyZXNPdmVycmlkZVJlYXNvbiA9IGZhbHNlO1xuXG4gICAgaWYgKChmbGlnaHRRdW90ZSBhcyBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykudW5hdmFpbGFibGUgJiYgIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgLy8gY2hlY2sgaGVyZSBpZiB3ZSBhcmUgYW4gYWdlbnQgdXNlciBpbnZva2luZ1xuICAgICAgY29uc29sZS53YXJuKCcrKysgRmxpZ2h0IGlzIG91dCBvZiBwb2xpY3kgLSBiYWNraW5nIG91dCArKysnKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAoZmxpZ2h0UXVvdGUgYXMgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpLnVuYXZhaWxhYmxlICYmXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLmJvYm9cbiAgICApIHtcbiAgICAgIHJlcXVpcmVzT3ZlcnJpZGVSZWFzb24gPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBiYXNrZXQgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWU7XG4gICAgaWYgKGJhc2tldCkge1xuICAgICAgdGhpcy5iYXNrZXRTZXJ2aWNlLnRvZ2dsZU1lbnUoKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFkZEpvdXJuZXlUb0Jhc2tldChcbiAgICAgICAgZmxpZ2h0UXVvdGUsXG4gICAgICAgIGlnbm9yZUludm9rZSxcbiAgICAgICAgaW50QmFza2V0LFxuICAgICAgICBkdWFsSW5ib3VuZCxcbiAgICAgICAgcmVxdWlyZXNPdmVycmlkZVJlYXNvbixcbiAgICAgICAgZ210XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsKTsgLy8gVE9ETyBzaG91bGQgdGhpcyB0aHJvdyBhbiBlcnJvcj9cbiAgfVxuXG4gIGFzeW5jIGFkZEpvdXJuZXlUb0Jhc2tldChcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgaWdub3JlSW52b2tlOiBib29sZWFuID0gZmFsc2UsXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBkdWFsSW5ib3VuZDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHJlcXVpcmVzT3ZlcnJpZGVSZWFzb24/OiBib29sZWFuLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IHsgc291cmNlSWQsIGNvMlBlckl0ZW0sIGNvMlBlclBhc3NlbmdlciwgdG90YWwgfSA9IGZsaWdodFF1b3RlO1xuXG4gICAgbGV0IGxvd2VzdFByaWNlQm9va2luZyA9IG51bGw7XG4gICAgbGV0IGxvd2VzdEZ1bGxUb3RhbCA9IG51bGw7XG5cbiAgICBjb25zdCBvdXRib3VuZERhdGU6IGFueSA9IG1vbWVudChmbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpO1xuICAgIGNvbnN0IGluYm91bmREYXRlOiBhbnkgPSBmbGlnaHRRdW90ZS5pbmJvdW5kRmxpZ2h0cy5sZW5ndGhcbiAgICAgID8gbW9tZW50KGZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKCFnbXQpIHtcbiAgICAgIGNvbnN0IHsgbG93ZXN0UHJpY2VCb29raW5nOiBscCwgbG93ZXN0RnVsbFRvdGFsOiBsZnQgfSA9IHRoaXMuY3JlYXRlTG93ZXN0Qm9va2luZyhcbiAgICAgICAgaW50QmFza2V0LmlkLFxuICAgICAgICBkdWFsSW5ib3VuZCxcbiAgICAgICAgZmxpZ2h0UXVvdGVcbiAgICAgICk7XG4gICAgICBsb3dlc3RQcmljZUJvb2tpbmcgPSBscDtcbiAgICAgIGxvd2VzdEZ1bGxUb3RhbCA9IGxmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN1bHRRdWVyeSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICBmYXJlVHlwZTogRmFyZVR5cGUuRmxleGlibGUsXG4gICAgICAgICAgcGFzc2VuZ2VyczogPEZsaWdodFBhc3Nlbmdlck9iamVjdFtdPlt7IHR5cGU6IEZsaWdodFBhc3NlbmdlclR5cGUuQWR1bHQgfV0sXG4gICAgICAgICAgb3JpZ2luQWlycG9ydDogZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXG4gICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0OlxuICAgICAgICAgICAgZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzW2ZsaWdodFF1b3RlLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQsXG4gICAgICAgICAgcmV0dXJuVHJpcDogaW5ib3VuZERhdGUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgb3V0Ym91bmREYXRlOiB0aGlzLmhlbHBlcnMuZm9ybWF0SXNvRGF0ZShvdXRib3VuZERhdGUpLFxuICAgICAgICAgIG91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KG91dGJvdW5kRGF0ZSwgLTIsIDIpXG4gICAgICAgIH0sXG4gICAgICAgIGluYm91bmREYXRlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKGluYm91bmREYXRlKSxcbiAgICAgICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdzogdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGluYm91bmREYXRlLCAtMiwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9XG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBoYXNTcGFuaXNoRGlzY291bnQgPSBmbGlnaHRRdW90ZS50b3RhbC5kaXNjb3VudDtcbiAgICBjb25zdCB0ZXJtc0FuZENvbmRpdGlvbnMgPSB0aGlzLmdldFRlcm1zQW5kQ29uZCgpO1xuICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB7XG4gICAgICBhZGRpdGlvbmFsOiB7IFxuICAgICAgICB0b3RhbFRheDogZmxpZ2h0UXVvdGUudG90YWw/LnRheCB8fCBudWxsLFxuICAgICAgfSxcbiAgICAgIG91dGJvdW5kRmxpZ2h0czogW1xuICAgICAgICAuLi5mbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHMubWFwKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIF9zZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmICghaGFzU3BhbmlzaERpc2NvdW50KSB7XG4gICAgICAgICAgICBkZWxldGUgZmxpZ2h0LmFkZGl0aW9uYWwuc3BhbmlzaFJlc2lkZW5jeUFpcnBvcnQ7XG4gICAgICAgICAgICBkZWxldGUgZmxpZ2h0LmFkZGl0aW9uYWwuc3BhbmlzaFJlc2lkZW5jeUdyb3VwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5hZGRCYWdzQWxsb3dhbmNlVG9GbGlnaHRzU2NoZW1hKGZsaWdodCwgZmxpZ2h0UXVvdGUpO1xuICAgICAgICB9KVxuICAgICAgXSxcbiAgICAgIGluYm91bmRGbGlnaHRzOiBbXG4gICAgICAgIC4uLmZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLm1hcCgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBfc2VnbWVudEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBpZiAoIWhhc1NwYW5pc2hEaXNjb3VudCkge1xuICAgICAgICAgICAgZGVsZXRlIGZsaWdodC5hZGRpdGlvbmFsLnNwYW5pc2hSZXNpZGVuY3lBaXJwb3J0O1xuICAgICAgICAgICAgZGVsZXRlIGZsaWdodC5hZGRpdGlvbmFsLnNwYW5pc2hSZXNpZGVuY3lHcm91cDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWRkQmFnc0FsbG93YW5jZVRvRmxpZ2h0c1NjaGVtYShmbGlnaHQsIGZsaWdodFF1b3RlLHRydWUpO1xuICAgICAgICB9KVxuICAgICAgXSxcbiAgICAgIHRlcm1zQW5kQ29uZDogdGVybXNBbmRDb25kaXRpb25zLFxuICAgICAgam91cm5leVR5cGU6IEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZSxcbiAgICAgIHRheGVzOiBmbGlnaHRRdW90ZS50YXhlcy5tYXAoKHRheDogRmxpZ2h0QW1vdW50KSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IHRheC5kZXNjcmlwdGlvbixcbiAgICAgICAgICBjdXJyZW5jeTogdGF4LmN1cnJlbmN5LFxuICAgICAgICAgIGFtb3VudDogdGF4LmFtb3VudFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgICBmYXJlQ29uZGl0aW9uczogZmxpZ2h0UXVvdGUuZmFyZUNvbmRpdGlvbnMsXG5cbiAgICAgIC8vIFNhYnJlIE5EQyBmaWVsZHMgb25seVxuICAgICAgb2ZmZXJJZDogZmxpZ2h0UXVvdGUub2ZmZXJJZCxcbiAgICAgIG9mZmVySXRlbUlkOiBmbGlnaHRRdW90ZS5vZmZlckl0ZW1JZCxcbiAgICAgIG9mZmVyVFRMOiBmbGlnaHRRdW90ZS5vZmZlclRUTCxcbiAgICAgIG9mZmVyVGltZVN0YW1wOiBmbGlnaHRRdW90ZS5vZmZlclRpbWVTdGFtcCxcbiAgICAgIGhtdXA6IGZsaWdodFF1b3RlLnRvdGFsLmhtdXBcbiAgICB9O1xuICAgIGNvbnN0IGJvb2tpbmc6IEFkZEl0ZW1Ub0Jhc2tldE11dGF0aW9uVmFyaWFibGVzID0ge1xuICAgICAgYWR1bHRzOiB0aGlzLmFkdWx0cyxcbiAgICAgIGJhc2tldDogaW50QmFza2V0LmlkLFxuICAgICAgY2hpbGRyZW46IHRoaXMuY2hpbGRyZW4sXG4gICAgICBjbzJQZXJJdGVtLFxuICAgICAgY28yUGVyUGFzc2VuZ2VyLFxuICAgICAgY3VycmVuY3k6IHRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcbiAgICAgIHByaWNlOiArdG90YWwucHJpY2UudG9GaXhlZCgyKSxcbiAgICAgIHNlYXJjaFF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5LFxuICAgICAgc2VydmljZTogc291cmNlSWQudG9TdHJpbmcoKSxcbiAgICAgIG91dGJvdW5kRGF0ZTogb3V0Ym91bmREYXRlLmZvcm1hdCgpLFxuICAgICAgbG93ZXN0UHJpY2VDdXJyZW5jeTpcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuYW1vdW50IHx8XG4gICAgICAgIHRoaXMuYWJzb2x1dGVDaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSAhPT0gdG90YWwuY3VycmVuY3lcbiAgICAgICAgICA/IDxDdXJyZW5jeUNvZGU+dGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgbG93ZXN0UHJpY2U6IGxvd2VzdEZ1bGxUb3RhbCxcbiAgICAgIGxvd2VzdFByaWNlRGV0YWlsOiBsb3dlc3RQcmljZUJvb2tpbmcsXG4gICAgICByZWFzb25LZXlzOiBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICBhZ2VudE92ZXJyb2RlVW5hdmFpbGFibGU6IGZsaWdodFF1b3RlLnVuYXZhaWxhYmxlXG4gICAgfTtcbiAgICBjb25zb2xlLmxvZyhib29raW5nKTtcbiAgICBpZiAoaW5ib3VuZERhdGUpIHtcbiAgICAgIGJvb2tpbmcuaW5ib3VuZERhdGUgPSBpbmJvdW5kRGF0ZS5mb3JtYXQoKTtcbiAgICAgIHNjaGVtYURldGFpbHMuam91cm5leVR5cGUgPSBGbGlnaHRKb3VybmV5VHlwZS5Sb3VuZHRyaXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5hZGRUb0Jhc2tldChcbiAgICAgIGJvb2tpbmcsXG4gICAgICBpbnRCYXNrZXQsXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UsXG4gICAgICB0aGlzLnRyYXZlbGxlcnMsXG4gICAgICBmbGlnaHRRdW90ZS5yZXF1aXJlc1JlYXNvbktleXMsXG4gICAgICBmYWxzZSxcbiAgICAgIGlnbm9yZUludm9rZVxuICAgICk7XG4gIH1cblxuICBzZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZTogRmxpZ2h0RGlzcGxheVR5cGVzKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0ID0gbnVsbDtcbiAgICB0aGlzLmNob29zZW5EaXNwbGF5VHlwZS5uZXh0KGRpc3BsYXlUeXBlKTtcbiAgfVxuXG4gIF9hcHBseUZpbHRlcigpIHtcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgfVxuXG4gIG9wZW5GbGlnaHRGYXJlUnVsZXMoXG4gICAgcnVsZXM6IEZhcmVDb25kaXRpb25zLFxuICAgIGZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcbiAgICBpZDogbnVtYmVyLFxuICAgIG9wdGlvbnM6IGFueSA9IG51bGwsXG4gICAgZmxpZ2h0OiBGbGlnaHRKb3VybmV5ID0gbnVsbCxcbiAgICBmbGlnaHREZXRhaWw6IEZsaWdodEl0aW5lcmFyeSA9IG51bGwsXG4gICAgaW5ib3VuZFJ1bGVzOiBGYXJlQ29uZGl0aW9ucyA9IG51bGwsXG4gICAgaW5ib3VuZEZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSA9IG51bGxcbiAgKTogdm9pZCB7XG4gICAgLy8gZmlyc3QgY2hlY2sgaWYgdGhlcmUgYXJlIHJ1bGVzXG4gICAgY29uc3QgZG9DYWxsID0gIU9iamVjdC52YWx1ZXMocnVsZXMpLmZpbmQoKHJ1bGU6IEZhcmVDb25kaXRpb25FbnRyeVtdKTogbnVtYmVyID0+IHJ1bGUubGVuZ3RoKTtcbiAgICBpZiAoZG9DYWxsKSB7XG4gICAgICBsZXQgZmxpZ2h0c0Nsb25lID0gXy5jbG9uZURlZXAoZmxpZ2h0cyk7XG5cbiAgICAgIGlmIChmbGlnaHRzQ2xvbmUubGVuZ3RoID4gMSkge1xuICAgICAgICBmbGlnaHRzQ2xvbmVbMF0uZGVzdGluYXRpb25BaXJwb3J0ID0gZmxpZ2h0c0Nsb25lW2ZsaWdodHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBydWxlc0Zyb21DYWxsID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZsaWdodEZhcmVSdWxlcyhmbGlnaHRzQ2xvbmVbMF0sIGlkKTtcbiAgICAgIGlmIChpbmJvdW5kRmxpZ2h0cykge1xuICAgICAgICBsZXQgaW5ib3VuZEZsaWdodHNDbG9uZSA9IF8uY2xvbmVEZWVwKGluYm91bmRGbGlnaHRzKTtcblxuICAgICAgICBpZiAoaW5ib3VuZEZsaWdodHNDbG9uZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgaW5ib3VuZEZsaWdodHNDbG9uZVswXS5kZXN0aW5hdGlvbkFpcnBvcnQgPVxuICAgICAgICAgICAgaW5ib3VuZEZsaWdodHNDbG9uZVtmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmJvdW5kRmxpZ2h0c0Nsb25lWzBdLmhhc093blByb3BlcnR5KCdiYWdnYWdlQWxsb3dhbmNlQW1vdW50JykpIHtcbiAgICAgICAgICBkZWxldGUgKGluYm91bmRGbGlnaHRzQ2xvbmVbMF0gYXMgYW55KS5iYWdnYWdlQWxsb3dhbmNlQW1vdW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluYm91bmRSdWxlc0Zyb21DYWxsID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZsaWdodEZhcmVSdWxlcyhcbiAgICAgICAgICBpbmJvdW5kRmxpZ2h0c0Nsb25lWzBdLFxuICAgICAgICAgIGlkXG4gICAgICAgICk7XG4gICAgICAgIHJ1bGVzRnJvbUNhbGwuc3Vic2NyaWJlKFxuICAgICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmFyZVJ1bGVzS2V5ID0gdGhpcy5jaGVja0ZhcmVSdWxlKGRhdGEucmVzdWx0c1swXSk7XG4gICAgICAgICAgICBpbmJvdW5kUnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIGluYm91bmREYXRhID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBvcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgICBydWxlczogZGF0YS5yZXN1bHRzWzBdLFxuICAgICAgICAgICAgICAgICAgZnJvbTogZmxpZ2h0Py5vcmlnaW5BaXJwb3J0IHx8IGZsaWdodHNDbG9uZVswXS5vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgICAgICAgICAgdG86XG4gICAgICAgICAgICAgICAgICAgIGZsaWdodD8uZGVzdGluYXRpb25BaXJwb3J0IHx8XG4gICAgICAgICAgICAgICAgICAgIGZsaWdodHNDbG9uZVtmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgICAgICAgICAgIGZsaWdodDogZmxpZ2h0RGV0YWlsLFxuICAgICAgICAgICAgICAgICAgc291cmNlSWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgaW5ib3VuZFJ1bGVzOiBpbmJvdW5kRGF0YS5yZXN1bHRzWzBdLFxuICAgICAgICAgICAgICAgICAgZmFyZVJ1bGVzS2V5OiBmYXJlUnVsZXNLZXlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXG4gICAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmYXJlUnVsZXNLZXkgPSB0aGlzLmNoZWNrRmFyZVJ1bGUoZGF0YS5yZXN1bHRzWzBdKTtcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgcnVsZXM6IGRhdGEucmVzdWx0c1swXSxcbiAgICAgICAgICAgICAgZnJvbTogZmxpZ2h0Py5vcmlnaW5BaXJwb3J0IHx8IGZsaWdodHNDbG9uZVswXS5vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgICAgICB0bzogZmxpZ2h0Py5kZXN0aW5hdGlvbkFpcnBvcnQgfHwgZmxpZ2h0c0Nsb25lW2ZsaWdodHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICAgICAgICBmbGlnaHQ6IGZsaWdodERldGFpbCxcbiAgICAgICAgICAgICAgc291cmNlSWQ6IGlkLFxuICAgICAgICAgICAgICBmYXJlUnVsZXNLZXk6IGZhcmVSdWxlc0tleVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZhcmVSdWxlc0tleSA9IHRoaXMuY2hlY2tGYXJlUnVsZShydWxlcyk7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxGbGlnaHRGYXJlQ29tcG9uZW50LCBvcHRpb25zLCB7XG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBmcm9tOiBmbGlnaHQ/Lm9yaWdpbkFpcnBvcnQgfHwgZmxpZ2h0c1swXS5vcmlnaW5BaXJwb3J0LFxuICAgICAgICB0bzogZmxpZ2h0Py5kZXN0aW5hdGlvbkFpcnBvcnQgfHwgZmxpZ2h0c1tmbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgZmxpZ2h0OiBmbGlnaHREZXRhaWwsXG4gICAgICAgIHNvdXJjZUlkOiBpZCxcbiAgICAgICAgaW5ib3VuZFJ1bGVzOiBpbmJvdW5kUnVsZXMsXG4gICAgICAgIGZhcmVSdWxlc0tleTogZmFyZVJ1bGVzS2V5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjaGVja0ZhcmVSdWxlKHJ1bGVzOiBGbGlnaHRGYXJlUnVsZXNSZXNwb25zZSB8IEZhcmVDb25kaXRpb25zKTogSUZhcmVSdWxlc0tleSB7XG4gICAgY29uc3QgcnVsZUNvbnRlbnQgPSBPYmplY3QudmFsdWVzKHJ1bGVzIHx8IHt9KVxuICAgICAgLm1hcCgocnVsZTogRmFyZUNvbmRpdGlvbkVudHJ5W10pID0+XG4gICAgICAgIHJ1bGU/Lmxlbmd0aCAmJiBBcnJheS5pc0FycmF5KHJ1bGUpID8gcnVsZS5tYXAociA9PiByLnJlbWFyaykgOiBbXVxuICAgICAgKVxuICAgICAgLmZsYXQoKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNDSEE6IHRoaXMuY2hlY2tGYXJlUnVsZUtleShydWxlQ29udGVudCwgJ0NIQScpLFxuICAgICAgaXNJTkM6IHRoaXMuY2hlY2tGYXJlUnVsZUtleShydWxlQ29udGVudCwgJ0lOQycpLFxuICAgICAgaXNOT0Y6IHRoaXMuY2hlY2tGYXJlUnVsZUtleShydWxlQ29udGVudCwgJ05PRicpXG4gICAgfTtcbiAgfVxuXG4gIGNoZWNrRmFyZVJ1bGVLZXkocnVsZUNvbnRlbnQ6IHN0cmluZ1tdLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXGIke2tleX1cXFxcYmAsICdnaScpO1xuICAgIHJldHVybiAhIXJ1bGVDb250ZW50LmZpbmQocnVsZSA9PiByZWdleC50ZXN0KHJ1bGUpKTtcbiAgfVxuXG4gIC8vIFRPRE8gd2FpdGluZyBmb3IgZGF0YVxuICBnZXRUZXJtc0FuZENvbmQoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1BlbmFsdGllcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0VsaWdpYmlsaXR5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAgLFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRGF5L3RpbWUnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTZWFzb25hbGl0eScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZsaWdodMKgQXBwbGljYXRpb24nLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBZHZhbmNlwqBSZXNlcnZhdGlvbnMvdGlja2V0aW5nJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTWF4aW11bcKgU3RheScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ01pbmltdW3CoFN0YXknLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTdG9wb3ZlcnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUcmFuc2ZlcnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDb21iaW5hdGlvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdCbGFja291dMKgRGF0ZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTdXJjaGFyZ2VzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQWNjb21wYW5pZWTCoFRyYXZlbCcsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1RyYXZlbMKgUmVzdHJpY3Rpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU2FsZXPCoFJlc3RyaWN0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0hpcC9taWxlYWdlwqBFeGNlcHRpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVGlja2V0wqBFbmRvcnNlbWVudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDaGlsZHJlbsKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVG91csKgQ29uZHVjdG9ywqBEaXNjb3VudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBZ2VudMKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQWxswqBPdGhlcsKgRGlzY291bnRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTWlzY2VsbGFuZW91c8KgUHJvdmlzaW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0ZhcmXCoEJ5wqBSdWxlJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnR3JvdXBzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVG91cnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdWaXNpdMKgQW5vdGhlcsKgQ291bnRyeScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0RlcG9zaXRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBDaGFuZ2VzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVm9sdW50YXJ5wqBSZWZ1bmRzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTmVnb3RpYXRlZMKgRmFyZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdSdWxlwqBBcHBsaWNhdGlvbsKgQW5kwqBPdGhlcsKgQ29uZGl0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfVxuICAgIF07XG4gIH1cblxuICBzYXZlU2VhcmNoKCk6IE9ic2VydmFibGU8U2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdD4ge1xuICAgIGlmICh0aGlzLmlzRmF2b3VyaXRlVmFsaWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuICAgICAgY29uc3QgZmF2b3VyaXRlU2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID0gdGhpcy51cGRhdGVTZXJjaFF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgY29uc3Qgc2VhcmNoSW5mbyA9IHtcbiAgICAgICAgbmFtZTogYCR7bW9tZW50KCl9YCxcbiAgICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkZsaWdodCxcbiAgICAgICAgc2VhcmNoQXJnczogZmF2b3VyaXRlU2VhcmNoUXVlcnlcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLnNhdmVGYXZvdXJpdGVTZWFyY2goc2VhcmNoSW5mbyk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGFwcGx5RmF2b3VyaXRlKGZhdjogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm93ID0gdGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCk7XG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoMSk7XG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKG5vdywgMzApO1xuICAgIHRoaXMuaW5ib3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRvbW9ycm93LCAzMCk7XG4gICAgdGhpcy5hcHBseVNlYXJjaFF1ZXJ5KGZhdik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlcmNoUXVlcnkocXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzKTogSUZsaWdodFNlYXJjaEFyZ3Mge1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5OiBJRmxpZ2h0U2VhcmNoQXJncyA9IHF1ZXJ5O1xuICAgIHN3aXRjaCAodGhpcy5jaG9zZW5TZWFyY2hUeXBlKSB7XG4gICAgICBjYXNlIEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5OlxuICAgICAgICBzZWFyY2hRdWVyeS5tdWx0aURlc3RpbmF0aW9uRGV0YWlsID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm46XG4gICAgICBjYXNlIEZsaWdodFNlYXJjaFR5cGUub25lV2F5OlxuICAgICAgICBzZWFyY2hRdWVyeS5kZXBhcnRMb2NhdGlvbkRldGFpbCA9IHRoaXMuZGVwYXJ0TG9jYXRpb247XG4gICAgICAgIHNlYXJjaFF1ZXJ5LmFycml2ZUxvY2F0aW9uRGV0YWlsID0gdGhpcy5hcnJpdmVMb2NhdGlvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlYXJjaFF1ZXJ5O1xuICB9XG5cbiAgY2FuQmVFdXJvU2VhcmNoZWQoXG4gICAgZGVwYXJ0TG9jYXRpb246IHN0cmluZyA9ICh0aGlzLmRlcGFydExvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZ2F0ZXdheSxcbiAgICBhcnJpdmVMb2NhdGlvbjogc3RyaW5nID0gKHRoaXMuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpPy5nYXRld2F5LFxuICAgIGNob3NlblNlYXJjaFR5cGU6IEZsaWdodFNlYXJjaFR5cGUgPSB0aGlzLmNob3NlblNlYXJjaFR5cGVcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChBaXJUb0V1cm9bZGVwYXJ0TG9jYXRpb25dICYmIEFpclRvRXVyb1thcnJpdmVMb2NhdGlvbl0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGNhbkJlUmFpbFNlYXJjaGVkKFxuICAgIGNob3NlblNlYXJjaFR5cGU6IEZsaWdodFNlYXJjaFR5cGUgPSB0aGlzLmNob3NlblNlYXJjaFR5cGUsXG4gICAgdHJhaW5saW5lQ29uZmlnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5sb2coJysrKyBDaGVja2luZyBpZiBmbGlnaHQgam91cm5leSBjYW4gYmUgc2VlYXJjaGVkIGJ5IHJhaWwgKysrJyk7XG5cbiAgICBpZiAoY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodHJhaW5saW5lQ29uZmlnKSB7XG4gICAgICAvLyBhdHRlbXB0IHRvIGxvb2t1cCB0aGUgc3RhdGlvbnMgLSB3b3VsZCBiZSB0byBtYW55IHRvIG1hcCBwcm9wZXJseVxuICAgICAgY29uc29sZS5sb2coJysrKyBUcmFpbmxpbmUgZW5hYmxlZCAtIGF0dGVtcHQgdG8gbG9va3VwIHRoZSBzdGF0aW9ucyArKysnKTtcbiAgICAgIGNvbnN0IHNwbGl0ID0gKHRoaXMuZGVwYXJ0TG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpPy5kZXN0aW5hdGlvbi5zcGxpdCgnLCcpWzBdO1xuICAgICAgY29uc29sZS5sb2codGhpcy5kZXBhcnRMb2NhdGlvbik7XG4gICAgICBjb25zdCB0cmFpbmxpbmVPdXRib3VuZFN0YXRpb25zOiBhbnkgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgLmdldFN0YXRpb25Mb2NhdGlvbnMoc3BsaXQsIHVuZGVmaW5lZCwgZmFsc2UsIGZhbHNlLCBmYWxzZSlcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgY29uc29sZS5sb2codHJhaW5saW5lT3V0Ym91bmRTdGF0aW9ucyk7XG5cbiAgICAgIGNvbnN0IGluU3BsaXQgPSAodGhpcy5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmRlc3RpbmF0aW9uLnNwbGl0KCcsJylbMF07XG5cbiAgICAgIGNvbnN0IHRyYWlubGluZUluYm91bmRTdGF0aW9uczogYW55ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgIC5nZXRTdGF0aW9uTG9jYXRpb25zKGluU3BsaXQsIHVuZGVmaW5lZCwgZmFsc2UsIGZhbHNlLCBmYWxzZSlcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgICAgY29uc29sZS5sb2codHJhaW5saW5lSW5ib3VuZFN0YXRpb25zKTtcblxuICAgICAgaWYgKHRyYWlubGluZU91dGJvdW5kU3RhdGlvbnMubGVuZ3RoICYmIHRyYWlubGluZUluYm91bmRTdGF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5vdXRib3VuZFNhbWVTZWFyY2hUcmFpbmxpbmVTdGF0aW9ucyA9IHRyYWlubGluZU91dGJvdW5kU3RhdGlvbnM7XG4gICAgICAgIHRoaXMuaW5ib3VuZFNhbWVTZWFyY2hUcmFpbmxpbmVTdGF0aW9ucyA9IHRyYWlubGluZUluYm91bmRTdGF0aW9ucztcblxuICAgICAgICBjb25zb2xlLmxvZygnKysrIEhhdmUgYm90aCB0cmFpbmxpbmUgaW5ib3VuZCBhbmQgb3V0Ym91bmQgc3RhdGlvbnMgKysrJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgIEFJUlRvUmFpbFVLWyh0aGlzLmRlcGFydExvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZ2F0ZXdheV0gJiZcbiAgICAgICAgQUlSVG9SYWlsVUtbKHRoaXMuYXJyaXZlTG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpPy5nYXRld2F5XVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGYXJlUnVsZXMoam91cm5leUhhc2g6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdoZW5TZWxlY3RlZEFsb25lOiB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0sXG4gICAgICBqb3VybmV5V2hlblNlbGVjdGVkOiB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVxdWlyZXNSZWFzb24oam91cm5leUhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhIXRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbktleXM/Lmxlbmd0aCB8fFxuICAgICAgISF0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXF1aXJlc1JlYXNvbk1lc3NhZ2Uoam91cm5leUhhc2g6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzLmpvaW4oJywgJykgfHxcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25NZXNzYWdlcy5qb2luKCcsICcpIHx8XG4gICAgICAnJ1xuICAgICk7XG4gIH1cblxuICBtZXNzYWdlQ29uZmlnQ2hlY2soY29uZmlnOiBhbnksIGlzQ2hlY2tQYXNzOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGVwYXJ0TG9jYXRpb24gPSB0aGlzLmRlcGFydExvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xuICAgIGNvbnN0IGFycml2ZUxvY2F0aW9uID0gdGhpcy5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcbiAgICBjb25zdCBkZXBhcnREZXRhaWwgPSBkZXBhcnRMb2NhdGlvbj8uZGVzdGluYXRpb24/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgYXJyaXZlRGV0YWlsID0gYXJyaXZlTG9jYXRpb24/LmRlc3RpbmF0aW9uPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb25maWcuYXJyaXZhbEFpcnBvcnQpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID0gYXJyaXZlRGV0YWlsID09PSBjb25maWcuYXJyaXZhbEFpcnBvcnQ7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5kZXBhcnR1cmVBaXJwb3J0KSB7XG4gICAgICBpc0NoZWNrUGFzcyA9IGRlcGFydERldGFpbCA9PT0gY29uZmlnLmRlcGFydHVyZUFpcnBvcnQ7XG4gICAgfVxuICAgIGlmIChjb25maWcuY2l0eSkge1xuICAgICAgY29uc3QgY2l0eSA9IGNvbmZpZy5jaXR5LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBtYXRjaCA9ICEhdGhpcy5tdWx0aURlc3RpbmF0aW9uLmZpbmQoXG4gICAgICAgIG11bCA9PlxuICAgICAgICAgIG11bC5kZXN0Py5kZXN0aW5hdGlvbj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjaXR5KSB8fFxuICAgICAgICAgIG11bC5vcmlnPy5kZXN0aW5hdGlvbj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhjaXR5KVxuICAgICAgKTtcbiAgICAgIGlzQ2hlY2tQYXNzID0gZGVwYXJ0RGV0YWlsPy5pbmNsdWRlcyhjaXR5KSB8fCBhcnJpdmVEZXRhaWw/LmluY2x1ZGVzKGNpdHkpIHx8IG1hdGNoO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvdW50cnkpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gISF0aGlzLm11bHRpRGVzdGluYXRpb24uZmluZChcbiAgICAgICAgbXVsID0+IG11bC5kZXN0Py5jb3VudHJ5Q29kZSA9PT0gY29uZmlnLmNvdW50cnkgfHwgbXVsLm9yaWc/LmNvdW50cnlDb2RlID09PSBjb25maWcuY291bnRyeVxuICAgICAgKTtcbiAgICAgIGlzQ2hlY2tQYXNzID1cbiAgICAgICAgZGVwYXJ0TG9jYXRpb24/LmNvdW50cnkgPT09IGNvbmZpZy5jb3VudHJ5IHx8XG4gICAgICAgIGFycml2ZUxvY2F0aW9uPy5jb3VudHJ5ID09PSBjb25maWcuY291bnRyeSB8fFxuICAgICAgICBtYXRjaDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jYXJyaWVyKSB7XG4gICAgICBpc0NoZWNrUGFzcyA9ICEhdGhpcy5wcmVmZXJyZWRDYXJyaWVycy5maW5kKGNhcnJpZXIgPT5cbiAgICAgICAgY2FycmllciAhPT0gbnVsbFxuICAgICAgICAgID8gY2Fycmllci5jb2RlID09PSBjb25maWcuY2FycmllciB8fCBjYXJyaWVyLm5hbWUgPT09IGNvbmZpZy5jYXJyaWVyXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNDaGVja1Bhc3M7XG4gIH1cblxuICAvLyAgIHB1YmxpYyBnZXRGbGlnaHRFeHRyYXMoZmxpZ2h0OiBJbnB1dEZsaWdodEpvdXJuZXksKSB7XG4gIC8vICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0RXh0cmFzT3B0aW9ucy5mZXRjaExpc3Qoe2ZsaWdodH0pXG4gIC8vIH1cblxuICBwdWJsaWMgZ2V0RmxpZ2h0RXh0cmFzKFxuICAgIGZsaWdodHM6IElucHV0RmxpZ2h0Sm91cm5leVtdLFxuICAgIHN1cHBsaWVyOiBzdHJpbmcsXG4gICAgbG95YWx0eUNvZGU/OiBzdHJpbmcsXG4gICAgdXNlcklkPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8RmxpZ2h0T3B0aW9uc1tdPiB7XG4gICAgLy8gR2V0IHNlYXJjaCBxdWVyeVxuICAgIGxldCBzZWFyY2hRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcblxuICAgIHNlYXJjaFF1ZXJ5LnBhc3NlbmdlcnMgPSB0aGlzLnRyYXZlbGxlcnMubWFwKFxuICAgICAgKHgpOiBGbGlnaHRQYXNzZW5nZXJPYmplY3QgPT4gKHtcbiAgICAgICAgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCxcbiAgICAgICAgZG9iOiB4LmRvYiA/IG5ldyBEYXRlKE51bWJlcih4LmRvYikpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogbnVsbCxcbiAgICAgICAgZmlyc3ROYW1lOiB4LmZvcmVuYW1lLFxuICAgICAgICBzdXJuYW1lOiB4LnN1cm5hbWUsXG4gICAgICAgIGlkOiB4LmlkLFxuICAgICAgICBndWVzdDogeC5ndWVzdFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0RXh0cmFzT3B0aW9uc1xuICAgICAgLmZldGNoTGlzdCh7IGZsaWdodHMsIHN1cHBsaWVyLCBzZWFyY2hRdWVyeSwgbG95YWx0eUNvZGUsIHVzZXJJZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZGF0YTogRmxpZ2h0T3B0aW9uc1tdKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRTZWxlY3RlZEZsaWdodCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cElkID0gLTE7XG4gICAgdGhpcy5vdXRib3VuZENhYmluQ2xhc3MgPSAnJzsgLy8gcmVzZXQgb3V0Ym91bmRDYWJpbkNsYXNzXG4gIH1cblxuICBjcmVhdGVDaGVhcGVzdFByaWNlT2JqZWN0KGZsaWdodHNHcm91cFR5cGU6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFtdKTogSUNoZWFwZXN0UHJpY2VEZXRhaWxzIHtcbiAgICByZXR1cm4gZmxpZ2h0c0dyb3VwVHlwZS5yZWR1Y2UoXG4gICAgICAoY2hlYXBlc3RQcmljZTogSUNoZWFwZXN0UHJpY2VEZXRhaWxzLCByZXN1bHQ6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC5taW5QcmljZTtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIHtcbiAgICAgICAgICBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xuICAgICAgICAgIGNvbnN0IGNoZWFwRmxpZ2h0Q2xhc3MgPSBPYmplY3QudmFsdWVzKHJlc3VsdC5jbGFzc2VzKVxuICAgICAgICAgICAgLmZpbHRlcihmbGlnaHRDbGFzcyA9PiBmbGlnaHRDbGFzcyAhPT0gbnVsbClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBhLm1pbnByaWNlIC0gYi5taW5wcmljZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChjaGVhcEZsaWdodENsYXNzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2hlYXBlc3RQcmljZS5mbGlnaHQgPSBjaGVhcEZsaWdodENsYXNzWzBdLmZsaWdodHNbMF07XG4gICAgICAgICAgICBjaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSA9IGNoZWFwRmxpZ2h0Q2xhc3NbMF0uY3VycmVuY3k7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiAnR0JQJywgZmxpZ2h0OiBudWxsIH1cbiAgICApO1xuICB9XG5cbiAgY3JlYXRlQ2hlYXBlc3RQcmljZShqb3VybmV5czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBJQ2hlYXBlc3RQcmljZURldGFpbHMge1xuICAgIGlmICgham91cm5leXM/Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGN1cnJlbmN5ID0gam91cm5leXNbMF0udG90YWwuY3VycmVuY3k7XG4gICAgcmV0dXJuIGpvdXJuZXlzLnJlZHVjZShcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZURldGFpbHMsIHJlc3VsdDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgICAgY29uc3QgcHJpY2UgPSByZXN1bHQudG90YWwucHJpY2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gcmVzdWx0LnRvdGFsLmN1cnJlbmN5O1xuICAgICAgICBjb25zdCBmbGlnaHQgPSByZXN1bHQ7XG4gICAgICAgIGlmIChjaGVhcGVzdFByaWNlLmFtb3VudCA+IHByaWNlKSB7XG4gICAgICAgICAgY2hlYXBlc3RQcmljZS5hbW91bnQgPSBwcmljZTtcbiAgICAgICAgICBjaGVhcGVzdFByaWNlLmN1cnJlbmN5Q29kZSA9IGN1cnJlbmN5O1xuICAgICAgICAgIGNoZWFwZXN0UHJpY2UuZmxpZ2h0ID0gZmxpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSwgZmxpZ2h0OiBudWxsIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIHNhbml0aXNlRGF0ZVRpbWUoZGF0ZVRpbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5zYW5pdGlzZURhdGVUaW1lKGRhdGVUaW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBtYWtlUmV0dXJuT3V0Ym91bmQoY28yUGVyUGFzc2VuZ2VyOiBudW1iZXIpOiBHcmVlbmVyQ2hvaWNlIHtcbiAgICByZXR1cm4gdGhpcy5ncmVlbmVyQ2hvaWNlLm1ha2VSZXR1cm5PdXRib3VuZChjbzJQZXJQYXNzZW5nZXIpO1xuICB9XG5cbiAgcHVibGljIG1ha2VNdWx0aShvcmRlcjogbnVtYmVyLCBjbzJQZXJQYXNzZW5nZXI6IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JlZW5lckNob2ljZS5tYWtlTXVsdGkob3JkZXIsIGNvMlBlclBhc3Nlbmdlcik7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VzdG9tQ1NTKGpvdXJuZXlIYXNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2pvdXJuZXlIYXNoXT8uY3VzdG9tQ1NTIHx8XG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtqb3VybmV5SGFzaF0/LmN1c3RvbUNTUyB8fFxuICAgICAgJydcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVwcmljZUZsaWdodChmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKTogUHJvbWlzZTxGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4ge1xuICAgIGNvbnNvbGUubG9nKCcrKysgQXR0ZW1wdGluZyB0byByZXByaWNlOiAnLCBmbGlnaHQsICcgKysrJyk7XG4gICAgLy8gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldHRpbmdGbGlnaHRDbGFzc2VzLm5leHQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIG5vdyBhY3R1YWxseSBkbyB0aGUgcmVwcmljZSBjYWxsIC0gaWYgd2Ugd2FudCB0aGF0XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UucmVwcmljaW5nRmxpZ2h0Lm5leHQodHJ1ZSk7XG4gICAgICBjb25zdCBuZXdGbGlnaHQgPSBhd2FpdCBcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZsaWdodEF0TmV3Q2xhc3MoXG4gICAgICAgICAgdGhpcy5nZXRTZWFyY2hRdWVyeSgpLFxuICAgICAgICAgIGZsaWdodCxcbiAgICAgICAgICB0aGlzLmFkdWx0cyxcbiAgICAgICAgICB0aGlzLmNoaWxkcmVuXG4gICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgICAgIFxuICAgICAgZmxpZ2h0LnRvdGFsID0gbmV3RmxpZ2h0LmZsaWdodHNbMF0udG90YWw7XG4gICAgICAvLyB0aGlzIGJpdCBmb3IgbmV3IHBvbGljeSBFTlQtOTc3MlxuICAgICAgY29uc3QgeyBqb3VybmV5V2hlblNlbGVjdGVkLCB3aGVuU2VsZWN0ZWRBbG9uZSB9ID0gbmV3RmxpZ2h0LnJ1bGVBY3Rpb25TdW1tYXJ5O1xuICAgICAgLy8gdXBkYXRlIGluIG9idHNcbiAgICAgIHRoaXMudXBkYXRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoZmxpZ2h0LCBuZXdGbGlnaHQucnVsZUFjdGlvblN1bW1hcnkpO1xuICAgICAgZmxpZ2h0LnJlcXVpcmVzUmVhc29uS2V5cyA9XG4gICAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzIHx8XG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uS2V5cztcbiAgICAgIGZsaWdodC5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID1cbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzIHx8XG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHxcbiAgICAgICAgW107XG5cbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZSA9XG4gICAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGUgfHxcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGU7XG4gICAgICBmbGlnaHQudW5hdmFpbGFibGVNZXNzYWdlID1cbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXT8udW5hdmFpbGFibGVNZXNzYWdlIHx8XG4gICAgICAgICcnO1xuICAgICAgLy8gd2Ugd2VyZSB1cGRhdGluZyB0aGUgd2hvbGUsIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIHVwZGF0ZSB0aGUgdG90YWwsIHRoaXMgY29udGFpbnMgZGlzY291bnQgaW5mb1xuICAgICAgLy8gYW5kIGFsc28gdW9kYXRlIHBvbGljeVxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnJlcHJpY2luZ0ZsaWdodC5uZXh0KGZhbHNlKTtcbiAgICAgIHJldHVybiBmbGlnaHRcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldHRpbmdGbGlnaHRDbGFzc2VzLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnJlcHJpY2luZ0ZsaWdodC5uZXh0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVGbGlnaHRTZWF0TWFwKHVzZXI6c3RyaW5nLCBmbGlnaHRJZDpzdHJpbmcsZmxpZ2h0SGFzaDpzdHJpbmcsc2VhdHM6YW55KTpPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVGbGlnaHRTZWF0TWFwVXBkYXRlci51cGRhdGVPbmUoe3VzZXIsIGJhc2tldEl0ZW1JZDpmbGlnaHRJZCxmbGlnaHREZXRhaWxIYXNoOmZsaWdodEhhc2gsIHNlYXQ6c2VhdHN9KVxuICB9XG5cbiAgc2hvd01peGVkQ2FiaW4oZmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdKTogYm9vbGVhbntcbiAgICByZXR1cm4gZmxpZ2h0cy5sZW5ndGggPiAwICYmXG4gICAgICBmbGlnaHRzLnNvbWUoZmxpZ2h0ID0+IGZsaWdodD8uY2FiaW5Db2RlICE9PSBmbGlnaHRzWzBdPy5jYWJpbkNvZGUpICYmXG4gICAgICBmbGlnaHRzLnNvbWUoZmxpZ2h0ID0+IGZsaWdodC5jYWJpbkNvZGUgPT09IFwiWVwiICYmIGZsaWdodC5jYWJpbkNsYXNzID09PSBcIlByZW1pdW1cIik7XG4gIH1cbn1cblxuIl19
|
|
3264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxpZ2h0LWVudGVycHJpc2Utc2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2J0c2VydmljZXMvYmFzZS9zcmMvbGliL3ZlbmRvci9jbGFzc2VzL2ZsaWdodC1lbnRlcnByaXNlLXNlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3pELE9BQU8sRUFBRSxJQUFJLEVBQWEsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFJNUUsT0FBTyxFQVFMLFFBQVEsRUFDUixnQkFBZ0IsRUFJaEIsbUJBQW1CLEVBU25CLFdBQVcsRUFJWCxZQUFZLEVBRVosV0FBVyxFQUtaLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLDRCQUE0QixFQUU1QixtQkFBbUIsRUFVbkIsYUFBYSxFQU1iLGNBQWMsRUFLZCxlQUFlLEVBQ2YsY0FBYyxFQUNmLE1BQU0sZ0JBQWdCLENBQUM7QUFReEIsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixrQkFBa0IsRUFHbkIsTUFBTSx5Q0FBeUMsQ0FBQztBQUVqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU03RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLdkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFC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QUFDLEtBQVM7UUFDMUUsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxRQUFRLEVBQUMsZ0JBQWdCLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFBO0lBQ3pILENBQUM7SUFFRCxjQUFjLENBQUMsT0FBd0I7UUFDckMsT0FBTyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFDLE9BQUEsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsU0FBUyxPQUFLLE1BQUEsT0FBTyxDQUFDLENBQUMsQ0FBQywwQ0FBRSxTQUFTLENBQUEsQ0FBQSxFQUFBLENBQUM7WUFDbkUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUM7SUFDeEYsQ0FBQzs7QUF4bkllLDZDQUFzQixHQUFHLGVBQWUsQ0FBQztBQUN6Qyw4Q0FBdUIsR0FBRyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEJhc2VFbnRlcnByaXNlU2VhcmNoIH0gZnJvbSAnLi9iYXNlLWVudGVycHJpc2UnO1xuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBhZ2VzLCBUcmF2ZWxsZXIgfSBmcm9tICcuLi9tb2RlbHMvdHJhdmVsbGVyLm9iamVjdCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBWYWx1ZURpc3BsYXkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZhbHVlLWRpc3BsYXknO1xuaW1wb3J0IHsgRmxpZ2h0RmlsdGVycyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LWZpbHRlcnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlbGVjdEZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0LWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMsXG4gIEJhZ2dhZ2VBbGxvd2FuY2UsXG4gIEJhc2tldEl0ZW0sXG4gIEN1cnJlbmN5Q29kZSxcbiAgRGVzdGluYXRpb25FbnRyeSxcbiAgRmFyZUNvbmRpdGlvbkVudHJ5LFxuICBGYXJlQ29uZGl0aW9ucyxcbiAgRmFyZVR5cGUsXG4gIEZsaWdodENhYmluQ2xhc3MsXG4gIEZsaWdodEl0aW5lcmFyeSxcbiAgRmxpZ2h0Sm91cm5leSxcbiAgRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0LFxuICBGbGlnaHRQYXNzZW5nZXJUeXBlLFxuICBGbGlnaHRTZWF0TWFwU2VhdHMsXG4gIEdyb3VwZWRGaWVsZHNGcmFnbWVudCxcbiAgR3JvdXBGbGlnaHRzLFxuICBJbnB1dEZsaWdodEpvdXJuZXksXG4gIEl0aW5lcmFyeVN1bW1hcnksXG4gIE1hdGNoaW5nRmxpZ2h0cyxcbiAgU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzLFxuICBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcyxcbiAgU2VydmljZVR5cGUsXG4gIEZsaWdodEFuY2lsbGFyeU9wdGlvbnMsXG4gIEZsaWdodEV4dHJhc09wdGlvbnMsXG4gIEZsaWdodE9wdGlvbnMsXG4gIExvY2F0aW9uVHlwZSxcbiAgUmFpbFN0YXRpb24sXG4gIEJhZ2dhZ2VUeXBlLFxuICBGbGlnaHRKb3VybmV5RXhjaGFuZ2UsXG4gIEZsaWdodEV4Y2hhbmdlRGV0YWlscyxcbiAgRmxpZ2h0RmFyZVJ1bGVzUmVzcG9uc2UsXG4gIEZsaWdodFVwc2VsbE9mZmVyc1Jlc3VsdFxufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIEZsaWdodEFsbFF1b3RlUmVzdWx0LFxuICBGbGlnaHREaXJlY3Rpb25FbnVtLFxuICBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsXG4gIEZsaWdodEdyb3VwcyxcbiAgRmxpZ2h0SXRpbmVyYXJ5Q2xhc3MsXG4gIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICBGbGlnaHRNdWx0aSxcbiAgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSxcbiAgR3JlZW5lckNob2ljZSxcbiAgR3JvdXBlZEZsaWdodHMsXG4gIExvY2F0aW9uRGV0YWlscyxcbiAgTG9jYXRpb25UeXBlcyxcbiAgTWluTWF4LFxuICBOZ2JEYXRlU3RydWN0LFxuICBPQlRBaXJsaW5lc0RldGFpbHMsXG4gIE9CVEFpcnBvcnREZXRhaWxzLFxuICBPQlRGbGlnaHRDYWJpbkNsYXNzLFxuICBQcmVmZXJyZWRGbGFncyxcbiAgUmVjZW50U2VhcmNoLFxuICBSZWNvcmRSdWxlQWN0aW9uLFxuICBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZSxcbiAgU2F2ZUZhdm91cml0ZVNlYXJjaFJlc3VsdCxcbiAgU2VydmljZVByb3ZpZGVyLFxuICBUcmF2ZWxQb2xpY2llc1xufSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQgeyBCYXNlRmxpZ2h0UXVvdGVGZXRjaGVyLCBGbGlnaHRRdW90ZUZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvZmxpZ2h0LXF1b3RlLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgVXBkYXRlRmxpZ2h0U2VhdE1hcFR5cGUsXG4gIEJhc2VVcGRhdGVGbGlnaHRTZWF0TWFwVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy91cGRhdGUtZmxpZ2h0LXNlYXQtbWFwLnVwZGF0ZXInO1xuaW1wb3J0IHsgRnVsbFVzZXJEZXRhaWxzLCBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRlcnByaXNlU2VhcmNoU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXG4gIEZsaWdodERpc3BsYXlUeXBlcyxcbiAgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaEludGVyZmFjZSxcbiAgRmxpZ2h0VGVtcFBhcmFtc1xufSBmcm9tICcuLi9pbnRlcmZhY2VzL0lmbGlnaHQtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHsgSUNoZWFwZXN0UHJpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NoZWFwZXN0LXByaWNlJztcbmltcG9ydCB7IEZsaWdodFNlYXJjaFR5cGUgfSBmcm9tICcuL2ZsaWdodC1zZWFyY2gtdHlwZS5lbnVtJztcbmltcG9ydCB7IElNdWx0aURlc3RpbmF0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mbGlnaHQtbXVsdGktZGVzdGluYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi91c2VyLWZhdm91cml0ZS5lbnVtJztcbmltcG9ydCB7XG4gIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxuICBCYXNlQXBwbHlKaXRGbGlnaHRSdWxlc0ZldGNoZXJcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvYXBwbHktaml0LWZsaWdodC1ydWxlcyc7XG5pbXBvcnQgeyBtYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kYWxUeXBlcyB9IGZyb20gJy4vbW9kYWwtdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBJRmxpZ2h0U2VhcmNoQXJncyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZmxpZ2h0LXNlYXJjaC1hcmdzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmVlbmVyQ2hvaWNlSW1wbCB9IGZyb20gJy4vZ3JlZW5lcmNob2lzZSc7XG5pbXBvcnQgeyBBaXJUb0V1cm8gfSBmcm9tICcuLi9kYXRhL2Fpci10by1ldXJvJztcbmltcG9ydCB7IEFJUlRvUmFpbFVLIH0gZnJvbSAnLi4vZGF0YS9haXItdG8tcmFpbC11ayc7XG5pbXBvcnQgeyBFcm1UcmF2ZWxsZXJUeXBlIH0gZnJvbSAnLi9lcm0tdHJhdmVsbGVyLXR5cGUuZW51bSc7XG5pbXBvcnQge1xuICBCYXNlR2V0RmxpZ2h0RXh0cmFzT3B0aW9uc0ZldGNoZXIsXG4gIEdldEZsaWdodEV4dHJhc09wdGlvbnNUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1mbGlnaHQtZXh0cmFzLW9wdGlvbnMuZmV0Y2hlcic7XG5pbXBvcnQgeyBJQ2hlYXBlc3RQcmljZU9iamVjdCwgSUNoZWFwZXN0UHJpY2VEZXRhaWxzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jaGVhcGVzdC1wcmljZS1vYmplY3QnO1xuaW1wb3J0IHsgRmxpZ2h0Sm91cm5leVR5cGUgfSBmcm9tICcuL2ZsaWdodC1qb3VybmV5LXR5cGUtdHlwZS5lbnVtJztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEZsaWdodEFtb3VudCB9IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHsgVHJhaW5saW5lU2VhcmNoQ29uZmlnVHlwZXMgfSBmcm9tICcuL3JhaWwtZW50ZXJwcmlzZS1zZWFyY2gnO1xuaW1wb3J0IHtcbiAgQmFzZUZsaWdodFNlYXJjaEV4Y2hhbmdlRmV0Y2hlcixcbiAgRmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LXNlYXJjaC1leGNoYW5nZS5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyLFxuICBGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZmxpZ2h0LWV4Y2hhbmdlLWRldGFpbHMuZmV0Y2hlcic7XG5pbXBvcnQgeyBJRmFyZVJ1bGVzS2V5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mYXJlLXJ1bGVzLWtleSc7XG5pbXBvcnQgeyBCYXNrZXREZXRhaWxzIH0gZnJvbSAnLi4vc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5cbmNvbnN0IE9VVEJPVU5EID0gMDtcbmV4cG9ydCBpbnRlcmZhY2UgQWxsb3dlZENsYXNzIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGbGlnaHRPcGVyYXRvciB7XG4gIGNvZGU6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERldGFpbEV4dHJhcyB7XG4gIGFkZGl0aW9uYWxEZXRhaWxzOiB7XG4gICAgW2tleTogc3RyaW5nXTogQWRkaXRpb25hbDtcbiAgfTtcbiAgc2VhdHM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBGbGlnaHRTZWF0TWFwU2VhdHM7XG4gIH07XG5cbiAgbG95YWx0eToge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZ1tdO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZGl0aW9uYWwge1xuICBhZHZhbmNlZEFuY2lsbGFyeU9wdGlvbnM6IEZsaWdodEFuY2lsbGFyeU9wdGlvbnNbXTtcbiAgYmFnZ2FnZUFsbG93YW5jZTogYW55O1xuICBmbGlnaHRFeHRyYXM6IGFueTtcbiAgcmVkdWNlZE1vYmlsbGl0eUFzc2lzdGFuY2U6IGFueTtcbiAgbWVhbDogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBDb21iaW5lZEZsaWdodCB7XG4gIGZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdIHwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNbXTtcbiAgZmxpZ2h0SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gQWRkaXRpb25hbERldGFpbHMge1xuICBhZHZhbmNlZEFuY2lsbGFyeU9wdGlvbnMgPSAnYWR2YW5jZWRBbmNpbGxhcnlPcHRpb25zJyxcbiAgYmFnZ2FnZUFsbG93YW5jZSA9ICdiYWdnYWdlQWxsb3dhbmNlJyxcbiAgZmxpZ2h0RXh0cmFzID0gJ2ZsaWdodEV4dHJhcycsXG4gIHJlZHVjZWRNb2JpbGxpdHlBc3Npc3RhbmNlID0gJ3JlZHVjZWRNb2JpbGxpdHlBc3Npc3RhbmNlJyxcbiAgbWVhbCA9ICdtZWFsJ1xufVxuXG5leHBvcnQgdHlwZSBBbGxvd2VkQ2xhc3NlcyA9IEFsbG93ZWRDbGFzc1tdO1xuXG5leHBvcnQgZW51bSBUaW1lV2luZG93IHtcbiAgQW55dGltZSA9ICdBbnl0aW1lJyxcbiAgRGVwYXJ0ID0gJ0RlcGFydCBCeScsXG4gIEFycml2ZSA9ICdBcnJpdmUgQnknXG59XG5cbmV4cG9ydCBlbnVtIEZsaWdodFNvcnRUeXBlcyB7XG4gIENoZWFwZXN0ID0gJ0NoZWFwZXN0JyxcbiAgTW9zdEV4cGVuc2l2ZSA9ICdNb3N0IEV4cGVuc2l2ZScsXG4gIEZhc3Rlc3QgPSAnRmFzdGVzdCcsXG4gIFByZWZlcnJlZCA9ICdQcmVmZXJyZWQnLFxuICBMb3dlc3RFbWlzc2lvbnMgPSAnTG93ZXN0IEVtaXNzaW9ucycsXG4gIERlcGFydHVyZVRpbWUgPSAnRGVwYXJ0dXJlIFRpbWUnLFxuICBBcnJpdmFsVGltZSA9ICdBcnJpdmFsIFRpbWUnLFxuICBRdWlja2VzdCA9ICdRdWlja2VzdCcsXG4gIE1vc3REaXJlY3QgPSAnTW9zdCBEaXJlY3QnLFxuICBHcmVlbmVyQ2hvaWNlID0gJ0dyZWVuZXIgQ2hvaWNlJyxcbiAgU0FGID0gJ0hpZ2hlc3QgU0FGIFJhdGluZydcbn1cblxuZXhwb3J0IGNvbnN0IFNBRlJhdGluZ0FycmF5ID0gW1xuICB7XG4gICAgcmF0aW5nOiAnQUFBJyxcbiAgICBzY29yZTogMFxuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnQUEnLFxuICAgIHNjb3JlOiAxXG4gIH0sXG4gIHtcbiAgICByYXRpbmc6ICdBJyxcbiAgICBzY29yZTogMlxuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnQicsXG4gICAgc2NvcmU6IDNcbiAgfSxcbiAge1xuICAgIHJhdGluZzogJ0MnLFxuICAgIHNjb3JlOiA0XG4gIH0sXG4gIHtcbiAgICByYXRpbmc6ICdEJyxcbiAgICBzY29yZTogNVxuICB9LFxuICB7XG4gICAgcmF0aW5nOiAnRScsXG4gICAgc2NvcmU6IDZcbiAgfSxcbiAge1xuICAgIHJhdGluZzogJ04vQScsXG4gICAgc2NvcmU6IDdcbiAgfVxuXTtcblxuaW50ZXJmYWNlIEZsaWdodFNlc3Npb25UeXBlIHtcbiAgcmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheTtcbiAgZ3JvdXBlZDogR3JvdXBlZEZsaWdodHM7XG4gIHF1ZXJ5OiBTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcztcbn1cblxuaW50ZXJmYWNlIEhpZGVGbGlnaHRDYWJpbkNsYXNzSW50ZXJmYWNlIHtcbiAgYW55OiBib29sZWFuO1xuICBidXNpbmVzczogYm9vbGVhbjtcbiAgZWNvbm9teTogYm9vbGVhbjtcbiAgcHJlbWl1bUVjb25vbXk6IGJvb2xlYW47XG4gIGZpcnN0OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaDxcbiAgICBGUV9RIGV4dGVuZHMgRmxpZ2h0UXVvdGVGZXRjaGVyVHlwZSxcbiAgICBBSkZfUSBleHRlbmRzIEFwcGx5Sml0RmxpZ2h0UnVsZXNUeXBlLFxuICAgIEdGRU9fRiBleHRlbmRzIEdldEZsaWdodEV4dHJhc09wdGlvbnNUeXBlLFxuICAgIEZTRV9GIGV4dGVuZHMgRmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyVHlwZSxcbiAgICBGRURfRiBleHRlbmRzIEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXJUeXBlLFxuICAgIFVGU19VIGV4dGVuZHMgVXBkYXRlRmxpZ2h0U2VhdE1hcFR5cGVcbiAgPlxuICBleHRlbmRzIEJhc2VFbnRlcnByaXNlU2VhcmNoPEZsaWdodFRlbXBQYXJhbXMsIEZsaWdodEFsbFF1b3RlUmVzdWx0LCBGbGlnaHRRdW90ZVJlc3VsdEFycmF5PlxuICBpbXBsZW1lbnRzIEZsaWdodEVudGVycHJpc2VTZWFyY2hJbnRlcmZhY2VcbntcbiAgc3RhdGljIHJlYWRvbmx5IFNUT1JBR0VfU0VTU0lPTl9QQVJBTVMgPSAnc2VhcmNoX2ZsaWdodCc7XG4gIHN0YXRpYyByZWFkb25seSBTVE9SQUdFX1NFU1NJT05fUkVTVUxUUyA9ICdyZXN1bHRzX2ZsaWdodCc7XG5cbiAgcHVibGljIHR5cGU6IFNlcnZpY2VUeXBlID0gU2VydmljZVR5cGUuRmxpZ2h0O1xuXG4gIGF2YWxpYWJsZUNsYXNzZXM6IEJlaGF2aW9yU3ViamVjdDxBbGxvd2VkQ2xhc3Nlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFsbG93ZWRDbGFzc2VzPihbXSk7XG4gIHRpbWVDcml0ZXJpYU9wdGlvbnM6IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaW1lV2luZG93W10+KFtdKTtcbiAgZmxpZ2h0T3BlcmF0b3JzOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0T3BlcmF0b3JbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZsaWdodE9wZXJhdG9yW10+KFtdKTtcbiAgc2VsZWN0ZWRGbGlnaHQ6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+KG51bGwpO1xuICBzZWxlY3RlZFVJZDogc3RyaW5nID0gJyc7XG4gIGRpcmVjdERlZmF1bHRWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3Nob3dDYWJpbkNsYXNzU2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfc2hvd1ByZWZlcnJlZEFpcmxpbmVzOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfbmVnb3RpYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF90aW1lQXJyYXk6IFZhbHVlRGlzcGxheTxzdHJpbmc+W107XG4gIHByaXZhdGUgX3NvcnRBcnJheTogVmFsdWVEaXNwbGF5PEZsaWdodFNvcnRUeXBlcz5bXSA9IFtcbiAgICB7IGRpc3BsYXk6ICdDaGVhcGVzdCBGaXJzdCcsIHZhbHVlOiBGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3QgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5OiAnTW9zdCBFeHBlbnNpdmUgRmlyc3QnLFxuICAgICAgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXG4gICAgfSxcbiAgICB7IGRpc3BsYXk6ICdGYXN0ZXN0IEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0IH0sXG4gICAgeyBkaXNwbGF5OiAnUHJlZmVycmVkIEZhcmVzIEZpcnN0JywgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWQgfSxcbiAgICB7XG4gICAgICBkaXNwbGF5OiAnTG93ZXN0IENvMiBFbWlzc2lvbnMgRmlyc3QnLFxuICAgICAgdmFsdWU6IEZsaWdodFNvcnRUeXBlcy5Mb3dlc3RFbWlzc2lvbnNcbiAgICB9XG4gIF07XG5cbiAgcHJpdmF0ZSBfc29ydEl0aW5hcnlSb3V0aW5lczogUmVjb3JkPFxuICAgIEZsaWdodFNvcnRUeXBlcyxcbiAgICAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IG51bWJlclxuICA+ID0ge1xuICAgIFtGbGlnaHRTb3J0VHlwZXMuQ2hlYXBlc3RdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5LCBiOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgIHJldHVybiBhLnRvdGFsLnByaWNlIC0gYi50b3RhbC5wcmljZTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuTW9zdEV4cGVuc2l2ZV06IChhOiBGbGlnaHRJdGluZXJhcnksIGI6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgcmV0dXJuIGIudG90YWwucHJpY2UgLSBhLnRvdGFsLnByaWNlO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEl0aW5lcmFyeSwgYjogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cbiAgICAgICAgKGIub3V0Ym91bmRUb3RhbER1cmF0aW9uICsgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICBpZiAoYS5wcmVmZXJlbmNlTGV2ZWwgJiYgYi5wcmVmZXJlbmNlTGV2ZWwpIHtcbiAgICAgICAgLy8gU29ydCBieSBwcmVmZXJlbmNlTGV2ZWwgaWYgYm90aCBpdGVtcyBoYXZlIG5vbi1udWxsIHByZWZlcmVuY2VMZXZlbFxuICAgICAgICBpZiAoYS5wcmVmZXJlbmNlTGV2ZWwgPiBiLnByZWZlcmVuY2VMZXZlbCkgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYS5wcmVmZXJlbmNlTGV2ZWwgPCBiLnByZWZlcmVuY2VMZXZlbCkgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGEucHJlZmVyZW5jZUxldmVsICYmICFiLnByZWZlcmVuY2VMZXZlbCkge1xuICAgICAgICAvLyBQdXQgaXRlbXMgd2l0aCBub24tbnVsbCBwcmVmZXJlbmNlTGV2ZWwgYmVmb3JlIGl0ZW1zIHdpdGggbnVsbCBwcmVmZXJlbmNlTGV2ZWxcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmICghYS5wcmVmZXJlbmNlTGV2ZWwgJiYgYi5wcmVmZXJlbmNlTGV2ZWwpIHtcbiAgICAgICAgLy8gUHV0IGl0ZW1zIHdpdGggbnVsbCBwcmVmZXJlbmNlTGV2ZWwgYWZ0ZXIgaXRlbXMgd2l0aCBub24tbnVsbCBwcmVmZXJlbmNlTGV2ZWxcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIFNvcnQgYnkgcHJlZmVycmVkXG4gICAgICBpZiAoYS5wcmVmZXJyZWQgJiYgIWIucHJlZmVycmVkKSByZXR1cm4gLTE7XG4gICAgICBpZiAoIWEucHJlZmVycmVkICYmIGIucHJlZmVycmVkKSByZXR1cm4gMTtcblxuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc106IChcbiAgICAgIGE6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgICAgYjogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgICApID0+IHtcbiAgICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkRlcGFydHVyZVRpbWVdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyk7XG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyk7XG4gICAgICBpZiAoYVRpbWUuaXNCZWZvcmUoYlRpbWUpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhVGltZS5pc1NhbWUoYlRpbWUpID8gMCA6IDE7XG4gICAgfSxcbiAgICBbRmxpZ2h0U29ydFR5cGVzLkFycml2YWxUaW1lXTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgY29uc3QgYVRpbWUgPSBtb21lbnQoYS5vdXRib3VuZEZsaWdodHNbYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV0uZGF0ZVRpbWVBcnJpdmluZyk7XG4gICAgICBjb25zdCBiVGltZSA9IG1vbWVudChiLm91dGJvdW5kRmxpZ2h0c1tiLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxXS5kYXRlVGltZUFycml2aW5nKTtcbiAgICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcbiAgICB9LFxuICAgIFtGbGlnaHRTb3J0VHlwZXMuUXVpY2tlc3RdOiAoXG4gICAgICBhOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICAgIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiArXG4gICAgICAgIChhLmluYm91bmRUb3RhbER1cmF0aW9uID8gYS5pbmJvdW5kVG90YWxEdXJhdGlvbiA6IDApIC1cbiAgICAgICAgKGIub3V0Ym91bmRUb3RhbER1cmF0aW9uICsgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RGlyZWN0XTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoICtcbiAgICAgICAgKGEub3V0Ym91bmRGbGlnaHRzID8gYS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIDogMCkgLVxuICAgICAgICAoYi5vdXRib3VuZEZsaWdodHMubGVuZ3RoICsgKGIub3V0Ym91bmRGbGlnaHRzID8gYi5vdXRib3VuZEZsaWdodHMubGVuZ3RoIDogMCkpXG4gICAgICApO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5HcmVlbmVyQ2hvaWNlXTogKFxuICAgICAgYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgICBiOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICkgPT4ge1xuICAgICAgaWYgKGEuZ3JlZW5lckNob2ljZSAhPT0gYi5ncmVlbmVyQ2hvaWNlKSB7XG4gICAgICAgIHJldHVybiBhLmdyZWVuZXJDaG9pY2UgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgICBpZiAoYS5ncmVlbmVyQ2hvaWNlKSB7XG4gICAgICAgIHJldHVybiBhLmdyZWVuZXJDaG9pY2VQZXJjZW50YWdlIC0gYi5ncmVlbmVyQ2hvaWNlUGVyY2VudGFnZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgW0ZsaWdodFNvcnRUeXBlcy5TQUZdOiAoYTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsIGI6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBTQUZSYXRpbmdBcnJheS5maW5kKHMgPT4gcy5yYXRpbmcgPT09IGEuc2FmUmF0aW5nKT8uc2NvcmUgLVxuICAgICAgICBTQUZSYXRpbmdBcnJheS5maW5kKHMgPT4gcy5yYXRpbmcgPT09IGIuc2FmUmF0aW5nKT8uc2NvcmVcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIHByaXZhdGUgX3NvcnRHcm91cGVkUm91dGluZXM6IFJlY29yZDxcbiAgLy8gICBGbGlnaHRTb3J0VHlwZXMsXG4gIC8vICAgKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiBudW1iZXJcbiAgLy8gPiA9IHtcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLkNoZWFwZXN0XTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGEubWluUHJpY2UgLSBiLm1pblByaWNlO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5Nb3N0RXhwZW5zaXZlXTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGIubWluUHJpY2UgLSBhLm1heFByaWNlO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5GYXN0ZXN0XTogKGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCwgYjogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gIC8vICAgICBpZiAoYS5kaXJlY3Rpb24gIT09IGIuZGlyZWN0aW9uKSB7XG4gIC8vICAgICAgIHJldHVybiBhLmRpcmVjdGlvbiAtIGIuZGlyZWN0aW9uO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGEuZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLk91dGJvdW5kXG4gIC8vICAgICAgID8gYS5vdXRib3VuZFRvdGFsRHVyYXRpb24gLSBiLm91dGJvdW5kVG90YWxEdXJhdGlvblxuICAvLyAgICAgICA6IGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gLSBiLmluYm91bmRUb3RhbER1cmF0aW9uO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5QcmVmZXJyZWRdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gKGIucHJlZmVycmVkID8gMSA6IDApIC0gKGEucHJlZmVycmVkID8gMSA6IDApO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5HcmVlbmVyQ2hvaWNlXTogKCkgPT4ge1xuICAvLyAgICAgcmV0dXJuIDA7XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLkxvd2VzdEVtaXNzaW9uc106IChcbiAgLy8gICAgIGE6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCxcbiAgLy8gICAgIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdFxuICAvLyAgICkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIHJldHVybiBhLmNvMlBlckl0ZW0gLSBiLmNvMlBlckl0ZW07XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLkRlcGFydHVyZVRpbWVdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICBjb25zdCBhVGltZSA9IG1vbWVudChhLmRlcGFydERhdGVUaW1lKTtcbiAgLy8gICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuZGVwYXJ0RGF0ZVRpbWUpO1xuICAvLyAgICAgaWYgKGFUaW1lLmlzQmVmb3JlKGJUaW1lKSkge1xuICAvLyAgICAgICByZXR1cm4gLTE7XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYVRpbWUuaXNTYW1lKGJUaW1lKSA/IDAgOiAxO1xuICAvLyAgIH0sXG4gIC8vICAgW0ZsaWdodFNvcnRUeXBlcy5BcnJpdmFsVGltZV06IChhOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQsIGI6IEZsaWdodEdyb3VwZWRRdW90ZVJlc3VsdCkgPT4ge1xuICAvLyAgICAgaWYgKGEuZGlyZWN0aW9uICE9PSBiLmRpcmVjdGlvbikge1xuICAvLyAgICAgICByZXR1cm4gYS5kaXJlY3Rpb24gLSBiLmRpcmVjdGlvbjtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNvbnN0IGFUaW1lID0gbW9tZW50KGEuYXJyaXZhbERhdGVUaW1lKTtcbiAgLy8gICAgIGNvbnN0IGJUaW1lID0gbW9tZW50KGIuYXJyaXZhbERhdGVUaW1lKTtcbiAgLy8gICAgIGlmIChhVGltZS5pc0JlZm9yZShiVGltZSkpIHtcbiAgLy8gICAgICAgcmV0dXJuIC0xO1xuICAvLyAgICAgfVxuICAvLyAgICAgcmV0dXJuIGFUaW1lLmlzU2FtZShiVGltZSkgPyAwIDogMTtcbiAgLy8gICB9LFxuICAvLyAgIFtGbGlnaHRTb3J0VHlwZXMuUXVpY2tlc3RdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcbiAgLy8gICAgICAgPyBhLm91dGJvdW5kVG90YWxEdXJhdGlvbiAtIGIub3V0Ym91bmRUb3RhbER1cmF0aW9uXG4gIC8vICAgICAgIDogKGEuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBhLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCkgLVxuICAvLyAgICAgICAgICAgKGIuaW5ib3VuZFRvdGFsRHVyYXRpb24gPyBiLmluYm91bmRUb3RhbER1cmF0aW9uIDogMCk7XG4gIC8vICAgfSxcbiAgLy8gICBbRmxpZ2h0U29ydFR5cGVzLk1vc3REaXJlY3RdOiAoYTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0LCBiOiBGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQpID0+IHtcbiAgLy8gICAgIGlmIChhLmRpcmVjdGlvbiAhPT0gYi5kaXJlY3Rpb24pIHtcbiAgLy8gICAgICAgcmV0dXJuIGEuZGlyZWN0aW9uIC0gYi5kaXJlY3Rpb247XG4gIC8vICAgICB9XG4gIC8vICAgICByZXR1cm4gYS5kaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmRcbiAgLy8gICAgICAgPyBhLm91dGxlZ3MubGVuZ3RoIC0gYi5vdXRsZWdzLmxlbmd0aFxuICAvLyAgICAgICA6IChhLmlubGVncyB8fCBbXSkubGVuZ3RoIC0gKGIuaW5sZWdzIHx8IFtdKS5sZW5ndGg7XG4gIC8vICAgfVxuICAvLyB9O1xuICBwcml2YXRlIF9mYXJlVHlwZUFycmF5OiBWYWx1ZURpc3BsYXk8RmFyZVR5cGU+W10gPSBbXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuRmxleGlibGUsIGRpc3BsYXk6ICdGbGV4aWJsZScgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5MZWlzdXJlLCBkaXNwbGF5OiAnTGVpc3VyZScgfSxcbiAgICB7IHZhbHVlOiBGYXJlVHlwZS5Mb3dlc3QsIGRpc3BsYXk6ICdMb3dlc3QnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTmVnb3RpYXRlZCwgZGlzcGxheTogJ05lZ290aWF0ZWQnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuTm9uTmVnb3RpYXRlZCwgZGlzcGxheTogJ05vbi1OZWdvdGlhdGVkJyB9LFxuICAgIHsgdmFsdWU6IEZhcmVUeXBlLlJlcXVlc3RGYXJlUnVsZXMsIGRpc3BsYXk6ICdSZXF1ZXN0IEZhcmUgUnVsZXMnIH0sXG4gICAgeyB2YWx1ZTogRmFyZVR5cGUuU2VsZWN0QW5kUHJvLCBkaXNwbGF5OiAnU2VsZWN0ICYgUHJvJyB9XG4gIF07XG5cbiAgcHVibGljIG1pbmltdW1PdXRCb3VuZERhdGUgPSB7XG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxuICB9O1xuXG4gIHB1YmxpYyBtaW5pbXVtSW5Cb3VuZERhdGUgPSB7XG4gICAgeWVhcjogbW9tZW50KCkueWVhcigpLFxuICAgIG1vbnRoOiBtb21lbnQoKS5tb250aCgpICsgMSxcbiAgICBkYXk6IG1vbWVudCgpLmRhdGUoKVxuICB9O1xuICBwcml2YXRlIF9vdXREYXRlOiBOZ2JEYXRlU3RydWN0O1xuICBwcml2YXRlIF9vdXRUaW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2luRGF0ZTogTmdiRGF0ZVN0cnVjdDtcbiAgcHJpdmF0ZSBfaW5UaW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uQWlycG9ydDogYW55O1xuICBwcml2YXRlIF9kZXN0aW5hdGlvbkFpcnBvcnRGdWxsOiBzdHJpbmc7XG4gIHByaXZhdGUgX29yaWdpbkFpcnBvcnQ6IGFueTtcbiAgcHJpdmF0ZSBfb3JpZ2luQWlycG9ydEZ1bGw6IHN0cmluZztcbiAgcHJpdmF0ZSBfb3JpZ2luTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gIHByaXZhdGUgX2Rlc3RpbmF0aW9uTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gIHByaXZhdGUgX3ZpYUFpcnBvcnQ6IGFueTtcbiAgcHJpdmF0ZSBfdmlhQWlycG9ydEZ1bGw6IHN0cmluZztcbiAgcHJpdmF0ZSBfcGFzc2VuZ2VyczogYW55O1xuICAvLyBwcml2YXRlIGdyb3VwZWRPYmplY3Q6IEZsaWdodEl0aW5lcmFyeVdpdGhTZWxlY3RlZFtdO1xuICBwcm90ZWN0ZWQgcmVzdWx0UXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzO1xuICBwcm90ZWN0ZWQgX2dyb3VwZWQ6IEdyb3VwZWRGbGlnaHRzID0gbnVsbDtcbiAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBudWxsO1xuICBwcm90ZWN0ZWQgcmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgcHJvdGVjdGVkIG11bHRpUmVzdWx0c1Nlc3Npb25OYW1lID0gRmxpZ2h0RW50ZXJwcmlzZVNlYXJjaC5TVE9SQUdFX1NFU1NJT05fUkVTVUxUUztcbiAgc2VsZWN0ZWRHcm91cEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM7XG4gIHB1YmxpYyBvdXRib3VuZENhYmluQ2xhc3M6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9zaG93SG90ZWxGb3JtOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2ZldGNoaW5nUnVsZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaG90ZWxTZWFyY2hSZXF1ZXN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsdGVyczogQmVoYXZpb3JTdWJqZWN0PEZsaWdodEZpbHRlcnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChERUZBVUxUX0ZMSUdIVF9GSUxURVJTKTtcbiAgZHVyYWxTaW5nbGVGaWx0ZXI6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoREVGQVVMVF9GTElHSFRfRklMVEVSUyk7XG4gIHNjaGVkdWxlZEZpbHRlcnM6IEJlaGF2aW9yU3ViamVjdDxGbGlnaHRGaWx0ZXJzW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChbXSk7XG4gIHB1YmxpYyBvdXRib3VuZFNhbWVTZWFyY2hUcmFpbmxpbmVTdGF0aW9uczogUmFpbFN0YXRpb25bXTtcbiAgcHVibGljIGluYm91bmRTYW1lU2VhcmNoVHJhaW5saW5lU3RhdGlvbnM6IFJhaWxTdGF0aW9uW107XG5cbiAgY2hvb3NlbkRpc3BsYXlUeXBlOiBCZWhhdmlvclN1YmplY3Q8RmxpZ2h0RGlzcGxheVR5cGVzPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoXG4gICAgRmxpZ2h0RGlzcGxheVR5cGVzLnJldHVybnNcbiAgKTtcbiAgY3VycmVudFNvcnQ6IEZsaWdodFNvcnRUeXBlcztcbiAgY3VycmVudEZpbHRlcnM6IEZsaWdodEZpbHRlcnM7XG4gIGN1c3RvbVNjaGVkdWxlZEZpbHRlcnM6IEZsaWdodEZpbHRlcnNbXSA9IFtdO1xuICBzZWxlY3RlZEdyb3VwSWQ6IG51bWJlcjtcbiAgZXVyb3N0YXJGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkOiBib29sZWFuID0gZmFsc2U7XG4gIHJhaWxGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkOiBib29sZWFuID0gZmFsc2U7XG4gIGZhc3R0cmFja0Zyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFya2luZ0Zyb21GbGlnaHRTZWFyY2hQZXJmb3JtZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaG90ZWxGcm9tRmxpZ2h0U2VhcmNoUGVyZm9ybWVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3J1bGVBY3Rpb25TdW1tYXJ5OiBSdWxlQWN0aW9uU3VtbWFyeUludGVyZmFjZTtcbiAgbXVsdGk6IEZsaWdodE11bHRpW107XG4gIHNlYXJjaEJ5U2NoZWR1bGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zW11bXSA9IFtdO1xuICBzZWxlY3RlZFNlZ21lbnQ6IG51bWJlciA9IDA7XG4gIHNzb1NlYXJjaGVkID0gZmFsc2U7XG4gIF9jaGVhcGVzdFByaWNlT2JqZWN0OiBJQ2hlYXBlc3RQcmljZU9iamVjdCA9IHtcbiAgICBkdWFsT3V0Ym91bmQ6IHtcbiAgICAgIGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICBjdXJyZW5jeUNvZGU6ICdHQlAnLFxuICAgICAgZmxpZ2h0OiBudWxsXG4gICAgfSxcbiAgICBkdWFsSW5ib3VuZDoge1xuICAgICAgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgIGN1cnJlbmN5Q29kZTogJ0dCUCcsXG4gICAgICBmbGlnaHQ6IG51bGxcbiAgICB9LFxuICAgIHJldHVybnM6IHtcbiAgICAgIGFtb3VudDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgICBjdXJyZW5jeUNvZGU6ICdHQlAnLFxuICAgICAgZmxpZ2h0OiBudWxsXG4gICAgfVxuICB9O1xuICBncmVlbmVyQ2hvaWNlOiBHcmVlbmVyQ2hvaWNlSW1wbDtcbiAgaXNMb2FkaW5nU1NPOiBib29sZWFuO1xuXG4gIHB1YmxpYyBnZXQgc2hvd0NhYmluQ2xhc3NTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgLy8gbm8gc2V0dGVyIC0gc2V0IGJ5IFVpIENvbmZpZ1xuICAgIHJldHVybiB0aGlzLl9zaG93Q2FiaW5DbGFzc1NlbGVjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd1ByZWZlcnJlZEFpcmxpbmVzKCk6IGJvb2xlYW4ge1xuICAgIC8vIG5vIHNldHRlciAtIHNldCBieSBVaSBDb25maWdcbiAgICByZXR1cm4gdGhpcy5fc2hvd1ByZWZlcnJlZEFpcmxpbmVzO1xuICB9XG5cbiAgcHVibGljIGdldCBmZXRjaGluZ1J1bGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mZXRjaGluZ1J1bGVzO1xuICB9XG5cbiAgcHVibGljIHNldCBmZXRjaGluZ1J1bGVzKG5ld1ZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2ZldGNoaW5nUnVsZXMgPSBuZXdWYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoZWFwZXN0UHJpY2VPYmplY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWFwZXN0UHJpY2VPYmplY3Q7XG4gIH1cbiAgcHVibGljIGdldCB0aW1lQXJyYXkoKSB7XG4gICAgdGhpcy5fdGltZUFycmF5ID1cbiAgICAgIHRoaXMuX3RpbWVBcnJheSB8fFxuICAgICAgQXJyYXkoOTYpXG4gICAgICAgIC5maWxsKDApXG4gICAgICAgIC5tYXAoKF8sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgIE1hdGguZmxvb3IoaW5kZXggLyA0KVxuICAgICAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLnBhZFN0YXJ0KDIsICcwJykgK1xuICAgICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgICAoKGluZGV4ICUgNCkgKiAxNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxuICAgICAgICAgICAgZGlzcGxheTpcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcihpbmRleCAvIDQpXG4gICAgICAgICAgICAgICAgLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucGFkU3RhcnQoMiwgJzAnKSArXG4gICAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICAgICgoaW5kZXggJSA0KSAqIDE1KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5fdGltZUFycmF5O1xuICB9XG5cbiAgcHVibGljIGdldCBwcmVmZXJyZWRDYXJyaWVycygpOiBPQlRBaXJsaW5lc0RldGFpbHNbXSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVycztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcHJlZmVycmVkQ2FycmllcnModmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlsc1tdKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBvcGVyYXRvcjEoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzBdO1xuICB9XG5cbiAgcHVibGljIHNldCBvcGVyYXRvcjEodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1swXSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG9wZXJhdG9yMigpOiBPQlRBaXJsaW5lc0RldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMV07XG4gIH1cblxuICBwdWJsaWMgc2V0IG9wZXJhdG9yMih2YWx1ZTogT0JUQWlybGluZXNEZXRhaWxzKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzFdID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG4gIHB1YmxpYyBnZXQgb3BlcmF0b3IzKCk6IE9CVEFpcmxpbmVzRGV0YWlscyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1syXTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3BlcmF0b3IzKHZhbHVlOiBPQlRBaXJsaW5lc0RldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnNbMl0gPSB2YWx1ZTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cbiAgcHVibGljIGdldCBvcGVyYXRvcjQoKTogT0JUQWlybGluZXNEZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnByZWZlcnJlZENhcnJpZXJzWzNdO1xuICB9XG5cbiAgcHVibGljIHNldCBvcGVyYXRvcjQodmFsdWU6IE9CVEFpcmxpbmVzRGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5wcmVmZXJyZWRDYXJyaWVyc1szXSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX21pbkRhdGU6IE5nYkRhdGVTdHJ1Y3Q7XG4gIHB1YmxpYyBnZXQgbWluRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICB0aGlzLl9taW5EYXRlID0gdGhpcy5fbWluRGF0ZSB8fCB0aGlzLmhlbHBlcnMubW9tZW50VG9OZ0RhdGUobW9tZW50KCkpO1xuICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICB9XG5cbiAgcHVibGljIGdldCBhZHVsdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFkdWx0cztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgYWR1bHRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYWR1bHRzID0gTnVtYmVyKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hpbGRyZW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuO1xuICB9XG5cbiAgcHVibGljIHNldCBjaGlsZHJlbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gTnVtYmVyKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZVRyYXZlbGxlcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0TG9jYXRpb24oKTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZGVwYXJ0TG9jYXRpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IGRlcGFydExvY2F0aW9uKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy5kZXBhcnRMb2NhdGlvbiA9IHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gJyc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XG4gICAgICB0aGlzLl9vcmlnaW5BaXJwb3J0ID0gdmFsdWUuZ2F0ZXdheTtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnRGdWxsID0gdmFsdWUuZGVzdGluYXRpb247XG4gICAgICB0aGlzLl9vcmlnaW5Mb2NhdGlvblR5cGUgPSB2YWx1ZS5sb2NhdGlvblR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBnZXQgc2hvd1ZpYSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnNob3dWaWE7XG4gIH1cblxuICBzZXQgc2hvd1ZpYShzaG93VmlhOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLnNob3dWaWEgPSBzaG93VmlhO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlhKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLnZpYTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmlhKHZhbHVlOiBzdHJpbmcgfCBPQlRBaXJwb3J0RGV0YWlscykge1xuICAgIHRoaXMudGVtcFBhcmFtcy52aWEgPSB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fdmlhQWlycG9ydCA9ICcnO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUuZ2F0ZXdheSkge1xuICAgICAgdGhpcy5fdmlhQWlycG9ydCA9IHZhbHVlLmdhdGV3YXk7XG4gICAgICB0aGlzLl92aWFBaXJwb3J0RnVsbCA9IHZhbHVlLmRlc3RpbmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92aWFBaXJwb3J0ID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeU9yaWdpbkFpcG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vcmlnaW5BaXJwb3J0O1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeURlc3RpbmF0aW9uQWlwb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0RGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5fb3V0RGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGVwYXJ0RGF0ZSh2YWx1ZTogTmdiRGF0ZVN0cnVjdCkge1xuICAgIHRoaXMuX291dERhdGUgPSB2YWx1ZTtcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9vdXREYXRlLCB0aGlzLl9vdXRUaW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVwYXJ0VGltZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9vdXRUaW1lO1xuICB9XG5cbiAgcHVibGljIHNldCBkZXBhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vdXRUaW1lID0gdmFsdWU7XG4gICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmhlbHBlcnMubmdEYXRlVG9Nb21lbnQodGhpcy5fb3V0RGF0ZSwgdGhpcy5fb3V0VGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dEJvdW5kRGF0ZSgpOiBtb21lbnQuTW9tZW50IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgb3V0Qm91bmREYXRlKHZhbHVlOiBtb21lbnQuTW9tZW50KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSA9IHZhbHVlLmlzVmFsaWQoKSA/IHZhbHVlIDogbnVsbDtcbiAgICB0aGlzLm1pbmltdW1JbkJvdW5kRGF0ZSA9IHtcbiAgICAgIHllYXI6IHZhbHVlLnllYXIoKSxcbiAgICAgIG1vbnRoOiB2YWx1ZS5tb250aCgpICsgMSxcbiAgICAgIGRheTogdmFsdWUuZGF0ZSgpXG4gICAgfTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUgJiZcbiAgICAgIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSAmJlxuICAgICAgdGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZS5pc0FmdGVyKHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuaW5ib3VuZERhdGUgPSBtb21lbnQodGhpcy50ZW1wUGFyYW1zLm91dEJvdW5kRGF0ZSkuYWRkKDEsICdkYXknKTtcbiAgICB9XG4gICAgdGhpcy5fb3V0RGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRUb05nRGF0ZSh2YWx1ZSk7XG4gICAgdGhpcy5fb3V0VGltZSA9IHRoaXMuaGVscGVycy5mb3JtYXRUaW1lQ29sb24odmFsdWUpO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmV0dXJuRGF0ZSgpOiBOZ2JEYXRlU3RydWN0IHtcbiAgICByZXR1cm4gdGhpcy5faW5EYXRlO1xuICB9XG5cbiAgcHVibGljIHNldCByZXR1cm5EYXRlKHZhbHVlOiBOZ2JEYXRlU3RydWN0KSB7XG4gICAgdGhpcy5faW5EYXRlID0gdmFsdWU7XG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5uZ0RhdGVUb01vbWVudCh0aGlzLl9pbkRhdGUsIHRoaXMuX2luVGltZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFycml2ZVRpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faW5UaW1lO1xuICB9XG5cbiAgcHVibGljIHNldCBhcnJpdmVUaW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pblRpbWUgPSB2YWx1ZTtcbiAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5oZWxwZXJzLm5nRGF0ZVRvTW9tZW50KHRoaXMuX2luRGF0ZSwgdGhpcy5faW5UaW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5ib3VuZERhdGUoKTogbW9tZW50Lk1vbWVudCB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW5ib3VuZERhdGUodmFsdWU6IG1vbWVudC5Nb21lbnQpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUgPSB2YWx1ZS5pc1ZhbGlkKCkgPyB2YWx1ZSA6IG51bGw7XG4gICAgdGhpcy5faW5EYXRlID0gdGhpcy5oZWxwZXJzLm1vbWVudFRvTmdEYXRlKHZhbHVlKTtcbiAgICB0aGlzLl9pblRpbWUgPSB0aGlzLmhlbHBlcnMuZm9ybWF0VGltZUNvbG9uKHZhbHVlKTtcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFycml2ZUxvY2F0aW9uKCk6IHN0cmluZyB8IE9CVEFpcnBvcnREZXRhaWxzIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmFycml2ZUxvY2F0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBhcnJpdmVMb2NhdGlvbih2YWx1ZTogc3RyaW5nIHwgT0JUQWlycG9ydERldGFpbHMpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYXJyaXZlTG9jYXRpb24gPSB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ID0gJyc7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnRGdWxsID0gJyc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB2YWx1ZS5nYXRld2F5KSB7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQgPSB2YWx1ZS5nYXRld2F5O1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0RnVsbCA9IHZhbHVlLmRlc3RpbmF0aW9uO1xuICAgICAgdGhpcy5fZGVzdGluYXRpb25Mb2NhdGlvblR5cGUgPSB2YWx1ZS5sb2NhdGlvblR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9IG51bGw7XG4gICAgICB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnRGdWxsID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuY2FiaW5DbGFzcztcbiAgfVxuXG4gIHNldCBjYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IHJldHVybkNhYmluQ2xhc3MoKTogRmxpZ2h0Q2FiaW5DbGFzcyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMucmV0dXJuQ2FiaW5DbGFzcztcbiAgfVxuXG4gIHNldCByZXR1cm5DYWJpbkNsYXNzKHZhbHVlOiBGbGlnaHRDYWJpbkNsYXNzIHwgbnVsbCkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IGNob3NlblNlYXJjaFR5cGUoKTogRmxpZ2h0U2VhcmNoVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlO1xuICB9XG5cbiAgc2V0IGNob3NlblNlYXJjaFR5cGUodHlwZTogRmxpZ2h0U2VhcmNoVHlwZSkge1xuICAgIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID0gdHlwZTtcblxuICAgIGlmICh0eXBlICE9PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSkge1xuICAgICAgdGhpcy5tdWx0aURlc3RpbmF0aW9uID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3JpZzogbnVsbCxcbiAgICAgICAgICBkZXN0OiBudWxsLFxuICAgICAgICAgIGRhdGU6IG1vbWVudCh0aGlzLmhlbHBlcnMubW9tZW50Um91bmRNaW51dGVzKHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgpLCAzMCkpLFxuICAgICAgICAgIG91dFRpbWVDcml0ZXJpYTogVGltZVdpbmRvdy5EZXBhcnQsXG4gICAgICAgICAgb3V0VGltZUZsZXhpYmlsaXR5OiAyXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnOiBudWxsLFxuICAgICAgICAgIGRlc3Q6IG51bGwsXG4gICAgICAgICAgZGF0ZTogbW9tZW50KHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModGhpcy5oZWxwZXJzLm1ha2VNb21lbnREYXlUaW1lKCksIDMwKSksXG4gICAgICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkRlcGFydCxcbiAgICAgICAgICBvdXRUaW1lRmxleGliaWxpdHk6IDJcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNSZXR1cm4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybjtcbiAgfVxuXG4gIGdldCBvdXRUaW1lQ3JpdGVyaWEoKTogVGltZVdpbmRvdyB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWE7XG4gIH1cblxuICBzZXQgb3V0VGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVDcml0ZXJpYSA9IHZhbHVlO1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIGdldCBpblRpbWVDcml0ZXJpYSgpOiBUaW1lV2luZG93IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhO1xuICB9XG5cbiAgc2V0IGluVGltZUNyaXRlcmlhKHZhbHVlOiBUaW1lV2luZG93KSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IG91dFRpbWVGbGV4aWJpbGl0eSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUZsZXhpYmlsaXR5O1xuICB9XG5cbiAgc2V0IG91dFRpbWVGbGV4aWJpbGl0eSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm91dFRpbWVGbGV4aWJpbGl0eSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGluVGltZUZsZXhpYmlsaXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pblRpbWVGbGV4aWJpbGl0eTtcbiAgfVxuXG4gIHNldCBpblRpbWVGbGV4aWJpbGl0eSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUZsZXhpYmlsaXR5ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgbWF4Q29ubmVjdGlvbnMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm1heENvbm5lY3Rpb25zO1xuICB9XG5cbiAgc2V0IG1heENvbm5lY3Rpb25zKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX211bHRpRGVzdGluYXRpb246IERlc3RpbmF0aW9uRW50cnlbXSA9IFtdO1xuICBnZXQgbXVsdGlEZXN0aW5hdGlvbigpOiBJTXVsdGlEZXN0aW5hdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb247XG4gIH1cblxuICBzZXQgbXVsdGlEZXN0aW5hdGlvbih2YWx1ZUFycmF5OiBJTXVsdGlEZXN0aW5hdGlvbltdKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24gPSB2YWx1ZUFycmF5O1xuICAgIHRoaXMuX2lzVmFsaWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd0hvdGVsRm9ybSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0hvdGVsRm9ybTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgc2hvd0hvdGVsRm9ybShuZXdWYWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93SG90ZWxGb3JtID0gbmV3VmFsO1xuICB9XG5cbiAgcHVibGljIGdldCBob3RlbFNlYXJjaFJlcXVlc3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faG90ZWxTZWFyY2hSZXF1ZXN0ZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGhvdGVsU2VhcmNoUmVxdWVzdGVkKG5ld1ZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2hvdGVsU2VhcmNoUmVxdWVzdGVkID0gbmV3VmFsO1xuICB9XG5cbiAgc2V0TXVsdGlEZXN0aW5hdGlvblF1ZXJ5KG11bHRpRGVzdGluYXRpb246IElNdWx0aURlc3RpbmF0aW9uW10pOiBEZXN0aW5hdGlvbkVudHJ5W10ge1xuICAgIGNvbnN0IG5ld011bHRpRGVzdGluYXRpb24gPSB0aGlzLmhlbHBlcnMuY2xvbmUobXVsdGlEZXN0aW5hdGlvbik7XG4gICAgcmV0dXJuIG5ld011bHRpRGVzdGluYXRpb24ucmVkdWNlKFxuICAgICAgKGRlc3RpbmF0aW9uQXJyYXk6IERlc3RpbmF0aW9uRW50cnlbXSwgaXRlbTogSU11bHRpRGVzdGluYXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb25PYmplY3QgPSB7fSBhcyBEZXN0aW5hdGlvbkVudHJ5O1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnID0gaXRlbS5vcmlnLmdhdGV3YXk7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRlc3QgPSBpdGVtLmRlc3QuZ2F0ZXdheTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3Qub3JpZ2luTG9jYXRpb25UeXBlID0gaXRlbS5vcmlnLmxvY2F0aW9uVHlwZTtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdGluYXRpb25Mb2NhdGlvblR5cGUgPSBpdGVtLmRlc3QubG9jYXRpb25UeXBlO1xuICAgICAgICBkZXN0aW5hdGlvbk9iamVjdC5vcmlnaW5BaXJwb3J0RnVsbCA9IGl0ZW0ub3JpZy5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGVzdGluYXRpb25BaXJwb3J0RnVsbCA9IGl0ZW0uZGVzdC5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb25PYmplY3QuZGF0ZSA9IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKGl0ZW0uZGF0ZSk7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmRlcGFydHVyZVRpbWVXaW5kb3cgPVxuICAgICAgICAgIGl0ZW0ub3V0VGltZUNyaXRlcmlhID09PSBUaW1lV2luZG93LkRlcGFydFxuICAgICAgICAgICAgPyB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgaXRlbS5kYXRlLFxuICAgICAgICAgICAgICAgIC1pdGVtLm91dFRpbWVGbGV4aWJpbGl0eSxcbiAgICAgICAgICAgICAgICBpdGVtLm91dFRpbWVGbGV4aWJpbGl0eVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0LmFycml2YWxUaW1lV2luZG93ID1cbiAgICAgICAgICBpdGVtLm91dFRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5BcnJpdmVcbiAgICAgICAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGl0ZW0uZGF0ZSwgLTIsIDIpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGRlc3RpbmF0aW9uT2JqZWN0Lm91dFRpbWVGbGV4aWJpbGl0eSA9XG4gICAgICAgICAgaXRlbS5vdXRUaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuQXJyaXZlXG4gICAgICAgICAgPyAyXG4gICAgICAgICAgOiBpdGVtLm91dFRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5EZXBhcnRcbiAgICAgICAgICA/IE51bWJlcihpdGVtLm91dFRpbWVGbGV4aWJpbGl0eSB8fCAwKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgZGVzdGluYXRpb25BcnJheS5wdXNoKGRlc3RpbmF0aW9uT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uQXJyYXk7XG4gICAgICB9LFxuICAgICAgW10gYXMgRGVzdGluYXRpb25FbnRyeVtdXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Nzb09iamVjdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IG51bGw7XG4gIHNldCBzc29PYmplY3QocXVlcnk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLl9zc29PYmplY3QgPSBxdWVyeTtcbiAgfVxuXG4gIGdldCBzc29PYmplY3QoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMuX3Nzb09iamVjdDtcbiAgfVxuICAvLyBnZXQgb25seVxuICBnZXQgc29ydERyb3Bkb3duVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGbGlnaHRTb3J0VHlwZXM+W10ge1xuICAgIHJldHVybiB0aGlzLl9zb3J0QXJyYXk7XG4gIH1cblxuICBnZXQgZmFyZVR5cGVzVmFsdWVzKCk6IFZhbHVlRGlzcGxheTxGYXJlVHlwZT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZhcmVUeXBlQXJyYXk7XG4gIH1cblxuICBnZXQgZmFyZVR5cGUoKTogRmFyZVR5cGUge1xuICAgIHJldHVybiB0aGlzLnRlbXBQYXJhbXMuZmFyZVR5cGU7XG4gIH1cblxuICBzZXQgZmFyZVR5cGUodmFsdWU6IEZhcmVUeXBlKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID0gdmFsdWU7XG4gICAgdGhpcy5faXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0IG5lZ290aWF0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX25lZ290aWF0ZWQ7XG4gIH1cblxuICBzZXQgbmVnb3RpYXRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX25lZ290aWF0ZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbmNsdWRlTmVhcmJ5QWlycG9ydHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5pbmNsdWRlTmVhcmJ5QWlycG9ydHM7XG4gIH1cblxuICBzZXQgaW5jbHVkZU5lYXJieUFpcnBvcnRzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy50ZW1wUGFyYW1zLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGJ5U2NoZWR1bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGVtcFBhcmFtcy5ieVNjaGVkdWxlO1xuICB9XG5cbiAgc2V0IGJ5U2NoZWR1bGUoZXh0cmE6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRlbXBQYXJhbXMuYnlTY2hlZHVsZSA9IGV4dHJhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmbGlnaHRmZXRjaGVyOiBCYXNlRmxpZ2h0UXVvdGVGZXRjaGVyPEZRX1E+LFxuICAgIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICB1c2VyU2VydmljZTogVXNlclNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgICBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgYXBwbHlGbGlnaHRSdWxlczogQmFzZUFwcGx5Sml0RmxpZ2h0UnVsZXNGZXRjaGVyPEFKRl9RPixcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZSxcbiAgICBwcml2YXRlIGdldEZsaWdodEV4dHJhc09wdGlvbnM6IEJhc2VHZXRGbGlnaHRFeHRyYXNPcHRpb25zRmV0Y2hlcjxHRkVPX0Y+LFxuICAgIHByaXZhdGUgZ2V0RmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyOiBCYXNlRmxpZ2h0U2VhcmNoRXhjaGFuZ2VGZXRjaGVyPEZTRV9GPixcbiAgICBwcml2YXRlIGdldEZsaWdodEV4Y2hhbmdlRGV0YWlsc0ZldGNoZXI6IEJhc2VGbGlnaHRFeGNoYW5nZURldGFpbHNGZXRjaGVyPEZFRF9GPixcbiAgICBwcml2YXRlIHVwZGF0ZUZsaWdodFNlYXRNYXBVcGRhdGVyOiBCYXNlVXBkYXRlRmxpZ2h0U2VhdE1hcFVwZGF0ZXI8VUZTX1U+XG4gICkge1xuICAgIHN1cGVyKHN0b3JhZ2VTZXJ2aWNlLCBoZWxwZXJzLCBzZWFyY2hTZXJ2aWNlLCB1c2VyU2VydmljZSk7XG5cbiAgICBjb25zdCBkYXRhOiB7XG4gICAgICB0ZW1wUGFyYW1zOiBGbGlnaHRUZW1wUGFyYW1zO1xuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiBGbGlnaHRUZW1wUGFyYW1zO1xuICAgIH0gPSBzdG9yYWdlU2VydmljZS5nZXRTZXNzaW9uSXRlbShGbGlnaHRFbnRlcnByaXNlU2VhcmNoLlNUT1JBR0VfU0VTU0lPTl9QQVJBTVMpIHx8IHtcbiAgICAgIHRlbXBQYXJhbXM6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXMsXG4gICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHt9IGFzIEZsaWdodFRlbXBQYXJhbXNcbiAgICB9O1xuXG4gICAgdGhpcy51c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMudXNlckNvbmZpZ3Muc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgY29uc29sZS5sb2coJysrKyBVc2VyIENvbmZpZ3MgR3JhYmJlZCArKysnKTtcbiAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgY29uc29sZS5sb2codGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3QoVXNlckZhdm9ydXJpdGUuRmxpZ2h0U2VhcmNoRGVmYXVsdHMpKTtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0RGVmYXVsdFZhbHVlID0gKFxuICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFVzZXJGYXZvcnVyaXRlLkZsaWdodFNlYXJjaERlZmF1bHRzKSBhcyBhbnlcbiAgICAgICAgKT8uZGlyZWN0QnlEZWZhdWx0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgcXVlcnkgPSBzZWFyY2hTZXJ2aWNlLm1ha2VGbGlnaHRRdWVyeShkYXRhLnRlbXBQYXJhbXMpO1xuICAgIHRoaXMudXBkYXRlVGVtcFBhcmFtcyhxdWVyeSk7XG4gICAgdGhpcy5fb3JpZ2luYWxVc2VyU2VhcmNoID0gZGF0YS5vcmlnaW5hbFVzZXJTZWFyY2g7XG4gICAgaWYgKHNlYXJjaFNlcnZpY2Uuc2hvdWxkQWRkVHJhdmVsbGVyU3Vic2NyaXB0aW9uKCkpIHtcbiAgICAgIHNlYXJjaFNlcnZpY2UudHJhdmVsbGVySW5mb3JtYXRpb24uc3Vic2NyaWJlKCh0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSkgPT4ge1xuICAgICAgICB0aGlzLnRyYXZlbGxlcnMgPSB0cmF2ZWxsZXJzO1xuICAgICAgICBjb25zdCBzcGxpdFRyYXZlbGxlcnMgPSB0aGlzLmhlbHBlcnMuc2VsZWN0ZWRUcmF2ZWxsZXJzKHRyYXZlbGxlcnMsIFNlcnZpY2VUeXBlLkZsaWdodCk7XG4gICAgICAgIHRoaXMudGVtcFBhcmFtcy5hZHVsdHMgPSBzcGxpdFRyYXZlbGxlcnMuYWR1bHRzLmxlbmd0aDtcbiAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmNoaWxkcmVuID0gc3BsaXRUcmF2ZWxsZXJzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgLy8gdGhpcy50ZW1wUGFyYW1zLmluZmFudHMgPSBzcGxpdFRyYXZlbGxlcnMuaW5mYW50cy5sZW5ndGg7XG4gICAgICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuICAgICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB1c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSgoX3VzZXI6IEZ1bGxVc2VyRGV0YWlscykgPT4ge1xuICAgICAgdGhpcy50aW1lQ3JpdGVyaWFPcHRpb25zLm5leHQoW1RpbWVXaW5kb3cuQW55dGltZSwgVGltZVdpbmRvdy5BcnJpdmUsIFRpbWVXaW5kb3cuRGVwYXJ0XSk7IC8vIFRPRE8gdXBkYXRlIHdpdGggYW55IFVGc1xuICAgICAgdGhpcy5mbGlnaHRPcGVyYXRvcnMubmV4dChbeyBjb2RlOiAnQkEnLCBuYW1lOiAnQnJpdGlzaCBBaXJ3YXlzJyB9XSk7IC8vIEZldGNoIHRoZXNlIGZyb20gREJcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRGVmYXVsdHMoKTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlVHJhdmVsbGVycygpO1xuXG4gICAgdGhpcy5uZWdvdGlhdGVkID0gdGhpcy50ZW1wUGFyYW1zLmZhcmVUeXBlID09PSBGYXJlVHlwZS5OZWdvdGlhdGVkID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0RmxpZ2h0RXhjaGFuZ2VTZWFyY2goXG4gICAgYmFza2V0SXRlbUlkOiBudW1iZXIsXG4gICAgb3V0Ym91bmREYXRlPzogc3RyaW5nLFxuICAgIGluYm91bmREYXRlPzogc3RyaW5nLFxuICAgIG91dGJvdW5kQ2xhc3M/OiBzdHJpbmcsXG4gICAgcmV0dXJuQ2xhc3M/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxGbGlnaHRKb3VybmV5RXhjaGFuZ2U+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRTZWFyY2hFeGNoYW5nZUZldGNoZXJcbiAgICAgIC5mZXRjaE9uZSh7XG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW1JZC50b1N0cmluZygpLFxuICAgICAgICBvdXRib3VuZERhdGUsXG4gICAgICAgIGluYm91bmREYXRlLFxuICAgICAgICBvdXRib3VuZENsYXNzLFxuICAgICAgICByZXR1cm5DbGFzc1xuICAgICAgfSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGdldEZsaWdodEV4Y2hhbmdlRGV0YWlscyhcbiAgICBiYXNrZXRJdGVtSWQ6IHN0cmluZyxcbiAgICBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zXG4gICk6IFByb21pc2U8RmxpZ2h0RXhjaGFuZ2VEZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmxpZ2h0RXhjaGFuZ2VEZXRhaWxzRmV0Y2hlclxuICAgICAgLmZldGNoT25lKHtcbiAgICAgICAgYmFza2V0SXRlbTogYCR7YmFza2V0SXRlbUlkfWAsXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeVxuICAgICAgfSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzUmVzdWx0cyhyZXN1bHRzOiBGbGlnaHRBbGxRdW90ZVJlc3VsdCk6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkge1xuICAgIHRoaXMuaXNMb2FkaW5nU1NPID0gZmFsc2U7XG4gICAgaWYgKCFyZXN1bHRzKSB7XG4gICAgICB0aGlzLl9ncm91cGVkID0gW107XG4gICAgICB0aGlzLm11bHRpID0gW107XG4gICAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gbnVsbDtcbiAgICAgIHRoaXMuc2VhcmNoQnlTY2hlZHVsZSA9IFtdO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0aGlzLl9ncm91cGVkID0gcmVzdWx0cy5ncm91cGVkIHx8IFtdO1xuICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBqb3VybmV5V2hlblNlbGVjdGVkOiB7fSxcbiAgICAgICAgZHVhbFNpbmdsZVdoZW5TZWxlY3RlZDoge30sXG4gICAgICAgIHdoZW5TZWxlY3RlZEFsb25lOiB7fVxuICAgICAgfSxcbiAgICAgIHJlc3VsdHMucnVsZUFjdGlvblN1bW1hcnkgfHwge31cbiAgICApO1xuXG4gICAgdGhpcy5yZXN1bHRRdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoKTtcbiAgICB0aGlzLm11bHRpID0gcmVzdWx0cy5tdWx0aTtcbiAgICBpZiAodGhpcy5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSkge1xuICAgICAgdGhpcy5pbml0TXVsdGlDaXR5U2VhcmNoQnlTY2hlZHVsZShyZXN1bHRzLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4pIHtcbiAgICAgIHRoaXMuaW5pdE11bHRpQ2l0eVNlYXJjaEJ5U2NoZWR1bGUocmVzdWx0cywgZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIGRlbGV0ZSB0aGlzLnJlc3VsdFF1ZXJ5Wyd3aXRoR3JvdXBlZCddO1xuICAgIGNvbnN0IGR1YWxTaW5nbGVzID0gcmVzdWx0cy5tdWx0aS5yZWR1Y2UoXG4gICAgICAoXG4gICAgICAgIHByZXZpb3VzSXRlbXM6IHtcbiAgICAgICAgICBvdXRib3VuZDogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+O1xuICAgICAgICAgIGluYm91bmQ6IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPjtcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dEl0ZW06IEl0aW5lcmFyeVN1bW1hcnlcbiAgICAgICkgPT4ge1xuICAgICAgICBwcmV2aW91c0l0ZW1zW25leHRJdGVtLm9yZGVyID09PSBPVVRCT1VORCA/ICdvdXRib3VuZCcgOiAnaW5ib3VuZCddID1cbiAgICAgICAgICBuZXh0SXRlbS5yZXN1bHRzLnJlZHVjZShcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgYWNjdW06IFJlY29yZDxudW1iZXIsIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPixcbiAgICAgICAgICAgICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1xuICAgICAgICAgICAgKTogUmVjb3JkPG51bWJlciwgRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnM+ID0+IHtcbiAgICAgICAgICAgICAgLy8gb25seSB0b3AgNSUgb2YgZmxpZ2h0IG5vdyB0aGV5IGFyZSBpbiBvcmRlciBzbyBpbmRleCA8IDUlIHRvdGFsXG4gICAgICAgICAgICAgIGFjY3VtW2ZsaWdodC51aWRdID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBjYW5TZWxlY3Q6IHRydWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZsaWdodFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJldmlvdXNJdGVtc1tuZXh0SXRlbS5vcmRlciA9PT0gT1VUQk9VTkQgPyAnb3V0Ym91bmQnIDogJ2luYm91bmQnXVxuICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiBwcmV2aW91c0l0ZW1zO1xuICAgICAgfSxcbiAgICAgIHsgb3V0Ym91bmQ6IHt9LCBpbmJvdW5kOiB7fSB9XG4gICAgKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkdWFsU2luZ2xlcyk7XG4gICAgY29uc3QgZHVhbEluYm91bmRGaWx0ZXJzID0gdGhpcy5oZWxwZXJzLmNyZWF0ZUZsaWdodEZpbHRlcnMoXG4gICAgICBPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLmluYm91bmQpLFxuICAgICAgREVGQVVMVF9GTElHSFRfRklMVEVSUyxcbiAgICAgIHRoaXMudmlhXG4gICAgKTtcblxuICAgIHRoaXMuZHVyYWxTaW5nbGVGaWx0ZXIubmV4dChcbiAgICAgIHRoaXMuaGVscGVycy5jcmVhdGVGbGlnaHRGaWx0ZXJzKFxuICAgICAgICBPYmplY3QudmFsdWVzKGR1YWxTaW5nbGVzLm91dGJvdW5kKSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLkRFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXG4gICAgICAgICAgcHJpY2U6IGR1YWxJbmJvdW5kRmlsdGVycy5wcmljZSxcbiAgICAgICAgICBhcnJpdmFsUmV0dXJuQWlycG9ydDogZHVhbEluYm91bmRGaWx0ZXJzLmFycml2YWxBaXJwb3J0LFxuICAgICAgICAgIGRlcGF0dXJlUmV0dXJuQWlycG9ydDogZHVhbEluYm91bmRGaWx0ZXJzLmRlcGF0dXJlQWlycG9ydCxcbiAgICAgICAgICByZXR1cm5BcnJpdmFsVGltZTogZHVhbEluYm91bmRGaWx0ZXJzLmFycml2YWxUaW1lLFxuICAgICAgICAgIHJldHVybkR1cmF0aW9uOiBkdWFsSW5ib3VuZEZpbHRlcnMuZHVyYXRpb24sXG4gICAgICAgICAgcmV0dXJuRGVwYXJ0dXJlVGltZTogZHVhbEluYm91bmRGaWx0ZXJzLmRlcGFydHVyZVRpbWVcbiAgICAgICAgfSxcbiAgICAgICAgKHRoaXMudmlhIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZ2F0ZXdheVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBkaXNwbGF5VHlwZSA9IHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHlcbiAgICA/IEZsaWdodERpc3BsYXlUeXBlcy5ieVByaWNlXG4gICAgOiAoIXJlc3VsdHMuam91cm5leXM/Lmxlbmd0aCAmJiAocmVzdWx0cy5tdWx0aVswXT8ucmVzdWx0cyB8fCByZXN1bHRzLm11bHRpWzFdPy5yZXN1bHRzKSlcbiAgICAgID8gRmxpZ2h0RGlzcGxheVR5cGVzLmR1YWxTaW5nbGVzXG4gICAgICA6IEZsaWdodERpc3BsYXlUeXBlcy5yZXR1cm5zO1xuXG4gICAgdGhpcy5zZXRGbGlnaHREaXNwbGF5VHlwZShkaXNwbGF5VHlwZSk7XG5cbiAgICB0aGlzLl9jaGVhcGVzdFByaWNlT2JqZWN0LnJldHVybnMgPSB0aGlzLmNyZWF0ZUNoZWFwZXN0UHJpY2UocmVzdWx0cy5qb3VybmV5cyk7XG4gICAgdGhpcy5fY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQgPSB0aGlzLmNyZWF0ZUNoZWFwZXN0UHJpY2UoXG4gICAgICByZXN1bHRzLm11bHRpWzBdPy5yZXN1bHRzIGFzIEZsaWdodEl0aW5lcmFyeVtdXG4gICAgKTtcbiAgICB0aGlzLl9jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kID0gdGhpcy5jcmVhdGVDaGVhcGVzdFByaWNlKFxuICAgICAgcmVzdWx0cy5tdWx0aVsxXT8ucmVzdWx0cyBhcyBGbGlnaHRJdGluZXJhcnlbXVxuICAgICk7XG5cbiAgICBsZXQgdXBkYXRlZFJlc3VsdHMgPSB7IC4uLnJlc3VsdHMgfTtcbiAgICB1cGRhdGVkUmVzdWx0cy5zZWFyY2hCeVNjaGVkdWxlID0gdGhpcy5zZWFyY2hCeVNjaGVkdWxlO1xuICAgIHRoaXMuZ3JlZW5lckNob2ljZSA9IG5ldyBHcmVlbmVyQ2hvaWNlSW1wbCh1cGRhdGVkUmVzdWx0cyk7XG4gICAgY29uc3QgcmVzdWx0c1dpdGhFeHRlbnNpb25zID0gdGhpcy5tYWRlRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnModXBkYXRlZFJlc3VsdHMpO1xuICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcbiAgICAgIHJlc3VsdHNXaXRoRXh0ZW5zaW9ucy5qb3VybmV5cyxcbiAgICAgIERFRkFVTFRfRkxJR0hUX0ZJTFRFUlMsXG4gICAgICAodGhpcy52aWEgYXMgT0JUQWlycG9ydERldGFpbHMpPy5nYXRld2F5XG4gICAgKTtcbiAgICB0aGlzLmZpbHRlcnMubmV4dCh0aGlzLmN1cnJlbnRGaWx0ZXJzKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSAhPT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXkgJiZcbiAgICAgIHJlc3VsdHNXaXRoRXh0ZW5zaW9ucy5zZWFyY2hCeVNjaGVkdWxlLmxlbmd0aFxuICAgICkge1xuICAgICAgdGhpcy5jdXN0b21TY2hlZHVsZWRGaWx0ZXJzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubXVsdGlEZXN0aW5hdGlvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmhlbHBlcnMuY3JlYXRlRmxpZ2h0RmlsdGVycyhcbiAgICAgICAgICByZXN1bHRzV2l0aEV4dGVuc2lvbnMuc2VhcmNoQnlTY2hlZHVsZVtpXSxcbiAgICAgICAgICBERUZBVUxUX0ZMSUdIVF9GSUxURVJTXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3VzdG9tU2NoZWR1bGVkRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICB9XG4gICAgICB0aGlzLnNjaGVkdWxlZEZpbHRlcnMubmV4dCh0aGlzLmN1c3RvbVNjaGVkdWxlZEZpbHRlcnMpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkUmVzdWx0cyA/IFt1cGRhdGVkUmVzdWx0c10gOiBbXTtcbiAgfVxuXG4gIGluaXRNdWx0aUNpdHlTZWFyY2hCeVNjaGVkdWxlKHJlc3VsdHM6IEZsaWdodEFsbFF1b3RlUmVzdWx0LCBpc011bHRpQ2l0eTogYm9vbGVhbikge1xuICAgIHRoaXMuc2VhcmNoQnlTY2hlZHVsZSA9IFtdO1xuICAgIGlmIChyZXN1bHRzPy5qb3VybmV5cy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLm11bHRpRGVzdGluYXRpb24ubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdHMuam91cm5leXMuZm9yRWFjaCgoZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgICAgIGNvbnN0IGZsaWdodHMgPSBpc011bHRpQ2l0eVxuICAgICAgICAgICAgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAob3V0Ym91bmRGbGlnaHQ6IEZsaWdodEpvdXJuZXkpID0+IG91dGJvdW5kRmxpZ2h0LnNlZ21lbnRHcm91cCA9PT0gaW5kZXhcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBpbmRleCA9PT0gMFxuICAgICAgICAgICAgPyBmbGlnaHQub3V0Ym91bmRGbGlnaHRzXG4gICAgICAgICAgICA6IGZsaWdodC5pbmJvdW5kRmxpZ2h0cztcblxuICAgICAgICAgIGlmICghdGhpcy5zZWFyY2hCeVNjaGVkdWxlW2luZGV4XSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hCeVNjaGVkdWxlW2luZGV4XSA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmbGlnaHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hCeVNjaGVkdWxlW2luZGV4XS5wdXNoKHtcbiAgICAgICAgICAgICAgcHJlZmVycmVkOiBmbGlnaHQucHJlZmVycmVkLFxuICAgICAgICAgICAgICBwcmVmZXJyZWRNZXNzYWdlczogZmxpZ2h0LnByZWZlcnJlZE1lc3NhZ2VzLFxuICAgICAgICAgICAgICBwcmVmZXJlbmNlTGV2ZWw6IGZsaWdodC5wcmVmZXJlbmNlTGV2ZWwsXG4gICAgICAgICAgICAgIHNvdXJjZTogZmxpZ2h0LnNvdXJjZSxcbiAgICAgICAgICAgICAgYmFnZ2FnZUFsbG93YW5jZTogZmxpZ2h0LmJhZ2dhZ2VBbGxvd2FuY2UsXG4gICAgICAgICAgICAgIGRpc2Nsb3N1cmVzOiBmbGlnaHQuZGlzY2xvc3VyZXMsXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWw6IGZsaWdodC5hZGRpdGlvbmFsLFxuICAgICAgICAgICAgICBmYXJlQ29uZGl0aW9uczogZmxpZ2h0LmZhcmVDb25kaXRpb25zLFxuICAgICAgICAgICAgICBvdXRib3VuZFRvdGFsRHVyYXRpb246IHRoaXMuaGVscGVycy5nZXRUaW1lRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICBmbGlnaHRzW2ZsaWdodHMubGVuZ3RoIC0gMV0/LmRhdGVUaW1lQXJyaXZpbmcsXG4gICAgICAgICAgICAgICAgZmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBvdXRib3VuZEZsaWdodHM6IGZsaWdodHMsXG4gICAgICAgICAgICAgIHNjaGVkdWxlSWQ6IGZsaWdodHNcbiAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS5pZClcbiAgICAgICAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgICAgICAgLmpvaW4oJywnKSxcbiAgICAgICAgICAgICAgY28yUGVySXRlbTogZmxpZ2h0cy5yZWR1Y2UoKGFjYywgb2JqKSA9PiBhY2MgKyBvYmouY28yUGVySXRlbSwgMCksXG4gICAgICAgICAgICAgIGNvMlBlclBhc3NlbmdlcjogZmxpZ2h0cy5yZWR1Y2UoKGFjYywgb2JqKSA9PiBhY2MgKyBvYmouY28yUGVyUGFzc2VuZ2VyLCAwKSxcbiAgICAgICAgICAgICAgam91cm5leUhhc2g6IGZsaWdodHNbMF0uam91cm5leUhhc2gsXG4gICAgICAgICAgICAgIHNhZlJhdGluZzogZmxpZ2h0c1swXS5zYWZSYXRpbmcsXG4gICAgICAgICAgICAgIGdyZWVuZXJDaG9pY2U6IGZhbHNlLFxuICAgICAgICAgICAgICBncmVlbmVyQ2hvaWNlUGVyY2VudGFnZTogMCxcbiAgICAgICAgICAgICAgc291cmNlSWQ6IGZsaWdodC5zb3VyY2VJZCxcbiAgICAgICAgICAgICAgaW5ib3VuZEZsaWdodHM6IFtdLFxuICAgICAgICAgICAgICB1aWQ6IG51bGwsXG4gICAgICAgICAgICAgIHRvdGFsOiB7IHByaWNlOiAwLCBjdXJyZW5jeTogbnVsbCB9LFxuICAgICAgICAgICAgICBwYXNzZW5nZXJDb3VudDogMCxcbiAgICAgICAgICAgICAgdmVyc2lvbjogJycsXG4gICAgICAgICAgICAgIHRtY1ByZWZlcnJlZExvZ29Vcmw6ICcnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKGZsaWdodDpGbGlnaHRJdGluZXJhcnksIHJ1bGVzOlJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlKSB7XG4gICAgY29uc3QgaXNEdWFsU2luZ2xlV2hlblNlbGVjdGVkICA9IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXTtcbiAgICBjb25zdCBpc0pvdXJuZXlXaGVuU2VsZWN0ZWQgPSB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgY29uc3QgaXNXaGVuU2VsZWN0ZWRBbG9uZSA9IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgaWYgKGlzRHVhbFNpbmdsZVdoZW5TZWxlY3RlZCkge1xuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdID0gcnVsZXMuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdO1xuICAgIH0gZWxzZSBpZiAoaXNKb3VybmV5V2hlblNlbGVjdGVkKSB7XG4gICAgICBpZiAocnVsZXMuam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdKSB7XG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXSA9IHJ1bGVzLmpvdXJuZXlXaGVuU2VsZWN0ZWRbZmxpZ2h0LmpvdXJuZXlIYXNoXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS5qb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1doZW5TZWxlY3RlZEFsb25lKSB7XG4gICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeS53aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdID0gcnVsZXMud2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hZGVGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhyZXN1bHRzOiBhbnkpOiBGbGlnaHRBbGxRdW90ZVJlc3VsdCB7XG4gICAgcmVzdWx0cy5qb3VybmV5cy5tYXAoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICBmbGlnaHRJdGVtID0gdGhpcy5hZGRSdWxlc1RvRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoZmxpZ2h0SXRlbSk7XG4gICAgfSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubXVsdGlEZXN0aW5hdGlvbi5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0cy5zZWFyY2hCeVNjaGVkdWxlW2ldPy5tYXAoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICAgIGZsaWdodEl0ZW0gPSB0aGlzLmFkZFJ1bGVzVG9GbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhmbGlnaHRJdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc3VsdHMubXVsdGlbMF0/LnJlc3VsdHMubWFwKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgZmxpZ2h0SXRlbSA9IHRoaXMuYWRkUnVsZXNUb0ZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKGZsaWdodEl0ZW0pO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0cy5tdWx0aVsxXT8ucmVzdWx0cy5tYXAoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICBmbGlnaHRJdGVtLnByZWZlcnJlZCA9IFByZWZlcnJlZEZsYWdzLm5vbmU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIHB1YmxpYyBhZGRSdWxlc1RvRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMoXG4gICAgaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgcnVsZXM6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlID0gdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgKTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMge1xuICAgIGNvbnN0IHsgam91cm5leVdoZW5TZWxlY3RlZCwgd2hlblNlbGVjdGVkQWxvbmUgfSA9IHJ1bGVzO1xuXG4gICAgY29uc3QgcnVsZVNvdXJjZSA9IGpvdXJuZXlXaGVuU2VsZWN0ZWRbaXRlbS5qb3VybmV5SGFzaF0gfHwgd2hlblNlbGVjdGVkQWxvbmVbaXRlbS5qb3VybmV5SGFzaF07XG5cbiAgICBpdGVtLnByZWZlcnJlZCA9IHJ1bGVTb3VyY2U/LmNvbXBhbnlQcmVmZXJyZWRcbiAgICAgID8gUHJlZmVycmVkRmxhZ3MuY29tcGFueVByZWZlcnJlZFxuICAgICAgOiBydWxlU291cmNlPy5vZmZpY2VQcmVmZXJyZWRcbiAgICAgID8gUHJlZmVycmVkRmxhZ3Mub2ZmaWNlUHJlZmVycmVkXG4gICAgICA6IHJ1bGVTb3VyY2U/LnRtY1ByZWZlcnJlZFxuICAgICAgPyBQcmVmZXJyZWRGbGFncy50bWNQcmVmZXJyZWRcbiAgICAgIDogUHJlZmVycmVkRmxhZ3Mubm9uZTtcblxuICAgIGl0ZW0ucHJlZmVycmVkTWVzc2FnZXMgPSB7XG4gICAgICBbUHJlZmVycmVkRmxhZ3MuY29tcGFueVByZWZlcnJlZF06IHJ1bGVTb3VyY2U/LmNvbXBhbnlQcmVmZXJyZWRNZXNzYWdlIHx8ICcnLFxuICAgICAgW1ByZWZlcnJlZEZsYWdzLm9mZmljZVByZWZlcnJlZF06IHJ1bGVTb3VyY2U/Lm9mZmljZVByZWZlcnJlZE1lc3NhZ2UgfHwgJycsXG4gICAgICBbUHJlZmVycmVkRmxhZ3MudG1jUHJlZmVycmVkXTogcnVsZVNvdXJjZT8udG1jUHJlZmVycmVkTWVzc2FnZSB8fCAnJyxcbiAgICAgIFtQcmVmZXJyZWRGbGFncy5hbGxdOiBgJHtydWxlU291cmNlPy5jb21wYW55UHJlZmVycmVkTWVzc2FnZSB8fCAnJ30gJHtydWxlU291cmNlPy5vZmZpY2VQcmVmZXJyZWRNZXNzYWdlIHx8ICcnfSAke3J1bGVTb3VyY2U/LnRtY1ByZWZlcnJlZE1lc3NhZ2UgfHwgJyd9YC50cmltKCksXG4gICAgICBbUHJlZmVycmVkRmxhZ3Mubm9uZV06ICcnXG4gICAgfTtcblxuICAgIGl0ZW0ucHJlZmVyZW5jZUxldmVsID0gK3J1bGVTb3VyY2U/LnByZWZlcmVuY2VMZXZlbCB8fCBudWxsO1xuICAgIGl0ZW0ucmVxdWlyZXNSZWFzb25LZXlzID0gcnVsZVNvdXJjZT8ucmVxdWlyZXNSZWFzb25LZXlzIHx8IFtdO1xuICAgIGl0ZW0ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyA9IHJ1bGVTb3VyY2U/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHwgW107XG4gICAgaXRlbS51bmF2YWlsYWJsZSA9IHJ1bGVTb3VyY2U/LnVuYXZhaWxhYmxlIHx8IGZhbHNlO1xuICAgIGl0ZW0udW5hdmFpbGFibGVNZXNzYWdlID0gcnVsZVNvdXJjZT8udW5hdmFpbGFibGVNZXNzYWdlIHx8ICcnO1xuICAgIGl0ZW0udG1jUHJlZmVycmVkTG9nb1VybCA9IHJ1bGVTb3VyY2U/LnRtY1ByZWZlcnJlZExvZ29VcmwgfHwgJyc7XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIG1ha2VTZXNzaW9uUmVzdWx0cyhkYXRhOiBGbGlnaHRRdW90ZVJlc3VsdEFycmF5KTogRmxpZ2h0U2Vzc2lvblR5cGUge1xuICAgIHJldHVybiB7XG4gICAgICByZXN1bHRzOiBkYXRhLFxuICAgICAgZ3JvdXBlZDogdGhpcy5fZ3JvdXBlZCxcbiAgICAgIHF1ZXJ5OiB0aGlzLnJlc3VsdFF1ZXJ5XG4gICAgfTtcbiAgfVxuXG4gIGdldE1heEZsaWdodFByaWNlRm9yQnJhbmQobWF0Y2hpbmdCcmFuZEZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdKTogbnVtYmVyIHtcbiAgICBsZXQgbWF4ID0gMDtcbiAgICBtYXRjaGluZ0JyYW5kRmxpZ2h0cy5mb3JFYWNoKGZsaWdodCA9PiB7XG4gICAgICBpZiAobWF4IDwgZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcbiAgICAgICAgbWF4ID0gZmxpZ2h0LnRvdGFsLnByaWNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtYXg7XG4gIH1cbiAgZ2V0TWluRmxpZ2h0UHJpY2VGb3JCcmFuZChtYXRjaGluZ0JyYW5kRmxpZ2h0czogRmxpZ2h0SXRpbmVyYXJ5W10pOiBudW1iZXIge1xuICAgIGxldCBtaW4gPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICBtYXRjaGluZ0JyYW5kRmxpZ2h0cy5mb3JFYWNoKGZsaWdodCA9PiB7XG4gICAgICBpZiAobWluID4gZmxpZ2h0Py50b3RhbD8ucHJpY2UpIHtcbiAgICAgICAgbWluID0gZmxpZ2h0LnRvdGFsLnByaWNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtaW47XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRRdWVyeShjaGVja0lzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVUZW1wUGFyYW1zKHRoaXMuc2VhcmNoU2VydmljZS5tYWtlRmxpZ2h0UXVlcnkoKSk7XG4gICAgaWYgKGNoZWNrSXNWYWxpZCkge1xuICAgICAgdGhpcy5faXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldFBhcmFtcygpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgdGhpcy5yZXNldFF1ZXJ5KCk7XG4gIH1cblxuICBwcml2YXRlIF9pc1ZhbGlkKCkge1xuICAgIGlmICghdGhpcy5kb0NoZWNrcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBbXTtcbiAgICB0aGlzLnZhbGlkYXRpb25GYXZvdXJpdGVNZXNzYWdlcyA9IFtdO1xuICAgIGlmICh0aGlzLnRlbXBQYXJhbXMuY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcbiAgICAgIHRoaXMubXVsdGlDaXR5VmFsaWRhdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuX29yaWdpbkFpcnBvcnQpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIGFkZCBpbiBhIGRlcGFydHVyZSBsb2NhdGlvbicsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnQpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnUGxlYXNlIGFkZCBpbiBhbiBhcnJpdmFsIGRlc3RpbmF0aW9uJywgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUuaXNBZnRlcihtb21lbnQoKSkpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uTWVzc2FnZSgnRGVwYXJ0dXJlIGRhdGUgY2FuIG5vdCBiZSBpbiB0aGUgcGFzdCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuX29yaWdpbkFpcnBvcnQgJiZcbiAgICAgICAgdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0ICYmXG4gICAgICAgIHRoaXMuX2Rlc3RpbmF0aW9uQWlycG9ydCA9PT0gdGhpcy5fb3JpZ2luQWlycG9ydFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ09yaWdpbiBhbmQgZGVzdGluYXRpb24gYWlycG9ydCBjYW5ub3QgYmUgdGhlIHNhbWUnLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmluYm91bmREYXRlLmRpZmYodGhpcy5vdXRCb3VuZERhdGUsICdzZWNvbmRzJykgPD0gMCAmJlxuICAgICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSAhPT0gVGltZVdpbmRvdy5Bbnl0aW1lICYmXG4gICAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgIT09IFRpbWVXaW5kb3cuQW55dGltZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoXG4gICAgICAgICAgJ1RoZSB0aW1lIG9mIGFycml2YWwgY2Fubm90IGJlIGxlc3MgdGhhbiB0aGUgdGltZSBvZiBkZXBhcnR1cmUnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlzUmV0dXJuKSB7XG4gICAgICAgIC8vIFRPRE8gY2hlY2sgdGhhdCByZXR1cm4gZGV0YWlscyBhcmUgc2V0XG4gICAgICAgIGlmICh0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLmlzU2FtZU9yQWZ0ZXIodGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhKSkge1xuICAgICAgICAgIHRoaXMuYWRkVmFsaWRhdGlvbk1lc3NhZ2UoJ1JldHVybiBkYXRlIG11c3QgYmUgYWZ0ZXIgdGhlIGRlcGFydHVyZSBkYXRlJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc1ZhbGlkLm5leHQodGhpcy52YWxpZGF0aW9uTWVzc2FnZXMubGVuZ3RoID09PSAwKTtcbiAgICB0aGlzLmlzRmF2b3VyaXRlVmFsaWQubmV4dCh0aGlzLnZhbGlkYXRpb25GYXZvdXJpdGVNZXNzYWdlcy5sZW5ndGggPT09IDApO1xuICAgIHRoaXMubWVzc2FnZXMubmV4dCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlcyk7XG4gIH1cblxuICBtdWx0aUNpdHlWYWxpZGF0aW9uKCkge1xuICAgIGxldCBpc2VtcHR5VmFsdWUgPSBmYWxzZTtcbiAgICBsZXQgaXNlbXB0eUxhbmRpbmcgPSBmYWxzZTtcbiAgICBsZXQgaXNTYW1lVmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbi5tYXAoKGVsZW1lbnQsIGkpID0+IHtcbiAgICAgIGlmICghZWxlbWVudC5vcmlnKSB7XG4gICAgICAgIGlzZW1wdHlWYWx1ZSA9IHRydWU7XG4gICAgICAgIGlmIChpIDwgMikge1xuICAgICAgICAgIGlzZW1wdHlMYW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQub3JpZyA9PT0gZWxlbWVudC5kZXN0KSBpc1NhbWVWYWx1ZSA9IHRydWU7XG4gICAgfSk7XG4gICAgaWYgKCFtb21lbnQodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb25bMF0uZGF0ZSkuaXNBZnRlcihtb21lbnQoKSkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ0RlcGFydHVyZSBkYXRlIGNhbiBub3QgYmUgaW4gdGhlIHBhc3QnKTtcbiAgICB9XG4gICAgaWYgKGlzZW1wdHlMYW5kaW5nKSB0aGlzLnZhbGlkYXRpb25NZXNzYWdlcy5wdXNoKCdQbGVhc2Ugc2VsZWN0IGxhbmRpbmcgYWlycG9ydChzKScpO1xuICAgIGlmIChpc2VtcHR5VmFsdWUpIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1BsZWFzZSBzZWxlY3QgdGFrZSBvZmYgYWlycG9ydChzKScpO1xuICAgIGlmIChpc1NhbWVWYWx1ZSlcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2VzLnB1c2goJ1Rha2Ugb2ZmIGFuZCBsYW5kaW5nIGxvY2F0aW9uKHMpIGNhbm5vdCBiZSB0aGUgc2FtZScpO1xuICB9XG4gIHN0YXJ0U2VhcmNoKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcbiAgICB0aGlzLnNlbGVjdGVkRmxpZ2h0Lm5leHQobnVsbCk7XG4gICAgY29uc3Qgc3M6IGFueSA9IHRoaXMuc3NvT2JqZWN0O1xuICAgIGlmIChzcyAmJiAhc3Muc2VhcmNoZWQpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nU1NPID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybignKysrIFN0YXJ0aW5nIHNlYXJjaCBmcm9tIHNzbyBvYmplY3QgKysrJyk7XG4gICAgICBzcy5zZWFyY2hlZCA9IHRydWU7XG4gICAgICB0aGlzLmZhcmVUeXBlID0gc3MuZmFyZVR5cGUgYXMgRmFyZVR5cGU7XG4gICAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHNzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgLy8gdGhpcy5fb3JpZ2luQWlycG9ydD0gc3Mub3JpZ2luQWlycG9ydDtcbiAgICAgIHRoaXMub3V0Ym91bmRDYWJpbkNsYXNzID0gc3Mub3V0Ym91bmRDYWJpbkNsYXNzO1xuICAgICAgdGhpcy5jYWJpbkNsYXNzID0gc3Mub3V0Ym91bmRDYWJpbkNsYXNzO1xuICAgICAgY29uc3Qgc3BsaXRPdXREYXRlID0gc3Mub3V0Ym91bmREYXRlLnNwbGl0KCctJyk7XG4gICAgICBjb25zdCBvdXREYXRlT2JqID0ge1xuICAgICAgICB5ZWFyOiArc3BsaXRPdXREYXRlWzBdLFxuICAgICAgICBtb250aDogK3NwbGl0T3V0RGF0ZVsxXSxcbiAgICAgICAgZGF5OiArc3BsaXRPdXREYXRlWzJdXG4gICAgICB9O1xuICAgICAgdGhpcy5kZXBhcnREYXRlID0gb3V0RGF0ZU9iajtcbiAgICAgIHRoaXMuZGVwYXJ0VGltZSA9IGAke3NzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvdy5zdWJzdHIoXG4gICAgICAgIDAsXG4gICAgICAgIDJcbiAgICAgICl9OiR7c3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93LnN1YnN0cigyLCAyKX1gO1xuICAgICAgdGhpcy5yZXR1cm5DYWJpbkNsYXNzID0gc3MucmV0dXJuQ2FiaW5DbGFzcyBhcyBGbGlnaHRDYWJpbkNsYXNzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3BsaXRSZXREYXRlID0gc3MucmV0dXJuRGF0ZS5zcGxpdCgnLScpO1xuICAgICAgICBjb25zdCBSZXREYXRlT2JqID0ge1xuICAgICAgICAgIHllYXI6ICtzcGxpdFJldERhdGVbMF0sXG4gICAgICAgICAgbW9udGg6ICtzcGxpdFJldERhdGVbMV0sXG4gICAgICAgICAgZGF5OiArc3BsaXRSZXREYXRlWzJdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucmV0dXJuRGF0ZSA9IFJldERhdGVPYmo7XG4gICAgICAgIHRoaXMuYXJyaXZlVGltZSA9IGAke3NzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cuc3Vic3RyKFxuICAgICAgICAgIDAsXG4gICAgICAgICAgMlxuICAgICAgICApfToke3NzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3cuc3Vic3RyKDIsIDIpfWA7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oYCsrKyBVbmFibGUgdG8gc3BsaXQgcmV0dXJuIGRhdGUgLSBtYXkgbm90IGhhdmUgYmVlbiBwcm92aWRlZCArKytgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubWF4Q29ubmVjdGlvbnMgPSBzcy5tYXhDb25uZWN0aW9ucyA9PT0gMCA/IDAgOiBudWxsO1xuICAgICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gc3MucmV0dXJuVHJpcCA9PT0gJ3RydWUnID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTtcbiAgICAgIGNvbnNvbGUud2FybihgKysrIFJlY292ZXJpbmcgc3NvIG9yaWdpbiBhaXJwb3J0OiAke3NzLm9yaWdpbkFpcnBvcnR9ICsrK2ApO1xuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRzTGlzdChzcy5vcmlnaW5BaXJwb3J0KS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3VsdHMgPT4ge1xuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSAocmVzdWx0cyBhcyBhbnlbXSkuZmluZChhID0+IGEuZ2F0ZXdheSA9PSBzcy5vcmlnaW5BaXJwb3J0KTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYCsrKyBSZWNvdmVyaW5nIHNzbyBkZXN0aW5hdGlvbiBhaXJwb3J0OiAke3NzLmRlc3RpbmF0aW9uQWlycG9ydH0gKysrYCk7XG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEFpcnBvcnRzTGlzdChzcy5kZXN0aW5hdGlvbkFpcnBvcnQpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gKHJlc3VsdHMgYXMgYW55W10pLmZpbmQoXG4gICAgICAgICAgICAgICAgYSA9PiBhLmdhdGV3YXkgPT0gc3MuZGVzdGluYXRpb25BaXJwb3J0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMuX2lzVmFsaWQoKTtcblxuICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCcrKysgU1NPIHNlYXJjaCBpcyB2YWxpZCArKysnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcmlnaW5hbFVzZXJTZWFyY2ggPSBPYmplY3QuZnJlZXplKHRoaXMuaGVscGVycy5jbG9uZSh0aGlzLnRlbXBQYXJhbXMpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgICAgICAgICAgICAgdGVtcFBhcmFtczogdGhpcy50ZW1wUGFyYW1zLFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxVc2VyU2VhcmNoOiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeShcbiAgICAgICAgICAgICAgICAgIHNzXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0Ym91bmRUaW1lV2luZG93OiBzcy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3csXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UaW1lV2luZG93OiBzcy5yZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zc29PYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCcrKysgc3RhcnRpbmcgc3NvIHNlYXJjaCArKysnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRTZWFyY2godGhpcy5mbGlnaHRmZXRjaGVyLmZldGNoTGlzdChxdWVyeSkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJysrKyBTZWFyY2ggaXMgaW52YWxpZDogJywgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMsICcgKysrJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdTU08gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIHJlY292ZXJpbmcgZGVzdGluYXRpb24gYWlycG9ydDogJHtlcnJvcn0gKysrYCk7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nU1NPID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciByZWNvdmVyaW5nIG9yaWdpbiBhaXJwb3J0OiAke2Vycm9yfSArKytgKTtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZ1NTTyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuX29yaWdpbmFsVXNlclNlYXJjaCA9IE9iamVjdC5mcmVlemUodGhpcy5oZWxwZXJzLmNsb25lKHRoaXMudGVtcFBhcmFtcykpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25JdGVtKEZsaWdodEVudGVycHJpc2VTZWFyY2guU1RPUkFHRV9TRVNTSU9OX1BBUkFNUywge1xuICAgICAgICAgIHRlbXBQYXJhbXM6IHRoaXMudGVtcFBhcmFtcyxcbiAgICAgICAgICBvcmlnaW5hbFVzZXJTZWFyY2g6IHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuZ2V0U2VhcmNoUXVlcnkoXG4gICAgICAgICAgc3NcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIG91dGJvdW5kVGltZVdpbmRvdzogc3Mub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93LFxuICAgICAgICAgICAgICAgIHJldHVyblRpbWVXaW5kb3c6IHNzLnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zYXZlUmVjZW50U2VhcmNoKHRoaXMuZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnkpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0U2VhcmNoKHRoaXMuZmxpZ2h0ZmV0Y2hlci5mZXRjaExpc3QocXVlcnkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdtdFNlYXJjaChxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMpOiBPYnNlcnZhYmxlPEZsaWdodEFsbFF1b3RlUmVzdWx0PiB7XG4gICAgdGhpcy51cGRhdGVUcmF2ZWxsZXJzKCk7XG4gICAgcXVlcnkucGFzc2VuZ2VycyA9IHRoaXMuX3Bhc3NlbmdlcnM7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5mbGlnaHRmZXRjaGVyLmZldGNoTGlzdChxdWVyeSk7XG4gICAgdGhpcy5fc3RhcnRTZWFyY2gocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0UmVjZW50U2VhcmNoUXVlcnkocXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzKTogU2F2ZVJlY2VudFNlYXJjaE11dGF0aW9uVmFyaWFibGVzIHtcbiAgICBpZiAoKHRoaXMudmlhIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZ2F0ZXdheSkge1xuICAgICAgcXVlcnkudmlhID0gKHRoaXMudmlhIGFzIE9CVEFpcnBvcnREZXRhaWxzKS5nYXRld2F5O1xuICAgIH0gZWxzZSBpZiAodGhpcy52aWEpIHtcbiAgICAgIHF1ZXJ5LnZpYSA9IHRoaXMudmlhIGFzIHN0cmluZztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdXRUaW1lRmxleGliaWxpdHkgJiYgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPT09IFRpbWVXaW5kb3cuRGVwYXJ0KSB7XG4gICAgICBxdWVyeS5vdXRUaW1lRmxleGliaWxpdHkgPSB0aGlzLm91dFRpbWVGbGV4aWJpbGl0eTtcbiAgICB9IGVsc2UgaWYgKHRoaXMub3V0VGltZUNyaXRlcmlhID09PSBUaW1lV2luZG93LkFycml2ZSkge1xuICAgICAgcXVlcnkub3V0VGltZUZsZXhpYmlsaXR5ID0gMjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pblRpbWVGbGV4aWJpbGl0eSAmJiB0aGlzLmluVGltZUNyaXRlcmlhID09PSBUaW1lV2luZG93LkRlcGFydCkge1xuICAgICAgcXVlcnkuaW5UaW1lRmxleGliaWxpdHkgPSB0aGlzLmluVGltZUZsZXhpYmlsaXR5O1xuICAgIH0gZWxzZSBpZiAodGhpcy5pblRpbWVDcml0ZXJpYSA9PT0gVGltZVdpbmRvdy5BcnJpdmUpIHtcbiAgICAgIHF1ZXJ5LmluVGltZUZsZXhpYmlsaXR5ID0gMjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2VydmljZVR5cGU6IFNlcnZpY2VUeXBlLkZsaWdodCxcbiAgICAgIHNlYXJjaEFyZ3M6IHF1ZXJ5LFxuICAgICAgdHJhdmVsRGF0ZTogdGhpcy5vdXRCb3VuZERhdGUuZm9ybWF0KCksXG4gICAgICB0cmF2ZWxsZXJzOiB0aGlzLmhlbHBlcnMuZ2V0VHJhdmVsbGVyc0lkKHRoaXMudHJhdmVsbGVycywgdGhpcy51c2VyU2VydmljZS5ib2JvPy5pZClcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN0YXJ0UmVjZW50U2VhcmNoKHJlY2VudFNlYXJjaDogUmVjZW50U2VhcmNoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVjZW50U2VhcmNoQXJncyA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzO1xuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLm91dFRpbWVGbGV4aWJpbGl0eSkge1xuICAgICAgdGhpcy5vdXRUaW1lRmxleGliaWxpdHkgPSByZWNlbnRTZWFyY2hBcmdzLm91dFRpbWVGbGV4aWJpbGl0eTtcbiAgICB9XG4gICAgaWYgKHJlY2VudFNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlKSB7XG4gICAgICBsZXQgb3V0Ym91bmRUaW1lV2luZG93ID0gcmVjZW50U2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgPyByZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICA6IHJlY2VudFNlYXJjaEFyZ3Mub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXG4gICAgICAgIHJlY2VudFNlYXJjaEFyZ3Mub3V0Ym91bmREYXRlLFxuICAgICAgICBvdXRib3VuZFRpbWVXaW5kb3csXG4gICAgICAgIHRoaXMub3V0VGltZUZsZXhpYmlsaXR5IHx8IDJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuRGF0ZSkge1xuICAgICAgaWYgKHJlY2VudFNlYXJjaEFyZ3MuaW5UaW1lRmxleGliaWxpdHkpIHtcbiAgICAgICAgdGhpcy5pblRpbWVGbGV4aWJpbGl0eSA9IHJlY2VudFNlYXJjaEFyZ3MuaW5UaW1lRmxleGliaWxpdHk7XG4gICAgICB9XG4gICAgICBsZXQgcmV0dXJuVGltZVdpbmRvdyA9IHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICA/IHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICA6IHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3c7XG4gICAgICB0aGlzLmluYm91bmREYXRlID0gdGhpcy5jb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoXG4gICAgICAgIHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuRGF0ZSxcbiAgICAgICAgcmV0dXJuVGltZVdpbmRvdyxcbiAgICAgICAgdGhpcy5pblRpbWVGbGV4aWJpbGl0eSB8fCAyXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmZhcmVUeXBlID0gcmVjZW50U2VhcmNoQXJncy5mYXJlVHlwZTtcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gcmVjZW50U2VhcmNoQXJncy5tYXhDb25uZWN0aW9ucztcblxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLm91dGJvdW5kQ2FiaW5DbGFzcykge1xuICAgICAgdGhpcy5jYWJpbkNsYXNzID0gcmVjZW50U2VhcmNoQXJncy5vdXRib3VuZENhYmluQ2xhc3NbMF07XG4gICAgfVxuICAgIGlmIChyZWNlbnRTZWFyY2hBcmdzLnJldHVybkNhYmluQ2xhc3MpIHtcbiAgICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuQ2FiaW5DbGFzc1swXTtcbiAgICB9XG5cbiAgICB0aGlzLmluY2x1ZGVOZWFyYnlBaXJwb3J0cyA9IHJlY2VudFNlYXJjaEFyZ3MuaW5jbHVkZU5lYXJieUFpcnBvcnRzID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgdGhpcy5jaG9zZW5TZWFyY2hUeXBlID0gcmVjZW50U2VhcmNoQXJncz8ubXVsdGlEZXN0aW5hdGlvbj8ubGVuZ3RoXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5XG4gICAgICA6IHJlY2VudFNlYXJjaEFyZ3MucmV0dXJuVHJpcFxuICAgICAgPyBGbGlnaHRTZWFyY2hUeXBlLnJldHVyblxuICAgICAgOiBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheTtcblxuICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XG4gICAgfSBlbHNlIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vdXRib3VuZEFycml2YWxUaW1lV2luZG93KSB7XG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICB9XG5cbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuRGVwYXJ0O1xuICAgIH0gZWxzZSBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MucmV0dXJuQXJyaXZhbFRpbWVXaW5kb3cpIHtcbiAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pblRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQW55dGltZTtcbiAgICB9XG5cbiAgICBpZiAocmVjZW50U2VhcmNoLnNlYXJjaEFyZ3MudmlhKSB7XG4gICAgICB0aGlzLnZpYSA9IHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLnZpYTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9sb2FkaW5nID0gdHJ1ZTtcbiAgICBpZiAoIXJlY2VudFNlYXJjaEFyZ3M/Lm11bHRpRGVzdGluYXRpb24/Lmxlbmd0aCkge1xuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLm9yaWdpbkFpcnBvcnQsXG4gICAgICAgICAgcmVjZW50U2VhcmNoLnNlYXJjaEFyZ3Mub3JpZ2luTG9jYXRpb25UeXBlXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxuICAgICAgICAgIHJlY2VudFNlYXJjaC5zZWFyY2hBcmdzLmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZVxuICAgICAgICApXG4gICAgICBdKS5zdWJzY3JpYmUoKFtkZXBhcnRMb2NhdGlvbiwgYXJyaXZlTG9jYXRpb25dKSA9PiB7XG4gICAgICAgIGlmIChkZXBhcnRMb2NhdGlvbiAmJiBhcnJpdmVMb2NhdGlvbikge1xuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgICBnYXRld2F5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcbiAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgICBjb3VudHJ5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbG9jYXRpb25UeXBlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5vcmlnaW5Mb2NhdGlvblR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcbiAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbG9jYXRpb25UeXBlOiByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tGb3JIb3RlbFJlbWluZGVyKCkgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzLkhPVEVMLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hvc2VuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0SG90ZWxQYXJhbXModHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZWNlbnRTZWFyY2guc2VhcmNoQXJncy5wcmVmZXJyZWRDYXJyaWVycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZmVycmVkQ2FycmllcnM6IE9CVEFpcmxpbmVzRGV0YWlsc1tdID0gW107XG4gICAgICAgICAgICByZWNlbnRTZWFyY2guc2VhcmNoQXJncy5wcmVmZXJyZWRDYXJyaWVycy5tYXAoKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFpcmxpbmVzTGlzdChwcmVmZXJyZWRDYXJyeSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbTogT0JUQWlybGluZXNEZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtPy5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xuICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IHByZWZlcnJlZENhcnJpZXJzO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnN0YXJ0U2VhcmNoZXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2ltdWx0YW5lb3VzU2VhcmNoZXNDaGVjayh0cnVlKS50aGVuKHZhbCA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHJlY2VudFNlYXJjaEFyZ3M/Lm11bHRpRGVzdGluYXRpb24/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSBtb21lbnQocmVjZW50U2VhcmNoQXJncy5tdWx0aURlc3RpbmF0aW9uWzBdLmRhdGUpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNdWx0aURlc3RpbmF0aW9uKHJlY2VudFNlYXJjaEFyZ3MpO1xuICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5vcmlnO1xuICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5kZXN0O1xuICAgICAgaWYgKHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2hlc1tTZXJ2aWNlVHlwZS5Ib3RlbF0uY2hlY2tGb3JIb3RlbFJlbWluZGVyKCkgJiYgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzLkhPVEVMLmVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaG9zZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnNldEhvdGVsUGFyYW1zKHRydWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNpbXVsdGFuZW91c1NlYXJjaGVzQ2hlY2sodHJ1ZSkudGhlbih2YWwgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpcnN0IGhlcmVcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0SG90ZWxQYXJhbXMoc3RhcnRTZWFyY2hlczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5jaGVja2luX2RhdGUgPSB0aGlzLm91dEJvdW5kRGF0ZTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNoZWNrb3V0X2RhdGUgPSB0aGlzLmluYm91bmREYXRlO1xuXG4gICAgY29uc3QgbG9jYXRpb24gPSAgdGhpcy5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscztcblxuICAgIGNvbnN0IGhvdGVsQ291bnR5ID0ge1xuICAgICAgY0NvZGU6IGxvY2F0aW9uPy5jb3VudHJ5Q29kZSxcbiAgICAgIGNOYW1lOiBsb2NhdGlvbj8uY291bnRyeVxuICAgIH07XG5cbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmNvdW50cnkgPSBob3RlbENvdW50eTtcbiAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc2VhcmNoZXNbU2VydmljZVR5cGUuSG90ZWxdLmxvY2F0aW9uX3R5cGVfc2VsZWN0ID0gTG9jYXRpb25UeXBlcy5DaXR5O1xuXG4gICAgY29uc3QgY2l0eUxvY2F0aW9uID0gbG9jYXRpb24/LmRlc3RpbmF0aW9uPy5zcGxpdCgnLCcpWzBdO1xuICAgIHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgLmdldENpdHlMb2NhdGlvbnMoY2l0eUxvY2F0aW9uLCBob3RlbENvdW50eS5jQ29kZSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXN1bHRzOkxvY2F0aW9uRGV0YWlsc1tdKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5sb2NhdGlvbiA9IHJlc3VsdHMuZmluZChyZXMgPT4gcmVzLm5hbWUgPT09IGNpdHlMb2NhdGlvbikgfHwgcmVzdWx0c1swXTtcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaGVzW1NlcnZpY2VUeXBlLkhvdGVsXS5sb2NhdGlvbiAmJiBzdGFydFNlYXJjaGVzKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVNdWx0aURlc3RpbmF0aW9uKGZhdjogYW55LCBzdGFydFNlYXJjaDpib29sZWFuID0gdHJ1ZSwgY2xvbmVCYXNrZXRJdGVtOmJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGxldCBtdWx0aURlc3RpbmF0aW9uID0gY2xvbmVCYXNrZXRJdGVtID8gdGhpcy5tdWx0aURlc3RpbmF0aW9uIDogZmF2Lm11bHRpRGVzdGluYXRpb247XG4gICAgY29uc3QgbXVsdGkgPSAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtdWx0aURlc3RpbmF0aW9uLm1hcChcbiAgICAgICAgYXN5bmMgKGE6IHtcbiAgICAgICAgICBkYXRlOiBzdHJpbmcgfCBtb21lbnQuTW9tZW50O1xuICAgICAgICAgIGRlc3Q6IHN0cmluZztcbiAgICAgICAgICBvcmlnOiBzdHJpbmc7XG4gICAgICAgICAgb3JpZ2luQWlycG9ydEZ1bGw6IGFueTtcbiAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnRGdWxsOiBhbnk7XG4gICAgICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93O1xuICAgICAgICAgIGRlcGFydHVyZVRpbWVXaW5kb3c6IHN0cmluZztcbiAgICAgICAgICBhcnJpdmFsVGltZVdpbmRvdzogc3RyaW5nO1xuICAgICAgICAgIG9yaWdpbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlO1xuICAgICAgICAgIGRlc3RpbmF0aW9uTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gICAgICAgIH0pID0+IHtcbiAgICAgICAgICBsZXQgZGVzdGluYXRpb246IHtcbiAgICAgICAgICAgIGRhdGU6IG1vbWVudC5Nb21lbnQ7XG4gICAgICAgICAgICBkZXN0OiBhbnk7XG4gICAgICAgICAgICBvcmlnOiBhbnk7XG4gICAgICAgICAgICBvcmlnaW5BaXJwb3J0RnVsbDogYW55O1xuICAgICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogYW55O1xuICAgICAgICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93O1xuICAgICAgICAgICAgb3V0VGltZUZsZXhpYmlsaXR5PzogbnVtYmVyO1xuICAgICAgICAgICAgb3JpZ2luTG9jYXRpb25UeXBlOiBMb2NhdGlvblR5cGU7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbkxvY2F0aW9uVHlwZTogTG9jYXRpb25UeXBlO1xuICAgICAgICAgIH0gPSB7XG4gICAgICAgICAgICBkYXRlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBkZXN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmlnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcmlnaW5BaXJwb3J0RnVsbDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVzdGluYXRpb25BaXJwb3J0RnVsbDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgb3V0VGltZUNyaXRlcmlhOiBUaW1lV2luZG93LkFueXRpbWUsXG4gICAgICAgICAgICBvdXRUaW1lRmxleGliaWxpdHk6IG51bGwsXG4gICAgICAgICAgICBvcmlnaW5Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZS5BLFxuICAgICAgICAgICAgZGVzdGluYXRpb25Mb2NhdGlvblR5cGU6IExvY2F0aW9uVHlwZS5BXG4gICAgICAgICAgfTtcbiAgICAgICAgICBkZXN0aW5hdGlvbi5vcmlnID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0QWlycG9ydHNMaXN0KGEub3JpZywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgYS5vcmlnaW5Mb2NhdGlvblR5cGUpXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKG9yaWdSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChvcmlnUmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZ2F0ZXdheSA9PSBhLm9yaWcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgZGVzdGluYXRpb24uZGVzdCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLmRlc3QsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGEuZGVzdGluYXRpb25Mb2NhdGlvblR5cGUpXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKGRlc3RSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChkZXN0UmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZ2F0ZXdheSA9PSBhLmRlc3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBkZXN0aW5hdGlvbi5vcmlnaW5BaXJwb3J0RnVsbCA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAgICAgLmdldEFpcnBvcnRzTGlzdChhLmRlc3QsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGEuZGVzdGluYXRpb25Mb2NhdGlvblR5cGUpXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgICAgIC50aGVuKGRlc3RSZXN1bHRzID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChkZXN0UmVzdWx0cyBhcyBhbnlbXSkuZmluZChiID0+IGIuZGVzdGluYXRpb24gPT0gYS5vcmlnaW5BaXJwb3J0RnVsbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRlc3RpbmF0aW9uLmRlc3RpbmF0aW9uQWlycG9ydEZ1bGwgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRBaXJwb3J0c0xpc3QoYS5kZXN0LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBhLmRlc3RpbmF0aW9uTG9jYXRpb25UeXBlKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAudGhlbihkZXN0UmVzdWx0cyA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiAoZGVzdFJlc3VsdHMgYXMgYW55W10pLmZpbmQoYiA9PiBiLmRlc3RpbmF0aW9uID09IGEuZGVzdGluYXRpb25BaXJwb3J0RnVsbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChhLmRlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm91dFRpbWVGbGV4aWJpbGl0eSA9IHRoaXMuaGVscGVycy5jYWxjdWxhdGVEdXJhdGlvbkluSG91cnMoXG4gICAgICAgICAgICAgIGEuZGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEuZGF0ZSkge1xuICAgICAgICAgICAgYS5kYXRlID0gY2xvbmVCYXNrZXRJdGVtID8gdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUoYS5kYXRlIGFzIG1vbWVudC5Nb21lbnQpIDogYS5kYXRlO1xuICAgICAgICAgICAgZGVzdGluYXRpb24uZGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICAgICAgICBhLmRhdGUgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICBhLmRlcGFydHVyZVRpbWVXaW5kb3cgfHwgYS5hcnJpdmFsVGltZVdpbmRvdyxcbiAgICAgICAgICAgICAgZGVzdGluYXRpb24ub3V0VGltZUZsZXhpYmlsaXR5IHx8IDJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFjbG9uZUJhc2tldEl0ZW0pIHtcbiAgICAgICAgICAgIGlmIChhLmRlcGFydHVyZVRpbWVXaW5kb3cgfHwgYS5hcnJpdmFsVGltZVdpbmRvdykge1xuICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5vdXRUaW1lQ3JpdGVyaWEgPSBhLmRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgICAgICAgICA/IFRpbWVXaW5kb3cuRGVwYXJ0XG4gICAgICAgICAgICAgICAgOiBUaW1lV2luZG93LkFycml2ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGVzdGluYXRpb247XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApKSBhcyBhbnlbXTtcblxuICAgIHRoaXMubXVsdGlEZXN0aW5hdGlvbiA9IG11bHRpO1xuICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSB0aGlzLm11bHRpRGVzdGluYXRpb25bMF0ub3JpZztcbiAgICB0aGlzLmFycml2ZUxvY2F0aW9uID0gdGhpcy5tdWx0aURlc3RpbmF0aW9uWzBdLmRlc3Q7XG4gICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2Uuc3RhcnRTZWFyY2hlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFrZURlcGFydHVyZVRpbWVXaW5kb3coXG4gICAgZGF0ZVRpbWU6IG1vbWVudC5Nb21lbnQsXG4gICAgd2luZG93OiBUaW1lV2luZG93LFxuICAgIHR5cGU6IEZsaWdodFNlYXJjaFR5cGVcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aW1lRmxleGliaWxpdHkgPVxuICAgICAgdHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXlcbiAgICAgICAgPyB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUZsZXhpYmlsaXR5XG4gICAgICAgIDogdGhpcy50ZW1wUGFyYW1zLmluVGltZUZsZXhpYmlsaXR5O1xuXG4gICAgcmV0dXJuIHdpbmRvdyA9PT0gVGltZVdpbmRvdy5EZXBhcnRcbiAgICAgID8gdGhpcy5oZWxwZXJzLm1ha2VUaW1lV2luZG93KGRhdGVUaW1lLCAtdGltZUZsZXhpYmlsaXR5LCB0aW1lRmxleGliaWxpdHkpXG4gICAgICA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIG1ha2VBcnJpdmFsVGltZVdpbmRvdyhcbiAgICBkYXRlVGltZTogbW9tZW50Lk1vbWVudCxcbiAgICB3aW5kb3c6IFRpbWVXaW5kb3csXG4gICAgdHlwZTogRmxpZ2h0U2VhcmNoVHlwZVxuICApOiBzdHJpbmcge1xuICAgIGlmICh3aW5kb3cgIT09IFRpbWVXaW5kb3cuQXJyaXZlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lRmxleGliaWxpdHkgPVxuICAgICAgdHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXlcbiAgICAgICAgPyB0aGlzLnRlbXBQYXJhbXMub3V0VGltZUZsZXhpYmlsaXR5XG4gICAgICAgIDogdGhpcy50ZW1wUGFyYW1zLmluVGltZUZsZXhpYmlsaXR5O1xuXG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5tYWtlVGltZVdpbmRvdyhkYXRlVGltZSwgLXRpbWVGbGV4aWJpbGl0eSwgMCk7XG4gIH1cblxuICBjb252ZXJ0UmVjZW50U2VhcmNoRGF0ZVRpbWUoZGF0ZTogc3RyaW5nLCB0aW1lV2luZG93Pzogc3RyaW5nLCBob3VyczogbnVtYmVyID0gMik6IG1vbWVudC5Nb21lbnQge1xuICAgIGlmICh0aW1lV2luZG93KSB7XG4gICAgICBjb25zdCBbc3RhcnRUaW1lXSA9IHRpbWVXaW5kb3cuc3BsaXQoJy0nKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRTdGFydFRpbWUgPSBtb21lbnQoc3RhcnRUaW1lLCAnSEhtbScpLmFkZChob3VycywgJ2hvdXJzJykuZm9ybWF0KCdISG1tJyk7XG4gICAgICByZXR1cm4gbW9tZW50KGAke2RhdGV9VCR7dXBkYXRlZFN0YXJ0VGltZX1gLCAnWVlZWS1NTS1ERFRISG1tJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2VhcmNoUXVlcnkoXG4gICAgdGltZVdpbmRvdzoge1xuICAgICAgb3V0Ym91bmRUaW1lV2luZG93OiBzdHJpbmc7XG4gICAgICByZXR1cm5UaW1lV2luZG93OiBzdHJpbmc7XG4gICAgfSA9IG51bGxcbiAgKTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMge1xuICAgIGNvbnN0IGlzTXVsdGlDaXR5QWN0aXZlID0gdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5O1xuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPSBpc011bHRpQ2l0eUFjdGl2ZVxuICAgICAgPyB0aGlzLnNldE11bHRpRGVzdGluYXRpb25RdWVyeSh0aGlzLnRlbXBQYXJhbXMubXVsdGlEZXN0aW5hdGlvbilcbiAgICAgIDogbnVsbDtcblxuICAgIHRoaXMuX211bHRpRGVzdGluYXRpb24gPVxuICAgICAgdGhpcy50ZW1wUGFyYW1zLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5XG4gICAgICAgID8gdGhpcy5zZXRNdWx0aURlc3RpbmF0aW9uUXVlcnkodGhpcy50ZW1wUGFyYW1zLm11bHRpRGVzdGluYXRpb24pXG4gICAgICAgIDogW107XG5cbiAgICBjb25zdCBtdWx0aUNpdHlDb25uZWN0aW9ucyA9XG4gICAgICB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMgPT09IDAgJiYgaXNNdWx0aUNpdHlBY3RpdmVcbiAgICAgICAgPyB0aGlzLl9tdWx0aURlc3RpbmF0aW9uLmxlbmd0aCAtIDFcbiAgICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgaXNGbGlnaHRzR3JvdXBlZCA9IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCk7XG4gICAgcmV0dXJuIHRoaXMuaGVscGVycy5yZW1vdmVOdWxsczxTZWFyY2hGbGlnaHRzVjJRdWVyeVZhcmlhYmxlcz4oXG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgaXNNdWx0aUNpdHlBY3RpdmVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgbXVsdGlEZXN0aW5hdGlvbjogdGhpcy5fbXVsdGlEZXN0aW5hdGlvblxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBvcmlnaW5BaXJwb3J0OiB0aGlzLl9vcmlnaW5BaXJwb3J0LFxuICAgICAgICAgICAgICBvcmlnaW5BaXJwb3J0RnVsbDogdGhpcy5fb3JpZ2luQWlycG9ydEZ1bGwsXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uQWlycG9ydDogdGhpcy5fZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnRGdWxsOiB0aGlzLl9kZXN0aW5hdGlvbkFpcnBvcnRGdWxsLFxuICAgICAgICAgICAgICBvcmlnaW5Mb2NhdGlvblR5cGU6IHRoaXMuX29yaWdpbkxvY2F0aW9uVHlwZSxcbiAgICAgICAgICAgICAgZGVzdGluYXRpb25Mb2NhdGlvblR5cGU6IHRoaXMuX2Rlc3RpbmF0aW9uTG9jYXRpb25UeXBlLFxuICAgICAgICAgICAgICBqb2luZXJPckxlYXZlcjogdGhpcy5pc0VybVRyYXZlbGxlcigpLFxuICAgICAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUpLFxuICAgICAgICAgICAgICBvdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3c6IHRpbWVXaW5kb3dcbiAgICAgICAgICAgICAgICA/IHRpbWVXaW5kb3cub3V0Ym91bmRUaW1lV2luZG93LnJlcGxhY2UoLyUzQS9nLCAnJylcbiAgICAgICAgICAgICAgICA6IHRoaXMubWFrZURlcGFydHVyZVRpbWVXaW5kb3coXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRCb3VuZERhdGUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXG4gICAgICAgICAgICAgICAgICAgIEZsaWdodFNlYXJjaFR5cGUub25lV2F5XG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBvdXRib3VuZEFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMub3V0Qm91bmREYXRlLFxuICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5vdXRUaW1lQ3JpdGVyaWEsXG4gICAgICAgICAgICAgICAgRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhc3NlbmdlcnM6IHRoaXMuX3Bhc3NlbmdlcnMsXG4gICAgICAgICAgcmV0dXJuVHJpcDogdGhpcy5pc1JldHVybixcbiAgICAgICAgICBvdXRib3VuZENhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzID8gW3RoaXMudGVtcFBhcmFtcy5jYWJpbkNsYXNzXSA6IG51bGwsXG4gICAgICAgICAgcmVxdWlyZUZyZWVCYWc6IG51bGwsXG4gICAgICAgICAgbWF4Q29ubmVjdGlvbnM6IGlzTXVsdGlDaXR5QWN0aXZlID8gbXVsdGlDaXR5Q29ubmVjdGlvbnMgOiB0aGlzLnRlbXBQYXJhbXMubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgICAgaW5jbHVkZU5lYXJieUFpcnBvcnRzOiBpc011bHRpQ2l0eUFjdGl2ZSA/IG51bGwgOiB0aGlzLnRlbXBQYXJhbXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzLFxuICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzOiB0aGlzLnRlbXBQYXJhbXMucHJlZmVycmVkQ2FycmllcnMubWFwKChjYXJyaWVyOiBPQlRBaXJsaW5lc0RldGFpbHMpID0+XG4gICAgICAgICAgICBjYXJyaWVyPy5jb2RlID8gY2Fycmllci5jb2RlIDogbnVsbFxuICAgICAgICAgICksXG4gICAgICAgICAgZmFyZVR5cGU6IHRoaXMudGVtcFBhcmFtcy5mYXJlVHlwZSxcbiAgICAgICAgICB2aWE6IHRoaXMudmlhID8gKHRoaXMudmlhIGFzIE9CVEFpcnBvcnREZXRhaWxzICkuZ2F0ZXdheSA6IG51bGxcbiAgICAgICAgICAvLyB3aXRoR3JvdXBlZDogaXNGbGlnaHRzR3JvdXBlZFxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmlzUmV0dXJuXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHJldHVybkRhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKHRoaXMudGVtcFBhcmFtcy5pbmJvdW5kRGF0ZSksXG4gICAgICAgICAgICAgIHJldHVybkRlcGFydHVyZVRpbWVXaW5kb3c6IHRpbWVXaW5kb3dcbiAgICAgICAgICAgICAgICA/IHRpbWVXaW5kb3cucmV0dXJuVGltZVdpbmRvdy5yZXBsYWNlKC8lM0EvZywgJycpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1ha2VEZXBhcnR1cmVUaW1lV2luZG93KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcFBhcmFtcy5pblRpbWVDcml0ZXJpYSxcbiAgICAgICAgICAgICAgICAgICAgRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHJldHVybkFycml2YWxUaW1lV2luZG93OiB0aGlzLm1ha2VBcnJpdmFsVGltZVdpbmRvdyhcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBQYXJhbXMuaW5ib3VuZERhdGUsXG4gICAgICAgICAgICAgICAgdGhpcy50ZW1wUGFyYW1zLmluVGltZUNyaXRlcmlhLFxuICAgICAgICAgICAgICAgIEZsaWdodFNlYXJjaFR5cGUucmV0dXJuXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHJldHVybkNhYmluQ2xhc3M6IHRoaXMudGVtcFBhcmFtcy5yZXR1cm5DYWJpbkNsYXNzXG4gICAgICAgICAgICAgICAgPyBbdGhpcy50ZW1wUGFyYW1zLnJldHVybkNhYmluQ2xhc3NdXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpc0VybVRyYXZlbGxlcigpOiBFcm1UcmF2ZWxsZXJUeXBlIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZXJtVHJhdmVsbGVyVHlwZSAmJlxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmVybVRyYXZlbGxlclR5cGUgIT09IEVybVRyYXZlbGxlclR5cGUuTm9uZVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5lcm1UcmF2ZWxsZXJUeXBlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVHJhdmVsbGVycygpIHtcbiAgICBjb25zdCB0cmF2ZWxsZXJzOiBGbGlnaHRQYXNzZW5nZXJPYmplY3RbXSA9IFtdO1xuXG5cbiAgICB0aGlzLnRyYXZlbGxlcnM/LmZvckVhY2godHJhdmVsbGVyID0+IHtcblxuICAgICAgY29uc3QgbmV3RmxpZ2h0UGFzc09iamVjdDogRmxpZ2h0UGFzc2VuZ2VyT2JqZWN0ID0ge1xuICAgICAgICB0eXBlOiB0cmF2ZWxsZXIuYWdlVHlwZSA/IHRyYXZlbGxlci5hZ2VUeXBlID09PSBhZ2VzLkFkdWx0ID8gRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCA6IEZsaWdodFBhc3NlbmdlclR5cGUuQ2hpbGQgOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkFkdWx0LFxuICAgICAgICBpZDogdHJhdmVsbGVyLmlkLFxuICAgICAgICBndWVzdDogdHJhdmVsbGVyLmd1ZXN0XG4gICAgICB9XG4gICAgICB0cmF2ZWxsZXJzLnB1c2gobmV3RmxpZ2h0UGFzc09iamVjdCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wYXNzZW5nZXJzID0gdHJhdmVsbGVycztcbiAgICB0aGlzLl9pc1ZhbGlkKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlYXJjaERlZmF1bHRzKCkge1xuICAgIGNvbnN0IGhpZGVDbGFzc2VzID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8YW55PihcbiAgICAgIFVzZXJGYXZvcnVyaXRlLkZsaWdodFNlYXJjaERlZmF1bHRzXG4gICAgKSB8fCB7XG4gICAgICBjbGFzc1NlbGVjdGlvbjoge1xuICAgICAgICBhbnk6IGZhbHNlLFxuICAgICAgICBidXNpbmVzczogZmFsc2UsXG4gICAgICAgIGVjb25vbXk6IGZhbHNlLFxuICAgICAgICBmaXJzdDogZmFsc2UsXG4gICAgICAgIHByZW1pdW06IGZhbHNlXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXSA9IFtdO1xuICAgIGlmICghaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uZWNvbm9teSkge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0Vjb25vbXknLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXkgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5wcmVtaXVtKSB7XG4gICAgICBvcHRpb25zLnB1c2goeyBuYW1lOiAnUHJlbWl1bScsIHR5cGU6IEZsaWdodENhYmluQ2xhc3MuUHJlbWl1bUVjb25vbXkgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5idXNpbmVzcykge1xuICAgICAgb3B0aW9ucy5wdXNoKHsgbmFtZTogJ0J1c2luZXNzJywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5CdXNpbmVzcyB9KTtcbiAgICB9XG5cbiAgICBpZiAoIWhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmZpcnN0KSB7XG4gICAgICBvcHRpb25zLnB1c2goeyBuYW1lOiAnRmlyc3QnLCB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzLkZpcnN0IH0pO1xuICAgIH1cblxuICAgIGlmICghaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uYW55KSB7XG4gICAgICBvcHRpb25zLnB1c2goeyBuYW1lOiAnQW55JywgdHlwZTogRmxpZ2h0Q2FiaW5DbGFzcy5BbnkgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jYWJpbkNsYXNzID0gdGhpcy5nZXRVcGRhdGVkQ2FiaW5DbGFzcyh0aGlzLmNhYmluQ2xhc3MsIGhpZGVDbGFzc2VzLCBvcHRpb25zKTtcbiAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPSB0aGlzLmdldFVwZGF0ZWRDYWJpbkNsYXNzKHRoaXMucmV0dXJuQ2FiaW5DbGFzcywgaGlkZUNsYXNzZXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuYXZhbGlhYmxlQ2xhc3Nlcy5uZXh0KG9wdGlvbnMpO1xuXG4gICAgaWYgKGhpZGVDbGFzc2VzPy5oaWRlRmxpZ2h0Q2FiaW5DbGFzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9zaG93Q2FiaW5DbGFzc1NlbGVjdGlvbiA9ICFoaWRlQ2xhc3Nlcy5oaWRlRmxpZ2h0Q2FiaW5DbGFzcztcbiAgICAgIHRoaXMuY2FiaW5DbGFzcyA9IHRoaXMuZ2V0VXBkYXRlZENhYmluQ2xhc3ModGhpcy5jYWJpbkNsYXNzLCBoaWRlQ2xhc3Nlcywgb3B0aW9ucyk7XG4gICAgICB0aGlzLnJldHVybkNhYmluQ2xhc3MgPSB0aGlzLmdldFVwZGF0ZWRDYWJpbkNsYXNzKHRoaXMuY2FiaW5DbGFzcywgaGlkZUNsYXNzZXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChoaWRlQ2xhc3Nlcz8uaGlkZUNob29zZUFpcmxpbmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3Nob3dQcmVmZXJyZWRBaXJsaW5lcyA9ICFoaWRlQ2xhc3Nlcy5oaWRlQ2hvb3NlQWlybGluZXM7XG4gICAgfVxuXG4gICAgaWYgKGhpZGVDbGFzc2VzPy50aW1lU2VsZWN0aW9uRGVmYXVsdCkge1xuICAgICAgc3dpdGNoIChoaWRlQ2xhc3Nlcy50aW1lU2VsZWN0aW9uRGVmYXVsdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ2FueXRpbWUnOlxuICAgICAgICAgIHRoaXMub3V0VGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5Bbnl0aW1lO1xuICAgICAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Fycml2ZSc6XG4gICAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5BcnJpdmU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlcGFydCc6XG4gICAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcbiAgICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYCsrKyBVbmtub3duIHRpbWUgc2VsZWN0aW9uIGRlZmF1bHQ6ICR7aGlkZUNsYXNzZXMudGltZVNlbGVjdGlvbkRlZmF1bHR9ICsrK2BcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXBkYXRlZENhYmluQ2xhc3MoXG4gICAgY2FiaW5DbGFzczogRmxpZ2h0Q2FiaW5DbGFzcyxcbiAgICBoaWRlQ2xhc3NlczogYW55LFxuICAgIG9wdGlvbnM6IHsgbmFtZTogc3RyaW5nOyB0eXBlOiBGbGlnaHRDYWJpbkNsYXNzIH1bXVxuICApOiBGbGlnaHRDYWJpbkNsYXNzIHtcbiAgICBzd2l0Y2ggKGNhYmluQ2xhc3MpIHtcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5Bbnk6XG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5hbnkgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkJ1c2luZXNzOlxuICAgICAgICByZXR1cm4gaGlkZUNsYXNzZXMuY2xhc3NTZWxlY3Rpb24uYnVzaW5lc3MgPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xuICAgICAgY2FzZSBGbGlnaHRDYWJpbkNsYXNzLkVjb25vbXk6XG4gICAgICAgIHJldHVybiBoaWRlQ2xhc3Nlcy5jbGFzc1NlbGVjdGlvbi5lY29ub215ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5GaXJzdDpcbiAgICAgICAgcmV0dXJuIGhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLmZpcnN0ID8gb3B0aW9uc1swXS50eXBlIDogY2FiaW5DbGFzcztcbiAgICAgIGNhc2UgRmxpZ2h0Q2FiaW5DbGFzcy5QcmVtaXVtRWNvbm9teTpcbiAgICAgICAgcmV0dXJuIGhpZGVDbGFzc2VzLmNsYXNzU2VsZWN0aW9uLnByZW1pdW0gPyBvcHRpb25zWzBdLnR5cGUgOiBjYWJpbkNsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gY2FiaW5DbGFzcztcbiAgfVxuICB1cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhfcHJldmlvdXNJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPik6IHZvaWQge1xuICAgIC8vIEZsaWdodHMgY2FuIG5vdCBiZSBzZWFyY2ggYWZ0ZXIgb3RoZXIgcHJvZHVjdHMgc28gbm8gZGVmYXVsdHMgY2FuIGJlIHNldC5cbiAgfVxuXG4gIHVwZGF0ZVNlYXJjaEZyb21FeHBpcmVkQmFza2V0SXRlbShiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLCBzZXREYXRlVGltZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hGbGlnaHRzUXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzID0gYmFza2V0SXRlbS5zZWFyY2hRdWVyeTtcbiAgICBpZiAoc2V0RGF0ZVRpbWUpIHtcbiAgICAgIGlmIChzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlKSB7XG4gICAgICAgIGxldCBvdXRib3VuZFRpbWVXaW5kb3cgPSBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgPyBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93XG4gICAgICAgICAgOiBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdztcbiAgICAgICAgdGhpcy5vdXRCb3VuZERhdGUgPSB0aGlzLmNvbnZlcnRSZWNlbnRTZWFyY2hEYXRlVGltZShcbiAgICAgICAgICBzZWFyY2hGbGlnaHRzUXVlcnkub3V0Ym91bmREYXRlLFxuICAgICAgICAgIG91dGJvdW5kVGltZVdpbmRvd1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRhdGUpIHtcbiAgICAgICAgbGV0IHJldHVyblRpbWVXaW5kb3cgPSBzZWFyY2hGbGlnaHRzUXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvd1xuICAgICAgICAgID8gc2VhcmNoRmxpZ2h0c1F1ZXJ5LnJldHVybkRlcGFydHVyZVRpbWVXaW5kb3dcbiAgICAgICAgICA6IHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5BcnJpdmFsVGltZVdpbmRvdztcbiAgICAgICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuY29udmVydFJlY2VudFNlYXJjaERhdGVUaW1lKFxuICAgICAgICAgIHNlYXJjaEZsaWdodHNRdWVyeS5yZXR1cm5EYXRlLFxuICAgICAgICAgIHJldHVyblRpbWVXaW5kb3dcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldFF1ZXJ5RnJvbUJhc2tldEl0ZW0oYmFza2V0SXRlbSk7XG4gICAgdGhpcy5fcGFzc2VuZ2VycyA9IHNlYXJjaEZsaWdodHNRdWVyeS5wYXNzZW5nZXJzO1xuICAgIHRoaXMuYWR1bHRzID0gdGhpcy5fcGFzc2VuZ2Vycy5maWx0ZXIoKGE6IGFueSkgPT4gYS50eXBlID09ICdBRFVMVCcpLmxlbmd0aDtcbiAgICB0aGlzLmNoaWxkcmVuID0gdGhpcy5fcGFzc2VuZ2Vycy5maWx0ZXIoKGE6IGFueSkgPT4gYS50eXBlID09ICdDSElMRCcpLmxlbmd0aDtcbiAgICB0aGlzLmFkZFRyYXZlbGxlcnNGcm9tQmFza2V0SXRlbShiYXNrZXRJdGVtKTtcbiAgfVxuXG4gIC8vIFdlIHVzZSB0aGlzIG1ldGhvZCBmb3IgZmVhdHVyZXM6IFJlY2VudFNlYXJjaCwgRmF2b3VyaXRlU2VhcmNoLCBFeHBpcmVkQmFza2V0LCBDb3B5QmFza2V0LCBDbG9uZUJhc2tldFxuICAvLyBOb3RlOiBEbyBub3QgaW5jbHVkZSBkYXRlcyBhbmQgdGF2ZWxsZXJzIGluIHRoaXMgbWV0aG9kXG4gIGFzeW5jIGFwcGx5U2VhcmNoUXVlcnkocXVlcnk6IFNlYXJjaEZsaWdodHNWMlF1ZXJ5VmFyaWFibGVzLCBzdGFydFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlLCBjbG9uZUJhc2tldEl0ZW06IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZmFyZVR5cGUgPSBxdWVyeS5mYXJlVHlwZTtcbiAgICB0aGlzLm1heENvbm5lY3Rpb25zID0gcXVlcnkubWF4Q29ubmVjdGlvbnM7XG4gICAgaWYgKHF1ZXJ5Lm91dGJvdW5kQ2FiaW5DbGFzcykge1xuICAgICAgdGhpcy5jYWJpbkNsYXNzID0gcXVlcnkub3V0Ym91bmRDYWJpbkNsYXNzWzBdIGFzIEZsaWdodENhYmluQ2xhc3M7XG4gICAgfVxuICAgIHRoaXMucmV0dXJuQ2FiaW5DbGFzcyA9IHF1ZXJ5LnJldHVybkNhYmluQ2xhc3MgPyBxdWVyeS5yZXR1cm5DYWJpbkNsYXNzWzBdIGFzIEZsaWdodENhYmluQ2xhc3MgOiBudWxsO1xuICAgIHRoaXMuaW5jbHVkZU5lYXJieUFpcnBvcnRzID0gcXVlcnkuaW5jbHVkZU5lYXJieUFpcnBvcnRzID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuY2hvc2VuU2VhcmNoVHlwZSA9IEFycmF5LmlzQXJyYXkocXVlcnk/Lm11bHRpRGVzdGluYXRpb24pICYmIHF1ZXJ5Lm11bHRpRGVzdGluYXRpb24ubGVuZ3RoXG4gICAgICA/IEZsaWdodFNlYXJjaFR5cGUubXVsdGlDaXR5XG4gICAgICA6IHF1ZXJ5LnJldHVyblRyaXBcbiAgICAgID8gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm5cbiAgICAgIDogRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk7XG4gICAgaWYgKCFjbG9uZUJhc2tldEl0ZW0pIHtcbiAgICAgIGlmIChxdWVyeS5vdXRib3VuZERlcGFydHVyZVRpbWVXaW5kb3cpIHtcbiAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkRlcGFydDtcbiAgICAgIH0gZWxzZSBpZiAocXVlcnkub3V0Ym91bmRBcnJpdmFsVGltZVdpbmRvdykge1xuICAgICAgICB0aGlzLm91dFRpbWVDcml0ZXJpYSA9IFRpbWVXaW5kb3cuQXJyaXZlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRUaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgICB9XG4gICAgICBpZiAocXVlcnkucmV0dXJuRGVwYXJ0dXJlVGltZVdpbmRvdykge1xuICAgICAgICB0aGlzLmluVGltZUNyaXRlcmlhID0gVGltZVdpbmRvdy5EZXBhcnQ7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXJ5LnJldHVybkFycml2YWxUaW1lV2luZG93KSB7XG4gICAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFycml2ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5UaW1lQ3JpdGVyaWEgPSBUaW1lV2luZG93LkFueXRpbWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChxdWVyeS52aWEpIHtcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0c0xpc3QocXVlcnkudmlhKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgIHRoaXMudmlhID0gKHJlc3VsdHMgYXMgYW55W10pLmZpbmQoYSA9PiBhLmdhdGV3YXkgPT0gcXVlcnkudmlhKTtcbiAgICAgICAgdGhpcy5zaG93VmlhID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dWaWEgPSBmYWxzZTtcbiAgICAgIHRoaXMudmlhID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocXVlcnk/Lm11bHRpRGVzdGluYXRpb24pIHx8ICFxdWVyeS5tdWx0aURlc3RpbmF0aW9uLmxlbmd0aCkge1xuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxuICAgICAgICAgIHF1ZXJ5Lm9yaWdpbkFpcnBvcnQsXG4gICAgICAgICAgcXVlcnkub3JpZ2luTG9jYXRpb25UeXBlXG4gICAgICAgICksXG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5nZXRBaXJwb3J0QnlDb2RlKFxuICAgICAgICAgIHF1ZXJ5LmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgICBxdWVyeS5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZVxuICAgICAgICApXG4gICAgICBdKS5zdWJzY3JpYmUoKFtkZXBhcnRMb2NhdGlvbiwgYXJyaXZlTG9jYXRpb25dKSA9PiB7XG4gICAgICAgIGlmIChkZXBhcnRMb2NhdGlvbiAmJiBhcnJpdmVMb2NhdGlvbikge1xuICAgICAgICAgIHRoaXMuZGVwYXJ0TG9jYXRpb24gPSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgICBnYXRld2F5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcbiAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgICBjb3VudHJ5OiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBkZXBhcnRMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogZGVwYXJ0TG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbG9jYXRpb25UeXBlOiBxdWVyeS5vcmlnaW5Mb2NhdGlvblR5cGVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuYXJyaXZlTG9jYXRpb24gPSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLm5hbWUsXG4gICAgICAgICAgICBnYXRld2F5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2guaWF0YSxcbiAgICAgICAgICAgIHRlcm1pbmFsczogdGhpcy5zZWFyY2hTZXJ2aWNlLnByb2Nlc3NUZXJtaW5hbHMoYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoLnRlcm1pbmFscyksXG4gICAgICAgICAgICBjb3VudHJ5OiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8uY291bnRyeSxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiBhcnJpdmVMb2NhdGlvbi5pYXRhTWF0Y2g/LmxvY2F0aW9uRGV0YWlscz8ucG9zdGNvZGUsXG4gICAgICAgICAgICBjb3VudHJ5Q29kZTogYXJyaXZlTG9jYXRpb24uaWF0YU1hdGNoPy5sb2NhdGlvbkRldGFpbHM/LmNvdW50cnlDb2RlLFxuICAgICAgICAgICAgbG9jYXRpb25UeXBlOiBxdWVyeS5kZXN0aW5hdGlvbkxvY2F0aW9uVHlwZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAocXVlcnkucHJlZmVycmVkQ2FycmllcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZlcnJlZENhcnJpZXJzOiBPQlRBaXJsaW5lc0RldGFpbHNbXSA9IFtdO1xuICAgICAgICAgICAgKHF1ZXJ5LnByZWZlcnJlZENhcnJpZXJzIGFzIHN0cmluZ1tdKS5tYXAoKHByZWZlcnJlZENhcnJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEFpcmxpbmVzTGlzdChwcmVmZXJyZWRDYXJyeSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChpdGVtczogT0JUQWlybGluZXNEZXRhaWxzW10pID0+IHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLm1hcCgoaXRlbTogT0JUQWlybGluZXNEZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtPy5jb2RlID09PSBwcmVmZXJyZWRDYXJyeSkge1xuICAgICAgICAgICAgICAgICAgICAgIHByZWZlcnJlZENhcnJpZXJzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IHByZWZlcnJlZENhcnJpZXJzO1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcmVmZXJyZWRDYXJyaWVycyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhcnRTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHF1ZXJ5Py5tdWx0aURlc3RpbmF0aW9uPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3V0Qm91bmREYXRlID0gbW9tZW50KHF1ZXJ5Lm11bHRpRGVzdGluYXRpb25bMF0uZGF0ZSk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZU11bHRpRGVzdGluYXRpb24ocXVlcnksIHN0YXJ0U2VhcmNoLCBjbG9uZUJhc2tldEl0ZW0pO1xuICAgICAgdGhpcy5kZXBhcnRMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5vcmlnO1xuICAgICAgdGhpcy5hcnJpdmVMb2NhdGlvbiA9IHRoaXMubXVsdGlEZXN0aW5hdGlvblswXS5kZXN0O1xuICAgICAgaWYgKHN0YXJ0U2VhcmNoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5zdGFydFNlYXJjaGVzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VG90YWxCYWdnYWdlKGZhcmU6IEZsaWdodEl0aW5lcmFyeSwgaXNPdXRib3VuZCA9IHRydWUpOiBudW1iZXIge1xuICAgIGNvbnN0IGNoZWNrQmFnZ2FnZXMgPSB0aGlzLmdldEJhZ2dhZ2VBbGxvd2FuY2UoZmFyZSk7XG4gICAgY29uc3QgY2hlY2tCYWdnYWdlQW1vdW50c091dCA9IGNoZWNrQmFnZ2FnZXNcbiAgICAgID8uZmlsdGVyKGEgPT4gYT8udHlwZSA9PT0gJ0NoZWNrSW4nICYmICFhLmlzSW4pXG4gICAgICAubWFwKGEgPT4gYT8ucXR5KSBhcyBudW1iZXJbXTtcbiAgICBjb25zdCBjaGVja0JhZ2dhZ2VBbW91bnRzSW4gPSBjaGVja0JhZ2dhZ2VzXG4gICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdDaGVja0luJyAmJiBhLmlzSW4pXG4gICAgICAubWFwKGEgPT4gYT8ucXR5KSBhcyBudW1iZXJbXTtcbiAgICAgIGlmIChpc091dGJvdW5kKSB7XG4gICAgICAgIHJldHVybiBjaGVja0JhZ2dhZ2VBbW91bnRzT3V0Lmxlbmd0aCA/IE1hdGgubWluKC4uLmNoZWNrQmFnZ2FnZUFtb3VudHNPdXQpIDogMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGVja0JhZ2dhZ2VBbW91bnRzSW4ubGVuZ3RoID8gTWF0aC5taW4oLi4uY2hlY2tCYWdnYWdlQW1vdW50c0luKSA6IDA7XG4gICAgICB9XG4gIH1cblxuICBnZXRIYW5kQmFnZ2FnZShmYXJlOiBGbGlnaHRJdGluZXJhcnkpOiBudW1iZXIge1xuICAgIGNvbnN0IGNoZWNrQmFnZ2FnZXMgPSB0aGlzLmdldEJhZ2dhZ2VBbGxvd2FuY2UoZmFyZSk7XG4gICAgY29uc3QgaGFuZEJhZ2dhZ2VBbW91bnRzID0gY2hlY2tCYWdnYWdlc1xuICAgICAgPy5maWx0ZXIoYSA9PiBhPy50eXBlID09PSAnSGFuZENhcnJ5JylcbiAgICAgIC5tYXAoYSA9PiBhPy5xdHkpIGFzIG51bWJlcltdO1xuICAgIHJldHVybiBoYW5kQmFnZ2FnZUFtb3VudHMubGVuZ3RoID8gTWF0aC5taW4oLi4uaGFuZEJhZ2dhZ2VBbW91bnRzKSA6IDA7XG4gIH1cblxuICBnZXRCYWdnYWdlQWxsb3dhbmNlKGZhcmU6IEZsaWdodEl0aW5lcmFyeSk6IHsgdHlwZTogc3RyaW5nOyBxdHk6IG51bWJlcjsgaXNJbjogYm9vbGVhbiB9W10ge1xuICAgIGNvbnN0IGNoZWNrQmFnZ2FnZXM6IHsgdHlwZTogc3RyaW5nOyBxdHk6IG51bWJlcjsgaXNJbjogYm9vbGVhbiB9W10gPSBbXTtcbiAgICBmYXJlPy5vdXRib3VuZEZsaWdodHMuZm9yRWFjaChmbGlnaHQgPT4ge1xuICAgICAgaWYgKGZsaWdodC5hZGRpdGlvbmFsPy5iYWdnYWdlQWxsb3dhbmNlPy5sZW5ndGgpIHtcbiAgICAgICAgY2hlY2tCYWdnYWdlcy5wdXNoKC4uLmZsaWdodC5hZGRpdGlvbmFsLmJhZ2dhZ2VBbGxvd2FuY2UpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGZhcmU/LmluYm91bmRGbGlnaHRzLmxlbmd0aCkge1xuICAgICAgZmFyZS5pbmJvdW5kRmxpZ2h0cy5mb3JFYWNoKGZsaWdodCA9PiB7XG4gICAgICAgIGlmIChmbGlnaHQ/LmFkZGl0aW9uYWw/LmJhZ2dhZ2VBbGxvd2FuY2U/Lmxlbmd0aCkge1xuICAgICAgICAgIGNoZWNrQmFnZ2FnZXMucHVzaCguLi5mbGlnaHQuYWRkaXRpb25hbC5iYWdnYWdlQWxsb3dhbmNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoZWNrQmFnZ2FnZXM7XG4gIH1cbiAgLy8gaXNHcm91cGVkRmxpZ2h0cyh0b1Rlc3Q6IEZsaWdodFF1b3RlUmVzdWx0QXJyYXkpOiB0b1Rlc3QgaXMgRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10ge1xuICAvLyAgIHJldHVybiB0b1Rlc3RbMF0/LnR5cGUgPT09ICdGbGlnaHRHcm91cGVkUXVvdGVSZXN1bHQnO1xuICAvLyB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gLSBmaWx0ZXIgdGhlIHJlc3VsdHMsIHRoZW4gc29ydCB0aGUgcmVtYWluZGVyXG4gICAqIEB0b2RvIC0gQWRkIGZpbHRlcnMgZm9yIHRyYXZlbCBwb2xpY3ksIGZhcmUgdHlwZXMgYW5kIGFuY2lsbGlhcmllc1xuICAgKi9cbiAgYXBwbHlGaWx0ZXJzKGZpbHRlcnM6IEZsaWdodEZpbHRlcnMsIHNvcnRWYWx1ZTogRmxpZ2h0U29ydFR5cGVzKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVycyA9IGZpbHRlcnM7XG4gICAgdGhpcy5jdXJyZW50U29ydCA9IHNvcnRWYWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZygnKysrIEFwcGx5aW5nIEZpbHRlcnMgdG8gZmxpZ2h0czogJywgZmlsdGVycywgJyArKysnKTtcbiAgICBpZiAodGhpcy5mdWxsUmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KFtdKTtcbiAgICB9XG5cbiAgICAvLyBjb25zdCBmaWx0ZXJTZWxlY3RlZEZsaWdodHM6IChcbiAgICAvLyAgIGdyb3Vwc1RvU2hvdzogbnVtYmVyW10sXG4gICAgLy8gICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW1cbiAgICAvLyApID0+IChmOiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4gPSB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHRcbiAgICAvLyAgID8gdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LmluYm91bmRGbGlnaHRzPy5sZW5ndGhcbiAgICAvLyAgICAgPyAoZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XG4gICAgLy8gICAgICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgLy8gICAgICAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kIHx8XG4gICAgLy8gICAgICAgICAgICAgZ3JvdXBzVG9TaG93LmluY2x1ZGVzKGZsaWdodEl0aW5lcmFyeS51aWQpXG4gICAgLy8gICAgICAgICAgICk7XG4gICAgLy8gICAgICAgICB9O1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgOiAoZ3JvdXBzVG9TaG93OiBudW1iZXJbXSwgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtKSA9PiB7XG4gICAgLy8gICAgICAgICByZXR1cm4gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgLy8gICAgICAgICAgIHJldHVybiAoXG4gICAgLy8gICAgICAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kIHx8XG4gICAgLy8gICAgICAgICAgICAgZ3JvdXBzVG9TaG93LmluY2x1ZGVzKGZsaWdodEl0aW5lcmFyeS51aWQpXG4gICAgLy8gICAgICAgICAgICk7XG4gICAgLy8gICAgICAgICB9O1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgIDogKF9ncm91cHNUb1Nob3c6IG51bWJlcltdKSA9PiB7XG4gICAgLy8gICAgICAgcmV0dXJuIChfZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAvLyAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vICAgICAgIH07XG4gICAgLy8gICAgIH07XG5cbiAgICBjb25zdCB0ZXN0ZXIgPSAoXG4gICAgICBmaWx0ZXJzVG90ZXN0OiBSZWNvcmQ8bnVtYmVyIHwgc3RyaW5nLCBTZWxlY3RGaWx0ZXI+LFxuICAgICAgdGVzdEZ1bmN0aW9uOiAoXG4gICAgICAgIGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSxcbiAgICAgICAgdmFsdWU6IHN0cmluZyB8IG51bWJlclxuICAgICAgKSA9PiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IE9iamVjdC52YWx1ZXMoZmlsdGVyc1RvdGVzdCkuZmlsdGVyKFxuICAgICAgICAoZmlsdGVyOiBTZWxlY3RGaWx0ZXIpID0+IGZpbHRlci5zZWxlY3RlZFxuICAgICAgKTtcbiAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gISFzZWxlY3RlZC5maW5kKChmaWx0ZXI6IFNlbGVjdEZpbHRlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3RGdW5jdGlvbihmbGlnaHRJdGluZXJhcnksIGZpbHRlci52YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKF9mbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVwbGFjZUZpZWxkcyA9IChmaWVsZDogc3RyaW5nLCBmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gZmllbGRcbiAgICAgICAgLnJlcGxhY2UoJ09VVEJPVU5EX0RFUEFSVFVSRScsICdvdXRib3VuZEZsaWdodHMuMCcpXG4gICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICdPVVRCT1VORF9BUlJJVkFMJyxcbiAgICAgICAgICAnb3V0Ym91bmRGbGlnaHRzLicgKyAoZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggLSAxKVxuICAgICAgICApXG4gICAgICAgIC5yZXBsYWNlKCdJTkJPVU5EX0RFUEFSVFVSRScsICdpbmJvdW5kRmxpZ2h0cy4wJylcbiAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgJ0lOQk9VTkRfQVJSSVZBTCcsXG4gICAgICAgICAgJ2luYm91bmRGbGlnaHRzLicgKyAoKGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0cyB8fCBbXSkubGVuZ3RoIC0gMSlcbiAgICAgICAgKTtcbiAgICB9O1xuICAgIGNvbnN0IGlzQmV0d2VlbiA9IChcbiAgICAgIG1pbm1heDogTWluTWF4LFxuICAgICAgZmllbGQ6IHN0cmluZ1xuICAgICk6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgIHJldHVybiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxuICAgICAgICAgIC4uLnJlcGxhY2VGaWVsZHMoZmllbGQsIGZsaWdodEl0aW5lcmFyeSkuc3BsaXQoJy4nKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdmFsID49IG1pbm1heC5taW4gJiYgdmFsIDw9IG1pbm1heC5tYXg7XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc1RpbWVCZXR3ZWVuID0gKFxuICAgICAgbWlubWF4OiBNaW5NYXgsXG4gICAgICBmaWVsZDogc3RyaW5nXG4gICAgKTogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xuICAgICAgcmV0dXJuIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBtb21lbnQoXG4gICAgICAgICAgdGhpcy5oZWxwZXJzLmZyb21PYmplY3QoXG4gICAgICAgICAgICBmbGlnaHRJdGluZXJhcnksXG4gICAgICAgICAgICAuLi5yZXBsYWNlRmllbGRzKGZpZWxkLCBmbGlnaHRJdGluZXJhcnkpLnNwbGl0KCcuJylcbiAgICAgICAgICApXG4gICAgICAgICkuZ2V0KCdob3VyJyk7XG5cbiAgICAgICAgLy8gbm93IGF0dGVtcHQgdG8gZ2V0IHRoZSBtaW4gLSBtYXkgbmVlZCB0byBub3JtYWxpc2UgdGhpc1xuICAgICAgICBjb25zdCB2YWwyID0gbW9tZW50KFxuICAgICAgICAgIHRoaXMuaGVscGVycy5mcm9tT2JqZWN0KFxuICAgICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5LFxuICAgICAgICAgICAgLi4ucmVwbGFjZUZpZWxkcyhmaWVsZCwgZmxpZ2h0SXRpbmVyYXJ5KS5zcGxpdCgnLicpXG4gICAgICAgICAgKVxuICAgICAgICApLmdldCgnbWludXRlJyk7XG5cbiAgICAgICAgY29uc3QgdG90YWxUaW1lOiBudW1iZXIgPSBOdW1iZXIoYCR7dmFsfS4ke3RoaXMuaGVscGVycy5ub3JtYWxpc2VNaW51dGVUb0Jhc2UxMCh2YWwyKX1gKTtcbiAgICAgICAgcmV0dXJuIHRvdGFsVGltZSA+PSBtaW5tYXgubWluICYmIHRvdGFsVGltZSA8PSBtaW5tYXgubWF4O1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmllbGRIYXNWYWx1ZSA9IChcbiAgICAgIGZpZWxkOiBrZXlvZiBGbGlnaHRKb3VybmV5XG4gICAgKTogKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgIHJldHVybiAoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRbZmllbGRdID09PSB2YWx1ZTtcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IG91dEl0aW5lcmFyeVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pW10gPSBbXTtcbiAgICBjb25zdCBpbkl0aW5lcmFyeVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pW10gPSBbXTtcblxuICAgIGNvbnN0IGluRHVhbEl0aW5lcmFyeVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pW10gPSBbXTtcblxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5hcnJpdmFsVGltZSwgJ09VVEJPVU5EX0FSUklWQUwuZGF0ZVRpbWVBcnJpdmluZycpXG4gICAgKTtcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICBpc1RpbWVCZXR3ZWVuKGZpbHRlcnMuZGVwYXJ0dXJlVGltZSwgJ09VVEJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZycpXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5yZXR1cm5EdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpKTtcbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMuZHVyYXRpb24sICdvdXRib3VuZFRvdGFsRHVyYXRpb24nKSk7XG4gICAgb3V0SXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5zdG9wcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHM/Lmxlbmd0aCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5zdG9wcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCA9PT0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMudG90YWxTdG9wcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dFN0b3BzID0gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGluU3RvcHMgPSBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMubGVuZ3RoO1xuICAgICAgICBjb25zdCB0b3RhbFN0b3BzID0gb3V0U3RvcHMgPiBpblN0b3BzID8gb3V0U3RvcHMgOiBpblN0b3BzO1xuICAgICAgICByZXR1cm4gdG90YWxTdG9wcyA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy50b3RhbFN0b3BzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihcbiAgICAgICAgZmlsdGVycy50cmF2ZWxQb2xpY3ksXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb24gPSBmbGlnaHRJdGluZXJhcnkudW5hdmFpbGFibGVcbiAgICAgICAgICAgID8gVHJhdmVsUG9saWNpZXMuVU5BVkFJTEFCTEVcbiAgICAgICAgICAgIDogZmxpZ2h0SXRpbmVyYXJ5LnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoXG4gICAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLkFMTE9XX1dJVEhfUkVBU09OXG4gICAgICAgICAgICA6IFRyYXZlbFBvbGljaWVzLklOX1BPTElDWTtcbiAgICAgICAgICByZXR1cm4gcmVxdWlyZXNSZWFzb24gPT09IHZhbHVlO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihcbiAgICAgICAgZmlsdGVycy50cmF2ZWxQb2xpY3ksXG4gICAgICAgIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNSZWFzb24gPSBmbGlnaHRJdGluZXJhcnkudW5hdmFpbGFibGVcbiAgICAgICAgICAgID8gVHJhdmVsUG9saWNpZXMuVU5BVkFJTEFCTEVcbiAgICAgICAgICAgIDogZmxpZ2h0SXRpbmVyYXJ5LnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoXG4gICAgICAgICAgICA/IFRyYXZlbFBvbGljaWVzLkFMTE9XX1dJVEhfUkVBU09OXG4gICAgICAgICAgICA6IFRyYXZlbFBvbGljaWVzLklOX1BPTElDWTtcbiAgICAgICAgICByZXR1cm4gcmVxdWlyZXNSZWFzb24gPT09IHZhbHVlO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIG91dEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmJhZ2dhZ2UsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBiYWdnYWdlQXJyYXk6IG51bWJlcltdID0gZmxpZ2h0SXRpbmVyYXJ5LmJhZ2dhZ2VBbGxvd2FuY2VcbiAgICAgICAgICA/LmZpbHRlcihhID0+IGE/LnR5cGUgPT09ICdDaGVja0luJylcbiAgICAgICAgICAubWFwKGEgPT4gYT8ucXR5KSBhcyBudW1iZXJbXTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aCA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSkgOiAwO1xuICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5kZXBhdHVyZUFpcnBvcnQsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5hcnJpdmFsQWlycG9ydCwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1tmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICA/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLmR1cmF0aW9uLCAnb3V0Ym91bmRUb3RhbER1cmF0aW9uJykpO1xuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKGlzQmV0d2VlbihmaWx0ZXJzLnByaWNlLCAndG90YWwucHJpY2UnKSk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5yZXR1cm5BcnJpdmFsVGltZSwgJ0lOQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJylcbiAgICApO1xuXG4gICAgaW5EdWFsSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLnJldHVybkFycml2YWxUaW1lLCAnT1VUQk9VTkRfQVJSSVZBTC5kYXRlVGltZUFycml2aW5nJylcbiAgICApO1xuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgaXNUaW1lQmV0d2VlbihmaWx0ZXJzLnJldHVybkRlcGFydHVyZVRpbWUsICdJTkJPVU5EX0RFUEFSVFVSRS5kYXRlVGltZURlcGFydGluZycpXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIGlzVGltZUJldHdlZW4oZmlsdGVycy5yZXR1cm5EZXBhcnR1cmVUaW1lLCAnT1VUQk9VTkRfREVQQVJUVVJFLmRhdGVUaW1lRGVwYXJ0aW5nJylcbiAgICApO1xuXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goaXNCZXR3ZWVuKGZpbHRlcnMucmV0dXJuRHVyYXRpb24sICdpbmJvdW5kVG90YWxEdXJhdGlvbicpKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChpc0JldHdlZW4oZmlsdGVycy5yZXR1cm5EdXJhdGlvbiwgJ291dGJvdW5kVG90YWxEdXJhdGlvbicpKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuc3RvcHMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaW5JdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5zdG9wcywgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHM/Lmxlbmd0aCA9PT0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnN0b3BzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuYmFnZ2FnZSwgKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5LCB2YWx1ZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZ2dhZ2VBcnJheTogbnVtYmVyW10gPSBmbGlnaHRJdGluZXJhcnkuYmFnZ2FnZUFsbG93YW5jZVxuICAgICAgICAgID8uZmlsdGVyKGEgPT4gYT8udHlwZSA9PT0gJ0NoZWNrSW4nKVxuICAgICAgICAgIC5tYXAoKGJhZ2dhZ2VBbGxvd2FuY2U6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZ2dhZ2VBbGxvd2FuY2UucXR5KTtcbiAgICAgICAgY29uc3QgYmFnZ2FnZTogbnVtYmVyID0gYmFnZ2FnZUFycmF5Lmxlbmd0aCA/IE1hdGgubWluKC4uLmJhZ2dhZ2VBcnJheSkgOiAwO1xuICAgICAgICByZXR1cm4gYmFnZ2FnZSA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5iYWdnYWdlLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgYmFnZ2FnZUFycmF5OiBudW1iZXJbXSA9IGZsaWdodEl0aW5lcmFyeS5iYWdnYWdlQWxsb3dhbmNlXG4gICAgICAgICAgPy5maWx0ZXIoYSA9PiBhPy50eXBlID09PSAnQ2hlY2tJbicpXG4gICAgICAgICAgLm1hcCgoYmFnZ2FnZUFsbG93YW5jZTogQmFnZ2FnZUFsbG93YW5jZSkgPT4gYmFnZ2FnZUFsbG93YW5jZS5xdHkpO1xuICAgICAgICBjb25zdCBiYWdnYWdlOiBudW1iZXIgPSBiYWdnYWdlQXJyYXkubGVuZ3RoID8gTWF0aC5taW4oLi4uYmFnZ2FnZUFycmF5KSA6IDA7XG4gICAgICAgIHJldHVybiBiYWdnYWdlID09PSB2YWx1ZTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluSXRpbmVyYXJ5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMuZGVwYXR1cmVSZXR1cm5BaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5pbmJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkR1YWxJdGluZXJhcnlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5kZXBhdHVyZVJldHVybkFpcnBvcnQsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0c1swXT8ub3JpZ2luQWlycG9ydCA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpbkl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHNbZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICA/LmRlc3RpbmF0aW9uQWlycG9ydCA9PT0gdmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLmFycml2YWxSZXR1cm5BaXJwb3J0LCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzW2ZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgID8uZGVzdGluYXRpb25BaXJwb3J0ID09PSB2YWx1ZVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3Qgb3V0Sm91cm5leVRlc3RlcnM6ICgoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkgfCBGbGlnaHRKb3VybmV5KSA9PiBib29sZWFuKVtdID0gW107XG4gICAgb3V0Sm91cm5leVRlc3RlcnMucHVzaCh0ZXN0ZXIoZmlsdGVycy5jbGFzc2VzLCBmaWVsZEhhc1ZhbHVlKCdjYWJpbkNsYXNzJykpKTtcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmFpcmxpbmVzLCBmaWVsZEhhc1ZhbHVlKCdtYXJrZXRpbmdDYXJyaWVyJykpKTtcbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMucHJpdmF0ZUZhcmVzLCAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRKb3VybmV5LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiBmbGlnaHRJdGluZXJhcnkuZmFyZUluZm8udGl0bGUgPT09IHZhbHVlO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgaW5Kb3VybmV5VGVzdGVyczogKChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW4pW10gPSBbXTtcbiAgICBpbkpvdXJuZXlUZXN0ZXJzLnB1c2godGVzdGVyKGZpbHRlcnMuY2xhc3NlcywgZmllbGRIYXNWYWx1ZSgnY2FiaW5DbGFzcycpKSk7XG4gICAgaW5Kb3VybmV5VGVzdGVycy5wdXNoKHRlc3RlcihmaWx0ZXJzLmFpcmxpbmVzLCBmaWVsZEhhc1ZhbHVlKCdtYXJrZXRpbmdDYXJyaWVyJykpKTtcbiAgICBpbkpvdXJuZXlUZXN0ZXJzLnB1c2goXG4gICAgICB0ZXN0ZXIoZmlsdGVycy5wcml2YXRlRmFyZXMsIChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEpvdXJuZXksIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGZsaWdodEl0aW5lcmFyeS5mYXJlSW5mby50aXRsZSA9PT0gdmFsdWU7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBvdXRKb3VybmV5VGVzdGVycy5wdXNoKFxuICAgICAgdGVzdGVyKGZpbHRlcnMudmlhcywgZmllbGRIYXNWYWx1ZSgnb3JpZ2luQWlycG9ydCcpKSB8fFxuICAgICAgICB0ZXN0ZXIoZmlsdGVycy52aWFzLCBmaWVsZEhhc1ZhbHVlKCdkZXN0aW5hdGlvbkFpcnBvcnQnKSlcbiAgICApO1xuICAgIGluSm91cm5leVRlc3RlcnMucHVzaChcbiAgICAgIHRlc3RlcihmaWx0ZXJzLnZpYXMsIGZpZWxkSGFzVmFsdWUoJ29yaWdpbkFpcnBvcnQnKSkgfHxcbiAgICAgICAgdGVzdGVyKGZpbHRlcnMudmlhcywgZmllbGRIYXNWYWx1ZSgnZGVzdGluYXRpb25BaXJwb3J0JykpXG4gICAgKTtcblxuICAgIGNvbnN0IG91dEZpbHRlckl0aW5lcmFyaWVzID0gKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5KTogYm9vbGVhbiA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBvdXRJdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBib29sZWFuLCB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGFjYyA9IGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApICYmXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5Lm91dGJvdW5kRmxpZ2h0cyB8fFxuICAgICAgICAgICEhKGZsaWdodEl0aW5lcmFyeS5vdXRib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoXG4gICAgICAgICAgICAoZmxpZ2h0Sm91cm5leTogRmxpZ2h0Sm91cm5leSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gISFvdXRKb3VybmV5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4gYm9vbGVhblxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkpXG4gICAgICApO1xuICAgIH07XG4gICAgY29uc3QgaW5GaWx0ZXJJdGluZXJhcmllcyA9IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSk6IGJvb2xlYW4gPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgaW5JdGluZXJhcnlUZXN0ZXJzLnJlZHVjZShcbiAgICAgICAgICAoYWNjOiBib29sZWFuLCB0ZXN0ZXIxOiAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpID0+IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY2MgJiYgdGVzdGVyMShmbGlnaHRJdGluZXJhcnkpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZVxuICAgICAgICApICYmXG4gICAgICAgICghZmxpZ2h0SXRpbmVyYXJ5LmluYm91bmRGbGlnaHRzPy5sZW5ndGggfHxcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkuaW5ib3VuZEZsaWdodHMgfHwgW10pLmZpbmQoKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIHJldHVybiAhIWluSm91cm5leVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHRlc3RlcjI6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSB8IEZsaWdodEpvdXJuZXkpID0+IGJvb2xlYW5cbiAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgaW5EdWFsRmlsdGVySXRpbmVyYXJpZXMgPSAoZmxpZ2h0SXRpbmVyYXJ5OiBGbGlnaHRJdGluZXJhcnkpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGluRHVhbEl0aW5lcmFyeVRlc3RlcnMucmVkdWNlKFxuICAgICAgICAgIChhY2M6IGJvb2xlYW4sIHRlc3RlcjE6IChmbGlnaHRJdGluZXJhcnk6IEZsaWdodEl0aW5lcmFyeSkgPT4gYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIxKGZsaWdodEl0aW5lcmFyeSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgICkgJiZcbiAgICAgICAgKCFmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzPy5sZW5ndGggfHxcbiAgICAgICAgICAhIShmbGlnaHRJdGluZXJhcnkub3V0Ym91bmRGbGlnaHRzIHx8IFtdKS5maW5kKFxuICAgICAgICAgICAgKGZsaWdodEpvdXJuZXk6IEZsaWdodEpvdXJuZXkpOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuICEhaW5Kb3VybmV5VGVzdGVycy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgYWNjOiBib29sZWFuLFxuICAgICAgICAgICAgICAgICAgdGVzdGVyMjogKGZsaWdodEl0aW5lcmFyeTogRmxpZ2h0SXRpbmVyYXJ5IHwgRmxpZ2h0Sm91cm5leSkgPT4gYm9vbGVhblxuICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYyAmJiB0ZXN0ZXIyKGZsaWdodEpvdXJuZXkpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkpXG4gICAgICApO1xuICAgIH07XG5cblxuICAgIGNvbnN0IHNldFNlbGVjdGVkID0gKGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IHtcbiAgICAgIGZsaWdodC5zZWxlY3RlZCA9IGZsaWdodC51aWQgPT09IHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodD8udWlkO1xuICAgICAgZmxpZ2h0LnByZWZlcnJlZCA9IHRoaXMuaGVscGVycy5wcmVmZXJyZWREdWFsU2luZ2xlKFxuICAgICAgICBmbGlnaHQsXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICApO1xuICAgICAgZmxpZ2h0LnByZWZlcnJlZE1lc3NhZ2VzID0gdGhpcy5oZWxwZXJzLnByZWZlcnJlZE1lc3NhZ2VzRHVhbFNpbmdsZShcbiAgICAgICAgZmxpZ2h0LFxuICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgKTtcbiAgICAgIGZsaWdodC5wcmVmZXJlbmNlTGV2ZWwgPSB0aGlzLmhlbHBlcnMucHJlZmVyZW5jZUxldmVsRHVhbFNpbmdsZShcbiAgICAgICAgZmxpZ2h0LFxuICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgKTtcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZSA9IHRoaXMuaGVscGVycy51bmF2YWlsYWJsZUR1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25LZXlzID0gdGhpcy5oZWxwZXJzLnJlcXVpcmVzUmVhc29uRHVhbFNpbmdsZShcbiAgICAgICAgZmxpZ2h0LFxuICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgKTtcbiAgICAgIGZsaWdodC5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID0gdGhpcy5oZWxwZXJzLnJlcXVpcmVzUmVhc29uTWVzc2FnZUR1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICBmbGlnaHQudW5hdmFpbGFibGVNZXNzYWdlID0gdGhpcy5oZWxwZXJzLnVuYXZhaWxhYmxlTWVzc2FnZUR1YWxTaW5nbGUoXG4gICAgICAgIGZsaWdodCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmxpZ2h0O1xuICAgIH07XG4gICAgdGhpcy5yZXN1bHRzLm5leHQoXG4gICAgICBPYmplY3QuZnJlZXplKFxuICAgICAgICB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cykubWFwKChyZXN1bHQ0OiBGbGlnaHRBbGxRdW90ZVJlc3VsdCkgPT4ge1xuICAgICAgICAgIGxldCBuZXdKb3VybmV5czogYW55ID0gdGhpcy5ieVNjaGVkdWxlXG4gICAgICAgICAgICA/IHRoaXMuaGVscGVycy5jbG9uZShyZXN1bHQ0LnNlYXJjaEJ5U2NoZWR1bGVbdGhpcy5zZWxlY3RlZFNlZ21lbnRdKVxuICAgICAgICAgICAgOiB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0NC5qb3VybmV5cyk7XG4gICAgICAgICAgaWYgKGZpbHRlcnMuZmxpZ2h0TnVtYmVyKSB7XG4gICAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcigoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQob3V0RmxpZ2h0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1iZXIgPSBvdXRGbGlnaHQubWFya2V0aW5nQ2FycmllciArIG91dEZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlci50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXJzLmZsaWdodE51bWJlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKG91dGJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpbHRlcnMuaW5ib3VuZEZsaWdodE51bWJlcikge1xuICAgICAgICAgICAgbmV3Sm91cm5leXMgPSBuZXdKb3VybmV5cy5maWx0ZXIoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0uaW5ib3VuZEZsaWdodHMuZmluZChpbkZsaWdodCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gaW5GbGlnaHQubWFya2V0aW5nQ2FycmllciArIGluRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlcnMuaW5ib3VuZEZsaWdodE51bWJlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKGluYm91bmRGbGlnaHRzKSByZXR1cm4gZmxpZ2h0SXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFNlcnZpY2UuaXNDbG9uaW5nLmdldFZhbHVlKCkpIHtcbiAgICAgICAgICAgIG5ld0pvdXJuZXlzID0gbmV3Sm91cm5leXMuZmlsdGVyKChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlDbG9uaW5nRmlsdGVycyhmbGlnaHRJdGVtLCB0aGlzLnNlbGVjdGVkU2VnbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdKb3VybmV5cyA9IG5ld0pvdXJuZXlzLmZpbHRlcihvdXRGaWx0ZXJJdGluZXJhcmllcyk7XG4gICAgICAgICAgbGV0IG5ld0R1YWxTaW5nbGU6IEl0aW5lcmFyeVN1bW1hcnlbXSA9IHJlc3VsdDQubXVsdGkgYXMgSXRpbmVyYXJ5U3VtbWFyeVtdO1xuICAgICAgICAgIGlmICh0aGlzLmlzUmV0dXJuICYmICF0aGlzLmJ5U2NoZWR1bGUpIHtcbiAgICAgICAgICAgIGxldCBuZXdJbkpvdXJuZXlzOiBhbnkgPSB0aGlzLmhlbHBlcnMuY2xvbmUocmVzdWx0NC5qb3VybmV5cyk7XG4gICAgICAgICAgICBuZXdJbkpvdXJuZXlzID0gbmV3SW5Kb3VybmV5cy5maWx0ZXIoaW5GaWx0ZXJJdGluZXJhcmllcyk7XG4gICAgICAgICAgICBuZXdKb3VybmV5cyA9IHRoaXMubWVyZ2VPdXRJbkJvdW5kKG5ld0pvdXJuZXlzLCBuZXdJbkpvdXJuZXlzKTtcblxuICAgICAgICAgICAgLy8gRFVBTCBTSU5HTEVcbiAgICAgICAgICAgIGxldCBkdWFsU2luZ2xlSm91cm5leXNPdXQ6IGFueVtdID0gW107XG4gICAgICAgICAgICBsZXQgZHVhbFNpbmdsZUpvdXJuZXlzSW46IGFueVtdID0gW107XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leXNPdXQgPSB0aGlzLnNlbGVjdGVkRmxpZ2h0LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB0aGlzLmhlbHBlcnNcbiAgICAgICAgICAgICAgICAgICAgLmNsb25lKHJlc3VsdDQubXVsdGlbMF0/LnJlc3VsdHMpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgKGl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiBpdGVtLmpvdXJuZXlIYXNoID09PSB0aGlzLnNlbGVjdGVkVUlkXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHRoaXMuaGVscGVyc1xuICAgICAgICAgICAgICAgICAgICAuY2xvbmUocmVzdWx0NC5tdWx0aVswXT8ucmVzdWx0cylcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihvdXRGaWx0ZXJJdGluZXJhcmllcylcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQodGhpcy5fc29ydEl0aW5hcnlSb3V0aW5lc1tzb3J0VmFsdWVdKTtcblxuICAgICAgICAgICAgICBkdWFsU2luZ2xlSm91cm5leXNJbiA9IHRoaXMuc2VsZWN0ZWRGbGlnaHQudmFsdWVcbiAgICAgICAgICAgICAgICA/IHRoaXMuaGVscGVyc1xuICAgICAgICAgICAgICAgICAgICAuY2xvbmUocmVzdWx0NC5tdWx0aVsxXT8ucmVzdWx0cylcbiAgICAgICAgICAgICAgICAgICAgLm1hcChzZXRTZWxlY3RlZCkgLy9NYXAgZmlyc3QgYXMgdGhpcyBhZmZlY3RzIHRoZSBmaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihpbkR1YWxGaWx0ZXJJdGluZXJhcmllcylcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQodGhpcy5fc29ydEl0aW5hcnlSb3V0aW5lc1tzb3J0VmFsdWVdKVxuICAgICAgICAgICAgICAgIDogdGhpcy5oZWxwZXJzXG4gICAgICAgICAgICAgICAgICAgIC5jbG9uZShyZXN1bHQ0Lm11bHRpWzFdPy5yZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGluRHVhbEZpbHRlckl0aW5lcmFyaWVzKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCh0aGlzLl9zb3J0SXRpbmFyeVJvdXRpbmVzW3NvcnRWYWx1ZV0pO1xuXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJzLmZsaWdodE51bWJlcikge1xuICAgICAgICAgICAgICAgIGR1YWxTaW5nbGVKb3VybmV5c091dCA9IGR1YWxTaW5nbGVKb3VybmV5c091dC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dGJvdW5kRmxpZ2h0cyA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmZpbmQob3V0RmxpZ2h0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBudW1iZXIgPSBvdXRGbGlnaHQubWFya2V0aW5nQ2FycmllciArIG91dEZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlci50b0xvd2VyQ2FzZSgpID09PSBmaWx0ZXJzLmZsaWdodE51bWJlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG91dGJvdW5kRmxpZ2h0cykgcmV0dXJuIGZsaWdodEl0ZW07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZmlsdGVycy5pbmJvdW5kRmxpZ2h0TnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgZHVhbFNpbmdsZUpvdXJuZXlzSW4gPSBkdWFsU2luZ2xlSm91cm5leXNJbi5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoZmxpZ2h0SXRlbTogRmxpZ2h0SXRpbmVyYXJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluYm91bmRGbGlnaHRzID0gZmxpZ2h0SXRlbS5vdXRib3VuZEZsaWdodHMuZmluZChpbkZsaWdodCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gaW5GbGlnaHQubWFya2V0aW5nQ2FycmllciArIGluRmxpZ2h0Lm1hcmtldGluZ0ZsaWdodE51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlcnMuaW5ib3VuZEZsaWdodE51bWJlci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluYm91bmRGbGlnaHRzKSByZXR1cm4gZmxpZ2h0SXRlbTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGArKysgRXJyb3Igc29ydGluZyBkdWFsIHNpbmdsZXM6ICR7ZXJyb3J9ICsrK2ApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV3RHVhbFNpbmdsZVswXSkge1xuICAgICAgICAgICAgICBuZXdEdWFsU2luZ2xlWzBdLnJlc3VsdHMgPSBkdWFsU2luZ2xlSm91cm5leXNPdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV3RHVhbFNpbmdsZVsxXSkge1xuICAgICAgICAgICAgICBuZXdEdWFsU2luZ2xlWzFdLnJlc3VsdHMgPSBkdWFsU2luZ2xlSm91cm5leXNJbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3Sm91cm5leXMuc29ydCh0aGlzLl9zb3J0SXRpbmFyeVJvdXRpbmVzW3NvcnRWYWx1ZV0pO1xuICAgICAgICAgIGxldCBmaWx0ZXJlZHlTY2hlZHVsZTogRmxpZ2h0SXRpbmVyYXJ5W11bXSA9IFtdO1xuICAgICAgICAgIHJlc3VsdDQuc2VhcmNoQnlTY2hlZHVsZVt0aGlzLnNlbGVjdGVkU2VnbWVudF0gPSBuZXdKb3VybmV5cztcbiAgICAgICAgICBmaWx0ZXJlZHlTY2hlZHVsZSA9IHJlc3VsdDQuc2VhcmNoQnlTY2hlZHVsZTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ0ZsaWdodEFsbFF1b3RlUmVzdWx0JyxcbiAgICAgICAgICAgIGpvdXJuZXlzOiAhdGhpcy5ieVNjaGVkdWxlXG4gICAgICAgICAgICAgID8gPEZsaWdodEl0aW5lcmFyeVtdPm5ld0pvdXJuZXlzXG4gICAgICAgICAgICAgIDogPEZsaWdodEl0aW5lcmFyeVtdPnJlc3VsdDQuam91cm5leXMsXG4gICAgICAgICAgICBtdWx0aTogbmV3RHVhbFNpbmdsZSxcbiAgICAgICAgICAgIHNlYXJjaEJ5U2NoZWR1bGU6IHRoaXMuYnlTY2hlZHVsZVxuICAgICAgICAgICAgICA/IDxGbGlnaHRJdGluZXJhcnlbXVtdPmZpbHRlcmVkeVNjaGVkdWxlXG4gICAgICAgICAgICAgIDogPEZsaWdodEl0aW5lcmFyeVtdW10+cmVzdWx0NC5zZWFyY2hCeVNjaGVkdWxlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICkgYXMgdW5rbm93biBhcyBGbGlnaHRRdW90ZVJlc3VsdEFycmF5XG4gICAgKTtcbiAgICAvLyB9XG4gIH1cblxuICBhcHBseUNsb25pbmdGaWx0ZXJzKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeSwgc2VsZWN0ZWRTZWdtZW50OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuYnlTY2hlZHVsZSkge1xuICAgICAgY29uc3Qgb3V0Ym91bmRNYXRjaCA9IGZsaWdodEl0ZW0ub3V0Ym91bmRGbGlnaHRzLmV2ZXJ5KG91dGJvdW5kRmxpZ2h0ID0+XG4gICAgICAgIHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMub3V0Ym91bmRGbGlnaHRzLnNvbWUoKGNsb25lZE91dGJvdW5kOiBGbGlnaHRKb3VybmV5KSA9PlxuICAgICAgICAgIGNsb25lZE91dGJvdW5kLm1hcmtldGluZ0ZsaWdodE51bWJlciA9PT0gb3V0Ym91bmRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGluYm91bmRNYXRjaCA9XG4gICAgICAgIHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuam91cm5leVR5cGUgPT09IEZsaWdodEpvdXJuZXlUeXBlLlJvdW5kdHJpcFxuICAgICAgICAgID8gZmxpZ2h0SXRlbS5pbmJvdW5kRmxpZ2h0cy5ldmVyeShpbmJvdW5kRmxpZ2h0ID0+XG4gICAgICAgICAgICAgIHRoaXMuY2xvbmVkQmFza2V0SXRlbURldGFpbHMuaW5ib3VuZEZsaWdodHMuc29tZSgoY2xvbmVkSW5ib3VuZDogRmxpZ2h0Sm91cm5leSkgPT5cbiAgICAgICAgICAgICAgICBjbG9uZWRJbmJvdW5kLm1hcmtldGluZ0ZsaWdodE51bWJlciA9PT0gaW5ib3VuZEZsaWdodC5tYXJrZXRpbmdGbGlnaHROdW1iZXJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogdHJ1ZTtcblxuICAgICAgY29uc3QgbGVuZ3Roc01hdGNoID1cbiAgICAgICAgZmxpZ2h0SXRlbS5vdXRib3VuZEZsaWdodHMubGVuZ3RoID09PSB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLm91dGJvdW5kRmxpZ2h0cy5sZW5ndGggJiZcbiAgICAgICAgICAodGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5qb3VybmV5VHlwZSAhPT0gRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwIHx8XG4gICAgICAgICAgICBmbGlnaHRJdGVtLmluYm91bmRGbGlnaHRzLmxlbmd0aCA9PT0gdGhpcy5jbG9uZWRCYXNrZXRJdGVtRGV0YWlscy5pbmJvdW5kRmxpZ2h0cy5sZW5ndGgpO1xuICAgICAgcmV0dXJuIG91dGJvdW5kTWF0Y2ggJiYgaW5ib3VuZE1hdGNoICYmIGxlbmd0aHNNYXRjaDtcblxuICAgIH0gZWxzZSBpZiAodGhpcy5ieVNjaGVkdWxlICYmIHR5cGVvZiBzZWxlY3RlZFNlZ21lbnQgPT09ICdudW1iZXInICYmIHNlbGVjdGVkU2VnbWVudCA+PSAwKSB7XG4gICAgICBjb25zdCBvdXRib3VuZE1hdGNoID0gZmxpZ2h0SXRlbS5vdXRib3VuZEZsaWdodHMuZXZlcnkob3V0Ym91bmRGbGlnaHQgPT5cbiAgICAgICAgICB0aGlzLmNsb25lZEJhc2tldEl0ZW1EZXRhaWxzLm91dGJvdW5kRmxpZ2h0c1tzZWxlY3RlZFNlZ21lbnRdLm1hcmtldGluZ0ZsaWdodE51bWJlciA9PT0gb3V0Ym91bmRGbGlnaHQubWFya2V0aW5nRmxpZ2h0TnVtYmVyXG4gICAgICApO1xuICAgICAgcmV0dXJuIG91dGJvdW5kTWF0Y2g7XG4gICAgfVxuICB9XG5cbiAgbWVyZ2VPdXRJbkJvdW5kKG91dGJvdW5kOiBGbGlnaHRJdGluZXJhcnlbXSwgaW5ib3VuZDogRmxpZ2h0SXRpbmVyYXJ5W10pOiBGbGlnaHRJdGluZXJhcnlbXSB7XG4gICAgbGV0IGZsaWdodHM6IEZsaWdodEl0aW5lcmFyeVtdID0gW107XG4gICAgb3V0Ym91bmQuZm9yRWFjaChvdXRGbGlnaHQgPT4ge1xuICAgICAgaWYgKGluYm91bmQuZmluZChhID0+IGEudWlkID09IG91dEZsaWdodC51aWQpKSBmbGlnaHRzW291dEZsaWdodC51aWRdID0gb3V0RmxpZ2h0O1xuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGZsaWdodHMpO1xuICB9XG5cbiAgdXBkYXRlTG93ZXN0UHJpY2UocmVzdWx0czogRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSk6IElDaGVhcGVzdFByaWNlIHtcbiAgICBpZiAoIXJlc3VsdHMubGVuZ3RoIHx8IHRoaXMuc2VhcmNoU2VydmljZS5pc0ZsaWdodHNHcm91cGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBqb3VybmV5cyA9IChyZXN1bHRzWzBdIGFzIEZsaWdodEFsbFF1b3RlUmVzdWx0KS5qb3VybmV5cztcbiAgICBpZiAoIWpvdXJuZXlzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3VycmVuY3kgPSBqb3VybmV5c1swXS50b3RhbC5jdXJyZW5jeTtcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlLCByZXN1bHQ6IEZsaWdodEl0aW5lcmFyeSkgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC50b3RhbC5wcmljZTtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XG4gICAgICAgIHJldHVybiBjaGVhcGVzdFByaWNlO1xuICAgICAgfSxcbiAgICAgIHsgYW1vdW50OiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiwgY3VycmVuY3lDb2RlOiBjdXJyZW5jeSB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RlZER1YWxTaW5nbGUoc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKTogdm9pZCB7XG4gICAgdGhpcy5mZXRjaGluZ1J1bGVzID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkRmxpZ2h0Lm5leHQoc2VsZWN0ZWRGbGlnaHQpO1xuICAgIHRoaXMuc2VsZWN0ZWRVSWQgPSBzZWxlY3RlZEZsaWdodC5qb3VybmV5SGFzaDtcbiAgICBjb25zdCBhcHBseVJ1bGVzT2JzZXJ2YWJsZXMgPSB0aGlzLmhlbHBlcnMuY2xvbmUodGhpcy5mdWxsUmVzdWx0cykubWFwKChyZXN1bHQ0OiBhbnkpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmFwcGx5RmxpZ2h0UnVsZXNcbiAgICAgICAgLmZldGNoT25lKHtcbiAgICAgICAgICBzZWxlY3RlZE91dGJvdW5kRmxpZ2h0OiBzZWxlY3RlZEZsaWdodCxcbiAgICAgICAgICBhdmFpbGFibGVJbmJvdW5kRmxpZ2h0czogcmVzdWx0NC5tdWx0aVsxXT8ucmVzdWx0cyxcbiAgICAgICAgICBzZWFyY2hJZDogdGhpcy5yYXdSZXN1bHRzLnNlYXJjaElkXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKChydWxlczogUnVsZUFjdGlvblN1bW1hcnlJbnRlcmZhY2UpID0+IHtcbiAgICAgICAgICAgIGlmIChydWxlcz8uZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFt0aGlzLnNlbGVjdGVkVUlkXSkge1xuICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeSA9IHRoaXMuaGVscGVycy5tZXJnZU9iamVjdHModGhpcy5fcnVsZUFjdGlvblN1bW1hcnksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgcmVzdWx0NC5tdWx0aVsxXT8ucmVzdWx0cy5tYXAoKGZsaWdodEl0ZW06IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS5yZW1vdmVSZXN1bHQgPSB0aGlzLmhlbHBlcnMucmVtb3ZlUmVzdWx0c0R1YWxTaW5nbGUoXG4gICAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLnByZWZlcnJlZCA9IHRoaXMuaGVscGVycy5wcmVmZXJyZWREdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS5wcmVmZXJyZWRNZXNzYWdlcyA9IHRoaXMuaGVscGVycy5wcmVmZXJyZWRNZXNzYWdlc0R1YWxTaW5nbGUoXG4gICAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLnByZWZlcmVuY2VMZXZlbCA9IHRoaXMuaGVscGVycy5wcmVmZXJlbmNlTGV2ZWxEdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS5yZXF1aXJlc1JlYXNvbktleXMgPSB0aGlzLmhlbHBlcnMucmVxdWlyZXNSZWFzb25EdWFsU2luZ2xlKFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0SXRlbSxcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRVSWQsXG4gICAgICAgICAgICAgICAgICB0aGlzLl9ydWxlQWN0aW9uU3VtbWFyeVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmxpZ2h0SXRlbS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID0gdGhpcy5oZWxwZXJzLnJlcXVpcmVzUmVhc29uTWVzc2FnZUR1YWxTaW5nbGUoXG4gICAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLnVuYXZhaWxhYmxlID0gdGhpcy5oZWxwZXJzLnVuYXZhaWxhYmxlRHVhbFNpbmdsZShcbiAgICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVUlkLFxuICAgICAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZsaWdodEl0ZW0udW5hdmFpbGFibGVNZXNzYWdlID0gdGhpcy5oZWxwZXJzLnVuYXZhaWxhYmxlTWVzc2FnZUR1YWxTaW5nbGUoXG4gICAgICAgICAgICAgICAgICBmbGlnaHRJdGVtLFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVJZCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChyZXN1bHQ0Lm11bHRpWzFdPy5yZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0NC5tdWx0aVsxXS5yZXN1bHRzID0gcmVzdWx0NC5tdWx0aVsxXS5yZXN1bHRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChmbGlnaHRJdGVtOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4gIWZsaWdodEl0ZW0ucmVtb3ZlUmVzdWx0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IG5ld0R1YWxTaW5nbGU6IEl0aW5lcmFyeVN1bW1hcnlbXSA9IHJlc3VsdDQubXVsdGk7XG4gICAgICAgICAgICBsZXQgZHVhbFNpbmdsZUpvdXJuZXlzT3V0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9uc1tdID0gW1xuICAgICAgICAgICAgICB0aGlzLmhlbHBlcnMuY2xvbmUoc2VsZWN0ZWRGbGlnaHQpXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgLy8gLmZpbHRlcigoaXRlbTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpID0+IGl0ZW0udWlkID09PSBzZWxlY3RlZEZsaWdodC51aWQpO1xuXG4gICAgICAgICAgICBpZiAobmV3RHVhbFNpbmdsZVswXSkge1xuICAgICAgICAgICAgICBuZXdEdWFsU2luZ2xlWzBdLnJlc3VsdHMgPSBkdWFsU2luZ2xlSm91cm5leXNPdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZldGNoaW5nUnVsZXMgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgX3R5cGU6ICdGbGlnaHRBbGxRdW90ZVJlc3VsdCcsXG4gICAgICAgICAgICAgIGpvdXJuZXlzOiA8RmxpZ2h0SXRpbmVyYXJ5W10+cmVzdWx0NC5qb3VybmV5cyxcbiAgICAgICAgICAgICAgbXVsdGk6IG5ld0R1YWxTaW5nbGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGZvcmtKb2luKGFwcGx5UnVsZXNPYnNlcnZhYmxlcykuc3Vic2NyaWJlKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMucmVzdWx0cy5uZXh0KE9iamVjdC5mcmVlemUocmVzdWx0cykgYXMgRmxpZ2h0UXVvdGVSZXN1bHRBcnJheSk7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0U2VsZWN0ZWREdWFsU2luZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRGbGlnaHQubmV4dChudWxsKTtcbiAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgfVxuXG5cbiAgYXN5bmMgc2VsZWN0R3JvdXBlZEZsaWdodChcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtLFxuICAgIGdyb3VwSWQ6IG51bWJlcixcbiAgICBpc0xpZ2h0bmluZzogYm9vbGVhbiA9IGZhbHNlIC8vIHRlbXAgYXJnIGFzIHNlYXRtYXBzIG9uIG9uIGx1XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuZ2V0RGVmYXVsdEJhc2tldCgpO1xuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcbiAgICBjb25zdCBpc1NhYnJlUnlhbmFpciA9IHNlbGVjdGVkRmxpZ2h0LnNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLlNhYnJlRmxpZ2h0ICYmIFsuLi5zZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMsIC4uLnNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzXS5zb21lKGZsaWdodCA9PiBmbGlnaHQubWFya2V0aW5nQ2Fycmllck5hbWUgPT09XCJSeWFuYWlyXCIgfHwgZmxpZ2h0Lm9wZXJhdGluZ0NhcnJpZXJOYW1lID09PVwiUnlhbmFpclwiKTtcbiAgICBjb25zdCBpc1RGWCA9IHNlbGVjdGVkRmxpZ2h0LnNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLlRyYXZlbGZ1c2lvbjtcblxuXG4gICAgaWYgKFxuICAgICAgKGJhc2tldCAmJiB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm9uZVdheSkgfHxcbiAgICAgICh0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSAmJlxuICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uT3V0Ym91bmQpXG4gICAgKSB7XG4gICAgICAvLyB0ZW1wIHN0YXRlbWVudCBhcyBzZWF0bWFwcyBvbiBvbiBsdSwgYWxzbyBvbmx5IGZvciBURlggZm9yIHRoZSBtb21lbnRcbiAgICAgIGlmIChpc0xpZ2h0bmluZyAmJiB0aGlzLmNoZWNrU2VhdG1hcEV4dHJhc0VuYWJsZWQoc2VsZWN0ZWRGbGlnaHQpKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbEV4dHJhcyA9IGF3YWl0IHRoaXMuZ2V0RmxpZ2h0RGV0YWlsRXh0cmFzKHNlbGVjdGVkRmxpZ2h0LCBkaXJlY3Rpb24pO1xuICAgICAgICBpZiAoZGV0YWlsRXh0cmFzPy52YWxpZCkge1xuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHMsXG4gICAgICAgICAgICBkZXRhaWxFeHRyYXMsXG4gICAgICAgICAgICBpc1RGWCB8fCBpc1NhYnJlUnlhbmFpclxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KGludEJhc2tldCwgc2VsZWN0ZWRGbGlnaHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoaW50QmFza2V0LCBzZWxlY3RlZEZsaWdodCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYmFza2V0ICYmXG4gICAgICB0aGlzLm9yaWdpbmFsVXNlclNlYXJjaC5jaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybiAmJlxuICAgICAgKGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5PdXRib3VuZCB8fFxuICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kKVxuICAgICkge1xuICAgICAgdGhpcy5vdXRib3VuZENhYmluQ2xhc3MgPSBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uY2FiaW5DbGFzcztcbiAgICAgIGlmIChzZWxlY3RlZEZsaWdodC5zZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBJZCA9IC0xO1xuICAgICAgICB0aGlzLm91dGJvdW5kQ2FiaW5DbGFzcyA9ICcnOyAvLyByZXNldCBvdXRib3VuZENhYmluQ2xhc3NcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBzZWxlY3RlZEZsaWdodDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwSWQgPSBncm91cElkO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlVHJhdmVsUG9saWNpZXMoKTtcbiAgICAgIH1cbiAgICAgIHNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkID0gIXNlbGVjdGVkRmxpZ2h0LnNlbGVjdGVkO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBiYXNrZXQgJiZcbiAgICAgIHRoaXMub3JpZ2luYWxVc2VyU2VhcmNoLmNob3NlblNlYXJjaFR5cGUgPT09IEZsaWdodFNlYXJjaFR5cGUucmV0dXJuICYmXG4gICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uSW5ib3VuZCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XG4gICAgKSB7XG4gICAgICAvLyB0ZW1wIHN0YXRlbWVudCBhcyBzZWF0bWFwcyBvbiBvbiBsdVxuICAgICAgaWYgKGlzTGlnaHRuaW5nICYmIHRoaXMuY2hlY2tTZWF0bWFwRXh0cmFzRW5hYmxlZChzZWxlY3RlZEZsaWdodCkpIHtcbiAgICAgICAgY29uc3QgZGV0YWlsRXh0cmFzID0gYXdhaXQgdGhpcy5nZXRGbGlnaHREZXRhaWxFeHRyYXMoc2VsZWN0ZWRGbGlnaHQsIGRpcmVjdGlvbik7XG4gICAgICAgIGlmIChkZXRhaWxFeHRyYXM/LnZhbGlkKSB7XG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhcyxcbiAgICAgICAgICAgIGlzVEZYIHx8IGlzU2FicmVSeWFuYWlyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhcyxcbiAgICAgICAgICAgIGlzVEZYIHx8IGlzU2FicmVSeWFuYWlyXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLm91dGJvdW5kQ2FiaW5DbGFzcyA9ICcnOyAvLyByZXNldCBvdXRib3VuZENhYmluQ2xhc3NcbiAgICAgICAgICBjb25zdCBzY2hlbWFEZXRhaWxzID0gdGhpcy5jcmVhdGVTY2hlbWFEZXRhaWxzKFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQsXG4gICAgICAgICAgICBGbGlnaHRKb3VybmV5VHlwZS5Sb3VuZHRyaXBcbiAgICAgICAgICApO1xuICAgICAgICAgIGF3YWl0IHRoaXMuZG9Cb29raW5nKFxuICAgICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQsXG4gICAgICAgICAgICBzY2hlbWFEZXRhaWxzLFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nVVRDLFxuICAgICAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVENcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5hcHBseUZpbHRlcnModGhpcy5jdXJyZW50RmlsdGVycywgdGhpcy5jdXJyZW50U29ydCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3V0Ym91bmRDYWJpbkNsYXNzID0gJyc7IC8vIHJlc2V0IG91dGJvdW5kQ2FiaW5DbGFzc1xuICAgICAgICBjb25zdCBzY2hlbWFEZXRhaWxzID0gdGhpcy5jcmVhdGVTY2hlbWFEZXRhaWxzKHNlbGVjdGVkRmxpZ2h0LCBGbGlnaHRKb3VybmV5VHlwZS5Sb3VuZHRyaXApO1xuICAgICAgICBhd2FpdCB0aGlzLmRvQm9va2luZyhcbiAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQsXG4gICAgICAgICAgc2NoZW1hRGV0YWlscyxcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVEMsXG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmdVVENcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGJhc2tldCAmJlxuICAgICAgdGhpcy5vcmlnaW5hbFVzZXJTZWFyY2guY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5yZXR1cm4gJiZcbiAgICAgIGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0XG4gICAgKSB7XG4gICAgICAvLyB0ZW1wIHN0YXRlbWVudCBhcyBzZWF0bWFwcyBvbiBvbiBsdVxuICAgICAgaWYgKGlzTGlnaHRuaW5nICYmIHRoaXMuY2hlY2tTZWF0bWFwRXh0cmFzRW5hYmxlZChzZWxlY3RlZEZsaWdodCkpIHtcbiAgICAgICAgY29uc3QgZGV0YWlsRXh0cmFzT3V0ID0gYXdhaXQgdGhpcy5nZXRGbGlnaHREZXRhaWxFeHRyYXMoc2VsZWN0ZWRGbGlnaHQsIGRpcmVjdGlvbik7XG4gICAgICAgIGlmIChkZXRhaWxFeHRyYXNPdXQ/LnZhbGlkKSB7XG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhc091dCxcbiAgICAgICAgICAgIGlzVEZYIHx8IGlzU2FicmVSeWFuYWlyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyA9IHRoaXMuYXBwbHlFeHRyYURldGFpbHNUb0ZsaWdodHMoXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhc091dCxcbiAgICAgICAgICAgIGlzVEZYIHx8IGlzU2FicmVSeWFuYWlyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoXG4gICAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgICBzZWxlY3RlZEZsaWdodCxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgZGlyZWN0aW9uID09PSBGbGlnaHREaXJlY3Rpb25FbnVtLkR1YWxTaW5nbGVJbmJvdW5kXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZXRhaWxFeHRyYXNJbiA9IGF3YWl0IHRoaXMuZ2V0RmxpZ2h0RGV0YWlsRXh0cmFzKHNlbGVjdGVkRmxpZ2h0LCBkaXJlY3Rpb24pO1xuICAgICAgICBpZiAoZGV0YWlsRXh0cmFzSW4/LnZhbGlkKSB7XG4gICAgICAgICAgc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICAgIGRldGFpbEV4dHJhc0luLFxuICAgICAgICAgICAgaXNURlggfHwgaXNTYWJyZVJ5YW5haXJcbiAgICAgICAgICApO1xuICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICAgIHNlbGVjdGVkRmxpZ2h0LmluYm91bmRGbGlnaHRzLFxuICAgICAgICAgICAgZGV0YWlsRXh0cmFzSW4sXG4gICAgICAgICAgICBpc1RGWCB8fCBpc1NhYnJlUnlhbmFpclxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KFxuICAgICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBkaXJlY3Rpb24gIT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycyh0aGlzLmN1cnJlbnRGaWx0ZXJzLCB0aGlzLmN1cnJlbnRTb3J0KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmJvb2tTaW5nbGVGbGlnaHQoXG4gICAgICAgICAgaW50QmFza2V0LFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBkaXJlY3Rpb24gIT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmRcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ib29rU2luZ2xlRmxpZ2h0KFxuICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICBzZWxlY3RlZEZsaWdodCxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBkaXJlY3Rpb24gPT09IEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZUluYm91bmRcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBzZWxlY3RGbGlnaHRTZWF0TWFwQ2hlY2soXG4gICAgZmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBkaXJlY3Rpb246IEZsaWdodERpcmVjdGlvbkVudW0gPSBudWxsLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vZm9yIFNjaW9uIGFuZCBHbzIgZmxpZ2h0XG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSA9IGF3YWl0IHRoaXMuYmFza2V0U2VydmljZS5nZXREZWZhdWx0QmFza2V0KCk7XG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gRmxpZ2h0RGlyZWN0aW9uRW51bS5EdWFsU2luZ2xlSW5ib3VuZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZHVhbFNpbmdsZVNlYXRDaGVjayhmbGlnaHQsIGludEJhc2tldCwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrRm9yU2VhdE1hcChmbGlnaHQsIGludEJhc2tldCwgZmFsc2UsIGdtdCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tGb3JTZWF0TWFwKFxuICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBkdWFsSW5ib3VuZDogYm9vbGVhbixcbiAgICBnbXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5jaGVja1NlYXRtYXBFeHRyYXNFbmFibGVkKGZsaWdodCkpIHtcbiAgICAgIGNvbnN0IGlzU2FicmVSeWFuYWlyID0gZmxpZ2h0LnNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLlNhYnJlRmxpZ2h0ICYmIFsuLi5mbGlnaHQub3V0Ym91bmRGbGlnaHRzLCAuLi5mbGlnaHQuaW5ib3VuZEZsaWdodHNdLnNvbWUoZmxpZ2h0ID0+IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyTmFtZSA9PT1cIlJ5YW5haXJcIiB8fCBmbGlnaHQub3BlcmF0aW5nQ2Fycmllck5hbWUgPT09XCJSeWFuYWlyXCIpO1xuXG4gICAgICBjb25zdCBpc1RGWCA9IGZsaWdodC5zb3VyY2UgPT09IFNlcnZpY2VQcm92aWRlci5UcmF2ZWxmdXNpb247XG5cbiAgICAgIGNvbnN0IGRldGFpbEV4dHJhcyA9IGF3YWl0IHRoaXMuZ2V0RmxpZ2h0RGV0YWlsRXh0cmFzKFxuICAgICAgICBmbGlnaHQsXG4gICAgICAgIEZsaWdodERpcmVjdGlvbkVudW0uRHVhbFNpbmdsZU91dGJvdW5kLFxuICAgICAgICBnbXRcbiAgICAgICk7XG4gICAgICBpZiAoZGV0YWlsRXh0cmFzPy52YWxpZCkge1xuICAgICAgICBmbGlnaHQub3V0Ym91bmRGbGlnaHRzID0gdGhpcy5hcHBseUV4dHJhRGV0YWlsc1RvRmxpZ2h0cyhcbiAgICAgICAgICBmbGlnaHQub3V0Ym91bmRGbGlnaHRzLFxuICAgICAgICAgIGRldGFpbEV4dHJhcyxcbiAgICAgICAgICBpc1RGWCB8fCBpc1NhYnJlUnlhbmFpclxuICAgICAgICApO1xuICAgICAgICBmbGlnaHQuaW5ib3VuZEZsaWdodHMgPSB0aGlzLmFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgICAgICAgIGZsaWdodC5pbmJvdW5kRmxpZ2h0cyxcbiAgICAgICAgICBkZXRhaWxFeHRyYXMsXG4gICAgICAgICAgaXNURlggfHwgaXNTYWJyZVJ5YW5haXJcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRGbGlnaHRKb3VybmV5c1RvQmFza2V0KGZsaWdodCwgaW50QmFza2V0LCBmYWxzZSwgZHVhbEluYm91bmQsIGdtdCk7XG4gICAgICAgIHJldHVybiBkZXRhaWxFeHRyYXMuaXNCb29raW5nO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZEZsaWdodEpvdXJuZXlzVG9CYXNrZXQoZmxpZ2h0LCBpbnRCYXNrZXQsIGZhbHNlLCBkdWFsSW5ib3VuZCwgZ210KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBhc3luYyBkdWFsU2luZ2xlU2VhdENoZWNrKFxuICAgIGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBkdWFsSW5ib3VuZDogYm9vbGVhblxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBzZWxlY3RlZG91dGJvdW5kRFMgPSB0aGlzLnNlbGVjdGVkRmxpZ2h0LnZhbHVlO1xuICAgIGNvbnN0IG91dHJ1bGVzID0gdGhpcy5nZXRGYXJlUnVsZXMoc2VsZWN0ZWRvdXRib3VuZERTPy5qb3VybmV5SGFzaCk7XG4gICAgY29uc3Qgb3V0ZmxpZ2h0Q29weSA9IDxGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucz50aGlzLmhlbHBlcnMuY2xvbmUoc2VsZWN0ZWRvdXRib3VuZERTKTtcbiAgICBpZiAob3V0cnVsZXMuam91cm5leVdoZW5TZWxlY3RlZD8ucmVxdWlyZXNSZWFzb24pIHtcbiAgICAgIG91dGZsaWdodENvcHkucmVxdWlyZXNSZWFzb25LZXlzID0gb3V0cnVsZXMuam91cm5leVdoZW5TZWxlY3RlZD8ucmVxdWlyZXNSZWFzb25LZXlzO1xuICAgICAgb3V0ZmxpZ2h0Q29weS5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzID0gb3V0cnVsZXMuam91cm5leVdoZW5TZWxlY3RlZD8ucmVxdWlyZXNSZWFzb25NZXNzYWdlcztcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jaGVja0ZvclNlYXRNYXAob3V0ZmxpZ2h0Q29weSwgaW50QmFza2V0LCBmYWxzZSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tGb3JTZWF0TWFwKGZsaWdodCwgaW50QmFza2V0LCBkdWFsSW5ib3VuZCk7XG4gIH1cblxuICBjaGVja1NlYXRtYXBFeHRyYXNFbmFibGVkKHNlbGVjdGVkRmxpZ2h0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlYXRNYXBDb25maWdzID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgR0RTOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgICAgU2FicmVMb3dDb3N0OiB7IHNob3dTZWF0TWFwczogYm9vbGVhbjsgc2hvd0V4dHJhczogYm9vbGVhbiB9O1xuICAgICAgTENDOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbjsgc2hvd0V4dHJhczogYm9vbGVhbiB9O1xuICAgICAgTkRDOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgIH0+KFVzZXJGYXZvcnVyaXRlLkZsaWdodFJlc3VsdHNDb25maWd1cmF0aW9uKTtcblxuICAgIGNvbnN0IGFsbG93QWdlbnRUb1ZpZXdTZWF0TWFwcyA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0PHtcbiAgICAgIEdEUzogeyBzaG93U2VhdE1hcHM6IGJvb2xlYW4gfTtcbiAgICAgIFNhYnJlTG93Q29zdDogeyBzaG93U2VhdE1hcHM6IGJvb2xlYW59O1xuICAgICAgTENDOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgICAgTkRDOiB7IHNob3dTZWF0TWFwczogYm9vbGVhbiB9O1xuICAgIH0+KFVzZXJGYXZvcnVyaXRlLkFsbG93QWdlbnRUb1ZpZXdTZWF0TWFwcyk7XG5cbiAgICBjb25zdCBwZXJtaXR0ZWRTZXJ2aWNlc0xDQzogc3RyaW5nW10gPSBbU2VydmljZVByb3ZpZGVyLlRyYXZlbGZ1c2lvbl07XG4gICAgY29uc3QgcGVybWl0dGVkU2VydmljZXNHRFM6IHN0cmluZ1tdID0gW1xuICAgICAgU2VydmljZVByb3ZpZGVyLlNhYnJlRmxpZ2h0LFxuICAgICAgU2VydmljZVByb3ZpZGVyLlRyYXZlbHBvcnRGbGlnaHQsXG4gICAgICBTZXJ2aWNlUHJvdmlkZXIuQW1hZGV1c0ZsaWdodFxuICAgIF07XG5cbiAgICBjb25zdCBwZXJtaXR0ZWRTZXJ2aWNlc05EQzogc3RyaW5nW10gPSBbU2VydmljZVByb3ZpZGVyLlNhYnJlTkRDLCBTZXJ2aWNlUHJvdmlkZXIuQW1hZGV1c05EQ107XG4gICAgY29uc3QgeyBzb3VyY2UgfSA9IHNlbGVjdGVkRmxpZ2h0O1xuXG4gICAgY29uc3QgaXNSeWFuYWlyID0gWy4uLnNlbGVjdGVkRmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cywgLi4uc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHNdLnNvbWUoZmxpZ2h0ID0+IGZsaWdodC5tYXJrZXRpbmdDYXJyaWVyTmFtZSA9PT1cIlJ5YW5haXJcIiB8fCBmbGlnaHQub3BlcmF0aW5nQ2Fycmllck5hbWUgPT09XCJSeWFuYWlyXCIpXG4gICAgaWYgKHNvdXJjZSA9PT0gU2VydmljZVByb3ZpZGVyLlNhYnJlRmxpZ2h0ICYmIGlzUnlhbmFpcikge1xuICAgICAgcmV0dXJuIHNlYXRNYXBDb25maWdzPy5TYWJyZUxvd0Nvc3Q/LnNob3dTZWF0TWFwcyB8fFxuICAgICAgc2VhdE1hcENvbmZpZ3M/LlNhYnJlTG93Q29zdD8uc2hvd0V4dHJhcyB8fFxuICAgICAgKHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKSAmJiBhbGxvd0FnZW50VG9WaWV3U2VhdE1hcHM/LlNhYnJlTG93Q29zdD8uc2hvd1NlYXRNYXBzKTtcbiAgICB9XG5cbiAgICBpZiAocGVybWl0dGVkU2VydmljZXNMQ0MuaW5jbHVkZXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VhdE1hcENvbmZpZ3M/LkxDQz8uc2hvd1NlYXRNYXBzIHx8XG4gICAgICAgIHNlYXRNYXBDb25maWdzPy5MQ0M/LnNob3dFeHRyYXMgfHxcbiAgICAgICAgKHRoaXMudXNlclNlcnZpY2UudXNlcklzQWdlbnQoKSAmJiBhbGxvd0FnZW50VG9WaWV3U2VhdE1hcHM/LkxDQz8uc2hvd1NlYXRNYXBzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocGVybWl0dGVkU2VydmljZXNHRFMuaW5jbHVkZXMoc291cmNlKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc2VhdE1hcENvbmZpZ3M/LkdEUz8uc2hvd1NlYXRNYXBzIHx8XG4gICAgICAgICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCkgJiYgYWxsb3dBZ2VudFRvVmlld1NlYXRNYXBzPy5HRFM/LnNob3dTZWF0TWFwcylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBlcm1pdHRlZFNlcnZpY2VzTkRDLmluY2x1ZGVzKHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHNlYXRNYXBDb25maWdzPy5OREM/LnNob3dTZWF0TWFwcyB8fFxuICAgICAgICAodGhpcy51c2VyU2VydmljZS51c2VySXNBZ2VudCgpICYmIGFsbG93QWdlbnRUb1ZpZXdTZWF0TWFwcz8uTkRDPy5zaG93U2VhdE1hcHMpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFwcGx5RXh0cmFEZXRhaWxzVG9GbGlnaHRzKFxuICAgIGZsaWdodHM6IEZsaWdodEpvdXJuZXlbXSxcbiAgICBkZXRhaWxFeHRyYXM6IERldGFpbEV4dHJhcyxcbiAgICBpc1RGWDpib29sZWFuID0gZmFsc2VcbiAgKTogRmxpZ2h0Sm91cm5leVtdIHtcbiAgICByZXR1cm4gZmxpZ2h0cy5tYXAoZmxpZ2h0ID0+IHtcbiAgICAgIGNvbnN0IGlkOiBzdHJpbmcgPSBmbGlnaHQuaWQ7XG4gICAgICBjb25zdCBzZWF0OiBGbGlnaHRTZWF0TWFwU2VhdHMgPSBkZXRhaWxFeHRyYXMuc2VhdHNbaWRdO1xuICAgICAgY29uc3QgbG95YWx0eTogc3RyaW5nW10gPSBkZXRhaWxFeHRyYXMubG95YWx0eVtpZF07XG5cbiAgICAgIGlmIChzZWF0KSB7XG4gICAgICAgIGRlbGV0ZSBzZWF0Ll9fdHlwZW5hbWU7XG4gICAgICAgIGZsaWdodC5hZGRpdGlvbmFsLnNlYXQgPSBzZWF0O1xuICAgICAgfVxuXG4gICAgICBpZiAobG95YWx0eSkge1xuICAgICAgICBmbGlnaHQuYWRkaXRpb25hbC5sb3lhbHR5ID0gbG95YWx0eTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkaXRpb25hbERldGFpbHMgPSBkZXRhaWxFeHRyYXMuYWRkaXRpb25hbERldGFpbHNbaWRdO1xuICAgICAgLy8gaGVyZSBpdCdzIG9ubHkgVEZYXG4gICAgICBpZiAoYWRkaXRpb25hbERldGFpbHMgJiYgaXNURlgpIHtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbERldGFpbHNLZXlzOiBBZGRpdGlvbmFsRGV0YWlsc1tdID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgYWRkaXRpb25hbERldGFpbHNcbiAgICAgICAgKSBhcyBBZGRpdGlvbmFsRGV0YWlsc1tdO1xuICAgICAgICBpZiAoYWRkaXRpb25hbERldGFpbHNLZXlzLmxlbmd0aCkge1xuICAgICAgICAgIGFkZGl0aW9uYWxEZXRhaWxzS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5PT09J2JhZ2dhZ2VBbGxvd2FuY2UnKSB7XG4gICAgICAgICAgICAgIGZsaWdodC5hZGRpdGlvbmFsW2tleV0gPSAoYWRkaXRpb25hbERldGFpbHNba2V5XSB8fCBbXSkuY29uY2F0KGZsaWdodC5hZGRpdGlvbmFsW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmxpZ2h0LmFkZGl0aW9uYWxba2V5XSA9IGFkZGl0aW9uYWxEZXRhaWxzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmbGlnaHQ7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBfdXBkYXRlVHJhdmVsUG9saWNpZXMoKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCB8fFxuICAgICAgKHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmR1YWxTaW5nbGVXaGVuU2VsZWN0ZWQgJiZcbiAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuZHVhbFNpbmdsZVdoZW5TZWxlY3RlZFt0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQuam91cm5leUhhc2hdKSB8fFxuICAgICAgIXRoaXMubXVsdGkgfHxcbiAgICAgIHRoaXMubXVsdGkubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG11bHRpSW5ib3VuZHMgPSAodGhpcy5tdWx0aSB8fCBbXSkucmVkdWNlKChhY2M6IEZsaWdodEl0aW5lcmFyeVtdLCBpdGVtOiBGbGlnaHRNdWx0aSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ub3JkZXIgPT09IDEgJiYgaXRlbS5yZXN1bHRzICYmIGl0ZW0ucmVzdWx0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGFjYyA9IGFjYy5jb25jYXQoaXRlbS5yZXN1bHRzIGFzIEZsaWdodEl0aW5lcmFyeVtdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xuICAgIGlmIChtdWx0aUluYm91bmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghdGhpcy5yYXdSZXN1bHRzKSB7XG4gICAgICAgIHRoaXMucmF3UmVzdWx0cyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvbkl0ZW0odGhpcy5yZXN1bHRzU2Vzc2lvbk5hbWUgKyAnX3JhdycpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZldGNoaW5nUnVsZXMgPSB0cnVlO1xuXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnJhd1Jlc3VsdHMpO1xuICAgICAgdGhpcy5hcHBseUZsaWdodFJ1bGVzXG4gICAgICAgIC5mZXRjaE9uZSh7XG4gICAgICAgICAgc2VsZWN0ZWRPdXRib3VuZEZsaWdodDogdGhpcy5zZWxlY3RlZEdyb3VwRmxpZ2h0LFxuICAgICAgICAgIGF2YWlsYWJsZUluYm91bmRGbGlnaHRzOiBtdWx0aUluYm91bmRzLFxuICAgICAgICAgIHNlYXJjaElkOiB0aGlzLnJhd1Jlc3VsdHMuc2VhcmNoSWRcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAocnVsZXM6IFJ1bGVBY3Rpb25TdW1tYXJ5SW50ZXJmYWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkgPSB0aGlzLmhlbHBlcnMubWVyZ2VPYmplY3RzKHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LCBydWxlcyk7XG4gICAgICAgICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoaW5nUnVsZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBib29rU2luZ2xlRmxpZ2h0KFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGluZ29yZUludm9rZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBkdWFsSW5ib3VuZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB0aGlzLmNyZWF0ZVNjaGVtYURldGFpbHMoc2VsZWN0ZWRGbGlnaHQsIEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZSk7XG4gICAgYXdhaXQgdGhpcy5kb0Jvb2tpbmcoXG4gICAgICBpbnRCYXNrZXQsXG4gICAgICBzZWxlY3RlZEZsaWdodCxcbiAgICAgIHNjaGVtYURldGFpbHMsXG4gICAgICBzZWxlY3RlZEZsaWdodC5vdXRib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcsXG4gICAgICAnJyxcbiAgICAgIGluZ29yZUludm9rZWQsXG4gICAgICBkdWFsSW5ib3VuZFxuICAgICk7XG4gIH1cblxuICBjcmVhdGVTY2hlbWFEZXRhaWxzKGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsIGpvdXJuZXlUeXBlOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChqb3VybmV5VHlwZSA9PT0gRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRib3VuZEZsaWdodHM6IGZsaWdodC5vdXRib3VuZEZsaWdodHMubWFwKFxuICAgICAgICAgIChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIHNlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlU2NoZW1hRmxpZ2h0cyhmbGlnaHQsICdvdXRib3VuZCcsIDAsIHNlZ21lbnRJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBpbmJvdW5kRmxpZ2h0czogW10sXG4gICAgICAgIGpvdXJuZXlUeXBlOiBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGUsXG4gICAgICAgIHRheGVzOiBmbGlnaHQudGF4ZXMubWFwKCh0YXg6IEZsaWdodEFtb3VudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdGF4LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY3VycmVuY3k6IHRheC5jdXJyZW5jeSxcbiAgICAgICAgICAgIGFtb3VudDogdGF4LmFtb3VudFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICBmYXJlQ29uZGl0aW9uczogZmxpZ2h0LmZhcmVDb25kaXRpb25zXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvdXRib3VuZEZsaWdodHM6IFtcbiAgICAgICAgICAuLi5mbGlnaHQub3V0Ym91bmRGbGlnaHRzLm1hcCgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnb3V0Ym91bmQnLCAwLCBzZWdtZW50SW5kZXgpO1xuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIGluYm91bmRGbGlnaHRzOiBbXG4gICAgICAgICAgLi4uZmxpZ2h0LmluYm91bmRGbGlnaHRzLm1hcCgoZmxpZ2h0OiBGbGlnaHRKb3VybmV5LCBzZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVNjaGVtYUZsaWdodHMoZmxpZ2h0LCAnaW5ib3VuZCcsIDAsIHNlZ21lbnRJbmRleCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXSxcbiAgICAgICAgam91cm5leVR5cGU6IEZsaWdodEpvdXJuZXlUeXBlLlJvdW5kdHJpcCxcbiAgICAgICAgdGF4ZXM6IChmbGlnaHQudGF4ZXMgPyBmbGlnaHQudGF4ZXMgOiBbXSkubWFwKCh0YXg6IEZsaWdodEFtb3VudCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdGF4LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgY3VycmVuY3k6IHRheC5jdXJyZW5jeSxcbiAgICAgICAgICAgIGFtb3VudDogdGF4LmFtb3VudFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgICBmYXJlQ29uZGl0aW9uczogZmxpZ2h0LmZhcmVDb25kaXRpb25zXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUJvb2tpbmdCYXNrZXRPYmplY3QoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBmbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGpvdXJuZXlUeXBlOiBzdHJpbmdcbiAgKTogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMge1xuICAgIGNvbnN0IHNjaGVtYURldGFpbHMgPSB0aGlzLmNyZWF0ZVNjaGVtYURldGFpbHMoZmxpZ2h0LCBqb3VybmV5VHlwZSk7XG4gICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XG4gICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxuICAgICAgYmFza2V0OiBpZCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxuICAgICAgY28yUGVySXRlbTogZmxpZ2h0LmNvMlBlckl0ZW0sXG4gICAgICBjbzJQZXJQYXNzZW5nZXI6IGZsaWdodC5jbzJQZXJQYXNzZW5nZXIsXG4gICAgICBjdXJyZW5jeTogZmxpZ2h0LnRvdGFsLmN1cnJlbmN5IGFzIEN1cnJlbmN5Q29kZSxcbiAgICAgIGRldGFpbDogc2NoZW1hRGV0YWlscyxcbiAgICAgIHByaWNlOiArZmxpZ2h0LnRvdGFsLnByaWNlLnRvRml4ZWQoMiksXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcbiAgICAgIHNlcnZpY2U6IGZsaWdodC5zb3VyY2VJZC50b1N0cmluZygpLFxuICAgICAgb3V0Ym91bmREYXRlOiBmbGlnaHQub3V0Ym91bmRGbGlnaHRzWzBdLmRhdGVUaW1lRGVwYXJ0aW5nVVRDXG4gICAgfTtcbiAgICBsZXQgaW5ib3VuZERhdGUgPSBmbGlnaHQ/LmluYm91bmRGbGlnaHRzPy5bMF0/LmRhdGVUaW1lRGVwYXJ0aW5nVVRDO1xuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xuICAgICAgYm9va2luZy5pbmJvdW5kRGF0ZSA9IGluYm91bmREYXRlO1xuICAgIH1cbiAgICByZXR1cm4gYm9va2luZztcbiAgfVxuXG4gIGNyZWF0ZUxvd2VzdEJvb2tpbmcoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkdWFsSW5ib3VuZDogYm9vbGVhbixcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnNcbiAgKTogYW55IHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0Py5yZXR1cm5zIHx8XG4gICAgICAodGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0Py5kdWFsSW5ib3VuZD8uYW1vdW50ICtcbiAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0Py5kdWFsT3V0Ym91bmQ/LmFtb3VudCA8XG4gICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdD8ucmV0dXJucz8uYW1vdW50ICYmXG4gICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdD8uZHVhbEluYm91bmQ/LmN1cnJlbmN5Q29kZSA9PVxuICAgICAgICAgIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdD8uZHVhbE91dGJvdW5kPy5jdXJyZW5jeUNvZGUpXG4gICAgKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRGbGlnaHQub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAmJiAhc2VsZWN0ZWRGbGlnaHQuaW5ib3VuZEZsaWdodHMubGVuZ3RoKSB7XG4gICAgICAgIGlmICghZHVhbEluYm91bmQpIHtcbiAgICAgICAgICAvLyBkdWFsIG91dFxuICAgICAgICAgIGNvbnN0IGNoZWFwRmxpZ2h0RHVhbE91dGJvdW5kID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxPdXRib3VuZC5mbGlnaHQ7XG4gICAgICAgICAgY29uc3QgZHVhbE91dGJvdW5kQm9va2luZyA9IHRoaXMuY3JlYXRlQm9va2luZ0Jhc2tldE9iamVjdChcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgY2hlYXBGbGlnaHREdWFsT3V0Ym91bmQsXG4gICAgICAgICAgICBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGVcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZnVsbFByaWNlID0gZHVhbE91dGJvdW5kQm9va2luZy5wcmljZTtcbiAgICAgICAgICByZXR1cm4geyBsb3dlc3RQcmljZUJvb2tpbmc6IGR1YWxPdXRib3VuZEJvb2tpbmcsIGxvd2VzdEZ1bGxUb3RhbDogZnVsbFByaWNlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZHVhbCBpblxuICAgICAgICAgIGNvbnN0IGNoZWFwRmxpZ2h0RHVhbEluYm91bmQgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuZmxpZ2h0O1xuICAgICAgICAgIGNvbnN0IGR1YWxJbmJvdW5kQm9va2luZyA9IHRoaXMuY3JlYXRlQm9va2luZ0Jhc2tldE9iamVjdChcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgY2hlYXBGbGlnaHREdWFsSW5ib3VuZCxcbiAgICAgICAgICAgIEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmdWxsUHJpY2UgPSBkdWFsSW5ib3VuZEJvb2tpbmcucHJpY2U7XG4gICAgICAgICAgcmV0dXJuIHsgbG93ZXN0UHJpY2VCb29raW5nOiBkdWFsSW5ib3VuZEJvb2tpbmcsIGxvd2VzdEZ1bGxUb3RhbDogZnVsbFByaWNlIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJldHVybiBmbGlnaHRcbiAgICAgICAgbGV0IGNoZWFwRmxpZ2h0RHVhbE91dGJvdW5kID0gdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxPdXRib3VuZC5mbGlnaHQ7XG4gICAgICAgIGNoZWFwRmxpZ2h0RHVhbE91dGJvdW5kLmluYm91bmRGbGlnaHRzID1cbiAgICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuZmxpZ2h0Lm91dGJvdW5kRmxpZ2h0cztcbiAgICAgICAgbGV0IGR1YWxPdXRib3VuZEJvb2tpbmcgPSB0aGlzLmNyZWF0ZUJvb2tpbmdCYXNrZXRPYmplY3QoXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgY2hlYXBGbGlnaHREdWFsT3V0Ym91bmQsXG4gICAgICAgICAgRmxpZ2h0Sm91cm5leVR5cGUuUm91bmR0cmlwXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgY2hlYXBGbGlnaHREdWFsSW5ib3VuZCA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsSW5ib3VuZC5mbGlnaHQ7XG4gICAgICAgIGNvbnN0IGR1YWxJbmJvdW5kQm9va2luZyA9IHRoaXMuY3JlYXRlQm9va2luZ0Jhc2tldE9iamVjdChcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBjaGVhcEZsaWdodER1YWxJbmJvdW5kLFxuICAgICAgICAgIEZsaWdodEpvdXJuZXlUeXBlLlNpbmdsZVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGZ1bGxQcmljZSA9IGR1YWxPdXRib3VuZEJvb2tpbmcucHJpY2UgKyBkdWFsSW5ib3VuZEJvb2tpbmcucHJpY2U7XG4gICAgICAgIGR1YWxPdXRib3VuZEJvb2tpbmcucHJpY2UgPSArZnVsbFByaWNlLnRvRml4ZWQoMik7XG4gICAgICAgIHJldHVybiB7IGxvd2VzdFByaWNlQm9va2luZzogZHVhbE91dGJvdW5kQm9va2luZywgbG93ZXN0RnVsbFRvdGFsOiBmdWxsUHJpY2UgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY2hlYXBGbGlnaHQgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QucmV0dXJucy5mbGlnaHQ7XG4gICAgICBjb25zdCBqb3VybmV5VHlwZSA9IHRoaXMuaXNSZXR1cm4gPyBGbGlnaHRKb3VybmV5VHlwZS5Sb3VuZHRyaXAgOiBGbGlnaHRKb3VybmV5VHlwZS5TaW5nbGU7XG4gICAgICBjb25zdCBsb3dlc3RGdWxsRmxpZ2h0ID0gY2hlYXBGbGlnaHQgPyB0aGlzLmNyZWF0ZUJvb2tpbmdCYXNrZXRPYmplY3QoaWQsIGNoZWFwRmxpZ2h0LCBqb3VybmV5VHlwZSk6bnVsbDtcbiAgICAgIHJldHVybiB7IGxvd2VzdFByaWNlQm9va2luZzogbG93ZXN0RnVsbEZsaWdodCwgbG93ZXN0RnVsbFRvdGFsOiBsb3dlc3RGdWxsRmxpZ2h0LnByaWNlIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZG9Cb29raW5nKFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UsXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIHNjaGVtYURldGFpbHM6IGFueSxcbiAgICBvdXRib3VuZERhdGU6IHN0cmluZyxcbiAgICBpbmJvdW5kRGF0ZT86IHN0cmluZyxcbiAgICBpbmdvcmVJbnZva2VkID0gZmFsc2UsXG4gICAgZHVhbEluYm91bmQgPSBmYWxzZVxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICBjb25zdCB7IHNvdXJjZUlkLCBjbzJQZXJJdGVtLCBjbzJQZXJQYXNzZW5nZXIsIHRvdGFsLCByZXF1aXJlc1JlYXNvbktleXMgfSA9IHNlbGVjdGVkRmxpZ2h0O1xuICAgIGNvbnN0IHsgbG93ZXN0UHJpY2VCb29raW5nLCBsb3dlc3RGdWxsVG90YWwgfSA9IHRoaXMuY3JlYXRlTG93ZXN0Qm9va2luZyhcbiAgICAgIGludEJhc2tldC5pZCxcbiAgICAgIGR1YWxJbmJvdW5kLFxuICAgICAgc2VsZWN0ZWRGbGlnaHRcbiAgICApO1xuICAgIHNjaGVtYURldGFpbHMuaG11cCA9IHRvdGFsLmhtdXA7XG4gICAgdGhpcy5yZXN1bHRRdWVyeS5hc1NpbmdsZXMgPSBkdWFsSW5ib3VuZDtcbiAgICBjb25zdCBib29raW5nOiBBZGRJdGVtVG9CYXNrZXRNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgIGFkdWx0czogdGhpcy5hZHVsdHMsXG4gICAgICBiYXNrZXQ6IGludEJhc2tldC5pZCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNoaWxkcmVuLFxuICAgICAgY28yUGVySXRlbSxcbiAgICAgIGNvMlBlclBhc3NlbmdlcixcbiAgICAgIGN1cnJlbmN5OiB0b3RhbC5jdXJyZW5jeSBhcyBDdXJyZW5jeUNvZGUsXG4gICAgICBkZXRhaWw6IHNjaGVtYURldGFpbHMsXG4gICAgICBwcmljZTogK3RvdGFsLnByaWNlLnRvRml4ZWQoMiksXG4gICAgICBzZWFyY2hRdWVyeTogdGhpcy5yZXN1bHRRdWVyeSxcbiAgICAgIHNlcnZpY2U6IHNvdXJjZUlkLnRvU3RyaW5nKCksXG4gICAgICBvdXRib3VuZERhdGUsXG4gICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OlxuICAgICAgICB0aGlzLmFic29sdXRlQ2hlYXBlc3RQcmljZS5hbW91bnQgfHxcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlICE9PSB0b3RhbC5jdXJyZW5jeVxuICAgICAgICAgID8gPEN1cnJlbmN5Q29kZT50aGlzLmFic29sdXRlQ2hlYXBlc3RQcmljZS5jdXJyZW5jeUNvZGVcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBsb3dlc3RQcmljZTogbG93ZXN0RnVsbFRvdGFsLFxuICAgICAgbG93ZXN0UHJpY2VEZXRhaWw6IGxvd2VzdFByaWNlQm9va2luZyxcbiAgICAgIHJlYXNvbktleXM6IHJlcXVpcmVzUmVhc29uS2V5c1xuICAgIH07XG4gICAgaWYgKGluYm91bmREYXRlKSB7XG4gICAgICBib29raW5nLmluYm91bmREYXRlID0gaW5ib3VuZERhdGU7XG4gICAgfVxuICAgIC8vIGJvb2tpbmcuZGV0YWlsLm1hcmt1cCA9IFt7YW1vdW50OiAwLCBjb3N0OjB9XTtcbiAgICBjb25zdCB3aGF0SGFwcGVuZWQgPSBhd2FpdCB0aGlzLmJhc2tldFNlcnZpY2UuYWRkVG9CYXNrZXQoXG4gICAgICBib29raW5nLFxuICAgICAgaW50QmFza2V0LFxuICAgICAgdGhpcy5zZWFyY2hTZXJ2aWNlLFxuICAgICAgdGhpcy50cmF2ZWxsZXJzLFxuICAgICAgc2VsZWN0ZWRGbGlnaHQucmVxdWlyZXNSZWFzb25LZXlzLFxuICAgICAgZmFsc2UsXG4gICAgICBpbmdvcmVJbnZva2VkXG4gICAgKTtcbiAgICBpZiAod2hhdEhhcHBlbmVkID09PSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoKSB7XG4gICAgICB0aGlzLnJlc2VhcmNoV2l0aE5ld1VzZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHdoYXRIYXBwZW5lZDtcbiAgfVxuXG4gIGFzeW5jIGdldEZsaWdodERldGFpbEV4dHJhcyhcbiAgICBzZWxlY3RlZEZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMgfCBGbGlnaHRJdGluZXJhcnksXG4gICAgZGlyZWN0aW9uOiBGbGlnaHREaXJlY3Rpb25FbnVtLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHVzZXJzPzpUcmF2ZWxsZXJbXVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIG9ubHkgVEZYIGZvciBub3csIHJlbW92ZSBpZiBzdGF0ZW1lbnQgd2hlbiB3ZSBkbyB0aGUgcmVzdFxuICAgIGNvbnN0IHNlYXRzID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuRmxpZ2h0RXh0cmFzRGlhbG9nQ29tcG9uZW50LFxuICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdtb2RhbC1mbGlnaHQtZXh0cmFzJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICB7IGZsaWdodDogc2VsZWN0ZWRGbGlnaHQsIGRpcmVjdGlvbiwgZ210LCB1c2VycyB9XG4gICAgKTtcbiAgICBpZiAoc2VhdHMpIHtcbiAgICAgIHJldHVybiBzZWF0cztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ3JldGhpbmcgbGlmZSBjaG9pY2VzJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXQgYWJzb2x1dGVDaGVhcGVzdFByaWNlKCk6IElDaGVhcGVzdFByaWNlIHwgSUNoZWFwZXN0UHJpY2VEZXRhaWxzIHtcbiAgICBpZiAodGhpcy5jaGVhcGVzdFByaWNlKSByZXR1cm4gdGhpcy5jaGVhcGVzdFByaWNlO1xuICAgIGxldCBwcmljZTogSUNoZWFwZXN0UHJpY2VEZXRhaWxzID0geyBhbW91bnQ6IG51bGwsIGN1cnJlbmN5Q29kZTogbnVsbCwgZmxpZ2h0OiBudWxsIH07XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5yZXR1cm5zIHx8XG4gICAgICAodGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxJbmJvdW5kLmFtb3VudCArIHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5kdWFsT3V0Ym91bmQuYW1vdW50IDxcbiAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LnJldHVybnM/LmFtb3VudCAmJlxuICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuY3VycmVuY3lDb2RlID09XG4gICAgICAgICAgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxPdXRib3VuZC5jdXJyZW5jeUNvZGUpXG4gICAgKSB7XG4gICAgICBwcmljZS5hbW91bnQgPVxuICAgICAgICB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuYW1vdW50ICsgdGhpcy5jaGVhcGVzdFByaWNlT2JqZWN0LmR1YWxPdXRib3VuZC5hbW91bnQ7XG4gICAgICBwcmljZS5jdXJyZW5jeUNvZGUgPSB0aGlzLmNoZWFwZXN0UHJpY2VPYmplY3QuZHVhbEluYm91bmQuY3VycmVuY3lDb2RlO1xuICAgIH0gZWxzZSBwcmljZSA9IHRoaXMuY2hlYXBlc3RQcmljZU9iamVjdC5yZXR1cm5zO1xuICAgIHJldHVybiBwcmljZTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZVNjaGVtYUZsaWdodHMoXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXG4gICAgZmxpZ2h0R3JvdXA6ICdvdXRib3VuZCcgfCAnaW5ib3VuZCcsXG4gICAgZ3JvdXBJbmRleDogbnVtYmVyLFxuICAgIHNlZ21lbnRJbmRleDogbnVtYmVyXG4gICk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNlbGVjdGVkRmxpZ2h0LFxuICAgICAgam91cm5leUluZm86IHtcbiAgICAgICAgZmxpZ2h0R3JvdXAsXG4gICAgICAgIGdyb3VwSW5kZXgsXG4gICAgICAgIHNlZ21lbnRJbmRleFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZEJhZ3NBbGxvd2FuY2VUb0ZsaWdodHNTY2hlbWEoXG4gICAgc2VsZWN0ZWRGbGlnaHQ6IEZsaWdodEpvdXJuZXksXG4gICAgZmxpZ2h0UXVvdGU6IEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zLFxuICAgIGlzSW4gPSBmYWxzZVxuICApOiBhbnkge1xuICAgIHNlbGVjdGVkRmxpZ2h0LmFkZGl0aW9uYWxbJ2JhZ2dhZ2VBbGxvd2FuY2VBbW91bnQnXSA9IDA7XG4gICAgbGV0IGhvbGRCYWdBbW91bnQgPSBbMF07XG4gICAgaWYgKCFpc0luKSB7XG4gICAgICBob2xkQmFnQW1vdW50ID0gZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzLnJlZHVjZSgoYWNjLGZsaWdodCk9PntcbiAgICAgICAgY29uc3QgYmFncyA9ZmxpZ2h0LmFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZS5maWx0ZXIoKGJhZzogQmFnZ2FnZUFsbG93YW5jZSk9PmJhZy50eXBlID09PSAnQ2hlY2tJbicgKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYmFncy5tYXAoKGJhZzpCYWdnYWdlQWxsb3dhbmNlKT0+YmFnLnF0eSk7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgYWNjLnB1c2goTWF0aC5taW4oLi4ucmVzdWx0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxbXSlcbiAgICB9IGVsc2Uge1xuICAgICAgaG9sZEJhZ0Ftb3VudCA9IGZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLnJlZHVjZSgoYWNjLGZsaWdodCk9PntcbiAgICAgICAgY29uc3QgYmFncyA9ZmxpZ2h0LmFkZGl0aW9uYWwuYmFnZ2FnZUFsbG93YW5jZS5maWx0ZXIoKGJhZzogQmFnZ2FnZUFsbG93YW5jZSk9PmJhZy50eXBlID09PSAnQ2hlY2tJbicgKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYmFncy5tYXAoKGJhZzpCYWdnYWdlQWxsb3dhbmNlKT0+YmFnLnF0eSk7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgYWNjLnB1c2goTWF0aC5taW4oLi4ucmVzdWx0KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxbXSlcbiAgICB9XG5cbiAgICBzZWxlY3RlZEZsaWdodC5hZGRpdGlvbmFsWydiYWdnYWdlQWxsb3dhbmNlQW1vdW50J10gPSBob2xkQmFnQW1vdW50Lmxlbmd0aFxuICAgICAgICA/IE1hdGgubWluKC4uLmhvbGRCYWdBbW91bnQpXG4gICAgICAgIDogMDtcblxuICAgIHNlbGVjdGVkRmxpZ2h0LmFkZGl0aW9uYWxbJ2lzSGFuZEJhZ2dhZ2UnXSA9ICEhZmxpZ2h0UXVvdGU/LmJhZ2dhZ2VBbGxvd2FuY2U/LmZpbHRlcihcbiAgICAgIChiYWc6IEJhZ2dhZ2VBbGxvd2FuY2UpID0+IGJhZy50eXBlID09PSBCYWdnYWdlVHlwZS5IYW5kQ2FycnlcbiAgICApO1xuXG4gICAgcmV0dXJuIHNlbGVjdGVkRmxpZ2h0O1xuICB9XG5cbiAgYXN5bmMgYWRkRmxpZ2h0Sm91cm5leXNUb0Jhc2tldChcbiAgICBmbGlnaHRRdW90ZTogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMsXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldEludGVyZmFjZSxcbiAgICBpZ25vcmVJbnZva2U6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBkdWFsSW5ib3VuZDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGdtdDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGxldCByZXF1aXJlc092ZXJyaWRlUmVhc29uID0gZmFsc2U7XG5cbiAgICBpZiAoKGZsaWdodFF1b3RlIGFzIEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zKS51bmF2YWlsYWJsZSAmJiAhdGhpcy51c2VyU2VydmljZS5ib2JvKSB7XG4gICAgICAvLyBjaGVjayBoZXJlIGlmIHdlIGFyZSBhbiBhZ2VudCB1c2VyIGludm9raW5nXG4gICAgICBjb25zb2xlLndhcm4oJysrKyBGbGlnaHQgaXMgb3V0IG9mIHBvbGljeSAtIGJhY2tpbmcgb3V0ICsrKycpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChmbGlnaHRRdW90ZSBhcyBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykudW5hdmFpbGFibGUgJiZcbiAgICAgIHRoaXMudXNlclNlcnZpY2UuYm9ib1xuICAgICkge1xuICAgICAgcmVxdWlyZXNPdmVycmlkZVJlYXNvbiA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGJhc2tldCA9IGludEJhc2tldD8uc3ViamVjdC52YWx1ZTtcbiAgICBpZiAoYmFza2V0KSB7XG4gICAgICB0aGlzLmJhc2tldFNlcnZpY2UudG9nZ2xlTWVudSgpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYWRkSm91cm5leVRvQmFza2V0KFxuICAgICAgICBmbGlnaHRRdW90ZSxcbiAgICAgICAgaWdub3JlSW52b2tlLFxuICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgIGR1YWxJbmJvdW5kLFxuICAgICAgICByZXF1aXJlc092ZXJyaWRlUmVhc29uLFxuICAgICAgICBnbXRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWwpOyAvLyBUT0RPIHNob3VsZCB0aGlzIHRocm93IGFuIGVycm9yP1xuICB9XG5cbiAgYXN5bmMgYWRkSm91cm5leVRvQmFza2V0KFxuICAgIGZsaWdodFF1b3RlOiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyxcbiAgICBpZ25vcmVJbnZva2U6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlLFxuICAgIGR1YWxJbmJvdW5kOiBib29sZWFuID0gZmFsc2UsXG4gICAgcmVxdWlyZXNPdmVycmlkZVJlYXNvbj86IGJvb2xlYW4sXG4gICAgZ210OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgeyBzb3VyY2VJZCwgY28yUGVySXRlbSwgY28yUGVyUGFzc2VuZ2VyLCB0b3RhbCB9ID0gZmxpZ2h0UXVvdGU7XG5cbiAgICBsZXQgbG93ZXN0UHJpY2VCb29raW5nID0gbnVsbDtcbiAgICBsZXQgbG93ZXN0RnVsbFRvdGFsID0gbnVsbDtcblxuICAgIGNvbnN0IG91dGJvdW5kRGF0ZTogYW55ID0gbW9tZW50KGZsaWdodFF1b3RlLm91dGJvdW5kRmxpZ2h0c1swXS5kYXRlVGltZURlcGFydGluZyk7XG4gICAgY29uc3QgaW5ib3VuZERhdGU6IGFueSA9IGZsaWdodFF1b3RlLmluYm91bmRGbGlnaHRzLmxlbmd0aFxuICAgICAgPyBtb21lbnQoZmxpZ2h0UXVvdGUuaW5ib3VuZEZsaWdodHNbMF0uZGF0ZVRpbWVEZXBhcnRpbmcpXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAoIWdtdCkge1xuICAgICAgY29uc3QgeyBsb3dlc3RQcmljZUJvb2tpbmc6IGxwLCBsb3dlc3RGdWxsVG90YWw6IGxmdCB9ID0gdGhpcy5jcmVhdGVMb3dlc3RCb29raW5nKFxuICAgICAgICBpbnRCYXNrZXQuaWQsXG4gICAgICAgIGR1YWxJbmJvdW5kLFxuICAgICAgICBmbGlnaHRRdW90ZVxuICAgICAgKTtcbiAgICAgIGxvd2VzdFByaWNlQm9va2luZyA9IGxwO1xuICAgICAgbG93ZXN0RnVsbFRvdGFsID0gbGZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3VsdFF1ZXJ5ID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge1xuICAgICAgICAgIGZhcmVUeXBlOiBGYXJlVHlwZS5GbGV4aWJsZSxcbiAgICAgICAgICBwYXNzZW5nZXJzOiA8RmxpZ2h0UGFzc2VuZ2VyT2JqZWN0W10+W3sgdHlwZTogRmxpZ2h0UGFzc2VuZ2VyVHlwZS5BZHVsdCB9XSxcbiAgICAgICAgICBvcmlnaW5BaXJwb3J0OiBmbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHNbMF0ub3JpZ2luQWlycG9ydCxcbiAgICAgICAgICBkZXN0aW5hdGlvbkFpcnBvcnQ6XG4gICAgICAgICAgICBmbGlnaHRRdW90ZS5vdXRib3VuZEZsaWdodHNbZmxpZ2h0UXVvdGUub3V0Ym91bmRGbGlnaHRzLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uQWlycG9ydCxcbiAgICAgICAgICByZXR1cm5UcmlwOiBpbmJvdW5kRGF0ZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICBvdXRib3VuZERhdGU6IHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlKG91dGJvdW5kRGF0ZSksXG4gICAgICAgICAgb3V0Ym91bmREZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3cob3V0Ym91bmREYXRlLCAtMiwgMilcbiAgICAgICAgfSxcbiAgICAgICAgaW5ib3VuZERhdGVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcmV0dXJuRGF0ZTogdGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGUoaW5ib3VuZERhdGUpLFxuICAgICAgICAgICAgICByZXR1cm5EZXBhcnR1cmVUaW1lV2luZG93OiB0aGlzLmhlbHBlcnMubWFrZVRpbWVXaW5kb3coaW5ib3VuZERhdGUsIC0yLCAyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge31cbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGhhc1NwYW5pc2hEaXNjb3VudCA9IGZsaWdodFF1b3RlLnRvdGFsLmRpc2NvdW50O1xuICAgIGNvbnN0IHRlcm1zQW5kQ29uZGl0aW9ucyA9IHRoaXMuZ2V0VGVybXNBbmRDb25kKCk7XG4gICAgY29uc3Qgc2NoZW1hRGV0YWlscyA9IHtcbiAgICAgIGFkZGl0aW9uYWw6IHsgXG4gICAgICAgIHRvdGFsVGF4OiBmbGlnaHRRdW90ZS50b3RhbD8udGF4IHx8IG51bGwsXG4gICAgICB9LFxuICAgICAgb3V0Ym91bmRGbGlnaHRzOiBbXG4gICAgICAgIC4uLmZsaWdodFF1b3RlLm91dGJvdW5kRmxpZ2h0cy5tYXAoKGZsaWdodDogRmxpZ2h0Sm91cm5leSwgX3NlZ21lbnRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKCFoYXNTcGFuaXNoRGlzY291bnQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBmbGlnaHQuYWRkaXRpb25hbC5zcGFuaXNoUmVzaWRlbmN5QWlycG9ydDtcbiAgICAgICAgICAgIGRlbGV0ZSBmbGlnaHQuYWRkaXRpb25hbC5zcGFuaXNoUmVzaWRlbmN5R3JvdXA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmFkZEJhZ3NBbGxvd2FuY2VUb0ZsaWdodHNTY2hlbWEoZmxpZ2h0LCBmbGlnaHRRdW90ZSk7XG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgaW5ib3VuZEZsaWdodHM6IFtcbiAgICAgICAgLi4uZmxpZ2h0UXVvdGUuaW5ib3VuZEZsaWdodHMubWFwKChmbGlnaHQ6IEZsaWdodEpvdXJuZXksIF9zZWdtZW50SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmICghaGFzU3BhbmlzaERpc2NvdW50KSB7XG4gICAgICAgICAgICBkZWxldGUgZmxpZ2h0LmFkZGl0aW9uYWwuc3BhbmlzaFJlc2lkZW5jeUFpcnBvcnQ7XG4gICAgICAgICAgICBkZWxldGUgZmxpZ2h0LmFkZGl0aW9uYWwuc3BhbmlzaFJlc2lkZW5jeUdyb3VwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5hZGRCYWdzQWxsb3dhbmNlVG9GbGlnaHRzU2NoZW1hKGZsaWdodCwgZmxpZ2h0UXVvdGUsdHJ1ZSk7XG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgdGVybXNBbmRDb25kOiB0ZXJtc0FuZENvbmRpdGlvbnMsXG4gICAgICBqb3VybmV5VHlwZTogRmxpZ2h0Sm91cm5leVR5cGUuU2luZ2xlLFxuICAgICAgdGF4ZXM6IGZsaWdodFF1b3RlLnRheGVzLm1hcCgodGF4OiBGbGlnaHRBbW91bnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGF4LmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGN1cnJlbmN5OiB0YXguY3VycmVuY3ksXG4gICAgICAgICAgYW1vdW50OiB0YXguYW1vdW50XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIGZhcmVDb25kaXRpb25zOiBmbGlnaHRRdW90ZS5mYXJlQ29uZGl0aW9ucyxcblxuICAgICAgLy8gU2FicmUgTkRDIGZpZWxkcyBvbmx5XG4gICAgICBvZmZlcklkOiBmbGlnaHRRdW90ZS5vZmZlcklkLFxuICAgICAgb2ZmZXJJdGVtSWQ6IGZsaWdodFF1b3RlLm9mZmVySXRlbUlkLFxuICAgICAgb2ZmZXJUVEw6IGZsaWdodFF1b3RlLm9mZmVyVFRMLFxuICAgICAgb2ZmZXJUaW1lU3RhbXA6IGZsaWdodFF1b3RlLm9mZmVyVGltZVN0YW1wLFxuICAgICAgaG11cDogZmxpZ2h0UXVvdGUudG90YWwuaG11cFxuICAgIH07XG4gICAgY29uc3QgYm9va2luZzogQWRkSXRlbVRvQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB7XG4gICAgICBhZHVsdHM6IHRoaXMuYWR1bHRzLFxuICAgICAgYmFza2V0OiBpbnRCYXNrZXQuaWQsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jaGlsZHJlbixcbiAgICAgIGNvMlBlckl0ZW0sXG4gICAgICBjbzJQZXJQYXNzZW5nZXIsXG4gICAgICBjdXJyZW5jeTogdG90YWwuY3VycmVuY3kgYXMgQ3VycmVuY3lDb2RlLFxuICAgICAgZGV0YWlsOiBzY2hlbWFEZXRhaWxzLFxuICAgICAgcHJpY2U6ICt0b3RhbC5wcmljZS50b0ZpeGVkKDIpLFxuICAgICAgc2VhcmNoUXVlcnk6IHRoaXMucmVzdWx0UXVlcnksXG4gICAgICBzZXJ2aWNlOiBzb3VyY2VJZC50b1N0cmluZygpLFxuICAgICAgb3V0Ym91bmREYXRlOiBvdXRib3VuZERhdGUuZm9ybWF0KCksXG4gICAgICBsb3dlc3RQcmljZUN1cnJlbmN5OlxuICAgICAgICB0aGlzLmFic29sdXRlQ2hlYXBlc3RQcmljZS5hbW91bnQgfHxcbiAgICAgICAgdGhpcy5hYnNvbHV0ZUNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlICE9PSB0b3RhbC5jdXJyZW5jeVxuICAgICAgICAgID8gPEN1cnJlbmN5Q29kZT50aGlzLmFic29sdXRlQ2hlYXBlc3RQcmljZS5jdXJyZW5jeUNvZGVcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBsb3dlc3RQcmljZTogbG93ZXN0RnVsbFRvdGFsLFxuICAgICAgbG93ZXN0UHJpY2VEZXRhaWw6IGxvd2VzdFByaWNlQm9va2luZyxcbiAgICAgIHJlYXNvbktleXM6IGZsaWdodFF1b3RlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgIGFnZW50T3ZlcnJvZGVVbmF2YWlsYWJsZTogZmxpZ2h0UXVvdGUudW5hdmFpbGFibGVcbiAgICB9O1xuICAgIGNvbnNvbGUubG9nKGJvb2tpbmcpO1xuICAgIGlmIChpbmJvdW5kRGF0ZSkge1xuICAgICAgYm9va2luZy5pbmJvdW5kRGF0ZSA9IGluYm91bmREYXRlLmZvcm1hdCgpO1xuICAgICAgc2NoZW1hRGV0YWlscy5qb3VybmV5VHlwZSA9IEZsaWdodEpvdXJuZXlUeXBlLlJvdW5kdHJpcDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5iYXNrZXRTZXJ2aWNlLmFkZFRvQmFza2V0KFxuICAgICAgYm9va2luZyxcbiAgICAgIGludEJhc2tldCxcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZSxcbiAgICAgIHRoaXMudHJhdmVsbGVycyxcbiAgICAgIGZsaWdodFF1b3RlLnJlcXVpcmVzUmVhc29uS2V5cyxcbiAgICAgIGZhbHNlLFxuICAgICAgaWdub3JlSW52b2tlXG4gICAgKTtcbiAgfVxuXG4gIHNldEZsaWdodERpc3BsYXlUeXBlKGRpc3BsYXlUeXBlOiBGbGlnaHREaXNwbGF5VHlwZXMpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBGbGlnaHQgPSBudWxsO1xuICAgIHRoaXMuY2hvb3NlbkRpc3BsYXlUeXBlLm5leHQoZGlzcGxheVR5cGUpO1xuICB9XG5cbiAgX2FwcGx5RmlsdGVyKCkge1xuICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRoaXMuY3VycmVudEZpbHRlcnMsIHRoaXMuY3VycmVudFNvcnQpO1xuICB9XG5cbiAgb3BlbkZsaWdodEZhcmVSdWxlcyhcbiAgICBydWxlczogRmFyZUNvbmRpdGlvbnMsXG4gICAgZmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdLFxuICAgIGlkOiBudW1iZXIsXG4gICAgb3B0aW9uczogYW55ID0gbnVsbCxcbiAgICBmbGlnaHQ6IEZsaWdodEpvdXJuZXkgPSBudWxsLFxuICAgIGZsaWdodERldGFpbDogRmxpZ2h0SXRpbmVyYXJ5ID0gbnVsbCxcbiAgICBpbmJvdW5kUnVsZXM6IEZhcmVDb25kaXRpb25zID0gbnVsbCxcbiAgICBpbmJvdW5kRmxpZ2h0czogRmxpZ2h0Sm91cm5leVtdID0gbnVsbFxuICApOiB2b2lkIHtcbiAgICAvLyBmaXJzdCBjaGVjayBpZiB0aGVyZSBhcmUgcnVsZXNcbiAgICBjb25zdCBkb0NhbGwgPSAhT2JqZWN0LnZhbHVlcyhydWxlcykuZmluZCgocnVsZTogRmFyZUNvbmRpdGlvbkVudHJ5W10pOiBudW1iZXIgPT4gcnVsZS5sZW5ndGgpO1xuICAgIGlmIChkb0NhbGwpIHtcbiAgICAgIGxldCBmbGlnaHRzQ2xvbmUgPSBfLmNsb25lRGVlcChmbGlnaHRzKTtcblxuICAgICAgaWYgKGZsaWdodHNDbG9uZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZsaWdodHNDbG9uZVswXS5kZXN0aW5hdGlvbkFpcnBvcnQgPSBmbGlnaHRzQ2xvbmVbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJ1bGVzRnJvbUNhbGwgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0RmFyZVJ1bGVzKGZsaWdodHNDbG9uZVswXSwgaWQpO1xuICAgICAgaWYgKGluYm91bmRGbGlnaHRzKSB7XG4gICAgICAgIGxldCBpbmJvdW5kRmxpZ2h0c0Nsb25lID0gXy5jbG9uZURlZXAoaW5ib3VuZEZsaWdodHMpO1xuXG4gICAgICAgIGlmIChpbmJvdW5kRmxpZ2h0c0Nsb25lLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBpbmJvdW5kRmxpZ2h0c0Nsb25lWzBdLmRlc3RpbmF0aW9uQWlycG9ydCA9XG4gICAgICAgICAgICBpbmJvdW5kRmxpZ2h0c0Nsb25lW2ZsaWdodHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluYm91bmRGbGlnaHRzQ2xvbmVbMF0uaGFzT3duUHJvcGVydHkoJ2JhZ2dhZ2VBbGxvd2FuY2VBbW91bnQnKSkge1xuICAgICAgICAgIGRlbGV0ZSAoaW5ib3VuZEZsaWdodHNDbG9uZVswXSBhcyBhbnkpLmJhZ2dhZ2VBbGxvd2FuY2VBbW91bnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5ib3VuZFJ1bGVzRnJvbUNhbGwgPSB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0RmFyZVJ1bGVzKFxuICAgICAgICAgIGluYm91bmRGbGlnaHRzQ2xvbmVbMF0sXG4gICAgICAgICAgaWRcbiAgICAgICAgKTtcbiAgICAgICAgcnVsZXNGcm9tQ2FsbC5zdWJzY3JpYmUoXG4gICAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmYXJlUnVsZXNLZXkgPSB0aGlzLmNoZWNrRmFyZVJ1bGUoZGF0YS5yZXN1bHRzWzBdKTtcbiAgICAgICAgICAgIGluYm91bmRSdWxlc0Zyb21DYWxsLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgaW5ib3VuZERhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG9wdGlvbnMsIHtcbiAgICAgICAgICAgICAgICAgIHJ1bGVzOiBkYXRhLnJlc3VsdHNbMF0sXG4gICAgICAgICAgICAgICAgICBmcm9tOiBmbGlnaHQ/Lm9yaWdpbkFpcnBvcnQgfHwgZmxpZ2h0c0Nsb25lWzBdLm9yaWdpbkFpcnBvcnQsXG4gICAgICAgICAgICAgICAgICB0bzpcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0Py5kZXN0aW5hdGlvbkFpcnBvcnQgfHxcbiAgICAgICAgICAgICAgICAgICAgZmxpZ2h0c0Nsb25lW2ZsaWdodHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICAgICAgICAgICAgZmxpZ2h0OiBmbGlnaHREZXRhaWwsXG4gICAgICAgICAgICAgICAgICBzb3VyY2VJZDogaWQsXG4gICAgICAgICAgICAgICAgICBpbmJvdW5kUnVsZXM6IGluYm91bmREYXRhLnJlc3VsdHNbMF0sXG4gICAgICAgICAgICAgICAgICBmYXJlUnVsZXNLZXk6IGZhcmVSdWxlc0tleVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBydWxlc0Zyb21DYWxsLnN1YnNjcmliZShcbiAgICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZhcmVSdWxlc0tleSA9IHRoaXMuY2hlY2tGYXJlUnVsZShkYXRhLnJlc3VsdHNbMF0pO1xuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRmxpZ2h0RmFyZUNvbXBvbmVudCwgb3B0aW9ucywge1xuICAgICAgICAgICAgICBydWxlczogZGF0YS5yZXN1bHRzWzBdLFxuICAgICAgICAgICAgICBmcm9tOiBmbGlnaHQ/Lm9yaWdpbkFpcnBvcnQgfHwgZmxpZ2h0c0Nsb25lWzBdLm9yaWdpbkFpcnBvcnQsXG4gICAgICAgICAgICAgIHRvOiBmbGlnaHQ/LmRlc3RpbmF0aW9uQWlycG9ydCB8fCBmbGlnaHRzQ2xvbmVbZmxpZ2h0cy5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbkFpcnBvcnQsXG4gICAgICAgICAgICAgIGZsaWdodDogZmxpZ2h0RGV0YWlsLFxuICAgICAgICAgICAgICBzb3VyY2VJZDogaWQsXG4gICAgICAgICAgICAgIGZhcmVSdWxlc0tleTogZmFyZVJ1bGVzS2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmFyZVJ1bGVzS2V5ID0gdGhpcy5jaGVja0ZhcmVSdWxlKHJ1bGVzKTtcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEZsaWdodEZhcmVDb21wb25lbnQsIG9wdGlvbnMsIHtcbiAgICAgICAgcnVsZXMsXG4gICAgICAgIGZyb206IGZsaWdodD8ub3JpZ2luQWlycG9ydCB8fCBmbGlnaHRzWzBdLm9yaWdpbkFpcnBvcnQsXG4gICAgICAgIHRvOiBmbGlnaHQ/LmRlc3RpbmF0aW9uQWlycG9ydCB8fCBmbGlnaHRzW2ZsaWdodHMubGVuZ3RoIC0gMV0uZGVzdGluYXRpb25BaXJwb3J0LFxuICAgICAgICBmbGlnaHQ6IGZsaWdodERldGFpbCxcbiAgICAgICAgc291cmNlSWQ6IGlkLFxuICAgICAgICBpbmJvdW5kUnVsZXM6IGluYm91bmRSdWxlcyxcbiAgICAgICAgZmFyZVJ1bGVzS2V5OiBmYXJlUnVsZXNLZXlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRmFyZVJ1bGUocnVsZXM6IEZsaWdodEZhcmVSdWxlc1Jlc3BvbnNlIHwgRmFyZUNvbmRpdGlvbnMpOiBJRmFyZVJ1bGVzS2V5IHtcbiAgICBjb25zdCBydWxlQ29udGVudCA9IE9iamVjdC52YWx1ZXMocnVsZXMgfHwge30pXG4gICAgICAubWFwKChydWxlOiBGYXJlQ29uZGl0aW9uRW50cnlbXSkgPT5cbiAgICAgICAgcnVsZT8ubGVuZ3RoICYmIEFycmF5LmlzQXJyYXkocnVsZSkgPyBydWxlLm1hcChyID0+IHIucmVtYXJrKSA6IFtdXG4gICAgICApXG4gICAgICAuZmxhdCgpO1xuICAgIHJldHVybiB7XG4gICAgICBpc0NIQTogdGhpcy5jaGVja0ZhcmVSdWxlS2V5KHJ1bGVDb250ZW50LCAnQ0hBJyksXG4gICAgICBpc0lOQzogdGhpcy5jaGVja0ZhcmVSdWxlS2V5KHJ1bGVDb250ZW50LCAnSU5DJyksXG4gICAgICBpc05PRjogdGhpcy5jaGVja0ZhcmVSdWxlS2V5KHJ1bGVDb250ZW50LCAnTk9GJylcbiAgICB9O1xuICB9XG5cbiAgY2hlY2tGYXJlUnVsZUtleShydWxlQ29udGVudDogc3RyaW5nW10sIGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcYiR7a2V5fVxcXFxiYCwgJ2dpJyk7XG4gICAgcmV0dXJuICEhcnVsZUNvbnRlbnQuZmluZChydWxlID0+IHJlZ2V4LnRlc3QocnVsZSkpO1xuICB9XG5cbiAgLy8gVE9ETyB3YWl0aW5nIGZvciBkYXRhXG4gIGdldFRlcm1zQW5kQ29uZCgpIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnUGVuYWx0aWVzJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRWxpZ2liaWxpdHknLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICAsXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdEYXkvdGltZScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1NlYXNvbmFsaXR5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRmxpZ2h0wqBBcHBsaWNhdGlvbicsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0FkdmFuY2XCoFJlc2VydmF0aW9ucy90aWNrZXRpbmcnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdNYXhpbXVtwqBTdGF5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnTWluaW11bcKgU3RheScsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1N0b3BvdmVycycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1RyYW5zZmVycycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0NvbWJpbmF0aW9ucycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0JsYWNrb3V0wqBEYXRlcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1N1cmNoYXJnZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBY2NvbXBhbmllZMKgVHJhdmVsJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVHJhdmVswqBSZXN0cmljdGlvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTYWxlc8KgUmVzdHJpY3Rpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnSGlwL21pbGVhZ2XCoEV4Y2VwdGlvbnMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUaWNrZXTCoEVuZG9yc2VtZW50cycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0NoaWxkcmVuwqBEaXNjb3VudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUb3VywqBDb25kdWN0b3LCoERpc2NvdW50cycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0FnZW50wqBEaXNjb3VudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBbGzCoE90aGVywqBEaXNjb3VudHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdNaXNjZWxsYW5lb3VzwqBQcm92aXNpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRmFyZcKgQnnCoFJ1bGUnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdHcm91cHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdUb3VycycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1Zpc2l0wqBBbm90aGVywqBDb3VudHJ5JyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnRGVwb3NpdHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoENoYW5nZXMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdWb2x1bnRhcnnCoFJlZnVuZHMnLFxuICAgICAgICB2YWx1ZTogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdOZWdvdGlhdGVkwqBGYXJlcycsXG4gICAgICAgIHZhbHVlOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1J1bGXCoEFwcGxpY2F0aW9uwqBBbmTCoE90aGVywqBDb25kaXRpb25zJyxcbiAgICAgICAgdmFsdWU6ICcnXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIHNhdmVTZWFyY2goKTogT2JzZXJ2YWJsZTxTYXZlRmF2b3VyaXRlU2VhcmNoUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaXNGYXZvdXJpdGVWYWxpZC52YWx1ZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFNlYXJjaFF1ZXJ5KCk7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTZWFyY2hRdWVyeTogSUZsaWdodFNlYXJjaEFyZ3MgPSB0aGlzLnVwZGF0ZVNlcmNoUXVlcnkocXVlcnkpO1xuXG4gICAgICBjb25zdCBzZWFyY2hJbmZvID0ge1xuICAgICAgICBuYW1lOiBgJHttb21lbnQoKX1gLFxuICAgICAgICBzZXJ2aWNlVHlwZTogU2VydmljZVR5cGUuRmxpZ2h0LFxuICAgICAgICBzZWFyY2hBcmdzOiBmYXZvdXJpdGVTZWFyY2hRdWVyeVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2Uuc2F2ZUZhdm91cml0ZVNlYXJjaChzZWFyY2hJbmZvKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgYXBwbHlGYXZvdXJpdGUoZmF2OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLmhlbHBlcnMubWFrZU1vbWVudERheVRpbWUoKTtcbiAgICBjb25zdCB0b21vcnJvdyA9IHRoaXMuaGVscGVycy5tYWtlTW9tZW50RGF5VGltZSgxKTtcbiAgICB0aGlzLm91dEJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXMobm93LCAzMCk7XG4gICAgdGhpcy5pbmJvdW5kRGF0ZSA9IHRoaXMuaGVscGVycy5tb21lbnRSb3VuZE1pbnV0ZXModG9tb3Jyb3csIDMwKTtcbiAgICB0aGlzLmFwcGx5U2VhcmNoUXVlcnkoZmF2KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VyY2hRdWVyeShxdWVyeTogU2VhcmNoRmxpZ2h0c1YyUXVlcnlWYXJpYWJsZXMpOiBJRmxpZ2h0U2VhcmNoQXJncyB7XG4gICAgY29uc3Qgc2VhcmNoUXVlcnk6IElGbGlnaHRTZWFyY2hBcmdzID0gcXVlcnk7XG4gICAgc3dpdGNoICh0aGlzLmNob3NlblNlYXJjaFR5cGUpIHtcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHk6XG4gICAgICAgIHNlYXJjaFF1ZXJ5Lm11bHRpRGVzdGluYXRpb25EZXRhaWwgPSB0aGlzLm11bHRpRGVzdGluYXRpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBGbGlnaHRTZWFyY2hUeXBlLnJldHVybjpcbiAgICAgIGNhc2UgRmxpZ2h0U2VhcmNoVHlwZS5vbmVXYXk6XG4gICAgICAgIHNlYXJjaFF1ZXJ5LmRlcGFydExvY2F0aW9uRGV0YWlsID0gdGhpcy5kZXBhcnRMb2NhdGlvbjtcbiAgICAgICAgc2VhcmNoUXVlcnkuYXJyaXZlTG9jYXRpb25EZXRhaWwgPSB0aGlzLmFycml2ZUxvY2F0aW9uO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gc2VhcmNoUXVlcnk7XG4gIH1cblxuICBjYW5CZUV1cm9TZWFyY2hlZChcbiAgICBkZXBhcnRMb2NhdGlvbjogc3RyaW5nID0gKHRoaXMuZGVwYXJ0TG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpPy5nYXRld2F5LFxuICAgIGFycml2ZUxvY2F0aW9uOiBzdHJpbmcgPSAodGhpcy5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXksXG4gICAgY2hvc2VuU2VhcmNoVHlwZTogRmxpZ2h0U2VhcmNoVHlwZSA9IHRoaXMuY2hvc2VuU2VhcmNoVHlwZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoY2hvc2VuU2VhcmNoVHlwZSA9PT0gRmxpZ2h0U2VhcmNoVHlwZS5tdWx0aUNpdHkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKEFpclRvRXVyb1tkZXBhcnRMb2NhdGlvbl0gJiYgQWlyVG9FdXJvW2Fycml2ZUxvY2F0aW9uXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgY2FuQmVSYWlsU2VhcmNoZWQoXG4gICAgY2hvc2VuU2VhcmNoVHlwZTogRmxpZ2h0U2VhcmNoVHlwZSA9IHRoaXMuY2hvc2VuU2VhcmNoVHlwZSxcbiAgICB0cmFpbmxpbmVDb25maWc6IHN0cmluZ1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmxvZygnKysrIENoZWNraW5nIGlmIGZsaWdodCBqb3VybmV5IGNhbiBiZSBzZWVhcmNoZWQgYnkgcmFpbCArKysnKTtcblxuICAgIGlmIChjaG9zZW5TZWFyY2hUeXBlID09PSBGbGlnaHRTZWFyY2hUeXBlLm11bHRpQ2l0eSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0cmFpbmxpbmVDb25maWcpIHtcbiAgICAgIC8vIGF0dGVtcHQgdG8gbG9va3VwIHRoZSBzdGF0aW9ucyAtIHdvdWxkIGJlIHRvIG1hbnkgdG8gbWFwIHByb3Blcmx5XG4gICAgICBjb25zb2xlLmxvZygnKysrIFRyYWlubGluZSBlbmFibGVkIC0gYXR0ZW1wdCB0byBsb29rdXAgdGhlIHN0YXRpb25zICsrKycpO1xuICAgICAgY29uc3Qgc3BsaXQgPSAodGhpcy5kZXBhcnRMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmRlc3RpbmF0aW9uLnNwbGl0KCcsJylbMF07XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmRlcGFydExvY2F0aW9uKTtcbiAgICAgIGNvbnN0IHRyYWlubGluZU91dGJvdW5kU3RhdGlvbnM6IGFueSA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZVxuICAgICAgICAuZ2V0U3RhdGlvbkxvY2F0aW9ucyhzcGxpdCwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIGZhbHNlKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICBjb25zb2xlLmxvZyh0cmFpbmxpbmVPdXRib3VuZFN0YXRpb25zKTtcblxuICAgICAgY29uc3QgaW5TcGxpdCA9ICh0aGlzLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzKT8uZGVzdGluYXRpb24uc3BsaXQoJywnKVswXTtcblxuICAgICAgY29uc3QgdHJhaW5saW5lSW5ib3VuZFN0YXRpb25zOiBhbnkgPSBhd2FpdCB0aGlzLnNlYXJjaFNlcnZpY2VcbiAgICAgICAgLmdldFN0YXRpb25Mb2NhdGlvbnMoaW5TcGxpdCwgdW5kZWZpbmVkLCBmYWxzZSwgZmFsc2UsIGZhbHNlKVxuICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgICBjb25zb2xlLmxvZyh0cmFpbmxpbmVJbmJvdW5kU3RhdGlvbnMpO1xuXG4gICAgICBpZiAodHJhaW5saW5lT3V0Ym91bmRTdGF0aW9ucy5sZW5ndGggJiYgdHJhaW5saW5lSW5ib3VuZFN0YXRpb25zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLm91dGJvdW5kU2FtZVNlYXJjaFRyYWlubGluZVN0YXRpb25zID0gdHJhaW5saW5lT3V0Ym91bmRTdGF0aW9ucztcbiAgICAgICAgdGhpcy5pbmJvdW5kU2FtZVNlYXJjaFRyYWlubGluZVN0YXRpb25zID0gdHJhaW5saW5lSW5ib3VuZFN0YXRpb25zO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcrKysgSGF2ZSBib3RoIHRyYWlubGluZSBpbmJvdW5kIGFuZCBvdXRib3VuZCBzdGF0aW9ucyArKysnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChcbiAgICAgICAgQUlSVG9SYWlsVUtbKHRoaXMuZGVwYXJ0TG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHMpPy5nYXRld2F5XSAmJlxuICAgICAgICBBSVJUb1JhaWxVS1sodGhpcy5hcnJpdmVMb2NhdGlvbiBhcyBPQlRBaXJwb3J0RGV0YWlscyk/LmdhdGV3YXldXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGdldEZhcmVSdWxlcyhqb3VybmV5SGFzaDogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2hlblNlbGVjdGVkQWxvbmU6IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXSxcbiAgICAgIGpvdXJuZXlXaGVuU2VsZWN0ZWQ6IHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZXF1aXJlc1JlYXNvbihqb3VybmV5SGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uS2V5cz8ubGVuZ3RoIHx8XG4gICAgICAhIXRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzPy5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldFJlcXVpcmVzUmVhc29uTWVzc2FnZShqb3VybmV5SGFzaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkuam91cm5leVdoZW5TZWxlY3RlZFtqb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMuam9pbignLCAnKSB8fFxuICAgICAgdGhpcy5fcnVsZUFjdGlvblN1bW1hcnkud2hlblNlbGVjdGVkQWxvbmVbam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbk1lc3NhZ2VzLmpvaW4oJywgJykgfHxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxuXG4gIG1lc3NhZ2VDb25maWdDaGVjayhjb25maWc6IGFueSwgaXNDaGVja1Bhc3M6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBjb25zdCBkZXBhcnRMb2NhdGlvbiA9IHRoaXMuZGVwYXJ0TG9jYXRpb24gYXMgT0JUQWlycG9ydERldGFpbHM7XG4gICAgY29uc3QgYXJyaXZlTG9jYXRpb24gPSB0aGlzLmFycml2ZUxvY2F0aW9uIGFzIE9CVEFpcnBvcnREZXRhaWxzO1xuICAgIGNvbnN0IGRlcGFydERldGFpbCA9IGRlcGFydExvY2F0aW9uPy5kZXN0aW5hdGlvbj8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBhcnJpdmVEZXRhaWwgPSBhcnJpdmVMb2NhdGlvbj8uZGVzdGluYXRpb24/LnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbmZpZy5hcnJpdmFsQWlycG9ydCkge1xuICAgICAgaXNDaGVja1Bhc3MgPSBhcnJpdmVEZXRhaWwgPT09IGNvbmZpZy5hcnJpdmFsQWlycG9ydDtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmRlcGFydHVyZUFpcnBvcnQpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID0gZGVwYXJ0RGV0YWlsID09PSBjb25maWcuZGVwYXJ0dXJlQWlycG9ydDtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jaXR5KSB7XG4gICAgICBjb25zdCBjaXR5ID0gY29uZmlnLmNpdHkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gISF0aGlzLm11bHRpRGVzdGluYXRpb24uZmluZChcbiAgICAgICAgbXVsID0+XG4gICAgICAgICAgbXVsLmRlc3Q/LmRlc3RpbmF0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNpdHkpIHx8XG4gICAgICAgICAgbXVsLm9yaWc/LmRlc3RpbmF0aW9uPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGNpdHkpXG4gICAgICApO1xuICAgICAgaXNDaGVja1Bhc3MgPSBkZXBhcnREZXRhaWw/LmluY2x1ZGVzKGNpdHkpIHx8IGFycml2ZURldGFpbD8uaW5jbHVkZXMoY2l0eSkgfHwgbWF0Y2g7XG4gICAgfVxuICAgIGlmIChjb25maWcuY291bnRyeSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSAhIXRoaXMubXVsdGlEZXN0aW5hdGlvbi5maW5kKFxuICAgICAgICBtdWwgPT4gbXVsLmRlc3Q/LmNvdW50cnlDb2RlID09PSBjb25maWcuY291bnRyeSB8fCBtdWwub3JpZz8uY291bnRyeUNvZGUgPT09IGNvbmZpZy5jb3VudHJ5XG4gICAgICApO1xuICAgICAgaXNDaGVja1Bhc3MgPVxuICAgICAgICBkZXBhcnRMb2NhdGlvbj8uY291bnRyeSA9PT0gY29uZmlnLmNvdW50cnkgfHxcbiAgICAgICAgYXJyaXZlTG9jYXRpb24/LmNvdW50cnkgPT09IGNvbmZpZy5jb3VudHJ5IHx8XG4gICAgICAgIG1hdGNoO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmNhcnJpZXIpIHtcbiAgICAgIGlzQ2hlY2tQYXNzID0gISF0aGlzLnByZWZlcnJlZENhcnJpZXJzLmZpbmQoY2FycmllciA9PlxuICAgICAgICBjYXJyaWVyICE9PSBudWxsXG4gICAgICAgICAgPyBjYXJyaWVyLmNvZGUgPT09IGNvbmZpZy5jYXJyaWVyIHx8IGNhcnJpZXIubmFtZSA9PT0gY29uZmlnLmNhcnJpZXJcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBpc0NoZWNrUGFzcztcbiAgfVxuXG4gIC8vICAgcHVibGljIGdldEZsaWdodEV4dHJhcyhmbGlnaHQ6IElucHV0RmxpZ2h0Sm91cm5leSwpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5nZXRGbGlnaHRFeHRyYXNPcHRpb25zLmZldGNoTGlzdCh7ZmxpZ2h0fSlcbiAgLy8gfVxuXG4gIHB1YmxpYyBnZXRGbGlnaHRFeHRyYXMoXG4gICAgZmxpZ2h0czogSW5wdXRGbGlnaHRKb3VybmV5W10sXG4gICAgc3VwcGxpZXI6IHN0cmluZyxcbiAgICBsb3lhbHR5Q29kZT86IHN0cmluZyxcbiAgICB1c2VySWQ/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxGbGlnaHRPcHRpb25zW10+IHtcbiAgICAvLyBHZXQgc2VhcmNoIHF1ZXJ5XG4gICAgbGV0IHNlYXJjaFF1ZXJ5ID0gdGhpcy5nZXRTZWFyY2hRdWVyeSgpO1xuXG4gICAgc2VhcmNoUXVlcnkucGFzc2VuZ2VycyA9IHRoaXMudHJhdmVsbGVycy5tYXAoXG4gICAgICAoeCk6IEZsaWdodFBhc3Nlbmdlck9iamVjdCA9PiAoe1xuICAgICAgICB0eXBlOiBGbGlnaHRQYXNzZW5nZXJUeXBlLkFkdWx0LFxuICAgICAgICBkb2I6IHguZG9iID8gbmV3IERhdGUoTnVtYmVyKHguZG9iKSkudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOiBudWxsLFxuICAgICAgICBmaXJzdE5hbWU6IHguZm9yZW5hbWUsXG4gICAgICAgIHN1cm5hbWU6IHguc3VybmFtZSxcbiAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgIGd1ZXN0OiB4Lmd1ZXN0XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRGbGlnaHRFeHRyYXNPcHRpb25zXG4gICAgICAuZmV0Y2hMaXN0KHsgZmxpZ2h0cywgc3VwcGxpZXIsIHNlYXJjaFF1ZXJ5LCBsb3lhbHR5Q29kZSwgdXNlcklkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChkYXRhOiBGbGlnaHRPcHRpb25zW10pID0+IHtcbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldFNlbGVjdGVkRmxpZ2h0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEZsaWdodCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwSWQgPSAtMTtcbiAgICB0aGlzLm91dGJvdW5kQ2FiaW5DbGFzcyA9ICcnOyAvLyByZXNldCBvdXRib3VuZENhYmluQ2xhc3NcbiAgfVxuXG4gIGNyZWF0ZUNoZWFwZXN0UHJpY2VPYmplY3QoZmxpZ2h0c0dyb3VwVHlwZTogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0W10pOiBJQ2hlYXBlc3RQcmljZURldGFpbHMge1xuICAgIHJldHVybiBmbGlnaHRzR3JvdXBUeXBlLnJlZHVjZShcbiAgICAgIChjaGVhcGVzdFByaWNlOiBJQ2hlYXBlc3RQcmljZURldGFpbHMsIHJlc3VsdDogRmxpZ2h0R3JvdXBlZFF1b3RlUmVzdWx0KSA9PiB7XG4gICAgICAgIGNvbnN0IHByaWNlID0gcmVzdWx0Lm1pblByaWNlO1xuICAgICAgICBpZiAoY2hlYXBlc3RQcmljZS5hbW91bnQgPiBwcmljZSkge1xuICAgICAgICAgIGNoZWFwZXN0UHJpY2UuYW1vdW50ID0gcHJpY2U7XG4gICAgICAgICAgY29uc3QgY2hlYXBGbGlnaHRDbGFzcyA9IE9iamVjdC52YWx1ZXMocmVzdWx0LmNsYXNzZXMpXG4gICAgICAgICAgICAuZmlsdGVyKGZsaWdodENsYXNzID0+IGZsaWdodENsYXNzICE9PSBudWxsKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGEubWlucHJpY2UgLSBiLm1pbnByaWNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNoZWFwRmxpZ2h0Q2xhc3MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjaGVhcGVzdFByaWNlLmZsaWdodCA9IGNoZWFwRmxpZ2h0Q2xhc3NbMF0uZmxpZ2h0c1swXTtcbiAgICAgICAgICAgIGNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlID0gY2hlYXBGbGlnaHRDbGFzc1swXS5jdXJyZW5jeTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XG4gICAgICB9LFxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6ICdHQlAnLCBmbGlnaHQ6IG51bGwgfVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVDaGVhcGVzdFByaWNlKGpvdXJuZXlzOiBGbGlnaHRJdGluZXJhcnlbXSk6IElDaGVhcGVzdFByaWNlRGV0YWlscyB7XG4gICAgaWYgKCFqb3VybmV5cz8ubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgY3VycmVuY3kgPSBqb3VybmV5c1swXS50b3RhbC5jdXJyZW5jeTtcbiAgICByZXR1cm4gam91cm5leXMucmVkdWNlKFxuICAgICAgKGNoZWFwZXN0UHJpY2U6IElDaGVhcGVzdFByaWNlRGV0YWlscywgcmVzdWx0OiBGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucykgPT4ge1xuICAgICAgICBjb25zdCBwcmljZSA9IHJlc3VsdC50b3RhbC5wcmljZTtcbiAgICAgICAgY29uc3QgY3VycmVuY3kgPSByZXN1bHQudG90YWwuY3VycmVuY3k7XG4gICAgICAgIGNvbnN0IGZsaWdodCA9IHJlc3VsdDtcbiAgICAgICAgaWYgKGNoZWFwZXN0UHJpY2UuYW1vdW50ID4gcHJpY2UpIHtcbiAgICAgICAgICBjaGVhcGVzdFByaWNlLmFtb3VudCA9IHByaWNlO1xuICAgICAgICAgIGNoZWFwZXN0UHJpY2UuY3VycmVuY3lDb2RlID0gY3VycmVuY3k7XG4gICAgICAgICAgY2hlYXBlc3RQcmljZS5mbGlnaHQgPSBmbGlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoZWFwZXN0UHJpY2U7XG4gICAgICB9LFxuICAgICAgeyBhbW91bnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLCBjdXJyZW5jeUNvZGU6IGN1cnJlbmN5LCBmbGlnaHQ6IG51bGwgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpc2VEYXRlVGltZShkYXRlVGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5oZWxwZXJzLnNhbml0aXNlRGF0ZVRpbWUoZGF0ZVRpbWUpO1xuICB9XG5cbiAgcHVibGljIG1ha2VSZXR1cm5PdXRib3VuZChjbzJQZXJQYXNzZW5nZXI6IG51bWJlcik6IEdyZWVuZXJDaG9pY2Uge1xuICAgIHJldHVybiB0aGlzLmdyZWVuZXJDaG9pY2UubWFrZVJldHVybk91dGJvdW5kKGNvMlBlclBhc3Nlbmdlcik7XG4gIH1cblxuICBwdWJsaWMgbWFrZU11bHRpKG9yZGVyOiBudW1iZXIsIGNvMlBlclBhc3NlbmdlcjogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5ncmVlbmVyQ2hvaWNlLm1ha2VNdWx0aShvcmRlciwgY28yUGVyUGFzc2VuZ2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXN0b21DU1Moam91cm5leUhhc2g6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LmpvdXJuZXlXaGVuU2VsZWN0ZWRbam91cm5leUhhc2hdPy5jdXN0b21DU1MgfHxcbiAgICAgIHRoaXMuX3J1bGVBY3Rpb25TdW1tYXJ5LndoZW5TZWxlY3RlZEFsb25lW2pvdXJuZXlIYXNoXT8uY3VzdG9tQ1NTIHx8XG4gICAgICAnJ1xuICAgICk7XG4gIH1cblxuICBhc3luYyByZXByaWNlRmxpZ2h0KGZsaWdodDogRmxpZ2h0SXRpbmVyYXJ5V2l0aEV4dGVuc2lvbnMpOiBQcm9taXNlPEZsaWdodEl0aW5lcmFyeVdpdGhFeHRlbnNpb25zPiB7XG4gICAgY29uc29sZS5sb2coJysrKyBBdHRlbXB0aW5nIHRvIHJlcHJpY2U6ICcsIGZsaWdodCwgJyArKysnKTtcbiAgICAvLyB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0dGluZ0ZsaWdodENsYXNzZXMubmV4dCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgLy8gbm93IGFjdHVhbGx5IGRvIHRoZSByZXByaWNlIGNhbGwgLSBpZiB3ZSB3YW50IHRoYXRcbiAgICAgIHRoaXMuc2VhcmNoU2VydmljZS5yZXByaWNpbmdGbGlnaHQubmV4dCh0cnVlKTtcbiAgICAgIGNvbnN0IG5ld0ZsaWdodCA9IGF3YWl0IFxuICAgICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmxpZ2h0QXROZXdDbGFzcyhcbiAgICAgICAgICB0aGlzLmdldFNlYXJjaFF1ZXJ5KCksXG4gICAgICAgICAgZmxpZ2h0LFxuICAgICAgICAgIHRoaXMuYWR1bHRzLFxuICAgICAgICAgIHRoaXMuY2hpbGRyZW5cbiAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICAgICAgXG4gICAgICBmbGlnaHQudG90YWwgPSBuZXdGbGlnaHQuZmxpZ2h0c1swXS50b3RhbDtcbiAgICAgIC8vIHRoaXMgYml0IGZvciBuZXcgcG9saWN5IEVOVC05NzcyXG4gICAgICBjb25zdCB7IGpvdXJuZXlXaGVuU2VsZWN0ZWQsIHdoZW5TZWxlY3RlZEFsb25lIH0gPSBuZXdGbGlnaHQucnVsZUFjdGlvblN1bW1hcnk7XG4gICAgICAvLyB1cGRhdGUgaW4gb2J0c1xuICAgICAgdGhpcy51cGRhdGVGbGlnaHRJdGluZXJhcnlXaXRoRXh0ZW5zaW9ucyhmbGlnaHQsIG5ld0ZsaWdodC5ydWxlQWN0aW9uU3VtbWFyeSk7XG4gICAgICBmbGlnaHQucmVxdWlyZXNSZWFzb25LZXlzID1cbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdPy5yZXF1aXJlc1JlYXNvbktleXMgfHxcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25LZXlzO1xuICAgICAgZmxpZ2h0LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgPVxuICAgICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF0/LnJlcXVpcmVzUmVhc29uTWVzc2FnZXMgfHxcbiAgICAgICAgd2hlblNlbGVjdGVkQWxvbmVbZmxpZ2h0LmpvdXJuZXlIYXNoXT8ucmVxdWlyZXNSZWFzb25NZXNzYWdlcyB8fFxuICAgICAgICBbXTtcblxuICAgICAgZmxpZ2h0LnVuYXZhaWxhYmxlID1cbiAgICAgICAgam91cm5leVdoZW5TZWxlY3RlZFtmbGlnaHQuam91cm5leUhhc2hdPy51bmF2YWlsYWJsZSB8fFxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdPy51bmF2YWlsYWJsZTtcbiAgICAgIGZsaWdodC51bmF2YWlsYWJsZU1lc3NhZ2UgPVxuICAgICAgICBqb3VybmV5V2hlblNlbGVjdGVkW2ZsaWdodC5qb3VybmV5SGFzaF0/LnVuYXZhaWxhYmxlTWVzc2FnZSB8fFxuICAgICAgICB3aGVuU2VsZWN0ZWRBbG9uZVtmbGlnaHQuam91cm5leUhhc2hdPy51bmF2YWlsYWJsZU1lc3NhZ2UgfHxcbiAgICAgICAgJyc7XG4gICAgICAvLyB3ZSB3ZXJlIHVwZGF0aW5nIHRoZSB3aG9sZSwgYWxsIHdlIG5lZWQgdG8gZG8gaXMgdXBkYXRlIHRoZSB0b3RhbCwgdGhpcyBjb250YWlucyBkaXNjb3VudCBpbmZvXG4gICAgICAvLyBhbmQgYWxzbyB1b2RhdGUgcG9saWN5XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UucmVwcmljaW5nRmxpZ2h0Lm5leHQoZmFsc2UpO1xuICAgICAgcmV0dXJuIGZsaWdodFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0dGluZ0ZsaWdodENsYXNzZXMubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLnNlYXJjaFNlcnZpY2UucmVwcmljaW5nRmxpZ2h0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZsaWdodFNlYXRNYXAodXNlcjpzdHJpbmcsIGZsaWdodElkOnN0cmluZyxmbGlnaHRIYXNoOnN0cmluZyxzZWF0czphbnkpOk9ic2VydmFibGU8QmFza2V0RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZUZsaWdodFNlYXRNYXBVcGRhdGVyLnVwZGF0ZU9uZSh7dXNlciwgYmFza2V0SXRlbUlkOmZsaWdodElkLGZsaWdodERldGFpbEhhc2g6ZmxpZ2h0SGFzaCwgc2VhdDpzZWF0c30pXG4gIH1cblxuICBzaG93TWl4ZWRDYWJpbihmbGlnaHRzOiBGbGlnaHRKb3VybmV5W10pOiBib29sZWFue1xuICAgIHJldHVybiBmbGlnaHRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIGZsaWdodHMuc29tZShmbGlnaHQgPT4gZmxpZ2h0Py5jYWJpbkNvZGUgIT09IGZsaWdodHNbMF0/LmNhYmluQ29kZSkgJiZcbiAgICAgIGZsaWdodHMuc29tZShmbGlnaHQgPT4gZmxpZ2h0LmNhYmluQ29kZSA9PT0gXCJZXCIgJiYgZmxpZ2h0LmNhYmluQ2xhc3MgPT09IFwiUHJlbWl1bVwiKTtcbiAgfVxufVxuXG4iXX0=
|