valtech-components 4.0.164 → 4.0.166

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.
@@ -71,8 +71,10 @@ export class HandoffService {
71
71
  * @param token Raw handoff token read from the URL.
72
72
  */
73
73
  exchangeHandoff(token) {
74
+ // withCredentials: el exchange setea la cookie HttpOnly de refresh. Sin
75
+ // credenciales el browser descarta el Set-Cookie cross-origin → /refresh 400 (H-05).
74
76
  return this.http
75
- .post(`${this.baseUrl}/handoff/exchange`, { token })
77
+ .post(`${this.baseUrl}/handoff/exchange`, { token }, { withCredentials: true })
76
78
  .pipe(tap(response => this.installSession(response)), catchError(err => {
77
79
  // Surface the error untouched — the caller decides how to react
78
80
  // (typically: redirect to /login + toast). Don't install a bad session.
@@ -151,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
151
153
  type: Inject,
152
154
  args: [VALTECH_AUTH_CONFIG]
153
155
  }] }, { type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.Router }] });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZG9mZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2hhbmRvZmYuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7QUFHL0M7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUU3Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztBQW1FM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQUd6QixZQUNtRCxNQUFnQyxFQUN6RSxJQUFnQixFQUNoQixJQUFpQixFQUNqQixNQUFjO1FBSDJCLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ3pFLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTmhCLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFPdEIsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFDLFVBQWdDLEVBQUU7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBd0IsR0FBRyxJQUFJLENBQUMsT0FBTyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxlQUFlLENBQUMsS0FBYTtRQUMzQixP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QyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IFZhbHRlY2hBdXRoQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogTmFtZSBvZiB0aGUgcXVlcnkgcGFyYW0gdGhhdCBjYXJyaWVzIHRoZSBoYW5kb2ZmIHRva2VuLiBBcHBzIG1heSBvdmVycmlkZVxuICogdmlhIGBkZXRlY3RBbmRFeGNoYW5nZUhhbmRvZmYoeyB0b2tlblBhcmFtIH0pYCBidXQgdGhlIGRlZmF1bHQga2VlcHMgdGhlXG4gKiBjb252ZW50aW9uIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYWN0b3J5LlxuICovXG5leHBvcnQgY29uc3QgSEFORE9GRl9UT0tFTl9QQVJBTSA9ICdoYW5kb2ZmJztcblxuLyoqXG4gKiBOYW1lIG9mIHRoZSBxdWVyeSBwYXJhbSB0aGF0IGNhcnJpZXMgdGhlIHBvc3QtZXhjaGFuZ2Ugcm91dGUuXG4gKi9cbmV4cG9ydCBjb25zdCBIQU5ET0ZGX1JPVVRFX1BBUkFNID0gJ3JvdXRlJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgSGFuZG9mZlNlcnZpY2UuZGV0ZWN0QW5kRXhjaGFuZ2VIYW5kb2ZmYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXRlY3RBbmRFeGNoYW5nZU9wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgdGhlIHF1ZXJ5IHBhcmFtIG5hbWUuIERlZmF1bHQ6IGAnaGFuZG9mZidgLiAqL1xuICB0b2tlblBhcmFtPzogc3RyaW5nO1xuICAvKiogT3ZlcnJpZGUgdGhlIHJvdXRlIHBhcmFtIG5hbWUuIERlZmF1bHQ6IGAncm91dGUnYC4gKi9cbiAgcm91dGVQYXJhbT86IHN0cmluZztcbiAgLyoqIFdoZXJlIHRvIG5hdmlnYXRlIGlmIG5vIHJvdXRlIHBhcmFtIGlzIHByZXNlbnQuIERlZmF1bHQ6IGAnLydgLiAqL1xuICBkZWZhdWx0Um91dGU/OiBzdHJpbmc7XG4gIC8qKiBXaGVyZSB0byBuYXZpZ2F0ZSBvbiBleGNoYW5nZSBlcnJvci4gRGVmYXVsdDogYXBwJ3MgY29uZmlndXJlZCBgbG9naW5Sb3V0ZWAuICovXG4gIGVycm9yUm91dGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBib2R5IGZvciBgUE9TVCAvdjIvYXV0aC9oYW5kb2ZmYC5cbiAqXG4gKiBCb3RoIGZpZWxkcyBhcmUgb3B0aW9uYWwgYW5kIHN0b3JlZCBmb3IgYXVkaXQgb25seSDigJQgdGhlIGV4Y2hhbmdlIHN0ZXBcbiAqIGRvZXMgbm90IGVuZm9yY2UgdGhhdCB0aGUgcmVkZWVtaW5nIGFwcCBtYXRjaGVzIGB0YXJnZXRBcHBJZGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZG9mZkNyZWF0ZVJlcXVlc3Qge1xuICAvKiogVGFyZ2V0IGFwcCB0aGUgaGFuZG9mZiBpcyBpbnRlbmRlZCBmb3IgKGUuZy4gYFwibXl2YWx0ZWNoXCJgKS4gQXVkaXQtb25seS4gKi9cbiAgdGFyZ2V0QXBwSWQ/OiBzdHJpbmc7XG4gIC8qKiBSb3V0ZSB0aGUgdGFyZ2V0IGFwcCBzaG91bGQgbmF2aWdhdGUgdG8gYWZ0ZXIgZXhjaGFuZ2UuIEVjaG9lZCBiYWNrLiAqL1xuICByb3V0ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBib2R5IGZyb20gYFBPU1QgL3YyL2F1dGgvaGFuZG9mZmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZG9mZkNyZWF0ZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgLyoqIFJhdyB0b2tlbiB0byBlbWJlZCBpbiB0aGUgcmVkaXJlY3QgVVJMIGFzIGA/aGFuZG9mZj08dG9rZW4+YC4gMzBzIFRUTCwgc2luZ2xlLXVzZS4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFJGQzMzMzkgZXhwaXJhdGlvbiB0aW1lc3RhbXAuICovXG4gIGV4cGlyZXNBdDogc3RyaW5nO1xuICAvKiogRWNob2VkIGByb3V0ZWAgZnJvbSB0aGUgcmVxdWVzdCwgd2hlbiBwcm92aWRlZC4gKi9cbiAgcm91dGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBiYXNlIFVSTCBvZiB0aGUgdGFyZ2V0IGFwcCAoZS5nLiBgXCJodHRwczovL3NpZ2lmeS5jb21cImApLlxuICAgKlxuICAgKiBXaGVuIHByZXNlbnQsIGNhbGxlcnMgc2hvdWxkIHVzZSB0aGlzIGFzIHRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHJlZGlyZWN0LlxuICAgKiBCYWNrZW5kIHJlc29sdmVzIGl0IGZyb20gdGhlIGBhcHAtY29uZmlnYCB0YWJsZSAoc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCkuXG4gICAqXG4gICAqIE9wdGlvbmFsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IOKAlCB3aGVuIG1pc3NpbmcsIGNhbGxlcnMgbWF5IGZhbGwgYmFja1xuICAgKiB0byBhIGNsaWVudC1zaWRlIGBhcHBVcmxzYCBtYXBwaW5nLlxuICAgKi9cbiAgdGFyZ2V0QmFzZVVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBib2R5IGZyb20gYFBPU1QgL3YyL2F1dGgvaGFuZG9mZi9leGNoYW5nZWAuXG4gKlxuICogU2FtZSBzaGFwZSBhcyBgU2lnbmluUmVzcG9uc2VgIOKAlCBpbnN0YWxsYWJsZSB2aWEgYEF1dGhTZXJ2aWNlLnNldEV4dGVybmFsQXV0aGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZG9mZkV4Y2hhbmdlUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgZmlyZWJhc2VUb2tlbj86IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIHRva2VuVHlwZTogc3RyaW5nO1xuICB1c2VySWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBIYW5kb2ZmU2VydmljZSDigJQgY3Jvc3MtYXBwIHNlc3Npb24gdHJhbnNmZXIuXG4gKlxuICogSW1wbGVtZW50cyB0aGUgT0F1dGggQXV0aG9yaXphdGlvbiBDb2RlIHBhdHRlcm4sIGFwcGxpZWQgaW50ZXJuYWxseSBiZXR3ZWVuXG4gKiBhcHBzIHRoYXQgc2hhcmUgdGhlIHNhbWUgYmFja2VuZC5cbiAqXG4gKiAqKk9yaWdpbiBhcHAgKHVzZXIgaXMgYXV0aGVudGljYXRlZCk6KipcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB7IHRva2VuLCByb3V0ZSB9ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gKiAgIGhhbmRvZmYuY3JlYXRlSGFuZG9mZih7IHRhcmdldEFwcElkOiAnbXl2YWx0ZWNoJywgcm91dGU6ICcvYXBwL2Rhc2hib2FyZCcgfSlcbiAqICk7XG4gKiB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGBodHRwczovL215dmFsdGVjaC5hcHAvP2hhbmRvZmY9JHt0b2tlbn0mcm91dGU9JHtlbmNvZGVVUklDb21wb25lbnQocm91dGUgPz8gJy8nKX1gO1xuICogYGBgXG4gKlxuICogKipUYXJnZXQgYXBwIChib290KToqKiBjYWxsIGBleGNoYW5nZUhhbmRvZmYodG9rZW4pYC4gT24gc3VjY2VzcywgdGhlIHNlc3Npb25cbiAqIGlzIGluc3RhbGxlZCAoYEF1dGhTZXJ2aWNlLnNldEV4dGVybmFsQXV0aGApIGFuZCB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLlxuICogU2VlIGBkZXRlY3RBbmRFeGNoYW5nZUhhbmRvZmZgIGhlbHBlciBmb3IgdGhlIHR5cGljYWwgYm9vdHN0cmFwIHBhdHRlcm4uXG4gKlxuICogU2VjdXJpdHkgbm90ZXM6XG4gKiAtIFRva2VuIGlzIHNpbmdsZS11c2UgYW5kIHNob3J0LWxpdmVkICgzMHMpIOKAlCBlbmZvcmNlZCBzZXJ2ZXItc2lkZS5cbiAqIC0gVG9rZW4gaW4gVVJMIG11c3QgYmUgcmVtb3ZlZCBmcm9tIGhpc3RvcnkgYWZ0ZXIgZXhjaGFuZ2UgdG8gYXZvaWQgbG9nIGxlYWthZ2UuXG4gKiAtIFRoZSBleGNoYW5nZSBlbmRwb2ludCBpcyBwdWJsaWM7IGRvIE5PVCBhZGQgYXV0aCBoZWFkZXIuIFRoZVxuICogICBgSHR0cENsaWVudGAgcmVxdWVzdCBiZWxvdyBhdm9pZHMgdHJpZ2dlcmluZyB0aGUgYXV0aCBpbnRlcmNlcHRvciBzaW5jZSB0aGVcbiAqICAgdXNlciBpc24ndCBsb2dnZWQgaW4geWV0IG9uIHRoZSB0YXJnZXQgYXBwLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEhhbmRvZmZTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBkZXRlY3RlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVkFMVEVDSF9BVVRIX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hBdXRoQ29uZmlnIHwgbnVsbCxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICAvKipcbiAgICogQ3JlYXRlIGEgaGFuZG9mZiB0b2tlbi4gQ2FsbGVyIG11c3QgYmUgYXV0aGVudGljYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgT3B0aW9uYWwgbWV0YWRhdGE6IHRhcmdldCBhcHAgaWQgYW5kIGludGVuZGVkIHJvdXRlLlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIGVtaXR0aW5nIGB7IHRva2VuLCBleHBpcmVzQXQsIHJvdXRlPyB9YC5cbiAgICovXG4gIGNyZWF0ZUhhbmRvZmYocmVxdWVzdDogSGFuZG9mZkNyZWF0ZVJlcXVlc3QgPSB7fSk6IE9ic2VydmFibGU8SGFuZG9mZkNyZWF0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEhhbmRvZmZDcmVhdGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9oYW5kb2ZmYCwgcmVxdWVzdCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgYSBoYW5kb2ZmIHRva2VuIGZvciBhIHNlc3Npb24gYW5kIGluc3RhbGwgaXQuXG4gICAqXG4gICAqIE9uIHN1Y2Nlc3MsIHRoZSByZXNwb25zZSBpcyBwaXBlZCB0aHJvdWdoIGBBdXRoU2VydmljZS5zZXRFeHRlcm5hbEF1dGhgXG4gICAqIHNvIHRoZSB1c2VyIGJlY29tZXMgYXV0aGVudGljYXRlZC4gU3Vic2VxdWVudCBuYXZpZ2F0aW9uIGNhbiBwcm9jZWVkLlxuICAgKlxuICAgKiBPbiBmYWlsdXJlLCB0aGUgb2JzZXJ2YWJsZSBlcnJvcnMuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yXG4gICAqIHNob3dpbmcgYW4gZXJyb3IgYW5kIHJvdXRpbmcgdG8gYC9sb2dpbmAuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiBSYXcgaGFuZG9mZiB0b2tlbiByZWFkIGZyb20gdGhlIFVSTC5cbiAgICovXG4gIGV4Y2hhbmdlSGFuZG9mZih0b2tlbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxIYW5kb2ZmRXhjaGFuZ2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PEhhbmRvZmZFeGNoYW5nZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L2hhbmRvZmYvZXhjaGFuZ2VgLCB7IHRva2VuIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHRoaXMuaW5zdGFsbFNlc3Npb24ocmVzcG9uc2UpKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgIC8vIFN1cmZhY2UgdGhlIGVycm9yIHVudG91Y2hlZCDigJQgdGhlIGNhbGxlciBkZWNpZGVzIGhvdyB0byByZWFjdFxuICAgICAgICAgIC8vICh0eXBpY2FsbHk6IHJlZGlyZWN0IHRvIC9sb2dpbiArIHRvYXN0KS4gRG9uJ3QgaW5zdGFsbCBhIGJhZCBzZXNzaW9uLlxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIGhlbHBlciDigJQgcmVhZHMgdGhlIGhhbmRvZmYgdG9rZW4gZnJvbSB0aGUgY3VycmVudCBVUkwsIGV4Y2hhbmdlc1xuICAgKiBpdCBmb3IgYSBzZXNzaW9uLCBhbmQgbmF2aWdhdGVzIHRvIHRoZSBpbnRlbmRlZCByb3V0ZSB3aXRoIHRoZSB0b2tlblxuICAgKiBzdHJpcHBlZCBmcm9tIGhpc3RvcnkuXG4gICAqXG4gICAqIElkZW1wb3RlbnQ6IHN1YnNlcXVlbnQgY2FsbHMgYXJlIG5vLW9wcy4gV2lyZSBmcm9tIGFuXG4gICAqIGBBUFBfSU5JVElBTElaRVJgL2Bwcm92aWRlQXBwSW5pdGlhbGl6ZXJgIGZhY3RvcnkgaW4gYG1haW4udHNgLlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIG1haW4udHNcbiAgICogcHJvdmlkZUFwcEluaXRpYWxpemVyKCgpID0+IGluamVjdChIYW5kb2ZmU2VydmljZSkuZGV0ZWN0QW5kRXhjaGFuZ2VIYW5kb2ZmKCkpXG4gICAqIGBgYFxuICAgKlxuICAgKiBPbiBlcnJvciAoZXhwaXJlZC91c2VkL2ludmFsaWQgdG9rZW4pLCByZWRpcmVjdHMgdG8gYGVycm9yUm91dGVgIChkZWZhdWx0OlxuICAgKiB0aGUgYXBwJ3MgY29uZmlndXJlZCBgbG9naW5Sb3V0ZWApLiBUaGUgVVJMIGlzIGFsd2F5cyBjbGVhbmVkLCBldmVuIG9uXG4gICAqIGVycm9yLCBzbyB0aGUgdG9rZW4gY2Fubm90IGJlIHJldHJpZWQgYnkgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIGEgaGFuZG9mZiB3YXMgZGV0ZWN0ZWQgYW5kIHByb2Nlc3NlZCAoc3VjY2VzcyBvciBmYWlsKS5cbiAgICogICAgICAgICAgYGZhbHNlYCBpZiBubyB0b2tlbiB3YXMgcHJlc2VudCAoY29sZCBib290LCBub3JtYWwgZmxvdykuXG4gICAqL1xuICBhc3luYyBkZXRlY3RBbmRFeGNoYW5nZUhhbmRvZmYob3B0aW9uczogRGV0ZWN0QW5kRXhjaGFuZ2VPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5kZXRlY3RlZCB8fCB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmRldGVjdGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IHRva2VuUGFyYW0gPSBvcHRpb25zLnRva2VuUGFyYW0gPz8gSEFORE9GRl9UT0tFTl9QQVJBTTtcbiAgICBjb25zdCByb3V0ZVBhcmFtID0gb3B0aW9ucy5yb3V0ZVBhcmFtID8/IEhBTkRPRkZfUk9VVEVfUEFSQU07XG4gICAgY29uc3QgZGVmYXVsdFJvdXRlID0gb3B0aW9ucy5kZWZhdWx0Um91dGUgPz8gJy8nO1xuICAgIGNvbnN0IGVycm9yUm91dGUgPSBvcHRpb25zLmVycm9yUm91dGUgPz8gdGhpcy5jb25maWc/LmxvZ2luUm91dGUgPz8gJy9sb2dpbic7XG5cbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIGNvbnN0IHRva2VuID0gcGFyYW1zLmdldCh0b2tlblBhcmFtKTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0Um91dGUgPSBwYXJhbXMuZ2V0KHJvdXRlUGFyYW0pIHx8IGRlZmF1bHRSb3V0ZTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2hhbmdlSGFuZG9mZih0b2tlbikpO1xuICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0YXJnZXRSb3V0ZSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbSGFuZG9mZl0gRXhjaGFuZ2UgZmFpbGVkLCByZWRpcmVjdGluZyB0byBsb2dpbicsIGVycik7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGVycm9yUm91dGUsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0IHRoZSBzZXNzaW9uIGluIGBBdXRoU2VydmljZWAuIE1pcnJvcnMgdGhlIGluc3RhbGwgZmxvdyB1c2VkIGJ5XG4gICAqIHRoZSBub3JtYWwgc2lnbmluIHBhdGggc28gdGltZXJzLCBGaXJlYmFzZSwgYW5kIHRhYi1zeW5jIGFsbCBraWNrIGluLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsU2Vzc2lvbihyZXNwb25zZTogSGFuZG9mZkV4Y2hhbmdlUmVzcG9uc2UpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGguc2V0RXh0ZXJuYWxBdXRoKHtcbiAgICAgIGFjY2Vzc1Rva2VuOiByZXNwb25zZS5hY2Nlc3NUb2tlbixcbiAgICAgIHJlZnJlc2hUb2tlbjogcmVzcG9uc2UucmVmcmVzaFRva2VuLFxuICAgICAgZmlyZWJhc2VUb2tlbjogcmVzcG9uc2UuZmlyZWJhc2VUb2tlbixcbiAgICAgIGV4cGlyZXNJbjogcmVzcG9uc2UuZXhwaXJlc0luLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgYmFzZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfSR7dGhpcy5jb25maWc/LmF1dGhQcmVmaXh9YDtcbiAgfVxufVxuIl19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZG9mZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2hhbmRvZmYuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUFFLGNBQWMsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7Ozs7QUFHL0M7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQUU3Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztBQW1FM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQUd6QixZQUNtRCxNQUFnQyxFQUN6RSxJQUFnQixFQUNoQixJQUFpQixFQUNqQixNQUFjO1FBSDJCLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ3pFLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBTmhCLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFPdEIsQ0FBQztJQUVKOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFDLFVBQWdDLEVBQUU7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBd0IsR0FBRyxJQUFJLENBQUMsT0FBTyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxlQUFlLENBQUMsS0FBYTtRQUMzQix3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QyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUs3QixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBWQUxURUNIX0FVVEhfQ09ORklHIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgVmFsdGVjaEF1dGhDb25maWcgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBOYW1lIG9mIHRoZSBxdWVyeSBwYXJhbSB0aGF0IGNhcnJpZXMgdGhlIGhhbmRvZmYgdG9rZW4uIEFwcHMgbWF5IG92ZXJyaWRlXG4gKiB2aWEgYGRldGVjdEFuZEV4Y2hhbmdlSGFuZG9mZih7IHRva2VuUGFyYW0gfSlgIGJ1dCB0aGUgZGVmYXVsdCBrZWVwcyB0aGVcbiAqIGNvbnZlbnRpb24gY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhY3RvcnkuXG4gKi9cbmV4cG9ydCBjb25zdCBIQU5ET0ZGX1RPS0VOX1BBUkFNID0gJ2hhbmRvZmYnO1xuXG4vKipcbiAqIE5hbWUgb2YgdGhlIHF1ZXJ5IHBhcmFtIHRoYXQgY2FycmllcyB0aGUgcG9zdC1leGNoYW5nZSByb3V0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEhBTkRPRkZfUk9VVEVfUEFSQU0gPSAncm91dGUnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBIYW5kb2ZmU2VydmljZS5kZXRlY3RBbmRFeGNoYW5nZUhhbmRvZmZgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldGVjdEFuZEV4Y2hhbmdlT3B0aW9ucyB7XG4gIC8qKiBPdmVycmlkZSB0aGUgcXVlcnkgcGFyYW0gbmFtZS4gRGVmYXVsdDogYCdoYW5kb2ZmJ2AuICovXG4gIHRva2VuUGFyYW0/OiBzdHJpbmc7XG4gIC8qKiBPdmVycmlkZSB0aGUgcm91dGUgcGFyYW0gbmFtZS4gRGVmYXVsdDogYCdyb3V0ZSdgLiAqL1xuICByb3V0ZVBhcmFtPzogc3RyaW5nO1xuICAvKiogV2hlcmUgdG8gbmF2aWdhdGUgaWYgbm8gcm91dGUgcGFyYW0gaXMgcHJlc2VudC4gRGVmYXVsdDogYCcvJ2AuICovXG4gIGRlZmF1bHRSb3V0ZT86IHN0cmluZztcbiAgLyoqIFdoZXJlIHRvIG5hdmlnYXRlIG9uIGV4Y2hhbmdlIGVycm9yLiBEZWZhdWx0OiBhcHAncyBjb25maWd1cmVkIGBsb2dpblJvdXRlYC4gKi9cbiAgZXJyb3JSb3V0ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGJvZHkgZm9yIGBQT1NUIC92Mi9hdXRoL2hhbmRvZmZgLlxuICpcbiAqIEJvdGggZmllbGRzIGFyZSBvcHRpb25hbCBhbmQgc3RvcmVkIGZvciBhdWRpdCBvbmx5IOKAlCB0aGUgZXhjaGFuZ2Ugc3RlcFxuICogZG9lcyBub3QgZW5mb3JjZSB0aGF0IHRoZSByZWRlZW1pbmcgYXBwIG1hdGNoZXMgYHRhcmdldEFwcElkYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYW5kb2ZmQ3JlYXRlUmVxdWVzdCB7XG4gIC8qKiBUYXJnZXQgYXBwIHRoZSBoYW5kb2ZmIGlzIGludGVuZGVkIGZvciAoZS5nLiBgXCJteXZhbHRlY2hcImApLiBBdWRpdC1vbmx5LiAqL1xuICB0YXJnZXRBcHBJZD86IHN0cmluZztcbiAgLyoqIFJvdXRlIHRoZSB0YXJnZXQgYXBwIHNob3VsZCBuYXZpZ2F0ZSB0byBhZnRlciBleGNoYW5nZS4gRWNob2VkIGJhY2suICovXG4gIHJvdXRlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGJvZHkgZnJvbSBgUE9TVCAvdjIvYXV0aC9oYW5kb2ZmYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYW5kb2ZmQ3JlYXRlUmVzcG9uc2Uge1xuICBvcGVyYXRpb25JZDogc3RyaW5nO1xuICAvKiogUmF3IHRva2VuIHRvIGVtYmVkIGluIHRoZSByZWRpcmVjdCBVUkwgYXMgYD9oYW5kb2ZmPTx0b2tlbj5gLiAzMHMgVFRMLCBzaW5nbGUtdXNlLiAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogUkZDMzMzOSBleHBpcmF0aW9uIHRpbWVzdGFtcC4gKi9cbiAgZXhwaXJlc0F0OiBzdHJpbmc7XG4gIC8qKiBFY2hvZWQgYHJvdXRlYCBmcm9tIHRoZSByZXF1ZXN0LCB3aGVuIHByb3ZpZGVkLiAqL1xuICByb3V0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEFic29sdXRlIGJhc2UgVVJMIG9mIHRoZSB0YXJnZXQgYXBwIChlLmcuIGBcImh0dHBzOi8vc2lnaWZ5LmNvbVwiYCkuXG4gICAqXG4gICAqIFdoZW4gcHJlc2VudCwgY2FsbGVycyBzaG91bGQgdXNlIHRoaXMgYXMgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcmVkaXJlY3QuXG4gICAqIEJhY2tlbmQgcmVzb2x2ZXMgaXQgZnJvbSB0aGUgYGFwcC1jb25maWdgIHRhYmxlIChzaW5nbGUgc291cmNlIG9mIHRydXRoKS5cbiAgICpcbiAgICogT3B0aW9uYWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkg4oCUIHdoZW4gbWlzc2luZywgY2FsbGVycyBtYXkgZmFsbCBiYWNrXG4gICAqIHRvIGEgY2xpZW50LXNpZGUgYGFwcFVybHNgIG1hcHBpbmcuXG4gICAqL1xuICB0YXJnZXRCYXNlVXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGJvZHkgZnJvbSBgUE9TVCAvdjIvYXV0aC9oYW5kb2ZmL2V4Y2hhbmdlYC5cbiAqXG4gKiBTYW1lIHNoYXBlIGFzIGBTaWduaW5SZXNwb25zZWAg4oCUIGluc3RhbGxhYmxlIHZpYSBgQXV0aFNlcnZpY2Uuc2V0RXh0ZXJuYWxBdXRoYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYW5kb2ZmRXhjaGFuZ2VSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICBmaXJlYmFzZVRva2VuPzogc3RyaW5nO1xuICBleHBpcmVzSW46IG51bWJlcjtcbiAgdG9rZW5UeXBlOiBzdHJpbmc7XG4gIHVzZXJJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhhbmRvZmZTZXJ2aWNlIOKAlCBjcm9zcy1hcHAgc2Vzc2lvbiB0cmFuc2Zlci5cbiAqXG4gKiBJbXBsZW1lbnRzIHRoZSBPQXV0aCBBdXRob3JpemF0aW9uIENvZGUgcGF0dGVybiwgYXBwbGllZCBpbnRlcm5hbGx5IGJldHdlZW5cbiAqIGFwcHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBiYWNrZW5kLlxuICpcbiAqICoqT3JpZ2luIGFwcCAodXNlciBpcyBhdXRoZW50aWNhdGVkKToqKlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHsgdG9rZW4sIHJvdXRlIH0gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAqICAgaGFuZG9mZi5jcmVhdGVIYW5kb2ZmKHsgdGFyZ2V0QXBwSWQ6ICdteXZhbHRlY2gnLCByb3V0ZTogJy9hcHAvZGFzaGJvYXJkJyB9KVxuICogKTtcbiAqIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYGh0dHBzOi8vbXl2YWx0ZWNoLmFwcC8/aGFuZG9mZj0ke3Rva2VufSZyb3V0ZT0ke2VuY29kZVVSSUNvbXBvbmVudChyb3V0ZSA/PyAnLycpfWA7XG4gKiBgYGBcbiAqXG4gKiAqKlRhcmdldCBhcHAgKGJvb3QpOioqIGNhbGwgYGV4Y2hhbmdlSGFuZG9mZih0b2tlbilgLiBPbiBzdWNjZXNzLCB0aGUgc2Vzc2lvblxuICogaXMgaW5zdGFsbGVkIChgQXV0aFNlcnZpY2Uuc2V0RXh0ZXJuYWxBdXRoYCkgYW5kIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQuXG4gKiBTZWUgYGRldGVjdEFuZEV4Y2hhbmdlSGFuZG9mZmAgaGVscGVyIGZvciB0aGUgdHlwaWNhbCBib290c3RyYXAgcGF0dGVybi5cbiAqXG4gKiBTZWN1cml0eSBub3RlczpcbiAqIC0gVG9rZW4gaXMgc2luZ2xlLXVzZSBhbmQgc2hvcnQtbGl2ZWQgKDMwcykg4oCUIGVuZm9yY2VkIHNlcnZlci1zaWRlLlxuICogLSBUb2tlbiBpbiBVUkwgbXVzdCBiZSByZW1vdmVkIGZyb20gaGlzdG9yeSBhZnRlciBleGNoYW5nZSB0byBhdm9pZCBsb2cgbGVha2FnZS5cbiAqIC0gVGhlIGV4Y2hhbmdlIGVuZHBvaW50IGlzIHB1YmxpYzsgZG8gTk9UIGFkZCBhdXRoIGhlYWRlci4gVGhlXG4gKiAgIGBIdHRwQ2xpZW50YCByZXF1ZXN0IGJlbG93IGF2b2lkcyB0cmlnZ2VyaW5nIHRoZSBhdXRoIGludGVyY2VwdG9yIHNpbmNlIHRoZVxuICogICB1c2VyIGlzbid0IGxvZ2dlZCBpbiB5ZXQgb24gdGhlIHRhcmdldCBhcHAuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgSGFuZG9mZlNlcnZpY2Uge1xuICBwcml2YXRlIGRldGVjdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChWQUxURUNIX0FVVEhfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVmFsdGVjaEF1dGhDb25maWcgfCBudWxsLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBoYW5kb2ZmIHRva2VuLiBDYWxsZXIgbXVzdCBiZSBhdXRoZW50aWNhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdCBPcHRpb25hbCBtZXRhZGF0YTogdGFyZ2V0IGFwcCBpZCBhbmQgaW50ZW5kZWQgcm91dGUuXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgZW1pdHRpbmcgYHsgdG9rZW4sIGV4cGlyZXNBdCwgcm91dGU/IH1gLlxuICAgKi9cbiAgY3JlYXRlSGFuZG9mZihyZXF1ZXN0OiBIYW5kb2ZmQ3JlYXRlUmVxdWVzdCA9IHt9KTogT2JzZXJ2YWJsZTxIYW5kb2ZmQ3JlYXRlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SGFuZG9mZkNyZWF0ZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L2hhbmRvZmZgLCByZXF1ZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhIGhhbmRvZmYgdG9rZW4gZm9yIGEgc2Vzc2lvbiBhbmQgaW5zdGFsbCBpdC5cbiAgICpcbiAgICogT24gc3VjY2VzcywgdGhlIHJlc3BvbnNlIGlzIHBpcGVkIHRocm91Z2ggYEF1dGhTZXJ2aWNlLnNldEV4dGVybmFsQXV0aGBcbiAgICogc28gdGhlIHVzZXIgYmVjb21lcyBhdXRoZW50aWNhdGVkLiBTdWJzZXF1ZW50IG5hdmlnYXRpb24gY2FuIHByb2NlZWQuXG4gICAqXG4gICAqIE9uIGZhaWx1cmUsIHRoZSBvYnNlcnZhYmxlIGVycm9ycy4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3JcbiAgICogc2hvd2luZyBhbiBlcnJvciBhbmQgcm91dGluZyB0byBgL2xvZ2luYC5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIFJhdyBoYW5kb2ZmIHRva2VuIHJlYWQgZnJvbSB0aGUgVVJMLlxuICAgKi9cbiAgZXhjaGFuZ2VIYW5kb2ZmKHRva2VuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEhhbmRvZmZFeGNoYW5nZVJlc3BvbnNlPiB7XG4gICAgLy8gd2l0aENyZWRlbnRpYWxzOiBlbCBleGNoYW5nZSBzZXRlYSBsYSBjb29raWUgSHR0cE9ubHkgZGUgcmVmcmVzaC4gU2luXG4gICAgLy8gY3JlZGVuY2lhbGVzIGVsIGJyb3dzZXIgZGVzY2FydGEgZWwgU2V0LUNvb2tpZSBjcm9zcy1vcmlnaW4g4oaSIC9yZWZyZXNoIDQwMCAoSC0wNSkuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8SGFuZG9mZkV4Y2hhbmdlUmVzcG9uc2U+KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2hhbmRvZmYvZXhjaGFuZ2VgLFxuICAgICAgICB7IHRva2VuIH0sXG4gICAgICAgIHsgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH1cbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAocmVzcG9uc2UgPT4gdGhpcy5pbnN0YWxsU2Vzc2lvbihyZXNwb25zZSkpLFxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgLy8gU3VyZmFjZSB0aGUgZXJyb3IgdW50b3VjaGVkIOKAlCB0aGUgY2FsbGVyIGRlY2lkZXMgaG93IHRvIHJlYWN0XG4gICAgICAgICAgLy8gKHR5cGljYWxseTogcmVkaXJlY3QgdG8gL2xvZ2luICsgdG9hc3QpLiBEb24ndCBpbnN0YWxsIGEgYmFkIHNlc3Npb24uXG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCb290c3RyYXAgaGVscGVyIOKAlCByZWFkcyB0aGUgaGFuZG9mZiB0b2tlbiBmcm9tIHRoZSBjdXJyZW50IFVSTCwgZXhjaGFuZ2VzXG4gICAqIGl0IGZvciBhIHNlc3Npb24sIGFuZCBuYXZpZ2F0ZXMgdG8gdGhlIGludGVuZGVkIHJvdXRlIHdpdGggdGhlIHRva2VuXG4gICAqIHN0cmlwcGVkIGZyb20gaGlzdG9yeS5cbiAgICpcbiAgICogSWRlbXBvdGVudDogc3Vic2VxdWVudCBjYWxscyBhcmUgbm8tb3BzLiBXaXJlIGZyb20gYW5cbiAgICogYEFQUF9JTklUSUFMSVpFUmAvYHByb3ZpZGVBcHBJbml0aWFsaXplcmAgZmFjdG9yeSBpbiBgbWFpbi50c2AuXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gbWFpbi50c1xuICAgKiBwcm92aWRlQXBwSW5pdGlhbGl6ZXIoKCkgPT4gaW5qZWN0KEhhbmRvZmZTZXJ2aWNlKS5kZXRlY3RBbmRFeGNoYW5nZUhhbmRvZmYoKSlcbiAgICogYGBgXG4gICAqXG4gICAqIE9uIGVycm9yIChleHBpcmVkL3VzZWQvaW52YWxpZCB0b2tlbiksIHJlZGlyZWN0cyB0byBgZXJyb3JSb3V0ZWAgKGRlZmF1bHQ6XG4gICAqIHRoZSBhcHAncyBjb25maWd1cmVkIGBsb2dpblJvdXRlYCkuIFRoZSBVUkwgaXMgYWx3YXlzIGNsZWFuZWQsIGV2ZW4gb25cbiAgICogZXJyb3IsIHNvIHRoZSB0b2tlbiBjYW5ub3QgYmUgcmV0cmllZCBieSByZWZyZXNoaW5nIHRoZSBwYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYSBoYW5kb2ZmIHdhcyBkZXRlY3RlZCBhbmQgcHJvY2Vzc2VkIChzdWNjZXNzIG9yIGZhaWwpLlxuICAgKiAgICAgICAgICBgZmFsc2VgIGlmIG5vIHRva2VuIHdhcyBwcmVzZW50IChjb2xkIGJvb3QsIG5vcm1hbCBmbG93KS5cbiAgICovXG4gIGFzeW5jIGRldGVjdEFuZEV4Y2hhbmdlSGFuZG9mZihvcHRpb25zOiBEZXRlY3RBbmRFeGNoYW5nZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLmRldGVjdGVkIHx8IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZGV0ZWN0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3QgdG9rZW5QYXJhbSA9IG9wdGlvbnMudG9rZW5QYXJhbSA/PyBIQU5ET0ZGX1RPS0VOX1BBUkFNO1xuICAgIGNvbnN0IHJvdXRlUGFyYW0gPSBvcHRpb25zLnJvdXRlUGFyYW0gPz8gSEFORE9GRl9ST1VURV9QQVJBTTtcbiAgICBjb25zdCBkZWZhdWx0Um91dGUgPSBvcHRpb25zLmRlZmF1bHRSb3V0ZSA/PyAnLyc7XG4gICAgY29uc3QgZXJyb3JSb3V0ZSA9IG9wdGlvbnMuZXJyb3JSb3V0ZSA/PyB0aGlzLmNvbmZpZz8ubG9naW5Sb3V0ZSA/PyAnL2xvZ2luJztcblxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgY29uc3QgdG9rZW4gPSBwYXJhbXMuZ2V0KHRva2VuUGFyYW0pO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRSb3V0ZSA9IHBhcmFtcy5nZXQocm91dGVQYXJhbSkgfHwgZGVmYXVsdFJvdXRlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZXhjaGFuZ2VIYW5kb2ZmKHRva2VuKSk7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRhcmdldFJvdXRlLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tIYW5kb2ZmXSBFeGNoYW5nZSBmYWlsZWQsIHJlZGlyZWN0aW5nIHRvIGxvZ2luJywgZXJyKTtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZXJyb3JSb3V0ZSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3QgdGhlIHNlc3Npb24gaW4gYEF1dGhTZXJ2aWNlYC4gTWlycm9ycyB0aGUgaW5zdGFsbCBmbG93IHVzZWQgYnlcbiAgICogdGhlIG5vcm1hbCBzaWduaW4gcGF0aCBzbyB0aW1lcnMsIEZpcmViYXNlLCBhbmQgdGFiLXN5bmMgYWxsIGtpY2sgaW4uXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxTZXNzaW9uKHJlc3BvbnNlOiBIYW5kb2ZmRXhjaGFuZ2VSZXNwb25zZSk6IHZvaWQge1xuICAgIHRoaXMuYXV0aC5zZXRFeHRlcm5hbEF1dGgoe1xuICAgICAgYWNjZXNzVG9rZW46IHJlc3BvbnNlLmFjY2Vzc1Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuOiByZXNwb25zZS5yZWZyZXNoVG9rZW4sXG4gICAgICBmaXJlYmFzZVRva2VuOiByZXNwb25zZS5maXJlYmFzZVRva2VuLFxuICAgICAgZXhwaXJlc0luOiByZXNwb25zZS5leHBpcmVzSW4sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBiYXNlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29uZmlnPy5hcGlVcmx9JHt0aGlzLmNvbmZpZz8uYXV0aFByZWZpeH1gO1xuICB9XG59XG4iXX0=
@@ -67,6 +67,11 @@ export class OAuthService {
67
67
  // Nonce de flujo (M-07): vive solo en este objeto (no en storage), viaja
68
68
  // al backend en client_nonce y vuelve en el callback. El opener lo verifica
69
69
  // → un oauth_callback_data forjado en localStorage por XSS no lo conoce.
70
+ // Limpiar datos stale de intentos anteriores ANTES de abrir el popup.
71
+ // Sin esto, un intento previo fallido deja datos en localStorage que el
72
+ // intervalo de este intento encuentra inmediatamente como "demasiado viejos"
73
+ // y descarta, impidiendo que los datos frescos del nuevo popup sean detectados.
74
+ this.clearLocalStorageFallback();
70
75
  const nonce = this.generateNonce();
71
76
  this.expectedNonce = nonce;
72
77
  // popup=true sobrevive el bounce cross-origin (Google/MS borran window.name
@@ -134,6 +139,7 @@ export class OAuthService {
134
139
  return;
135
140
  if (!this.isNonceValid(data))
136
141
  return;
142
+ this.clearLocalStorageFallback();
137
143
  this.cleanup();
138
144
  this.ngZone.run(() => {
139
145
  if (data.error) {
@@ -376,6 +382,8 @@ export class OAuthService {
376
382
  this.broadcastChannel.close();
377
383
  this.broadcastChannel = null;
378
384
  }
385
+ // Limpiar datos del popup en storage para no contaminar el próximo intento.
386
+ this.clearLocalStorageFallback();
379
387
  // COOP (Google usa same-origin) puede severar la BCG del popup → acceder a
380
388
  // popup.closed o llamar popup.close() lanza SecurityError. Sin este try/catch,
381
389
  // cleanup() tira, ngZone.run() nunca se llama y el observer no emite → sin
@@ -447,4 +455,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
447
455
  type: Inject,
448
456
  args: [VALTECH_AUTH_CONFIG]
449
457
  }] }, { type: i1.HttpClient }, { type: i0.NgZone }] });
450
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXV0aC9vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBVyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBVy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQWF2QixZQUNtRCxNQUFnQyxFQUN6RSxJQUFnQixFQUNoQixNQUFjO1FBRjJCLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ3pFLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWZoQixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixtQkFBYyxHQUEyQyxJQUFJLENBQUM7UUFDOUQsd0JBQW1CLEdBQTBDLElBQUksQ0FBQztRQUNsRSxxQkFBZ0IsR0FBNEIsSUFBSSxDQUFDO1FBQ3pEOzs7OztXQUtHO1FBQ0ssa0JBQWEsR0FBa0IsSUFBSSxDQUFDO0lBTXpDLENBQUM7SUFFSjs7Ozs7O09BTUc7SUFDSCxTQUFTLENBQUMsUUFBdUI7UUFDL0IsT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMvQix5RUFBeUU7WUFDekUsNEVBQTRFO1lBQzVFLHlFQUF5RTtZQUN6RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFFM0IsNEVBQTRFO1lBQzVFLGdGQUFnRjtZQUNoRixNQUFNLFdBQVcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxpQ0FBaUMsQ0FBQztZQUMvRSxNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsUUFBUSx1QkFBdUIsa0JBQWtCLENBQUMsV0FBVyxDQUFDLGlCQUFpQixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBRXBLLHVCQUF1QjtZQUN2QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDbEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDO1lBQ25CLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5RCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxLQUFLLFdBQVcsTUFBTSxTQUFTLElBQUksUUFBUSxHQUFHLFlBQVksQ0FBQztZQUVyRixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNoQixRQUFRLENBQUMsS0FBSyxDQUFDO29CQUNiLElBQUksRUFBRSxlQUFlO29CQUNyQixPQUFPLEVBQ0wsdUZBQXVGO2lCQUM1RSxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFFRCw4QkFBOEI7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtnQkFDNUMsaUJBQWlCO2dCQUNqQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDNUMsT0FBTztnQkFDVCxDQUFDO2dCQUVELDBCQUEwQjtnQkFDMUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQXlCLENBQUM7Z0JBQzdDLElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNwQyxPQUFPO2dCQUNULENBQUM7Z0JBRUQscUVBQXFFO2dCQUNyRSxrREFBa0Q7Z0JBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzdCLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxVQUFVO2dCQUNWLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFFZixrRUFBa0U7Z0JBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2YsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzdCLENBQUM7eUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ3ZCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMzQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3RCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixRQUFRLENBQUMsS0FBSyxDQUFDOzRCQUNiLElBQUksRUFBRSxrQkFBa0I7NEJBQ3hCLE9BQU8sRUFBRSxrREFBa0Q7eUJBQzlDLENBQUMsQ0FBQztvQkFDbkIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQztZQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRXhELHdFQUF3RTtZQUN4RSx5RUFBeUU7WUFDekUsaUVBQWlFO1lBQ2pFLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBbUIsRUFBRSxFQUFFO29CQUN4RCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBeUIsQ0FBQztvQkFDN0MsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLGdCQUFnQjt3QkFBRSxPQUFPO29CQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7d0JBQUUsT0FBTztvQkFDckMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTt3QkFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ2YsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzdCLENBQUM7NkJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7NEJBQ3ZCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUMzQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3RCLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixRQUFRLENBQUMsS0FBSyxDQUFDO2dDQUNiLElBQUksRUFBRSxrQkFBa0I7Z0NBQ3hCLE9BQU8sRUFBRSxrREFBa0Q7NkJBQzlDLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUM7WUFDSixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHdFQUF3RTtZQUMxRSxDQUFDO1lBRUQsK0VBQStFO1lBQy9FLG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDMUMscUVBQXFFO2dCQUNyRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO3dCQUNuQixJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDckIsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ25DLENBQUM7NkJBQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7NEJBQzdCLGdFQUFnRTs0QkFDaEUsZ0VBQWdFOzRCQUNoRSwwQ0FBMEM7NEJBQzFDLElBQUksU0FBUyxFQUFFLEVBQUUsQ0FBQztnQ0FDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0REFBNEQsRUFBRTtvQ0FDeEUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztvQ0FDcEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYTtvQ0FDbkQsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUM7aUNBQ2xFLENBQUMsQ0FBQzs0QkFDTCxDQUFDOzRCQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNqQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3RCLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixRQUFRLENBQUMsS0FBSyxDQUFDO2dDQUNiLElBQUksRUFBRSxrQkFBa0I7Z0NBQ3hCLE9BQU8sRUFBRSxrREFBa0Q7NkJBQzlDLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDSCxPQUFPO2dCQUNULENBQUM7Z0JBRUQsK0RBQStEO2dCQUMvRCxJQUFJLENBQUM7b0JBQ0gsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFOzRCQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDO2dDQUNiLElBQUksRUFBRSxjQUFjO2dDQUNwQixPQUFPLEVBQUUsc0NBQXNDOzZCQUNsQyxDQUFDLENBQUM7d0JBQ25CLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1Asb0VBQW9FO2dCQUN0RSxDQUFDO1lBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRVIsMkNBQTJDO1lBQzNDLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGFBQWEsQ0FBQyxRQUF1QjtRQUNuQyxPQUFPLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sV0FBVyxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLGlDQUFpQyxDQUFDO1lBQy9FLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixRQUFRLHVCQUF1QixrQkFBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBRS9ILE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNsQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7WUFDbkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvRCxNQUFNLFFBQVEsR0FBRyxTQUFTLEtBQUssV0FBVyxNQUFNLFNBQVMsSUFBSSxRQUFRLEdBQUcsWUFBWSxDQUFDO1lBRXJGLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRTNELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hCLFFBQVEsQ0FBQyxLQUFLLENBQUM7b0JBQ2IsSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLE9BQU8sRUFBRSwyQ0FBMkM7aUJBQ3ZDLENBQUMsQ0FBQztnQkFDakIsT0FBTyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7WUFDdEMsQ0FBQztZQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7Z0JBQzVDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU07b0JBQUUsT0FBTztnQkFFcEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQXlCLENBQUM7Z0JBQzdDLElBQUksSUFBSSxFQUFFLElBQUksS0FBSyxnQkFBZ0I7b0JBQUUsT0FBTztnQkFFNUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUVmLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2YsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzdCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUssRUFBa0IsQ0FBQyxDQUFDO3dCQUNsRCxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3RCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUM7WUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUV4RCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO3dCQUNuQixRQUFRLENBQUMsS0FBSyxDQUFDOzRCQUNiLElBQUksRUFBRSxjQUFjOzRCQUNwQixPQUFPLEVBQUUsc0NBQXNDO3lCQUNsQyxDQUFDLENBQUM7b0JBQ25CLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFUixPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUFrQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzthQUN0RixJQUFJLENBQ0gsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2pCLFVBQVUsQ0FDUixHQUFHLEVBQUUsQ0FDSCxDQUFDO1lBQ0MsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLGFBQWE7WUFDeEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLHlDQUF5QztTQUMzRSxDQUFlLENBQ25CLENBQ0YsQ0FDeUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsUUFBdUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBdUIsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQzthQUN2RixJQUFJLENBQ0gsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2pCLFVBQVUsQ0FDUixHQUFHLEVBQUUsQ0FDSCxDQUFDO1lBQ0MsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLGNBQWM7WUFDekMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLGdDQUFnQztTQUNsRSxDQUFlLENBQ25CLENBQ0YsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQXVCLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLDZCQUE2QixFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7YUFDN0YsSUFBSSxDQUNILFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNqQixVQUFVLENBQ1IsR0FBRyxFQUFFLENBQ0gsQ0FBQztZQUNDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksSUFBSSxvQkFBb0I7WUFDL0MsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLGdDQUFnQztTQUNsRSxDQUFlLENBQ25CLENBQ0YsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLDZCQUE2QixDQUFDO2FBQzdFLElBQUksQ0FDSCxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDakIsVUFBVSxDQUNSLEdBQUcsRUFBRSxDQUNILENBQUM7WUFDQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksc0JBQXNCO1lBQ2pELE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSwrQkFBK0I7U0FDakUsQ0FBZSxDQUNuQixDQUNGLENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFRDs7O09BR0c7SUFDSyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUU1RCxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELGdEQUFnRDtZQUNoRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRCxJQUFJLEdBQUcsR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQXNCLENBQUM7WUFDdEQsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFFakMsbUVBQW1FO1lBQ25FLHNFQUFzRTtZQUN0RSxrRUFBa0U7WUFDbEUsSUFBSSxJQUFJLEVBQUUsSUFBSSxLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3BDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMscURBQXFELEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkUsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0sseUJBQXlCO1FBQy9CLElBQUksQ0FBQztZQUNILFlBQVksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMvQyxZQUFZLENBQUMsVUFBVSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDhCQUE4QjtRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssT0FBTztRQUNiLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdCLGFBQWEsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsK0VBQStFO1FBQy9FLDJFQUEyRTtRQUMzRSw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLDJFQUEyRTtRQUM3RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsdUVBQXVFO1FBQ3ZFLHFEQUFxRDtRQUNyRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhO1FBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELHlCQUF5QjtRQUN6QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssWUFBWSxDQUFDLElBQXVCO1FBQzFDLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELG9EQUFvRDtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssb0JBQW9CLENBQUMsSUFBdUI7UUFDbEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztRQUNoRSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDO1FBQ25FLE9BQU8sUUFBUSxJQUFJLFNBQVMsQ0FBQztJQUMvQixDQUFDOytHQXRjVSxZQUFZLGtCQWNELG1CQUFtQjttSEFkOUIsWUFBWSxjQURDLE1BQU07OzRGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBZTdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBOZ1pvbmUsIE9wdGlvbmFsLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBWYWx0ZWNoQXV0aENvbmZpZyxcbiAgT0F1dGhQcm92aWRlcixcbiAgT0F1dGhSZXN1bHQsXG4gIE9BdXRoRXJyb3IsXG4gIE9BdXRoQ2FsbGJhY2tEYXRhLFxuICBMaW5rZWRQcm92aWRlcixcbiAgSGFzUGFzc3dvcmRSZXNwb25zZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBTZXJ2aWNpbyBkZSBPQXV0aCBwYXJhIGxvZ2luIHNvY2lhbC5cbiAqXG4gKiBJbXBsZW1lbnRhIGZsdWpvIE9BdXRoIHNlcnZlci1zaWRlIGNvbiBwb3B1cDpcbiAqIDEuIEZyb250ZW5kIGFicmUgcG9wdXAgaGFjaWEgYmFja2VuZFxuICogMi4gQmFja2VuZCByZWRpcmlnZSBhIHByb3ZpZGVyIChHb29nbGUsIEFwcGxlLCBNaWNyb3NvZnQpXG4gKiAzLiBVc3VhcmlvIGF1dG9yaXphXG4gKiA0LiBCYWNrZW5kIGludGVyY2FtYmlhIGNvZGUsIGdlbmVyYSBKV1QsIHJlZGlyaWdlIGNvbiB0b2tlbnNcbiAqIDUuIFBvcHVwIGVudsOtYSB0b2tlbnMgYSB2ZW50YW5hIHBhZHJlIHZpYSBwb3N0TWVzc2FnZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBPQXV0aFNlcnZpY2UsIEF1dGhTZXJ2aWNlIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBvYXV0aCA9IGluamVjdChPQXV0aFNlcnZpY2UpO1xuICogICBwcml2YXRlIGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICpcbiAqICAgYXN5bmMgbG9naW5XaXRoR29vZ2xlKCkge1xuICogICAgIHRoaXMub2F1dGguc3RhcnRGbG93KCdnb29nbGUnKS5zdWJzY3JpYmUoe1xuICogICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICogICAgICAgICAvLyBUb2tlbnMgcmVjaWJpZG9zLCBndWFyZGFyIGVuIGF1dGggc3RhdGVcbiAqICAgICAgICAgdGhpcy5hdXRoLmhhbmRsZU9BdXRoU3VjY2VzcyhyZXN1bHQpO1xuICogICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gKiAgICAgICB9LFxuICogICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICogICAgICAgICBjb25zb2xlLmVycm9yKCdPQXV0aCBmYWlsZWQ6JywgZXJyb3IpO1xuICogICAgICAgfVxuICogICAgIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBPQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHBvcHVwOiBXaW5kb3cgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZXNzYWdlSGFuZGxlcjogKChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNoZWNrQ2xvc2VkSW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJyb2FkY2FzdENoYW5uZWw6IEJyb2FkY2FzdENoYW5uZWwgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIE5vbmNlIGRlbCBmbHVqbyBPQXV0aCBlbiBjdXJzbyAoTS0wNykuIFZpdmUgU09MTyBlbiBtZW1vcmlhIOKAlCB1biBYU1Mgbm8gbG9cbiAgICogcHVlZGUgbGVlciBkZSBsb2NhbFN0b3JhZ2Uvc2Vzc2lvblN0b3JhZ2UuIFZpYWphIGFsIGJhY2tlbmQgKGNsaWVudF9ub25jZSksXG4gICAqIHZ1ZWx2ZSBlbiBlbCBjYWxsYmFjaywgeSBzZSB2ZXJpZmljYSBhY8OhIOKGkiByZWNoYXphIHVuIG9hdXRoX2NhbGxiYWNrX2RhdGFcbiAgICogZm9yamFkbyBwb3IgWFNTLlxuICAgKi9cbiAgcHJpdmF0ZSBleHBlY3RlZE5vbmNlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQXV0aENvbmZpZyB8IG51bGwsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBJbmljaWEgZmx1am8gT0F1dGggZW4gcG9wdXAuXG4gICAqIFJldG9ybmEgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGVsIHVzdWFyaW8gY29tcGxldGEgZWwgZmx1am8uXG4gICAqXG4gICAqIEBwYXJhbSBwcm92aWRlciAtIFByb3ZlZWRvciBPQXV0aCAoJ2dvb2dsZScsICdhcHBsZScsICdtaWNyb3NvZnQnKVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBPQXV0aFJlc3VsdCBvIGVycm9yXG4gICAqL1xuICBzdGFydEZsb3cocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPE9BdXRoUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIC8vIE5vbmNlIGRlIGZsdWpvIChNLTA3KTogdml2ZSBzb2xvIGVuIGVzdGUgb2JqZXRvIChubyBlbiBzdG9yYWdlKSwgdmlhamFcbiAgICAgIC8vIGFsIGJhY2tlbmQgZW4gY2xpZW50X25vbmNlIHkgdnVlbHZlIGVuIGVsIGNhbGxiYWNrLiBFbCBvcGVuZXIgbG8gdmVyaWZpY2FcbiAgICAgIC8vIOKGkiB1biBvYXV0aF9jYWxsYmFja19kYXRhIGZvcmphZG8gZW4gbG9jYWxTdG9yYWdlIHBvciBYU1Mgbm8gbG8gY29ub2NlLlxuICAgICAgY29uc3Qgbm9uY2UgPSB0aGlzLmdlbmVyYXRlTm9uY2UoKTtcbiAgICAgIHRoaXMuZXhwZWN0ZWROb25jZSA9IG5vbmNlO1xuXG4gICAgICAvLyBwb3B1cD10cnVlIHNvYnJldml2ZSBlbCBib3VuY2UgY3Jvc3Mtb3JpZ2luIChHb29nbGUvTVMgYm9ycmFuIHdpbmRvdy5uYW1lXG4gICAgICAvLyBwb3IgcHJpdmFjaWRhZCkuIEVsIGJhY2tlbmQgbG8gcmVlbnbDrWEgZW4gZWwgcmVkaXJlY3QgZmluYWwgdsOtYSBhcHBlbmRQYXJhbXMuXG4gICAgICBjb25zdCByZWRpcmVjdFVyaSA9IGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2F1dGgvb2F1dGgvY2FsbGJhY2s/cG9wdXA9dHJ1ZWA7XG4gICAgICBjb25zdCBzdGFydFVybCA9IGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvJHtwcm92aWRlcn0vc3RhcnQ/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX0mY2xpZW50X25vbmNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG5vbmNlKX1gO1xuXG4gICAgICAvLyBBYnJpciBwb3B1cCBjZW50cmFkb1xuICAgICAgY29uc3Qgd2lkdGggPSA1MDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSA2MDA7XG4gICAgICBjb25zdCBsZWZ0ID0gd2luZG93LnNjcmVlblggKyAod2luZG93Lm91dGVyV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcmVlblkgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGB3aWR0aD0ke3dpZHRofSxoZWlnaHQ9JHtoZWlnaHR9LGxlZnQ9JHtsZWZ0fSx0b3A9JHt0b3B9LHBvcHVwPXllc2A7XG5cbiAgICAgIHRoaXMucG9wdXAgPSB3aW5kb3cub3BlbihzdGFydFVybCwgJ29hdXRoJywgZmVhdHVyZXMpO1xuXG4gICAgICBpZiAoIXRoaXMucG9wdXApIHtcbiAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgIGNvZGU6ICdQT1BVUF9CTE9DS0VEJyxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgJ0VsIG5hdmVnYWRvciBibG9xdWXDsyBsYSB2ZW50YW5hIGVtZXJnZW50ZS4gUG9yIGZhdm9yLCBwZXJtaXRlIHBvcHVwcyBwYXJhIGVzdGUgc2l0aW8uJyxcbiAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgICAgfVxuXG4gICAgICAvLyBFc2N1Y2hhciBtZW5zYWplcyBkZWwgcG9wdXBcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAvLyBWYWxpZGFyIG9yaWdlblxuICAgICAgICBpZiAoZXZlbnQub3JpZ2luICE9PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhciB0aXBvIGRlIG1lbnNhamVcbiAgICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICAgIGlmIChkYXRhPy50eXBlICE9PSAnb2F1dGgtY2FsbGJhY2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmVyaWZpY2FyIGVsIG5vbmNlIGRlbCBmbHVqbyAoTS0wNyk6IHNpIG5vIGNvaW5jaWRlLCBubyBlcyBudWVzdHJvXG4gICAgICAgIC8vIGNhbGxiYWNrIOKGkiBpZ25vcmFyIChubyBjb25zdW1pciBlbCBvYnNlcnZhYmxlKS5cbiAgICAgICAgaWYgKCF0aGlzLmlzTm9uY2VWYWxpZChkYXRhKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpbXBpYXJcbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG5cbiAgICAgICAgLy8gRW1pdGlyIHJlc3VsdGFkbyBkZW50cm8gZGUgTmdab25lIHBhcmEgdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGRhdGEuZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50b2tlbnMpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YS50b2tlbnMpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRScsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZXNwdWVzdGEgaW52w6FsaWRhIGRlbCBzZXJ2aWRvciBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuXG4gICAgICAvLyBCcm9hZGNhc3RDaGFubmVsOiBjYW5hbCBhZGljaW9uYWwgaW1tdW5lIGEgQ09PUCAoZnVuY2lvbmEgZW50cmUgbWlzbWFcbiAgICAgIC8vIG9yaWdpbiBzaW4gaW1wb3J0YXIgZWwgYnJvd3NpbmcgY29udGV4dCBncm91cCkuIEVzIGVsIGNhbmFsIG3DoXMgZmlhYmxlXG4gICAgICAvLyBjdWFuZG8gQ09PUCBzZXZlciBlbCBsaW5rIG9wZW5lcuKGknBvcHVwIGFsIHBhc2FyIHBvciBHb29nbGUvTVMuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbCgndmFsdGVjaC1vYXV0aC1jYWxsYmFjaycpO1xuICAgICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YSBhcyBPQXV0aENhbGxiYWNrRGF0YTtcbiAgICAgICAgICBpZiAoZGF0YT8udHlwZSAhPT0gJ29hdXRoLWNhbGxiYWNrJykgcmV0dXJuO1xuICAgICAgICAgIGlmICghdGhpcy5pc05vbmNlVmFsaWQoZGF0YSkpIHJldHVybjtcbiAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZGF0YS5lcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudG9rZW5zKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZGF0YS50b2tlbnMpO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzcHVlc3RhIGludsOhbGlkYSBkZWwgc2Vydmlkb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEJyb2FkY2FzdENoYW5uZWwgbm8gZGlzcG9uaWJsZSAoY29udGV4dG9zIG11eSByZXN0cmluZ2lkb3MpIOKAlCBpZ25vcmFyXG4gICAgICB9XG5cbiAgICAgIC8vIFBvbGxpbmcgZGUgbG9jYWxTdG9yYWdlIChDT09QIHdvcmthcm91bmQgLSBubyBwb2RlbW9zIGRldGVjdGFyIHBvcHVwLmNsb3NlZClcbiAgICAgIC8vIFRhbWJpw6luIHZlcmlmaWNhIHNpIGVsIHBvcHVwIHNlIGNlcnLDsyBtYW51YWxtZW50ZVxuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAvLyBQcmltZXJvIHZlcmlmaWNhciBsb2NhbFN0b3JhZ2UgKGZ1bmNpb25hIGF1bnF1ZSBDT09QIGJsb3F1ZWUgdG9kbylcbiAgICAgICAgY29uc3Qgc3RvcmVkRGF0YSA9IHRoaXMuY2hlY2tMb2NhbFN0b3JhZ2VGYWxsYmFjaygpO1xuICAgICAgICBpZiAoc3RvcmVkRGF0YSkge1xuICAgICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RvcmVkRGF0YS5lcnJvcikge1xuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihzdG9yZWREYXRhLmVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcmVkRGF0YS50b2tlbnMpIHtcbiAgICAgICAgICAgICAgLy8gR2F0ZSBkZSBkaWFnbsOzc3RpY286IGxhIG1ldGFkYXRhIGRlIHRva2VucyAoa2V5cywgcHJlc2VuY2lhIHlcbiAgICAgICAgICAgICAgLy8gbG9uZ2l0dWQgZGVsIGZpcmViYXNlVG9rZW4pIG5vIGRlYmUgZmlsdHJhcnNlIGEgbGEgY29uc29sYSBlblxuICAgICAgICAgICAgICAvLyBwcm9kdWNjacOzbiAoTDQgZGVsIGF1ZGl0KS4gU29sbyBlbiBkZXYuXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbT0F1dGhTZXJ2aWNlXSBSZXRyaWV2ZWQgdG9rZW5zIGZyb20gbG9jYWxTdG9yYWdlIGZhbGxiYWNrJywge1xuICAgICAgICAgICAgICAgICAga2V5czogT2JqZWN0LmtleXMoc3RvcmVkRGF0YS50b2tlbnMpLFxuICAgICAgICAgICAgICAgICAgaGFzRmlyZWJhc2VUb2tlbjogISFzdG9yZWREYXRhLnRva2Vucy5maXJlYmFzZVRva2VuLFxuICAgICAgICAgICAgICAgICAgZmlyZWJhc2VUb2tlbkxlbmd0aDogc3RvcmVkRGF0YS50b2tlbnMuZmlyZWJhc2VUb2tlbj8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChzdG9yZWREYXRhLnRva2Vucyk7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgICAgY29kZTogJ0lOVkFMSURfUkVTUE9OU0UnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdSZXNwdWVzdGEgaW52w6FsaWRhIGRlbCBzZXJ2aWRvciBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW50ZW50YXIgdmVyaWZpY2FyIHNpIHBvcHVwIHNlIGNlcnLDsyAocHVlZGUgZmFsbGFyIHBvciBDT09QKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh0aGlzLnBvcHVwPy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6ICdQT1BVUF9DTE9TRUQnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdTZSBjZXJyw7MgbGEgdmVudGFuYSBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIENPT1AgYmxvcXVlYSBhY2Nlc28gYSBwb3B1cC5jbG9zZWQgLSBpZ25vcmFyIHkgc2VndWlyIGNvbiBwb2xsaW5nXG4gICAgICAgIH1cbiAgICAgIH0sIDMwMCk7XG5cbiAgICAgIC8vIENsZWFudXAgY3VhbmRvIGVsIG9ic2VydmFibGUgc2UgZGVzdHJ1eWVcbiAgICAgIHJldHVybiAoKSA9PiB0aGlzLmNsZWFudXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmljaWEgZmx1am8gZGUgbGlua2luZyBwYXJhIHZpbmN1bGFyIHVuIHByb3ZlZWRvciBhZGljaW9uYWwuXG4gICAqIFJlcXVpZXJlIHF1ZSBlbCB1c3VhcmlvIGVzdMOpIGF1dGVudGljYWRvLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvdmlkZXIgLSBQcm92ZWVkb3IgT0F1dGggYSB2aW5jdWxhclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBjdWFuZG8gc2UgY29tcGxldGEgZWwgbGlua2luZ1xuICAgKi9cbiAgc3RhcnRMaW5rRmxvdyhwcm92aWRlcjogT0F1dGhQcm92aWRlcik6IE9ic2VydmFibGU8T0F1dGhSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hdXRoL29hdXRoL2NhbGxiYWNrP3BvcHVwPXRydWVgO1xuICAgICAgY29uc3Qgc3RhcnRVcmwgPSBgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL2xpbmsvJHtwcm92aWRlcn0vc3RhcnQ/cmVkaXJlY3RfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJpKX1gO1xuXG4gICAgICBjb25zdCB3aWR0aCA9IDUwMDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IDYwMDtcbiAgICAgIGNvbnN0IGxlZnQgPSB3aW5kb3cuc2NyZWVuWCArICh3aW5kb3cub3V0ZXJXaWR0aCAtIHdpZHRoKSAvIDI7XG4gICAgICBjb25zdCB0b3AgPSB3aW5kb3cuc2NyZWVuWSArICh3aW5kb3cub3V0ZXJIZWlnaHQgLSBoZWlnaHQpIC8gMjtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gYHdpZHRoPSR7d2lkdGh9LGhlaWdodD0ke2hlaWdodH0sbGVmdD0ke2xlZnR9LHRvcD0ke3RvcH0scG9wdXA9eWVzYDtcblxuICAgICAgdGhpcy5wb3B1cCA9IHdpbmRvdy5vcGVuKHN0YXJ0VXJsLCAnb2F1dGgtbGluaycsIGZlYXR1cmVzKTtcblxuICAgICAgaWYgKCF0aGlzLnBvcHVwKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICBjb2RlOiAnUE9QVVBfQkxPQ0tFRCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0VsIG5hdmVnYWRvciBibG9xdWXDsyBsYSB2ZW50YW5hIGVtZXJnZW50ZScsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7fTsgLy8gY2xlYW51cCBmdW5jdGlvblxuICAgICAgfVxuXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhIGFzIE9BdXRoQ2FsbGJhY2tEYXRhO1xuICAgICAgICBpZiAoZGF0YT8udHlwZSAhPT0gJ29hdXRoLWNhbGxiYWNrJykgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGRhdGEuZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEudG9rZW5zIHx8ICh7fSBhcyBPQXV0aFJlc3VsdCkpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcblxuICAgICAgdGhpcy5jaGVja0Nsb3NlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wb3B1cD8uY2xvc2VkKSB7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgY29kZTogJ1BPUFVQX0NMT1NFRCcsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdTZSBjZXJyw7MgbGEgdmVudGFuYSBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCA1MDApO1xuXG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5jbGVhbnVwKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsb3MgcHJvdmVlZG9yZXMgT0F1dGggdmluY3VsYWRvcyBhbCB1c3VhcmlvLlxuICAgKi9cbiAgZ2V0TGlua2VkUHJvdmlkZXJzKCk6IE9ic2VydmFibGU8TGlua2VkUHJvdmlkZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8eyBwcm92aWRlcnM6IExpbmtlZFByb3ZpZGVyW10gfT4oYCR7dGhpcy5jb25maWc/LmFwaVVybH0vdjIvYXV0aC9vYXV0aC9wcm92aWRlcnNgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT5cbiAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnRkVUQ0hfRVJST1InLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBvYnRlbmVyIHByb3ZlZWRvcmVzIHZpbmN1bGFkb3MnLFxuICAgICAgICAgICAgICB9KSBhcyBPQXV0aEVycm9yXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIGFzIHVua25vd24gYXMgT2JzZXJ2YWJsZTxMaW5rZWRQcm92aWRlcltdPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN2aW5jdWxhIHVuIHByb3ZlZWRvciBPQXV0aC5cbiAgICovXG4gIHVubGlua1Byb3ZpZGVyKHByb3ZpZGVyOiBPQXV0aFByb3ZpZGVyKTogT2JzZXJ2YWJsZTx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgc3VjY2VzczogYm9vbGVhbiB9PihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL3VubGlua2AsIHsgcHJvdmlkZXIgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ1VOTElOS19FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGRlc3ZpbmN1bGFyIHByb3ZlZWRvcicsXG4gICAgICAgICAgICAgIH0pIGFzIE9BdXRoRXJyb3JcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRXN0YWJsZWNlIGNvbnRyYXNlw7FhIHBhcmEgdXN1YXJpb3MgcXVlIHNvbG8gdGllbmVuIE9BdXRoLlxuICAgKi9cbiAgc2V0UGFzc3dvcmQocGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8eyBzdWNjZXNzOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4oYCR7dGhpcy5jb25maWc/LmFwaVVybH0vdjIvYXV0aC9vYXV0aC9zZXQtcGFzc3dvcmRgLCB7IHBhc3N3b3JkIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PlxuICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdTRVRfUEFTU1dPUkRfRVJST1InLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBlc3RhYmxlY2VyIGNvbnRyYXNlw7FhJyxcbiAgICAgICAgICAgICAgfSkgYXMgT0F1dGhFcnJvclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmljYSBzaSBlbCB1c3VhcmlvIHRpZW5lIGNvbnRyYXNlw7FhIGVzdGFibGVjaWRhLlxuICAgKi9cbiAgaGFzUGFzc3dvcmQoKTogT2JzZXJ2YWJsZTxIYXNQYXNzd29yZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxIYXNQYXNzd29yZFJlc3BvbnNlPihgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoL2hhcy1wYXNzd29yZGApXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PlxuICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdDSEVDS19QQVNTV09SRF9FUlJPUicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIHZlcmlmaWNhciBjb250cmFzZcOxYScsXG4gICAgICAgICAgICAgIH0pIGFzIE9BdXRoRXJyb3JcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV2aXNhIGxvY2FsU3RvcmFnZSBwb3IgZGF0b3MgZGUgY2FsbGJhY2sgT0F1dGggKGZhbGxiYWNrIHBhcmEgQ09PUCkuXG4gICAqIFNvbG8gYWNlcHRhIGRhdG9zIHJlY2llbnRlcyAow7psdGltb3MgMzAgc2VndW5kb3MpLlxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0xvY2FsU3RvcmFnZUZhbGxiYWNrKCk6IE9BdXRoQ2FsbGJhY2tEYXRhIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdvYXV0aF9jYWxsYmFja190aW1lc3RhbXAnKTtcbiAgICAgIGNvbnN0IGRhdGFTdHIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb2F1dGhfY2FsbGJhY2tfZGF0YScpO1xuXG4gICAgICBpZiAoIXRpbWVzdGFtcCB8fCAhZGF0YVN0cikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU29sbyBhY2VwdGFyIGRhdG9zIGRlIGxvcyDDumx0aW1vcyAzMCBzZWd1bmRvc1xuICAgICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIHBhcnNlSW50KHRpbWVzdGFtcCwgMTApO1xuICAgICAgaWYgKGFnZSA+IDMwMDAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbT0F1dGhTZXJ2aWNlXSBsb2NhbFN0b3JhZ2UgZGF0YSB0b28gb2xkLCBpZ25vcmluZycpO1xuICAgICAgICB0aGlzLmNsZWFyTG9jYWxTdG9yYWdlRmFsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpIGFzIE9BdXRoQ2FsbGJhY2tEYXRhO1xuICAgICAgdGhpcy5jbGVhckxvY2FsU3RvcmFnZUZhbGxiYWNrKCk7XG5cbiAgICAgIC8vIEVsIGNhbWlubyBsb2NhbFN0b3JhZ2UgZXMgZWwgcXVlIHVuIFhTUyBwb2Ryw61hIGZvcmphciAoTS0wNykuIEVsXG4gICAgICAvLyBwb3N0TWVzc2FnZSB5YSB2YWxpZGEgb3JpZ2luICsgdGlwbzsgYWPDoSByZXBsaWNhbW9zIGVzYXMgZGVmZW5zYXMgeVxuICAgICAgLy8gc3VtYW1vcyBsYSB2ZXJpZmljYWNpw7NuIGRlbCBub25jZSBkZSBmbHVqbyArIGZvcm1hIGRlbCBwYXlsb2FkLlxuICAgICAgaWYgKGRhdGE/LnR5cGUgIT09ICdvYXV0aC1jYWxsYmFjaycpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNOb25jZVZhbGlkKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzQ2FsbGJhY2tTaGFwZVZhbGlkKGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tPQXV0aFNlcnZpY2VdIEVycm9yIHJlYWRpbmcgbG9jYWxTdG9yYWdlIGZhbGxiYWNrOicsIGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSBkYXRvcyBkZSBmYWxsYmFjayBkZSBsb2NhbFN0b3JhZ2UuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyTG9jYWxTdG9yYWdlRmFsbGJhY2soKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdvYXV0aF9jYWxsYmFja19kYXRhJyk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb2F1dGhfY2FsbGJhY2tfdGltZXN0YW1wJyk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmFyIGVycm9yZXMgZGUgbGltcGllemFcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGltcGlhIHJlY3Vyc29zIGRlbCBwb3B1cC5cbiAgICovXG4gIHByaXZhdGUgY2xlYW51cCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jaGVja0Nsb3NlZEludGVydmFsKTtcbiAgICAgIHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCkge1xuICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsLmNsb3NlKCk7XG4gICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIENPT1AgKEdvb2dsZSB1c2Egc2FtZS1vcmlnaW4pIHB1ZWRlIHNldmVyYXIgbGEgQkNHIGRlbCBwb3B1cCDihpIgYWNjZWRlciBhXG4gICAgLy8gcG9wdXAuY2xvc2VkIG8gbGxhbWFyIHBvcHVwLmNsb3NlKCkgbGFuemEgU2VjdXJpdHlFcnJvci4gU2luIGVzdGUgdHJ5L2NhdGNoLFxuICAgIC8vIGNsZWFudXAoKSB0aXJhLCBuZ1pvbmUucnVuKCkgbnVuY2Egc2UgbGxhbWEgeSBlbCBvYnNlcnZlciBubyBlbWl0ZSDihpIgc2luXG4gICAgLy8gbmF2ZWdhY2nDs24gcG9zdC1sb2dpbiAoYnVnIGludGVybWl0ZW50ZSkuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnBvcHVwICYmICF0aGlzLnBvcHVwLmNsb3NlZCkge1xuICAgICAgICB0aGlzLnBvcHVwLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBDcm9zcy1CQ0cgcG9yIENPT1A6IGlnbm9yYXIsIGVsIHBvcHVwIHNlIGNpZXJyYSBzb2xvIHbDrWEgY2xvc2VBZnRlckRlbGF5XG4gICAgfVxuICAgIHRoaXMucG9wdXAgPSBudWxsO1xuICAgIC8vIEVsIG5vbmNlIHlhIGZ1ZSB2ZXJpZmljYWRvIChzaSBjb3JyZXNwb25kw61hKSBhbnRlcyBkZSBsbGVnYXIgYWPDoTsgc2VcbiAgICAvLyBsaW1waWEgcGFyYSBubyByZXVzYXJsbyBlbiB1biBmbHVqbyBmdXR1cm8gKE0tMDcpLlxuICAgIHRoaXMuZXhwZWN0ZWROb25jZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIHVuIG5vbmNlIGFsZWF0b3JpbyAoQ1NQUk5HKSB1cmwtc2FmZSBwYXJhIGVsIGZsdWpvIE9BdXRoIChNLTA3KS5cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVOb25jZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYnl0ZXMpO1xuICAgIGxldCBiaW4gPSAnJztcbiAgICBieXRlcy5mb3JFYWNoKGIgPT4gKGJpbiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGIpKSk7XG4gICAgLy8gYmFzZTY0dXJsIHNpbiBwYWRkaW5nLlxuICAgIHJldHVybiBidG9hKGJpbikucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJykucmVwbGFjZSgvPSskLywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHF1ZSBlbCBjYWxsYmFjayB0cmFpZ2EgZWwgbm9uY2UgZGVsIGZsdWpvIGFjdHVhbCAoTS0wNykuXG4gICAqXG4gICAqIFRvbGVyYW50ZSBhIGxhIHRyYW5zaWNpw7NuOiBzb2xvIHNlIEVYSUdFIGNvaW5jaWRlbmNpYSBjdWFuZG8gZWwgY2FsbGJhY2tcbiAgICogdHJhZSB1biBub25jZS4gU2kgbm8gbG8gdHJhZSAoYmFja2VuZCBhw7puIHNpbiBNLTA3IGRlc3BsZWdhZG8sIHAuZWouIGRldiksIG5vXG4gICAqIHNlIGJsb3F1ZWEgZWwgbG9naW4uIEN1YW5kbyBlbCBiYWNrZW5kIGVjaGEgYGNsaWVudF9ub25jZWAgZW4gdG9kb3MgbGFkb3MsIHVuXG4gICAqIGNhbGxiYWNrIGZvcmphZG8gY29uIHVuIG5vbmNlIGRpc3RpbnRvIHPDrSBzZSByZWNoYXphLiBVbiBwYXlsb2FkIGZvcmphZG8gcG9yXG4gICAqIFhTUyBxdWUgT01JVEEgZWwgbm9uY2Ugbm8gc2UgZnJlbmEgcG9yIGFjw6EsIHBlcm8gaWd1YWwgcGFzYSBwb3IgbGFzXG4gICAqIHZhbGlkYWNpb25lcyBkZSB0aXBvL2Zvcm1hIGRlIGBjaGVja0xvY2FsU3RvcmFnZUZhbGxiYWNrYC5cbiAgICovXG4gIHByaXZhdGUgaXNOb25jZVZhbGlkKGRhdGE6IE9BdXRoQ2FsbGJhY2tEYXRhKTogYm9vbGVhbiB7XG4gICAgLy8gTm8gaGF5IGZsdWpvIGNvbiBub25jZSBhY3Rpdm8gKGxlZ2FjeSAvIGxpbmsgZmxvdykg4oaSIG5vIGJsb3F1ZWFyLlxuICAgIGlmICghdGhpcy5leHBlY3RlZE5vbmNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRWwgY2FsbGJhY2sgbm8gdHJhZSBub25jZSAoYmFja2VuZCBzaW4gTS0wNykg4oaSIG5vIGJsb3F1ZWFyICh0cmFuc2ljacOzbikuXG4gICAgaWYgKCFkYXRhPy5ub25jZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIE5vbmNlIHByZXNlbnRlIOKGkiBkZWJlIGNvaW5jaWRpciBjb24gZWwgZGVsIGZsdWpvLlxuICAgIHJldHVybiBkYXRhLm5vbmNlID09PSB0aGlzLmV4cGVjdGVkTm9uY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhIGxhIGZvcm1hIGRlbCBwYXlsb2FkIGRlbCBjYWxsYmFjayAoTS0wNyk6IGRlYmUgc2VyIHVuIGVycm9yIG8gdG9rZW5zXG4gICAqIGNvbW8gb2JqZXRvLiBCbG9xdWVhIGlueWVjY2lvbmVzIG1hbGZvcm1hZGFzIChwcmltaXRpdm9zLCBzaGFwZXMgYmFzdXJhKS5cbiAgICovXG4gIHByaXZhdGUgaXNDYWxsYmFja1NoYXBlVmFsaWQoZGF0YTogT0F1dGhDYWxsYmFja0RhdGEpOiBib29sZWFuIHtcbiAgICBjb25zdCBoYXNFcnJvciA9ICEhZGF0YS5lcnJvciAmJiB0eXBlb2YgZGF0YS5lcnJvciA9PT0gJ29iamVjdCc7XG4gICAgY29uc3QgaGFzVG9rZW5zID0gISFkYXRhLnRva2VucyAmJiB0eXBlb2YgZGF0YS50b2tlbnMgPT09ICdvYmplY3QnO1xuICAgIHJldHVybiBoYXNFcnJvciB8fCBoYXNUb2tlbnM7XG4gIH1cbn1cbiJdfQ==
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXV0aC9vYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFVLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBVyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBVy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ0c7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQWF2QixZQUNtRCxNQUFnQyxFQUN6RSxJQUFnQixFQUNoQixNQUFjO1FBRjJCLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBQ3pFLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQWZoQixVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixtQkFBYyxHQUEyQyxJQUFJLENBQUM7UUFDOUQsd0JBQW1CLEdBQTBDLElBQUksQ0FBQztRQUNsRSxxQkFBZ0IsR0FBNEIsSUFBSSxDQUFDO1FBQ3pEOzs7OztXQUtHO1FBQ0ssa0JBQWEsR0FBa0IsSUFBSSxDQUFDO0lBTXpDLENBQUM7SUFFSjs7Ozs7O09BTUc7SUFDSCxTQUFTLENBQUMsUUFBdUI7UUFDL0IsT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMvQix5RUFBeUU7WUFDekUsNEVBQTRFO1lBQzVFLHlFQUF5RTtZQUN6RSxzRUFBc0U7WUFDdEUsd0VBQXdFO1lBQ3hFLDZFQUE2RTtZQUM3RSxnRkFBZ0Y7WUFDaEYsSUFBSSxDQUFDLHlCQUF5QixF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QUssRUFBRSxDQUFDO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELG9EQUFvRDtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssb0JBQW9CLENBQUMsSUFBdUI7UUFDbEQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztRQUNoRSxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDO1FBQ25FLE9BQU8sUUFBUSxJQUFJLFNBQVMsQ0FBQztJQUMvQixDQUFDOytHQWhkVSxZQUFZLGtCQWNELG1CQUFtQjttSEFkOUIsWUFBWSxjQURDLE1BQU07OzRGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBZTdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0LCBOZ1pvbmUsIE9wdGlvbmFsLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBWYWx0ZWNoQXV0aENvbmZpZyxcbiAgT0F1dGhQcm92aWRlcixcbiAgT0F1dGhSZXN1bHQsXG4gIE9BdXRoRXJyb3IsXG4gIE9BdXRoQ2FsbGJhY2tEYXRhLFxuICBMaW5rZWRQcm92aWRlcixcbiAgSGFzUGFzc3dvcmRSZXNwb25zZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBTZXJ2aWNpbyBkZSBPQXV0aCBwYXJhIGxvZ2luIHNvY2lhbC5cbiAqXG4gKiBJbXBsZW1lbnRhIGZsdWpvIE9BdXRoIHNlcnZlci1zaWRlIGNvbiBwb3B1cDpcbiAqIDEuIEZyb250ZW5kIGFicmUgcG9wdXAgaGFjaWEgYmFja2VuZFxuICogMi4gQmFja2VuZCByZWRpcmlnZSBhIHByb3ZpZGVyIChHb29nbGUsIEFwcGxlLCBNaWNyb3NvZnQpXG4gKiAzLiBVc3VhcmlvIGF1dG9yaXphXG4gKiA0LiBCYWNrZW5kIGludGVyY2FtYmlhIGNvZGUsIGdlbmVyYSBKV1QsIHJlZGlyaWdlIGNvbiB0b2tlbnNcbiAqIDUuIFBvcHVwIGVudsOtYSB0b2tlbnMgYSB2ZW50YW5hIHBhZHJlIHZpYSBwb3N0TWVzc2FnZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBPQXV0aFNlcnZpY2UsIEF1dGhTZXJ2aWNlIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBAQ29tcG9uZW50KHsuLi59KVxuICogZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IHtcbiAqICAgcHJpdmF0ZSBvYXV0aCA9IGluamVjdChPQXV0aFNlcnZpY2UpO1xuICogICBwcml2YXRlIGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICpcbiAqICAgYXN5bmMgbG9naW5XaXRoR29vZ2xlKCkge1xuICogICAgIHRoaXMub2F1dGguc3RhcnRGbG93KCdnb29nbGUnKS5zdWJzY3JpYmUoe1xuICogICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xuICogICAgICAgICAvLyBUb2tlbnMgcmVjaWJpZG9zLCBndWFyZGFyIGVuIGF1dGggc3RhdGVcbiAqICAgICAgICAgdGhpcy5hdXRoLmhhbmRsZU9BdXRoU3VjY2VzcyhyZXN1bHQpO1xuICogICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gKiAgICAgICB9LFxuICogICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICogICAgICAgICBjb25zb2xlLmVycm9yKCdPQXV0aCBmYWlsZWQ6JywgZXJyb3IpO1xuICogICAgICAgfVxuICogICAgIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBPQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHBvcHVwOiBXaW5kb3cgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZXNzYWdlSGFuZGxlcjogKChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNoZWNrQ2xvc2VkSW50ZXJ2YWw6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJyb2FkY2FzdENoYW5uZWw6IEJyb2FkY2FzdENoYW5uZWwgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIE5vbmNlIGRlbCBmbHVqbyBPQXV0aCBlbiBjdXJzbyAoTS0wNykuIFZpdmUgU09MTyBlbiBtZW1vcmlhIOKAlCB1biBYU1Mgbm8gbG9cbiAgICogcHVlZGUgbGVlciBkZSBsb2NhbFN0b3JhZ2Uvc2Vzc2lvblN0b3JhZ2UuIFZpYWphIGFsIGJhY2tlbmQgKGNsaWVudF9ub25jZSksXG4gICAqIHZ1ZWx2ZSBlbiBlbCBjYWxsYmFjaywgeSBzZSB2ZXJpZmljYSBhY8OhIOKGkiByZWNoYXphIHVuIG9hdXRoX2NhbGxiYWNrX2RhdGFcbiAgICogZm9yamFkbyBwb3IgWFNTLlxuICAgKi9cbiAgcHJpdmF0ZSBleHBlY3RlZE5vbmNlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQXV0aENvbmZpZyB8IG51bGwsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBJbmljaWEgZmx1am8gT0F1dGggZW4gcG9wdXAuXG4gICAqIFJldG9ybmEgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGVsIHVzdWFyaW8gY29tcGxldGEgZWwgZmx1am8uXG4gICAqXG4gICAqIEBwYXJhbSBwcm92aWRlciAtIFByb3ZlZWRvciBPQXV0aCAoJ2dvb2dsZScsICdhcHBsZScsICdtaWNyb3NvZnQnKVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHF1ZSBlbWl0ZSBPQXV0aFJlc3VsdCBvIGVycm9yXG4gICAqL1xuICBzdGFydEZsb3cocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPE9BdXRoUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIC8vIE5vbmNlIGRlIGZsdWpvIChNLTA3KTogdml2ZSBzb2xvIGVuIGVzdGUgb2JqZXRvIChubyBlbiBzdG9yYWdlKSwgdmlhamFcbiAgICAgIC8vIGFsIGJhY2tlbmQgZW4gY2xpZW50X25vbmNlIHkgdnVlbHZlIGVuIGVsIGNhbGxiYWNrLiBFbCBvcGVuZXIgbG8gdmVyaWZpY2FcbiAgICAgIC8vIOKGkiB1biBvYXV0aF9jYWxsYmFja19kYXRhIGZvcmphZG8gZW4gbG9jYWxTdG9yYWdlIHBvciBYU1Mgbm8gbG8gY29ub2NlLlxuICAgICAgLy8gTGltcGlhciBkYXRvcyBzdGFsZSBkZSBpbnRlbnRvcyBhbnRlcmlvcmVzIEFOVEVTIGRlIGFicmlyIGVsIHBvcHVwLlxuICAgICAgLy8gU2luIGVzdG8sIHVuIGludGVudG8gcHJldmlvIGZhbGxpZG8gZGVqYSBkYXRvcyBlbiBsb2NhbFN0b3JhZ2UgcXVlIGVsXG4gICAgICAvLyBpbnRlcnZhbG8gZGUgZXN0ZSBpbnRlbnRvIGVuY3VlbnRyYSBpbm1lZGlhdGFtZW50ZSBjb21vIFwiZGVtYXNpYWRvIHZpZWpvc1wiXG4gICAgICAvLyB5IGRlc2NhcnRhLCBpbXBpZGllbmRvIHF1ZSBsb3MgZGF0b3MgZnJlc2NvcyBkZWwgbnVldm8gcG9wdXAgc2VhbiBkZXRlY3RhZG9zLlxuICAgICAgdGhpcy5jbGVhckxvY2FsU3RvcmFnZUZhbGxiYWNrKCk7XG5cbiAgICAgIGNvbnN0IG5vbmNlID0gdGhpcy5nZW5lcmF0ZU5vbmNlKCk7XG4gICAgICB0aGlzLmV4cGVjdGVkTm9uY2UgPSBub25jZTtcblxuICAgICAgLy8gcG9wdXA9dHJ1ZSBzb2JyZXZpdmUgZWwgYm91bmNlIGNyb3NzLW9yaWdpbiAoR29vZ2xlL01TIGJvcnJhbiB3aW5kb3cubmFtZVxuICAgICAgLy8gcG9yIHByaXZhY2lkYWQpLiBFbCBiYWNrZW5kIGxvIHJlZW52w61hIGVuIGVsIHJlZGlyZWN0IGZpbmFsIHbDrWEgYXBwZW5kUGFyYW1zLlxuICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9hdXRoL29hdXRoL2NhbGxiYWNrP3BvcHVwPXRydWVgO1xuICAgICAgY29uc3Qgc3RhcnRVcmwgPSBgJHt0aGlzLmNvbmZpZz8uYXBpVXJsfS92Mi9hdXRoL29hdXRoLyR7cHJvdmlkZXJ9L3N0YXJ0P3JlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVyaSl9JmNsaWVudF9ub25jZT0ke2VuY29kZVVSSUNvbXBvbmVudChub25jZSl9YDtcblxuICAgICAgLy8gQWJyaXIgcG9wdXAgY2VudHJhZG9cbiAgICAgIGNvbnN0IHdpZHRoID0gNTAwO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gNjAwO1xuICAgICAgY29uc3QgbGVmdCA9IHdpbmRvdy5zY3JlZW5YICsgKHdpbmRvdy5vdXRlcldpZHRoIC0gd2lkdGgpIC8gMjtcbiAgICAgIGNvbnN0IHRvcCA9IHdpbmRvdy5zY3JlZW5ZICsgKHdpbmRvdy5vdXRlckhlaWdodCAtIGhlaWdodCkgLyAyO1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBgd2lkdGg9JHt3aWR0aH0saGVpZ2h0PSR7aGVpZ2h0fSxsZWZ0PSR7bGVmdH0sdG9wPSR7dG9wfSxwb3B1cD15ZXNgO1xuXG4gICAgICB0aGlzLnBvcHVwID0gd2luZG93Lm9wZW4oc3RhcnRVcmwsICdvYXV0aCcsIGZlYXR1cmVzKTtcblxuICAgICAgaWYgKCF0aGlzLnBvcHVwKSB7XG4gICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICBjb2RlOiAnUE9QVVBfQkxPQ0tFRCcsXG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICdFbCBuYXZlZ2Fkb3IgYmxvcXVlw7MgbGEgdmVudGFuYSBlbWVyZ2VudGUuIFBvciBmYXZvciwgcGVybWl0ZSBwb3B1cHMgcGFyYSBlc3RlIHNpdGlvLicsXG4gICAgICAgIH0gYXMgT0F1dGhFcnJvcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICAgIH1cblxuICAgICAgLy8gRXNjdWNoYXIgbWVuc2FqZXMgZGVsIHBvcHVwXG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgICAgLy8gVmFsaWRhciBvcmlnZW5cbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbiAhPT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXIgdGlwbyBkZSBtZW5zYWplXG4gICAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhIGFzIE9BdXRoQ2FsbGJhY2tEYXRhO1xuICAgICAgICBpZiAoZGF0YT8udHlwZSAhPT0gJ29hdXRoLWNhbGxiYWNrJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZlcmlmaWNhciBlbCBub25jZSBkZWwgZmx1am8gKE0tMDcpOiBzaSBubyBjb2luY2lkZSwgbm8gZXMgbnVlc3Ryb1xuICAgICAgICAvLyBjYWxsYmFjayDihpIgaWdub3JhciAobm8gY29uc3VtaXIgZWwgb2JzZXJ2YWJsZSkuXG4gICAgICAgIGlmICghdGhpcy5pc05vbmNlVmFsaWQoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMaW1waWFyXG4gICAgICAgIHRoaXMuY2xlYW51cCgpO1xuXG4gICAgICAgIC8vIEVtaXRpciByZXN1bHRhZG8gZGVudHJvIGRlIE5nWm9uZSBwYXJhIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudG9rZW5zKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEudG9rZW5zKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgY29kZTogJ0lOVkFMSURfUkVTUE9OU0UnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzcHVlc3RhIGludsOhbGlkYSBkZWwgc2Vydmlkb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcblxuICAgICAgLy8gQnJvYWRjYXN0Q2hhbm5lbDogY2FuYWwgYWRpY2lvbmFsIGltbXVuZSBhIENPT1AgKGZ1bmNpb25hIGVudHJlIG1pc21hXG4gICAgICAvLyBvcmlnaW4gc2luIGltcG9ydGFyIGVsIGJyb3dzaW5nIGNvbnRleHQgZ3JvdXApLiBFcyBlbCBjYW5hbCBtw6FzIGZpYWJsZVxuICAgICAgLy8gY3VhbmRvIENPT1Agc2V2ZXIgZWwgbGluayBvcGVuZXLihpJwb3B1cCBhbCBwYXNhciBwb3IgR29vZ2xlL01TLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoJ3ZhbHRlY2gtb2F1dGgtY2FsbGJhY2snKTtcbiAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsLm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgT0F1dGhDYWxsYmFja0RhdGE7XG4gICAgICAgICAgaWYgKGRhdGE/LnR5cGUgIT09ICdvYXV0aC1jYWxsYmFjaycpIHJldHVybjtcbiAgICAgICAgICBpZiAoIXRoaXMuaXNOb25jZVZhbGlkKGRhdGEpKSByZXR1cm47XG4gICAgICAgICAgdGhpcy5jbGVhckxvY2FsU3RvcmFnZUZhbGxiYWNrKCk7XG4gICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnRva2Vucykge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGRhdGEudG9rZW5zKTtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICBjb2RlOiAnSU5WQUxJRF9SRVNQT05TRScsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1Jlc3B1ZXN0YSBpbnbDoWxpZGEgZGVsIHNlcnZpZG9yIGRlIGF1dGVudGljYWNpw7NuJyxcbiAgICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBCcm9hZGNhc3RDaGFubmVsIG5vIGRpc3BvbmlibGUgKGNvbnRleHRvcyBtdXkgcmVzdHJpbmdpZG9zKSDigJQgaWdub3JhclxuICAgICAgfVxuXG4gICAgICAvLyBQb2xsaW5nIGRlIGxvY2FsU3RvcmFnZSAoQ09PUCB3b3JrYXJvdW5kIC0gbm8gcG9kZW1vcyBkZXRlY3RhciBwb3B1cC5jbG9zZWQpXG4gICAgICAvLyBUYW1iacOpbiB2ZXJpZmljYSBzaSBlbCBwb3B1cCBzZSBjZXJyw7MgbWFudWFsbWVudGVcbiAgICAgIHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgLy8gUHJpbWVybyB2ZXJpZmljYXIgbG9jYWxTdG9yYWdlIChmdW5jaW9uYSBhdW5xdWUgQ09PUCBibG9xdWVlIHRvZG8pXG4gICAgICAgIGNvbnN0IHN0b3JlZERhdGEgPSB0aGlzLmNoZWNrTG9jYWxTdG9yYWdlRmFsbGJhY2soKTtcbiAgICAgICAgaWYgKHN0b3JlZERhdGEpIHtcbiAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3JlZERhdGEuZXJyb3IpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioc3RvcmVkRGF0YS5lcnJvcik7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0b3JlZERhdGEudG9rZW5zKSB7XG4gICAgICAgICAgICAgIC8vIEdhdGUgZGUgZGlhZ27Ds3N0aWNvOiBsYSBtZXRhZGF0YSBkZSB0b2tlbnMgKGtleXMsIHByZXNlbmNpYSB5XG4gICAgICAgICAgICAgIC8vIGxvbmdpdHVkIGRlbCBmaXJlYmFzZVRva2VuKSBubyBkZWJlIGZpbHRyYXJzZSBhIGxhIGNvbnNvbGEgZW5cbiAgICAgICAgICAgICAgLy8gcHJvZHVjY2nDs24gKEw0IGRlbCBhdWRpdCkuIFNvbG8gZW4gZGV2LlxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW09BdXRoU2VydmljZV0gUmV0cmlldmVkIHRva2VucyBmcm9tIGxvY2FsU3RvcmFnZSBmYWxsYmFjaycsIHtcbiAgICAgICAgICAgICAgICAgIGtleXM6IE9iamVjdC5rZXlzKHN0b3JlZERhdGEudG9rZW5zKSxcbiAgICAgICAgICAgICAgICAgIGhhc0ZpcmViYXNlVG9rZW46ICEhc3RvcmVkRGF0YS50b2tlbnMuZmlyZWJhc2VUb2tlbixcbiAgICAgICAgICAgICAgICAgIGZpcmViYXNlVG9rZW5MZW5ndGg6IHN0b3JlZERhdGEudG9rZW5zLmZpcmViYXNlVG9rZW4/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoc3RvcmVkRGF0YS50b2tlbnMpO1xuICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1JFU1BPTlNFJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzcHVlc3RhIGludsOhbGlkYSBkZWwgc2Vydmlkb3IgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEludGVudGFyIHZlcmlmaWNhciBzaSBwb3B1cCBzZSBjZXJyw7MgKHB1ZWRlIGZhbGxhciBwb3IgQ09PUClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAodGhpcy5wb3B1cD8uY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKHtcbiAgICAgICAgICAgICAgICBjb2RlOiAnUE9QVVBfQ0xPU0VEJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnU2UgY2VycsOzIGxhIHZlbnRhbmEgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBDT09QIGJsb3F1ZWEgYWNjZXNvIGEgcG9wdXAuY2xvc2VkIC0gaWdub3JhciB5IHNlZ3VpciBjb24gcG9sbGluZ1xuICAgICAgICB9XG4gICAgICB9LCAzMDApO1xuXG4gICAgICAvLyBDbGVhbnVwIGN1YW5kbyBlbCBvYnNlcnZhYmxlIHNlIGRlc3RydXllXG4gICAgICByZXR1cm4gKCkgPT4gdGhpcy5jbGVhbnVwKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhIGZsdWpvIGRlIGxpbmtpbmcgcGFyYSB2aW5jdWxhciB1biBwcm92ZWVkb3IgYWRpY2lvbmFsLlxuICAgKiBSZXF1aWVyZSBxdWUgZWwgdXN1YXJpbyBlc3TDqSBhdXRlbnRpY2Fkby5cbiAgICpcbiAgICogQHBhcmFtIHByb3ZpZGVyIC0gUHJvdmVlZG9yIE9BdXRoIGEgdmluY3VsYXJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIHNlIGNvbXBsZXRhIGVsIGxpbmtpbmdcbiAgICovXG4gIHN0YXJ0TGlua0Zsb3cocHJvdmlkZXI6IE9BdXRoUHJvdmlkZXIpOiBPYnNlcnZhYmxlPE9BdXRoUmVzdWx0PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9vYXV0aC9jYWxsYmFjaz9wb3B1cD10cnVlYDtcbiAgICAgIGNvbnN0IHN0YXJ0VXJsID0gYCR7dGhpcy5jb25maWc/LmFwaVVybH0vdjIvYXV0aC9vYXV0aC9saW5rLyR7cHJvdmlkZXJ9L3N0YXJ0P3JlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVyaSl9YDtcblxuICAgICAgY29uc3Qgd2lkdGggPSA1MDA7XG4gICAgICBjb25zdCBoZWlnaHQgPSA2MDA7XG4gICAgICBjb25zdCBsZWZ0ID0gd2luZG93LnNjcmVlblggKyAod2luZG93Lm91dGVyV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgICAgY29uc3QgdG9wID0gd2luZG93LnNjcmVlblkgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGB3aWR0aD0ke3dpZHRofSxoZWlnaHQ9JHtoZWlnaHR9LGxlZnQ9JHtsZWZ0fSx0b3A9JHt0b3B9LHBvcHVwPXllc2A7XG5cbiAgICAgIHRoaXMucG9wdXAgPSB3aW5kb3cub3BlbihzdGFydFVybCwgJ29hdXRoLWxpbmsnLCBmZWF0dXJlcyk7XG5cbiAgICAgIGlmICghdGhpcy5wb3B1cCkge1xuICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgY29kZTogJ1BPUFVQX0JMT0NLRUQnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFbCBuYXZlZ2Fkb3IgYmxvcXVlw7MgbGEgdmVudGFuYSBlbWVyZ2VudGUnLFxuICAgICAgICB9IGFzIE9BdXRoRXJyb3IpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge307IC8vIGNsZWFudXAgZnVuY3Rpb25cbiAgICAgIH1cblxuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4pIHJldHVybjtcblxuICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YSBhcyBPQXV0aENhbGxiYWNrRGF0YTtcbiAgICAgICAgaWYgKGRhdGE/LnR5cGUgIT09ICdvYXV0aC1jYWxsYmFjaycpIHJldHVybjtcblxuICAgICAgICB0aGlzLmNsZWFudXAoKTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChkYXRhLnRva2VucyB8fCAoe30gYXMgT0F1dGhSZXN1bHQpKTtcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XG5cbiAgICAgIHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucG9wdXA/LmNsb3NlZCkge1xuICAgICAgICAgIHRoaXMuY2xlYW51cCgpO1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcih7XG4gICAgICAgICAgICAgIGNvZGU6ICdQT1BVUF9DTE9TRUQnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnU2UgY2VycsOzIGxhIHZlbnRhbmEgZGUgYXV0ZW50aWNhY2nDs24nLFxuICAgICAgICAgICAgfSBhcyBPQXV0aEVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSwgNTAwKTtcblxuICAgICAgcmV0dXJuICgpID0+IHRoaXMuY2xlYW51cCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbG9zIHByb3ZlZWRvcmVzIE9BdXRoIHZpbmN1bGFkb3MgYWwgdXN1YXJpby5cbiAgICovXG4gIGdldExpbmtlZFByb3ZpZGVycygpOiBPYnNlcnZhYmxlPExpbmtlZFByb3ZpZGVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PHsgcHJvdmlkZXJzOiBMaW5rZWRQcm92aWRlcltdIH0+KGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvcHJvdmlkZXJzYClcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+XG4gICAgICAgICAgdGhyb3dFcnJvcihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgY29kZTogZXJyb3IuZXJyb3I/LmNvZGUgfHwgJ0ZFVENIX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgb2J0ZW5lciBwcm92ZWVkb3JlcyB2aW5jdWxhZG9zJyxcbiAgICAgICAgICAgICAgfSkgYXMgT0F1dGhFcnJvclxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKSBhcyB1bmtub3duIGFzIE9ic2VydmFibGU8TGlua2VkUHJvdmlkZXJbXT47XG4gIH1cblxuICAvKipcbiAgICogRGVzdmluY3VsYSB1biBwcm92ZWVkb3IgT0F1dGguXG4gICAqL1xuICB1bmxpbmtQcm92aWRlcihwcm92aWRlcjogT0F1dGhQcm92aWRlcik6IE9ic2VydmFibGU8eyBzdWNjZXNzOiBib29sZWFuIH0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDx7IHN1Y2Nlc3M6IGJvb2xlYW4gfT4oYCR7dGhpcy5jb25maWc/LmFwaVVybH0vdjIvYXV0aC9vYXV0aC91bmxpbmtgLCB7IHByb3ZpZGVyIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PlxuICAgICAgICAgIHRocm93RXJyb3IoXG4gICAgICAgICAgICAoKSA9PlxuICAgICAgICAgICAgICAoe1xuICAgICAgICAgICAgICAgIGNvZGU6IGVycm9yLmVycm9yPy5jb2RlIHx8ICdVTkxJTktfRVJST1InLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBkZXN2aW5jdWxhciBwcm92ZWVkb3InLFxuICAgICAgICAgICAgICB9KSBhcyBPQXV0aEVycm9yXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVzdGFibGVjZSBjb250cmFzZcOxYSBwYXJhIHVzdWFyaW9zIHF1ZSBzb2xvIHRpZW5lbiBPQXV0aC5cbiAgICovXG4gIHNldFBhc3N3b3JkKHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgc3VjY2VzczogYm9vbGVhbiB9PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyBzdWNjZXNzOiBib29sZWFuIH0+KGAke3RoaXMuY29uZmlnPy5hcGlVcmx9L3YyL2F1dGgvb2F1dGgvc2V0LXBhc3N3b3JkYCwgeyBwYXNzd29yZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT5cbiAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnU0VUX1BBU1NXT1JEX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvcj8ubWVzc2FnZSB8fCAnRXJyb3IgYWwgZXN0YWJsZWNlciBjb250cmFzZcOxYScsXG4gICAgICAgICAgICAgIH0pIGFzIE9BdXRoRXJyb3JcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgZWwgdXN1YXJpbyB0aWVuZSBjb250cmFzZcOxYSBlc3RhYmxlY2lkYS5cbiAgICovXG4gIGhhc1Bhc3N3b3JkKCk6IE9ic2VydmFibGU8SGFzUGFzc3dvcmRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8SGFzUGFzc3dvcmRSZXNwb25zZT4oYCR7dGhpcy5jb25maWc/LmFwaVVybH0vdjIvYXV0aC9vYXV0aC9oYXMtcGFzc3dvcmRgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT5cbiAgICAgICAgICB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgKCkgPT5cbiAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBlcnJvci5lcnJvcj8uY29kZSB8fCAnQ0hFQ0tfUEFTU1dPUkRfRVJST1InLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlIHx8ICdFcnJvciBhbCB2ZXJpZmljYXIgY29udHJhc2XDsWEnLFxuICAgICAgICAgICAgICB9KSBhcyBPQXV0aEVycm9yXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldmlzYSBsb2NhbFN0b3JhZ2UgcG9yIGRhdG9zIGRlIGNhbGxiYWNrIE9BdXRoIChmYWxsYmFjayBwYXJhIENPT1ApLlxuICAgKiBTb2xvIGFjZXB0YSBkYXRvcyByZWNpZW50ZXMgKMO6bHRpbW9zIDMwIHNlZ3VuZG9zKS5cbiAgICovXG4gIHByaXZhdGUgY2hlY2tMb2NhbFN0b3JhZ2VGYWxsYmFjaygpOiBPQXV0aENhbGxiYWNrRGF0YSB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb2F1dGhfY2FsbGJhY2tfdGltZXN0YW1wJyk7XG4gICAgICBjb25zdCBkYXRhU3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ29hdXRoX2NhbGxiYWNrX2RhdGEnKTtcblxuICAgICAgaWYgKCF0aW1lc3RhbXAgfHwgIWRhdGFTdHIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbG8gYWNlcHRhciBkYXRvcyBkZSBsb3Mgw7psdGltb3MgMzAgc2VndW5kb3NcbiAgICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSBwYXJzZUludCh0aW1lc3RhbXAsIDEwKTtcbiAgICAgIGlmIChhZ2UgPiAzMDAwMCkge1xuICAgICAgICBjb25zb2xlLmxvZygnW09BdXRoU2VydmljZV0gbG9jYWxTdG9yYWdlIGRhdGEgdG9vIG9sZCwgaWdub3JpbmcnKTtcbiAgICAgICAgdGhpcy5jbGVhckxvY2FsU3RvcmFnZUZhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKSBhcyBPQXV0aENhbGxiYWNrRGF0YTtcbiAgICAgIHRoaXMuY2xlYXJMb2NhbFN0b3JhZ2VGYWxsYmFjaygpO1xuXG4gICAgICAvLyBFbCBjYW1pbm8gbG9jYWxTdG9yYWdlIGVzIGVsIHF1ZSB1biBYU1MgcG9kcsOtYSBmb3JqYXIgKE0tMDcpLiBFbFxuICAgICAgLy8gcG9zdE1lc3NhZ2UgeWEgdmFsaWRhIG9yaWdpbiArIHRpcG87IGFjw6EgcmVwbGljYW1vcyBlc2FzIGRlZmVuc2FzIHlcbiAgICAgIC8vIHN1bWFtb3MgbGEgdmVyaWZpY2FjacOzbiBkZWwgbm9uY2UgZGUgZmx1am8gKyBmb3JtYSBkZWwgcGF5bG9hZC5cbiAgICAgIGlmIChkYXRhPy50eXBlICE9PSAnb2F1dGgtY2FsbGJhY2snKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmlzTm9uY2VWYWxpZChkYXRhKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc0NhbGxiYWNrU2hhcGVWYWxpZChkYXRhKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdbT0F1dGhTZXJ2aWNlXSBFcnJvciByZWFkaW5nIGxvY2FsU3RvcmFnZSBmYWxsYmFjazonLCBlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaW1waWEgZGF0b3MgZGUgZmFsbGJhY2sgZGUgbG9jYWxTdG9yYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhckxvY2FsU3RvcmFnZUZhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb2F1dGhfY2FsbGJhY2tfZGF0YScpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ29hdXRoX2NhbGxiYWNrX3RpbWVzdGFtcCcpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JhciBlcnJvcmVzIGRlIGxpbXBpZXphXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSByZWN1cnNvcyBkZWwgcG9wdXAuXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja0Nsb3NlZEludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuY2hlY2tDbG9zZWRJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNoZWNrQ2xvc2VkSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJyb2FkY2FzdENoYW5uZWwpIHtcbiAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5jbG9zZSgpO1xuICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBMaW1waWFyIGRhdG9zIGRlbCBwb3B1cCBlbiBzdG9yYWdlIHBhcmEgbm8gY29udGFtaW5hciBlbCBwcsOzeGltbyBpbnRlbnRvLlxuICAgIHRoaXMuY2xlYXJMb2NhbFN0b3JhZ2VGYWxsYmFjaygpO1xuXG4gICAgLy8gQ09PUCAoR29vZ2xlIHVzYSBzYW1lLW9yaWdpbikgcHVlZGUgc2V2ZXJhciBsYSBCQ0cgZGVsIHBvcHVwIOKGkiBhY2NlZGVyIGFcbiAgICAvLyBwb3B1cC5jbG9zZWQgbyBsbGFtYXIgcG9wdXAuY2xvc2UoKSBsYW56YSBTZWN1cml0eUVycm9yLiBTaW4gZXN0ZSB0cnkvY2F0Y2gsXG4gICAgLy8gY2xlYW51cCgpIHRpcmEsIG5nWm9uZS5ydW4oKSBudW5jYSBzZSBsbGFtYSB5IGVsIG9ic2VydmVyIG5vIGVtaXRlIOKGkiBzaW5cbiAgICAvLyBuYXZlZ2FjacOzbiBwb3N0LWxvZ2luIChidWcgaW50ZXJtaXRlbnRlKS5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMucG9wdXAgJiYgIXRoaXMucG9wdXAuY2xvc2VkKSB7XG4gICAgICAgIHRoaXMucG9wdXAuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIENyb3NzLUJDRyBwb3IgQ09PUDogaWdub3JhciwgZWwgcG9wdXAgc2UgY2llcnJhIHNvbG8gdsOtYSBjbG9zZUFmdGVyRGVsYXlcbiAgICB9XG4gICAgdGhpcy5wb3B1cCA9IG51bGw7XG4gICAgLy8gRWwgbm9uY2UgeWEgZnVlIHZlcmlmaWNhZG8gKHNpIGNvcnJlc3BvbmTDrWEpIGFudGVzIGRlIGxsZWdhciBhY8OhOyBzZVxuICAgIC8vIGxpbXBpYSBwYXJhIG5vIHJldXNhcmxvIGVuIHVuIGZsdWpvIGZ1dHVybyAoTS0wNykuXG4gICAgdGhpcy5leHBlY3RlZE5vbmNlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmEgdW4gbm9uY2UgYWxlYXRvcmlvIChDU1BSTkcpIHVybC1zYWZlIHBhcmEgZWwgZmx1am8gT0F1dGggKE0tMDcpLlxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZU5vbmNlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhieXRlcyk7XG4gICAgbGV0IGJpbiA9ICcnO1xuICAgIGJ5dGVzLmZvckVhY2goYiA9PiAoYmluICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYikpKTtcbiAgICAvLyBiYXNlNjR1cmwgc2luIHBhZGRpbmcuXG4gICAgcmV0dXJuIGJ0b2EoYmluKS5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKS5yZXBsYWNlKC89KyQvLCAnJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2EgcXVlIGVsIGNhbGxiYWNrIHRyYWlnYSBlbCBub25jZSBkZWwgZmx1am8gYWN0dWFsIChNLTA3KS5cbiAgICpcbiAgICogVG9sZXJhbnRlIGEgbGEgdHJhbnNpY2nDs246IHNvbG8gc2UgRVhJR0UgY29pbmNpZGVuY2lhIGN1YW5kbyBlbCBjYWxsYmFja1xuICAgKiB0cmFlIHVuIG5vbmNlLiBTaSBubyBsbyB0cmFlIChiYWNrZW5kIGHDum4gc2luIE0tMDcgZGVzcGxlZ2FkbywgcC5lai4gZGV2KSwgbm9cbiAgICogc2UgYmxvcXVlYSBlbCBsb2dpbi4gQ3VhbmRvIGVsIGJhY2tlbmQgZWNoYSBgY2xpZW50X25vbmNlYCBlbiB0b2RvcyBsYWRvcywgdW5cbiAgICogY2FsbGJhY2sgZm9yamFkbyBjb24gdW4gbm9uY2UgZGlzdGludG8gc8OtIHNlIHJlY2hhemEuIFVuIHBheWxvYWQgZm9yamFkbyBwb3JcbiAgICogWFNTIHF1ZSBPTUlUQSBlbCBub25jZSBubyBzZSBmcmVuYSBwb3IgYWPDoSwgcGVybyBpZ3VhbCBwYXNhIHBvciBsYXNcbiAgICogdmFsaWRhY2lvbmVzIGRlIHRpcG8vZm9ybWEgZGUgYGNoZWNrTG9jYWxTdG9yYWdlRmFsbGJhY2tgLlxuICAgKi9cbiAgcHJpdmF0ZSBpc05vbmNlVmFsaWQoZGF0YTogT0F1dGhDYWxsYmFja0RhdGEpOiBib29sZWFuIHtcbiAgICAvLyBObyBoYXkgZmx1am8gY29uIG5vbmNlIGFjdGl2byAobGVnYWN5IC8gbGluayBmbG93KSDihpIgbm8gYmxvcXVlYXIuXG4gICAgaWYgKCF0aGlzLmV4cGVjdGVkTm9uY2UpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBFbCBjYWxsYmFjayBubyB0cmFlIG5vbmNlIChiYWNrZW5kIHNpbiBNLTA3KSDihpIgbm8gYmxvcXVlYXIgKHRyYW5zaWNpw7NuKS5cbiAgICBpZiAoIWRhdGE/Lm5vbmNlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gTm9uY2UgcHJlc2VudGUg4oaSIGRlYmUgY29pbmNpZGlyIGNvbiBlbCBkZWwgZmx1am8uXG4gICAgcmV0dXJuIGRhdGEubm9uY2UgPT09IHRoaXMuZXhwZWN0ZWROb25jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGEgbGEgZm9ybWEgZGVsIHBheWxvYWQgZGVsIGNhbGxiYWNrIChNLTA3KTogZGViZSBzZXIgdW4gZXJyb3IgbyB0b2tlbnNcbiAgICogY29tbyBvYmpldG8uIEJsb3F1ZWEgaW55ZWNjaW9uZXMgbWFsZm9ybWFkYXMgKHByaW1pdGl2b3MsIHNoYXBlcyBiYXN1cmEpLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0NhbGxiYWNrU2hhcGVWYWxpZChkYXRhOiBPQXV0aENhbGxiYWNrRGF0YSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0Vycm9yID0gISFkYXRhLmVycm9yICYmIHR5cGVvZiBkYXRhLmVycm9yID09PSAnb2JqZWN0JztcbiAgICBjb25zdCBoYXNUb2tlbnMgPSAhIWRhdGEudG9rZW5zICYmIHR5cGVvZiBkYXRhLnRva2VucyA9PT0gJ29iamVjdCc7XG4gICAgcmV0dXJuIGhhc0Vycm9yIHx8IGhhc1Rva2VucztcbiAgfVxufVxuIl19
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.164';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNjQnO1xuIl19
5
+ export const VERSION = '4.0.166';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNjYnO1xuIl19
@@ -56,7 +56,7 @@ import { BrowserMultiFormatReader } from '@zxing/browser';
56
56
  * Current version of valtech-components.
57
57
  * This is automatically updated during the publish process.
58
58
  */
59
- const VERSION = '4.0.164';
59
+ const VERSION = '4.0.166';
60
60
 
61
61
  // Control de estado de refresco (singleton a nivel de módulo)
62
62
  let isRefreshing = false;
@@ -6564,6 +6564,11 @@ class OAuthService {
6564
6564
  // Nonce de flujo (M-07): vive solo en este objeto (no en storage), viaja
6565
6565
  // al backend en client_nonce y vuelve en el callback. El opener lo verifica
6566
6566
  // → un oauth_callback_data forjado en localStorage por XSS no lo conoce.
6567
+ // Limpiar datos stale de intentos anteriores ANTES de abrir el popup.
6568
+ // Sin esto, un intento previo fallido deja datos en localStorage que el
6569
+ // intervalo de este intento encuentra inmediatamente como "demasiado viejos"
6570
+ // y descarta, impidiendo que los datos frescos del nuevo popup sean detectados.
6571
+ this.clearLocalStorageFallback();
6567
6572
  const nonce = this.generateNonce();
6568
6573
  this.expectedNonce = nonce;
6569
6574
  // popup=true sobrevive el bounce cross-origin (Google/MS borran window.name
@@ -6631,6 +6636,7 @@ class OAuthService {
6631
6636
  return;
6632
6637
  if (!this.isNonceValid(data))
6633
6638
  return;
6639
+ this.clearLocalStorageFallback();
6634
6640
  this.cleanup();
6635
6641
  this.ngZone.run(() => {
6636
6642
  if (data.error) {
@@ -6873,6 +6879,8 @@ class OAuthService {
6873
6879
  this.broadcastChannel.close();
6874
6880
  this.broadcastChannel = null;
6875
6881
  }
6882
+ // Limpiar datos del popup en storage para no contaminar el próximo intento.
6883
+ this.clearLocalStorageFallback();
6876
6884
  // COOP (Google usa same-origin) puede severar la BCG del popup → acceder a
6877
6885
  // popup.closed o llamar popup.close() lanza SecurityError. Sin este try/catch,
6878
6886
  // cleanup() tira, ngZone.run() nunca se llama y el observer no emite → sin
@@ -8529,7 +8537,13 @@ class AuthService {
8529
8537
  browser: request.browser ?? platformInfo.browser,
8530
8538
  os: request.os ?? platformInfo.os,
8531
8539
  };
8532
- return this.http.post(`${this.baseUrl}/signin`, enrichedRequest).pipe(tap(response => {
8540
+ // withCredentials: el backend setea la cookie HttpOnly de refresh (valtech_refresh)
8541
+ // en la respuesta. El browser solo almacena ese Set-Cookie cross-origin si la
8542
+ // request se hizo con credenciales. Sin esto la cookie no persiste y /refresh
8543
+ // falla siempre (400) → la sesión no dura (H-05).
8544
+ return this.http
8545
+ .post(`${this.baseUrl}/signin`, enrichedRequest, { withCredentials: true })
8546
+ .pipe(tap(response => {
8533
8547
  if (response.mfaRequired) {
8534
8548
  // MFA requerido - guardar estado temporal
8535
8549
  this.stateService.setMFAPending({
@@ -8677,7 +8691,11 @@ class AuthService {
8677
8691
  */
8678
8692
  verifyEmail(request) {
8679
8693
  this.stateService.clearError();
8680
- return this.http.post(`${this.baseUrl}/verify-email`, request).pipe(tap(response => {
8694
+ // withCredentials: el verify-email auto-loguea y setea la cookie HttpOnly de
8695
+ // refresh. Sin credenciales el browser descarta el Set-Cookie → /refresh 400 (H-05).
8696
+ return this.http
8697
+ .post(`${this.baseUrl}/verify-email`, request, { withCredentials: true })
8698
+ .pipe(tap(response => {
8681
8699
  if (response.verified && response.accessToken) {
8682
8700
  // Auto-login: guardar tokens y actualizar estado
8683
8701
  this.handleSuccessfulAuth(response);
@@ -9025,7 +9043,11 @@ class AuthService {
9025
9043
  */
9026
9044
  activateAccount(request) {
9027
9045
  this.stateService.clearError();
9028
- return this.http.post(`${this.baseUrl}/activate`, request).pipe(tap(response => {
9046
+ // withCredentials: activate auto-loguea y setea la cookie HttpOnly de refresh.
9047
+ // Sin credenciales el browser descarta el Set-Cookie → /refresh 400 (H-05).
9048
+ return this.http
9049
+ .post(`${this.baseUrl}/activate`, request, { withCredentials: true })
9050
+ .pipe(tap(response => {
9029
9051
  if (response.activated && response.accessToken) {
9030
9052
  this.handleSuccessfulAuth(response);
9031
9053
  }
@@ -34270,8 +34292,10 @@ class HandoffService {
34270
34292
  * @param token Raw handoff token read from the URL.
34271
34293
  */
34272
34294
  exchangeHandoff(token) {
34295
+ // withCredentials: el exchange setea la cookie HttpOnly de refresh. Sin
34296
+ // credenciales el browser descarta el Set-Cookie cross-origin → /refresh 400 (H-05).
34273
34297
  return this.http
34274
- .post(`${this.baseUrl}/handoff/exchange`, { token })
34298
+ .post(`${this.baseUrl}/handoff/exchange`, { token }, { withCredentials: true })
34275
34299
  .pipe(tap(response => this.installSession(response)), catchError(err => {
34276
34300
  // Surface the error untouched — the caller decides how to react
34277
34301
  // (typically: redirect to /login + toast). Don't install a bad session.