@tiba-spark/client-shared-lib 26.1.0-307 → 26.1.0-309
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libraries/services/auth-token.service.mjs +27 -1
- package/esm2022/libraries/services/signalr.service.mjs +40 -19
- package/fesm2022/tiba-spark-client-shared-lib.mjs +64 -18
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/services/auth-token.service.d.ts +2 -0
- package/libraries/services/auth-token.service.d.ts.map +1 -1
- package/libraries/services/signalr.service.d.ts +6 -1
- package/libraries/services/signalr.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -91,6 +91,32 @@ export class AuthTokenService {
|
|
|
91
91
|
this.setConflictDetected = (error) => new SetConflictDetected(error);
|
|
92
92
|
this.clearConflictDetected = () => new ClearConflictDetected();
|
|
93
93
|
}
|
|
94
|
+
// refreshInterval: early expirty offset
|
|
95
|
+
isTokenExpired(token, refreshInterval = 0) {
|
|
96
|
+
const expiration = this.parseJwtExp(token);
|
|
97
|
+
if (expiration === null) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
return new Date() > new Date(moment.unix(expiration).add(-refreshInterval * 0.1, 'milliseconds').format());
|
|
101
|
+
}
|
|
102
|
+
parseJwtExp(token) {
|
|
103
|
+
try {
|
|
104
|
+
const payloadSegment = token.split('.')[1];
|
|
105
|
+
if (!payloadSegment) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
const base64 = payloadSegment.replace(/-/g, '+').replace(/_/g, '/');
|
|
109
|
+
const padding = '='.repeat((4 - (base64.length % 4)) % 4);
|
|
110
|
+
if (typeof atob === 'undefined') {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const payload = JSON.parse(atob(base64 + padding));
|
|
114
|
+
return typeof payload.exp === 'number' ? payload.exp : null;
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
94
120
|
handleRequest(req, next) {
|
|
95
121
|
req = this.setRequestHeaders(req);
|
|
96
122
|
let request = next.handle(req);
|
|
@@ -349,4 +375,4 @@ __decorate([
|
|
|
349
375
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthTokenService, decorators: [{
|
|
350
376
|
type: Injectable
|
|
351
377
|
}], ctorParameters: () => [{ type: i1.SessionStorageService }, { type: i2.Store }, { type: i3.Router }, { type: i4.AppConfigService }, { type: i5.RefreshTokenService }, { type: i6.LocalStorageService }], propDecorators: { logout: [], servicesRunningStatusChanged: [], setConflictDetected: [], clearConflictDetected: [] } });
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC10b2tlbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9hdXRoLXRva2VuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBd0UsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFekQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTNHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQW1FLE1BQU0sd0NBQXdDLENBQUM7QUFLcEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7OztBQUtyRCxN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QVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRU8sZUFBZSxDQUFDLFVBQW1CO1FBQ3pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDOUUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7UUFFcEMsd0VBQXdFO1FBQ3hFLE1BQU0sR0FBRyxHQUFHLGVBQWU7WUFDekIsQ0FBQyxDQUFDLEVBQUU7WUFDSixDQUFDLENBQUMsVUFBVTtnQkFDVixDQUFDLENBQUMsR0FBRyxVQUFVLEdBQUcsVUFBVSxFQUFFO2dCQUM5QixDQUFDLENBQUMsVUFBVSxDQUFDO1FBRWpCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDOytHQWpTVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQjs7QUFvU1A7SUFBbkIsUUFBUSxFQUFFO2dEQUFpSTtBQUVoSTtJQUFYLFFBQVEsRUFBRTtzRUFDMkQ7QUFFMUQ7SUFBWCxRQUFRLEVBQUU7NkRBQW9GO0FBQ25GO0lBQVgsUUFBUSxFQUFFOytEQUEyRDs0RkExUzNELGdCQUFnQjtrQkFENUIsVUFBVTtzT0FxU1csTUFBTSxNQUVkLDRCQUE0QixNQUc1QixtQkFBbUIsTUFDbkIscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2UsIEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERpc3BhdGNoIH0gZnJvbSAnQG5neHMtbGFicy9kaXNwYXRjaC1kZWNvcmF0b3InO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTRVNTSU9OIH0gZnJvbSAnLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGVNYXAgfSBmcm9tICcuLi9lbnVtcy9hcHAtdHlwZS1tYXAuZW51bSc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQYXJrQ29ubmVjdGlvblN0YXR1cyB9IGZyb20gJy4uL2VudW1zL3ByaW9yaXR5LWxpbmstc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgU3BhcmtTZXNzaW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zcGFyay1zZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZWZyZXNoSW5mbyB9IGZyb20gJy4uL21vZHVsZXMvYXV0aC9tb2RlbC9yZWZyZXNoLWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7IENsZWFyQ29uZmxpY3REZXRlY3RlZCwgTG9nb3V0QWN0aW9uLCBTZXRDb25mbGljdERldGVjdGVkIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL3Nlc3Npb24uYWN0aW9ucyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeSB9IGZyb20gJy4uL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHktbW9kYWwnO1xuaW1wb3J0IHsgU2VydmljZXNSdW5uaW5nU3RhdHVzQ2hhbmdlZEFjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eVN0YXRlIH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5zdGF0ZSc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9tb2R1bGVzL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBTbWFydHBhcmtTdGF0ZSB9IGZyb20gJy4uL21vZHVsZXMvc21hcnRwYXJrcy9zbWFydHBhcmsuc3RhdGUnO1xuaW1wb3J0IHsgQXBwTW9kdWxlLCBQbGF0Zm9ybVR5cGUsIFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0bywgU21hcnRwYXJrRHRvLCBTdWJNb2R1bGUgfSBmcm9tICcuLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBTbWFydHBhcmtCYXNpY0R0byB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uVHlwZSB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvcnBjLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGdldFVzZXJUaW1lWm9uZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUudXRpbCc7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tICcuLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlZnJlc2hUb2tlblNlcnZpY2UgfSBmcm9tICcuL3JlZnJlc2gtdG9rZW4uc2VydmljZSc7XG5cbmNvbnN0IEFVVEhFTlRJQ0FURV9BUElTID0gW1xuICAvLyBXZWJcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvbXVsdGktdGVuYW50cy1hdXRoZW50aWNhdGUnLFxuXG4gIC8vIEJhY2tvZmZpY2VcbiAgJ2FwaS9zZXJ2aWNlcy9iYWNrb2ZmaWNldXNlci9hdXRoZW50aWNhdGUnLFxuXG4gIC8vIE1vYmlsZVxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy92ZXJpZnktMmZhLWF1dGgnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy9hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy9tdWx0aS10ZW5hbnRzLWF1dGhlbnRpY2F0ZScsXG5dO1xuXG5jb25zdCBFREdFX1BSRUZJWF9BUEkgPSAnL2FwaS9zZXJ2aWNlcy93ZWIvc3AnO1xuY29uc3QgTU9CT0lMRV9FREdFX1BSRUZJWF9BUEkgPSAnL2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvc3AnO1xuXG5jb25zdCBSRUZSRVNIX1RPS0VOX0FQSSA9ICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL3JlZnJlc2gtdG9rZW4nO1xuY29uc3QgUkVGUkVTSF9NT0JJTEVfVE9LRU5fQVBJID0gJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvdXNlcnMvcmVmcmVzaC10b2tlbic7XG5cbmNvbnN0IEVYVEVSTkFMX0FQSVMgPSBbXG4gICdhcGkvc2VydmljZXMvc2VsZnZhbGlkYXRpb24vZGV0YWlscycsXG4gICcvZXhlY3V0ZS9zZWxmLXZhbGlkYXRpb24nLCAvLyBUT0RPOiBSZW1vdmUgd2hlbiBzZWxmLXZhbGlkYXRpb24gaXMgaGFuZGxlZCBieSB0aGUgbmV3IHByb2plY3QgKE1hdGFuU2hvbWVyKVxuXTtcbmNvbnN0IEFOT05ZTU9VU19BUElTID0gW1xuICBSRUZSRVNIX1RPS0VOX0FQSSxcbiAgLy8gTGF0ZXN0IFdlYiBVUkxzXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL211bHRpLXRlbmFudHMtYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoLWxvZ2luJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvdmFsaWRhdGUtYWN0aXZhdGlvbicsXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL29pZGMtYXV0aCcsXG4gICdhcGkvc2VydmljZXMvd2ViL2Fzc2V0L2xvZ28nLFxuICAnYXBpL3NlcnZpY2VzL3dlYi90ZW5hbnQvZGV0YWlscycsXG4gICdhcGkvc2VydmljZXMvd2ViL2NvbmZpZ3VyYXRpb24vc3BhcmstbW9iaWxlLXZlcnNpb24nLFxuICAnYXBpL3NlcnZpY2VzL3dlYi90ZW5hbnQvZGF0YScsXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL2ZvcmdvdC1wYXNzd29yZCcsXG4gICdhcGkvc2VydmljZXMvd2ViL3VzZXJzL2ZvcmdvdC1wYXNzd29yZC10ZW5hbnRsZXNzJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvYWN0aXZhdGUnLFxuXG4gIC8vIEJhY2tvZmZpY2UgVVJMc1xuICAnYXBpL3NlcnZpY2VzL2JhY2tvZmZpY2V1c2VyL2F1dGhlbnRpY2F0ZScsXG5dO1xuXG5jb25zdCBNT0JJTEVfQU5PTllNT1VTX0FQSVMgPSBbXG4gIC8vIE1vYmlsZVxuICBSRUZSRVNIX01PQklMRV9UT0tFTl9BUEksXG4gICdhcGkvc2VydmljZXMvdjIvbW9iaWxlL3VzZXJzL211bHRpLXRlbmFudHMtYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvdXNlcnMvYXV0aGVudGljYXRlJyxcbiAgJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoJyxcbiAgJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvdXNlcnMvdmVyaWZ5LTJmYS1hdXRoLWxvZ2luJyxcbiAgJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvYXNzZXQvbG9nbycsXG4gICdhcGkvc2VydmljZXMvdjIvbW9iaWxlL2NvbmZpZ3VyYXRpb24vc3BhcmstbW9iaWxlLXZlcnNpb24nLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS90ZW5hbnQvZGF0YScsXG5dO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXV0aFRva2VuU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBzdG9yZTogU3RvcmUsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsIHByaXZhdGUgcmVmcmVzaFRva2VuU2VydmljZTogUmVmcmVzaFRva2VuU2VydmljZSwgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlKSB7XG4gIH1cblxuICBwdWJsaWMgaXNSZWZyZXNoVG9rZW5FeHBpcmVkID0gKHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbykgPT5cbiAgICAhcmVmcmVzaEluZm8gfHwgbmV3IERhdGUoKSA+IG5ldyBEYXRlKG1vbWVudChyZWZyZXNoSW5mby5leHBpcmF0aW9uKS5hZGQoLSByZWZyZXNoSW5mby5yZWZyZXNoSW50ZXJ2YWwgKiAwLjEsICdtaWxsaXNlY29uZHMnKS5mb3JtYXQoKSk7XG5cbiAgcHVibGljIGhhbmRsZVJlcXVlc3QocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIHJlcSA9IHRoaXMuc2V0UmVxdWVzdEhlYWRlcnMocmVxKTtcbiAgICBsZXQgcmVxdWVzdDogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4gPSBuZXh0LmhhbmRsZShyZXEpO1xuICAgIGNvbnN0IHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEF1dGg7XG4gICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlUmVmcmVzaFRva2VuKHJlcSkgJiYgdGhpcy5pc1JlZnJlc2hUb2tlbkV4cGlyZWQocmVmcmVzaEluZm8pKSB7XG4gICAgICByZXF1ZXN0ID0gdGhpcy5yZWZyZXNoVG9rZW5TZXJ2aWNlLmhhbmRsZVJlZnJlc2hUb2tlbihyZXEsIG5leHQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUJhY2tPZmZpY2VSZXF1ZXN0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICByZXEgPSB0aGlzLnNldEJhY2tPZmZpY2VSZXF1ZXN0SGVhZGVycyhyZXEpO1xuICAgIGxldCByZXF1ZXN0OiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiA9IG5leHQuaGFuZGxlKHJlcSk7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIHNldEJhY2tPZmZpY2VSZXF1ZXN0SGVhZGVycyhyZXE6IEh0dHBSZXF1ZXN0PGFueT4pIHtcbiAgICBjb25zdCBhcHBsaWNhdGlvblR5cGU6IEFwcGxpY2F0aW9uVHlwZSA9IEFwcFR5cGVNYXAuZ2V0KHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUpO1xuICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbikge1xuICAgICAgcmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnNcbiAgICAgICAgICAuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VufWApXG4gICAgICAgICAgLnNldCgnQXBwbGljYXRpb24tVHlwZScsIGFwcGxpY2F0aW9uVHlwZS50b1N0cmluZygpKVxuICAgICAgICAgIC5zZXQoJ25nc3ctYnlwYXNzJywgJ3RydWUnKVxuICAgICAgICAgIC5zZXQoJ3RpbWVab25lJywgZ2V0VXNlclRpbWVab25lKCkpXG4gICAgICAgICAgLnNldCgnQ2xpZW50VmVyc2lvbicsIHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLnBhY2thZ2VJbmZvLnZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgICAgICAgIC5zZXQoJ3RpbWVab25lJywgZ2V0VXNlclRpbWVab25lKCkpXG4gICAgICAgICAgLnNldCgnQXBwbGljYXRpb24tVHlwZScsIGFwcGxpY2F0aW9uVHlwZS50b1N0cmluZygpKVxuICAgICAgICAgIC5zZXQoJ0NsaWVudFZlcnNpb24nLCB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5wYWNrYWdlSW5mby52ZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXE7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlTW9iaWxlUmVxdWVzdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgcmVxID0gdGhpcy5zZXRSZXF1ZXN0SGVhZGVycyhyZXEpO1xuICAgIGxldCByZXF1ZXN0OiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiA9IG5leHQuaGFuZGxlKHJlcSk7XG4gICAgY29uc3QgcmVmcmVzaEluZm86IFJlZnJlc2hJbmZvID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0QXV0aDtcbiAgICBpZiAodGhpcy5zaG91bGRIYW5kbGVNb2JpbGVSZWZyZXNoVG9rZW4ocmVxKSAmJiB0aGlzLmlzUmVmcmVzaFRva2VuRXhwaXJlZChyZWZyZXNoSW5mbykpIHtcbiAgICAgIHJlcXVlc3QgPSB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UuaGFuZGxlUmVmcmVzaFRva2VuKHJlcSwgbmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQmFja29mZmljZUV2ZW50U3RhdHVzRXJyb3IoZTogSHR0cEVycm9yUmVzcG9uc2UsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICBsZXQgcmVzcG9uc2U6IE9ic2VydmFibGU8YW55PjtcbiAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlQmFja29mZmljZUVycm9yUmVzcG9uc2UoZSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUV2ZW50U3RhdHVzRXJyb3IoZTogSHR0cEVycm9yUmVzcG9uc2UsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICBsZXQgcmVzcG9uc2U6IE9ic2VydmFibGU8YW55PjtcbiAgICBzd2l0Y2ggKGUuc3RhdHVzKSB7XG4gICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlUmVmcmVzaFRva2VuKHJlcSkpIHtcbiAgICAgICAgICByZXEgPSB0aGlzLnNldFJlcXVlc3RIZWFkZXJzKHJlcSk7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UuaGFuZGxlUmVmcmVzaFRva2VuKHJlcSwgbmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmhhbmRsZUVycm9yUmVzcG9uc2UoZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlRXJyb3JSZXNwb25zZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU1vYmlsZUV2ZW50U3RhdHVzRXJyb3IoZTogSHR0cEVycm9yUmVzcG9uc2UsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICBsZXQgcmVzcG9uc2U6IE9ic2VydmFibGU8YW55PjtcbiAgICBzd2l0Y2ggKGUuc3RhdHVzKSB7XG4gICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlTW9iaWxlUmVmcmVzaFRva2VuKHJlcSkpIHtcbiAgICAgICAgICByZXEgPSB0aGlzLnNldFJlcXVlc3RIZWFkZXJzKHJlcSk7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UuaGFuZGxlTW9iaWxlUmVmcmVzaFRva2VuKHJlcSwgbmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmhhbmRsZUVycm9yUmVzcG9uc2UoZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlRXJyb3JSZXNwb25zZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVN1Y2Nlc3NSZXNwb25zZShyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIGV2ZW50OiBIdHRwUmVzcG9uc2U8YW55Pikge1xuICAgIGlmIChldmVudD8uc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5PayB8fCBldmVudD8uc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5BY2NlcHRlZCkge1xuICAgICAgdGhpcy5jaGVja0FuZENsZWFyUGFya1N0YXR1c0dsb2JhbEVycm9yTm90aWZpY2F0aW9uKHJlcS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBtb2JpbGVIYW5kbGVTdWNjZXNzUmVzcG9uc2UocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBldmVudDogSHR0cFJlc3BvbnNlPGFueT4pIHtcbiAgICBpZiAoZXZlbnQ/LnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuT2sgfHwgZXZlbnQ/LnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuQWNjZXB0ZWQpIHtcbiAgICAgIHRoaXMubW9iaWxlQ2hlY2tBbmRDbGVhclBhcmtTdGF0dXNHbG9iYWxFcnJvck5vdGlmaWNhdGlvbihyZXEudXJsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNSZWZyZXNoVG9rZW5SZXF1ZXN0ID0gKHJlcTogSHR0cFJlcXVlc3Q8YW55PikgPT4gcmVxLnVybC5pbmNsdWRlcyhSRUZSRVNIX1RPS0VOX0FQSSkgfHwgcmVxLnVybC5pbmNsdWRlcyhSRUZSRVNIX01PQklMRV9UT0tFTl9BUEkpO1xuXG4gIHByaXZhdGUgc2V0UmVxdWVzdEhlYWRlcnMocmVxOiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgY29uc3QgYXBwbGljYXRpb25UeXBlOiBBcHBsaWNhdGlvblR5cGUgPSBBcHBUeXBlTWFwLmdldCh0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlKTtcbiAgICBjb25zdCBwbGF0Zm9ybVR5cGU6IFBsYXRmb3JtVHlwZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLnBsYXRmb3JtVHlwZTtcbiAgICBjb25zdCBhcHBNb2R1bGU6IEFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgY29uc3Qgc3ViTW9kdWxlOiBTdWJNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5zdWJNb2R1bGUpO1xuICAgIGNvbnN0IGFwcE1vZHVsZVN0ciA9IGFwcE1vZHVsZT8udG9TdHJpbmcoKSB8fCAnJztcbiAgICBjb25zdCBzdWJNb2R1bGVTdHIgPSBzdWJNb2R1bGU/LnRvU3RyaW5nKCkgfHwgJyc7XG5cbiAgICBjb25zdCBzbWFydFBhcmtEdG8gPSB0aGlzLmdldFNtYXJ0UGFya0R0byhyZXEudXJsKSB8fCB7fTtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSBzbWFydFBhcmtEdG9bXCJzcGFya1ZlcnNpb25cIl0gPz8gJyc7XG4gICAgY29uc3Qgc21hcnRQYXJrVmVyc2lvbiA9IChzbWFydFBhcmtEdG9bXCJzbWFydFBhcmtWZXJzaW9uXCJdID8/ICcnKS5yZXBsYWNlKFwiIEJ1aWxkKFwiLCBcIl9cIikucmVwbGFjZShcIilcIiwgXCJcIikudHJpbSgpO1xuXG4gICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuKSB7XG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgICAgICAgIC5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW59YClcbiAgICAgICAgICAuc2V0KCd4LXBsYXRmb3JtLXR5cGUnLCBwbGF0Zm9ybVR5cGUudG9TdHJpbmcoKSlcbiAgICAgICAgICAuc2V0KCdBcHBsaWNhdGlvbi1UeXBlJywgYXBwbGljYXRpb25UeXBlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLnNldCgnbmdzdy1ieXBhc3MnLCAndHJ1ZScpXG4gICAgICAgICAgLnNldCgnYXBwTW9kdWxlJywgYXBwTW9kdWxlU3RyKSAvLyBUT0RPOiBSZW1vdmUgd2hlbiA4LjEgaXMgZGVwcmVjYXRlZCA/P1xuICAgICAgICAgIC5zZXQoJ0FwcC1Nb2R1bGUnLCBhcHBNb2R1bGVTdHIpXG4gICAgICAgICAgLnNldCgnU3ViLU1vZHVsZScsIHN1Yk1vZHVsZVN0cilcbiAgICAgICAgICAuc2V0KCd0aW1lWm9uZScsIGdldFVzZXJUaW1lWm9uZSgpKVxuICAgICAgICAgIC5zZXQoJ0NsaWVudFZlcnNpb24nLCB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5wYWNrYWdlSW5mby52ZXJzaW9uKVxuICAgICAgICAgIC5zZXQoJ1NwYXJrVmVyc2lvbicsIHNwYXJrVmVyc2lvbilcbiAgICAgICAgICAuc2V0KCdTbWFydFBhcmtWZXJzaW9uJywgc21hcnRQYXJrVmVyc2lvbilcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzXG4gICAgICAgICAgLnNldCgneC1wbGF0Zm9ybS10eXBlJywgcGxhdGZvcm1UeXBlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLnNldCgnQXBwbGljYXRpb24tVHlwZScsIGFwcGxpY2F0aW9uVHlwZS50b1N0cmluZygpKVxuICAgICAgICAgIC5zZXQoJ3RpbWVab25lJywgZ2V0VXNlclRpbWVab25lKCkpXG4gICAgICAgICAgLnNldCgnQ2xpZW50VmVyc2lvbicsIHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLnBhY2thZ2VJbmZvLnZlcnNpb24pXG4gICAgICAgICAgLnNldCgnU3BhcmtWZXJzaW9uJywgc3BhcmtWZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkSGFuZGxlUmVmcmVzaFRva2VuKHJlcTogSHR0cFJlcXVlc3Q8YW55Pikge1xuICAgIHJldHVybiAhQU5PTllNT1VTX0FQSVMuc29tZShhcGkgPT4gcmVxLnVybC5pbmNsdWRlcyhhcGkpKSAmJiAhdGhpcy5pc1JlZnJlc2hUb2tlblJlcXVlc3QocmVxKSAmJiAhRVhURVJOQUxfQVBJUy5zb21lKGFwaSA9PiByZXEudXJsLmluY2x1ZGVzKGFwaSkpICYmICF0aGlzLmlzU2VsZlZhbGlkYXRpb25MaW5rVVJMO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRIYW5kbGVNb2JpbGVSZWZyZXNoVG9rZW4ocmVxOiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgcmV0dXJuICFNT0JJTEVfQU5PTllNT1VTX0FQSVMuc29tZShhcGkgPT4gcmVxLnVybC5pbmNsdWRlcyhhcGkpKSAmJiAhdGhpcy5pc1JlZnJlc2hUb2tlblJlcXVlc3QocmVxKTtcbiAgfVxuXG4gIC8vIFRlbXBvcmFyeSBjaGVjayBmb3IgJ3NlbGYtdmFsaWRhdGlvbj90b2tlbj0nIGluIFVSTC5cbiAgLy8gVGhpcyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHNlbGYgdmFsaWRhdGlvbiBsaW5rcyBhcmUgaGFuZGxlZCBieSB0aGUgbmV3IHByb2plY3QuXG4gIHByaXZhdGUgaXNTZWxmVmFsaWRhdGlvbkxpbmtVUkwgPSBsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvc2VsZi12YWxpZGF0aW9uP3Rva2VuPScpO1xuXG4gIHByaXZhdGUgZ2V0U21hcnRQYXJrRHRvKHJlcXVlc3RVcmw6IHN0cmluZyk6IFNtYXJ0cGFya0R0byB8IFNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICBsZXQgZ3VpZCA9IG51bGw7XG5cbiAgICBjb25zdCBndWlkUGF0dGVybiA9IC9bYS1mQS1GMC05XXs4fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXsxMn0vO1xuICAgIGNvbnN0IG1hdGNoZXMgPSByZXF1ZXN0VXJsLm1hdGNoKGd1aWRQYXR0ZXJuKTtcblxuICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgZ3VpZCA9IG1hdGNoZXNbMF07XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0VXJsLmluY2x1ZGVzKCcvc2VuZC1tYWlsLWZyb20tZW50aXR5JykpIHtcbiAgICAgIGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc21hcnRQYXJrRHRvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTbWFydHBhcmtTdGF0ZS5zbWFydHBhcmtzKT8uZmluZChzbWFydFBhcmsgPT4gc21hcnRQYXJrLmd1aWQgPT09IGd1aWQpO1xuICAgIHJldHVybiBzbWFydFBhcmtEdG87XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kQ2xlYXJQYXJrU3RhdHVzR2xvYmFsRXJyb3JOb3RpZmljYXRpb24odXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodXJsPy5zdGFydHNXaXRoKEVER0VfUFJFRklYX0FQSSkpIHtcbiAgICAgIGNvbnN0IGFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgICBpZiAoYXBwTW9kdWxlID09IEFwcE1vZHVsZS5DYyB8fCBhcHBNb2R1bGUgPT0gQXBwTW9kdWxlLk1hbmFnZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKTtcbiAgICAgICAgY29uc3QgZ3VpZDogc3RyaW5nID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgICAgICBjb25zdCBwYXJrSWQ6IG51bWJlciA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5wYXJrSWQpO1xuXG4gICAgICAgIGlmIChndWlkICYmIHBhcmtJZCAmJiBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeVtndWlkXSkge1xuICAgICAgICAgIHZhciBwYXJrQ29ubmVjdGlvblN0YXR1cyA9IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF07XG4gICAgICAgICAgaWYgKHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyA9PSBQYXJrQ29ubmVjdGlvblN0YXR1cy5TcGFya0NvcmVTZXJ2ZXJEaXNjb25uZWN0ZWQgfHxcbiAgICAgICAgICAgIHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyA9PSBQYXJrQ29ubmVjdGlvblN0YXR1cy5TcGFya0NvcmVDbG91ZFNlcnZlckRpc2Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZXJ2aWNlc1J1bm5pbmdTdGF0dXMoZ3VpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb2JpbGVDaGVja0FuZENsZWFyUGFya1N0YXR1c0dsb2JhbEVycm9yTm90aWZpY2F0aW9uKHVybDogc3RyaW5nKSB7XG4gICAgaWYgKHVybD8uc3RhcnRzV2l0aChNT0JPSUxFX0VER0VfUFJFRklYX0FQSSkpIHtcbiAgICAgIGNvbnN0IGFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgICBpZiAoYXBwTW9kdWxlID09IEFwcE1vZHVsZS5DYyB8fCBhcHBNb2R1bGUgPT0gQXBwTW9kdWxlLk1hbmFnZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKTtcbiAgICAgICAgY29uc3QgZ3VpZDogc3RyaW5nID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgICAgICBjb25zdCBwYXJrSWQ6IG51bWJlciA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5wYXJrSWQpO1xuXG4gICAgICAgIGlmIChndWlkICYmIHBhcmtJZCAmJiBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeVtndWlkXSkge1xuICAgICAgICAgIHZhciBwYXJrQ29ubmVjdGlvblN0YXR1cyA9IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF07XG4gICAgICAgICAgaWYgKHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyA9PSBQYXJrQ29ubmVjdGlvblN0YXR1cy5TcGFya0NvcmVTZXJ2ZXJEaXNjb25uZWN0ZWQgfHxcbiAgICAgICAgICAgIHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyA9PSBQYXJrQ29ubmVjdGlvblN0YXR1cy5TcGFya0NvcmVDbG91ZFNlcnZlckRpc2Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZXJ2aWNlc1J1bm5pbmdTdGF0dXMoZ3VpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJ2aWNlc1J1bm5pbmdTdGF0dXMoc21hcnRQYXJrR3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byA9IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbc21hcnRQYXJrR3VpZF07XG4gICAgY3VycmVudEZhY2lsaXR5U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDb3JlQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0Nsb3VkQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG51bGw7XG4gICAgdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkKGN1cnJlbnRGYWNpbGl0eVNlcnZpY2VzUnVubmluZ1N0YXR1cywgc21hcnRQYXJrR3VpZCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yUmVzcG9uc2UoZTogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICBpZiAoZS5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZCAmJiAhQVVUSEVOVElDQVRFX0FQSVMuc29tZShhcGkgPT4gZS51cmwuaW5jbHVkZXMoYXBpKSkgJiYgIUVYVEVSTkFMX0FQSVMuc29tZShhcGkgPT4gZS51cmwuaW5jbHVkZXMoYXBpKSkpIHtcbiAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICAgIGNvbnN0IHRlbmFudCA9IHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcbiAgICAgIGlmICh0ZW5hbnQ/LnVzZXI/LnNzb0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTG9naW4odGVuYW50Py50ZW5hbnQ/LnRlbmFudE5hbWUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMubG9nb3V0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGUuc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5Db25mbGljdCkge1xuICAgICAgdGhpcy5zZXRDb25mbGljdERldGVjdGVkKGUpO1xuICAgICAgdGhpcy5sb2dvdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyQ29uZmxpY3REZXRlY3RlZCgpO1xuICAgICAgfSwgMzAwMCk7IC8vIERlbGF5IHRoZSByZXNldCB0byBlbnN1cmUgdGhlIFVJIHJlYWN0cyBmaXJzdFxuICAgIH1cblxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTcGFya1Nlc3Npb25zID0gKCk6IFN0cmluZ01hcDxTcGFya1Nlc3Npb24+ID0+IEpTT04ucGFyc2UodGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oU0VTU0lPTikpPy5zcGFya1Nlc3Npb25zID8/IHt9O1xuXG4gIHByaXZhdGUgaGFuZGxlQmFja29mZmljZUVycm9yUmVzcG9uc2UoZTogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICBpZiAoZS5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZCAmJiAhQVVUSEVOVElDQVRFX0FQSVMuc29tZShhcGkgPT4gZS51cmwuaW5jbHVkZXMoYXBpKSkgJiYgIUVYVEVSTkFMX0FQSVMuc29tZShhcGkgPT4gZS51cmwuaW5jbHVkZXMoYXBpKSkpIHtcblxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvTG9naW4oKTtcbiAgICB9XG5cbiAgICBpZiAoZS5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLkNvbmZsaWN0KSB7XG4gICAgICB0aGlzLnNldENvbmZsaWN0RGV0ZWN0ZWQoZSk7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9Mb2dpbigpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJDb25mbGljdERldGVjdGVkKCk7XG4gICAgICB9LCAzMDAwKTsgLy8gRGVsYXkgdGhlIHJlc2V0IHRvIGVuc3VyZSB0aGUgVUkgcmVhY3RzIGZpcnN0XG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvTG9naW4odGVuYW50TmFtZT86IHN0cmluZykge1xuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IGxvZ2luUm91dGUgPSAnL2FjY291bnQvbG9naW4nO1xuXG4gICAgLy8gSWYgbW9iaWxlIOKGkiBhbHdheXMgJycsIG90aGVyd2lzZSBidWlsZCByb3V0ZSAod2l0aCBvciB3aXRob3V0IHRlbmFudClcbiAgICBjb25zdCB1cmwgPSBpc01vYmlsZUFwcE1vZGVcbiAgICAgID8gJydcbiAgICAgIDogdGVuYW50TmFtZVxuICAgICAgICA/IGAke3RlbmFudE5hbWV9JHtsb2dpblJvdXRlfWBcbiAgICAgICAgOiBsb2dpblJvdXRlO1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuICB9XG5cblxuICBARGlzcGF0Y2goKSBwcml2YXRlIGxvZ291dCA9IChsb2dvdXRBdWRpdDogYm9vbGVhbiwgbG9nb3V0QmFja29mZmljZUF1ZGl0OiBib29sZWFuKSA9PiBuZXcgTG9nb3V0QWN0aW9uKGxvZ291dEF1ZGl0LCBsb2dvdXRCYWNrb2ZmaWNlQXVkaXQpOyAvLyB3aGVuIDQwMSBkbyBub3QgaW52b2tlIGluIHRoZSBsb2dvdXQgYWN0aW9uIHRoZSBsb2dvdXQgQXVkaXRcblxuICBARGlzcGF0Y2goKSBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkID0gKHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oc2VydmljZXNSdW5uaW5nU3RhdHVzLCBndWlkKTtcblxuICBARGlzcGF0Y2goKSBzZXRDb25mbGljdERldGVjdGVkID0gKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gbmV3IFNldENvbmZsaWN0RGV0ZWN0ZWQoZXJyb3IpO1xuICBARGlzcGF0Y2goKSBjbGVhckNvbmZsaWN0RGV0ZWN0ZWQgPSAoKSA9PiBuZXcgQ2xlYXJDb25mbGljdERldGVjdGVkKCk7XG59XG4iXX0=
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC10b2tlbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9hdXRoLXRva2VuLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBd0UsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFekQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTNHLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQW1FLE1BQU0sd0NBQXdDLENBQUM7QUFLcEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7OztBQUtyRCxN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QUFFLENBQUM7WUFDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMvQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxnREFBZ0Q7UUFDNUQsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxlQUFlLENBQUMsVUFBbUI7UUFDekMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5RSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQztRQUVwQyx3RUFBd0U7UUFDeEUsTUFBTSxHQUFHLEdBQUcsZUFBZTtZQUN6QixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQyxVQUFVO2dCQUNWLENBQUMsQ0FBQyxHQUFHLFVBQVUsR0FBRyxVQUFVLEVBQUU7Z0JBQzlCLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0dBNVRVLGdCQUFnQjttSEFBaEIsZ0JBQWdCOztBQStUUDtJQUFuQixRQUFRLEVBQUU7Z0RBQWlJO0FBRWhJO0lBQVgsUUFBUSxFQUFFO3NFQUMyRDtBQUUxRDtJQUFYLFFBQVEsRUFBRTs2REFBb0Y7QUFDbkY7SUFBWCxRQUFRLEVBQUU7K0RBQTJEOzRGQXJVM0QsZ0JBQWdCO2tCQUQ1QixVQUFVO3NPQWdVVyxNQUFNLE1BRWQsNEJBQTRCLE1BRzVCLG1CQUFtQixNQUNuQixxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSwgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlzcGF0Y2ggfSBmcm9tICdAbmd4cy1sYWJzL2Rpc3BhdGNoLWRlY29yYXRvcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNFU1NJT04gfSBmcm9tICcuLi9jb25zdGFudHMva2V5cy1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZU1hcCB9IGZyb20gJy4uL2VudW1zL2FwcC10eXBlLW1hcC5lbnVtJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBhcmtDb25uZWN0aW9uU3RhdHVzIH0gZnJvbSAnLi4vZW51bXMvcHJpb3JpdHktbGluay1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBTcGFya1Nlc3Npb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NwYXJrLXNlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlZnJlc2hJbmZvIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL21vZGVsL3JlZnJlc2gtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2xlYXJDb25mbGljdERldGVjdGVkLCBMb2dvdXRBY3Rpb24sIFNldENvbmZsaWN0RGV0ZWN0ZWQgfSBmcm9tICcuLi9tb2R1bGVzL2F1dGgvc2Vzc2lvbi5hY3Rpb25zJztcbmltcG9ydCB7IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS1tb2RhbCc7XG5pbXBvcnQgeyBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5U3RhdGUgfSBmcm9tICcuLi9tb2R1bGVzL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL21vZHVsZXMvc2lkZW5hdi9zaWRlbmF2LnN0YXRlJztcbmltcG9ydCB7IFNtYXJ0cGFya1N0YXRlIH0gZnJvbSAnLi4vbW9kdWxlcy9zbWFydHBhcmtzL3NtYXJ0cGFyay5zdGF0ZSc7XG5pbXBvcnQgeyBBcHBNb2R1bGUsIFBsYXRmb3JtVHlwZSwgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBTbWFydHBhcmtEdG8sIFN1Yk1vZHVsZSB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IFNtYXJ0cGFya0Jhc2ljRHRvIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UeXBlIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eS9ycGMtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0VXNlclRpbWVab25lIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS51dGlsJztcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gJy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVmcmVzaFRva2VuU2VydmljZSB9IGZyb20gJy4vcmVmcmVzaC10b2tlbi5zZXJ2aWNlJztcblxuY29uc3QgQVVUSEVOVElDQVRFX0FQSVMgPSBbXG4gIC8vIFdlYlxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92ZXJpZnktMmZhLWF1dGgnLFxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9tdWx0aS10ZW5hbnRzLWF1dGhlbnRpY2F0ZScsXG5cbiAgLy8gQmFja29mZmljZVxuICAnYXBpL3NlcnZpY2VzL2JhY2tvZmZpY2V1c2VyL2F1dGhlbnRpY2F0ZScsXG5cbiAgLy8gTW9iaWxlXG4gICdhcGkvc2VydmljZXMvdjIvbW9iaWxlL3VzZXJzL3ZlcmlmeS0yZmEtYXV0aCcsXG4gICdhcGkvc2VydmljZXMvdjIvbW9iaWxlL3VzZXJzL2F1dGhlbnRpY2F0ZScsXG4gICdhcGkvc2VydmljZXMvdjIvbW9iaWxlL3VzZXJzL211bHRpLXRlbmFudHMtYXV0aGVudGljYXRlJyxcbl07XG5cbmNvbnN0IEVER0VfUFJFRklYX0FQSSA9ICcvYXBpL3NlcnZpY2VzL3dlYi9zcCc7XG5jb25zdCBNT0JPSUxFX0VER0VfUFJFRklYX0FQSSA9ICcvYXBpL3NlcnZpY2VzL3YyL21vYmlsZS9zcCc7XG5cbmNvbnN0IFJFRlJFU0hfVE9LRU5fQVBJID0gJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvcmVmcmVzaC10b2tlbic7XG5jb25zdCBSRUZSRVNIX01PQklMRV9UT0tFTl9BUEkgPSAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy9yZWZyZXNoLXRva2VuJztcblxuY29uc3QgRVhURVJOQUxfQVBJUyA9IFtcbiAgJ2FwaS9zZXJ2aWNlcy9zZWxmdmFsaWRhdGlvbi9kZXRhaWxzJyxcbiAgJy9leGVjdXRlL3NlbGYtdmFsaWRhdGlvbicsIC8vIFRPRE86IFJlbW92ZSB3aGVuIHNlbGYtdmFsaWRhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBuZXcgcHJvamVjdCAoTWF0YW5TaG9tZXIpXG5dO1xuY29uc3QgQU5PTllNT1VTX0FQSVMgPSBbXG4gIFJFRlJFU0hfVE9LRU5fQVBJLFxuICAvLyBMYXRlc3QgV2ViIFVSTHNcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvbXVsdGktdGVuYW50cy1hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92ZXJpZnktMmZhLWF1dGgnLFxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92ZXJpZnktMmZhLWF1dGgtbG9naW4nLFxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy92YWxpZGF0ZS1hY3RpdmF0aW9uJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvb2lkYy1hdXRoJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvYXNzZXQvbG9nbycsXG4gICdhcGkvc2VydmljZXMvd2ViL3RlbmFudC9kZXRhaWxzJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvY29uZmlndXJhdGlvbi9zcGFyay1tb2JpbGUtdmVyc2lvbicsXG4gICdhcGkvc2VydmljZXMvd2ViL3RlbmFudC9kYXRhJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvZm9yZ290LXBhc3N3b3JkJyxcbiAgJ2FwaS9zZXJ2aWNlcy93ZWIvdXNlcnMvZm9yZ290LXBhc3N3b3JkLXRlbmFudGxlc3MnLFxuICAnYXBpL3NlcnZpY2VzL3dlYi91c2Vycy9hY3RpdmF0ZScsXG5cbiAgLy8gQmFja29mZmljZSBVUkxzXG4gICdhcGkvc2VydmljZXMvYmFja29mZmljZXVzZXIvYXV0aGVudGljYXRlJyxcbl07XG5cbmNvbnN0IE1PQklMRV9BTk9OWU1PVVNfQVBJUyA9IFtcbiAgLy8gTW9iaWxlXG4gIFJFRlJFU0hfTU9CSUxFX1RPS0VOX0FQSSxcbiAgJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvdXNlcnMvbXVsdGktdGVuYW50cy1hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy9hdXRoZW50aWNhdGUnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy92ZXJpZnktMmZhLWF1dGgnLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS91c2Vycy92ZXJpZnktMmZhLWF1dGgtbG9naW4nLFxuICAnYXBpL3NlcnZpY2VzL3YyL21vYmlsZS9hc3NldC9sb2dvJyxcbiAgJ2FwaS9zZXJ2aWNlcy92Mi9tb2JpbGUvY29uZmlndXJhdGlvbi9zcGFyay1tb2JpbGUtdmVyc2lvbicsXG4gICdhcGkvc2VydmljZXMvdjIvbW9iaWxlL3RlbmFudC9kYXRhJyxcbl07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdXRoVG9rZW5TZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIHN0b3JlOiBTdG9yZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSwgcHJpdmF0ZSByZWZyZXNoVG9rZW5TZXJ2aWNlOiBSZWZyZXNoVG9rZW5TZXJ2aWNlLCBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UpIHtcbiAgfVxuXG4gIHB1YmxpYyBpc1JlZnJlc2hUb2tlbkV4cGlyZWQgPSAocmVmcmVzaEluZm86IFJlZnJlc2hJbmZvKSA9PlxuICAgICFyZWZyZXNoSW5mbyB8fCBuZXcgRGF0ZSgpID4gbmV3IERhdGUobW9tZW50KHJlZnJlc2hJbmZvLmV4cGlyYXRpb24pLmFkZCgtIHJlZnJlc2hJbmZvLnJlZnJlc2hJbnRlcnZhbCAqIDAuMSwgJ21pbGxpc2Vjb25kcycpLmZvcm1hdCgpKTtcblxuICAvLyByZWZyZXNoSW50ZXJ2YWw6IGVhcmx5IGV4cGlydHkgb2Zmc2V0XG4gIHB1YmxpYyBpc1Rva2VuRXhwaXJlZCh0b2tlbjogc3RyaW5nLCByZWZyZXNoSW50ZXJ2YWw6IG51bWJlciA9IDApOiBib29sZWFuIHtcbiAgICBjb25zdCBleHBpcmF0aW9uID0gdGhpcy5wYXJzZUp3dEV4cCh0b2tlbik7XG4gICAgaWYgKGV4cGlyYXRpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoKSA+IG5ldyBEYXRlKG1vbWVudC51bml4KGV4cGlyYXRpb24pLmFkZCgtcmVmcmVzaEludGVydmFsICogMC4xLCAnbWlsbGlzZWNvbmRzJykuZm9ybWF0KCkpXG4gIH1cblxuICBwdWJsaWMgcGFyc2VKd3RFeHAodG9rZW46IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkU2VnbWVudCA9IHRva2VuLnNwbGl0KCcuJylbMV07XG4gICAgICBpZiAoIXBheWxvYWRTZWdtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFzZTY0ID0gcGF5bG9hZFNlZ21lbnQucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAnPScucmVwZWF0KCg0IC0gKGJhc2U2NC5sZW5ndGggJSA0KSkgJSA0KTtcbiAgICAgIGlmICh0eXBlb2YgYXRvYiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5wYXJzZShhdG9iKGJhc2U2NCArIHBhZGRpbmcpKTtcbiAgICAgIHJldHVybiB0eXBlb2YgcGF5bG9hZC5leHAgPT09ICdudW1iZXInID8gcGF5bG9hZC5leHAgOiBudWxsO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZVJlcXVlc3QocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgIHJlcSA9IHRoaXMuc2V0UmVxdWVzdEhlYWRlcnMocmVxKTtcbiAgICBsZXQgcmVxdWVzdDogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4gPSBuZXh0LmhhbmRsZShyZXEpO1xuICAgIGNvbnN0IHJlZnJlc2hJbmZvOiBSZWZyZXNoSW5mbyA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEF1dGg7XG4gICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlUmVmcmVzaFRva2VuKHJlcSkgJiYgdGhpcy5pc1JlZnJlc2hUb2tlbkV4cGlyZWQocmVmcmVzaEluZm8pKSB7XG4gICAgICByZXF1ZXN0ID0gdGhpcy5yZWZyZXNoVG9rZW5TZXJ2aWNlLmhhbmRsZVJlZnJlc2hUb2tlbihyZXEsIG5leHQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUJhY2tPZmZpY2VSZXF1ZXN0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICByZXEgPSB0aGlzLnNldEJhY2tPZmZpY2VSZXF1ZXN0SGVhZGVycyhyZXEpO1xuICAgIGxldCByZXF1ZXN0OiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiA9IG5leHQuaGFuZGxlKHJlcSk7XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIHNldEJhY2tPZmZpY2VSZXF1ZXN0SGVhZGVycyhyZXE6IEh0dHBSZXF1ZXN0PGFueT4pIHtcbiAgICBjb25zdCBhcHBsaWNhdGlvblR5cGU6IEFwcGxpY2F0aW9uVHlwZSA9IEFwcFR5cGVNYXAuZ2V0KHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUpO1xuICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbikge1xuICAgICAgcmVxID0gcmVxLmNsb25lKHtcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnNcbiAgICAgICAgICAuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VufWApXG4gICAgICAgICAgLnNldCgnQXBwbGljYXRpb24tVHlwZScsIGFwcGxpY2F0aW9uVHlwZS50b1N0cmluZygpKVxuICAgICAgICAgIC5zZXQoJ25nc3ctYnlwYXNzJywgJ3RydWUnKVxuICAgICAgICAgIC5zZXQoJ3RpbWVab25lJywgZ2V0VXNlclRpbWVab25lKCkpXG4gICAgICAgICAgLnNldCgnQ2xpZW50VmVyc2lvbicsIHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLnBhY2thZ2VJbmZvLnZlcnNpb24pXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgICAgICAgIC5zZXQoJ3RpbWVab25lJywgZ2V0VXNlclRpbWVab25lKCkpXG4gICAgICAgICAgLnNldCgnQXBwbGljYXRpb24tVHlwZScsIGFwcGxpY2F0aW9uVHlwZS50b1N0cmluZygpKVxuICAgICAgICAgIC5zZXQoJ0NsaWVudFZlcnNpb24nLCB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5wYWNrYWdlSW5mby52ZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXE7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlTW9iaWxlUmVxdWVzdChyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XG4gICAgcmVxID0gdGhpcy5zZXRSZXF1ZXN0SGVhZGVycyhyZXEpO1xuICAgIGxldCByZXF1ZXN0OiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiA9IG5leHQuaGFuZGxlKHJlcSk7XG4gICAgY29uc3QgcmVmcmVzaEluZm86IFJlZnJlc2hJbmZvID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0QXV0aDtcbiAgICBpZiAodGhpcy5zaG91bGRIYW5kbGVNb2JpbGVSZWZyZXNoVG9rZW4ocmVxKSAmJiB0aGlzLmlzUmVmcmVzaFRva2VuRXhwaXJlZChyZWZyZXNoSW5mbykpIHtcbiAgICAgIHJlcXVlc3QgPSB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UuaGFuZGxlUmVmcmVzaFRva2VuKHJlcSwgbmV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQmFja29mZmljZUV2ZW50U3RhdHVzRXJyb3IoZTogSHR0cEVycm9yUmVzcG9uc2UsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICBsZXQgcmVzcG9uc2U6IE9ic2VydmFibGU8YW55PjtcbiAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlQmFja29mZmljZUVycm9yUmVzcG9uc2UoZSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUV2ZW50U3RhdHVzRXJyb3IoZTogSHR0cEVycm9yUmVzcG9uc2UsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICBsZXQgcmVzcG9uc2U6IE9ic2VydmFibGU8YW55PjtcbiAgICBzd2l0Y2ggKGUuc3RhdHVzKSB7XG4gICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlUmVmcmVzaFRva2VuKHJlcSkpIHtcbiAgICAgICAgICByZXEgPSB0aGlzLnNldFJlcXVlc3RIZWFkZXJzKHJlcSk7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UuaGFuZGxlUmVmcmVzaFRva2VuKHJlcSwgbmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmhhbmRsZUVycm9yUmVzcG9uc2UoZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlRXJyb3JSZXNwb25zZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU1vYmlsZUV2ZW50U3RhdHVzRXJyb3IoZTogSHR0cEVycm9yUmVzcG9uc2UsIHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICBsZXQgcmVzcG9uc2U6IE9ic2VydmFibGU8YW55PjtcbiAgICBzd2l0Y2ggKGUuc3RhdHVzKSB7XG4gICAgICBjYXNlIEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZDpcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkSGFuZGxlTW9iaWxlUmVmcmVzaFRva2VuKHJlcSkpIHtcbiAgICAgICAgICByZXEgPSB0aGlzLnNldFJlcXVlc3RIZWFkZXJzKHJlcSk7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLnJlZnJlc2hUb2tlblNlcnZpY2UuaGFuZGxlTW9iaWxlUmVmcmVzaFRva2VuKHJlcSwgbmV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSB0aGlzLmhhbmRsZUVycm9yUmVzcG9uc2UoZSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXNwb25zZSA9IHRoaXMuaGFuZGxlRXJyb3JSZXNwb25zZShlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZVN1Y2Nlc3NSZXNwb25zZShyZXE6IEh0dHBSZXF1ZXN0PGFueT4sIGV2ZW50OiBIdHRwUmVzcG9uc2U8YW55Pikge1xuICAgIGlmIChldmVudD8uc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5PayB8fCBldmVudD8uc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5BY2NlcHRlZCkge1xuICAgICAgdGhpcy5jaGVja0FuZENsZWFyUGFya1N0YXR1c0dsb2JhbEVycm9yTm90aWZpY2F0aW9uKHJlcS51cmwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBtb2JpbGVIYW5kbGVTdWNjZXNzUmVzcG9uc2UocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBldmVudDogSHR0cFJlc3BvbnNlPGFueT4pIHtcbiAgICBpZiAoZXZlbnQ/LnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuT2sgfHwgZXZlbnQ/LnN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuQWNjZXB0ZWQpIHtcbiAgICAgIHRoaXMubW9iaWxlQ2hlY2tBbmRDbGVhclBhcmtTdGF0dXNHbG9iYWxFcnJvck5vdGlmaWNhdGlvbihyZXEudXJsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNSZWZyZXNoVG9rZW5SZXF1ZXN0ID0gKHJlcTogSHR0cFJlcXVlc3Q8YW55PikgPT4gcmVxLnVybC5pbmNsdWRlcyhSRUZSRVNIX1RPS0VOX0FQSSkgfHwgcmVxLnVybC5pbmNsdWRlcyhSRUZSRVNIX01PQklMRV9UT0tFTl9BUEkpO1xuXG4gIHByaXZhdGUgc2V0UmVxdWVzdEhlYWRlcnMocmVxOiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgY29uc3QgYXBwbGljYXRpb25UeXBlOiBBcHBsaWNhdGlvblR5cGUgPSBBcHBUeXBlTWFwLmdldCh0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlKTtcbiAgICBjb25zdCBwbGF0Zm9ybVR5cGU6IFBsYXRmb3JtVHlwZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLnBsYXRmb3JtVHlwZTtcbiAgICBjb25zdCBhcHBNb2R1bGU6IEFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgY29uc3Qgc3ViTW9kdWxlOiBTdWJNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5zdWJNb2R1bGUpO1xuICAgIGNvbnN0IGFwcE1vZHVsZVN0ciA9IGFwcE1vZHVsZT8udG9TdHJpbmcoKSB8fCAnJztcbiAgICBjb25zdCBzdWJNb2R1bGVTdHIgPSBzdWJNb2R1bGU/LnRvU3RyaW5nKCkgfHwgJyc7XG5cbiAgICBjb25zdCBzbWFydFBhcmtEdG8gPSB0aGlzLmdldFNtYXJ0UGFya0R0byhyZXEudXJsKSB8fCB7fTtcbiAgICBjb25zdCBzcGFya1ZlcnNpb24gPSBzbWFydFBhcmtEdG9bXCJzcGFya1ZlcnNpb25cIl0gPz8gJyc7XG4gICAgY29uc3Qgc21hcnRQYXJrVmVyc2lvbiA9IChzbWFydFBhcmtEdG9bXCJzbWFydFBhcmtWZXJzaW9uXCJdID8/ICcnKS5yZXBsYWNlKFwiIEJ1aWxkKFwiLCBcIl9cIikucmVwbGFjZShcIilcIiwgXCJcIikudHJpbSgpO1xuXG4gICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuKSB7XG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVyc1xuICAgICAgICAgIC5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW59YClcbiAgICAgICAgICAuc2V0KCd4LXBsYXRmb3JtLXR5cGUnLCBwbGF0Zm9ybVR5cGUudG9TdHJpbmcoKSlcbiAgICAgICAgICAuc2V0KCdBcHBsaWNhdGlvbi1UeXBlJywgYXBwbGljYXRpb25UeXBlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLnNldCgnbmdzdy1ieXBhc3MnLCAndHJ1ZScpXG4gICAgICAgICAgLnNldCgnYXBwTW9kdWxlJywgYXBwTW9kdWxlU3RyKSAvLyBUT0RPOiBSZW1vdmUgd2hlbiA4LjEgaXMgZGVwcmVjYXRlZCA/P1xuICAgICAgICAgIC5zZXQoJ0FwcC1Nb2R1bGUnLCBhcHBNb2R1bGVTdHIpXG4gICAgICAgICAgLnNldCgnU3ViLU1vZHVsZScsIHN1Yk1vZHVsZVN0cilcbiAgICAgICAgICAuc2V0KCd0aW1lWm9uZScsIGdldFVzZXJUaW1lWm9uZSgpKVxuICAgICAgICAgIC5zZXQoJ0NsaWVudFZlcnNpb24nLCB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5wYWNrYWdlSW5mby52ZXJzaW9uKVxuICAgICAgICAgIC5zZXQoJ1NwYXJrVmVyc2lvbicsIHNwYXJrVmVyc2lvbilcbiAgICAgICAgICAuc2V0KCdTbWFydFBhcmtWZXJzaW9uJywgc21hcnRQYXJrVmVyc2lvbilcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgIGhlYWRlcnM6IHJlcS5oZWFkZXJzXG4gICAgICAgICAgLnNldCgneC1wbGF0Zm9ybS10eXBlJywgcGxhdGZvcm1UeXBlLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLnNldCgnQXBwbGljYXRpb24tVHlwZScsIGFwcGxpY2F0aW9uVHlwZS50b1N0cmluZygpKVxuICAgICAgICAgIC5zZXQoJ3RpbWVab25lJywgZ2V0VXNlclRpbWVab25lKCkpXG4gICAgICAgICAgLnNldCgnQ2xpZW50VmVyc2lvbicsIHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLnBhY2thZ2VJbmZvLnZlcnNpb24pXG4gICAgICAgICAgLnNldCgnU3BhcmtWZXJzaW9uJywgc3BhcmtWZXJzaW9uKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkSGFuZGxlUmVmcmVzaFRva2VuKHJlcTogSHR0cFJlcXVlc3Q8YW55Pikge1xuICAgIHJldHVybiAhQU5PTllNT1VTX0FQSVMuc29tZShhcGkgPT4gcmVxLnVybC5pbmNsdWRlcyhhcGkpKSAmJiAhdGhpcy5pc1JlZnJlc2hUb2tlblJlcXVlc3QocmVxKSAmJiAhRVhURVJOQUxfQVBJUy5zb21lKGFwaSA9PiByZXEudXJsLmluY2x1ZGVzKGFwaSkpICYmICF0aGlzLmlzU2VsZlZhbGlkYXRpb25MaW5rVVJMO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRIYW5kbGVNb2JpbGVSZWZyZXNoVG9rZW4ocmVxOiBIdHRwUmVxdWVzdDxhbnk+KSB7XG4gICAgcmV0dXJuICFNT0JJTEVfQU5PTllNT1VTX0FQSVMuc29tZShhcGkgPT4gcmVxLnVybC5pbmNsdWRlcyhhcGkpKSAmJiAhdGhpcy5pc1JlZnJlc2hUb2tlblJlcXVlc3QocmVxKTtcbiAgfVxuXG4gIC8vIFRlbXBvcmFyeSBjaGVjayBmb3IgJ3NlbGYtdmFsaWRhdGlvbj90b2tlbj0nIGluIFVSTC5cbiAgLy8gVGhpcyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHNlbGYgdmFsaWRhdGlvbiBsaW5rcyBhcmUgaGFuZGxlZCBieSB0aGUgbmV3IHByb2plY3QuXG4gIHByaXZhdGUgaXNTZWxmVmFsaWRhdGlvbkxpbmtVUkwgPSBsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvc2VsZi12YWxpZGF0aW9uP3Rva2VuPScpO1xuXG4gIHByaXZhdGUgZ2V0U21hcnRQYXJrRHRvKHJlcXVlc3RVcmw6IHN0cmluZyk6IFNtYXJ0cGFya0R0byB8IFNtYXJ0cGFya0Jhc2ljRHRvIHtcbiAgICBsZXQgZ3VpZCA9IG51bGw7XG5cbiAgICBjb25zdCBndWlkUGF0dGVybiA9IC9bYS1mQS1GMC05XXs4fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXs0fS1bYS1mQS1GMC05XXsxMn0vO1xuICAgIGNvbnN0IG1hdGNoZXMgPSByZXF1ZXN0VXJsLm1hdGNoKGd1aWRQYXR0ZXJuKTtcblxuICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgZ3VpZCA9IG1hdGNoZXNbMF07XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0VXJsLmluY2x1ZGVzKCcvc2VuZC1tYWlsLWZyb20tZW50aXR5JykpIHtcbiAgICAgIGd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc21hcnRQYXJrRHRvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTbWFydHBhcmtTdGF0ZS5zbWFydHBhcmtzKT8uZmluZChzbWFydFBhcmsgPT4gc21hcnRQYXJrLmd1aWQgPT09IGd1aWQpO1xuICAgIHJldHVybiBzbWFydFBhcmtEdG87XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kQ2xlYXJQYXJrU3RhdHVzR2xvYmFsRXJyb3JOb3RpZmljYXRpb24odXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodXJsPy5zdGFydHNXaXRoKEVER0VfUFJFRklYX0FQSSkpIHtcbiAgICAgIGNvbnN0IGFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgICBpZiAoYXBwTW9kdWxlID09IEFwcE1vZHVsZS5DYyB8fCBhcHBNb2R1bGUgPT0gQXBwTW9kdWxlLk1hbmFnZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKTtcbiAgICAgICAgY29uc3QgZ3VpZDogc3RyaW5nID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgICAgICBjb25zdCBwYXJrSWQ6IG51bWJlciA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5wYXJrSWQpO1xuXG4gICAgICAgIGlmIChndWlkICYmIHBhcmtJZCAmJiBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeVtndWlkXSkge1xuICAgICAgICAgIHZhciBwYXJrQ29ubmVjdGlvblN0YXR1cyA9IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF07XG4gICAgICAgICAgaWYgKHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyA9PSBQYXJrQ29ubmVjdGlvblN0YXR1cy5TcGFya0NvcmVTZXJ2ZXJEaXNjb25uZWN0ZWQgfHxcbiAgICAgICAgICAgIHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyA9PSBQYXJrQ29ubmVjdGlvblN0YXR1cy5TcGFya0NvcmVDbG91ZFNlcnZlckRpc2Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZXJ2aWNlc1J1bm5pbmdTdGF0dXMoZ3VpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb2JpbGVDaGVja0FuZENsZWFyUGFya1N0YXR1c0dsb2JhbEVycm9yTm90aWZpY2F0aW9uKHVybDogc3RyaW5nKSB7XG4gICAgaWYgKHVybD8uc3RhcnRzV2l0aChNT0JPSUxFX0VER0VfUFJFRklYX0FQSSkpIHtcbiAgICAgIGNvbnN0IGFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgICBpZiAoYXBwTW9kdWxlID09IEFwcE1vZHVsZS5DYyB8fCBhcHBNb2R1bGUgPT0gQXBwTW9kdWxlLk1hbmFnZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvblN0YXR1c0RpY3Rpb25hcnk6IENvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5ID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLnBhcmtDb25uZWN0aW9uU3RhdHVzTWFwKTtcbiAgICAgICAgY29uc3QgZ3VpZDogc3RyaW5nID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgICAgICBjb25zdCBwYXJrSWQ6IG51bWJlciA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5wYXJrSWQpO1xuXG4gICAgICAgIGlmIChndWlkICYmIHBhcmtJZCAmJiBjb25uZWN0aW9uU3RhdHVzRGljdGlvbmFyeVtndWlkXSkge1xuICAgICAgICAgIHZhciBwYXJrQ29ubmVjdGlvblN0YXR1cyA9IGNvbm5lY3Rpb25TdGF0dXNEaWN0aW9uYXJ5W2d1aWRdW3BhcmtJZF07XG4gICAgICAgICAgaWYgKHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyA9PSBQYXJrQ29ubmVjdGlvblN0YXR1cy5TcGFya0NvcmVTZXJ2ZXJEaXNjb25uZWN0ZWQgfHxcbiAgICAgICAgICAgIHBhcmtDb25uZWN0aW9uU3RhdHVzLnN0YXR1cyA9PSBQYXJrQ29ubmVjdGlvblN0YXR1cy5TcGFya0NvcmVDbG91ZFNlcnZlckRpc2Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZXJ2aWNlc1J1bm5pbmdTdGF0dXMoZ3VpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZXJ2aWNlc1J1bm5pbmdTdGF0dXMoc21hcnRQYXJrR3VpZDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5KTtcbiAgICBjb25zdCBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXM6IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byA9IHNlcnZpY2VzUnVubmluZ1N0YXR1c0RpY3Rpb25hcnlbc21hcnRQYXJrR3VpZF07XG4gICAgY3VycmVudEZhY2lsaXR5U2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDb3JlQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0Nsb3VkQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICBjdXJyZW50RmFjaWxpdHlTZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDbG91ZERpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG51bGw7XG4gICAgY3VycmVudEZhY2lsaXR5U2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG51bGw7XG4gICAgdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkKGN1cnJlbnRGYWNpbGl0eVNlcnZpY2VzUnVubmluZ1N0YXR1cywgc21hcnRQYXJrR3VpZCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yUmVzcG9uc2UoZTogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICBpZiAoZS5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZCAmJiAhQVVUSEVOVElDQVRFX0FQSVMuc29tZShhcGkgPT4gZS51cmwuaW5jbHVkZXMoYXBpKSkgJiYgIUVYVEVSTkFMX0FQSVMuc29tZShhcGkgPT4gZS51cmwuaW5jbHVkZXMoYXBpKSkpIHtcbiAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICAgIGNvbnN0IHRlbmFudCA9IHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcbiAgICAgIGlmICh0ZW5hbnQ/LnVzZXI/LnNzb0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTG9naW4odGVuYW50Py50ZW5hbnQ/LnRlbmFudE5hbWUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMubG9nb3V0KGZhbHNlLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGUuc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5Db25mbGljdCkge1xuICAgICAgdGhpcy5zZXRDb25mbGljdERldGVjdGVkKGUpO1xuICAgICAgdGhpcy5sb2dvdXQoZmFsc2UsIGZhbHNlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyQ29uZmxpY3REZXRlY3RlZCgpO1xuICAgICAgfSwgMzAwMCk7IC8vIERlbGF5IHRoZSByZXNldCB0byBlbnN1cmUgdGhlIFVJIHJlYWN0cyBmaXJzdFxuICAgIH1cblxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTcGFya1Nlc3Npb25zID0gKCk6IFN0cmluZ01hcDxTcGFya1Nlc3Npb24+ID0+IEpTT04ucGFyc2UodGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oU0VTU0lPTikpPy5zcGFya1Nlc3Npb25zID8/IHt9O1xuXG4gIHByaXZhdGUgaGFuZGxlQmFja29mZmljZUVycm9yUmVzcG9uc2UoZTogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICBpZiAoZS5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlVuYXV0aG9yaXplZCAmJiAhQVVUSEVOVElDQVRFX0FQSVMuc29tZShhcGkgPT4gZS51cmwuaW5jbHVkZXMoYXBpKSkgJiYgIUVYVEVSTkFMX0FQSVMuc29tZShhcGkgPT4gZS51cmwuaW5jbHVkZXMoYXBpKSkpIHtcblxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvTG9naW4oKTtcbiAgICB9XG5cbiAgICBpZiAoZS5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLkNvbmZsaWN0KSB7XG4gICAgICB0aGlzLnNldENvbmZsaWN0RGV0ZWN0ZWQoZSk7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9Mb2dpbigpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xlYXJDb25mbGljdERldGVjdGVkKCk7XG4gICAgICB9LCAzMDAwKTsgLy8gRGVsYXkgdGhlIHJlc2V0IHRvIGVuc3VyZSB0aGUgVUkgcmVhY3RzIGZpcnN0XG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvTG9naW4odGVuYW50TmFtZT86IHN0cmluZykge1xuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IGxvZ2luUm91dGUgPSAnL2FjY291bnQvbG9naW4nO1xuXG4gICAgLy8gSWYgbW9iaWxlIOKGkiBhbHdheXMgJycsIG90aGVyd2lzZSBidWlsZCByb3V0ZSAod2l0aCBvciB3aXRob3V0IHRlbmFudClcbiAgICBjb25zdCB1cmwgPSBpc01vYmlsZUFwcE1vZGVcbiAgICAgID8gJydcbiAgICAgIDogdGVuYW50TmFtZVxuICAgICAgICA/IGAke3RlbmFudE5hbWV9JHtsb2dpblJvdXRlfWBcbiAgICAgICAgOiBsb2dpblJvdXRlO1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xuICB9XG5cblxuICBARGlzcGF0Y2goKSBwcml2YXRlIGxvZ291dCA9IChsb2dvdXRBdWRpdDogYm9vbGVhbiwgbG9nb3V0QmFja29mZmljZUF1ZGl0OiBib29sZWFuKSA9PiBuZXcgTG9nb3V0QWN0aW9uKGxvZ291dEF1ZGl0LCBsb2dvdXRCYWNrb2ZmaWNlQXVkaXQpOyAvLyB3aGVuIDQwMSBkbyBub3QgaW52b2tlIGluIHRoZSBsb2dvdXQgYWN0aW9uIHRoZSBsb2dvdXQgQXVkaXRcblxuICBARGlzcGF0Y2goKSBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkID0gKHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oc2VydmljZXNSdW5uaW5nU3RhdHVzLCBndWlkKTtcblxuICBARGlzcGF0Y2goKSBzZXRDb25mbGljdERldGVjdGVkID0gKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gbmV3IFNldENvbmZsaWN0RGV0ZWN0ZWQoZXJyb3IpO1xuICBARGlzcGF0Y2goKSBjbGVhckNvbmZsaWN0RGV0ZWN0ZWQgPSAoKSA9PiBuZXcgQ2xlYXJDb25mbGljdERldGVjdGVkKCk7XG59XG4iXX0=
|
|
@@ -25,6 +25,7 @@ import { AppConfigService } from './app-config.service';
|
|
|
25
25
|
import { GeneralActionService } from './general-action.service';
|
|
26
26
|
import { RealtimeEventService } from './realtime-event.service';
|
|
27
27
|
import { SessionStorageService } from './session-storage.service';
|
|
28
|
+
import { AuthTokenService } from './auth-token.service';
|
|
28
29
|
export class SignalRObject {
|
|
29
30
|
constructor(guid, jsonPayload) {
|
|
30
31
|
this.guid = guid;
|
|
@@ -69,12 +70,14 @@ export class SignalR {
|
|
|
69
70
|
this.zoneChanged = (zoneDto, parkId) => new ZoneChangedAction(zoneDto, parkId);
|
|
70
71
|
this.initializeSmartParkConnection = (smartpark) => new AddSmartparkAction(smartpark);
|
|
71
72
|
this.facilityRemoteCommandExecuted = (facilityRemoteCommandEvent) => new FacilityRemoteCommandExecutedAction(facilityRemoteCommandEvent);
|
|
73
|
+
this.signalRRefreshToken = () => new SignalRRefreshTokenAction();
|
|
72
74
|
this.store = injector.get(Store);
|
|
73
75
|
this.realtimeEventService = injector.get(RealtimeEventService);
|
|
74
76
|
this.notificationEventService = injector.get(NotificationEventService);
|
|
75
77
|
this.sessionStorageService = injector.get(SessionStorageService);
|
|
76
78
|
this.appConfig = injector.get(AppConfigService);
|
|
77
79
|
this.generalActionService = injector.get(GeneralActionService);
|
|
80
|
+
this.authTokenService = injector.get(AuthTokenService);
|
|
78
81
|
}
|
|
79
82
|
initRealtimeEventListeners() {
|
|
80
83
|
const config = this.appConfig.getConfig();
|
|
@@ -88,7 +91,7 @@ export class SignalR {
|
|
|
88
91
|
skipNegotiation: true, // Skip the negotiation step
|
|
89
92
|
transport: HttpTransportType.WebSockets // Use WebSockets directly
|
|
90
93
|
})
|
|
91
|
-
.withAutomaticReconnect(new TibaRetryPolicy(maxConsecutiveFailedRetryCount))
|
|
94
|
+
.withAutomaticReconnect(new TibaRetryPolicy(maxConsecutiveFailedRetryCount, this.injector))
|
|
92
95
|
.build();
|
|
93
96
|
this.connection.keepAliveIntervalInMilliseconds = 8000;
|
|
94
97
|
this.connection.serverTimeoutInMilliseconds = 30000;
|
|
@@ -320,8 +323,14 @@ export class SignalR {
|
|
|
320
323
|
this.handleRealTimeAwaitingSubscriptions();
|
|
321
324
|
this.handleNotificationAwaitingSubscription();
|
|
322
325
|
})
|
|
323
|
-
.catch(async (
|
|
324
|
-
this.
|
|
326
|
+
.catch(async (error) => {
|
|
327
|
+
if (isUnauthorizedOrExpired(error, this.sessionStorageService.accessToken, this.authTokenService)) {
|
|
328
|
+
datadogLogs.logger.info(`SignalR initial connect -> unauthorized. Message: ${error?.message}`);
|
|
329
|
+
this.signalRRefreshToken();
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
this.retryConnection(connection, 1);
|
|
333
|
+
}
|
|
325
334
|
});
|
|
326
335
|
}
|
|
327
336
|
_disconnect(connection) {
|
|
@@ -344,10 +353,16 @@ export class SignalR {
|
|
|
344
353
|
this.handleRealTimeAwaitingSubscriptions();
|
|
345
354
|
this.handleNotificationAwaitingSubscription();
|
|
346
355
|
})
|
|
347
|
-
.catch(() => {
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
this.
|
|
356
|
+
.catch((error) => {
|
|
357
|
+
if (isUnauthorizedOrExpired(error, this.sessionStorageService.accessToken, this.authTokenService)) {
|
|
358
|
+
datadogLogs.logger.info(`SignalR retry connect -> unauthorized. Message: ${error?.message}`);
|
|
359
|
+
this.signalRRefreshToken();
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
const config = this.appConfig.getConfig();
|
|
363
|
+
if (retryCount <= config.signalR.maxConsecutiveFailedRetryCount) {
|
|
364
|
+
this.retryConnection(connection, retryCount + 1);
|
|
365
|
+
}
|
|
351
366
|
}
|
|
352
367
|
});
|
|
353
368
|
}, getSecondsBackoff(retryCount));
|
|
@@ -411,24 +426,26 @@ __decorate([
|
|
|
411
426
|
__decorate([
|
|
412
427
|
Dispatch()
|
|
413
428
|
], SignalR.prototype, "facilityRemoteCommandExecuted", void 0);
|
|
429
|
+
__decorate([
|
|
430
|
+
Dispatch()
|
|
431
|
+
], SignalR.prototype, "signalRRefreshToken", void 0);
|
|
414
432
|
export class TibaRetryPolicy {
|
|
415
|
-
constructor(maxConsecutiveFailedRetryCount) {
|
|
433
|
+
constructor(maxConsecutiveFailedRetryCount, injector) {
|
|
416
434
|
this.signalRRefreshToken = () => new SignalRRefreshTokenAction();
|
|
417
435
|
this.maxConsecutiveFailedRetryCount = maxConsecutiveFailedRetryCount;
|
|
436
|
+
this.sessionStorageService = injector.get(SessionStorageService);
|
|
437
|
+
this.authTokenService = injector.get(AuthTokenService);
|
|
418
438
|
}
|
|
419
439
|
nextRetryDelayInMilliseconds(retryContext) {
|
|
420
440
|
let milliseconds = null;
|
|
421
441
|
const currentRetryCount = retryContext.previousRetryCount + 1;
|
|
422
|
-
if (
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
datadogLogs.logger.info(`TibaRetryPolicy -> failed negotiation #${currentRetryCount}. Message: ${retryContext.retryReason.message}`);
|
|
430
|
-
milliseconds = getSecondsBackoff(currentRetryCount);
|
|
431
|
-
}
|
|
442
|
+
if (isUnauthorizedOrExpired(retryContext.retryReason, this.sessionStorageService.accessToken, this.authTokenService)) {
|
|
443
|
+
datadogLogs.logger.info(`TibaRetryPolicy -> unauthorized token. Message: ${retryContext.retryReason.message}`);
|
|
444
|
+
this.signalRRefreshToken();
|
|
445
|
+
}
|
|
446
|
+
else if (currentRetryCount < this.maxConsecutiveFailedRetryCount) {
|
|
447
|
+
datadogLogs.logger.info(`TibaRetryPolicy -> failed negotiation #${currentRetryCount}. Message: ${retryContext.retryReason.message}`);
|
|
448
|
+
milliseconds = getSecondsBackoff(currentRetryCount);
|
|
432
449
|
}
|
|
433
450
|
return milliseconds;
|
|
434
451
|
}
|
|
@@ -447,4 +464,8 @@ export function getSecondsBackoff(retryCount) {
|
|
|
447
464
|
const [minSeconds, maxSeconds] = delaysTableInSeconds[retryCount] || [0, 0];
|
|
448
465
|
return (Math.floor(Math.random() * (maxSeconds - minSeconds + 1)) + minSeconds) * ONE_SECOND_IN_MILLISECONDS;
|
|
449
466
|
}
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFpQixvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQTRCLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDakcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQzlNLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQ0FBbUMsRUFBRSxrQ0FBa0MsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pLLE9BQU8sRUFB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QUFDO2dCQUNOLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxpQkFBaUIsY0FBYyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBRXJJLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RELENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUdGO0FBRGE7SUFBWCxRQUFRLEVBQUU7NERBQTZEO0FBRzFFLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxVQUFrQjtJQUNsRCxNQUFNLG9CQUFvQixHQUFpQztRQUN6RCxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVTtRQUN0QixDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWTtRQUN6QixDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWTtRQUN6QixDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWTtRQUN6QixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUcsWUFBWTtLQUM3QixDQUFDO0lBQ0YsTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDL0csQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRhdGFkb2dMb2dzIH0gZnJvbSAnQGRhdGFkb2cvYnJvd3Nlci1sb2dzJztcbmltcG9ydCB7IEh0dHBUcmFuc3BvcnRUeXBlLCBIdWJDb25uZWN0aW9uLCBIdWJDb25uZWN0aW9uQnVpbGRlciwgSHViQ29ubmVjdGlvblN0YXRlIH0gZnJvbSAnQG1pY3Jvc29mdC9zaWduYWxyJztcbmltcG9ydCB7IERpc3BhdGNoIH0gZnJvbSAnQG5neHMtbGFicy9kaXNwYXRjaC1kZWNvcmF0b3InO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25FdmVudFNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24tZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUyB9IGZyb20gJy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IEFwcFR5cGUgfSBmcm9tICcuLi9lbnVtcy9hcHAtdHlwZS5lbnVtJztcbmltcG9ydCB7IEFsZXJ0Q2hhbmdlZEFjdGlvbiwgSGFuZGxlQWxlcnRzQWN0aW9uLCBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uLCBIYW5kbGVOb3RpZmljYXRpb25BY3Rpb24sIE5vdGlmaWNhdGlvbkNoYW5nZWRBY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy9hbGVydHMtYW5kLW5vdGlmaWNhdGlvbnMuYWN0aW9ucyc7XG5pbXBvcnQgeyBTaWduYWxSUmVmcmVzaFRva2VuQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9hdXRoL3JlZnJlc2gtdG9rZW4uYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eUNoYW5nZWRBY3Rpb24sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uLCBTZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkQWN0aW9uLCBab25lQ2hhbmdlZEFjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvZmFjaWxpdHkvZmFjaWxpdHkuYWN0aW9ucyc7XG5pbXBvcnQgeyBGYWNpbGl0eVN0YXRlIH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5zdGF0ZSc7XG5pbXBvcnQgeyBQYXJrQWN0aXZpdHlDaGFuZ2VkQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9wYXJrLWFjdGl2aXRpZXMvcGFyay1hY3Rpdml0aWVzLmFjdGlvbnMnO1xuaW1wb3J0IHsgRGV2aWNlQWN0aXZpdHlDaGFuZ2VkQWN0aW9uLCBEZXZpY2VFdmVudENoYW5nZWRBY3Rpb24sIERldmljZVN0YXR1c0NoYW5nZWRBY3Rpb24sIExwclRyYW5zYWN0aW9uc0NoYW5nZWRBY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL3BhcmstbWFuYWdlci9wYXJrLW1hbmFnZXIuYWN0aW9ucyc7XG5pbXBvcnQgeyBTaWRlbmF2U3RhdGUgfSBmcm9tICcuLi9tb2R1bGVzL3NpZGVuYXYvc2lkZW5hdi5zdGF0ZSc7XG5pbXBvcnQgeyBBZGRTbWFydHBhcmtBY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL3NtYXJ0cGFya3Mvc21hcnRwYXJrLWRpYWxvZy5hY3Rpb25zJztcbmltcG9ydCB7IEFsZXJ0RHRvLCBOb3RpZmljYXRpb25EdG8sIFNtYXJ0cGFya0R0byB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0byB9IGZyb20gJy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7XG4gIERldmljZUV2ZW50RHRvLCBEZXZpY2VTdGF0dXNEdG8sIEV2ZW50QWN0aXZpdHlEdG8sIEZhY2lsaXR5RHRvLCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudCwgRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMsXG4gIExwclRyYW5zYWN0aW9uRHRvLCBOb3RpZmljYXRpb25FdmVudFR5cGUsIE5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbkR0bywgUlRFdmVudFN1YnNjcmlwdGlvbkR0bywgUnRFdmVudFR5cGUsIFpvbmVEdG9cbn0gZnJvbSAnLi4vc2VydmljZS1wcm94eS9ycGMtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBHZW5lcmFsQWN0aW9uU2VydmljZSB9IGZyb20gJy4vZ2VuZXJhbC1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBSZWFsdGltZUV2ZW50U2VydmljZSB9IGZyb20gJy4vcmVhbHRpbWUtZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIFNpZ25hbFJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3VpZDogc3RyaW5nLCBwdWJsaWMganNvblBheWxvYWQ6IHN0cmluZykge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSVE9iamVjdE9iamVjdCBleHRlbmRzIFNpZ25hbFJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcnRFdmVudFR5cGU6IFJ0RXZlbnRUeXBlLCBwdWJsaWMgcGFya0lkOiBudW1iZXIsIHB1YmxpYyBndWlkOiBzdHJpbmcsIHB1YmxpYyBqc29uUGF5bG9hZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoZ3VpZCwganNvblBheWxvYWQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGFya05vdGlmaWNhdGlvbiBleHRlbmRzIFNpZ25hbFJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbm90aWZpY2F0aW9uVHlwZTogTm90aWZpY2F0aW9uRXZlbnRUeXBlLCBwdWJsaWMgZ3VpZDogc3RyaW5nLCBwdWJsaWMgaWRlbnRpZmllcjogc3RyaW5nLCBwdWJsaWMganNvblBheWxvYWQ6IHN0cmluZykge1xuICAgIHN1cGVyKGd1aWQsIGpzb25QYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2lnbmFsUiB7XG5cbiAgcHVibGljIGNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb247XG4gIHB1YmxpYyBzdWJzY3JpcHRpb25RdWV1ZTogYW55W10gPSBbXTtcbiAgcHVibGljIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlOiBhbnlbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBzdG9yZTogU3RvcmU7XG4gIHByb3RlY3RlZCByZWFsdGltZUV2ZW50U2VydmljZTogUmVhbHRpbWVFdmVudFNlcnZpY2U7XG4gIHByb3RlY3RlZCBub3RpZmljYXRpb25FdmVudFNlcnZpY2U6IE5vdGlmaWNhdGlvbkV2ZW50U2VydmljZTtcbiAgcHJvdGVjdGVkIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZ2VuZXJhbEFjdGlvblNlcnZpY2U6IEdlbmVyYWxBY3Rpb25TZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLnN0b3JlID0gaW5qZWN0b3IuZ2V0KFN0b3JlKTtcbiAgICB0aGlzLnJlYWx0aW1lRXZlbnRTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFJlYWx0aW1lRXZlbnRTZXJ2aWNlKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkV2ZW50U2VydmljZSA9IGluamVjdG9yLmdldChOb3RpZmljYXRpb25FdmVudFNlcnZpY2UpO1xuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNlc3Npb25TdG9yYWdlU2VydmljZSk7XG4gICAgdGhpcy5hcHBDb25maWcgPSBpbmplY3Rvci5nZXQoQXBwQ29uZmlnU2VydmljZSk7XG4gICAgdGhpcy5nZW5lcmFsQWN0aW9uU2VydmljZSA9IGluamVjdG9yLmdldChHZW5lcmFsQWN0aW9uU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdFJlYWx0aW1lRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgYmFzZVVybCA9IGNvbmZpZy5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZSA/IGNvbmZpZy5hcGlCYXNlVVJMIDogJyc7XG4gICAgY29uc3QgdXJsID0gYCR7YmFzZVVybH0vcmVhbHRpbWUke2NvbmZpZy5hcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZSA/IGA/dmVyc2lvbj0ke2NvbmZpZy5wYWNrYWdlSW5mby52ZXJzaW9ufWAgOiAnJ31gO1xuICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5pbmZvKGBSVCBBUEkgQmFzZSBVcmwgLSAke3VybH1gKTtcblxuICAgIGNvbnN0IG1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudCA9IGNvbmZpZy5zaWduYWxSLm1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudDtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG5ldyBIdWJDb25uZWN0aW9uQnVpbGRlcigpXG4gICAgICAud2l0aFVybCh1cmwsIHtcbiAgICAgICAgYWNjZXNzVG9rZW5GYWN0b3J5OiAoKSA9PiB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbixcbiAgICAgICAgc2tpcE5lZ290aWF0aW9uOiB0cnVlLCAgLy8gU2tpcCB0aGUgbmVnb3RpYXRpb24gc3RlcFxuICAgICAgICB0cmFuc3BvcnQ6IEh0dHBUcmFuc3BvcnRUeXBlLldlYlNvY2tldHMgIC8vIFVzZSBXZWJTb2NrZXRzIGRpcmVjdGx5XG4gICAgICB9KVxuICAgICAgLndpdGhBdXRvbWF0aWNSZWNvbm5lY3QobmV3IFRpYmFSZXRyeVBvbGljeShtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQpKVxuICAgICAgLmJ1aWxkKCk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ua2VlcEFsaXZlSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDgwMDA7XG4gICAgdGhpcy5jb25uZWN0aW9uLnNlcnZlclRpbWVvdXRJbk1pbGxpc2Vjb25kcyA9IDMwMDAwO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uLm9ucmVjb25uZWN0aW5nKChlcnJvcikgPT4ge1xuICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmluZm8oJ0F0dGVtcHRpbmcgdG8gcmVjb25uZWN0OicsIGVycm9yKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY29ubmVjdGlvbi5vbmNsb3NlKChlcnJvcikgPT4ge1xuICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmluZm8oJ0Nvbm5lY3Rpb24gY2xvc2VkIGFmdGVyIGFsbCByZXRyeSBhdHRlbXB0czonLCBlcnJvcik7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ub25yZWNvbm5lY3RlZCgoY29ubmVjdGlvbklkKSA9PiB7XG4gICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgU3VjY2Vzc2Z1bGx5IHJlY29ubmVjdGVkIFNJR05BTFIhLiBDb25uZWN0aW9uSWQ6ICR7Y29ubmVjdGlvbklkfWApO1xuXG4gICAgICB0aGlzLmNoZWNrRm9yVXBkYXRlKCk7XG4gICAgICBjb25zdCBndWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgICAgaWYgKCEhZ3VpZCkge1xuICAgICAgICB0aGlzLnNldFNwYXJrQ29yZUNvbm5lY3Rpb24odHJ1ZSwgZ3VpZCk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWNvbm5lY3RSdEV2ZW50c1N1YnNjcmlwdGlvbnMgPSB0aGlzLnJlYWx0aW1lRXZlbnRTZXJ2aWNlLmdldFN1YnNjcmlwdGlvbkZvclJlY29ubmVjdCgpO1xuICAgICAgdGhpcy5pbnZva2VSZWFsdGltZVJlZ2lzdHJhdGlvbihyZWNvbm5lY3RSdEV2ZW50c1N1YnNjcmlwdGlvbnMsIHRoaXMuaGFuZGxlUmVhbFRpbWVBd2FpdGluZ1N1YnNjcmlwdGlvbnMuYmluZCh0aGlzKSk7XG5cbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbnMgPSB0aGlzLm5vdGlmaWNhdGlvbkV2ZW50U2VydmljZS5nZXRTdWJzY3JpcHRpb25Gb3JSZWNvbm5lY3QoKTtcbiAgICAgIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbnMuZm9yRWFjaChub3RpZmljYXRpb25TdWJzY3JpcHRpb24gPT4ge1xuICAgICAgICB0aGlzLmludm9rZU5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihub3RpZmljYXRpb25TdWJzY3JpcHRpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uQXdhaXRpbmdTdWJzY3JpcHRpb24oKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY29ubmVjdGlvbi5vbignUnRFdmVudCcsIChydEV2ZW50VHlwZTogUnRFdmVudFR5cGUsIHBhcmtJZDogbnVtYmVyLCBndWlkOiBzdHJpbmcsIGpzb25QYXlsb2FkOiBzdHJpbmcpID0+IHtcbiAgICAgIG9mKG5ldyBSVE9iamVjdE9iamVjdChydEV2ZW50VHlwZSwgcGFya0lkLCBndWlkLCBqc29uUGF5bG9hZCkpXG4gICAgICAgIC5waXBlKHRoaXMuaGFuZGxlSnNvblBheWxvYWRUb0xvd2VyKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoUnRFdmVudChyZXMgYXMgUlRPYmplY3RPYmplY3QpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuY29ubmVjdGlvbi5vbignTm90aWZpY2F0aW9uJywgKHR5cGU6IE5vdGlmaWNhdGlvbkV2ZW50VHlwZSwgZ3VpZDogc3RyaW5nLCBpZGVudGlmaWVyOiBzdHJpbmcsIGpzb25QYXlsb2FkOiBzdHJpbmcpID0+IHtcbiAgICAgIG9mKG5ldyBTcGFya05vdGlmaWNhdGlvbih0eXBlLCBndWlkLCBpZGVudGlmaWVyLCBqc29uUGF5bG9hZCkpXG4gICAgICAgIC5waXBlKHRoaXMuaGFuZGxlSnNvblBheWxvYWRUb0xvd2VyKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoTm90aWZpY2F0aW9uKHJlcyBhcyBTcGFya05vdGlmaWNhdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNoZWNrRm9yVXBkYXRlKCk6IHZvaWQ7XG5cbiAgcHVibGljIGNvbm5lY3QoKSB7XG4gICAgdGhpcy5fY29ubmVjdCh0aGlzLmNvbm5lY3Rpb24pO1xuICB9XG5cbiAgcHVibGljIGRpc2Nvbm5lY3QoKSB7XG4gICAgdGhpcy5fZGlzY29ubmVjdCh0aGlzLmNvbm5lY3Rpb24pO1xuICB9XG5cbiAgc3Vic2NyaWJlRm9yUmVhbHRpbWUocnRFdmVudFN1YnNjcmlwdGlvbnM6IFJURXZlbnRTdWJzY3JpcHRpb25EdG8sIHRyaWdnZXJGdW5jdGlvbj86ICgpID0+IHZvaWQpIHtcbiAgICBpZiAodGhpcy5jb25uZWN0aW9uKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLnN0YXRlICE9PSBIdWJDb25uZWN0aW9uU3RhdGUuQ29ubmVjdGVkKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uUXVldWUucHVzaCgoKSA9PiB0aGlzLnN1YnNjcmliZUZvclJlYWx0aW1lKHJ0RXZlbnRTdWJzY3JpcHRpb25zLCB0cmlnZ2VyRnVuY3Rpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJ0RXZlbnRTdWJzY3JpcHRpb25EZWx0YSA9IHRoaXMucmVhbHRpbWVFdmVudFNlcnZpY2UuaGFuZGxlUmVhbHRpbWVFdmVudHNTdWJzY3JpcHRpb25zKHJ0RXZlbnRTdWJzY3JpcHRpb25zKTtcbiAgICAgICAgaWYgKHJ0RXZlbnRTdWJzY3JpcHRpb25EZWx0YS5zdWJzY3JpYmUubGVuZ3RoIHx8IHJ0RXZlbnRTdWJzY3JpcHRpb25EZWx0YS51blN1YnNjcmliZS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmludm9rZVJlYWx0aW1lUmVnaXN0cmF0aW9uKHJ0RXZlbnRTdWJzY3JpcHRpb25EZWx0YSwgdHJpZ2dlckZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUZvck5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uOiBOb3RpZmljYXRpb25TdWJzY3JpcHRpb25EdG8sIHRyaWdnZXJGdW5jdGlvbj86ICgpID0+IHZvaWQpIHtcbiAgICBpZiAodGhpcy5jb25uZWN0aW9uKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLnN0YXRlICE9PSBIdWJDb25uZWN0aW9uU3RhdGUuQ29ubmVjdGVkKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uUXVldWUucHVzaCgoKSA9PiB0aGlzLnN1YnNjcmliZUZvck5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uLCB0cmlnZ2VyRnVuY3Rpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbkRlbHRhID0gdGhpcy5ub3RpZmljYXRpb25FdmVudFNlcnZpY2UuaGFuZGxlTm90aWZpY2F0aW9uU3Vic2NyaXB0aW9ucyhub3RpZmljYXRpb25TdWJzY3JpcHRpb24pO1xuICAgICAgICBpZiAoISFub3RpZmljYXRpb25TdWJzY3JpcHRpb25EZWx0YSkge1xuICAgICAgICAgIHRoaXMuaW52b2tlTm90aWZpY2F0aW9uUmVnaXN0cmF0aW9uKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbkRlbHRhLCB0cmlnZ2VyRnVuY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnZva2VSZWFsdGltZVJlZ2lzdHJhdGlvbihydEV2ZW50U3Vic2NyaXB0aW9uczogUlRFdmVudFN1YnNjcmlwdGlvbkR0bywgdHJpZ2dlckZ1bmN0aW9uPzogKCkgPT4gdm9pZCkge1xuICAgIGNvbnN0IGFwcE1vZHVsZSA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoU2lkZW5hdlN0YXRlLmFwcE1vZHVsZSk7XG4gICAgaWYgKHJ0RXZlbnRTdWJzY3JpcHRpb25zLnVzZXJJZCkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uLmludm9rZTxSVEV2ZW50U3Vic2NyaXB0aW9uRHRvPignUmVnaXN0ZXJQYXJrJywgcnRFdmVudFN1YnNjcmlwdGlvbnMsIGFwcE1vZHVsZSkudGhlbigoc3ViVG8pID0+IHtcbiAgICAgICAgaWYgKHRyaWdnZXJGdW5jdGlvbikge1xuICAgICAgICAgIHRyaWdnZXJGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGludm9rZU5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihub3RpZmljYXRpb25TdWJzY3JpcHRpb246IE5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbkR0bywgdHJpZ2dlckZ1bmN0aW9uPzogKCkgPT4gdm9pZCkge1xuICAgIGlmIChub3RpZmljYXRpb25TdWJzY3JpcHRpb24gJiYgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uLnVzZXJJZCkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uLmludm9rZTxOb3RpZmljYXRpb25TdWJzY3JpcHRpb25EdG8+KCdSZWdpc3Rlck5vdGlmaWNhdGlvbnMnLCBub3RpZmljYXRpb25TdWJzY3JpcHRpb24pLnRoZW4oKHN1YlRvKSA9PiB7XG4gICAgICAgIGlmICh0cmlnZ2VyRnVuY3Rpb24pIHtcbiAgICAgICAgICB0cmlnZ2VyRnVuY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNwYXJrQ29yZUNvbm5lY3Rpb24oaXNDb25uZWN0ZWQ6IGJvb2xlYW4sIGd1aWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNlcnZpY2VzUnVubmluZ1N0YXR1cyA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNEaWN0aW9uYXJ5KVtndWlkXTtcbiAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMuaXNTcGFya0NvcmVDb25uZWN0ZWQgPSBpc0Nvbm5lY3RlZDtcbiAgICBpZiAoIWlzQ29ubmVjdGVkKSB7XG4gICAgICBjb25zdCBmYWNpbGl0eUd1aWQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuZ3VpZCk7XG4gICAgICBjb25zdCBzZXJ2ZXJDbGllbnRUaW1lU3BhbiA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5jbGllbnRTZXJ2ZXJEaWZmRGljdGlvbmFyeSlbZmFjaWxpdHlHdWlkXSB8fCAwO1xuICAgICAgc2VydmljZXNSdW5uaW5nU3RhdHVzLnNwYXJrQ29yZURpc2Nvbm5lY3RlZFRpbWVzdGFtcCA9IG1vbWVudCgpLnN1YnRyYWN0KHNlcnZlckNsaWVudFRpbWVTcGFuLCAnbWlsbGlzZWNvbmRzJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWQoc2VydmljZXNSdW5uaW5nU3RhdHVzLCBndWlkKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSnNvblBheWxvYWRUb0xvd2VyKCk6IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbjxTaWduYWxST2JqZWN0PiB7XG4gICAgcmV0dXJuICRpbnB1dCA9PiAkaW5wdXQucGlwZShtYXAocmVzID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UocmVzLmpzb25QYXlsb2FkKTtcbiAgICAgIHJlcy5qc29uUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG9iaiwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSB7fTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGsgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHtcbiAgICAgICAgICAgICAgaWYgKGsubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRbayAmJiBrLnRvTG93ZXJDYXNlKCldID0gdmFsdWVba107XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRbayAmJiBrLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgay5zdWJzdHJpbmcoMSldID0gdmFsdWVba107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZGlzcGF0Y2hOb3RpZmljYXRpb24ob2JqOiBTcGFya05vdGlmaWNhdGlvbik6IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hOb3RpZmljYXRpb24ob2JqOiBTcGFya05vdGlmaWNhdGlvbikge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKG9iai5qc29uUGF5bG9hZCk7XG4gICAgY29uc29sZS5kZWJ1ZyhgUmVjZWl2ZWQgTm90aWZpY2F0aW9uIHR5cGUgPT09PiAke29iai5ub3RpZmljYXRpb25UeXBlfWApO1xuICAgIHN3aXRjaCAob2JqLm5vdGlmaWNhdGlvblR5cGUpIHtcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkluaXRpYWxDbG91ZENvbm5lY3Q6XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNtYXJ0UGFya0Nvbm5lY3Rpb24oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWQ6XG4gICAgICAgIC8vIFRPRE86IHRoaXMgY29uZGl0aW9uIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIGFsbCBcIkZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkXCIgbm90aWZpY2F0aW9uXG4gICAgICAgIC8vIHdpbGwgYmUgcmVtb3ZlZCB1cG9uIGJlaW5nIGV4ZWN1dGVkIGluIHRoZSBzZXJ2ZXJcbiAgICAgICAgLy8gRm9yIG1vcmUgZXhwbGFuYXRpb24gc2VlOiBTUFJLMy02NzA0XG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IEZhY2lsaXR5UmVtb3RlQ29tbWFuZFR5cGVzLlRyYW5zbWl0U3BlY2lhbERheXMgfHwgZGF0YS50eXBlID09PSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5VcGRhdGVTZXR0aW5ncykge1xuICAgICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMubm90aWZpY2F0aW9uRXZlbnRTZXJ2aWNlLmdldE5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbnNFbnRpdHkoKTtcbiAgICAgICAgICBub3RpZmljYXRpb25TdWJzY3JpcHRpb24udHlwZSA9IG9iai5ub3RpZmljYXRpb25UeXBlO1xuICAgICAgICAgIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSA9IHRydWU7XG4gICAgICAgICAgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uLmlkZW50aWZpZXIgPSB0aGlzLm5vdGlmaWNhdGlvbkV2ZW50U2VydmljZS5nZXROb3RpZmljYXRpb25JZGVudGlmaWVyKGRhdGEuZ3VpZCwgZGF0YS5wYXJrSWQsXG4gICAgICAgICAgICBvYmoubm90aWZpY2F0aW9uVHlwZSwgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uLnVzZXJJZCk7XG4gICAgICAgICAgdGhpcy5zdWJzY3JpYmVGb3JOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkKGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkdlbmVyYWxBY3Rpb25zOlxuICAgICAgICB0aGlzLmdlbmVyYWxBY3Rpb25TZXJ2aWNlLmRpc3BhdGNoR2VuZXJhbEFjdGlvbnMoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuSGFuZGxlQWxlcnQ6XG4gICAgICAgIHRoaXMuaGFuZGxlQWxlcnRzKEFsZXJ0RHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkhhbmRsZWROb3RpZmljYXRpb246XG4gICAgICAgIHRoaXMuaGFuZGxlZE5vdGlmaWNhdGlvbihOb3RpZmljYXRpb25EdG8uZnJvbUpTKGRhdGEpLCBvYmouZ3VpZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuSGFuZGxlTm90aWZpY2F0aW9uOlxuICAgICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbihOb3RpZmljYXRpb25EdG8uZnJvbUpTKGRhdGEpLCBvYmouZ3VpZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5SZXBvcnRHZW5lcmF0ZWQ6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5SZWNlaXB0R2VuZXJhdGVkOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuU3RpY2tlckdlbmVyYXRlZDpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkFwcGxpY2F0aW9uVXBkYXRlOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuQ3JlYXRlUm9sZTpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLlVwZGF0ZVJvbGU6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5Nb250aGxpZXNCdWxrVXBkYXRlOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuTW9udGhsaWVzQnVsa0RlbGV0ZTpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLk1vbnRobGllc0J1bGtVcGRhdGVMb2NhdGlvbjpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLk1vbnRobGllc0J1bGtTZW5kRW1haWw6XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hOb3RpZmljYXRpb24ob2JqKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmRlYnVnKGBVbmtub3duIG5vdGlmaWNhdGlvbiB0eXBlID09PT4gJHtvYmoubm90aWZpY2F0aW9uVHlwZX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGRpc3BhdGNoUnRFdmVudChvYmo6IFJUT2JqZWN0T2JqZWN0KTogdm9pZDtcblxuICBwcml2YXRlIF9kaXNwYXRjaFJ0RXZlbnQob2JqOiBSVE9iamVjdE9iamVjdCkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKG9iai5qc29uUGF5bG9hZCk7XG4gICAgc3dpdGNoIChvYmoucnRFdmVudFR5cGUpIHtcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuRGV2aWNlU3RhdHVzOlxuICAgICAgICB0aGlzLmRldmljZXNTdGF0dXNDaGFuZ2VkKERldmljZVN0YXR1c0R0by5mcm9tSlMoZGF0YSkpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5EeW5hbWljUHJpY2luZ0NvbmRpdGlvbjpcbiAgICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmRlYnVnKGBSVCAtIEdvdCAke0pTT04uc3RyaW5naWZ5KGRhdGEpfSBldmVudGApO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNoYW5nZWQoTm90aWZpY2F0aW9uRHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5BbGVydDpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuTG9zdFRpY2tldDpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuTFBSbWlzbWF0Y2g6XG4gICAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5kZWJ1ZyhgUlQgLSBHb3QgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0gZXZlbnRgKTtcbiAgICAgICAgdGhpcy5hbGVydENoYW5nZWQoQWxlcnREdG8uZnJvbUpTKGRhdGEpLCBvYmouZ3VpZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLlBhcmtTdGF0ZTpcbiAgICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmRlYnVnKGBSVCAtIEdvdCAke0pTT04uc3RyaW5naWZ5KGRhdGEpfSBldmVudGApO1xuICAgICAgICB0aGlzLmRldmljZUFjdGl2aXR5Q2hhbmdlZChkYXRhKTtcbiAgICAgICAgdGhpcy5wYXJrQWN0aXZpdHlDaGFuZ2VkKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5EZXZpY2VFdmVudDpcbiAgICAgICAgdGhpcy5kZXZpY2VFdmVudENoYW5nZWQoZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLlNlcnZpY2VzU3RhdHVzOlxuICAgICAgICB0aGlzLnNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWQoU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5ab25lOlxuICAgICAgICB0aGlzLnpvbmVDaGFuZ2VkKFpvbmVEdG8uZnJvbUpTKGRhdGEpLCBvYmoucGFya0lkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuRmFjaWxpdHk6XG4gICAgICAgIHRoaXMuZmFjaWxpdHlDaGFuZ2VkKEZhY2lsaXR5RHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5PY2N1cGFuY3k6XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLlJldmVudWU6XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLk9wZW5UaWNrZXRUcmFuc2FjdGlvbjpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuQ2xvc2VUaWNrZXRUcmFuc2FjdGlvbjpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuTW9udGhseVRyYW5zYWN0aW9uOlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5HdWVzdFRyYW5zYWN0aW9uOlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5QYXltZW50VHJhbnNhY3Rpb246XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkxQUlRyYW5zYWN0aW9uOlxuICAgICAgICB0aGlzLmRpc3BhdGNoUnRFdmVudChvYmopO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhgVW5rbm93biBldmVudCB0eXBlID09PT4gJHtvYmoucnRFdmVudFR5cGV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Nvbm5lY3QoY29ubmVjdGlvbjogSHViQ29ubmVjdGlvbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1NpZ25hbFIgRXN0YWJsaXNoaW5nIENvbm5lY3Rpb24uLi4nKTtcbiAgICBjb25uZWN0aW9uLnN0YXJ0KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhgU2lnbmFsUiBDb25uZWN0aW9uIEVzdGFibGlzaGVkIWApO1xuICAgICAgICB0aGlzLmhhbmRsZVJlYWxUaW1lQXdhaXRpbmdTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uQXdhaXRpbmdTdWJzY3JpcHRpb24oKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goYXN5bmMgKGUpID0+IHtcbiAgICAgICAgdGhpcy5yZXRyeUNvbm5lY3Rpb24oY29ubmVjdGlvbiwgMSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2Nvbm5lY3QoY29ubmVjdGlvbjogSHViQ29ubmVjdGlvbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1NpZ25hbFIgU3RvcHBpbmcgQ29ubmVjdGlvbi4uLicpO1xuICAgIGNvbm5lY3Rpb24/LnN0b3AoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmRlYnVnKGBTaWduYWxSIENvbm5lY3Rpb24gU3RvcHBlZCFgKTtcbiAgICAgICAgdGhpcy5oYW5kbGVEaXNjb25uZWN0KCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgPT4gJHtlcnJ9LCBUaW1lc3RhbXA6ICR7bmV3IERhdGUoKX1gKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyeUNvbm5lY3Rpb24oY29ubmVjdGlvbjogSHViQ29ubmVjdGlvbiwgcmV0cnlDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBTaWduYWxSIEVzdGFibGlzaGluZyBDb25uZWN0aW9uLiBSZXRyeSAjJHtyZXRyeUNvdW50fS4gVGltZXN0YW1wOiAke25ldyBEYXRlKCl9YCk7XG4gICAgICBjb25uZWN0aW9uLnN0YXJ0KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFNpZ25hbFIgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCEgUmV0cnkgIyR7cmV0cnlDb3VudH1gKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlYWxUaW1lQXdhaXRpbmdTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25Bd2FpdGluZ1N1YnNjcmlwdGlvbigpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpO1xuXG4gICAgICAgICAgaWYgKHJldHJ5Q291bnQgPD0gY29uZmlnLnNpZ25hbFIubWF4Q29uc2VjdXRpdmVGYWlsZWRSZXRyeUNvdW50KSB7XG4gICAgICAgICAgICB0aGlzLnJldHJ5Q29ubmVjdGlvbihjb25uZWN0aW9uLCByZXRyeUNvdW50ICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LCBnZXRTZWNvbmRzQmFja29mZihyZXRyeUNvdW50KSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlYWxUaW1lQXdhaXRpbmdTdWJzY3JpcHRpb25zKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uUXVldWUuZm9yRWFjaChhd2FpdGluZ1N1YnNjcmlwdGlvbiA9PiBhd2FpdGluZ1N1YnNjcmlwdGlvbigpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblF1ZXVlLnNwbGljZSgwKTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZU5vdGlmaWNhdGlvbkF3YWl0aW5nU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMubm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uUXVldWUuZm9yRWFjaChhd2FpdGluZ1N1YnNjcmlwdGlvbiA9PiBhd2FpdGluZ1N1YnNjcmlwdGlvbigpKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlLnNwbGljZSgwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGlzY29ubmVjdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblF1ZXVlID0gW107XG4gICAgdGhpcy5ub3RpZmljYXRpb25TdWJzY3JpcHRpb25RdWV1ZSA9IFtdO1xuICAgIHRoaXMucmVhbHRpbWVFdmVudFNlcnZpY2UucmVzZXRBbGxTdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICBARGlzcGF0Y2goKSBkZXZpY2VzU3RhdHVzQ2hhbmdlZCA9IChkZXZpY2VTdGF0dXM6IERldmljZVN0YXR1c0R0bykgPT5cbiAgICBuZXcgRGV2aWNlU3RhdHVzQ2hhbmdlZEFjdGlvbihkZXZpY2VTdGF0dXMpO1xuICBARGlzcGF0Y2goKSBmYWNpbGl0eUNoYW5nZWQgPSAoZGF0YTogRmFjaWxpdHlEdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKGRhdGEsIGd1aWQpO1xuICBARGlzcGF0Y2goKSBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkID0gKHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oc2VydmljZXNSdW5uaW5nU3RhdHVzLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgcGFya0FjdGl2aXR5Q2hhbmdlZCA9IChhY3Rpdml0eTogRXZlbnRBY3Rpdml0eUR0bykgPT5cbiAgICBuZXcgUGFya0FjdGl2aXR5Q2hhbmdlZEFjdGlvbihhY3Rpdml0eSk7XG4gIEBEaXNwYXRjaCgpIGRldmljZUV2ZW50Q2hhbmdlZCA9IChkZXZFdmVudDogRGV2aWNlRXZlbnREdG8pID0+XG4gICAgbmV3IERldmljZUV2ZW50Q2hhbmdlZEFjdGlvbihkZXZFdmVudCk7XG4gIEBEaXNwYXRjaCgpIGRldmljZUFjdGl2aXR5Q2hhbmdlZCA9IChldmVudEFjdGl2aXR5OiBFdmVudEFjdGl2aXR5RHRvKSA9PlxuICAgIG5ldyBEZXZpY2VBY3Rpdml0eUNoYW5nZWRBY3Rpb24oZXZlbnRBY3Rpdml0eSk7XG4gIEBEaXNwYXRjaCgpIGxwclRyYW5zYWN0aW9uc0NoYW5nZWQgPSAobHByVHJhbnM6IExwclRyYW5zYWN0aW9uRHRvKSA9PlxuICAgIG5ldyBMcHJUcmFuc2FjdGlvbnNDaGFuZ2VkQWN0aW9uKGxwclRyYW5zKTtcbiAgQERpc3BhdGNoKCkgYWxlcnRDaGFuZ2VkID0gKGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIG5ldyBBbGVydENoYW5nZWRBY3Rpb24oYWxlcnREdG8sIGd1aWQpO1xuICBARGlzcGF0Y2goKSBub3RpZmljYXRpb25DaGFuZ2VkID0gKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IE5vdGlmaWNhdGlvbkNoYW5nZWRBY3Rpb24obm90aWZpY2F0aW9uRHRvLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgaGFuZGxlZE5vdGlmaWNhdGlvbiA9IChub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIG5ldyBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gIEBEaXNwYXRjaCgpIGhhbmRsZUFsZXJ0cyA9IChhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgSGFuZGxlQWxlcnRzQWN0aW9uKGFsZXJ0RHRvLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgaGFuZGxlTm90aWZpY2F0aW9uID0gKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbihub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICBARGlzcGF0Y2goKSB6b25lQ2hhbmdlZCA9ICh6b25lRHRvOiBab25lRHRvLCBwYXJrSWQ6IG51bWJlcikgPT5cbiAgICBuZXcgWm9uZUNoYW5nZWRBY3Rpb24oem9uZUR0bywgcGFya0lkKTtcbiAgQERpc3BhdGNoKCkgaW5pdGlhbGl6ZVNtYXJ0UGFya0Nvbm5lY3Rpb24gPSAoc21hcnRwYXJrOiBTbWFydHBhcmtEdG8pID0+XG4gICAgbmV3IEFkZFNtYXJ0cGFya0FjdGlvbihzbWFydHBhcmspO1xuICBARGlzcGF0Y2goKSBmYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZCA9IChmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudDogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQpID0+XG4gICAgbmV3IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50KTtcbn1cblxuZXhwb3J0IGNsYXNzIFRpYmFSZXRyeVBvbGljeSBpbXBsZW1lbnRzIHNpZ25hbFIuSVJldHJ5UG9saWN5IHtcblxuICBwcml2YXRlIG1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKG1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudDogbnVtYmVyKSB7XG4gICAgdGhpcy5tYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQgPSBtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQ7XG4gIH1cblxuICBuZXh0UmV0cnlEZWxheUluTWlsbGlzZWNvbmRzKHJldHJ5Q29udGV4dDogc2lnbmFsUi5SZXRyeUNvbnRleHQpOiBudW1iZXIge1xuICAgIGxldCBtaWxsaXNlY29uZHM6IG51bWJlciA9IG51bGw7XG4gICAgY29uc3QgY3VycmVudFJldHJ5Q291bnQgPSByZXRyeUNvbnRleHQucHJldmlvdXNSZXRyeUNvdW50ICsgMTtcblxuICAgIGlmIChjdXJyZW50UmV0cnlDb3VudCA8IHRoaXMubWF4Q29uc2VjdXRpdmVGYWlsZWRSZXRyeUNvdW50KSB7XG4gICAgICBjb25zdCB1bmF1dGhvcml6ZWQgPSByZXRyeUNvbnRleHQucmV0cnlSZWFzb24ubWVzc2FnZS5pbmNsdWRlcyhgU3RhdHVzIGNvZGUgJyR7SHR0cFN0YXR1c0NvZGUuVW5hdXRob3JpemVkfSdgKTtcblxuICAgICAgaWYgKHVuYXV0aG9yaXplZCkge1xuICAgICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgVGliYVJldHJ5UG9saWN5IC0+IHVuYXV0aG9yaXplZCB0b2tlbi4gTWVzc2FnZTogICR7cmV0cnlDb250ZXh0LnJldHJ5UmVhc29uLm1lc3NhZ2V9YCk7XG4gICAgICAgIHRoaXMuc2lnbmFsUlJlZnJlc2hUb2tlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmluZm8oYFRpYmFSZXRyeVBvbGljeSAtPiBmYWlsZWQgbmVnb3RpYXRpb24gIyR7Y3VycmVudFJldHJ5Q291bnR9LiBNZXNzYWdlOiAke3JldHJ5Q29udGV4dC5yZXRyeVJlYXNvbi5tZXNzYWdlfWApO1xuXG4gICAgICAgIG1pbGxpc2Vjb25kcyA9IGdldFNlY29uZHNCYWNrb2ZmKGN1cnJlbnRSZXRyeUNvdW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWlsbGlzZWNvbmRzO1xuICB9XG5cbiAgQERpc3BhdGNoKCkgc2lnbmFsUlJlZnJlc2hUb2tlbiA9ICgpID0+IG5ldyBTaWduYWxSUmVmcmVzaFRva2VuQWN0aW9uKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWNvbmRzQmFja29mZihyZXRyeUNvdW50OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBkZWxheXNUYWJsZUluU2Vjb25kczogeyBba2V5OiBudW1iZXJdOiBudW1iZXJbXTsgfSA9IHtcbiAgICAxOiBbNSwgMjBdLCAvLzVzIC0gMjBzXG4gICAgMjogWzI1LCA0MF0sIC8vIDI1cyAtIDQwc1xuICAgIDM6IFs0NSwgNjBdLCAvLyA0NXMgLSA2MHNcbiAgICA0OiBbNjUsIDgwXSwgLy8gNjVzIC0gODBzXG4gICAgNTogWzYwMCwgOTAwXSwgIC8vIDEwbSAtIDE1bVxuICB9O1xuICBjb25zdCBbbWluU2Vjb25kcywgbWF4U2Vjb25kc10gPSBkZWxheXNUYWJsZUluU2Vjb25kc1tyZXRyeUNvdW50XSB8fCBbMCwgMF07XG4gIHJldHVybiAoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heFNlY29uZHMgLSBtaW5TZWNvbmRzICsgMSkpICsgbWluU2Vjb25kcykgKiBPTkVfU0VDT05EX0lOX01JTExJU0VDT05EUztcbn1cbiJdfQ==
|
|
467
|
+
function isUnauthorizedOrExpired(error, token, authTokenService) {
|
|
468
|
+
const unauthorized = error?.message?.includes(`Status code '${HttpStatusCode.Unauthorized}'`);
|
|
469
|
+
return unauthorized || authTokenService.isTokenExpired(token);
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFsci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFpQixvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQTRCLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDakcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQzlNLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQ0FBbUMsRUFBRSxrQ0FBa0MsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3pLLE9BQU8sRUFB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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFN0YXR1c0NvZGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGF0YWRvZ0xvZ3MgfSBmcm9tICdAZGF0YWRvZy9icm93c2VyLWxvZ3MnO1xuaW1wb3J0IHsgSHR0cFRyYW5zcG9ydFR5cGUsIEh1YkNvbm5lY3Rpb24sIEh1YkNvbm5lY3Rpb25CdWlsZGVyLCBIdWJDb25uZWN0aW9uU3RhdGUgfSBmcm9tICdAbWljcm9zb2Z0L3NpZ25hbHInO1xuaW1wb3J0IHsgRGlzcGF0Y2ggfSBmcm9tICdAbmd4cy1sYWJzL2Rpc3BhdGNoLWRlY29yYXRvcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE1vbm9UeXBlT3BlcmF0b3JGdW5jdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbkV2ZW50U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE9ORV9TRUNPTkRfSU5fTUlMTElTRUNPTkRTIH0gZnJvbSAnLi4vY29uc3RhbnRzL2dsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgQWxlcnRDaGFuZ2VkQWN0aW9uLCBIYW5kbGVBbGVydHNBY3Rpb24sIEhhbmRsZWROb3RpZmljYXRpb25BY3Rpb24sIEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbiwgTm90aWZpY2F0aW9uQ2hhbmdlZEFjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvYWxlcnRzLWFuZC1ub3RpZmljYXRpb25zL2FsZXJ0cy1hbmQtbm90aWZpY2F0aW9ucy5hY3Rpb25zJztcbmltcG9ydCB7IFNpZ25hbFJSZWZyZXNoVG9rZW5BY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL2F1dGgvcmVmcmVzaC10b2tlbi5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5Q2hhbmdlZEFjdGlvbiwgRmFjaWxpdHlSZW1vdGVDb21tYW5kRXhlY3V0ZWRBY3Rpb24sIFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24sIFpvbmVDaGFuZ2VkQWN0aW9uIH0gZnJvbSAnLi4vbW9kdWxlcy9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IEZhY2lsaXR5U3RhdGUgfSBmcm9tICcuLi9tb2R1bGVzL2ZhY2lsaXR5L2ZhY2lsaXR5LnN0YXRlJztcbmltcG9ydCB7IFBhcmtBY3Rpdml0eUNoYW5nZWRBY3Rpb24gfSBmcm9tICcuLi9tb2R1bGVzL3BhcmstYWN0aXZpdGllcy9wYXJrLWFjdGl2aXRpZXMuYWN0aW9ucyc7XG5pbXBvcnQgeyBEZXZpY2VBY3Rpdml0eUNoYW5nZWRBY3Rpb24sIERldmljZUV2ZW50Q2hhbmdlZEFjdGlvbiwgRGV2aWNlU3RhdHVzQ2hhbmdlZEFjdGlvbiwgTHByVHJhbnNhY3Rpb25zQ2hhbmdlZEFjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvcGFyay1tYW5hZ2VyL3BhcmstbWFuYWdlci5hY3Rpb25zJztcbmltcG9ydCB7IFNpZGVuYXZTdGF0ZSB9IGZyb20gJy4uL21vZHVsZXMvc2lkZW5hdi9zaWRlbmF2LnN0YXRlJztcbmltcG9ydCB7IEFkZFNtYXJ0cGFya0FjdGlvbiB9IGZyb20gJy4uL21vZHVsZXMvc21hcnRwYXJrcy9zbWFydHBhcmstZGlhbG9nLmFjdGlvbnMnO1xuaW1wb3J0IHsgQWxlcnREdG8sIE5vdGlmaWNhdGlvbkR0bywgU21hcnRwYXJrRHRvIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvIH0gZnJvbSAnLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHtcbiAgRGV2aWNlRXZlbnREdG8sIERldmljZVN0YXR1c0R0bywgRXZlbnRBY3Rpdml0eUR0bywgRmFjaWxpdHlEdG8sIEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50LCBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcyxcbiAgTHByVHJhbnNhY3Rpb25EdG8sIE5vdGlmaWNhdGlvbkV2ZW50VHlwZSwgTm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRHRvLCBSVEV2ZW50U3Vic2NyaXB0aW9uRHRvLCBSdEV2ZW50VHlwZSwgWm9uZUR0b1xufSBmcm9tICcuLi9zZXJ2aWNlLXByb3h5L3JwYy1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4vYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEdlbmVyYWxBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9nZW5lcmFsLWFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlYWx0aW1lRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9yZWFsdGltZS1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4vc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFRva2VuU2VydmljZSB9IGZyb20gJy4vYXV0aC10b2tlbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIFNpZ25hbFJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZ3VpZDogc3RyaW5nLCBwdWJsaWMganNvblBheWxvYWQ6IHN0cmluZykge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSVE9iamVjdE9iamVjdCBleHRlbmRzIFNpZ25hbFJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcnRFdmVudFR5cGU6IFJ0RXZlbnRUeXBlLCBwdWJsaWMgcGFya0lkOiBudW1iZXIsIHB1YmxpYyBndWlkOiBzdHJpbmcsIHB1YmxpYyBqc29uUGF5bG9hZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoZ3VpZCwganNvblBheWxvYWQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTcGFya05vdGlmaWNhdGlvbiBleHRlbmRzIFNpZ25hbFJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgbm90aWZpY2F0aW9uVHlwZTogTm90aWZpY2F0aW9uRXZlbnRUeXBlLCBwdWJsaWMgZ3VpZDogc3RyaW5nLCBwdWJsaWMgaWRlbnRpZmllcjogc3RyaW5nLCBwdWJsaWMganNvblBheWxvYWQ6IHN0cmluZykge1xuICAgIHN1cGVyKGd1aWQsIGpzb25QYXlsb2FkKTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2lnbmFsUiB7XG5cbiAgcHVibGljIGNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb247XG4gIHB1YmxpYyBzdWJzY3JpcHRpb25RdWV1ZTogYW55W10gPSBbXTtcbiAgcHVibGljIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlOiBhbnlbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBzdG9yZTogU3RvcmU7XG4gIHByb3RlY3RlZCByZWFsdGltZUV2ZW50U2VydmljZTogUmVhbHRpbWVFdmVudFNlcnZpY2U7XG4gIHByb3RlY3RlZCBub3RpZmljYXRpb25FdmVudFNlcnZpY2U6IE5vdGlmaWNhdGlvbkV2ZW50U2VydmljZTtcbiAgcHJvdGVjdGVkIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZ2VuZXJhbEFjdGlvblNlcnZpY2U6IEdlbmVyYWxBY3Rpb25TZXJ2aWNlO1xuICBwcm90ZWN0ZWQgYXV0aFRva2VuU2VydmljZTogQXV0aFRva2VuU2VydmljZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5zdG9yZSA9IGluamVjdG9yLmdldChTdG9yZSk7XG4gICAgdGhpcy5yZWFsdGltZUV2ZW50U2VydmljZSA9IGluamVjdG9yLmdldChSZWFsdGltZUV2ZW50U2VydmljZSk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25FdmVudFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoTm90aWZpY2F0aW9uRXZlbnRTZXJ2aWNlKTtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZSA9IGluamVjdG9yLmdldChTZXNzaW9uU3RvcmFnZVNlcnZpY2UpO1xuICAgIHRoaXMuYXBwQ29uZmlnID0gaW5qZWN0b3IuZ2V0KEFwcENvbmZpZ1NlcnZpY2UpO1xuICAgIHRoaXMuZ2VuZXJhbEFjdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoR2VuZXJhbEFjdGlvblNlcnZpY2UpO1xuICAgIHRoaXMuYXV0aFRva2VuU2VydmljZSA9IGluamVjdG9yLmdldChBdXRoVG9rZW5TZXJ2aWNlKTtcblxuICB9XG5cbiAgcHVibGljIGluaXRSZWFsdGltZUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpO1xuICAgIGNvbnN0IGJhc2VVcmwgPSBjb25maWcuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGUgPyBjb25maWcuYXBpQmFzZVVSTCA6ICcnO1xuICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3JlYWx0aW1lJHtjb25maWcuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGUgPyBgP3ZlcnNpb249JHtjb25maWcucGFja2FnZUluZm8udmVyc2lvbn1gIDogJyd9YDtcbiAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgUlQgQVBJIEJhc2UgVXJsIC0gJHt1cmx9YCk7XG5cbiAgICBjb25zdCBtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQgPSBjb25maWcuc2lnbmFsUi5tYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQ7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBuZXcgSHViQ29ubmVjdGlvbkJ1aWxkZXIoKVxuICAgICAgLndpdGhVcmwodXJsLCB7XG4gICAgICAgIGFjY2Vzc1Rva2VuRmFjdG9yeTogKCkgPT4gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW4sXG4gICAgICAgIHNraXBOZWdvdGlhdGlvbjogdHJ1ZSwgIC8vIFNraXAgdGhlIG5lZ290aWF0aW9uIHN0ZXBcbiAgICAgICAgdHJhbnNwb3J0OiBIdHRwVHJhbnNwb3J0VHlwZS5XZWJTb2NrZXRzICAvLyBVc2UgV2ViU29ja2V0cyBkaXJlY3RseVxuICAgICAgfSlcbiAgICAgIC53aXRoQXV0b21hdGljUmVjb25uZWN0KG5ldyBUaWJhUmV0cnlQb2xpY3kobWF4Q29uc2VjdXRpdmVGYWlsZWRSZXRyeUNvdW50LCB0aGlzLmluamVjdG9yKSlcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uLmtlZXBBbGl2ZUludGVydmFsSW5NaWxsaXNlY29uZHMgPSA4MDAwO1xuICAgIHRoaXMuY29ubmVjdGlvbi5zZXJ2ZXJUaW1lb3V0SW5NaWxsaXNlY29uZHMgPSAzMDAwMDtcblxuICAgIHRoaXMuY29ubmVjdGlvbi5vbnJlY29ubmVjdGluZygoZXJyb3IpID0+IHtcbiAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5pbmZvKCdBdHRlbXB0aW5nIHRvIHJlY29ubmVjdDonLCBlcnJvcik7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ub25jbG9zZSgoZXJyb3IpID0+IHtcbiAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5pbmZvKCdDb25uZWN0aW9uIGNsb3NlZCBhZnRlciBhbGwgcmV0cnkgYXR0ZW1wdHM6JywgZXJyb3IpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uLm9ucmVjb25uZWN0ZWQoKGNvbm5lY3Rpb25JZCkgPT4ge1xuICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmluZm8oYFN1Y2Nlc3NmdWxseSByZWNvbm5lY3RlZCBTSUdOQUxSIS4gQ29ubmVjdGlvbklkOiAke2Nvbm5lY3Rpb25JZH1gKTtcblxuICAgICAgdGhpcy5jaGVja0ZvclVwZGF0ZSgpO1xuICAgICAgY29uc3QgZ3VpZCA9IHRoaXMuc3RvcmUuc2VsZWN0U25hcHNob3QoRmFjaWxpdHlTdGF0ZS5ndWlkKTtcbiAgICAgIGlmICghIWd1aWQpIHtcbiAgICAgICAgdGhpcy5zZXRTcGFya0NvcmVDb25uZWN0aW9uKHRydWUsIGd1aWQpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVjb25uZWN0UnRFdmVudHNTdWJzY3JpcHRpb25zID0gdGhpcy5yZWFsdGltZUV2ZW50U2VydmljZS5nZXRTdWJzY3JpcHRpb25Gb3JSZWNvbm5lY3QoKTtcbiAgICAgIHRoaXMuaW52b2tlUmVhbHRpbWVSZWdpc3RyYXRpb24ocmVjb25uZWN0UnRFdmVudHNTdWJzY3JpcHRpb25zLCB0aGlzLmhhbmRsZVJlYWxUaW1lQXdhaXRpbmdTdWJzY3JpcHRpb25zLmJpbmQodGhpcykpO1xuXG4gICAgICBjb25zdCBub3RpZmljYXRpb25TdWJzY3JpcHRpb25zID0gdGhpcy5ub3RpZmljYXRpb25FdmVudFNlcnZpY2UuZ2V0U3Vic2NyaXB0aW9uRm9yUmVjb25uZWN0KCk7XG4gICAgICBub3RpZmljYXRpb25TdWJzY3JpcHRpb25zLmZvckVhY2gobm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uID0+IHtcbiAgICAgICAgdGhpcy5pbnZva2VOb3RpZmljYXRpb25SZWdpc3RyYXRpb24obm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkF3YWl0aW5nU3Vic2NyaXB0aW9uKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ub24oJ1J0RXZlbnQnLCAocnRFdmVudFR5cGU6IFJ0RXZlbnRUeXBlLCBwYXJrSWQ6IG51bWJlciwgZ3VpZDogc3RyaW5nLCBqc29uUGF5bG9hZDogc3RyaW5nKSA9PiB7XG4gICAgICBvZihuZXcgUlRPYmplY3RPYmplY3QocnRFdmVudFR5cGUsIHBhcmtJZCwgZ3VpZCwganNvblBheWxvYWQpKVxuICAgICAgICAucGlwZSh0aGlzLmhhbmRsZUpzb25QYXlsb2FkVG9Mb3dlcigpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLl9kaXNwYXRjaFJ0RXZlbnQocmVzIGFzIFJUT2JqZWN0T2JqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24ub24oJ05vdGlmaWNhdGlvbicsICh0eXBlOiBOb3RpZmljYXRpb25FdmVudFR5cGUsIGd1aWQ6IHN0cmluZywgaWRlbnRpZmllcjogc3RyaW5nLCBqc29uUGF5bG9hZDogc3RyaW5nKSA9PiB7XG4gICAgICBvZihuZXcgU3BhcmtOb3RpZmljYXRpb24odHlwZSwgZ3VpZCwgaWRlbnRpZmllciwganNvblBheWxvYWQpKVxuICAgICAgICAucGlwZSh0aGlzLmhhbmRsZUpzb25QYXlsb2FkVG9Mb3dlcigpKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLl9kaXNwYXRjaE5vdGlmaWNhdGlvbihyZXMgYXMgU3BhcmtOb3RpZmljYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjaGVja0ZvclVwZGF0ZSgpOiB2b2lkO1xuXG4gIHB1YmxpYyBjb25uZWN0KCkge1xuICAgIHRoaXMuX2Nvbm5lY3QodGhpcy5jb25uZWN0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNjb25uZWN0KCkge1xuICAgIHRoaXMuX2Rpc2Nvbm5lY3QodGhpcy5jb25uZWN0aW9uKTtcbiAgfVxuXG4gIHN1YnNjcmliZUZvclJlYWx0aW1lKHJ0RXZlbnRTdWJzY3JpcHRpb25zOiBSVEV2ZW50U3Vic2NyaXB0aW9uRHRvLCB0cmlnZ2VyRnVuY3Rpb24/OiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbikge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSAhPT0gSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblF1ZXVlLnB1c2goKCkgPT4gdGhpcy5zdWJzY3JpYmVGb3JSZWFsdGltZShydEV2ZW50U3Vic2NyaXB0aW9ucywgdHJpZ2dlckZ1bmN0aW9uKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBydEV2ZW50U3Vic2NyaXB0aW9uRGVsdGEgPSB0aGlzLnJlYWx0aW1lRXZlbnRTZXJ2aWNlLmhhbmRsZVJlYWx0aW1lRXZlbnRzU3Vic2NyaXB0aW9ucyhydEV2ZW50U3Vic2NyaXB0aW9ucyk7XG4gICAgICAgIGlmIChydEV2ZW50U3Vic2NyaXB0aW9uRGVsdGEuc3Vic2NyaWJlLmxlbmd0aCB8fCBydEV2ZW50U3Vic2NyaXB0aW9uRGVsdGEudW5TdWJzY3JpYmUubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5pbnZva2VSZWFsdGltZVJlZ2lzdHJhdGlvbihydEV2ZW50U3Vic2NyaXB0aW9uRGVsdGEsIHRyaWdnZXJGdW5jdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVGb3JOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbjogTm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRHRvLCB0cmlnZ2VyRnVuY3Rpb24/OiAoKSA9PiB2b2lkKSB7XG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbikge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5zdGF0ZSAhPT0gSHViQ29ubmVjdGlvblN0YXRlLkNvbm5lY3RlZCkge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlLnB1c2goKCkgPT4gdGhpcy5zdWJzY3JpYmVGb3JOb3RpZmljYXRpb25zKG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbiwgdHJpZ2dlckZ1bmN0aW9uKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25TdWJzY3JpcHRpb25EZWx0YSA9IHRoaXMubm90aWZpY2F0aW9uRXZlbnRTZXJ2aWNlLmhhbmRsZU5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbnMobm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgaWYgKCEhbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRGVsdGEpIHtcbiAgICAgICAgICB0aGlzLmludm9rZU5vdGlmaWNhdGlvblJlZ2lzdHJhdGlvbihub3RpZmljYXRpb25TdWJzY3JpcHRpb25EZWx0YSwgdHJpZ2dlckZ1bmN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW52b2tlUmVhbHRpbWVSZWdpc3RyYXRpb24ocnRFdmVudFN1YnNjcmlwdGlvbnM6IFJURXZlbnRTdWJzY3JpcHRpb25EdG8sIHRyaWdnZXJGdW5jdGlvbj86ICgpID0+IHZvaWQpIHtcbiAgICBjb25zdCBhcHBNb2R1bGUgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNpZGVuYXZTdGF0ZS5hcHBNb2R1bGUpO1xuICAgIGlmIChydEV2ZW50U3Vic2NyaXB0aW9ucy51c2VySWQpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5pbnZva2U8UlRFdmVudFN1YnNjcmlwdGlvbkR0bz4oJ1JlZ2lzdGVyUGFyaycsIHJ0RXZlbnRTdWJzY3JpcHRpb25zLCBhcHBNb2R1bGUpLnRoZW4oKHN1YlRvKSA9PiB7XG4gICAgICAgIGlmICh0cmlnZ2VyRnVuY3Rpb24pIHtcbiAgICAgICAgICB0cmlnZ2VyRnVuY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbnZva2VOb3RpZmljYXRpb25SZWdpc3RyYXRpb24obm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uOiBOb3RpZmljYXRpb25TdWJzY3JpcHRpb25EdG8sIHRyaWdnZXJGdW5jdGlvbj86ICgpID0+IHZvaWQpIHtcbiAgICBpZiAobm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uICYmIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbi51c2VySWQpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbi5pbnZva2U8Tm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uRHRvPignUmVnaXN0ZXJOb3RpZmljYXRpb25zJywgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uKS50aGVuKChzdWJUbykgPT4ge1xuICAgICAgICBpZiAodHJpZ2dlckZ1bmN0aW9uKSB7XG4gICAgICAgICAgdHJpZ2dlckZ1bmN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTcGFya0NvcmVDb25uZWN0aW9uKGlzQ29ubmVjdGVkOiBib29sZWFuLCBndWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuc2VydmljZXNSdW5uaW5nU3RhdHVzRGljdGlvbmFyeSlbZ3VpZF07XG4gICAgc2VydmljZXNSdW5uaW5nU3RhdHVzLmlzU3BhcmtDb3JlQ29ubmVjdGVkID0gaXNDb25uZWN0ZWQ7XG4gICAgaWYgKCFpc0Nvbm5lY3RlZCkge1xuICAgICAgY29uc3QgZmFjaWxpdHlHdWlkID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChGYWNpbGl0eVN0YXRlLmd1aWQpO1xuICAgICAgY29uc3Qgc2VydmVyQ2xpZW50VGltZVNwYW4gPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KEZhY2lsaXR5U3RhdGUuY2xpZW50U2VydmVyRGlmZkRpY3Rpb25hcnkpW2ZhY2lsaXR5R3VpZF0gfHwgMDtcbiAgICAgIHNlcnZpY2VzUnVubmluZ1N0YXR1cy5zcGFya0NvcmVEaXNjb25uZWN0ZWRUaW1lc3RhbXAgPSBtb21lbnQoKS5zdWJ0cmFjdChzZXJ2ZXJDbGllbnRUaW1lU3BhbiwgJ21pbGxpc2Vjb25kcycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXJ2aWNlc1J1bm5pbmdTdGF0dXMuc3BhcmtDb3JlRGlzY29ubmVjdGVkVGltZXN0YW1wID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkKHNlcnZpY2VzUnVubmluZ1N0YXR1cywgZ3VpZCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUpzb25QYXlsb2FkVG9Mb3dlcigpOiBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb248U2lnbmFsUk9iamVjdD4ge1xuICAgIHJldHVybiAkaW5wdXQgPT4gJGlucHV0LnBpcGUobWFwKHJlcyA9PiB7XG4gICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKHJlcy5qc29uUGF5bG9hZCk7XG4gICAgICByZXMuanNvblBheWxvYWQgPSBKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgIGlmIChrLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50W2sgJiYgay50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlW2tdO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50W2sgJiYgay5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGsuc3Vic3RyaW5nKDEpXSA9IHZhbHVlW2tdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGRpc3BhdGNoTm90aWZpY2F0aW9uKG9iajogU3BhcmtOb3RpZmljYXRpb24pOiB2b2lkO1xuXG4gIHByaXZhdGUgX2Rpc3BhdGNoTm90aWZpY2F0aW9uKG9iajogU3BhcmtOb3RpZmljYXRpb24pIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShvYmouanNvblBheWxvYWQpO1xuICAgIGNvbnNvbGUuZGVidWcoYFJlY2VpdmVkIE5vdGlmaWNhdGlvbiB0eXBlID09PT4gJHtvYmoubm90aWZpY2F0aW9uVHlwZX1gKTtcbiAgICBzd2l0Y2ggKG9iai5ub3RpZmljYXRpb25UeXBlKSB7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5Jbml0aWFsQ2xvdWRDb25uZWN0OlxuICAgICAgICB0aGlzLmluaXRpYWxpemVTbWFydFBhcmtDb25uZWN0aW9uKGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkOlxuICAgICAgICAvLyBUT0RPOiB0aGlzIGNvbmRpdGlvbiB3aWxsIGJlIHJlbW92ZWQgd2hlbiBhbGwgXCJGYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZFwiIG5vdGlmaWNhdGlvblxuICAgICAgICAvLyB3aWxsIGJlIHJlbW92ZWQgdXBvbiBiZWluZyBleGVjdXRlZCBpbiB0aGUgc2VydmVyXG4gICAgICAgIC8vIEZvciBtb3JlIGV4cGxhbmF0aW9uIHNlZTogU1BSSzMtNjcwNFxuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBGYWNpbGl0eVJlbW90ZUNvbW1hbmRUeXBlcy5UcmFuc21pdFNwZWNpYWxEYXlzIHx8IGRhdGEudHlwZSA9PT0gRmFjaWxpdHlSZW1vdGVDb21tYW5kVHlwZXMuVXBkYXRlU2V0dGluZ3MpIHtcbiAgICAgICAgICBjb25zdCBub3RpZmljYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLm5vdGlmaWNhdGlvbkV2ZW50U2VydmljZS5nZXROb3RpZmljYXRpb25TdWJzY3JpcHRpb25zRW50aXR5KCk7XG4gICAgICAgICAgbm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uLnR5cGUgPSBvYmoubm90aWZpY2F0aW9uVHlwZTtcbiAgICAgICAgICBub3RpZmljYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUgPSB0cnVlO1xuICAgICAgICAgIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbi5pZGVudGlmaWVyID0gdGhpcy5ub3RpZmljYXRpb25FdmVudFNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9uSWRlbnRpZmllcihkYXRhLmd1aWQsIGRhdGEucGFya0lkLFxuICAgICAgICAgICAgb2JqLm5vdGlmaWNhdGlvblR5cGUsIG5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbi51c2VySWQpO1xuICAgICAgICAgIHRoaXMuc3Vic2NyaWJlRm9yTm90aWZpY2F0aW9ucyhub3RpZmljYXRpb25TdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5HZW5lcmFsQWN0aW9uczpcbiAgICAgICAgdGhpcy5nZW5lcmFsQWN0aW9uU2VydmljZS5kaXNwYXRjaEdlbmVyYWxBY3Rpb25zKGRhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkhhbmRsZUFsZXJ0OlxuICAgICAgICB0aGlzLmhhbmRsZUFsZXJ0cyhBbGVydER0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5IYW5kbGVkTm90aWZpY2F0aW9uOlxuICAgICAgICB0aGlzLmhhbmRsZWROb3RpZmljYXRpb24oTm90aWZpY2F0aW9uRHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkhhbmRsZU5vdGlmaWNhdGlvbjpcbiAgICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb24oTm90aWZpY2F0aW9uRHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuUmVwb3J0R2VuZXJhdGVkOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuUmVjZWlwdEdlbmVyYXRlZDpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLlN0aWNrZXJHZW5lcmF0ZWQ6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5BcHBsaWNhdGlvblVwZGF0ZTpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLkNyZWF0ZVJvbGU6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5VcGRhdGVSb2xlOlxuICAgICAgY2FzZSBOb3RpZmljYXRpb25FdmVudFR5cGUuTW9udGhsaWVzQnVsa1VwZGF0ZTpcbiAgICAgIGNhc2UgTm90aWZpY2F0aW9uRXZlbnRUeXBlLk1vbnRobGllc0J1bGtEZWxldGU6XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5Nb250aGxpZXNCdWxrVXBkYXRlTG9jYXRpb246XG4gICAgICBjYXNlIE5vdGlmaWNhdGlvbkV2ZW50VHlwZS5Nb250aGxpZXNCdWxrU2VuZEVtYWlsOlxuICAgICAgICB0aGlzLmRpc3BhdGNoTm90aWZpY2F0aW9uKG9iaik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5kZWJ1ZyhgVW5rbm93biBub3RpZmljYXRpb24gdHlwZSA9PT0+ICR7b2JqLm5vdGlmaWNhdGlvblR5cGV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBkaXNwYXRjaFJ0RXZlbnQob2JqOiBSVE9iamVjdE9iamVjdCk6IHZvaWQ7XG5cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hSdEV2ZW50KG9iajogUlRPYmplY3RPYmplY3QpIHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShvYmouanNvblBheWxvYWQpO1xuICAgIHN3aXRjaCAob2JqLnJ0RXZlbnRUeXBlKSB7XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkRldmljZVN0YXR1czpcbiAgICAgICAgdGhpcy5kZXZpY2VzU3RhdHVzQ2hhbmdlZChEZXZpY2VTdGF0dXNEdG8uZnJvbUpTKGRhdGEpKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuRHluYW1pY1ByaWNpbmdDb25kaXRpb246XG4gICAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5kZWJ1ZyhgUlQgLSBHb3QgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0gZXZlbnRgKTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25DaGFuZ2VkKE5vdGlmaWNhdGlvbkR0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuQWxlcnQ6XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkxvc3RUaWNrZXQ6XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkxQUm1pc21hdGNoOlxuICAgICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuZGVidWcoYFJUIC0gR290ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9IGV2ZW50YCk7XG4gICAgICAgIHRoaXMuYWxlcnRDaGFuZ2VkKEFsZXJ0RHRvLmZyb21KUyhkYXRhKSwgb2JqLmd1aWQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5QYXJrU3RhdGU6XG4gICAgICAgIGRhdGFkb2dMb2dzLmxvZ2dlci5kZWJ1ZyhgUlQgLSBHb3QgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0gZXZlbnRgKTtcbiAgICAgICAgdGhpcy5kZXZpY2VBY3Rpdml0eUNoYW5nZWQoZGF0YSk7XG4gICAgICAgIHRoaXMucGFya0FjdGl2aXR5Q2hhbmdlZChkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuRGV2aWNlRXZlbnQ6XG4gICAgICAgIHRoaXMuZGV2aWNlRXZlbnRDaGFuZ2VkKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5TZXJ2aWNlc1N0YXR1czpcbiAgICAgICAgdGhpcy5zZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkKFNlcnZpY2VzUnVubmluZ1N0YXR1c0R0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuWm9uZTpcbiAgICAgICAgdGhpcy56b25lQ2hhbmdlZChab25lRHRvLmZyb21KUyhkYXRhKSwgb2JqLnBhcmtJZCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkZhY2lsaXR5OlxuICAgICAgICB0aGlzLmZhY2lsaXR5Q2hhbmdlZChGYWNpbGl0eUR0by5mcm9tSlMoZGF0YSksIG9iai5ndWlkKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuT2NjdXBhbmN5OlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5SZXZlbnVlOlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5PcGVuVGlja2V0VHJhbnNhY3Rpb246XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLkNsb3NlVGlja2V0VHJhbnNhY3Rpb246XG4gICAgICBjYXNlIFJ0RXZlbnRUeXBlLk1vbnRobHlUcmFuc2FjdGlvbjpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuR3Vlc3RUcmFuc2FjdGlvbjpcbiAgICAgIGNhc2UgUnRFdmVudFR5cGUuUGF5bWVudFRyYW5zYWN0aW9uOlxuICAgICAgY2FzZSBSdEV2ZW50VHlwZS5MUFJUcmFuc2FjdGlvbjpcbiAgICAgICAgdGhpcy5kaXNwYXRjaFJ0RXZlbnQob2JqKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZGVidWcoYFVua25vd24gZXZlbnQgdHlwZSA9PT0+ICR7b2JqLnJ0RXZlbnRUeXBlfWApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jb25uZWN0KGNvbm5lY3Rpb246IEh1YkNvbm5lY3Rpb24pIHtcbiAgICBjb25zb2xlLmRlYnVnKCdTaWduYWxSIEVzdGFibGlzaGluZyBDb25uZWN0aW9uLi4uJyk7XG4gICAgY29ubmVjdGlvbi5zdGFydCgpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcoYFNpZ25hbFIgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCFgKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSZWFsVGltZUF3YWl0aW5nU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbkF3YWl0aW5nU3Vic2NyaXB0aW9uKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGFzeW5jIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGlmIChpc1VuYXV0aG9yaXplZE9yRXhwaXJlZChlcnJvciwgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW4sIHRoaXMuYXV0aFRva2VuU2VydmljZSkpIHtcbiAgICAgICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgU2lnbmFsUiBpbml0aWFsIGNvbm5lY3QgLT4gdW5hdXRob3JpemVkLiBNZXNzYWdlOiAke2Vycm9yPy5tZXNzYWdlfWApO1xuICAgICAgICAgIHRoaXMuc2lnbmFsUlJlZnJlc2hUb2tlbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmV0cnlDb25uZWN0aW9uKGNvbm5lY3Rpb24sIDEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2Nvbm5lY3QoY29ubmVjdGlvbjogSHViQ29ubmVjdGlvbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1NpZ25hbFIgU3RvcHBpbmcgQ29ubmVjdGlvbi4uLicpO1xuICAgIGNvbm5lY3Rpb24/LnN0b3AoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmRlYnVnKGBTaWduYWxSIENvbm5lY3Rpb24gU3RvcHBlZCFgKTtcbiAgICAgICAgdGhpcy5oYW5kbGVEaXNjb25uZWN0KCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgPT4gJHtlcnJ9LCBUaW1lc3RhbXA6ICR7bmV3IERhdGUoKX1gKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyeUNvbm5lY3Rpb24oY29ubmVjdGlvbjogSHViQ29ubmVjdGlvbiwgcmV0cnlDb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBTaWduYWxSIEVzdGFibGlzaGluZyBDb25uZWN0aW9uLiBSZXRyeSAjJHtyZXRyeUNvdW50fS4gVGltZXN0YW1wOiAke25ldyBEYXRlKCl9YCk7XG4gICAgICBjb25uZWN0aW9uLnN0YXJ0KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoYFNpZ25hbFIgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZCEgUmV0cnkgIyR7cmV0cnlDb3VudH1gKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZVJlYWxUaW1lQXdhaXRpbmdTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVOb3RpZmljYXRpb25Bd2FpdGluZ1N1YnNjcmlwdGlvbigpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoaXNVbmF1dGhvcml6ZWRPckV4cGlyZWQoZXJyb3IsIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmFjY2Vzc1Rva2VuLCB0aGlzLmF1dGhUb2tlblNlcnZpY2UpKSB7XG4gICAgICAgICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgU2lnbmFsUiByZXRyeSBjb25uZWN0IC0+IHVuYXV0aG9yaXplZC4gTWVzc2FnZTogJHtlcnJvcj8ubWVzc2FnZX1gKTtcbiAgICAgICAgICAgIHRoaXMuc2lnbmFsUlJlZnJlc2hUb2tlbigpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKTtcbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50IDw9IGNvbmZpZy5zaWduYWxSLm1heENvbnNlY3V0aXZlRmFpbGVkUmV0cnlDb3VudCkge1xuICAgICAgICAgICAgICB0aGlzLnJldHJ5Q29ubmVjdGlvbihjb25uZWN0aW9uLCByZXRyeUNvdW50ICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9LCBnZXRTZWNvbmRzQmFja29mZihyZXRyeUNvdW50KSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlYWxUaW1lQXdhaXRpbmdTdWJzY3JpcHRpb25zKCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uUXVldWUuZm9yRWFjaChhd2FpdGluZ1N1YnNjcmlwdGlvbiA9PiBhd2FpdGluZ1N1YnNjcmlwdGlvbigpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblF1ZXVlLnNwbGljZSgwKTtcbiAgfVxuICBwcml2YXRlIGhhbmRsZU5vdGlmaWNhdGlvbkF3YWl0aW5nU3Vic2NyaXB0aW9uKCkge1xuICAgIHRoaXMubm90aWZpY2F0aW9uU3Vic2NyaXB0aW9uUXVldWUuZm9yRWFjaChhd2FpdGluZ1N1YnNjcmlwdGlvbiA9PiBhd2FpdGluZ1N1YnNjcmlwdGlvbigpKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblN1YnNjcmlwdGlvblF1ZXVlLnNwbGljZSgwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGlzY29ubmVjdCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvblF1ZXVlID0gW107XG4gICAgdGhpcy5ub3RpZmljYXRpb25TdWJzY3JpcHRpb25RdWV1ZSA9IFtdO1xuICAgIHRoaXMucmVhbHRpbWVFdmVudFNlcnZpY2UucmVzZXRBbGxTdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICBARGlzcGF0Y2goKSBkZXZpY2VzU3RhdHVzQ2hhbmdlZCA9IChkZXZpY2VTdGF0dXM6IERldmljZVN0YXR1c0R0bykgPT5cbiAgICBuZXcgRGV2aWNlU3RhdHVzQ2hhbmdlZEFjdGlvbihkZXZpY2VTdGF0dXMpO1xuICBARGlzcGF0Y2goKSBmYWNpbGl0eUNoYW5nZWQgPSAoZGF0YTogRmFjaWxpdHlEdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgRmFjaWxpdHlDaGFuZ2VkQWN0aW9uKGRhdGEsIGd1aWQpO1xuICBARGlzcGF0Y2goKSBzZXJ2aWNlc1J1bm5pbmdTdGF0dXNDaGFuZ2VkID0gKHNlcnZpY2VzUnVubmluZ1N0YXR1czogU2VydmljZXNSdW5uaW5nU3RhdHVzRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IFNlcnZpY2VzUnVubmluZ1N0YXR1c0NoYW5nZWRBY3Rpb24oc2VydmljZXNSdW5uaW5nU3RhdHVzLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgcGFya0FjdGl2aXR5Q2hhbmdlZCA9IChhY3Rpdml0eTogRXZlbnRBY3Rpdml0eUR0bykgPT5cbiAgICBuZXcgUGFya0FjdGl2aXR5Q2hhbmdlZEFjdGlvbihhY3Rpdml0eSk7XG4gIEBEaXNwYXRjaCgpIGRldmljZUV2ZW50Q2hhbmdlZCA9IChkZXZFdmVudDogRGV2aWNlRXZlbnREdG8pID0+XG4gICAgbmV3IERldmljZUV2ZW50Q2hhbmdlZEFjdGlvbihkZXZFdmVudCk7XG4gIEBEaXNwYXRjaCgpIGRldmljZUFjdGl2aXR5Q2hhbmdlZCA9IChldmVudEFjdGl2aXR5OiBFdmVudEFjdGl2aXR5RHRvKSA9PlxuICAgIG5ldyBEZXZpY2VBY3Rpdml0eUNoYW5nZWRBY3Rpb24oZXZlbnRBY3Rpdml0eSk7XG4gIEBEaXNwYXRjaCgpIGxwclRyYW5zYWN0aW9uc0NoYW5nZWQgPSAobHByVHJhbnM6IExwclRyYW5zYWN0aW9uRHRvKSA9PlxuICAgIG5ldyBMcHJUcmFuc2FjdGlvbnNDaGFuZ2VkQWN0aW9uKGxwclRyYW5zKTtcbiAgQERpc3BhdGNoKCkgYWxlcnRDaGFuZ2VkID0gKGFsZXJ0RHRvOiBBbGVydER0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIG5ldyBBbGVydENoYW5nZWRBY3Rpb24oYWxlcnREdG8sIGd1aWQpO1xuICBARGlzcGF0Y2goKSBub3RpZmljYXRpb25DaGFuZ2VkID0gKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IE5vdGlmaWNhdGlvbkNoYW5nZWRBY3Rpb24obm90aWZpY2F0aW9uRHRvLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgaGFuZGxlZE5vdGlmaWNhdGlvbiA9IChub3RpZmljYXRpb25EdG86IE5vdGlmaWNhdGlvbkR0bywgZ3VpZDogc3RyaW5nKSA9PlxuICAgIG5ldyBIYW5kbGVkTm90aWZpY2F0aW9uQWN0aW9uKG5vdGlmaWNhdGlvbkR0bywgZ3VpZCk7XG4gIEBEaXNwYXRjaCgpIGhhbmRsZUFsZXJ0cyA9IChhbGVydER0bzogQWxlcnREdG8sIGd1aWQ6IHN0cmluZykgPT5cbiAgICBuZXcgSGFuZGxlQWxlcnRzQWN0aW9uKGFsZXJ0RHRvLCBndWlkKTtcbiAgQERpc3BhdGNoKCkgaGFuZGxlTm90aWZpY2F0aW9uID0gKG5vdGlmaWNhdGlvbkR0bzogTm90aWZpY2F0aW9uRHRvLCBndWlkOiBzdHJpbmcpID0+XG4gICAgbmV3IEhhbmRsZU5vdGlmaWNhdGlvbkFjdGlvbihub3RpZmljYXRpb25EdG8sIGd1aWQpO1xuICBARGlzcGF0Y2goKSB6b25lQ2hhbmdlZCA9ICh6b25lRHRvOiBab25lRHRvLCBwYXJrSWQ6IG51bWJlcikgPT5cbiAgICBuZXcgWm9uZUNoYW5nZWRBY3Rpb24oem9uZUR0bywgcGFya0lkKTtcbiAgQERpc3BhdGNoKCkgaW5pdGlhbGl6ZVNtYXJ0UGFya0Nvbm5lY3Rpb24gPSAoc21hcnRwYXJrOiBTbWFydHBhcmtEdG8pID0+XG4gICAgbmV3IEFkZFNtYXJ0cGFya0FjdGlvbihzbWFydHBhcmspO1xuICBARGlzcGF0Y2goKSBmYWNpbGl0eVJlbW90ZUNvbW1hbmRFeGVjdXRlZCA9IChmYWNpbGl0eVJlbW90ZUNvbW1hbmRFdmVudDogRmFjaWxpdHlSZW1vdGVDb21tYW5kRXZlbnQpID0+XG4gICAgbmV3IEZhY2lsaXR5UmVtb3RlQ29tbWFuZEV4ZWN1dGVkQWN0aW9uKGZhY2lsaXR5UmVtb3RlQ29tbWFuZEV2ZW50KTtcbiAgQERpc3BhdGNoKCkgcHJpdmF0ZSBzaWduYWxSUmVmcmVzaFRva2VuID0gKCkgPT4gbmV3IFNpZ25hbFJSZWZyZXNoVG9rZW5BY3Rpb24oKTtcbn1cblxuZXhwb3J0IGNsYXNzIFRpYmFSZXRyeVBvbGljeSBpbXBsZW1lbnRzIHNpZ25hbFIuSVJldHJ5UG9saWN5IHtcbiAgcHJpdmF0ZSBtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZTtcbiAgcHJpdmF0ZSBhdXRoVG9rZW5TZXJ2aWNlOiBBdXRoVG9rZW5TZXJ2aWNlO1xuICBjb25zdHJ1Y3RvcihtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQ6IG51bWJlciwgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy5tYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQgPSBtYXhDb25zZWN1dGl2ZUZhaWxlZFJldHJ5Q291bnQ7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKTtcbiAgICB0aGlzLmF1dGhUb2tlblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQXV0aFRva2VuU2VydmljZSk7XG4gIH1cblxuICBuZXh0UmV0cnlEZWxheUluTWlsbGlzZWNvbmRzKHJldHJ5Q29udGV4dDogc2lnbmFsUi5SZXRyeUNvbnRleHQpOiBudW1iZXIge1xuICAgIGxldCBtaWxsaXNlY29uZHM6IG51bWJlciA9IG51bGw7XG4gICAgY29uc3QgY3VycmVudFJldHJ5Q291bnQgPSByZXRyeUNvbnRleHQucHJldmlvdXNSZXRyeUNvdW50ICsgMTtcbiAgICBpZiAoaXNVbmF1dGhvcml6ZWRPckV4cGlyZWQocmV0cnlDb250ZXh0LnJldHJ5UmVhc29uLCB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5hY2Nlc3NUb2tlbiwgdGhpcy5hdXRoVG9rZW5TZXJ2aWNlKSkge1xuICAgICAgZGF0YWRvZ0xvZ3MubG9nZ2VyLmluZm8oYFRpYmFSZXRyeVBvbGljeSAtPiB1bmF1dGhvcml6ZWQgdG9rZW4uIE1lc3NhZ2U6ICAke3JldHJ5Q29udGV4dC5yZXRyeVJlYXNvbi5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5zaWduYWxSUmVmcmVzaFRva2VuKCk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50UmV0cnlDb3VudCA8IHRoaXMubWF4Q29uc2VjdXRpdmVGYWlsZWRSZXRyeUNvdW50KSB7XG4gICAgICBkYXRhZG9nTG9ncy5sb2dnZXIuaW5mbyhgVGliYVJldHJ5UG9saWN5IC0+IGZhaWxlZCBuZWdvdGlhdGlvbiAjJHtjdXJyZW50UmV0cnlDb3VudH0uIE1lc3NhZ2U6ICR7cmV0cnlDb250ZXh0LnJldHJ5UmVhc29uLm1lc3NhZ2V9YCk7XG4gICAgICBtaWxsaXNlY29uZHMgPSBnZXRTZWNvbmRzQmFja29mZihjdXJyZW50UmV0cnlDb3VudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbGxpc2Vjb25kcztcbiAgfVxuXG4gIEBEaXNwYXRjaCgpIHNpZ25hbFJSZWZyZXNoVG9rZW4gPSAoKSA9PiBuZXcgU2lnbmFsUlJlZnJlc2hUb2tlbkFjdGlvbigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Vjb25kc0JhY2tvZmYocmV0cnlDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgZGVsYXlzVGFibGVJblNlY29uZHM6IHsgW2tleTogbnVtYmVyXTogbnVtYmVyW107IH0gPSB7XG4gICAgMTogWzUsIDIwXSwgLy81cyAtIDIwc1xuICAgIDI6IFsyNSwgNDBdLCAvLyAyNXMgLSA0MHNcbiAgICAzOiBbNDUsIDYwXSwgLy8gNDVzIC0gNjBzXG4gICAgNDogWzY1LCA4MF0sIC8vIDY1cyAtIDgwc1xuICAgIDU6IFs2MDAsIDkwMF0sICAvLyAxMG0gLSAxNW1cbiAgfTtcbiAgY29uc3QgW21pblNlY29uZHMsIG1heFNlY29uZHNdID0gZGVsYXlzVGFibGVJblNlY29uZHNbcmV0cnlDb3VudF0gfHwgWzAsIDBdO1xuICByZXR1cm4gKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXhTZWNvbmRzIC0gbWluU2Vjb25kcyArIDEpKSArIG1pblNlY29uZHMpICogT05FX1NFQ09ORF9JTl9NSUxMSVNFQ09ORFM7XG59XG5cbmZ1bmN0aW9uIGlzVW5hdXRob3JpemVkT3JFeHBpcmVkKGVycm9yOiBhbnksIHRva2VuOiBzdHJpbmcsIGF1dGhUb2tlblNlcnZpY2U6IEF1dGhUb2tlblNlcnZpY2UpOiBib29sZWFuIHtcbiAgY29uc3QgdW5hdXRob3JpemVkID0gKGVycm9yPy5tZXNzYWdlIGFzIHN0cmluZyk/LmluY2x1ZGVzKGBTdGF0dXMgY29kZSAnJHtIdHRwU3RhdHVzQ29kZS5VbmF1dGhvcml6ZWR9J2ApO1xuICByZXR1cm4gdW5hdXRob3JpemVkIHx8IGF1dGhUb2tlblNlcnZpY2UuaXNUb2tlbkV4cGlyZWQodG9rZW4pO1xufVxuIl19
|