valtech-components 2.0.460 → 2.0.462

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.
@@ -279,7 +279,7 @@ export class AuthService {
279
279
  */
280
280
  updateProfile(request) {
281
281
  return this.http
282
- .patch(`${this.baseUrl}/profile`, request)
282
+ .put(`${this.baseUrl}/profile`, request)
283
283
  .pipe(catchError(error => this.handleAuthError(error)));
284
284
  }
285
285
  // =============================================
@@ -493,4 +493,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
493
493
  type: Inject,
494
494
  args: [VALTECH_AUTH_CONFIG]
495
495
  }] }, { type: i1.HttpClient }, { type: i2.Router }, { type: i3.AuthStateService }, { type: i4.TokenService }, { type: i5.AuthStorageService }, { type: i6.AuthSyncService }, { type: i7.FirebaseService }] });
496
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFHeEUsT0FBTyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRixPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7O0FBbUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFLdEIsWUFDdUMsTUFBeUIsRUFDdEQsSUFBZ0IsRUFDaEIsTUFBYyxFQUNkLFlBQThCLEVBQzlCLFlBQTBCLEVBQzFCLGNBQWtDLEVBQ2xDLFdBQTRCLEVBQzVCLGVBQWdDO1FBUEgsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDdEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFvQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBWjFDLCtCQUErQjtRQUN2QixtQkFBYyxHQUF5QyxJQUFJLENBQUM7UUFDNUQscUJBQWdCLEdBQXdCLElBQUksQ0FBQztRQWFyRCxnREFBZ0Q7UUFDaEQsb0NBQW9DO1FBQ3BDLGdEQUFnRDtRQUVoRCx1Q0FBdUM7UUFDOUIsVUFBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFD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WUFDM0QsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7K0dBMWhCVSxXQUFXLGtCQU1aLG1CQUFtQjttSEFObEIsV0FBVyxjQURFLE1BQU07OzRGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTzdCLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPbkRlc3Ryb3ksIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBvZiwgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0FVVEhfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aFN0YXRlU2VydmljZSB9IGZyb20gJy4vYXV0aC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4vdG9rZW4uc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU3luY1NlcnZpY2UgfSBmcm9tICcuL3N5bmMuc2VydmljZSc7XG5pbXBvcnQge1xuICBTaWduaW5SZXF1ZXN0LFxuICBTaWduaW5SZXNwb25zZSxcbiAgU2lnbnVwUmVxdWVzdCxcbiAgU2lnbnVwUmVzcG9uc2UsXG4gIFZlcmlmeUVtYWlsUmVxdWVzdCxcbiAgVmVyaWZ5RW1haWxSZXNwb25zZSxcbiAgUmVzZW5kQ29kZVJlcXVlc3QsXG4gIFJlc2VuZENvZGVSZXNwb25zZSxcbiAgTUZBVmVyaWZ5UmVzcG9uc2UsXG4gIFJlZnJlc2hSZXNwb25zZSxcbiAgR2V0UGVybWlzc2lvbnNSZXNwb25zZSxcbiAgR2V0UHJvZmlsZVJlc3BvbnNlLFxuICBVcGRhdGVQcm9maWxlUmVxdWVzdCxcbiAgVXBkYXRlUHJvZmlsZVJlc3BvbnNlLFxuICBNRkFTZXR1cFJlc3BvbnNlLFxuICBNRkFDb25maXJtUmVzcG9uc2UsXG4gIE1GQURpc2FibGVSZXNwb25zZSxcbiAgRm9yZ290UGFzc3dvcmRSZXF1ZXN0LFxuICBGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLFxuICBSZXNldFBhc3N3b3JkUmVxdWVzdCxcbiAgUmVzZXRQYXNzd29yZFJlc3BvbnNlLFxuICBNRkFNZXRob2QsXG4gIEF1dGhFcnJvcixcbiAgQXV0aFN5bmNFdmVudCxcbiAgVmFsdGVjaEF1dGhDb25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vZmlyZWJhc2UnO1xuXG5cbi8qKlxuICogU2VydmljaW8gcHJpbmNpcGFsIGRlIGF1dGVudGljYWNpw7NuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbigpIHtcbiAqICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGguc2lnbmluKHsgZW1haWwsIHBhc3N3b3JkIH0pKTtcbiAqICAgICBpZiAodGhpcy5hdXRoLm1mYVBlbmRpbmcoKS5yZXF1aXJlZCkge1xuICogICAgICAgLy8gTW9zdHJhciBVSSBkZSBNRkFcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyBUaW1lciBwYXJhIHJlZnJlc2ggcHJvYWN0aXZvXG4gIHByaXZhdGUgcmVmcmVzaFRpbWVySWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3luY1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBzdGF0ZVNlcnZpY2U6IEF1dGhTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBBdXRoU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeW5jU2VydmljZTogQXV0aFN5bmNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlyZWJhc2VTZXJ2aWNlOiBGaXJlYmFzZVNlcnZpY2UsXG4gICkge31cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRVNUQURPIFDDmkJMSUNPIChTaWduYWxzIHJlYWRvbmx5KVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKiogRXN0YWRvIGNvbXBsZXRvIGRlIGF1dGVudGljYWNpw7NuICovXG4gIHJlYWRvbmx5IHN0YXRlID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc3RhdGU7XG5cbiAgLyoqIFVzdWFyaW8gZXN0w6EgYXV0ZW50aWNhZG8gKi9cbiAgcmVhZG9ubHkgaXNBdXRoZW50aWNhdGVkID0gdGhpcy5zdGF0ZVNlcnZpY2UuaXNBdXRoZW50aWNhdGVkO1xuXG4gIC8qKiBFc3RhZG8gZGUgY2FyZ2EgKi9cbiAgcmVhZG9ubHkgaXNMb2FkaW5nID0gdGhpcy5zdGF0ZVNlcnZpY2UuaXNMb2FkaW5nO1xuXG4gIC8qKiBJbmZvcm1hY2nDs24gZGVsIHVzdWFyaW8gKi9cbiAgcmVhZG9ubHkgdXNlciA9IHRoaXMuc3RhdGVTZXJ2aWNlLnVzZXI7XG5cbiAgLyoqIFRva2VuIGRlIGFjY2VzbyAqL1xuICByZWFkb25seSBhY2Nlc3NUb2tlbiA9IHRoaXMuc3RhdGVTZXJ2aWNlLmFjY2Vzc1Rva2VuO1xuXG4gIC8qKiBSb2xlcyBkZWwgdXN1YXJpbyAqL1xuICByZWFkb25seSByb2xlcyA9IHRoaXMuc3RhdGVTZXJ2aWNlLnJvbGVzO1xuXG4gIC8qKiBQZXJtaXNvcyBkZWwgdXN1YXJpbyAqL1xuICByZWFkb25seSBwZXJtaXNzaW9ucyA9IHRoaXMuc3RhdGVTZXJ2aWNlLnBlcm1pc3Npb25zO1xuXG4gIC8qKiBVc3VhcmlvIGVzIHN1cGVyIGFkbWluICovXG4gIHJlYWRvbmx5IGlzU3VwZXJBZG1pbiA9IHRoaXMuc3RhdGVTZXJ2aWNlLmlzU3VwZXJBZG1pbjtcblxuICAvKiogRXN0YWRvIGRlIE1GQSBwZW5kaWVudGUgKi9cbiAgcmVhZG9ubHkgbWZhUGVuZGluZyA9IHRoaXMuc3RhdGVTZXJ2aWNlLm1mYVBlbmRpbmc7XG5cbiAgLyoqIEVycm9yIGFjdHVhbCAqL1xuICByZWFkb25seSBlcnJvciA9IHRoaXMuc3RhdGVTZXJ2aWNlLmVycm9yO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTklDSUFMSVpBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYWxpemEgZWwgc2VydmljaW8gZGUgYXV0ZW50aWNhY2nDs24uXG4gICAqIExsYW1hZG8gYXV0b23DoXRpY2FtZW50ZSBwb3IgcHJvdmlkZVZhbHRlY2hBdXRoLlxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyAxLiBDYXJnYXIgZXN0YWRvIGRlc2RlIHN0b3JhZ2VcbiAgICBjb25zdCBzdG9yZWRTdGF0ZSA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFN0YXRlKCk7XG5cbiAgICBpZiAoc3RvcmVkU3RhdGUuYWNjZXNzVG9rZW4pIHtcbiAgICAgIC8vIDIuIFZlcmlmaWNhciBzaSB0b2tlbiBlcyB2w6FsaWRvXG4gICAgICBpZiAodGhpcy50b2tlblNlcnZpY2UuaXNUb2tlblZhbGlkKHN0b3JlZFN0YXRlLmFjY2Vzc1Rva2VuKSkge1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5yZXN0b3JlRnJvbVN0b3JhZ2Uoc3RvcmVkU3RhdGUpO1xuXG4gICAgICAgIC8vIEV4dHJhZXIgaW5mbyBkZWwgdG9rZW5cbiAgICAgICAgY29uc3QgY2xhaW1zID0gdGhpcy50b2tlblNlcnZpY2UucGFyc2VUb2tlbihzdG9yZWRTdGF0ZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgIGlmIChjbGFpbXMpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVVc2VySW5mbyhjbGFpbXMudWlkLCBjbGFpbXMuZW1haWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gSW5pY2lhciB0aW1lciBkZSByZWZyZXNjbyBwcm9hY3Rpdm9cbiAgICAgICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgICAgfSBlbHNlIGlmIChzdG9yZWRTdGF0ZS5yZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgLy8gNC4gVG9rZW4gZXhwaXJhZG8gcGVybyBoYXkgcmVmcmVzaCB0b2tlbiAtIGludGVudGFyIHJlZnJlc2NhclxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKCkpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aGlzLnNpZ25PdXRGaXJlYmFzZSgpO1xuICAgICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNpZ25PdXRGaXJlYmFzZSgpO1xuICAgICAgICB0aGlzLmNsZWFyU3RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBJbmljaWFyIHNpbmNyb25pemFjacOzbiBlbnRyZSBwZXN0YcOxYXNcbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlVGFiU3luYykge1xuICAgICAgdGhpcy5zeW5jU2VydmljZS5zdGFydCgpO1xuICAgICAgdGhpcy5zeW5jU3Vic2NyaXB0aW9uID0gdGhpcy5zeW5jU2VydmljZS5vbkV2ZW50JC5zdWJzY3JpYmUoZXZlbnQgPT5cbiAgICAgICAgdGhpcy5oYW5kbGVTeW5jRXZlbnQoZXZlbnQpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldExvYWRpbmcoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgdGhpcy5zeW5jU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEFVVEVOVElDQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWEgc2VzacOzbiBjb24gZW1haWwgeSBjb250cmFzZcOxYS5cbiAgICovXG4gIHNpZ25pbihyZXF1ZXN0OiBTaWduaW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxTaWduaW5SZXNwb25zZT4ge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsZWFyRXJyb3IoKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTaWduaW5SZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9zaWduaW5gLCByZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1mYVJlcXVpcmVkKSB7XG4gICAgICAgICAgLy8gTUZBIHJlcXVlcmlkbyAtIGd1YXJkYXIgZXN0YWRvIHRlbXBvcmFsXG4gICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0TUZBUGVuZGluZyh7XG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIG1mYVRva2VuOiByZXNwb25zZS5tZmFUb2tlbiEsXG4gICAgICAgICAgICBtZXRob2Q6IHJlc3BvbnNlLm1mYU1ldGhvZCEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAvLyBMb2dpbiBleGl0b3NvIHNpbiBNRkFcbiAgICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuIG51ZXZvIHVzdWFyaW8uXG4gICAqIEVsIHVzdWFyaW8gcXVlZGEgZW4gZXN0YWRvIFBFTkRJTkcgaGFzdGEgdmVyaWZpY2FyIHN1IGVtYWlsLlxuICAgKi9cbiAgc2lnbnVwKHJlcXVlc3Q6IFNpZ251cFJlcXVlc3QpOiBPYnNlcnZhYmxlPFNpZ251cFJlc3BvbnNlPiB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xlYXJFcnJvcigpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8U2lnbnVwUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vc2lnbnVwYCwgcmVxdWVzdClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2EgZW1haWwgY29uIGPDs2RpZ28gZGUgNiBkw61naXRvcy5cbiAgICogU2kgZXMgZXhpdG9zbywgaGFjZSBhdXRvLWxvZ2luIHkgcmV0b3JuYSB0b2tlbnMuXG4gICAqL1xuICB2ZXJpZnlFbWFpbChyZXF1ZXN0OiBWZXJpZnlFbWFpbFJlcXVlc3QpOiBPYnNlcnZhYmxlPFZlcmlmeUVtYWlsUmVzcG9uc2U+IHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbGVhckVycm9yKCk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VmVyaWZ5RW1haWxSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS92ZXJpZnktZW1haWxgLCByZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnZlcmlmaWVkICYmIHJlc3BvbnNlLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgLy8gQXV0by1sb2dpbjogZ3VhcmRhciB0b2tlbnMgeSBhY3R1YWxpemFyIGVzdGFkb1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2Vzc2Z1bEF1dGgocmVzcG9uc2UgYXMgdW5rbm93biBhcyBTaWduaW5SZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWVudsOtYSBjw7NkaWdvIGRlIHZlcmlmaWNhY2nDs24gYWwgZW1haWwuXG4gICAqL1xuICByZXNlbmRDb2RlKHJlcXVlc3Q6IFJlc2VuZENvZGVSZXF1ZXN0KTogT2JzZXJ2YWJsZTxSZXNlbmRDb2RlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxSZXNlbmRDb2RlUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcmVzZW5kLWNvZGVgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBjw7NkaWdvIE1GQS5cbiAgICovXG4gIHZlcmlmeU1GQShjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1GQVZlcmlmeVJlc3BvbnNlPiB7XG4gICAgY29uc3QgbWZhU3RhdGUgPSB0aGlzLm1mYVBlbmRpbmcoKTtcbiAgICBpZiAoIW1mYVN0YXRlLm1mYVRva2VuKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAoe1xuICAgICAgICBjb2RlOiAnTUZBX05PVF9QRU5ESU5HJyxcbiAgICAgICAgbWVzc2FnZTogJ05vIGhheSB2ZXJpZmljYWNpw7NuIE1GQSBwZW5kaWVudGUnLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PE1GQVZlcmlmeVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS92ZXJpZnlgLCB7XG4gICAgICAgIG1mYVRva2VuOiBtZmFTdGF0ZS5tZmFUb2tlbixcbiAgICAgICAgY29kZSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5jbGVhck1GQVBlbmRpbmcoKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNjYSBlbCB0b2tlbiBkZSBhY2Nlc28uXG4gICAqL1xuICByZWZyZXNoQWNjZXNzVG9rZW4oKTogT2JzZXJ2YWJsZTxSZWZyZXNoUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnN0YXRlKCkucmVmcmVzaFRva2VuO1xuICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAoe1xuICAgICAgICBjb2RlOiAnTk9fUkVGUkVTSF9UT0tFTicsXG4gICAgICAgIG1lc3NhZ2U6ICdObyBoYXkgdG9rZW4gZGUgcmVmcmVzY28nLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxSZWZyZXNoUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcmVmcmVzaGAsIHsgcmVmcmVzaFRva2VuIH0pLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBjb25zdCBleHBpcmVzQXQgPSBEYXRlLm5vdygpICsgcmVzcG9uc2UuZXhwaXJlc0luICogMTAwMDtcbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4sIHJlc3BvbnNlLmV4cGlyZXNJbik7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlLmFjY2Vzc1Rva2VuLCBleHBpcmVzQXQpO1xuICAgICAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgICAgIHRoaXMuc3luY1NlcnZpY2UuYnJvYWRjYXN0KHtcbiAgICAgICAgICB0eXBlOiAnVE9LRU5fUkVGUkVTSCcsXG4gICAgICAgICAgcGF5bG9hZDogeyBhY2Nlc3NUb2tlbjogcmVzcG9uc2UuYWNjZXNzVG9rZW4sIGV4cGlyZXNBdCB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaWVycmEgc2VzacOzbi5cbiAgICovXG4gIGxvZ291dCgpOiB2b2lkIHtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnN0YXRlKCkucmVmcmVzaFRva2VuO1xuXG4gICAgLy8gTm90aWZpY2FyIGFsIGJhY2tlbmQgKGZpcmUgYW5kIGZvcmdldClcbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBvc3QoYCR7dGhpcy5iYXNlVXJsfS9sb2dvdXRgLCB7IHJlZnJlc2hUb2tlbiB9KVxuICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIENlcnJhciBzZXNpw7NuIGRlIEZpcmViYXNlIHNpIGVzdMOhIGludGVncmFkb1xuICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG5cbiAgICB0aGlzLmNsZWFyU3RhdGUoKTtcbiAgICB0aGlzLnN5bmNTZXJ2aWNlLmJyb2FkY2FzdCh7IHR5cGU6ICdMT0dPVVQnIH0pO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblJvdXRlXSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIFNFVFVQICh1c3VhcmlvIGF1dGVudGljYWRvKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ29uZmlndXJhIE1GQSBwYXJhIGVsIHVzdWFyaW8uXG4gICAqL1xuICBzZXR1cE1GQShtZXRob2Q6IE1GQU1ldGhvZCwgcGhvbmU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1GQVNldHVwUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxNRkFTZXR1cFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9zZXR1cGAsIHsgbWV0aG9kLCBwaG9uZSB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtYSBsYSBjb25maWd1cmFjacOzbiBkZSBNRkEuXG4gICAqL1xuICBjb25maXJtTUZBKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBQ29uZmlybVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBQ29uZmlybVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9jb25maXJtYCwgeyBjb2RlIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2hhYmlsaXRhIE1GQS5cbiAgICovXG4gIGRpc2FibGVNRkEocGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBRGlzYWJsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBRGlzYWJsZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9kaXNhYmxlYCwgeyBwYXNzd29yZCB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJGSUwgREUgVVNVQVJJT1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCBwZXJmaWwgZGVsIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gICAqIEluY2x1eWUgaW5mb3JtYWNpw7NuIGRlIE1GQSB5IHRlbMOpZm9uby5cbiAgICovXG4gIGdldFByb2ZpbGUoKTogT2JzZXJ2YWJsZTxHZXRQcm9maWxlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PEdldFByb2ZpbGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9wcm9maWxlYClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIHBlcmZpbCBkZWwgdXN1YXJpby5cbiAgICovXG4gIHVwZGF0ZVByb2ZpbGUocmVxdWVzdDogVXBkYXRlUHJvZmlsZVJlcXVlc3QpOiBPYnNlcnZhYmxlPFVwZGF0ZVByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wYXRjaDxVcGRhdGVQcm9maWxlUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcHJvZmlsZWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFQ1VQRVJBQ0nDk04gREUgQ09OVFJBU0XDkUFcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYSBlbCBwcm9jZXNvIGRlIHJlY3VwZXJhY2nDs24gZGUgY29udHJhc2XDsWEuXG4gICAqIEVudsOtYSB1biBjw7NkaWdvIGFsIGVtYWlsIGRlbCB1c3VhcmlvLlxuICAgKi9cbiAgZm9yZ290UGFzc3dvcmQocmVxdWVzdDogRm9yZ290UGFzc3dvcmRSZXF1ZXN0KTogT2JzZXJ2YWJsZTxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9mb3Jnb3QtcGFzc3dvcmRgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldGVhIGxhIGNvbnRyYXNlw7FhIHVzYW5kbyBlbCBjw7NkaWdvIGVudmlhZG8gcG9yIGVtYWlsLlxuICAgKi9cbiAgcmVzZXRQYXNzd29yZChyZXF1ZXN0OiBSZXNldFBhc3N3b3JkUmVxdWVzdCk6IE9ic2VydmFibGU8UmVzZXRQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8UmVzZXRQYXNzd29yZFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Jlc2V0LXBhc3N3b3JkYCwgcmVxdWVzdClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUEVSTUlTT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbG9zIHBlcm1pc29zIGFjdHVhbGl6YWRvcyBkZWwgYmFja2VuZC5cbiAgICovXG4gIGZldGNoUGVybWlzc2lvbnMoKTogT2JzZXJ2YWJsZTxHZXRQZXJtaXNzaW9uc1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8R2V0UGVybWlzc2lvbnNSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9wZXJtaXNzaW9uc2ApLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVQZXJtaXNzaW9ucyhcbiAgICAgICAgICByZXNwb25zZS5yb2xlcyxcbiAgICAgICAgICByZXNwb25zZS5wZXJtaXNzaW9ucyxcbiAgICAgICAgICByZXNwb25zZS5pc1N1cGVyQWRtaW5cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zYXZlUGVybWlzc2lvbnMocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLnN5bmNTZXJ2aWNlLmJyb2FkY2FzdCh7IHR5cGU6ICdQRVJNSVNTSU9OU19VUERBVEUnIH0pO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgdW4gcGVybWlzbyBlc3BlY8OtZmljby5cbiAgICogRm9ybWF0bzogXCJyZXNvdXJjZTphY3Rpb25cIiAoZWo6IFwidGVtcGxhdGVzOmVkaXRcIilcbiAgICovXG4gIGhhc1Blcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgW3Jlc291cmNlLCBhY3Rpb25dID0gcGVybWlzc2lvbi5zcGxpdCgnOicpO1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zKCkuc29tZShwID0+IHtcbiAgICAgIGNvbnN0IFtwUmVzb3VyY2UsIHBBY3Rpb25dID0gcC5zcGxpdCgnOicpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHBSZXNvdXJjZSA9PT0gJyonIHx8IHBSZXNvdXJjZSA9PT0gcmVzb3VyY2UpICYmIChwQWN0aW9uID09PSAnKicgfHwgcEFjdGlvbiA9PT0gYWN0aW9uKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIGFsZ3VubyBkZSBsb3MgcGVybWlzb3MgZGFkb3MuXG4gICAqL1xuICBoYXNBbnlQZXJtaXNzaW9uKHBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZXJtaXNzaW9ucy5zb21lKHAgPT4gdGhpcy5oYXNQZXJtaXNzaW9uKHApKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIHRvZG9zIGxvcyBwZXJtaXNvcyBkYWRvcy5cbiAgICovXG4gIGhhc0FsbFBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwZXJtaXNzaW9ucy5ldmVyeShwID0+IHRoaXMuaGFzUGVybWlzc2lvbihwKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSB1biByb2wgZXNwZWPDrWZpY28uXG4gICAqL1xuICBoYXNSb2xlKHJvbGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJvbGVzKCkuc29tZShyID0+IHIudG9Mb3dlckNhc2UoKSA9PT0gcm9sZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIE1FVEhPRFNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBnZXQgYmFzZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9JHt0aGlzLmNvbmZpZy5hdXRoUHJlZml4fWA7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlOiBTaWduaW5SZXNwb25zZSB8IE1GQVZlcmlmeVJlc3BvbnNlKTogdm9pZCB7XG4gICAgY29uc3QgZXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIHJlc3BvbnNlLmV4cGlyZXNJbiEgKiAxMDAwO1xuICAgIGNvbnN0IHRva2VuRGF0YSA9IHRoaXMudG9rZW5TZXJ2aWNlLnBhcnNlVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4hKTtcblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldEF1dGhlbnRpY2F0ZWQoe1xuICAgICAgYWNjZXNzVG9rZW46IHJlc3BvbnNlLmFjY2Vzc1Rva2VuISxcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVzcG9uc2UucmVmcmVzaFRva2VuISxcbiAgICAgIHVzZXJJZDogdG9rZW5EYXRhPy51aWQsXG4gICAgICBlbWFpbDogdG9rZW5EYXRhPy5lbWFpbCxcbiAgICAgIHJvbGVzOiByZXNwb25zZS5yb2xlcyB8fCBbXSxcbiAgICAgIHBlcm1pc3Npb25zOiByZXNwb25zZS5wZXJtaXNzaW9ucyB8fCBbXSxcbiAgICAgIGlzU3VwZXJBZG1pbjogcmVzcG9uc2UucGVybWlzc2lvbnM/LmluY2x1ZGVzKCcqOionKSB8fCBmYWxzZSxcbiAgICAgIGV4cGlyZXNBdCxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZVN0YXRlKHtcbiAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbiEsXG4gICAgICByZWZyZXNoVG9rZW46IHJlc3BvbnNlLnJlZnJlc2hUb2tlbiEsXG4gICAgICByb2xlczogcmVzcG9uc2Uucm9sZXMgfHwgW10sXG4gICAgICBwZXJtaXNzaW9uczogcmVzcG9uc2UucGVybWlzc2lvbnMgfHwgW10sXG4gICAgICBpc1N1cGVyQWRtaW46IHJlc3BvbnNlLnBlcm1pc3Npb25zPy5pbmNsdWRlcygnKjoqJykgfHwgZmFsc2UsXG4gICAgICBleHBpcmVzQXQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3QoeyB0eXBlOiAnTE9HSU4nIH0pO1xuXG4gICAgLy8gSW50ZWdyYWNpw7NuIGNvbiBGaXJlYmFzZVxuICAgIGlmIChcbiAgICAgIHRoaXMuY29uZmlnLmVuYWJsZUZpcmViYXNlSW50ZWdyYXRpb24gJiZcbiAgICAgICdmaXJlYmFzZVRva2VuJyBpbiByZXNwb25zZSAmJlxuICAgICAgcmVzcG9uc2UuZmlyZWJhc2VUb2tlblxuICAgICkge1xuICAgICAgdGhpcy5zaWduSW5XaXRoRmlyZWJhc2UocmVzcG9uc2UuZmlyZWJhc2VUb2tlbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5jbGVhcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFJlZnJlc2hUaW1lcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWZyZXNoVGltZXIoKTtcblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc3RhdGUoKTtcbiAgICBpZiAoIXN0YXRlLmV4cGlyZXNBdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVmcmVzaEJlZm9yZU1zID0gKHRoaXMuY29uZmlnLnJlZnJlc2hCZWZvcmVFeHBpcnkgfHwgNjApICogMTAwMDtcbiAgICBjb25zdCByZWZyZXNoQXQgPSBzdGF0ZS5leHBpcmVzQXQgLSByZWZyZXNoQmVmb3JlTXM7XG4gICAgY29uc3QgZGVsYXkgPSByZWZyZXNoQXQgLSBEYXRlLm5vdygpO1xuXG4gICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgdGhpcy5yZWZyZXNoVGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnN1YnNjcmliZSh7XG4gICAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9nb3V0KCksXG4gICAgICAgIH0pO1xuICAgICAgfSwgZGVsYXkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUucmVmcmVzaFRva2VuKSB7XG4gICAgICAvLyBUb2tlbiB5YSBkZWJlcsOtYSByZWZyZXNjYXJzZSwgaW50ZW50YXIgYWhvcmFcbiAgICAgIHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKCkuc3Vic2NyaWJlKHtcbiAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9nb3V0KCksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZWZyZXNoVGltZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVmcmVzaFRpbWVySWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcklkKTtcbiAgICAgIHRoaXMucmVmcmVzaFRpbWVySWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU3luY0V2ZW50KGV2ZW50OiBBdXRoU3luY0V2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlICdMT0dJTic6XG4gICAgICBjYXNlICdUT0tFTl9SRUZSRVNIJzoge1xuICAgICAgICAvLyBSZWNhcmdhciBlc3RhZG8gZGVzZGUgc3RvcmFnZVxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFN0YXRlKCk7XG4gICAgICAgIGlmIChzdGF0ZS5hY2Nlc3NUb2tlbikge1xuICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc3RvcmVGcm9tU3RvcmFnZShzdGF0ZSk7XG4gICAgICAgICAgY29uc3QgY2xhaW1zID0gdGhpcy50b2tlblNlcnZpY2UucGFyc2VUb2tlbihzdGF0ZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgICAgaWYgKGNsYWltcykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlVXNlckluZm8oY2xhaW1zLnVpZCwgY2xhaW1zLmVtYWlsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTE9HT1VUJzpcbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UucmVzZXQoKTtcbiAgICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblJvdXRlXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnUEVSTUlTU0lPTlNfVVBEQVRFJzoge1xuICAgICAgICBjb25zdCBwZXJtcyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFBlcm1pc3Npb25zKCk7XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVBlcm1pc3Npb25zKHBlcm1zLnJvbGVzLCBwZXJtcy5wZXJtaXNzaW9ucywgcGVybXMuaXNTdXBlckFkbWluKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBdXRoRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgIGNvbnN0IGF1dGhFcnJvcjogQXV0aEVycm9yID0ge1xuICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ1VOS05PV05fRVJST1InLFxuICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGRlIGF1dGVudGljYWNpw7NuIGRlc2Nvbm9jaWRvJyxcbiAgICB9O1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldEVycm9yKGF1dGhFcnJvcik7XG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gYXV0aEVycm9yKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGSVJFQkFTRSBJTlRFR1JBVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGFzeW5jIHNpZ25JbldpdGhGaXJlYmFzZShmaXJlYmFzZVRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZmlyZWJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmlyZWJhc2VTZXJ2aWNlLnNpZ25JbldpdGhDdXN0b21Ub2tlbihmaXJlYmFzZVRva2VuKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2Ugc2lnbmluIHN1Y2Nlc3NmdWwnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnW1ZhbHRlY2hBdXRoXSBGaXJlYmFzZVNlcnZpY2Ugbm90IHByb3ZpZGVkLiBBZGQgcHJvdmlkZVZhbHRlY2hGaXJlYmFzZSgpIHRvIHlvdXIgcHJvdmlkZXJzLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gTm8gYmxvcXVlYXIgZWwgbG9naW4gcHJpbmNpcGFsIHNpIEZpcmViYXNlIGZhbGxhXG4gICAgICBjb25zb2xlLmVycm9yKCdbVmFsdGVjaEF1dGhdIEZpcmViYXNlIHNpZ25pbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2lnbk91dEZpcmViYXNlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb25maWcuZW5hYmxlRmlyZWJhc2VJbnRlZ3JhdGlvbikgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmZpcmViYXNlU2VydmljZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmZpcmViYXNlU2VydmljZS5zaWduT3V0KCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEF1dGhdIEZpcmViYXNlIHNpZ25vdXQgc3VjY2Vzc2Z1bCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBJZ25vcmFyIGVycm9yZXMgZGUgRmlyZWJhc2Ugc2lnbm91dFxuICAgICAgY29uc29sZS53YXJuKCdbVmFsdGVjaEF1dGhdIEZpcmViYXNlIHNpZ25vdXQgZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
496
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFHeEUsT0FBTyxFQUFjLFVBQVUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRixPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7O0FBbUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsTUFBTSxPQUFPLFdBQVc7SUFLdEIsWUFDdUMsTUFBeUIsRUFDdEQsSUFBZ0IsRUFDaEIsTUFBYyxFQUNkLFlBQThCLEVBQzlCLFlBQTBCLEVBQzFCLGNBQWtDLEVBQ2xDLFdBQTRCLEVBQzVCLGVBQWdDO1FBUEgsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDdEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWtCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFvQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBWjFDLCtCQUErQjtRQUN2QixtQkFBYyxHQUF5QyxJQUFJLENBQUM7UUFDNUQscUJBQWdCLEdBQXdCLElBQUksQ0FBQztRQWFyRCxnREFBZ0Q7UUFDaEQsb0NBQW9DO1FBQ3BDLGdEQUFnRDtRQUVoRCx1Q0FBdUM7UUFDOUIsVUFBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFD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WUFDM0QsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7K0dBMWhCVSxXQUFXLGtCQU1aLG1CQUFtQjttSEFObEIsV0FBVyxjQURFLE1BQU07OzRGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBTzdCLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBPbkRlc3Ryb3ksIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBvZiwgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBWQUxURUNIX0FVVEhfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aFN0YXRlU2VydmljZSB9IGZyb20gJy4vYXV0aC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4vdG9rZW4uc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoU3luY1NlcnZpY2UgfSBmcm9tICcuL3N5bmMuc2VydmljZSc7XG5pbXBvcnQge1xuICBTaWduaW5SZXF1ZXN0LFxuICBTaWduaW5SZXNwb25zZSxcbiAgU2lnbnVwUmVxdWVzdCxcbiAgU2lnbnVwUmVzcG9uc2UsXG4gIFZlcmlmeUVtYWlsUmVxdWVzdCxcbiAgVmVyaWZ5RW1haWxSZXNwb25zZSxcbiAgUmVzZW5kQ29kZVJlcXVlc3QsXG4gIFJlc2VuZENvZGVSZXNwb25zZSxcbiAgTUZBVmVyaWZ5UmVzcG9uc2UsXG4gIFJlZnJlc2hSZXNwb25zZSxcbiAgR2V0UGVybWlzc2lvbnNSZXNwb25zZSxcbiAgR2V0UHJvZmlsZVJlc3BvbnNlLFxuICBVcGRhdGVQcm9maWxlUmVxdWVzdCxcbiAgVXBkYXRlUHJvZmlsZVJlc3BvbnNlLFxuICBNRkFTZXR1cFJlc3BvbnNlLFxuICBNRkFDb25maXJtUmVzcG9uc2UsXG4gIE1GQURpc2FibGVSZXNwb25zZSxcbiAgRm9yZ290UGFzc3dvcmRSZXF1ZXN0LFxuICBGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLFxuICBSZXNldFBhc3N3b3JkUmVxdWVzdCxcbiAgUmVzZXRQYXNzd29yZFJlc3BvbnNlLFxuICBNRkFNZXRob2QsXG4gIEF1dGhFcnJvcixcbiAgQXV0aFN5bmNFdmVudCxcbiAgVmFsdGVjaEF1dGhDb25maWcsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vZmlyZWJhc2UnO1xuXG5cbi8qKlxuICogU2VydmljaW8gcHJpbmNpcGFsIGRlIGF1dGVudGljYWNpw7NuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbigpIHtcbiAqICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGguc2lnbmluKHsgZW1haWwsIHBhc3N3b3JkIH0pKTtcbiAqICAgICBpZiAodGhpcy5hdXRoLm1mYVBlbmRpbmcoKS5yZXF1aXJlZCkge1xuICogICAgICAgLy8gTW9zdHJhciBVSSBkZSBNRkFcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICogICAgIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyBUaW1lciBwYXJhIHJlZnJlc2ggcHJvYWN0aXZvXG4gIHByaXZhdGUgcmVmcmVzaFRpbWVySWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3luY1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBzdGF0ZVNlcnZpY2U6IEF1dGhTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBBdXRoU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeW5jU2VydmljZTogQXV0aFN5bmNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlyZWJhc2VTZXJ2aWNlOiBGaXJlYmFzZVNlcnZpY2UsXG4gICkge31cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRVNUQURPIFDDmkJMSUNPIChTaWduYWxzIHJlYWRvbmx5KVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKiogRXN0YWRvIGNvbXBsZXRvIGRlIGF1dGVudGljYWNpw7NuICovXG4gIHJlYWRvbmx5IHN0YXRlID0gdGhpcy5zdGF0ZVNlcnZpY2Uuc3RhdGU7XG5cbiAgLyoqIFVzdWFyaW8gZXN0w6EgYXV0ZW50aWNhZG8gKi9cbiAgcmVhZG9ubHkgaXNBdXRoZW50aWNhdGVkID0gdGhpcy5zdGF0ZVNlcnZpY2UuaXNBdXRoZW50aWNhdGVkO1xuXG4gIC8qKiBFc3RhZG8gZGUgY2FyZ2EgKi9cbiAgcmVhZG9ubHkgaXNMb2FkaW5nID0gdGhpcy5zdGF0ZVNlcnZpY2UuaXNMb2FkaW5nO1xuXG4gIC8qKiBJbmZvcm1hY2nDs24gZGVsIHVzdWFyaW8gKi9cbiAgcmVhZG9ubHkgdXNlciA9IHRoaXMuc3RhdGVTZXJ2aWNlLnVzZXI7XG5cbiAgLyoqIFRva2VuIGRlIGFjY2VzbyAqL1xuICByZWFkb25seSBhY2Nlc3NUb2tlbiA9IHRoaXMuc3RhdGVTZXJ2aWNlLmFjY2Vzc1Rva2VuO1xuXG4gIC8qKiBSb2xlcyBkZWwgdXN1YXJpbyAqL1xuICByZWFkb25seSByb2xlcyA9IHRoaXMuc3RhdGVTZXJ2aWNlLnJvbGVzO1xuXG4gIC8qKiBQZXJtaXNvcyBkZWwgdXN1YXJpbyAqL1xuICByZWFkb25seSBwZXJtaXNzaW9ucyA9IHRoaXMuc3RhdGVTZXJ2aWNlLnBlcm1pc3Npb25zO1xuXG4gIC8qKiBVc3VhcmlvIGVzIHN1cGVyIGFkbWluICovXG4gIHJlYWRvbmx5IGlzU3VwZXJBZG1pbiA9IHRoaXMuc3RhdGVTZXJ2aWNlLmlzU3VwZXJBZG1pbjtcblxuICAvKiogRXN0YWRvIGRlIE1GQSBwZW5kaWVudGUgKi9cbiAgcmVhZG9ubHkgbWZhUGVuZGluZyA9IHRoaXMuc3RhdGVTZXJ2aWNlLm1mYVBlbmRpbmc7XG5cbiAgLyoqIEVycm9yIGFjdHVhbCAqL1xuICByZWFkb25seSBlcnJvciA9IHRoaXMuc3RhdGVTZXJ2aWNlLmVycm9yO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJTklDSUFMSVpBQ0nDk05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEluaWNpYWxpemEgZWwgc2VydmljaW8gZGUgYXV0ZW50aWNhY2nDs24uXG4gICAqIExsYW1hZG8gYXV0b23DoXRpY2FtZW50ZSBwb3IgcHJvdmlkZVZhbHRlY2hBdXRoLlxuICAgKi9cbiAgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyAxLiBDYXJnYXIgZXN0YWRvIGRlc2RlIHN0b3JhZ2VcbiAgICBjb25zdCBzdG9yZWRTdGF0ZSA9IHRoaXMuc3RvcmFnZVNlcnZpY2UubG9hZFN0YXRlKCk7XG5cbiAgICBpZiAoc3RvcmVkU3RhdGUuYWNjZXNzVG9rZW4pIHtcbiAgICAgIC8vIDIuIFZlcmlmaWNhciBzaSB0b2tlbiBlcyB2w6FsaWRvXG4gICAgICBpZiAodGhpcy50b2tlblNlcnZpY2UuaXNUb2tlblZhbGlkKHN0b3JlZFN0YXRlLmFjY2Vzc1Rva2VuKSkge1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5yZXN0b3JlRnJvbVN0b3JhZ2Uoc3RvcmVkU3RhdGUpO1xuXG4gICAgICAgIC8vIEV4dHJhZXIgaW5mbyBkZWwgdG9rZW5cbiAgICAgICAgY29uc3QgY2xhaW1zID0gdGhpcy50b2tlblNlcnZpY2UucGFyc2VUb2tlbihzdG9yZWRTdGF0ZS5hY2Nlc3NUb2tlbik7XG4gICAgICAgIGlmIChjbGFpbXMpIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVVc2VySW5mbyhjbGFpbXMudWlkLCBjbGFpbXMuZW1haWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gSW5pY2lhciB0aW1lciBkZSByZWZyZXNjbyBwcm9hY3Rpdm9cbiAgICAgICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgICAgfSBlbHNlIGlmIChzdG9yZWRTdGF0ZS5yZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgLy8gNC4gVG9rZW4gZXhwaXJhZG8gcGVybyBoYXkgcmVmcmVzaCB0b2tlbiAtIGludGVudGFyIHJlZnJlc2NhclxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmVmcmVzaEFjY2Vzc1Rva2VuKCkpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aGlzLnNpZ25PdXRGaXJlYmFzZSgpO1xuICAgICAgICAgIHRoaXMuY2xlYXJTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNpZ25PdXRGaXJlYmFzZSgpO1xuICAgICAgICB0aGlzLmNsZWFyU3RhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBJbmljaWFyIHNpbmNyb25pemFjacOzbiBlbnRyZSBwZXN0YcOxYXNcbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlVGFiU3luYykge1xuICAgICAgdGhpcy5zeW5jU2VydmljZS5zdGFydCgpO1xuICAgICAgdGhpcy5zeW5jU3Vic2NyaXB0aW9uID0gdGhpcy5zeW5jU2VydmljZS5vbkV2ZW50JC5zdWJzY3JpYmUoZXZlbnQgPT5cbiAgICAgICAgdGhpcy5oYW5kbGVTeW5jRXZlbnQoZXZlbnQpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnNldExvYWRpbmcoZmFsc2UpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgdGhpcy5zeW5jU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEFVVEVOVElDQUNJw5NOXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWEgc2VzacOzbiBjb24gZW1haWwgeSBjb250cmFzZcOxYS5cbiAgICovXG4gIHNpZ25pbihyZXF1ZXN0OiBTaWduaW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxTaWduaW5SZXNwb25zZT4ge1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLmNsZWFyRXJyb3IoKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTaWduaW5SZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9zaWduaW5gLCByZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1mYVJlcXVpcmVkKSB7XG4gICAgICAgICAgLy8gTUZBIHJlcXVlcmlkbyAtIGd1YXJkYXIgZXN0YWRvIHRlbXBvcmFsXG4gICAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0TUZBUGVuZGluZyh7XG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIG1mYVRva2VuOiByZXNwb25zZS5tZmFUb2tlbiEsXG4gICAgICAgICAgICBtZXRob2Q6IHJlc3BvbnNlLm1mYU1ldGhvZCEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAvLyBMb2dpbiBleGl0b3NvIHNpbiBNRkFcbiAgICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdHJhIHVuIG51ZXZvIHVzdWFyaW8uXG4gICAqIEVsIHVzdWFyaW8gcXVlZGEgZW4gZXN0YWRvIFBFTkRJTkcgaGFzdGEgdmVyaWZpY2FyIHN1IGVtYWlsLlxuICAgKi9cbiAgc2lnbnVwKHJlcXVlc3Q6IFNpZ251cFJlcXVlc3QpOiBPYnNlcnZhYmxlPFNpZ251cFJlc3BvbnNlPiB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UuY2xlYXJFcnJvcigpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8U2lnbnVwUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vc2lnbnVwYCwgcmVxdWVzdClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2EgZW1haWwgY29uIGPDs2RpZ28gZGUgNiBkw61naXRvcy5cbiAgICogU2kgZXMgZXhpdG9zbywgaGFjZSBhdXRvLWxvZ2luIHkgcmV0b3JuYSB0b2tlbnMuXG4gICAqL1xuICB2ZXJpZnlFbWFpbChyZXF1ZXN0OiBWZXJpZnlFbWFpbFJlcXVlc3QpOiBPYnNlcnZhYmxlPFZlcmlmeUVtYWlsUmVzcG9uc2U+IHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5jbGVhckVycm9yKCk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VmVyaWZ5RW1haWxSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS92ZXJpZnktZW1haWxgLCByZXF1ZXN0KS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnZlcmlmaWVkICYmIHJlc3BvbnNlLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgLy8gQXV0by1sb2dpbjogZ3VhcmRhciB0b2tlbnMgeSBhY3R1YWxpemFyIGVzdGFkb1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3VjY2Vzc2Z1bEF1dGgocmVzcG9uc2UgYXMgdW5rbm93biBhcyBTaWduaW5SZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWVudsOtYSBjw7NkaWdvIGRlIHZlcmlmaWNhY2nDs24gYWwgZW1haWwuXG4gICAqL1xuICByZXNlbmRDb2RlKHJlcXVlc3Q6IFJlc2VuZENvZGVSZXF1ZXN0KTogT2JzZXJ2YWJsZTxSZXNlbmRDb2RlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxSZXNlbmRDb2RlUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcmVzZW5kLWNvZGVgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBjw7NkaWdvIE1GQS5cbiAgICovXG4gIHZlcmlmeU1GQShjb2RlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1GQVZlcmlmeVJlc3BvbnNlPiB7XG4gICAgY29uc3QgbWZhU3RhdGUgPSB0aGlzLm1mYVBlbmRpbmcoKTtcbiAgICBpZiAoIW1mYVN0YXRlLm1mYVRva2VuKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAoe1xuICAgICAgICBjb2RlOiAnTUZBX05PVF9QRU5ESU5HJyxcbiAgICAgICAgbWVzc2FnZTogJ05vIGhheSB2ZXJpZmljYWNpw7NuIE1GQSBwZW5kaWVudGUnLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PE1GQVZlcmlmeVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS92ZXJpZnlgLCB7XG4gICAgICAgIG1mYVRva2VuOiBtZmFTdGF0ZS5tZmFUb2tlbixcbiAgICAgICAgY29kZSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5jbGVhck1GQVBlbmRpbmcoKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3NmdWxBdXRoKHJlc3BvbnNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNjYSBlbCB0b2tlbiBkZSBhY2Nlc28uXG4gICAqL1xuICByZWZyZXNoQWNjZXNzVG9rZW4oKTogT2JzZXJ2YWJsZTxSZWZyZXNoUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnN0YXRlKCkucmVmcmVzaFRva2VuO1xuICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAoe1xuICAgICAgICBjb2RlOiAnTk9fUkVGUkVTSF9UT0tFTicsXG4gICAgICAgIG1lc3NhZ2U6ICdObyBoYXkgdG9rZW4gZGUgcmVmcmVzY28nLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxSZWZyZXNoUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcmVmcmVzaGAsIHsgcmVmcmVzaFRva2VuIH0pLnBpcGUoXG4gICAgICB0YXAocmVzcG9uc2UgPT4ge1xuICAgICAgICBjb25zdCBleHBpcmVzQXQgPSBEYXRlLm5vdygpICsgcmVzcG9uc2UuZXhwaXJlc0luICogMTAwMDtcbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UuYWNjZXNzVG9rZW4sIHJlc3BvbnNlLmV4cGlyZXNJbik7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlLmFjY2Vzc1Rva2VuLCBleHBpcmVzQXQpO1xuICAgICAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG4gICAgICAgIHRoaXMuc3luY1NlcnZpY2UuYnJvYWRjYXN0KHtcbiAgICAgICAgICB0eXBlOiAnVE9LRU5fUkVGUkVTSCcsXG4gICAgICAgICAgcGF5bG9hZDogeyBhY2Nlc3NUb2tlbjogcmVzcG9uc2UuYWNjZXNzVG9rZW4sIGV4cGlyZXNBdCB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubG9nb3V0KCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaWVycmEgc2VzacOzbi5cbiAgICovXG4gIGxvZ291dCgpOiB2b2lkIHtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnN0YXRlKCkucmVmcmVzaFRva2VuO1xuXG4gICAgLy8gTm90aWZpY2FyIGFsIGJhY2tlbmQgKGZpcmUgYW5kIGZvcmdldClcbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICB0aGlzLmh0dHBcbiAgICAgICAgLnBvc3QoYCR7dGhpcy5iYXNlVXJsfS9sb2dvdXRgLCB7IHJlZnJlc2hUb2tlbiB9KVxuICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8vIENlcnJhciBzZXNpw7NuIGRlIEZpcmViYXNlIHNpIGVzdMOhIGludGVncmFkb1xuICAgIHRoaXMuc2lnbk91dEZpcmViYXNlKCk7XG5cbiAgICB0aGlzLmNsZWFyU3RhdGUoKTtcbiAgICB0aGlzLnN5bmNTZXJ2aWNlLmJyb2FkY2FzdCh7IHR5cGU6ICdMT0dPVVQnIH0pO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblJvdXRlXSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIFNFVFVQICh1c3VhcmlvIGF1dGVudGljYWRvKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ29uZmlndXJhIE1GQSBwYXJhIGVsIHVzdWFyaW8uXG4gICAqL1xuICBzZXR1cE1GQShtZXRob2Q6IE1GQU1ldGhvZCwgcGhvbmU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1GQVNldHVwUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxNRkFTZXR1cFJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9zZXR1cGAsIHsgbWV0aG9kLCBwaG9uZSB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtYSBsYSBjb25maWd1cmFjacOzbiBkZSBNRkEuXG4gICAqL1xuICBjb25maXJtTUZBKGNvZGU6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBQ29uZmlybVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBQ29uZmlybVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9jb25maXJtYCwgeyBjb2RlIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2hhYmlsaXRhIE1GQS5cbiAgICovXG4gIGRpc2FibGVNRkEocGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8TUZBRGlzYWJsZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TUZBRGlzYWJsZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L21mYS9kaXNhYmxlYCwgeyBwYXNzd29yZCB9KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQRVJGSUwgREUgVVNVQVJJT1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCBwZXJmaWwgZGVsIHVzdWFyaW8gYXV0ZW50aWNhZG8uXG4gICAqIEluY2x1eWUgaW5mb3JtYWNpw7NuIGRlIE1GQSB5IHRlbMOpZm9uby5cbiAgICovXG4gIGdldFByb2ZpbGUoKTogT2JzZXJ2YWJsZTxHZXRQcm9maWxlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PEdldFByb2ZpbGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9wcm9maWxlYClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIHBlcmZpbCBkZWwgdXN1YXJpby5cbiAgICovXG4gIHVwZGF0ZVByb2ZpbGUocmVxdWVzdDogVXBkYXRlUHJvZmlsZVJlcXVlc3QpOiBPYnNlcnZhYmxlPFVwZGF0ZVByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQ8VXBkYXRlUHJvZmlsZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L3Byb2ZpbGVgLCByZXF1ZXN0KVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRUNVUEVSQUNJw5NOIERFIENPTlRSQVNFw5FBXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBJbmljaWEgZWwgcHJvY2VzbyBkZSByZWN1cGVyYWNpw7NuIGRlIGNvbnRyYXNlw7FhLlxuICAgKiBFbnbDrWEgdW4gY8OzZGlnbyBhbCBlbWFpbCBkZWwgdXN1YXJpby5cbiAgICovXG4gIGZvcmdvdFBhc3N3b3JkKHJlcXVlc3Q6IEZvcmdvdFBhc3N3b3JkUmVxdWVzdCk6IE9ic2VydmFibGU8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PEZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vZm9yZ290LXBhc3N3b3JkYCwgcmVxdWVzdClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gdGhpcy5oYW5kbGVBdXRoRXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRlYSBsYSBjb250cmFzZcOxYSB1c2FuZG8gZWwgY8OzZGlnbyBlbnZpYWRvIHBvciBlbWFpbC5cbiAgICovXG4gIHJlc2V0UGFzc3dvcmQocmVxdWVzdDogUmVzZXRQYXNzd29yZFJlcXVlc3QpOiBPYnNlcnZhYmxlPFJlc2V0UGFzc3dvcmRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFJlc2V0UGFzc3dvcmRSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9yZXNldC1wYXNzd29yZGAsIHJlcXVlc3QpXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVycm9yID0+IHRoaXMuaGFuZGxlQXV0aEVycm9yKGVycm9yKSkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBFUk1JU09TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGxvcyBwZXJtaXNvcyBhY3R1YWxpemFkb3MgZGVsIGJhY2tlbmQuXG4gICAqL1xuICBmZXRjaFBlcm1pc3Npb25zKCk6IE9ic2VydmFibGU8R2V0UGVybWlzc2lvbnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEdldFBlcm1pc3Npb25zUmVzcG9uc2U+KGAke3RoaXMuYmFzZVVybH0vcGVybWlzc2lvbnNgKS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlUGVybWlzc2lvbnMoXG4gICAgICAgICAgcmVzcG9uc2Uucm9sZXMsXG4gICAgICAgICAgcmVzcG9uc2UucGVybWlzc2lvbnMsXG4gICAgICAgICAgcmVzcG9uc2UuaXNTdXBlckFkbWluXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2F2ZVBlcm1pc3Npb25zKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5zeW5jU2VydmljZS5icm9hZGNhc3QoeyB0eXBlOiAnUEVSTUlTU0lPTlNfVVBEQVRFJyB9KTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB0aGlzLmhhbmRsZUF1dGhFcnJvcihlcnJvcikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIHVuIHBlcm1pc28gZXNwZWPDrWZpY28uXG4gICAqIEZvcm1hdG86IFwicmVzb3VyY2U6YWN0aW9uXCIgKGVqOiBcInRlbXBsYXRlczplZGl0XCIpXG4gICAqL1xuICBoYXNQZXJtaXNzaW9uKHBlcm1pc3Npb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzU3VwZXJBZG1pbigpKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IFtyZXNvdXJjZSwgYWN0aW9uXSA9IHBlcm1pc3Npb24uc3BsaXQoJzonKTtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucygpLnNvbWUocCA9PiB7XG4gICAgICBjb25zdCBbcFJlc291cmNlLCBwQWN0aW9uXSA9IHAuc3BsaXQoJzonKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChwUmVzb3VyY2UgPT09ICcqJyB8fCBwUmVzb3VyY2UgPT09IHJlc291cmNlKSAmJiAocEFjdGlvbiA9PT0gJyonIHx8IHBBY3Rpb24gPT09IGFjdGlvbilcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSBhbGd1bm8gZGUgbG9zIHBlcm1pc29zIGRhZG9zLlxuICAgKi9cbiAgaGFzQW55UGVybWlzc2lvbihwZXJtaXNzaW9uczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMuc29tZShwID0+IHRoaXMuaGFzUGVybWlzc2lvbihwKSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSB0b2RvcyBsb3MgcGVybWlzb3MgZGFkb3MuXG4gICAqL1xuICBoYXNBbGxQZXJtaXNzaW9ucyhwZXJtaXNzaW9uczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGVybWlzc2lvbnMuZXZlcnkocCA9PiB0aGlzLmhhc1Blcm1pc3Npb24ocCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIGVsIHVzdWFyaW8gdGllbmUgdW4gcm9sIGVzcGVjw61maWNvLlxuICAgKi9cbiAgaGFzUm9sZShyb2xlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb2xlcygpLnNvbWUociA9PiByLnRvTG93ZXJDYXNlKCkgPT09IHJvbGUudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgZ2V0IGJhc2VVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5jb25maWcuYXBpVXJsfSR7dGhpcy5jb25maWcuYXV0aFByZWZpeH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdWNjZXNzZnVsQXV0aChyZXNwb25zZTogU2lnbmluUmVzcG9uc2UgfCBNRkFWZXJpZnlSZXNwb25zZSk6IHZvaWQge1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IERhdGUubm93KCkgKyByZXNwb25zZS5leHBpcmVzSW4hICogMTAwMDtcbiAgICBjb25zdCB0b2tlbkRhdGEgPSB0aGlzLnRva2VuU2VydmljZS5wYXJzZVRva2VuKHJlc3BvbnNlLmFjY2Vzc1Rva2VuISk7XG5cbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRBdXRoZW50aWNhdGVkKHtcbiAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbiEsXG4gICAgICByZWZyZXNoVG9rZW46IHJlc3BvbnNlLnJlZnJlc2hUb2tlbiEsXG4gICAgICB1c2VySWQ6IHRva2VuRGF0YT8udWlkLFxuICAgICAgZW1haWw6IHRva2VuRGF0YT8uZW1haWwsXG4gICAgICByb2xlczogcmVzcG9uc2Uucm9sZXMgfHwgW10sXG4gICAgICBwZXJtaXNzaW9uczogcmVzcG9uc2UucGVybWlzc2lvbnMgfHwgW10sXG4gICAgICBpc1N1cGVyQWRtaW46IHJlc3BvbnNlLnBlcm1pc3Npb25zPy5pbmNsdWRlcygnKjoqJykgfHwgZmFsc2UsXG4gICAgICBleHBpcmVzQXQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNhdmVTdGF0ZSh7XG4gICAgICBhY2Nlc3NUb2tlbjogcmVzcG9uc2UuYWNjZXNzVG9rZW4hLFxuICAgICAgcmVmcmVzaFRva2VuOiByZXNwb25zZS5yZWZyZXNoVG9rZW4hLFxuICAgICAgcm9sZXM6IHJlc3BvbnNlLnJvbGVzIHx8IFtdLFxuICAgICAgcGVybWlzc2lvbnM6IHJlc3BvbnNlLnBlcm1pc3Npb25zIHx8IFtdLFxuICAgICAgaXNTdXBlckFkbWluOiByZXNwb25zZS5wZXJtaXNzaW9ucz8uaW5jbHVkZXMoJyo6KicpIHx8IGZhbHNlLFxuICAgICAgZXhwaXJlc0F0LFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuICAgIHRoaXMuc3luY1NlcnZpY2UuYnJvYWRjYXN0KHsgdHlwZTogJ0xPR0lOJyB9KTtcblxuICAgIC8vIEludGVncmFjacOzbiBjb24gRmlyZWJhc2VcbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbmZpZy5lbmFibGVGaXJlYmFzZUludGVncmF0aW9uICYmXG4gICAgICAnZmlyZWJhc2VUb2tlbicgaW4gcmVzcG9uc2UgJiZcbiAgICAgIHJlc3BvbnNlLmZpcmViYXNlVG9rZW5cbiAgICApIHtcbiAgICAgIHRoaXMuc2lnbkluV2l0aEZpcmViYXNlKHJlc3BvbnNlLmZpcmViYXNlVG9rZW4pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BSZWZyZXNoVGltZXIoKTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZWZyZXNoVGltZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGVTZXJ2aWNlLnN0YXRlKCk7XG4gICAgaWYgKCFzdGF0ZS5leHBpcmVzQXQpIHJldHVybjtcblxuICAgIGNvbnN0IHJlZnJlc2hCZWZvcmVNcyA9ICh0aGlzLmNvbmZpZy5yZWZyZXNoQmVmb3JlRXhwaXJ5IHx8IDYwKSAqIDEwMDA7XG4gICAgY29uc3QgcmVmcmVzaEF0ID0gc3RhdGUuZXhwaXJlc0F0IC0gcmVmcmVzaEJlZm9yZU1zO1xuICAgIGNvbnN0IGRlbGF5ID0gcmVmcmVzaEF0IC0gRGF0ZS5ub3coKTtcblxuICAgIGlmIChkZWxheSA+IDApIHtcbiAgICAgIHRoaXMucmVmcmVzaFRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWNjZXNzVG9rZW4oKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLmxvZ291dCgpLFxuICAgICAgICB9KTtcbiAgICAgIH0sIGRlbGF5KTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLnJlZnJlc2hUb2tlbikge1xuICAgICAgLy8gVG9rZW4geWEgZGViZXLDrWEgcmVmcmVzY2Fyc2UsIGludGVudGFyIGFob3JhXG4gICAgICB0aGlzLnJlZnJlc2hBY2Nlc3NUb2tlbigpLnN1YnNjcmliZSh7XG4gICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLmxvZ291dCgpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wUmVmcmVzaFRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlZnJlc2hUaW1lcklkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoVGltZXJJZCk7XG4gICAgICB0aGlzLnJlZnJlc2hUaW1lcklkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN5bmNFdmVudChldmVudDogQXV0aFN5bmNFdmVudCk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnTE9HSU4nOlxuICAgICAgY2FzZSAnVE9LRU5fUkVGUkVTSCc6IHtcbiAgICAgICAgLy8gUmVjYXJnYXIgZXN0YWRvIGRlc2RlIHN0b3JhZ2VcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmxvYWRTdGF0ZSgpO1xuICAgICAgICBpZiAoc3RhdGUuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICB0aGlzLnN0YXRlU2VydmljZS5yZXN0b3JlRnJvbVN0b3JhZ2Uoc3RhdGUpO1xuICAgICAgICAgIGNvbnN0IGNsYWltcyA9IHRoaXMudG9rZW5TZXJ2aWNlLnBhcnNlVG9rZW4oc3RhdGUuYWNjZXNzVG9rZW4pO1xuICAgICAgICAgIGlmIChjbGFpbXMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnVwZGF0ZVVzZXJJbmZvKGNsYWltcy51aWQsIGNsYWltcy5lbWFpbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc3RhcnRSZWZyZXNoVGltZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0xPR09VVCc6XG4gICAgICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuc3RvcFJlZnJlc2hUaW1lcigpO1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5jb25maWcubG9naW5Sb3V0ZV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1BFUk1JU1NJT05TX1VQREFURSc6IHtcbiAgICAgICAgY29uc3QgcGVybXMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmxvYWRQZXJtaXNzaW9ucygpO1xuICAgICAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVQZXJtaXNzaW9ucyhwZXJtcy5yb2xlcywgcGVybXMucGVybWlzc2lvbnMsIHBlcm1zLmlzU3VwZXJBZG1pbik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQXV0aEVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICBjb25zdCBhdXRoRXJyb3I6IEF1dGhFcnJvciA9IHtcbiAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdVTktOT1dOX0VSUk9SJyxcbiAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBkZSBhdXRlbnRpY2FjacOzbiBkZXNjb25vY2lkbycsXG4gICAgfTtcbiAgICB0aGlzLnN0YXRlU2VydmljZS5zZXRFcnJvcihhdXRoRXJyb3IpO1xuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGF1dGhFcnJvcik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRklSRUJBU0UgSU5URUdSQVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJpdmF0ZSBhc3luYyBzaWduSW5XaXRoRmlyZWJhc2UoZmlyZWJhc2VUb2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmZpcmViYXNlU2VydmljZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmZpcmViYXNlU2VydmljZS5zaWduSW5XaXRoQ3VzdG9tVG9rZW4oZmlyZWJhc2VUb2tlbik7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVmFsdGVjaEF1dGhdIEZpcmViYXNlIHNpZ25pbiBzdWNjZXNzZnVsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1tWYWx0ZWNoQXV0aF0gRmlyZWJhc2VTZXJ2aWNlIG5vdCBwcm92aWRlZC4gQWRkIHByb3ZpZGVWYWx0ZWNoRmlyZWJhc2UoKSB0byB5b3VyIHByb3ZpZGVycy4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE5vIGJsb3F1ZWFyIGVsIGxvZ2luIHByaW5jaXBhbCBzaSBGaXJlYmFzZSBmYWxsYVxuICAgICAgY29uc29sZS5lcnJvcignW1ZhbHRlY2hBdXRoXSBGaXJlYmFzZSBzaWduaW4gZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNpZ25PdXRGaXJlYmFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmVuYWJsZUZpcmViYXNlSW50ZWdyYXRpb24pIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5maXJlYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5maXJlYmFzZVNlcnZpY2Uuc2lnbk91dCgpO1xuICAgICAgICBjb25zb2xlLmxvZygnW1ZhbHRlY2hBdXRoXSBGaXJlYmFzZSBzaWdub3V0IHN1Y2Nlc3NmdWwnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWdub3JhciBlcnJvcmVzIGRlIEZpcmViYXNlIHNpZ25vdXRcbiAgICAgIGNvbnNvbGUud2FybignW1ZhbHRlY2hBdXRoXSBGaXJlYmFzZSBzaWdub3V0IGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -72,7 +72,18 @@ function isApiRequest(request, apiUrl) {
72
72
  * Verifica si la request es a un endpoint de auth que no debe reintentar.
73
73
  */
74
74
  function isAuthEndpoint(request, authPrefix) {
75
- const authEndpoints = ['/signin', '/signup', '/refresh', '/logout', '/mfa/verify'];
75
+ // Endpoints que no deben intentar refresh en 401
76
+ // - Públicos: signin, signup, refresh, logout
77
+ // - MFA: verify (durante login), disable (401 = contraseña incorrecta), confirm (401 = código incorrecto)
78
+ const authEndpoints = [
79
+ '/signin',
80
+ '/signup',
81
+ '/refresh',
82
+ '/logout',
83
+ '/mfa/verify',
84
+ '/mfa/disable',
85
+ '/mfa/confirm',
86
+ ];
76
87
  return authEndpoints.some((endpoint) => request.url.includes(`${authPrefix}${endpoint}`));
77
88
  }
78
89
  /**
@@ -95,4 +106,4 @@ function handle401Error(request, next, authService) {
95
106
  // Esperar a que termine el refresco en curso
96
107
  return refreshTokenSubject.pipe(filter((token) => token !== null), take(1), switchMap((token) => next(addAuthHeader(request, token))));
97
108
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2F1dGgvaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVF2QyxPQUFPLEVBQWMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0MsOERBQThEO0FBQzlELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN6QixNQUFNLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FDaEQsT0FBNkIsRUFDN0IsSUFBbUIsRUFDYSxFQUFFO0lBQ2xDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUUzQywyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVcsQ0FBQyxFQUFFLENBQUM7UUFDaEQsT0FB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Q0FBQztRQUN2QixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELDZDQUE2QztJQUM3QyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FDN0IsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxFQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQzFELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBIdHRwSW50ZXJjZXB0b3JGbixcbiAgSHR0cFJlcXVlc3QsXG4gIEh0dHBIYW5kbGVyRm4sXG4gIEh0dHBFdmVudCxcbiAgSHR0cEVycm9yUmVzcG9uc2UsXG59IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCB0YWtlLCBzd2l0Y2hNYXAsIGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBWQUxURUNIX0FVVEhfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuXG4vLyBDb250cm9sIGRlIGVzdGFkbyBkZSByZWZyZXNjbyAoc2luZ2xldG9uIGEgbml2ZWwgZGUgbcOzZHVsbylcbmxldCBpc1JlZnJlc2hpbmcgPSBmYWxzZTtcbmNvbnN0IHJlZnJlc2hUb2tlblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4vKipcbiAqIEludGVyY2VwdG9yIEhUVFAgcXVlOlxuICogMS4gQWdyZWdhIGhlYWRlciBBdXRob3JpemF0aW9uIGNvbiBCZWFyZXIgdG9rZW4gYSByZXF1ZXN0cyBBUElcbiAqIDIuIE1hbmVqYSBlcnJvcmVzIDQwMSByZWZyZXNjYW5kbyBlbCB0b2tlbiBhdXRvbcOhdGljYW1lbnRlXG4gKiAzLiBFbmNvbGEgcmVxdWVzdHMgZHVyYW50ZSBlbCByZWZyZXNjbyBwYXJhIGV2aXRhciBtw7psdGlwbGVzIHJlZnJlc2hcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gSW5jbHVpZG8gYXV0b23DoXRpY2FtZW50ZSBwb3IgcHJvdmlkZVZhbHRlY2hBdXRoKClcbiAqIC8vIFBhcmEgdXNvIG1hbnVhbDpcbiAqIGltcG9ydCB7IHByb3ZpZGVIdHRwQ2xpZW50LCB3aXRoSW50ZXJjZXB0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuICogaW1wb3J0IHsgYXV0aEludGVyY2VwdG9yIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZUh0dHBDbGllbnQod2l0aEludGVyY2VwdG9ycyhbYXV0aEludGVyY2VwdG9yXSkpLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGF1dGhJbnRlcmNlcHRvcjogSHR0cEludGVyY2VwdG9yRm4gPSAoXG4gIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICBuZXh0OiBIdHRwSGFuZGxlckZuXG4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDx1bmtub3duPj4gPT4ge1xuICBjb25zdCBhdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIGNvbnN0IGNvbmZpZyA9IGluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKTtcblxuICAvLyBPbWl0aXIgcmVxdWVzdHMgcXVlIG5vIHNvbiBhIG51ZXN0cmEgQVBJXG4gIGlmICghaXNBcGlSZXF1ZXN0KHJlcXVlc3QsIGNvbmZpZy5hcGlVcmwpKSB7XG4gICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gIH1cblxuICAvLyBPbWl0aXIgZW5kcG9pbnRzIGRlIGF1dGggcXVlIG5vIG5lY2VzaXRhbiB0b2tlblxuICBpZiAoaXNBdXRoRW5kcG9pbnQocmVxdWVzdCwgY29uZmlnLmF1dGhQcmVmaXghKSkge1xuICAgIHJldHVybiBuZXh0KHJlcXVlc3QpO1xuICB9XG5cbiAgY29uc3QgYWNjZXNzVG9rZW4gPSBhdXRoU2VydmljZS5hY2Nlc3NUb2tlbigpO1xuXG4gIC8vIEFncmVnYXIgaGVhZGVyIGRlIGF1dG9yaXphY2nDs24gc2kgaGF5IHRva2VuXG4gIGlmIChhY2Nlc3NUb2tlbikge1xuICAgIHJlcXVlc3QgPSBhZGRBdXRoSGVhZGVyKHJlcXVlc3QsIGFjY2Vzc1Rva2VuKTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KHJlcXVlc3QpLnBpcGUoXG4gICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDEgJiYgIWlzQXV0aEVuZHBvaW50KHJlcXVlc3QsIGNvbmZpZy5hdXRoUHJlZml4ISkpIHtcbiAgICAgICAgcmV0dXJuIGhhbmRsZTQwMUVycm9yKHJlcXVlc3QsIG5leHQsIGF1dGhTZXJ2aWNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ1tWYWx0ZWNoQXV0aF0gUGVybWlzbyBkZW5lZ2FkbzonLFxuICAgICAgICAgIGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdBY2Nlc28gcHJvaGliaWRvJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgfSlcbiAgKTtcbn07XG5cbi8qKlxuICogQWdyZWdhIGhlYWRlciBkZSBhdXRvcml6YWNpw7NuIGEgbGEgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gYWRkQXV0aEhlYWRlcihcbiAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gIHRva2VuOiBzdHJpbmdcbik6IEh0dHBSZXF1ZXN0PHVua25vd24+IHtcbiAgcmV0dXJuIHJlcXVlc3QuY2xvbmUoe1xuICAgIHNldEhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFZlcmlmaWNhIHNpIGxhIHJlcXVlc3QgZXMgYSBudWVzdHJhIEFQSS5cbiAqL1xuZnVuY3Rpb24gaXNBcGlSZXF1ZXN0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBhcGlVcmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gcmVxdWVzdC51cmwuc3RhcnRzV2l0aChhcGlVcmwpIHx8IHJlcXVlc3QudXJsLmluY2x1ZGVzKCcvdjIvYXV0aCcpO1xufVxuXG4vKipcbiAqIFZlcmlmaWNhIHNpIGxhIHJlcXVlc3QgZXMgYSB1biBlbmRwb2ludCBkZSBhdXRoIHF1ZSBubyBkZWJlIHJlaW50ZW50YXIuXG4gKi9cbmZ1bmN0aW9uIGlzQXV0aEVuZHBvaW50KFxuICByZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgYXV0aFByZWZpeDogc3RyaW5nXG4pOiBib29sZWFuIHtcbiAgY29uc3QgYXV0aEVuZHBvaW50cyA9IFsnL3NpZ25pbicsICcvc2lnbnVwJywgJy9yZWZyZXNoJywgJy9sb2dvdXQnLCAnL21mYS92ZXJpZnknXTtcbiAgcmV0dXJuIGF1dGhFbmRwb2ludHMuc29tZSgoZW5kcG9pbnQpID0+XG4gICAgcmVxdWVzdC51cmwuaW5jbHVkZXMoYCR7YXV0aFByZWZpeH0ke2VuZHBvaW50fWApXG4gICk7XG59XG5cbi8qKlxuICogTWFuZWphIGVycm9yZXMgNDAxIHJlZnJlc2NhbmRvIGVsIHRva2VuLlxuICovXG5mdW5jdGlvbiBoYW5kbGU0MDFFcnJvcihcbiAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gIG5leHQ6IEh0dHBIYW5kbGVyRm4sXG4gIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcbiAgaWYgKCFpc1JlZnJlc2hpbmcpIHtcbiAgICBpc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgIHJlZnJlc2hUb2tlblN1YmplY3QubmV4dChudWxsKTtcblxuICAgIHJldHVybiBhdXRoU2VydmljZS5yZWZyZXNoQWNjZXNzVG9rZW4oKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICByZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQocmVzcG9uc2UuYWNjZXNzVG9rZW4pO1xuICAgICAgICByZXR1cm4gbmV4dChhZGRBdXRoSGVhZGVyKHJlcXVlc3QsIHJlc3BvbnNlLmFjY2Vzc1Rva2VuKSk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGF1dGhTZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvLyBFc3BlcmFyIGEgcXVlIHRlcm1pbmUgZWwgcmVmcmVzY28gZW4gY3Vyc29cbiAgcmV0dXJuIHJlZnJlc2hUb2tlblN1YmplY3QucGlwZShcbiAgICBmaWx0ZXIoKHRva2VuKTogdG9rZW4gaXMgc3RyaW5nID0+IHRva2VuICE9PSBudWxsKSxcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgodG9rZW4pID0+IG5leHQoYWRkQXV0aEhlYWRlcihyZXF1ZXN0LCB0b2tlbikpKVxuICApO1xufVxuIl19
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2F1dGgvaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVF2QyxPQUFPLEVBQWMsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0MsOERBQThEO0FBQzlELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN6QixNQUFNLG1CQUFtQixHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBc0IsQ0FDaEQsT0FBNkIsRUFDN0IsSUFBbUIsRUFDYSxFQUFFO0lBQ2xDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUUzQywyQ0FBMkM7SUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxJQUFJLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFVBQVcsQ0FBQyxFQUFFLENBQUM7UUFDaEQsT0FB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Q2pDLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDWixZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUM3QixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQW1CLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEVBQ2xELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FDMUQsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBJbnRlcmNlcHRvckZuLFxuICBIdHRwUmVxdWVzdCxcbiAgSHR0cEhhbmRsZXJGbixcbiAgSHR0cEV2ZW50LFxuICBIdHRwRXJyb3JSZXNwb25zZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIHRha2UsIHN3aXRjaE1hcCwgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8vIENvbnRyb2wgZGUgZXN0YWRvIGRlIHJlZnJlc2NvIChzaW5nbGV0b24gYSBuaXZlbCBkZSBtw7NkdWxvKVxubGV0IGlzUmVmcmVzaGluZyA9IGZhbHNlO1xuY29uc3QgcmVmcmVzaFRva2VuU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbi8qKlxuICogSW50ZXJjZXB0b3IgSFRUUCBxdWU6XG4gKiAxLiBBZ3JlZ2EgaGVhZGVyIEF1dGhvcml6YXRpb24gY29uIEJlYXJlciB0b2tlbiBhIHJlcXVlc3RzIEFQSVxuICogMi4gTWFuZWphIGVycm9yZXMgNDAxIHJlZnJlc2NhbmRvIGVsIHRva2VuIGF1dG9tw6F0aWNhbWVudGVcbiAqIDMuIEVuY29sYSByZXF1ZXN0cyBkdXJhbnRlIGVsIHJlZnJlc2NvIHBhcmEgZXZpdGFyIG3Dumx0aXBsZXMgcmVmcmVzaFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbmNsdWlkbyBhdXRvbcOhdGljYW1lbnRlIHBvciBwcm92aWRlVmFsdGVjaEF1dGgoKVxuICogLy8gUGFyYSB1c28gbWFudWFsOlxuICogaW1wb3J0IHsgcHJvdmlkZUh0dHBDbGllbnQsIHdpdGhJbnRlcmNlcHRvcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG4gKiBpbXBvcnQgeyBhdXRoSW50ZXJjZXB0b3IgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICpcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlSHR0cENsaWVudCh3aXRoSW50ZXJjZXB0b3JzKFthdXRoSW50ZXJjZXB0b3JdKSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgYXV0aEludGVyY2VwdG9yOiBIdHRwSW50ZXJjZXB0b3JGbiA9IChcbiAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gIG5leHQ6IEh0dHBIYW5kbGVyRm5cbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PHVua25vd24+PiA9PiB7XG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgY29uc3QgY29uZmlnID0gaW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpO1xuXG4gIC8vIE9taXRpciByZXF1ZXN0cyBxdWUgbm8gc29uIGEgbnVlc3RyYSBBUElcbiAgaWYgKCFpc0FwaVJlcXVlc3QocmVxdWVzdCwgY29uZmlnLmFwaVVybCkpIHtcbiAgICByZXR1cm4gbmV4dChyZXF1ZXN0KTtcbiAgfVxuXG4gIC8vIE9taXRpciBlbmRwb2ludHMgZGUgYXV0aCBxdWUgbm8gbmVjZXNpdGFuIHRva2VuXG4gIGlmIChpc0F1dGhFbmRwb2ludChyZXF1ZXN0LCBjb25maWcuYXV0aFByZWZpeCEpKSB7XG4gICAgcmV0dXJuIG5leHQocmVxdWVzdCk7XG4gIH1cblxuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF1dGhTZXJ2aWNlLmFjY2Vzc1Rva2VuKCk7XG5cbiAgLy8gQWdyZWdhciBoZWFkZXIgZGUgYXV0b3JpemFjacOzbiBzaSBoYXkgdG9rZW5cbiAgaWYgKGFjY2Vzc1Rva2VuKSB7XG4gICAgcmVxdWVzdCA9IGFkZEF1dGhIZWFkZXIocmVxdWVzdCwgYWNjZXNzVG9rZW4pO1xuICB9XG5cbiAgcmV0dXJuIG5leHQocmVxdWVzdCkucGlwZShcbiAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwMSAmJiAhaXNBdXRoRW5kcG9pbnQocmVxdWVzdCwgY29uZmlnLmF1dGhQcmVmaXghKSkge1xuICAgICAgICByZXR1cm4gaGFuZGxlNDAxRXJyb3IocmVxdWVzdCwgbmV4dCwgYXV0aFNlcnZpY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnW1ZhbHRlY2hBdXRoXSBQZXJtaXNvIGRlbmVnYWRvOicsXG4gICAgICAgICAgZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0FjY2VzbyBwcm9oaWJpZG8nXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcbiAgICB9KVxuICApO1xufTtcblxuLyoqXG4gKiBBZ3JlZ2EgaGVhZGVyIGRlIGF1dG9yaXphY2nDs24gYSBsYSByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBhZGRBdXRoSGVhZGVyKFxuICByZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPixcbiAgdG9rZW46IHN0cmluZ1xuKTogSHR0cFJlcXVlc3Q8dW5rbm93bj4ge1xuICByZXR1cm4gcmVxdWVzdC5jbG9uZSh7XG4gICAgc2V0SGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogVmVyaWZpY2Egc2kgbGEgcmVxdWVzdCBlcyBhIG51ZXN0cmEgQVBJLlxuICovXG5mdW5jdGlvbiBpc0FwaVJlcXVlc3QocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sIGFwaVVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiByZXF1ZXN0LnVybC5zdGFydHNXaXRoKGFwaVVybCkgfHwgcmVxdWVzdC51cmwuaW5jbHVkZXMoJy92Mi9hdXRoJyk7XG59XG5cbi8qKlxuICogVmVyaWZpY2Egc2kgbGEgcmVxdWVzdCBlcyBhIHVuIGVuZHBvaW50IGRlIGF1dGggcXVlIG5vIGRlYmUgcmVpbnRlbnRhci5cbiAqL1xuZnVuY3Rpb24gaXNBdXRoRW5kcG9pbnQoXG4gIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LFxuICBhdXRoUHJlZml4OiBzdHJpbmdcbik6IGJvb2xlYW4ge1xuICAvLyBFbmRwb2ludHMgcXVlIG5vIGRlYmVuIGludGVudGFyIHJlZnJlc2ggZW4gNDAxXG4gIC8vIC0gUMO6YmxpY29zOiBzaWduaW4sIHNpZ251cCwgcmVmcmVzaCwgbG9nb3V0XG4gIC8vIC0gTUZBOiB2ZXJpZnkgKGR1cmFudGUgbG9naW4pLCBkaXNhYmxlICg0MDEgPSBjb250cmFzZcOxYSBpbmNvcnJlY3RhKSwgY29uZmlybSAoNDAxID0gY8OzZGlnbyBpbmNvcnJlY3RvKVxuICBjb25zdCBhdXRoRW5kcG9pbnRzID0gW1xuICAgICcvc2lnbmluJyxcbiAgICAnL3NpZ251cCcsXG4gICAgJy9yZWZyZXNoJyxcbiAgICAnL2xvZ291dCcsXG4gICAgJy9tZmEvdmVyaWZ5JyxcbiAgICAnL21mYS9kaXNhYmxlJyxcbiAgICAnL21mYS9jb25maXJtJyxcbiAgXTtcbiAgcmV0dXJuIGF1dGhFbmRwb2ludHMuc29tZSgoZW5kcG9pbnQpID0+XG4gICAgcmVxdWVzdC51cmwuaW5jbHVkZXMoYCR7YXV0aFByZWZpeH0ke2VuZHBvaW50fWApXG4gICk7XG59XG5cbi8qKlxuICogTWFuZWphIGVycm9yZXMgNDAxIHJlZnJlc2NhbmRvIGVsIHRva2VuLlxuICovXG5mdW5jdGlvbiBoYW5kbGU0MDFFcnJvcihcbiAgcmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4sXG4gIG5leHQ6IEh0dHBIYW5kbGVyRm4sXG4gIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8dW5rbm93bj4+IHtcbiAgaWYgKCFpc1JlZnJlc2hpbmcpIHtcbiAgICBpc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgIHJlZnJlc2hUb2tlblN1YmplY3QubmV4dChudWxsKTtcblxuICAgIHJldHVybiBhdXRoU2VydmljZS5yZWZyZXNoQWNjZXNzVG9rZW4oKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICByZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQocmVzcG9uc2UuYWNjZXNzVG9rZW4pO1xuICAgICAgICByZXR1cm4gbmV4dChhZGRBdXRoSGVhZGVyKHJlcXVlc3QsIHJlc3BvbnNlLmFjY2Vzc1Rva2VuKSk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGF1dGhTZXJ2aWNlLmxvZ291dCgpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvLyBFc3BlcmFyIGEgcXVlIHRlcm1pbmUgZWwgcmVmcmVzY28gZW4gY3Vyc29cbiAgcmV0dXJuIHJlZnJlc2hUb2tlblN1YmplY3QucGlwZShcbiAgICBmaWx0ZXIoKHRva2VuKTogdG9rZW4gaXMgc3RyaW5nID0+IHRva2VuICE9PSBudWxsKSxcbiAgICB0YWtlKDEpLFxuICAgIHN3aXRjaE1hcCgodG9rZW4pID0+IG5leHQoYWRkQXV0aEhlYWRlcihyZXF1ZXN0LCB0b2tlbikpKVxuICApO1xufVxuIl19
@@ -24935,7 +24935,7 @@ class AuthService {
24935
24935
  */
24936
24936
  updateProfile(request) {
24937
24937
  return this.http
24938
- .patch(`${this.baseUrl}/profile`, request)
24938
+ .put(`${this.baseUrl}/profile`, request)
24939
24939
  .pipe(catchError(error => this.handleAuthError(error)));
24940
24940
  }
24941
24941
  // =============================================
@@ -25219,7 +25219,18 @@ function isApiRequest(request, apiUrl) {
25219
25219
  * Verifica si la request es a un endpoint de auth que no debe reintentar.
25220
25220
  */
25221
25221
  function isAuthEndpoint(request, authPrefix) {
25222
- const authEndpoints = ['/signin', '/signup', '/refresh', '/logout', '/mfa/verify'];
25222
+ // Endpoints que no deben intentar refresh en 401
25223
+ // - Públicos: signin, signup, refresh, logout
25224
+ // - MFA: verify (durante login), disable (401 = contraseña incorrecta), confirm (401 = código incorrecto)
25225
+ const authEndpoints = [
25226
+ '/signin',
25227
+ '/signup',
25228
+ '/refresh',
25229
+ '/logout',
25230
+ '/mfa/verify',
25231
+ '/mfa/disable',
25232
+ '/mfa/confirm',
25233
+ ];
25223
25234
  return authEndpoints.some((endpoint) => request.url.includes(`${authPrefix}${endpoint}`));
25224
25235
  }
25225
25236
  /**