studiokit-scaffolding-js 7.7.0 → 7.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -179,9 +179,11 @@ function* getTokenFromRefreshToken(oauthTokenParam) {
|
|
|
179
179
|
}
|
|
180
180
|
return fetchResultAction.data;
|
|
181
181
|
}
|
|
182
|
+
let isExpiringSoonAlertVisible;
|
|
182
183
|
let refreshLock;
|
|
183
184
|
let previousRefreshToken;
|
|
184
185
|
function resetRefresh() {
|
|
186
|
+
isExpiringSoonAlertVisible = false;
|
|
185
187
|
refreshLock = false;
|
|
186
188
|
previousRefreshToken = undefined;
|
|
187
189
|
}
|
|
@@ -347,9 +349,9 @@ const getOAuthToken = function* () {
|
|
|
347
349
|
const expiresUtc = _momentTimezone.default.utc(oauthToken['.expires']);
|
|
348
350
|
const nowUtc = _momentTimezone.default.utc((0, _date.getServerNowUtc)().toISOString());
|
|
349
351
|
const isExpiringSoon = expiresUtc.diff(nowUtc) <= appConfig.SESSION_REFRESH_THRESHOLD;
|
|
350
|
-
// if token is refreshable, within refresh threshold,
|
|
352
|
+
// if token is refreshable, within refresh threshold, user is not idle, and not displaying alert, then auto-refresh
|
|
351
353
|
// this is a fail-safe in case the `refreshLoop` has failed
|
|
352
|
-
if ((0, _auth.isTokenRefreshable)(oauthToken) && isExpiringSoon && !(0, _userActivity.isUserIdle)()) {
|
|
354
|
+
if ((0, _auth.isTokenRefreshable)(oauthToken) && isExpiringSoon && !(0, _userActivity.isUserIdle)() && !isExpiringSoonAlertVisible) {
|
|
353
355
|
logger.debug('getOAuthToken trigger auto-refresh');
|
|
354
356
|
oauthToken = yield (0, _effects.call)(performTokenRefresh, oauthToken);
|
|
355
357
|
}
|
|
@@ -371,6 +373,7 @@ function* refreshLoop() {
|
|
|
371
373
|
let oauthToken;
|
|
372
374
|
logger.debug('refreshLoop init');
|
|
373
375
|
while (true) {
|
|
376
|
+
isExpiringSoonAlertVisible = false;
|
|
374
377
|
oauthToken = yield (0, _effects.call)(authPersistenceService.getPersistedToken);
|
|
375
378
|
logger.debug('refreshLoop start', {
|
|
376
379
|
oauthToken,
|
|
@@ -423,6 +426,9 @@ function* refreshLoop() {
|
|
|
423
426
|
yield (0, _effects.put)({
|
|
424
427
|
type: _actions.AUTH_ACTION_TYPE.EXPIRING_SOON
|
|
425
428
|
});
|
|
429
|
+
// track local state to block auto-refresh in `getOAuthToken`
|
|
430
|
+
isExpiringSoonAlertVisible = true;
|
|
431
|
+
|
|
426
432
|
// wait for user to take an action, or for token to expire
|
|
427
433
|
// if user logs out, the root `authSaga` will cancel this loop
|
|
428
434
|
const {
|
|
@@ -595,4 +601,4 @@ function authSaga(authPersistenceServiceParam, ticketProviderService, codeProvid
|
|
|
595
601
|
} while (true);
|
|
596
602
|
}();
|
|
597
603
|
}
|
|
598
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50VGltZXpvbmUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9lZmZlY3RzIiwiX3V1aWQiLCJfY29uc3RhbnRzIiwiX3dpbmRvd1NlcnZpY2UiLCJfdHlwZXMiLCJfYXV0aCIsIl9kYXRlIiwiX2Vycm9yIiwiX2xvZ2dlciIsIl91cmwiLCJfdXNlckFjdGl2aXR5IiwiX2FjdGlvbnMiLCJtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiYWN0aW9uIiwibW9kZWxOYW1lIiwiaXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwibW9kZWxQYXRoIiwiZXhwb3J0cyIsInRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiaW5jb21pbmdBY3Rpb24iLCJtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCIsImlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uIiwidGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkIiwiZGVmYXVsdEVycm9ySGFuZGxlciIsImF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UiLCJlcnJvckhhbmRsZXIiLCJsb2dnZXIiLCJnZXRUb2tlbkZyb21Db2RlIiwiY29kZSIsImFwcENvbmZpZyIsImdldEFwcENvbmZpZyIsIkNMSUVOVF9JRCIsIkNMSUVOVF9TRUNSRVQiLCJFcnJvciIsImdldFRva2VuTW9kZWxOYW1lIiwiZm9ybUJvZHkiLCJVUkxTZWFyY2hQYXJhbXMiLCJncmFudF90eXBlIiwiY2xpZW50X2lkIiwiY2xpZW50X3NlY3JldCIsInB1dCIsInR5cGUiLCJNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFIiwiRkVUQ0hfUkVRVUVTVCIsImJvZHkiLCJ0b1N0cmluZyIsIm5vU3RvcmUiLCJmZXRjaFJlc3VsdEFjdGlvbiIsImZldGNoRXJyb3JBY3Rpb24iLCJyYWNlIiwidGFrZSIsImRhdGEiLCJnZXRUb2tlbkZyb21Db2RlQW5kU3RhdGUiLCJzdGF0ZSIsIk9BVVRIX1BLQ0VfU0NPUEUiLCJPQVVUSF9QS0NFX0VORFBPSU5UIiwiY29kZVZlcmlmaWVyIiwiY2FsbCIsImdldFBlcnNpc3RlZENvZGVWZXJpZmllciIsInBlcnNpc3RlZFN0YXRlIiwiZ2V0UGVyc2lzdGVkU3RhdGUiLCJwZXJzaXN0U3RhdGUiLCJwZXJzaXN0Q29kZVZlcmlmaWVyIiwibG9jYXRpb24iLCJ3aW5kb3dTZXJ2aWNlIiwiZ2V0TG9jYXRpb24iLCJzY29wZSIsImNvZGVfdmVyaWZpZXIiLCJyZWRpcmVjdF91cmkiLCJvcmlnaW4iLCJnZXRUb2tlbkZyb21SZWZyZXNoVG9rZW4iLCJvYXV0aFRva2VuUGFyYW0iLCJyZWZyZXNoX3Rva2VuIiwiYXBwZW5kIiwiZXJyb3JEYXRhIiwic3RhdHVzIiwiSFRUUF9TVEFUVVNfQ09ERSIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsInJlZnJlc2hMb2NrIiwicHJldmlvdXNSZWZyZXNoVG9rZW4iLCJyZXNldFJlZnJlc2giLCJ1bmRlZmluZWQiLCJwZXJmb3JtVG9rZW5SZWZyZXNoIiwib2F1dGhUb2tlbiIsInJlZnJlc2hTdWNjZXNzIiwiQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFIiwiVE9LRU5fUkVGUkVTSF9TVUNDRUVERUQiLCJyZWZyZXNoRmFpbGVkIiwiQVVUSF9BQ1RJT05fVFlQRSIsIlRPS0VOX1JFRlJFU0hfRkFJTEVEIiwiZ2V0UGVyc2lzdGVkVG9rZW4iLCJkZWJ1ZyIsIm9yaWdpbmFsQWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJyZXRyeURlbGF5IiwiZGVsYXkiLCJvYXV0aFRva2VuUmVzcG9uc2UiLCJwZXJzaXN0VG9rZW4iLCJhbGwiLCJsb2dPdXQiLCJBVVRIX0xPR19PVVRfQUNUSU9OX1RZUEUiLCJMT0dfT1VUIiwidG9rZW5FeHBpcmVkIiwiY2F1Z2h0RXJyb3IiLCJlcnJvciIsImNvbnN0cnVjdEVycm9yRnJvbUNhdWdodEVycm9yIiwibG9naW5GbG93IiwibW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24iLCJjcmVkZW50aWFsc0xvZ2luRmxvdyIsIm5vUmV0cnkiLCJjYXNWMUxvZ2luRmxvdyIsImxvY2FsTG9naW5GbG93IiwiY2FzVGlja2V0TG9naW5GbG93IiwidGlja2V0Iiwic2VydmljZSIsInF1ZXJ5UGFyYW1zIiwicGtjZUxvZ2luRmxvdyIsIl8iLCJ1dWlkdjQiLCJzaGEyNTZDb2RlVmVyaWZpZXIiLCJzaGEyNTZBc3luYyIsImNvZGVDaGFsbGVuZ2UiLCJiYXNlNjRVcmxFbmNvZGUiLCJwa2NlQXV0aFJlZGlyZWN0VVJMIiwicmVzcG9uc2VfdHlwZSIsImNvZGVfY2hhbGxlbmdlIiwiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwicmVwbGFjZSIsImhhbmRsZUF1dGhGYWlsdXJlIiwiVU5BVVRIT1JJWkVEIiwiaXNUb2tlbkV4cGlyZWQiLCJpc1Rva2VuUmVmcmVzaGFibGUiLCJpc1VzZXJJZGxlIiwiZ2V0T0F1dGhUb2tlbiIsImV4cGlyZXNVdGMiLCJtb21lbnQiLCJ1dGMiLCJub3dVdGMiLCJnZXRTZXJ2ZXJOb3dVdGMiLCJ0b0lTT1N0cmluZyIsImlzRXhwaXJpbmdTb29uIiwiZGlmZiIsIlNFU1NJT05fUkVGUkVTSF9USFJFU0hPTEQiLCJyZXNldERhdGEiLCJjbGVhclVzZXJEYXRhIiwiTU9ERUxfUkVNT1ZFX0tFWV9BQ1RJT05fVFlQRSIsImNsZWFyUGVyc2lzdGVudFRva2VuIiwicmVmcmVzaExvb3AiLCJpc0V4cGlyZWQiLCJpc1JlZnJlc2hhYmxlIiwidGltZVVudGlsRXhwaXJlcyIsImV4cGlyZXNTb29uVXRjIiwic3VidHJhY3QiLCJtYXhEZWxheSIsImV4cGlyZXNfaW4iLCJleHBpcmVzU29vbkRlbGF5IiwiTWF0aCIsIm1pbiIsImVsYXBzZWQiLCJFWFBJUklOR19TT09OIiwiZXh0ZW5zaW9uUmVxdWVzdGVkIiwiRVhURU5TSU9OX1JFUVVFU1RFRCIsImF1dGhTYWdhIiwiYXV0aFBlcnNpc3RlbmNlU2VydmljZVBhcmFtIiwidGlja2V0UHJvdmlkZXJTZXJ2aWNlIiwiY29kZVByb3ZpZGVyU2VydmljZSIsImVycm9ySGFuZGxlclBhcmFtIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZ2V0TG9nZ2VyIiwiY2FzVGlja2V0IiwiZ2V0VGlja2V0IiwiZ2V0QXBwU2VydmljZU5hbWUiLCJoYXNDYXNUaWNrZXQiLCJnZXRDb2RlIiwiZ2V0U3RhdGUiLCJwdXJkdWVJZGVudGl0eVByb3ZpZGVyIiwiZ2V0UHVyZHVlSWRlbnRpdHlQcm92aWRlckZyb21Mb2NhdGlvbiIsImlzUHVyZHVlQXV0b0xvZ2luUmVxdWVzdGVkIiwiZ2V0SXNQdXJkdWVBdXRvTG9naW5SZXF1ZXN0ZWQiLCJwZXJzaXN0SXNQdXJkdWVBdXRvTG9naW5SZXF1ZXN0ZWQiLCJyZXR1cm5VcmwiLCJnZXRSZXR1cm5VcmwiLCJwZXJzaXN0UmV0dXJuVXJsIiwicGF0aG5hbWUiLCJsb2dpblVybCIsInBlcnNpc3RJZGVudGl0eVByb3ZpZGVyIiwicmVtb3ZlVGlja2V0IiwicmVtb3ZlQ29kZUFuZFN0YXRlIiwiQVVUSF9UT0tFTl9BQ1RJT05fVFlQRSIsIkFVVEhfSU5JVElBTElaRUQiLCJ0YWtlRXZlcnkiLCJNT0RFTF9GRVRDSF9FUlJPUl9BQ1RJT05fVFlQRSIsIlRSWV9GRVRDSF9GQUlMRUQiLCJjYXNWMUFjdGlvbiIsImxvY2FsTG9naW5BY3Rpb24iLCJwa2NlTG9naW5BY3Rpb24iLCJBVVRIX0NBU19WMV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFIiwiQ0FTX1YxX0xPR0lOX1JFUVVFU1QiLCJBVVRIX0xPQ0FMX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUiLCJMT0NBTF9MT0dJTl9SRVFVRVNUIiwiQVVUSF9QS0NFX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUiLCJQS0NFX0xPR0lOX1JFUVVFU1QiLCJMT0dJTl9SRVFVRVNURUQiLCJsb2dpblN1Y2Nlc3MiLCJHRVRfVE9LRU5fU1VDQ0VFREVEIiwicmVmcmVzaExvb3BUYXNrIiwiZm9yayIsImNhbmNlbCIsIkxPR0lOX0ZBSUxFRCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9hdXRoU2FnYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTYWdhSXRlcmF0b3IsIFRhc2sgfSBmcm9tICdAcmVkdXgtc2FnYS9jb3JlJ1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnXG5pbXBvcnQgeyBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcbmltcG9ydCB7IGFsbCwgY2FsbCwgY2FuY2VsLCBkZWxheSwgZm9yaywgcHV0LCByYWNlLCB0YWtlLCB0YWtlRXZlcnkgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgZ2V0QXBwQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgd2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dpbmRvd1NlcnZpY2UnXG5pbXBvcnQge1xuXHRBdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLFxuXHRDb2RlUHJvdmlkZXJTZXJ2aWNlLFxuXHRFcnJvckhhbmRsZXIsXG5cdEhUVFBfU1RBVFVTX0NPREUsXG5cdE9BdXRoVG9rZW4sXG5cdE9BdXRoVG9rZW5SZXNwb25zZSxcblx0VGlja2V0UHJvdmlkZXJTZXJ2aWNlLFxuXHRUb2tlbkFjY2Vzc0Z1bmN0aW9uXG59IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0UHVyZHVlSWRlbnRpdHlQcm92aWRlckZyb21Mb2NhdGlvbiwgaXNUb2tlbkV4cGlyZWQsIGlzVG9rZW5SZWZyZXNoYWJsZSB9IGZyb20gJy4uLy4uL3V0aWxzL2F1dGgnXG5pbXBvcnQgeyBnZXRTZXJ2ZXJOb3dVdGMgfSBmcm9tICcuLi8uLi91dGlscy9kYXRlJ1xuaW1wb3J0IHsgY29uc3RydWN0RXJyb3JGcm9tQ2F1Z2h0RXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9lcnJvcidcbmltcG9ydCB7IGdldExvZ2dlciwgTG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyJ1xuaW1wb3J0IHsgYmFzZTY0VXJsRW5jb2RlLCBzaGEyNTZBc3luYyB9IGZyb20gJy4uLy4uL3V0aWxzL3VybCdcbmltcG9ydCB7IGlzVXNlcklkbGUgfSBmcm9tICcuLi8uLi91dGlscy91c2VyQWN0aXZpdHknXG5pbXBvcnQge1xuXHRBVVRIX0FDVElPTl9UWVBFLFxuXHRBVVRIX0NBU19WMV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLFxuXHRBVVRIX0xPQ0FMX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdEFVVEhfTE9HX09VVF9BQ1RJT05fVFlQRSxcblx0QVVUSF9QS0NFX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdEFVVEhfVE9LRU5fQUNUSU9OX1RZUEUsXG5cdEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRSxcblx0QXV0aEFjdGlvbixcblx0QXV0aENhc1YxTG9naW5SZXF1ZXN0QWN0aW9uLFxuXHRBdXRoTG9jYWxMb2dpblJlcXVlc3RBY3Rpb24sXG5cdEF1dGhMb2dPdXRBY3Rpb24sXG5cdEF1dGhQS0NFTG9naW5SZXF1ZXN0QWN0aW9uLFxuXHRBdXRoVG9rZW5BY3Rpb24sXG5cdEF1dGhUb2tlblN1Y2Nlc3NBY3Rpb24sXG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uLFxuXHRpc1RyYW5zaWVudE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb24sXG5cdE1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFLFxuXHRNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLFxuXHRNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFLFxuXHRNb2RlbEZldGNoRXJyb3JBY3Rpb24sXG5cdE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uLFxuXHRNb2RlbEZldGNoUmVzdWx0QWN0aW9uLFxuXHRNb2RlbFJlbW92ZUtleUFjdGlvblxufSBmcm9tICcuLi9hY3Rpb25zJ1xuXG4vLyNyZWdpb24gSGVscGVyc1xuXG5leHBvcnQgY29uc3QgbWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZCA9IChhY3Rpb246IEFueUFjdGlvbiwgbW9kZWxOYW1lOiBzdHJpbmcpID0+XG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaFJlc3VsdEFjdGlvbihhY3Rpb24pICYmIGFjdGlvbi5tb2RlbFBhdGggPT09IG1vZGVsTmFtZVxuXG5leHBvcnQgY29uc3QgdGFrZU1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQgPSAobW9kZWxOYW1lOiBzdHJpbmcpID0+IChpbmNvbWluZ0FjdGlvbjogQW55QWN0aW9uKSA9PlxuXHRtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGluY29taW5nQWN0aW9uLCBtb2RlbE5hbWUpXG5cbmV4cG9ydCBjb25zdCBtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCA9IChhY3Rpb246IEFueUFjdGlvbiwgbW9kZWxOYW1lOiBzdHJpbmcpID0+XG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gbW9kZWxOYW1lXG5cbmV4cG9ydCBjb25zdCB0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQgPSAobW9kZWxOYW1lOiBzdHJpbmcpID0+IChpbmNvbWluZ0FjdGlvbjogQW55QWN0aW9uKSA9PlxuXHRtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZChpbmNvbWluZ0FjdGlvbiwgbW9kZWxOYW1lKVxuXG4vLyNlbmRyZWdpb24gSGVscGVyc1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRFcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlciA9ICgpID0+IHtcblx0cmV0dXJuXG59XG5cbmxldCBhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlOiBBdXRoUGVyc2lzdGVuY2VTZXJ2aWNlXG5sZXQgZXJyb3JIYW5kbGVyOiBFcnJvckhhbmRsZXJcbmxldCBsb2dnZXI6IExvZ2dlclxuXG5leHBvcnQgZnVuY3Rpb24qIGdldFRva2VuRnJvbUNvZGUoY29kZTogc3RyaW5nKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0aWYgKCFhcHBDb25maWcuQ0xJRU5UX0lEIHx8ICFhcHBDb25maWcuQ0xJRU5UX1NFQ1JFVCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ0xJRU5UX0lEIGFuZCBDTElFTlRfU0VDUkVUIGFyZSByZXF1aXJlZCBpbiBBcHBDb25maWcnKVxuXHR9XG5cdGNvbnN0IGdldFRva2VuTW9kZWxOYW1lID0gJ2dldFRva2VuJ1xuXHRjb25zdCBmb3JtQm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuXHRcdGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuXHRcdGNsaWVudF9pZDogYXBwQ29uZmlnLkNMSUVOVF9JRCxcblx0XHRjbGllbnRfc2VjcmV0OiBhcHBDb25maWcuQ0xJRU5UX1NFQ1JFVCxcblx0XHRjb2RlOiBjb2RlXG5cdH0pXG5cdHlpZWxkIHB1dDxNb2RlbEZldGNoUmVxdWVzdEFjdGlvbj4oe1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWU6IGdldFRva2VuTW9kZWxOYW1lLFxuXHRcdGJvZHk6IGZvcm1Cb2R5LnRvU3RyaW5nKCksXG5cdFx0bm9TdG9yZTogdHJ1ZVxuXHR9KVxuXHRjb25zdCB7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb24sXG5cdFx0ZmV0Y2hFcnJvckFjdGlvblxuXHR9OiB7IGZldGNoUmVzdWx0QWN0aW9uPzogTW9kZWxGZXRjaFJlc3VsdEFjdGlvbjsgZmV0Y2hFcnJvckFjdGlvbj86IE1vZGVsRmV0Y2hFcnJvckFjdGlvbiB9ID0geWllbGQgcmFjZSh7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKSxcblx0XHRmZXRjaEVycm9yQWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZChnZXRUb2tlbk1vZGVsTmFtZSkpXG5cdH0pXG5cdGlmIChmZXRjaEVycm9yQWN0aW9uIHx8ICFmZXRjaFJlc3VsdEFjdGlvbj8uZGF0YSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0cmV0dXJuIGZldGNoUmVzdWx0QWN0aW9uLmRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBnZXRUb2tlbkZyb21Db2RlQW5kU3RhdGUoY29kZTogc3RyaW5nLCBzdGF0ZTogc3RyaW5nKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0aWYgKCFhcHBDb25maWcuQ0xJRU5UX0lEIHx8ICFhcHBDb25maWcuT0FVVEhfUEtDRV9TQ09QRSB8fCAhYXBwQ29uZmlnLk9BVVRIX1BLQ0VfRU5EUE9JTlQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NMSUVOVF9JRCwgT0FVVEhfUEtDRV9TQ09QRSwgYW5kIE9BVVRIX1BLQ0VfRU5EUE9JTlQgYXJlIHJlcXVpcmVkIGluIEFwcENvbmZpZycpXG5cdH1cblxuXHQvLyB2YWxpZGF0ZSBwZXJzaXN0ZWQgdmFsdWVzXG5cdGNvbnN0IGNvZGVWZXJpZmllciA9IHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRDb2RlVmVyaWZpZXIpXG5cdGlmICghY29kZVZlcmlmaWVyKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNvZGVfdmVyaWZpZXInKVxuXHR9XG5cdGNvbnN0IHBlcnNpc3RlZFN0YXRlID0geWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFN0YXRlKVxuXHRpZiAocGVyc2lzdGVkU3RhdGUgIT09IHN0YXRlKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN0YXRlJylcblx0fVxuXHQvLyBjbGVhciBwZXJzaXN0ZWQgdmFsdWVzXG5cdHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0U3RhdGUsIG51bGwpXG5cdHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0Q29kZVZlcmlmaWVyLCBudWxsKVxuXG5cdC8vIGRpc3BhdGNoIHJlcXVlc3Rcblx0Y29uc3QgZ2V0VG9rZW5Nb2RlbE5hbWUgPSAnZ2V0VG9rZW4nXG5cdGNvbnN0IGxvY2F0aW9uID0gd2luZG93U2VydmljZS5nZXRMb2NhdGlvbigpXG5cdGNvbnN0IGZvcm1Cb2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG5cdFx0Z3JhbnRfdHlwZTogJ2F1dGhvcml6YXRpb25fY29kZScsXG5cdFx0Y2xpZW50X2lkOiBhcHBDb25maWcuQ0xJRU5UX0lELFxuXHRcdHNjb3BlOiBhcHBDb25maWcuT0FVVEhfUEtDRV9TQ09QRSxcblx0XHRjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsXG5cdFx0cmVkaXJlY3RfdXJpOiBsb2NhdGlvbi5vcmlnaW4sXG5cdFx0Y29kZTogY29kZVxuXHR9KVxuXHR5aWVsZCBwdXQ8TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24+KHtcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lOiBnZXRUb2tlbk1vZGVsTmFtZSxcblx0XHRib2R5OiBmb3JtQm9keS50b1N0cmluZygpLFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGdldFRva2VuTW9kZWxOYW1lKSksXG5cdFx0ZmV0Y2hFcnJvckFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKVxuXHR9KVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbiB8fCAhZmV0Y2hSZXN1bHRBY3Rpb24/LmRhdGEpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiBmZXRjaFJlc3VsdEFjdGlvbi5kYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tUmVmcmVzaFRva2VuKG9hdXRoVG9rZW5QYXJhbTogT0F1dGhUb2tlbik6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGlmICghYXBwQ29uZmlnLkNMSUVOVF9JRCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ0xJRU5UX0lEIGlzIHJlcXVpcmVkIGluIEFwcENvbmZpZycpXG5cdH1cblx0aWYgKCFvYXV0aFRva2VuUGFyYW0ucmVmcmVzaF90b2tlbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihgcmVmcmVzaF90b2tlbiBpcyByZXF1aXJlZGApXG5cdH1cblxuXHRjb25zdCBnZXRUb2tlbk1vZGVsTmFtZSA9ICdnZXRUb2tlbidcblx0Y29uc3QgZm9ybUJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcblx0XHRncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG5cdFx0Y2xpZW50X2lkOiBhcHBDb25maWcuQ0xJRU5UX0lELFxuXHRcdHJlZnJlc2hfdG9rZW46IG9hdXRoVG9rZW5QYXJhbS5yZWZyZXNoX3Rva2VuXG5cdH0pXG5cdC8vIGNyZWF0ZSB0aGUgZm9ybSBib2R5IGJhc2VkIG9uIGlmIHVzaW5nIGEgY2xpZW50X3NlY3JldDogdHJhZGl0aW9uYWwgT0F1dGggdnMuIFBLQ0UgZmxvd1xuXHRpZiAoYXBwQ29uZmlnLkNMSUVOVF9TRUNSRVQpIHtcblx0XHRmb3JtQm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBhcHBDb25maWcuQ0xJRU5UX1NFQ1JFVClcblx0fVxuXHR5aWVsZCBwdXQ8TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24+KHtcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lOiBnZXRUb2tlbk1vZGVsTmFtZSxcblx0XHRib2R5OiBmb3JtQm9keS50b1N0cmluZygpLFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKGdldFRva2VuTW9kZWxOYW1lKSksXG5cdFx0ZmV0Y2hFcnJvckFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hGYWlsZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKVxuXHR9KVxuXHQvLyBhbnkgZXJyb3IgcmVzcG9uc2Vcblx0aWYgKGZldGNoRXJyb3JBY3Rpb24pIHtcblx0XHQvLyBpZ25vcmUgc2VydmVyIGVycm9yc1xuXHRcdGlmIChcblx0XHRcdGZldGNoRXJyb3JBY3Rpb24uZXJyb3JEYXRhPy5zdGF0dXMgJiZcblx0XHRcdGZldGNoRXJyb3JBY3Rpb24uZXJyb3JEYXRhLnN0YXR1cyA+PSBIVFRQX1NUQVRVU19DT0RFLklOVEVSTkFMX1NFUlZFUl9FUlJPUlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIG9hdXRoVG9rZW5QYXJhbVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdC8vIGZvciBzb21lIHJlYXNvbiB0aGUgcmVzcG9uc2UgaGFkIG5vIGJvZHlcblx0aWYgKCFmZXRjaFJlc3VsdEFjdGlvbj8uZGF0YSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0cmV0dXJuIGZldGNoUmVzdWx0QWN0aW9uLmRhdGFcbn1cblxubGV0IHJlZnJlc2hMb2NrOiBib29sZWFuXG5sZXQgcHJldmlvdXNSZWZyZXNoVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRSZWZyZXNoKCkge1xuXHRyZWZyZXNoTG9jayA9IGZhbHNlXG5cdHByZXZpb3VzUmVmcmVzaFRva2VuID0gdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogcGVyZm9ybVRva2VuUmVmcmVzaChvYXV0aFRva2VuOiBPQXV0aFRva2VuKTogU2FnYUl0ZXJhdG9yIHtcblx0aWYgKHJlZnJlc2hMb2NrKSB7XG5cdFx0Ly8gYWxyZWFkeSByZWZyZXNoaW5nLCB3YWl0IGZvciB0aGUgY3VycmVudCByZWZyZXNoIHRvIHN1Y2NlZWQgb3IgZmFpbFxuXHRcdHlpZWxkIHJhY2Uoe1xuXHRcdFx0cmVmcmVzaFN1Y2Nlc3M6IHRha2UoQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLlRPS0VOX1JFRlJFU0hfU1VDQ0VFREVEKSxcblx0XHRcdHJlZnJlc2hGYWlsZWQ6IHRha2UoQVVUSF9BQ1RJT05fVFlQRS5UT0tFTl9SRUZSRVNIX0ZBSUxFRClcblx0XHR9KVxuXHRcdC8vIHJldHVybiB0aGUgY3VycmVudCBwZXJzaXN0ZWQgdG9rZW5cblx0XHRyZXR1cm4geWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFRva2VuKVxuXHR9XG5cdGxvZ2dlci5kZWJ1ZygnT0F1dGggdG9rZW4gcmVmcmVzaGluZy4uLicpXG5cdHJlZnJlc2hMb2NrID0gdHJ1ZVxuXHR0cnkge1xuXHRcdC8vIG9hdXRoVG9rZW4gd2lsbCBiZSBzZXQgdG86XG5cdFx0Ly8gMS4gbmV3IHRva2VuIChzdWNjZXNzKVxuXHRcdC8vIDIuIHNhbWUgdG9rZW4gKGZhaWxlZCBmcm9tIHRpbWVvdXQgb3Igc2VydmVyIGVycm9yKVxuXHRcdC8vIDMuIG51bGwgKGZhaWwpXG5cdFx0Y29uc3Qgb3JpZ2luYWxBY2Nlc3NUb2tlbiA9IG9hdXRoVG9rZW4uYWNjZXNzX3Rva2VuXG5cdFx0Ly8gaWYgdXNpbmcgdGhlIHNhbWUgcmVmcmVzaF90b2tlbiwgdGhlIHByZXZpb3VzIHJlZnJlc2ggZGlkIG5vdCBzdWNjZWVkIChlLmcuIHNlcnZlciBlcnJvciBvciB0aW1lb3V0KVxuXHRcdC8vIGJhY2sgb2ZmIGJlZm9yZSByZXRyeWluZyBzbyB3ZSBkb24ndCBoYW1tZXIgdGhlIHNlcnZlciB3aGlsZSBpdCBpcyB1bmF2YWlsYWJsZVxuXHRcdGlmIChvYXV0aFRva2VuLnJlZnJlc2hfdG9rZW4gPT09IHByZXZpb3VzUmVmcmVzaFRva2VuKSB7XG5cdFx0XHRjb25zdCByZXRyeURlbGF5ID0gNTAwMFxuXHRcdFx0bG9nZ2VyLmRlYnVnKGBPQXV0aCB0b2tlbiByZWZyZXNoaW5nIHdpdGggc2FtZSB0b2tlbiwgYmFja2luZyBvZmYgJHtyZXRyeURlbGF5fSBtc2ApXG5cdFx0XHR5aWVsZCBkZWxheShyZXRyeURlbGF5KVxuXHRcdH1cblx0XHRwcmV2aW91c1JlZnJlc2hUb2tlbiA9IG9hdXRoVG9rZW4ucmVmcmVzaF90b2tlblxuXHRcdGNvbnN0IG9hdXRoVG9rZW5SZXNwb25zZTogT0F1dGhUb2tlblJlc3BvbnNlID0geWllbGQgY2FsbChnZXRUb2tlbkZyb21SZWZyZXNoVG9rZW4sIG9hdXRoVG9rZW4pXG5cdFx0aWYgKCEhb2F1dGhUb2tlblJlc3BvbnNlICYmIG9hdXRoVG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4gIT09IG9yaWdpbmFsQWNjZXNzVG9rZW4pIHtcblx0XHRcdGxvZ2dlci5kZWJ1ZygnT0F1dGggdG9rZW4gcmVmcmVzaGVkJylcblx0XHRcdHByZXZpb3VzUmVmcmVzaFRva2VuID0gdW5kZWZpbmVkXG5cdFx0XHR5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBvYXV0aFRva2VuUmVzcG9uc2UpXG5cdFx0XHR5aWVsZCBwdXQ8QXV0aFRva2VuU3VjY2Vzc0FjdGlvbj4oe1xuXHRcdFx0XHR0eXBlOiBBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUuVE9LRU5fUkVGUkVTSF9TVUNDRUVERUQsXG5cdFx0XHRcdG9hdXRoVG9rZW46IG9hdXRoVG9rZW5SZXNwb25zZVxuXHRcdFx0fSlcblx0XHR9IGVsc2UgaWYgKG9hdXRoVG9rZW5SZXNwb25zZSA9PT0gbnVsbCkge1xuXHRcdFx0bG9nZ2VyLmRlYnVnKCdPQXV0aCB0b2tlbiBmYWlsZWQgdG8gcmVmcmVzaCcpXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gb3V0c2lkZSBvZiB0aGUgdG9rZW4gaGF2aW5nIGJlZW4gcmV2b2tlZCBvbiB0aGUgc2VydmVyIHNpZGVcblx0XHRcdHlpZWxkIGFsbCh7XG5cdFx0XHRcdHJlZnJlc2hGYWlsZWQ6IHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuVE9LRU5fUkVGUkVTSF9GQUlMRUQgfSksXG5cdFx0XHRcdGxvZ091dDogcHV0PEF1dGhMb2dPdXRBY3Rpb24+KHsgdHlwZTogQVVUSF9MT0dfT1VUX0FDVElPTl9UWVBFLkxPR19PVVQsIHRva2VuRXhwaXJlZDogdHJ1ZSB9KVxuXHRcdFx0fSlcblx0XHR9XG5cdFx0cmV0dXJuIG9hdXRoVG9rZW5SZXNwb25zZVxuXHR9IGNhdGNoIChjYXVnaHRFcnJvcjogdW5rbm93bikge1xuXHRcdGNvbnN0IGVycm9yID0gY29uc3RydWN0RXJyb3JGcm9tQ2F1Z2h0RXJyb3IoY2F1Z2h0RXJyb3IsICdQZXJmb3JtVG9rZW5SZWZyZXNoRXJyb3InKVxuXHRcdGxvZ2dlci5lcnJvcihlcnJvcilcblx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdH0gZmluYWxseSB7XG5cdFx0cmVmcmVzaExvY2sgPSBmYWxzZVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbG9naW5GbG93KG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uOiBNb2RlbEZldGNoUmVxdWVzdEFjdGlvbik6IFNhZ2FJdGVyYXRvciB7XG5cdHlpZWxkIHB1dChtb2RlbEZldGNoUmVxdWVzdEFjdGlvbilcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uLm1vZGVsTmFtZSkpLFxuXHRcdGZldGNoRXJyb3JBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uLm1vZGVsTmFtZSkpXG5cdH0pXG5cdGlmIChmZXRjaEVycm9yQWN0aW9uKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRjb25zdCBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBmZXRjaFJlc3VsdEFjdGlvbj8uZGF0YT8uY29kZVxuXHRpZiAoIWNvZGUpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiB5aWVsZCBjYWxsKGdldFRva2VuRnJvbUNvZGUsIGNvZGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY3JlZGVudGlhbHNMb2dpbkZsb3coXG5cdGFjdGlvbjogQXV0aENhc1YxTG9naW5SZXF1ZXN0QWN0aW9uIHwgQXV0aExvY2FsTG9naW5SZXF1ZXN0QWN0aW9uLFxuXHRtb2RlbE5hbWU6IHN0cmluZ1xuKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgbW9kZWxGZXRjaFJlcXVlc3RBY3Rpb246IE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uID0ge1xuXHRcdC8vIHNldCByZXF1aXJlZCBkZWZhdWx0c1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWUsXG5cdFx0bm9TdG9yZTogdHJ1ZSxcblx0XHQvLyBmb3JjZSBubyByZXRyeVxuXHRcdG5vUmV0cnk6IHRydWUsXG5cdFx0Ly8gcGFzcyB0aHJ1IGJvZHlcblx0XHRib2R5OiBhY3Rpb24uYm9keVxuXHR9XG5cdHJldHVybiB5aWVsZCBjYWxsKGxvZ2luRmxvdywgbW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY2FzVjFMb2dpbkZsb3coYWN0aW9uOiBBdXRoQ2FzVjFMb2dpblJlcXVlc3RBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHRyZXR1cm4geWllbGQgY2FsbChjcmVkZW50aWFsc0xvZ2luRmxvdywgYWN0aW9uLCAnY29kZUZyb21DYXNWMScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbG9jYWxMb2dpbkZsb3coYWN0aW9uOiBBdXRoTG9jYWxMb2dpblJlcXVlc3RBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHRyZXR1cm4geWllbGQgY2FsbChjcmVkZW50aWFsc0xvZ2luRmxvdywgYWN0aW9uLCAnY29kZUZyb21Mb2NhbENyZWRlbnRpYWxzJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBjYXNUaWNrZXRMb2dpbkZsb3codGlja2V0OiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZyk6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uOiBNb2RlbEZldGNoUmVxdWVzdEFjdGlvbiA9IHtcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lOiAnY29kZUZyb21DYXNUaWNrZXQnLFxuXHRcdG5vU3RvcmU6IHRydWUsXG5cdFx0cXVlcnlQYXJhbXM6IHtcblx0XHRcdHRpY2tldCxcblx0XHRcdHNlcnZpY2Vcblx0XHR9XG5cdH1cblx0cmV0dXJuIHlpZWxkIGNhbGwobG9naW5GbG93LCBtb2RlbEZldGNoUmVxdWVzdEFjdGlvbilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBwa2NlTG9naW5GbG93KF86IEF1dGhQS0NFTG9naW5SZXF1ZXN0QWN0aW9uKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0aWYgKCFhcHBDb25maWcuQ0xJRU5UX0lEIHx8ICFhcHBDb25maWcuT0FVVEhfUEtDRV9TQ09QRSB8fCAhYXBwQ29uZmlnLk9BVVRIX1BLQ0VfRU5EUE9JTlQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NMSUVOVF9JRCwgT0FVVEhfUEtDRV9TQ09QRSwgYW5kIE9BVVRIX1BLQ0VfRU5EUE9JTlQgYXJlIHJlcXVpcmVkIGluIEFwcENvbmZpZycpXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSBzdGF0ZSBhbmQgY29kZSB2ZXJpZmllciB2YWx1ZXNcblx0Y29uc3Qgc3RhdGUgPSB1dWlkdjQoKVxuXHRjb25zdCBjb2RlVmVyaWZpZXIgPSB1dWlkdjQoKVxuXHRjb25zdCBzaGEyNTZDb2RlVmVyaWZpZXIgPSB5aWVsZCBjYWxsKHNoYTI1NkFzeW5jLCBjb2RlVmVyaWZpZXIpXG5cdGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSB5aWVsZCBjYWxsKGJhc2U2NFVybEVuY29kZSwgc2hhMjU2Q29kZVZlcmlmaWVyKVxuXG5cdC8vIFBlcnNpc3Qgc3RhdGUgYW5kIGNvZGUgdmVyaWZpZXIgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdXNlIGFmdGVyIGNvZGUgZmxvdyByZWRpcmVjdC5cblx0eWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RTdGF0ZSwgc3RhdGUpXG5cdHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0Q29kZVZlcmlmaWVyLCBjb2RlVmVyaWZpZXIpXG5cblx0Ly8gUmVkaXJlY3QgdG8gQlMgY29kZSBmbG93IGF1dGggZW5kcG9pbnQgKHdoaWNoIHdpbGwgcmVkaXJlY3QgYmFjayBoZXJlKVxuXHRjb25zdCBsb2NhdGlvbiA9IHdpbmRvd1NlcnZpY2UuZ2V0TG9jYXRpb24oKVxuXHRjb25zdCBwa2NlQXV0aFJlZGlyZWN0VVJMID0gYCR7YXBwQ29uZmlnLk9BVVRIX1BLQ0VfRU5EUE9JTlR9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG5cdFx0cmVzcG9uc2VfdHlwZTogJ2NvZGUnLFxuXHRcdGNsaWVudF9pZDogYXBwQ29uZmlnLkNMSUVOVF9JRCxcblx0XHRzdGF0ZTogc3RhdGUsXG5cdFx0c2NvcGU6IGFwcENvbmZpZy5PQVVUSF9QS0NFX1NDT1BFLFxuXHRcdGNvZGVfY2hhbGxlbmdlOiBjb2RlQ2hhbGxlbmdlLFxuXHRcdGNvZGVfY2hhbGxlbmdlX21ldGhvZDogJ1MyNTYnLFxuXHRcdHJlZGlyZWN0X3VyaTogbG9jYXRpb24ub3JpZ2luXG5cdH0pfWBcblx0eWllbGQgY2FsbCh3aW5kb3dTZXJ2aWNlLnJlcGxhY2UsIHBrY2VBdXRoUmVkaXJlY3RVUkwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaGFuZGxlQXV0aEZhaWx1cmUoYWN0aW9uOiBNb2RlbEZldGNoRXJyb3JBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHRpZiAoIWFjdGlvbi5lcnJvckRhdGEgfHwgYWN0aW9uLmVycm9yRGF0YS5zdGF0dXMgIT09IEhUVFBfU1RBVFVTX0NPREUuVU5BVVRIT1JJWkVEKSByZXR1cm5cblx0Y29uc3Qgb2F1dGhUb2tlbjogT0F1dGhUb2tlblJlc3BvbnNlID0geWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFRva2VuKVxuXHRpZiAoIWlzVG9rZW5FeHBpcmVkKG9hdXRoVG9rZW4pKSByZXR1cm5cblx0Ly8gaWYgYSByZXF1ZXN0IHJlY2VpdmVzIGEgNDAxLCB0aGUgdG9rZW4gaXMgZXhwaXJlZCBhbmQgY2Fubm90IHJlZnJlc2gsIHRyaWdnZXIgZXhwaXJlZCBsb2cgb3V0XG5cdC8vIHRoaXMgaXMgYSBmYWlsLXNhZmUgaW4gY2FzZSB0aGUgYHJlZnJlc2hMb29wYCBoYXMgZmFpbGVkXG5cdGlmICghaXNUb2tlblJlZnJlc2hhYmxlKG9hdXRoVG9rZW4pKSB7XG5cdFx0eWllbGQgcHV0PEF1dGhMb2dPdXRBY3Rpb24+KHsgdHlwZTogQVVUSF9MT0dfT1VUX0FDVElPTl9UWVBFLkxPR19PVVQsIHRva2VuRXhwaXJlZDogdHJ1ZSB9KVxuXHRcdHJldHVyblxuXHR9XG5cdC8vIGlmIHRva2VuIGlzIHJlZnJlc2hhYmxlLCB3aXRoaW4gMzAgc2Vjb25kcyBvZiBleHBpcmF0aW9uLCBhbmQgdXNlciBpcyBub3QgaWRsZSwgYXV0by1yZWZyZXNoXG5cdC8vIHRoaXMgaXMgYSBmYWlsLXNhZmUgaW4gY2FzZSB0aGUgYHJlZnJlc2hMb29wYCBoYXMgZmFpbGVkXG5cdGlmICghaXNVc2VySWRsZSgpKSB7XG5cdFx0bG9nZ2VyLmRlYnVnKCdoYW5kbGVBdXRoRmFpbHVyZSB0cmlnZ2VyIGF1dG8tcmVmcmVzaCcpXG5cdFx0eWllbGQgY2FsbChwZXJmb3JtVG9rZW5SZWZyZXNoLCBvYXV0aFRva2VuKVxuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aFRva2VuOiBUb2tlbkFjY2Vzc0Z1bmN0aW9uID0gZnVuY3Rpb24qICgpIHtcblx0bGV0IG9hdXRoVG9rZW46IE9BdXRoVG9rZW5SZXNwb25zZSA9IHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRUb2tlbilcblx0aWYgKCFvYXV0aFRva2VuPy5bJy5leHBpcmVzJ10pIHJldHVybiBvYXV0aFRva2VuXG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGNvbnN0IGV4cGlyZXNVdGMgPSBtb21lbnQudXRjKG9hdXRoVG9rZW5bJy5leHBpcmVzJ10pXG5cdGNvbnN0IG5vd1V0YyA9IG1vbWVudC51dGMoZ2V0U2VydmVyTm93VXRjKCkudG9JU09TdHJpbmcoKSlcblx0Y29uc3QgaXNFeHBpcmluZ1Nvb24gPSBleHBpcmVzVXRjLmRpZmYobm93VXRjKSA8PSBhcHBDb25maWcuU0VTU0lPTl9SRUZSRVNIX1RIUkVTSE9MRFxuXHQvLyBpZiB0b2tlbiBpcyByZWZyZXNoYWJsZSwgd2l0aGluIHJlZnJlc2ggdGhyZXNob2xkLCBhbmQgdXNlciBpcyBub3QgaWRsZSwgYXV0by1yZWZyZXNoXG5cdC8vIHRoaXMgaXMgYSBmYWlsLXNhZmUgaW4gY2FzZSB0aGUgYHJlZnJlc2hMb29wYCBoYXMgZmFpbGVkXG5cdGlmIChpc1Rva2VuUmVmcmVzaGFibGUob2F1dGhUb2tlbikgJiYgaXNFeHBpcmluZ1Nvb24gJiYgIWlzVXNlcklkbGUoKSkge1xuXHRcdGxvZ2dlci5kZWJ1ZygnZ2V0T0F1dGhUb2tlbiB0cmlnZ2VyIGF1dG8tcmVmcmVzaCcpXG5cdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwocGVyZm9ybVRva2VuUmVmcmVzaCwgb2F1dGhUb2tlbilcblx0fVxuXHRyZXR1cm4gb2F1dGhUb2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24qIHJlc2V0RGF0YSgpOiBTYWdhSXRlcmF0b3Ige1xuXHR5aWVsZCBhbGwoe1xuXHRcdGNsZWFyVXNlckRhdGE6IHB1dDxNb2RlbFJlbW92ZUtleUFjdGlvbj4oeyB0eXBlOiBNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFLCBtb2RlbFBhdGg6ICd1c2VyJyB9KSxcblx0XHRjbGVhclBlcnNpc3RlbnRUb2tlbjogY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RUb2tlbiwgbnVsbCksXG5cdFx0cmVzZXRSZWZyZXNoOiBjYWxsKHJlc2V0UmVmcmVzaClcblx0fSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiByZWZyZXNoTG9vcCgpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxuXHRsZXQgb2F1dGhUb2tlbjogT0F1dGhUb2tlblJlc3BvbnNlXG5cdGxvZ2dlci5kZWJ1ZygncmVmcmVzaExvb3AgaW5pdCcpXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRUb2tlbilcblxuXHRcdGxvZ2dlci5kZWJ1ZygncmVmcmVzaExvb3Agc3RhcnQnLCB7XG5cdFx0XHRvYXV0aFRva2VuLFxuXHRcdFx0aXNFeHBpcmVkOiBpc1Rva2VuRXhwaXJlZChvYXV0aFRva2VuKSxcblx0XHRcdGlzUmVmcmVzaGFibGU6IGlzVG9rZW5SZWZyZXNoYWJsZShvYXV0aFRva2VuKVxuXHRcdH0pXG5cblx0XHRpZiAoIWlzVG9rZW5SZWZyZXNoYWJsZShvYXV0aFRva2VuKSkge1xuXHRcdFx0aWYgKGlzVG9rZW5FeHBpcmVkKG9hdXRoVG9rZW4pKSB7XG5cdFx0XHRcdGxvZ2dlci5kZWJ1ZygncmVmcmVzaExvb3AgYnJlYWs6IHRva2VuIGV4cGlyZWQgYW5kIG5vdCByZWZyZXNoYWJsZSwgdHJpZ2dlciBleHBpcmVkIGxvZyBvdXQnKVxuXHRcdFx0XHQvLyB1c2VyIGZhaWxlZCB0byByZXF1ZXN0IGFuIGV4dGVuc2lvbiBhbmQgdG9rZW4gaXMgZXhwaXJlZFxuXHRcdFx0XHR5aWVsZCBwdXQ8QXV0aExvZ091dEFjdGlvbj4oeyB0eXBlOiBBVVRIX0xPR19PVVRfQUNUSU9OX1RZUEUuTE9HX09VVCwgdG9rZW5FeHBpcmVkOiB0cnVlIH0pXG5cdFx0XHRcdC8vIGJyZWFrIGxvb3Bcblx0XHRcdFx0YnJlYWtcblx0XHRcdH1cblx0XHRcdGxvZ2dlci5kZWJ1ZygncmVmcmVzaExvb3AgYnJlYWs6IHRva2VuIG5vdCByZWZyZXNoYWJsZScpXG5cdFx0XHRicmVha1xuXHRcdH1cblxuXHRcdGNvbnN0IGV4cGlyZXNVdGMgPSBtb21lbnQudXRjKG9hdXRoVG9rZW5bJy5leHBpcmVzJ10pXG5cdFx0Y29uc3Qgbm93VXRjID0gbW9tZW50LnV0YyhnZXRTZXJ2ZXJOb3dVdGMoKS50b0lTT1N0cmluZygpKVxuXHRcdGNvbnN0IHRpbWVVbnRpbEV4cGlyZXMgPSBleHBpcmVzVXRjLmRpZmYobm93VXRjKVxuXHRcdGNvbnN0IGlzRXhwaXJpbmdTb29uID0gdGltZVVudGlsRXhwaXJlcyA8PSBhcHBDb25maWcuU0VTU0lPTl9SRUZSRVNIX1RIUkVTSE9MRFxuXG5cdFx0aWYgKCFpc0V4cGlyaW5nU29vbikge1xuXHRcdFx0Y29uc3QgZXhwaXJlc1Nvb25VdGMgPSBleHBpcmVzVXRjLnN1YnRyYWN0KGFwcENvbmZpZy5TRVNTSU9OX1JFRlJFU0hfVEhSRVNIT0xELCAnbWlsbGlzZWNvbmRzJylcblx0XHRcdC8vIHVzZSBhIG1heCBkZWxheSwgZS5nLiAxIG1pbiBmb3IgNjAgbWluIHRva2VuLCAxIHNlYyBmb3IgNjAgc2VjIHRva2VuXG5cdFx0XHQvLyB0byBoZWxwIHJlZHVjZSB0aW1lciBkcmlmdCB3aGVuIHRhYiBpcyBpbiB0aGUgYmFja2dyb3VuZFxuXHRcdFx0Y29uc3QgbWF4RGVsYXkgPSAob2F1dGhUb2tlbi5leHBpcmVzX2luICogMTAwMCkgLyA2MFxuXHRcdFx0Y29uc3QgZXhwaXJlc1Nvb25EZWxheSA9IE1hdGgubWluKG1heERlbGF5LCBleHBpcmVzU29vblV0Yy5kaWZmKG5vd1V0YykpXG5cdFx0XHRsb2dnZXIuZGVidWcoYHJlZnJlc2hMb29wIGRlbGF5OiB3YWl0IGZvciB0b2tlbiB0byBiZSBjbG9zZSB0byBleHBpcmF0aW9uLCBkZWxheWluZyAke2V4cGlyZXNTb29uRGVsYXl9IG1zYClcblx0XHRcdHlpZWxkIGRlbGF5KGV4cGlyZXNTb29uRGVsYXkpXG5cdFx0XHQvLyByZXN0YXJ0IGxvb3AgdG8gcmVjaGVjayB0b2tlblxuXHRcdFx0Y29uc3QgZWxhcHNlZCA9IG1vbWVudC51dGMoZ2V0U2VydmVyTm93VXRjKCkudG9JU09TdHJpbmcoKSkuZGlmZihub3dVdGMpXG5cdFx0XHRsb2dnZXIuZGVidWcoYHJlZnJlc2hMb29wIGRlbGF5OiBmaW5pc2hlZCBhZnRlciAke2VsYXBzZWR9IG1zYClcblx0XHRcdGNvbnRpbnVlXG5cdFx0fVxuXG5cdFx0bG9nZ2VyLmRlYnVnKCdyZWZyZXNoTG9vcCBleHBpcmluZyBzb29uJylcblxuXHRcdC8vIE5PVEU6IHVzZXIgY2FuIG5ldmVyIGJlIGlkbGUgb24gTE9DQUwsIHNvIGxvY2FsIHNlc3Npb25zIHdpbGwgc3RheSBhbGl2ZSBpbmRlZmluaXRlbHlcblx0XHRpZiAoIWlzVXNlcklkbGUoKSkge1xuXHRcdFx0bG9nZ2VyLmRlYnVnKCdyZWZyZXNoTG9vcCB1c2VyIG5vdCBpZGxlLCB0cmlnZ2VyIGF1dG8tcmVmcmVzaCcpXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IHJlZnJlc2ggdG9rZW4gdG8gZXh0ZW5kIHNlc3Npb24gaWYgdXNlciBpcyBub3QgaWRsZVxuXHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwocGVyZm9ybVRva2VuUmVmcmVzaCwgb2F1dGhUb2tlbilcblx0XHRcdGNvbnRpbnVlXG5cdFx0fVxuXG5cdFx0bG9nZ2VyLmRlYnVnKCdyZWZyZXNoTG9vcCB1c2VyIGlkbGUsIHRyaWdnZXIgZXhwaXJpbmcgc29vbicpXG5cblx0XHQvLyBpZiB1c2VyIGlzIGlkbGUgYW5kIHRva2VuIGlzIGV4cGlyaW5nIHNvb24sIHNlbmQgYWN0aW9uIHRvIGRpc3BsYXkgRXhwaXJpbmdTZXNzaW9uQWxlcnRcblx0XHR5aWVsZCBwdXQ8QXV0aEFjdGlvbj4oeyB0eXBlOiBBVVRIX0FDVElPTl9UWVBFLkVYUElSSU5HX1NPT04gfSlcblx0XHQvLyB3YWl0IGZvciB1c2VyIHRvIHRha2UgYW4gYWN0aW9uLCBvciBmb3IgdG9rZW4gdG8gZXhwaXJlXG5cdFx0Ly8gaWYgdXNlciBsb2dzIG91dCwgdGhlIHJvb3QgYGF1dGhTYWdhYCB3aWxsIGNhbmNlbCB0aGlzIGxvb3Bcblx0XHRjb25zdCB7IHRva2VuRXhwaXJlZCB9ID0geWllbGQgcmFjZSh7XG5cdFx0XHRleHRlbnNpb25SZXF1ZXN0ZWQ6IHRha2UoQVVUSF9BQ1RJT05fVFlQRS5FWFRFTlNJT05fUkVRVUVTVEVEKSxcblx0XHRcdHRva2VuRXhwaXJlZDogZGVsYXkodGltZVVudGlsRXhwaXJlcylcblx0XHR9KVxuXHRcdGlmICh0b2tlbkV4cGlyZWQpIHtcblx0XHRcdGxvZ2dlci5kZWJ1ZygncmVmcmVzaExvb3AgdG9rZW4gZXhwaXJlZCwgdHJpZ2dlciBleHBpcmVkIGxvZyBvdXQnKVxuXHRcdFx0Ly8gdXNlciBmYWlsZWQgdG8gcmVxdWVzdCBhbiBleHRlbnNpb24gYW5kIHRva2VuIGlzIGV4cGlyZWRcblx0XHRcdHlpZWxkIHB1dDxBdXRoTG9nT3V0QWN0aW9uPih7IHR5cGU6IEFVVEhfTE9HX09VVF9BQ1RJT05fVFlQRS5MT0dfT1VULCB0b2tlbkV4cGlyZWQ6IHRydWUgfSlcblx0XHRcdC8vIGJyZWFrIGxvb3Bcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0bG9nZ2VyLmRlYnVnKCdyZWZyZXNoTG9vcCB1c2VyIHRyaWdnZXIgcmVmcmVzaCcpXG5cblx0XHQvLyB1c2VyIHJlcXVlc3RlZCBleHRlbnNpb24sIHRyaWdnZXIgdG9rZW4gcmVmcmVzaFxuXHRcdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKHBlcmZvcm1Ub2tlblJlZnJlc2gsIG9hdXRoVG9rZW4pXG5cdH1cblxuXHRsb2dnZXIuZGVidWcoJ3JlZnJlc2hMb29wIGRvbmUnKVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiogYXV0aFNhZ2EoXG5cdGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2VQYXJhbTogQXV0aFBlcnNpc3RlbmNlU2VydmljZSxcblx0dGlja2V0UHJvdmlkZXJTZXJ2aWNlOiBUaWNrZXRQcm92aWRlclNlcnZpY2UsXG5cdGNvZGVQcm92aWRlclNlcnZpY2U6IENvZGVQcm92aWRlclNlcnZpY2UsXG5cdGVycm9ySGFuZGxlclBhcmFtOiBFcnJvckhhbmRsZXIgfCB1bmRlZmluZWQgPSBkZWZhdWx0RXJyb3JIYW5kbGVyXG4pOiBTYWdhSXRlcmF0b3Ige1xuXHRhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlID0gYXV0aFBlcnNpc3RlbmNlU2VydmljZVBhcmFtXG5cdGVycm9ySGFuZGxlciA9IGVycm9ySGFuZGxlclBhcmFtXG5cdGxvZ2dlciA9IGdldExvZ2dlcigpXG5cblx0Ly8gdHJ5IHRvIGdldCBwZXJzaXN0ZWQgdG9rZW4gKG5vcm1hbGx5IGluIEFzeW5jU3RvcmFnZSBvciBMb2NhbFN0b3JhZ2UpXG5cdGxldCBvYXV0aFRva2VuOiBPQXV0aFRva2VuUmVzcG9uc2UgPSB5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0UGVyc2lzdGVkVG9rZW4pXG5cblx0Ly8gaWYgdG9rZW4gaXMgZXhwaXJlZCwgdHJ5IHRvIHJlZnJlc2ggaXQgYmVmb3JlIGluaXRpYWxpemluZyBhdXRoXG5cdC8vIGlmIHVuYWJsZSB0byByZWZyZXNoLCBjbGVhciBkYXRhIGFuZCBpbml0IGF1dGggd2l0aCBubyB0b2tlblxuXHRpZiAoaXNUb2tlbkV4cGlyZWQob2F1dGhUb2tlbikpIHtcblx0XHRpZiAoaXNUb2tlblJlZnJlc2hhYmxlKG9hdXRoVG9rZW4pKSB7XG5cdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChwZXJmb3JtVG9rZW5SZWZyZXNoLCBvYXV0aFRva2VuKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb2dnZXIuZGVidWcoJ3Rva2VuIGV4cGlyZWQsIGNsZWFyIHBlcnNpc3RlZCB1c2VyIGRhdGEgYW5kIHRva2VuJylcblx0XHRcdG9hdXRoVG9rZW4gPSBudWxsXG5cdFx0XHQvLyBjbGVhciB0aGUgZXhwaXJlZCB0b2tlbiBhbmQgdXNlciBkYXRhIGZyb20gc3RvcmFnZVxuXHRcdFx0eWllbGQgY2FsbChyZXNldERhdGEpXG5cdFx0fVxuXHR9XG5cblx0Ly8gZ2V0IGF1dGggcGFyYW1ldGVyc1xuXHRjb25zdCBjYXNUaWNrZXQgPSB0aWNrZXRQcm92aWRlclNlcnZpY2UuZ2V0VGlja2V0KClcblx0Y29uc3Qgc2VydmljZSA9IHRpY2tldFByb3ZpZGVyU2VydmljZS5nZXRBcHBTZXJ2aWNlTmFtZSgpXG5cdGNvbnN0IGhhc0Nhc1RpY2tldCA9ICEhY2FzVGlja2V0ICYmICEhc2VydmljZVxuXG5cdGNvbnN0IGNvZGUgPSBjb2RlUHJvdmlkZXJTZXJ2aWNlLmdldENvZGUoKVxuXHRjb25zdCBzdGF0ZSA9IGNvZGVQcm92aWRlclNlcnZpY2UuZ2V0U3RhdGUoKVxuXG5cdC8vIGF1dG8tbG9naW4gLyBTU08gZm9yIFB1cmR1ZVxuXHRjb25zdCBwdXJkdWVJZGVudGl0eVByb3ZpZGVyID0geWllbGQgY2FsbChnZXRQdXJkdWVJZGVudGl0eVByb3ZpZGVyRnJvbUxvY2F0aW9uKVxuXHRpZiAocHVyZHVlSWRlbnRpdHlQcm92aWRlcikge1xuXHRcdGNvbnN0IGlzUHVyZHVlQXV0b0xvZ2luUmVxdWVzdGVkOiBib29sZWFuID0geWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldElzUHVyZHVlQXV0b0xvZ2luUmVxdWVzdGVkKVxuXG5cdFx0Ly8gc3RhcnQgYXV0by1sb2dpbiAvIFNTTywgaWYgbm90IGFscmVhZHkgcmVxdWVzdGVkLCBub3QgYXV0aGVudGljYXRlZCwgYW5kIGhhcyBubyB2YWxpZCBhdXRoIHBhcmFtZXRlcnNcblx0XHRpZiAoIWlzUHVyZHVlQXV0b0xvZ2luUmVxdWVzdGVkICYmICFvYXV0aFRva2VuICYmICFoYXNDYXNUaWNrZXQgJiYgIWNvZGUpIHtcblx0XHRcdHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0SXNQdXJkdWVBdXRvTG9naW5SZXF1ZXN0ZWQsIHRydWUpXG5cdFx0XHQvLyBzdG9yZSBwYXRobmFtZSBmb3IgcG9zdC1sb2dpbiByZWRpcmVjdCBpZiBub3QgYWxyZWFkeSBzZXRcblx0XHRcdC8vIGNvdWxkIGhhdmUgYmVlbiBzZXQgZnJvbSB1c2VyIGxvZ2dpbmcgb3V0LCBzZWUgYEF1dGhlbnRpY2F0ZWRDb21wb25lbnRgXG5cdFx0XHRjb25zdCByZXR1cm5VcmwgPSB5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0UmV0dXJuVXJsKVxuXHRcdFx0aWYgKCFyZXR1cm5VcmwpIHtcblx0XHRcdFx0eWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RSZXR1cm5VcmwsIHdpbmRvd1NlcnZpY2UuZ2V0TG9jYXRpb24oKS5wYXRobmFtZSlcblx0XHRcdH1cblx0XHRcdHlpZWxkIGNhbGwod2luZG93U2VydmljZS5yZXBsYWNlLCBwdXJkdWVJZGVudGl0eVByb3ZpZGVyLmxvZ2luVXJsKVxuXHRcdFx0cmV0dXJuXG5cdFx0fVxuXG5cdFx0Ly8gZmluaXNoIGF1dG8tbG9naW4gcHJvY2VzcywgaWYgaXQgd2FzIHJlcXVlc3RlZCBhbmQgaGFzIGEgdmFsaWQgYXV0aCBwYXJhbWV0ZXJcblx0XHRpZiAoaXNQdXJkdWVBdXRvTG9naW5SZXF1ZXN0ZWQgJiYgKGhhc0Nhc1RpY2tldCB8fCBjb2RlKSkge1xuXHRcdFx0eWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RJc1B1cmR1ZUF1dG9Mb2dpblJlcXVlc3RlZCwgZmFsc2UpXG5cdFx0XHQvLyBwZXJzaXN0IFB1cmR1ZSBpZGVudGl0eVByb3ZpZGVyIGZvciBgaWRlbnRpdHlQcm92aWRlclNhZ2FgIGxvZ291dCBsb2dpY1xuXHRcdFx0eWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RJZGVudGl0eVByb3ZpZGVyLCBwdXJkdWVJZGVudGl0eVByb3ZpZGVyKVxuXHRcdFx0Ly8gY29udGludWUgdG8gZXhjaGFuZ2luZyBDQVMgYHRpY2tldGAgb3IgYGNvZGVgIGZvciB0b2tlblxuXHRcdH1cblx0fVxuXG5cdC8vIGlmIENBUyB0aWNrZXQgZXhpc3RzIChub3JtYWxseSBpbiB0aGUgVVJMKSwgdXNlIGl0IHRvIGdldCBhIG5ldyB0b2tlblxuXHRpZiAoaGFzQ2FzVGlja2V0KSB7XG5cdFx0dGlja2V0UHJvdmlkZXJTZXJ2aWNlLnJlbW92ZVRpY2tldCgpXG5cblx0XHQvLyBjbGVhciB0aGUgY3VycmVudCB0b2tlbiBhbmQgdXNlciBkYXRhIGlmIGEgbmV3IHRva2VuIGlzIGFib3V0IHRvIGJlIGdlbmVyYXRlZFxuXHRcdGlmIChvYXV0aFRva2VuKSB7XG5cdFx0XHR5aWVsZCBjYWxsKHJlc2V0RGF0YSlcblx0XHRcdG9hdXRoVG9rZW4gPSBudWxsXG5cdFx0fVxuXHRcdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKGNhc1RpY2tldExvZ2luRmxvdywgY2FzVGlja2V0LCBzZXJ2aWNlKVxuXHRcdGlmIChvYXV0aFRva2VuKSB7XG5cdFx0XHR5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBvYXV0aFRva2VuKVxuXHRcdH1cblx0fVxuXG5cdC8vIGlmIE9BdXRoIENvZGUgZXhpc3RzIChub3JtYWxseSBpbiB0aGUgVVJMKSwgdXNlIGl0IHRvIGdldCBhIG5ldyB0b2tlblxuXHRpZiAoY29kZSkge1xuXHRcdGNvZGVQcm92aWRlclNlcnZpY2UucmVtb3ZlQ29kZUFuZFN0YXRlKClcblxuXHRcdC8vIGNsZWFyIHRoZSBjdXJyZW50IHRva2VuIGFuZCB1c2VyIGRhdGEgaWYgYSBuZXcgdG9rZW4gaXMgYWJvdXQgdG8gYmUgZ2VuZXJhdGVkXG5cdFx0aWYgKG9hdXRoVG9rZW4pIHtcblx0XHRcdHlpZWxkIGNhbGwocmVzZXREYXRhKVxuXHRcdFx0b2F1dGhUb2tlbiA9IG51bGxcblx0XHR9XG5cblx0XHQvLyBpZiBPQXV0aCBzdGF0ZSBleGlzdHMgKG5vcm1hbGx5IGluIHRoZSBVUkwpLCB1c2UgaXQgaW4gYWRkaXRpb24gdG8gdGhlIGNvZGUgZm9yIFBLQ0UgbG9naW4gZmxvd1xuXHRcdGlmIChzdGF0ZSkge1xuXHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tQ29kZUFuZFN0YXRlLCBjb2RlLCBzdGF0ZSlcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW5Gcm9tQ29kZSwgY29kZSlcblx0XHR9XG5cblx0XHRpZiAob2F1dGhUb2tlbikge1xuXHRcdFx0eWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RUb2tlbiwgb2F1dGhUb2tlbilcblx0XHR9XG5cdH1cblxuXHR5aWVsZCBwdXQ8QXV0aFRva2VuQWN0aW9uPih7IHR5cGU6IEFVVEhfVE9LRU5fQUNUSU9OX1RZUEUuQVVUSF9JTklUSUFMSVpFRCwgb2F1dGhUb2tlbiB9KVxuXG5cdHlpZWxkIHRha2VFdmVyeShNT0RFTF9GRVRDSF9FUlJPUl9BQ1RJT05fVFlQRS5UUllfRkVUQ0hfRkFJTEVELCBoYW5kbGVBdXRoRmFpbHVyZSlcblxuXHRkbyB7XG5cdFx0aWYgKCFvYXV0aFRva2VuKSB7XG5cdFx0XHRjb25zdCB7XG5cdFx0XHRcdGNhc1YxQWN0aW9uLFxuXHRcdFx0XHRsb2NhbExvZ2luQWN0aW9uLFxuXHRcdFx0XHRwa2NlTG9naW5BY3Rpb25cblx0XHRcdH06IHtcblx0XHRcdFx0Y2FzVjFBY3Rpb24/OiBBdXRoQ2FzVjFMb2dpblJlcXVlc3RBY3Rpb25cblx0XHRcdFx0bG9jYWxMb2dpbkFjdGlvbj86IEF1dGhMb2NhbExvZ2luUmVxdWVzdEFjdGlvblxuXHRcdFx0XHRwa2NlTG9naW5BY3Rpb24/OiBBdXRoUEtDRUxvZ2luUmVxdWVzdEFjdGlvblxuXHRcdFx0fSA9IHlpZWxkIHJhY2Uoe1xuXHRcdFx0XHRjYXNWMUFjdGlvbjogdGFrZShBVVRIX0NBU19WMV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLkNBU19WMV9MT0dJTl9SRVFVRVNUKSxcblx0XHRcdFx0bG9jYWxMb2dpbkFjdGlvbjogdGFrZShBVVRIX0xPQ0FMX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUuTE9DQUxfTE9HSU5fUkVRVUVTVCksXG5cdFx0XHRcdHBrY2VMb2dpbkFjdGlvbjogdGFrZShBVVRIX1BLQ0VfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRS5QS0NFX0xPR0lOX1JFUVVFU1QpXG5cdFx0XHR9KVxuXG5cdFx0XHR5aWVsZCBwdXQ8QXV0aEFjdGlvbj4oeyB0eXBlOiBBVVRIX0FDVElPTl9UWVBFLkxPR0lOX1JFUVVFU1RFRCB9KVxuXHRcdFx0aWYgKGNhc1YxQWN0aW9uKSB7XG5cdFx0XHRcdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKGNhc1YxTG9naW5GbG93LCBjYXNWMUFjdGlvbilcblx0XHRcdH0gZWxzZSBpZiAobG9jYWxMb2dpbkFjdGlvbikge1xuXHRcdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChsb2NhbExvZ2luRmxvdywgbG9jYWxMb2dpbkFjdGlvbilcblx0XHRcdH0gZWxzZSBpZiAocGtjZUxvZ2luQWN0aW9uKSB7XG5cdFx0XHRcdC8vIG9hdXRoVG9rZW4gaXMgbm90IHJldHVybmVkIGhlcmUsIGFzIHRoaXMgZmxvdyB3aWxsIHJlc3VsdCBpbiBhIHdpbmRvdyByZWRpcmVjdFxuXHRcdFx0XHR5aWVsZCBjYWxsKHBrY2VMb2dpbkZsb3csIHBrY2VMb2dpbkFjdGlvbilcblx0XHRcdFx0Ly8gYnJlYWsgZXhlY3V0aW9uXG5cdFx0XHRcdHJldHVyblxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChvYXV0aFRva2VuKSB7XG5cdFx0XHR5aWVsZCBhbGwoe1xuXHRcdFx0XHRwZXJzaXN0VG9rZW46IGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0VG9rZW4sIG9hdXRoVG9rZW4pLFxuXHRcdFx0XHRsb2dpblN1Y2Nlc3M6IHB1dDxBdXRoVG9rZW5TdWNjZXNzQWN0aW9uPih7XG5cdFx0XHRcdFx0dHlwZTogQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLkdFVF9UT0tFTl9TVUNDRUVERUQsXG5cdFx0XHRcdFx0b2F1dGhUb2tlblxuXHRcdFx0XHR9KVxuXHRcdFx0fSlcblxuXHRcdFx0Ly8gc3RhcnQgbm9uLWJsb2NraW5nIHJlZnJlc2ggbG9vcFxuXHRcdFx0Y29uc3QgcmVmcmVzaExvb3BUYXNrOiBUYXNrID0geWllbGQgZm9yayhyZWZyZXNoTG9vcClcblxuXHRcdFx0Ly8gaWYgdXNlciBsb2dzIG91dCBvciB0b2tlbiBleHBpcmVzLCBjYW5jZWwgdGhlIHJlZnJlc2ggbG9vcFxuXHRcdFx0eWllbGQgdGFrZShBVVRIX0xPR19PVVRfQUNUSU9OX1RZUEUuTE9HX09VVClcblx0XHRcdHlpZWxkIGNhbmNlbChyZWZyZXNoTG9vcFRhc2spXG5cdFx0fSBlbHNlIHtcblx0XHRcdHlpZWxkIHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuTE9HSU5fRkFJTEVEIH0pXG5cdFx0fVxuXG5cdFx0eWllbGQgY2FsbChyZXNldERhdGEpXG5cdFx0b2F1dGhUb2tlbiA9IG51bGxcblx0fSB3aGlsZSAodHJ1ZSlcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsSUFBQUEsZUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsS0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksY0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBVUEsSUFBQU0sS0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sS0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsTUFBQSxHQUFBUixPQUFBO0FBQ0EsSUFBQVMsT0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsSUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsYUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksUUFBQSxHQUFBWixPQUFBO0FBMEJBOztBQUVPLE1BQU1hLHlCQUF5QixHQUFHQSxDQUFDQyxNQUFpQixFQUFFQyxTQUFpQixLQUM3RSxJQUFBQywwQ0FBaUMsRUFBQ0YsTUFBTSxDQUFDLElBQUlBLE1BQU0sQ0FBQ0csU0FBUyxLQUFLRixTQUFTO0FBQUFHLE9BQUEsQ0FBQUwseUJBQUEsR0FBQUEseUJBQUE7QUFFckUsTUFBTU0sNkJBQTZCLEdBQUlKLFNBQWlCLElBQU1LLGNBQXlCLElBQzdGUCx5QkFBeUIsQ0FBQ08sY0FBYyxFQUFFTCxTQUFTLENBQUM7QUFBQUcsT0FBQSxDQUFBQyw2QkFB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
|
|
604
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50VGltZXpvbmUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9lZmZlY3RzIiwiX3V1aWQiLCJfY29uc3RhbnRzIiwiX3dpbmRvd1NlcnZpY2UiLCJfdHlwZXMiLCJfYXV0aCIsIl9kYXRlIiwiX2Vycm9yIiwiX2xvZ2dlciIsIl91cmwiLCJfdXNlckFjdGl2aXR5IiwiX2FjdGlvbnMiLCJtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiYWN0aW9uIiwibW9kZWxOYW1lIiwiaXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwibW9kZWxQYXRoIiwiZXhwb3J0cyIsInRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkIiwiaW5jb21pbmdBY3Rpb24iLCJtYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCIsImlzVHJhbnNpZW50TW9kZWxGZXRjaEVycm9yQWN0aW9uIiwidGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkIiwiZGVmYXVsdEVycm9ySGFuZGxlciIsImF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UiLCJlcnJvckhhbmRsZXIiLCJsb2dnZXIiLCJnZXRUb2tlbkZyb21Db2RlIiwiY29kZSIsImFwcENvbmZpZyIsImdldEFwcENvbmZpZyIsIkNMSUVOVF9JRCIsIkNMSUVOVF9TRUNSRVQiLCJFcnJvciIsImdldFRva2VuTW9kZWxOYW1lIiwiZm9ybUJvZHkiLCJVUkxTZWFyY2hQYXJhbXMiLCJncmFudF90eXBlIiwiY2xpZW50X2lkIiwiY2xpZW50X3NlY3JldCIsInB1dCIsInR5cGUiLCJNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFIiwiRkVUQ0hfUkVRVUVTVCIsImJvZHkiLCJ0b1N0cmluZyIsIm5vU3RvcmUiLCJmZXRjaFJlc3VsdEFjdGlvbiIsImZldGNoRXJyb3JBY3Rpb24iLCJyYWNlIiwidGFrZSIsImRhdGEiLCJnZXRUb2tlbkZyb21Db2RlQW5kU3RhdGUiLCJzdGF0ZSIsIk9BVVRIX1BLQ0VfU0NPUEUiLCJPQVVUSF9QS0NFX0VORFBPSU5UIiwiY29kZVZlcmlmaWVyIiwiY2FsbCIsImdldFBlcnNpc3RlZENvZGVWZXJpZmllciIsInBlcnNpc3RlZFN0YXRlIiwiZ2V0UGVyc2lzdGVkU3RhdGUiLCJwZXJzaXN0U3RhdGUiLCJwZXJzaXN0Q29kZVZlcmlmaWVyIiwibG9jYXRpb24iLCJ3aW5kb3dTZXJ2aWNlIiwiZ2V0TG9jYXRpb24iLCJzY29wZSIsImNvZGVfdmVyaWZpZXIiLCJyZWRpcmVjdF91cmkiLCJvcmlnaW4iLCJnZXRUb2tlbkZyb21SZWZyZXNoVG9rZW4iLCJvYXV0aFRva2VuUGFyYW0iLCJyZWZyZXNoX3Rva2VuIiwiYXBwZW5kIiwiZXJyb3JEYXRhIiwic3RhdHVzIiwiSFRUUF9TVEFUVVNfQ09ERSIsIklOVEVSTkFMX1NFUlZFUl9FUlJPUiIsImlzRXhwaXJpbmdTb29uQWxlcnRWaXNpYmxlIiwicmVmcmVzaExvY2siLCJwcmV2aW91c1JlZnJlc2hUb2tlbiIsInJlc2V0UmVmcmVzaCIsInVuZGVmaW5lZCIsInBlcmZvcm1Ub2tlblJlZnJlc2giLCJvYXV0aFRva2VuIiwicmVmcmVzaFN1Y2Nlc3MiLCJBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUiLCJUT0tFTl9SRUZSRVNIX1NVQ0NFRURFRCIsInJlZnJlc2hGYWlsZWQiLCJBVVRIX0FDVElPTl9UWVBFIiwiVE9LRU5fUkVGUkVTSF9GQUlMRUQiLCJnZXRQZXJzaXN0ZWRUb2tlbiIsImRlYnVnIiwib3JpZ2luYWxBY2Nlc3NUb2tlbiIsImFjY2Vzc190b2tlbiIsInJldHJ5RGVsYXkiLCJkZWxheSIsIm9hdXRoVG9rZW5SZXNwb25zZSIsInBlcnNpc3RUb2tlbiIsImFsbCIsImxvZ091dCIsIkFVVEhfTE9HX09VVF9BQ1RJT05fVFlQRSIsIkxPR19PVVQiLCJ0b2tlbkV4cGlyZWQiLCJjYXVnaHRFcnJvciIsImVycm9yIiwiY29uc3RydWN0RXJyb3JGcm9tQ2F1Z2h0RXJyb3IiLCJsb2dpbkZsb3ciLCJtb2RlbEZldGNoUmVxdWVzdEFjdGlvbiIsImNyZWRlbnRpYWxzTG9naW5GbG93Iiwibm9SZXRyeSIsImNhc1YxTG9naW5GbG93IiwibG9jYWxMb2dpbkZsb3ciLCJjYXNUaWNrZXRMb2dpbkZsb3ciLCJ0aWNrZXQiLCJzZXJ2aWNlIiwicXVlcnlQYXJhbXMiLCJwa2NlTG9naW5GbG93IiwiXyIsInV1aWR2NCIsInNoYTI1NkNvZGVWZXJpZmllciIsInNoYTI1NkFzeW5jIiwiY29kZUNoYWxsZW5nZSIsImJhc2U2NFVybEVuY29kZSIsInBrY2VBdXRoUmVkaXJlY3RVUkwiLCJyZXNwb25zZV90eXBlIiwiY29kZV9jaGFsbGVuZ2UiLCJjb2RlX2NoYWxsZW5nZV9tZXRob2QiLCJyZXBsYWNlIiwiaGFuZGxlQXV0aEZhaWx1cmUiLCJVTkFVVEhPUklaRUQiLCJpc1Rva2VuRXhwaXJlZCIsImlzVG9rZW5SZWZyZXNoYWJsZSIsImlzVXNlcklkbGUiLCJnZXRPQXV0aFRva2VuIiwiZXhwaXJlc1V0YyIsIm1vbWVudCIsInV0YyIsIm5vd1V0YyIsImdldFNlcnZlck5vd1V0YyIsInRvSVNPU3RyaW5nIiwiaXNFeHBpcmluZ1Nvb24iLCJkaWZmIiwiU0VTU0lPTl9SRUZSRVNIX1RIUkVTSE9MRCIsInJlc2V0RGF0YSIsImNsZWFyVXNlckRhdGEiLCJNT0RFTF9SRU1PVkVfS0VZX0FDVElPTl9UWVBFIiwiY2xlYXJQZXJzaXN0ZW50VG9rZW4iLCJyZWZyZXNoTG9vcCIsImlzRXhwaXJlZCIsImlzUmVmcmVzaGFibGUiLCJ0aW1lVW50aWxFeHBpcmVzIiwiZXhwaXJlc1Nvb25VdGMiLCJzdWJ0cmFjdCIsIm1heERlbGF5IiwiZXhwaXJlc19pbiIsImV4cGlyZXNTb29uRGVsYXkiLCJNYXRoIiwibWluIiwiZWxhcHNlZCIsIkVYUElSSU5HX1NPT04iLCJleHRlbnNpb25SZXF1ZXN0ZWQiLCJFWFRFTlNJT05fUkVRVUVTVEVEIiwiYXV0aFNhZ2EiLCJhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlUGFyYW0iLCJ0aWNrZXRQcm92aWRlclNlcnZpY2UiLCJjb2RlUHJvdmlkZXJTZXJ2aWNlIiwiZXJyb3JIYW5kbGVyUGFyYW0iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJnZXRMb2dnZXIiLCJjYXNUaWNrZXQiLCJnZXRUaWNrZXQiLCJnZXRBcHBTZXJ2aWNlTmFtZSIsImhhc0Nhc1RpY2tldCIsImdldENvZGUiLCJnZXRTdGF0ZSIsInB1cmR1ZUlkZW50aXR5UHJvdmlkZXIiLCJnZXRQdXJkdWVJZGVudGl0eVByb3ZpZGVyRnJvbUxvY2F0aW9uIiwiaXNQdXJkdWVBdXRvTG9naW5SZXF1ZXN0ZWQiLCJnZXRJc1B1cmR1ZUF1dG9Mb2dpblJlcXVlc3RlZCIsInBlcnNpc3RJc1B1cmR1ZUF1dG9Mb2dpblJlcXVlc3RlZCIsInJldHVyblVybCIsImdldFJldHVyblVybCIsInBlcnNpc3RSZXR1cm5VcmwiLCJwYXRobmFtZSIsImxvZ2luVXJsIiwicGVyc2lzdElkZW50aXR5UHJvdmlkZXIiLCJyZW1vdmVUaWNrZXQiLCJyZW1vdmVDb2RlQW5kU3RhdGUiLCJBVVRIX1RPS0VOX0FDVElPTl9UWVBFIiwiQVVUSF9JTklUSUFMSVpFRCIsInRha2VFdmVyeSIsIk1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFIiwiVFJZX0ZFVENIX0ZBSUxFRCIsImNhc1YxQWN0aW9uIiwibG9jYWxMb2dpbkFjdGlvbiIsInBrY2VMb2dpbkFjdGlvbiIsIkFVVEhfQ0FTX1YxX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUiLCJDQVNfVjFfTE9HSU5fUkVRVUVTVCIsIkFVVEhfTE9DQUxfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSIsIkxPQ0FMX0xPR0lOX1JFUVVFU1QiLCJBVVRIX1BLQ0VfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSIsIlBLQ0VfTE9HSU5fUkVRVUVTVCIsIkxPR0lOX1JFUVVFU1RFRCIsImxvZ2luU3VjY2VzcyIsIkdFVF9UT0tFTl9TVUNDRUVERUQiLCJyZWZyZXNoTG9vcFRhc2siLCJmb3JrIiwiY2FuY2VsIiwiTE9HSU5fRkFJTEVEIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZHV4L3NhZ2FzL2F1dGhTYWdhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhZ2FJdGVyYXRvciwgVGFzayB9IGZyb20gJ0ByZWR1eC1zYWdhL2NvcmUnXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSdcbmltcG9ydCB7IEFueUFjdGlvbiB9IGZyb20gJ3JlZHV4J1xuaW1wb3J0IHsgYWxsLCBjYWxsLCBjYW5jZWwsIGRlbGF5LCBmb3JrLCBwdXQsIHJhY2UsIHRha2UsIHRha2VFdmVyeSB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cydcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyBnZXRBcHBDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnXG5pbXBvcnQgeyB3aW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2luZG93U2VydmljZSdcbmltcG9ydCB7XG5cdEF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UsXG5cdENvZGVQcm92aWRlclNlcnZpY2UsXG5cdEVycm9ySGFuZGxlcixcblx0SFRUUF9TVEFUVVNfQ09ERSxcblx0T0F1dGhUb2tlbixcblx0T0F1dGhUb2tlblJlc3BvbnNlLFxuXHRUaWNrZXRQcm92aWRlclNlcnZpY2UsXG5cdFRva2VuQWNjZXNzRnVuY3Rpb25cbn0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXRQdXJkdWVJZGVudGl0eVByb3ZpZGVyRnJvbUxvY2F0aW9uLCBpc1Rva2VuRXhwaXJlZCwgaXNUb2tlblJlZnJlc2hhYmxlIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXV0aCdcbmltcG9ydCB7IGdldFNlcnZlck5vd1V0YyB9IGZyb20gJy4uLy4uL3V0aWxzL2RhdGUnXG5pbXBvcnQgeyBjb25zdHJ1Y3RFcnJvckZyb21DYXVnaHRFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL2Vycm9yJ1xuaW1wb3J0IHsgZ2V0TG9nZ2VyLCBMb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXInXG5pbXBvcnQgeyBiYXNlNjRVcmxFbmNvZGUsIHNoYTI1NkFzeW5jIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXJsJ1xuaW1wb3J0IHsgaXNVc2VySWRsZSB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZXJBY3Rpdml0eSdcbmltcG9ydCB7XG5cdEFVVEhfQUNUSU9OX1RZUEUsXG5cdEFVVEhfQ0FTX1YxX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdEFVVEhfTE9DQUxfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSxcblx0QVVUSF9MT0dfT1VUX0FDVElPTl9UWVBFLFxuXHRBVVRIX1BLQ0VfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRSxcblx0QVVUSF9UT0tFTl9BQ1RJT05fVFlQRSxcblx0QVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLFxuXHRBdXRoQWN0aW9uLFxuXHRBdXRoQ2FzVjFMb2dpblJlcXVlc3RBY3Rpb24sXG5cdEF1dGhMb2NhbExvZ2luUmVxdWVzdEFjdGlvbixcblx0QXV0aExvZ091dEFjdGlvbixcblx0QXV0aFBLQ0VMb2dpblJlcXVlc3RBY3Rpb24sXG5cdEF1dGhUb2tlbkFjdGlvbixcblx0QXV0aFRva2VuU3VjY2Vzc0FjdGlvbixcblx0aXNUcmFuc2llbnRNb2RlbEZldGNoRXJyb3JBY3Rpb24sXG5cdGlzVHJhbnNpZW50TW9kZWxGZXRjaFJlc3VsdEFjdGlvbixcblx0TU9ERUxfRkVUQ0hfRVJST1JfQUNUSU9OX1RZUEUsXG5cdE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdE1PREVMX1JFTU9WRV9LRVlfQUNUSU9OX1RZUEUsXG5cdE1vZGVsRmV0Y2hFcnJvckFjdGlvbixcblx0TW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24sXG5cdE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb24sXG5cdE1vZGVsUmVtb3ZlS2V5QWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMnXG5cbi8vI3JlZ2lvbiBIZWxwZXJzXG5cbmV4cG9ydCBjb25zdCBtYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkID0gKGFjdGlvbjogQW55QWN0aW9uLCBtb2RlbE5hbWU6IHN0cmluZykgPT5cblx0aXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gbW9kZWxOYW1lXG5cbmV4cG9ydCBjb25zdCB0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZCA9IChtb2RlbE5hbWU6IHN0cmluZykgPT4gKGluY29taW5nQWN0aW9uOiBBbnlBY3Rpb24pID0+XG5cdG1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQoaW5jb21pbmdBY3Rpb24sIG1vZGVsTmFtZSlcblxuZXhwb3J0IGNvbnN0IG1hdGNoZXNNb2RlbEZldGNoRmFpbGVkID0gKGFjdGlvbjogQW55QWN0aW9uLCBtb2RlbE5hbWU6IHN0cmluZykgPT5cblx0aXNUcmFuc2llbnRNb2RlbEZldGNoRXJyb3JBY3Rpb24oYWN0aW9uKSAmJiBhY3Rpb24ubW9kZWxQYXRoID09PSBtb2RlbE5hbWVcblxuZXhwb3J0IGNvbnN0IHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZCA9IChtb2RlbE5hbWU6IHN0cmluZykgPT4gKGluY29taW5nQWN0aW9uOiBBbnlBY3Rpb24pID0+XG5cdG1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKGluY29taW5nQWN0aW9uLCBtb2RlbE5hbWUpXG5cbi8vI2VuZHJlZ2lvbiBIZWxwZXJzXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgZGVmYXVsdEVycm9ySGFuZGxlcjogRXJyb3JIYW5kbGVyID0gKCkgPT4ge1xuXHRyZXR1cm5cbn1cblxubGV0IGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2U6IEF1dGhQZXJzaXN0ZW5jZVNlcnZpY2VcbmxldCBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclxubGV0IGxvZ2dlcjogTG9nZ2VyXG5cbmV4cG9ydCBmdW5jdGlvbiogZ2V0VG9rZW5Gcm9tQ29kZShjb2RlOiBzdHJpbmcpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxuXHRpZiAoIWFwcENvbmZpZy5DTElFTlRfSUQgfHwgIWFwcENvbmZpZy5DTElFTlRfU0VDUkVUKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdDTElFTlRfSUQgYW5kIENMSUVOVF9TRUNSRVQgYXJlIHJlcXVpcmVkIGluIEFwcENvbmZpZycpXG5cdH1cblx0Y29uc3QgZ2V0VG9rZW5Nb2RlbE5hbWUgPSAnZ2V0VG9rZW4nXG5cdGNvbnN0IGZvcm1Cb2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG5cdFx0Z3JhbnRfdHlwZTogJ2F1dGhvcml6YXRpb25fY29kZScsXG5cdFx0Y2xpZW50X2lkOiBhcHBDb25maWcuQ0xJRU5UX0lELFxuXHRcdGNsaWVudF9zZWNyZXQ6IGFwcENvbmZpZy5DTElFTlRfU0VDUkVULFxuXHRcdGNvZGU6IGNvZGVcblx0fSlcblx0eWllbGQgcHV0PE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uPih7XG5cdFx0dHlwZTogTU9ERUxfRkVUQ0hfUkVRVUVTVF9BQ1RJT05fVFlQRS5GRVRDSF9SRVFVRVNULFxuXHRcdG1vZGVsTmFtZTogZ2V0VG9rZW5Nb2RlbE5hbWUsXG5cdFx0Ym9keTogZm9ybUJvZHkudG9TdHJpbmcoKSxcblx0XHRub1N0b3JlOiB0cnVlXG5cdH0pXG5cdGNvbnN0IHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbixcblx0XHRmZXRjaEVycm9yQWN0aW9uXG5cdH06IHsgZmV0Y2hSZXN1bHRBY3Rpb24/OiBNb2RlbEZldGNoUmVzdWx0QWN0aW9uOyBmZXRjaEVycm9yQWN0aW9uPzogTW9kZWxGZXRjaEVycm9yQWN0aW9uIH0gPSB5aWVsZCByYWNlKHtcblx0XHRmZXRjaFJlc3VsdEFjdGlvbjogdGFrZSh0YWtlTWF0Y2hlc01vZGVsRmV0Y2hSZWNlaXZlZChnZXRUb2tlbk1vZGVsTmFtZSkpLFxuXHRcdGZldGNoRXJyb3JBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKGdldFRva2VuTW9kZWxOYW1lKSlcblx0fSlcblx0aWYgKGZldGNoRXJyb3JBY3Rpb24gfHwgIWZldGNoUmVzdWx0QWN0aW9uPy5kYXRhKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRyZXR1cm4gZmV0Y2hSZXN1bHRBY3Rpb24uZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGdldFRva2VuRnJvbUNvZGVBbmRTdGF0ZShjb2RlOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpOiBTYWdhSXRlcmF0b3Ige1xuXHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxuXHRpZiAoIWFwcENvbmZpZy5DTElFTlRfSUQgfHwgIWFwcENvbmZpZy5PQVVUSF9QS0NFX1NDT1BFIHx8ICFhcHBDb25maWcuT0FVVEhfUEtDRV9FTkRQT0lOVCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignQ0xJRU5UX0lELCBPQVVUSF9QS0NFX1NDT1BFLCBhbmQgT0FVVEhfUEtDRV9FTkRQT0lOVCBhcmUgcmVxdWlyZWQgaW4gQXBwQ29uZmlnJylcblx0fVxuXG5cdC8vIHZhbGlkYXRlIHBlcnNpc3RlZCB2YWx1ZXNcblx0Y29uc3QgY29kZVZlcmlmaWVyID0geWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZENvZGVWZXJpZmllcilcblx0aWYgKCFjb2RlVmVyaWZpZXIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgY29kZV92ZXJpZmllcicpXG5cdH1cblx0Y29uc3QgcGVyc2lzdGVkU3RhdGUgPSB5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0UGVyc2lzdGVkU3RhdGUpXG5cdGlmIChwZXJzaXN0ZWRTdGF0ZSAhPT0gc3RhdGUpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgc3RhdGUnKVxuXHR9XG5cdC8vIGNsZWFyIHBlcnNpc3RlZCB2YWx1ZXNcblx0eWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RTdGF0ZSwgbnVsbClcblx0eWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RDb2RlVmVyaWZpZXIsIG51bGwpXG5cblx0Ly8gZGlzcGF0Y2ggcmVxdWVzdFxuXHRjb25zdCBnZXRUb2tlbk1vZGVsTmFtZSA9ICdnZXRUb2tlbidcblx0Y29uc3QgbG9jYXRpb24gPSB3aW5kb3dTZXJ2aWNlLmdldExvY2F0aW9uKClcblx0Y29uc3QgZm9ybUJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcblx0XHRncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcblx0XHRjbGllbnRfaWQ6IGFwcENvbmZpZy5DTElFTlRfSUQsXG5cdFx0c2NvcGU6IGFwcENvbmZpZy5PQVVUSF9QS0NFX1NDT1BFLFxuXHRcdGNvZGVfdmVyaWZpZXI6IGNvZGVWZXJpZmllcixcblx0XHRyZWRpcmVjdF91cmk6IGxvY2F0aW9uLm9yaWdpbixcblx0XHRjb2RlOiBjb2RlXG5cdH0pXG5cdHlpZWxkIHB1dDxNb2RlbEZldGNoUmVxdWVzdEFjdGlvbj4oe1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWU6IGdldFRva2VuTW9kZWxOYW1lLFxuXHRcdGJvZHk6IGZvcm1Cb2R5LnRvU3RyaW5nKCksXG5cdFx0bm9TdG9yZTogdHJ1ZVxuXHR9KVxuXHRjb25zdCB7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb24sXG5cdFx0ZmV0Y2hFcnJvckFjdGlvblxuXHR9OiB7IGZldGNoUmVzdWx0QWN0aW9uPzogTW9kZWxGZXRjaFJlc3VsdEFjdGlvbjsgZmV0Y2hFcnJvckFjdGlvbj86IE1vZGVsRmV0Y2hFcnJvckFjdGlvbiB9ID0geWllbGQgcmFjZSh7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKSxcblx0XHRmZXRjaEVycm9yQWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZChnZXRUb2tlbk1vZGVsTmFtZSkpXG5cdH0pXG5cdGlmIChmZXRjaEVycm9yQWN0aW9uIHx8ICFmZXRjaFJlc3VsdEFjdGlvbj8uZGF0YSkge1xuXHRcdHJldHVybiBudWxsXG5cdH1cblx0cmV0dXJuIGZldGNoUmVzdWx0QWN0aW9uLmRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBnZXRUb2tlbkZyb21SZWZyZXNoVG9rZW4ob2F1dGhUb2tlblBhcmFtOiBPQXV0aFRva2VuKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0aWYgKCFhcHBDb25maWcuQ0xJRU5UX0lEKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdDTElFTlRfSUQgaXMgcmVxdWlyZWQgaW4gQXBwQ29uZmlnJylcblx0fVxuXHRpZiAoIW9hdXRoVG9rZW5QYXJhbS5yZWZyZXNoX3Rva2VuKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGByZWZyZXNoX3Rva2VuIGlzIHJlcXVpcmVkYClcblx0fVxuXG5cdGNvbnN0IGdldFRva2VuTW9kZWxOYW1lID0gJ2dldFRva2VuJ1xuXHRjb25zdCBmb3JtQm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuXHRcdGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcblx0XHRjbGllbnRfaWQ6IGFwcENvbmZpZy5DTElFTlRfSUQsXG5cdFx0cmVmcmVzaF90b2tlbjogb2F1dGhUb2tlblBhcmFtLnJlZnJlc2hfdG9rZW5cblx0fSlcblx0Ly8gY3JlYXRlIHRoZSBmb3JtIGJvZHkgYmFzZWQgb24gaWYgdXNpbmcgYSBjbGllbnRfc2VjcmV0OiB0cmFkaXRpb25hbCBPQXV0aCB2cy4gUEtDRSBmbG93XG5cdGlmIChhcHBDb25maWcuQ0xJRU5UX1NFQ1JFVCkge1xuXHRcdGZvcm1Cb2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGFwcENvbmZpZy5DTElFTlRfU0VDUkVUKVxuXHR9XG5cdHlpZWxkIHB1dDxNb2RlbEZldGNoUmVxdWVzdEFjdGlvbj4oe1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWU6IGdldFRva2VuTW9kZWxOYW1lLFxuXHRcdGJvZHk6IGZvcm1Cb2R5LnRvU3RyaW5nKCksXG5cdFx0bm9TdG9yZTogdHJ1ZVxuXHR9KVxuXHRjb25zdCB7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb24sXG5cdFx0ZmV0Y2hFcnJvckFjdGlvblxuXHR9OiB7IGZldGNoUmVzdWx0QWN0aW9uPzogTW9kZWxGZXRjaFJlc3VsdEFjdGlvbjsgZmV0Y2hFcnJvckFjdGlvbj86IE1vZGVsRmV0Y2hFcnJvckFjdGlvbiB9ID0geWllbGQgcmFjZSh7XG5cdFx0ZmV0Y2hSZXN1bHRBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoUmVjZWl2ZWQoZ2V0VG9rZW5Nb2RlbE5hbWUpKSxcblx0XHRmZXRjaEVycm9yQWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaEZhaWxlZChnZXRUb2tlbk1vZGVsTmFtZSkpXG5cdH0pXG5cdC8vIGFueSBlcnJvciByZXNwb25zZVxuXHRpZiAoZmV0Y2hFcnJvckFjdGlvbikge1xuXHRcdC8vIGlnbm9yZSBzZXJ2ZXIgZXJyb3JzXG5cdFx0aWYgKFxuXHRcdFx0ZmV0Y2hFcnJvckFjdGlvbi5lcnJvckRhdGE/LnN0YXR1cyAmJlxuXHRcdFx0ZmV0Y2hFcnJvckFjdGlvbi5lcnJvckRhdGEuc3RhdHVzID49IEhUVFBfU1RBVFVTX0NPREUuSU5URVJOQUxfU0VSVkVSX0VSUk9SXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gb2F1dGhUb2tlblBhcmFtXG5cdFx0fVxuXHRcdHJldHVybiBudWxsXG5cdH1cblx0Ly8gZm9yIHNvbWUgcmVhc29uIHRoZSByZXNwb25zZSBoYWQgbm8gYm9keVxuXHRpZiAoIWZldGNoUmVzdWx0QWN0aW9uPy5kYXRhKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRyZXR1cm4gZmV0Y2hSZXN1bHRBY3Rpb24uZGF0YVxufVxuXG5sZXQgaXNFeHBpcmluZ1Nvb25BbGVydFZpc2libGU6IGJvb2xlYW5cbmxldCByZWZyZXNoTG9jazogYm9vbGVhblxubGV0IHByZXZpb3VzUmVmcmVzaFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0UmVmcmVzaCgpIHtcblx0aXNFeHBpcmluZ1Nvb25BbGVydFZpc2libGUgPSBmYWxzZVxuXHRyZWZyZXNoTG9jayA9IGZhbHNlXG5cdHByZXZpb3VzUmVmcmVzaFRva2VuID0gdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogcGVyZm9ybVRva2VuUmVmcmVzaChvYXV0aFRva2VuOiBPQXV0aFRva2VuKTogU2FnYUl0ZXJhdG9yIHtcblx0aWYgKHJlZnJlc2hMb2NrKSB7XG5cdFx0Ly8gYWxyZWFkeSByZWZyZXNoaW5nLCB3YWl0IGZvciB0aGUgY3VycmVudCByZWZyZXNoIHRvIHN1Y2NlZWQgb3IgZmFpbFxuXHRcdHlpZWxkIHJhY2Uoe1xuXHRcdFx0cmVmcmVzaFN1Y2Nlc3M6IHRha2UoQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFLlRPS0VOX1JFRlJFU0hfU1VDQ0VFREVEKSxcblx0XHRcdHJlZnJlc2hGYWlsZWQ6IHRha2UoQVVUSF9BQ1RJT05fVFlQRS5UT0tFTl9SRUZSRVNIX0ZBSUxFRClcblx0XHR9KVxuXHRcdC8vIHJldHVybiB0aGUgY3VycmVudCBwZXJzaXN0ZWQgdG9rZW5cblx0XHRyZXR1cm4geWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFRva2VuKVxuXHR9XG5cdGxvZ2dlci5kZWJ1ZygnT0F1dGggdG9rZW4gcmVmcmVzaGluZy4uLicpXG5cdHJlZnJlc2hMb2NrID0gdHJ1ZVxuXHR0cnkge1xuXHRcdC8vIG9hdXRoVG9rZW4gd2lsbCBiZSBzZXQgdG86XG5cdFx0Ly8gMS4gbmV3IHRva2VuIChzdWNjZXNzKVxuXHRcdC8vIDIuIHNhbWUgdG9rZW4gKGZhaWxlZCBmcm9tIHRpbWVvdXQgb3Igc2VydmVyIGVycm9yKVxuXHRcdC8vIDMuIG51bGwgKGZhaWwpXG5cdFx0Y29uc3Qgb3JpZ2luYWxBY2Nlc3NUb2tlbiA9IG9hdXRoVG9rZW4uYWNjZXNzX3Rva2VuXG5cdFx0Ly8gaWYgdXNpbmcgdGhlIHNhbWUgcmVmcmVzaF90b2tlbiwgdGhlIHByZXZpb3VzIHJlZnJlc2ggZGlkIG5vdCBzdWNjZWVkIChlLmcuIHNlcnZlciBlcnJvciBvciB0aW1lb3V0KVxuXHRcdC8vIGJhY2sgb2ZmIGJlZm9yZSByZXRyeWluZyBzbyB3ZSBkb24ndCBoYW1tZXIgdGhlIHNlcnZlciB3aGlsZSBpdCBpcyB1bmF2YWlsYWJsZVxuXHRcdGlmIChvYXV0aFRva2VuLnJlZnJlc2hfdG9rZW4gPT09IHByZXZpb3VzUmVmcmVzaFRva2VuKSB7XG5cdFx0XHRjb25zdCByZXRyeURlbGF5ID0gNTAwMFxuXHRcdFx0bG9nZ2VyLmRlYnVnKGBPQXV0aCB0b2tlbiByZWZyZXNoaW5nIHdpdGggc2FtZSB0b2tlbiwgYmFja2luZyBvZmYgJHtyZXRyeURlbGF5fSBtc2ApXG5cdFx0XHR5aWVsZCBkZWxheShyZXRyeURlbGF5KVxuXHRcdH1cblx0XHRwcmV2aW91c1JlZnJlc2hUb2tlbiA9IG9hdXRoVG9rZW4ucmVmcmVzaF90b2tlblxuXHRcdGNvbnN0IG9hdXRoVG9rZW5SZXNwb25zZTogT0F1dGhUb2tlblJlc3BvbnNlID0geWllbGQgY2FsbChnZXRUb2tlbkZyb21SZWZyZXNoVG9rZW4sIG9hdXRoVG9rZW4pXG5cdFx0aWYgKCEhb2F1dGhUb2tlblJlc3BvbnNlICYmIG9hdXRoVG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4gIT09IG9yaWdpbmFsQWNjZXNzVG9rZW4pIHtcblx0XHRcdGxvZ2dlci5kZWJ1ZygnT0F1dGggdG9rZW4gcmVmcmVzaGVkJylcblx0XHRcdHByZXZpb3VzUmVmcmVzaFRva2VuID0gdW5kZWZpbmVkXG5cdFx0XHR5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBvYXV0aFRva2VuUmVzcG9uc2UpXG5cdFx0XHR5aWVsZCBwdXQ8QXV0aFRva2VuU3VjY2Vzc0FjdGlvbj4oe1xuXHRcdFx0XHR0eXBlOiBBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUuVE9LRU5fUkVGUkVTSF9TVUNDRUVERUQsXG5cdFx0XHRcdG9hdXRoVG9rZW46IG9hdXRoVG9rZW5SZXNwb25zZVxuXHRcdFx0fSlcblx0XHR9IGVsc2UgaWYgKG9hdXRoVG9rZW5SZXNwb25zZSA9PT0gbnVsbCkge1xuXHRcdFx0bG9nZ2VyLmRlYnVnKCdPQXV0aCB0b2tlbiBmYWlsZWQgdG8gcmVmcmVzaCcpXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gb3V0c2lkZSBvZiB0aGUgdG9rZW4gaGF2aW5nIGJlZW4gcmV2b2tlZCBvbiB0aGUgc2VydmVyIHNpZGVcblx0XHRcdHlpZWxkIGFsbCh7XG5cdFx0XHRcdHJlZnJlc2hGYWlsZWQ6IHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuVE9LRU5fUkVGUkVTSF9GQUlMRUQgfSksXG5cdFx0XHRcdGxvZ091dDogcHV0PEF1dGhMb2dPdXRBY3Rpb24+KHsgdHlwZTogQVVUSF9MT0dfT1VUX0FDVElPTl9UWVBFLkxPR19PVVQsIHRva2VuRXhwaXJlZDogdHJ1ZSB9KVxuXHRcdFx0fSlcblx0XHR9XG5cdFx0cmV0dXJuIG9hdXRoVG9rZW5SZXNwb25zZVxuXHR9IGNhdGNoIChjYXVnaHRFcnJvcjogdW5rbm93bikge1xuXHRcdGNvbnN0IGVycm9yID0gY29uc3RydWN0RXJyb3JGcm9tQ2F1Z2h0RXJyb3IoY2F1Z2h0RXJyb3IsICdQZXJmb3JtVG9rZW5SZWZyZXNoRXJyb3InKVxuXHRcdGxvZ2dlci5lcnJvcihlcnJvcilcblx0XHRlcnJvckhhbmRsZXIoZXJyb3IpXG5cdH0gZmluYWxseSB7XG5cdFx0cmVmcmVzaExvY2sgPSBmYWxzZVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbG9naW5GbG93KG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uOiBNb2RlbEZldGNoUmVxdWVzdEFjdGlvbik6IFNhZ2FJdGVyYXRvciB7XG5cdHlpZWxkIHB1dChtb2RlbEZldGNoUmVxdWVzdEFjdGlvbilcblx0Y29uc3Qge1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uLFxuXHRcdGZldGNoRXJyb3JBY3Rpb25cblx0fTogeyBmZXRjaFJlc3VsdEFjdGlvbj86IE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb247IGZldGNoRXJyb3JBY3Rpb24/OiBNb2RlbEZldGNoRXJyb3JBY3Rpb24gfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdGZldGNoUmVzdWx0QWN0aW9uOiB0YWtlKHRha2VNYXRjaGVzTW9kZWxGZXRjaFJlY2VpdmVkKG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uLm1vZGVsTmFtZSkpLFxuXHRcdGZldGNoRXJyb3JBY3Rpb246IHRha2UodGFrZU1hdGNoZXNNb2RlbEZldGNoRmFpbGVkKG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uLm1vZGVsTmFtZSkpXG5cdH0pXG5cdGlmIChmZXRjaEVycm9yQWN0aW9uKSB7XG5cdFx0cmV0dXJuIG51bGxcblx0fVxuXHRjb25zdCBjb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBmZXRjaFJlc3VsdEFjdGlvbj8uZGF0YT8uY29kZVxuXHRpZiAoIWNvZGUpIHtcblx0XHRyZXR1cm4gbnVsbFxuXHR9XG5cdHJldHVybiB5aWVsZCBjYWxsKGdldFRva2VuRnJvbUNvZGUsIGNvZGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY3JlZGVudGlhbHNMb2dpbkZsb3coXG5cdGFjdGlvbjogQXV0aENhc1YxTG9naW5SZXF1ZXN0QWN0aW9uIHwgQXV0aExvY2FsTG9naW5SZXF1ZXN0QWN0aW9uLFxuXHRtb2RlbE5hbWU6IHN0cmluZ1xuKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgbW9kZWxGZXRjaFJlcXVlc3RBY3Rpb246IE1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uID0ge1xuXHRcdC8vIHNldCByZXF1aXJlZCBkZWZhdWx0c1xuXHRcdHR5cGU6IE1PREVMX0ZFVENIX1JFUVVFU1RfQUNUSU9OX1RZUEUuRkVUQ0hfUkVRVUVTVCxcblx0XHRtb2RlbE5hbWUsXG5cdFx0bm9TdG9yZTogdHJ1ZSxcblx0XHQvLyBmb3JjZSBubyByZXRyeVxuXHRcdG5vUmV0cnk6IHRydWUsXG5cdFx0Ly8gcGFzcyB0aHJ1IGJvZHlcblx0XHRib2R5OiBhY3Rpb24uYm9keVxuXHR9XG5cdHJldHVybiB5aWVsZCBjYWxsKGxvZ2luRmxvdywgbW9kZWxGZXRjaFJlcXVlc3RBY3Rpb24pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogY2FzVjFMb2dpbkZsb3coYWN0aW9uOiBBdXRoQ2FzVjFMb2dpblJlcXVlc3RBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHRyZXR1cm4geWllbGQgY2FsbChjcmVkZW50aWFsc0xvZ2luRmxvdywgYWN0aW9uLCAnY29kZUZyb21DYXNWMScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbG9jYWxMb2dpbkZsb3coYWN0aW9uOiBBdXRoTG9jYWxMb2dpblJlcXVlc3RBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHRyZXR1cm4geWllbGQgY2FsbChjcmVkZW50aWFsc0xvZ2luRmxvdywgYWN0aW9uLCAnY29kZUZyb21Mb2NhbENyZWRlbnRpYWxzJylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBjYXNUaWNrZXRMb2dpbkZsb3codGlja2V0OiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZyk6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IG1vZGVsRmV0Y2hSZXF1ZXN0QWN0aW9uOiBNb2RlbEZldGNoUmVxdWVzdEFjdGlvbiA9IHtcblx0XHR0eXBlOiBNT0RFTF9GRVRDSF9SRVFVRVNUX0FDVElPTl9UWVBFLkZFVENIX1JFUVVFU1QsXG5cdFx0bW9kZWxOYW1lOiAnY29kZUZyb21DYXNUaWNrZXQnLFxuXHRcdG5vU3RvcmU6IHRydWUsXG5cdFx0cXVlcnlQYXJhbXM6IHtcblx0XHRcdHRpY2tldCxcblx0XHRcdHNlcnZpY2Vcblx0XHR9XG5cdH1cblx0cmV0dXJuIHlpZWxkIGNhbGwobG9naW5GbG93LCBtb2RlbEZldGNoUmVxdWVzdEFjdGlvbilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBwa2NlTG9naW5GbG93KF86IEF1dGhQS0NFTG9naW5SZXF1ZXN0QWN0aW9uKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0aWYgKCFhcHBDb25maWcuQ0xJRU5UX0lEIHx8ICFhcHBDb25maWcuT0FVVEhfUEtDRV9TQ09QRSB8fCAhYXBwQ29uZmlnLk9BVVRIX1BLQ0VfRU5EUE9JTlQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NMSUVOVF9JRCwgT0FVVEhfUEtDRV9TQ09QRSwgYW5kIE9BVVRIX1BLQ0VfRU5EUE9JTlQgYXJlIHJlcXVpcmVkIGluIEFwcENvbmZpZycpXG5cdH1cblxuXHQvLyBHZW5lcmF0ZSBzdGF0ZSBhbmQgY29kZSB2ZXJpZmllciB2YWx1ZXNcblx0Y29uc3Qgc3RhdGUgPSB1dWlkdjQoKVxuXHRjb25zdCBjb2RlVmVyaWZpZXIgPSB1dWlkdjQoKVxuXHRjb25zdCBzaGEyNTZDb2RlVmVyaWZpZXIgPSB5aWVsZCBjYWxsKHNoYTI1NkFzeW5jLCBjb2RlVmVyaWZpZXIpXG5cdGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSB5aWVsZCBjYWxsKGJhc2U2NFVybEVuY29kZSwgc2hhMjU2Q29kZVZlcmlmaWVyKVxuXG5cdC8vIFBlcnNpc3Qgc3RhdGUgYW5kIGNvZGUgdmVyaWZpZXIgaW4gbG9jYWwgc3RvcmFnZSBmb3IgdXNlIGFmdGVyIGNvZGUgZmxvdyByZWRpcmVjdC5cblx0eWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RTdGF0ZSwgc3RhdGUpXG5cdHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0Q29kZVZlcmlmaWVyLCBjb2RlVmVyaWZpZXIpXG5cblx0Ly8gUmVkaXJlY3QgdG8gQlMgY29kZSBmbG93IGF1dGggZW5kcG9pbnQgKHdoaWNoIHdpbGwgcmVkaXJlY3QgYmFjayBoZXJlKVxuXHRjb25zdCBsb2NhdGlvbiA9IHdpbmRvd1NlcnZpY2UuZ2V0TG9jYXRpb24oKVxuXHRjb25zdCBwa2NlQXV0aFJlZGlyZWN0VVJMID0gYCR7YXBwQ29uZmlnLk9BVVRIX1BLQ0VfRU5EUE9JTlR9PyR7bmV3IFVSTFNlYXJjaFBhcmFtcyh7XG5cdFx0cmVzcG9uc2VfdHlwZTogJ2NvZGUnLFxuXHRcdGNsaWVudF9pZDogYXBwQ29uZmlnLkNMSUVOVF9JRCxcblx0XHRzdGF0ZTogc3RhdGUsXG5cdFx0c2NvcGU6IGFwcENvbmZpZy5PQVVUSF9QS0NFX1NDT1BFLFxuXHRcdGNvZGVfY2hhbGxlbmdlOiBjb2RlQ2hhbGxlbmdlLFxuXHRcdGNvZGVfY2hhbGxlbmdlX21ldGhvZDogJ1MyNTYnLFxuXHRcdHJlZGlyZWN0X3VyaTogbG9jYXRpb24ub3JpZ2luXG5cdH0pfWBcblx0eWllbGQgY2FsbCh3aW5kb3dTZXJ2aWNlLnJlcGxhY2UsIHBrY2VBdXRoUmVkaXJlY3RVUkwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaGFuZGxlQXV0aEZhaWx1cmUoYWN0aW9uOiBNb2RlbEZldGNoRXJyb3JBY3Rpb24pOiBTYWdhSXRlcmF0b3Ige1xuXHRpZiAoIWFjdGlvbi5lcnJvckRhdGEgfHwgYWN0aW9uLmVycm9yRGF0YS5zdGF0dXMgIT09IEhUVFBfU1RBVFVTX0NPREUuVU5BVVRIT1JJWkVEKSByZXR1cm5cblx0Y29uc3Qgb2F1dGhUb2tlbjogT0F1dGhUb2tlblJlc3BvbnNlID0geWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFRva2VuKVxuXHRpZiAoIWlzVG9rZW5FeHBpcmVkKG9hdXRoVG9rZW4pKSByZXR1cm5cblx0Ly8gaWYgYSByZXF1ZXN0IHJlY2VpdmVzIGEgNDAxLCB0aGUgdG9rZW4gaXMgZXhwaXJlZCBhbmQgY2Fubm90IHJlZnJlc2gsIHRyaWdnZXIgZXhwaXJlZCBsb2cgb3V0XG5cdC8vIHRoaXMgaXMgYSBmYWlsLXNhZmUgaW4gY2FzZSB0aGUgYHJlZnJlc2hMb29wYCBoYXMgZmFpbGVkXG5cdGlmICghaXNUb2tlblJlZnJlc2hhYmxlKG9hdXRoVG9rZW4pKSB7XG5cdFx0eWllbGQgcHV0PEF1dGhMb2dPdXRBY3Rpb24+KHsgdHlwZTogQVVUSF9MT0dfT1VUX0FDVElPTl9UWVBFLkxPR19PVVQsIHRva2VuRXhwaXJlZDogdHJ1ZSB9KVxuXHRcdHJldHVyblxuXHR9XG5cdC8vIGlmIHRva2VuIGlzIHJlZnJlc2hhYmxlLCB3aXRoaW4gMzAgc2Vjb25kcyBvZiBleHBpcmF0aW9uLCBhbmQgdXNlciBpcyBub3QgaWRsZSwgYXV0by1yZWZyZXNoXG5cdC8vIHRoaXMgaXMgYSBmYWlsLXNhZmUgaW4gY2FzZSB0aGUgYHJlZnJlc2hMb29wYCBoYXMgZmFpbGVkXG5cdGlmICghaXNVc2VySWRsZSgpKSB7XG5cdFx0bG9nZ2VyLmRlYnVnKCdoYW5kbGVBdXRoRmFpbHVyZSB0cmlnZ2VyIGF1dG8tcmVmcmVzaCcpXG5cdFx0eWllbGQgY2FsbChwZXJmb3JtVG9rZW5SZWZyZXNoLCBvYXV0aFRva2VuKVxuXHR9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRPQXV0aFRva2VuOiBUb2tlbkFjY2Vzc0Z1bmN0aW9uID0gZnVuY3Rpb24qICgpIHtcblx0bGV0IG9hdXRoVG9rZW46IE9BdXRoVG9rZW5SZXNwb25zZSA9IHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRUb2tlbilcblx0aWYgKCFvYXV0aFRva2VuPy5bJy5leHBpcmVzJ10pIHJldHVybiBvYXV0aFRva2VuXG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGNvbnN0IGV4cGlyZXNVdGMgPSBtb21lbnQudXRjKG9hdXRoVG9rZW5bJy5leHBpcmVzJ10pXG5cdGNvbnN0IG5vd1V0YyA9IG1vbWVudC51dGMoZ2V0U2VydmVyTm93VXRjKCkudG9JU09TdHJpbmcoKSlcblx0Y29uc3QgaXNFeHBpcmluZ1Nvb24gPSBleHBpcmVzVXRjLmRpZmYobm93VXRjKSA8PSBhcHBDb25maWcuU0VTU0lPTl9SRUZSRVNIX1RIUkVTSE9MRFxuXHQvLyBpZiB0b2tlbiBpcyByZWZyZXNoYWJsZSwgd2l0aGluIHJlZnJlc2ggdGhyZXNob2xkLCB1c2VyIGlzIG5vdCBpZGxlLCBhbmQgbm90IGRpc3BsYXlpbmcgYWxlcnQsIHRoZW4gYXV0by1yZWZyZXNoXG5cdC8vIHRoaXMgaXMgYSBmYWlsLXNhZmUgaW4gY2FzZSB0aGUgYHJlZnJlc2hMb29wYCBoYXMgZmFpbGVkXG5cdGlmIChpc1Rva2VuUmVmcmVzaGFibGUob2F1dGhUb2tlbikgJiYgaXNFeHBpcmluZ1Nvb24gJiYgIWlzVXNlcklkbGUoKSAmJiAhaXNFeHBpcmluZ1Nvb25BbGVydFZpc2libGUpIHtcblx0XHRsb2dnZXIuZGVidWcoJ2dldE9BdXRoVG9rZW4gdHJpZ2dlciBhdXRvLXJlZnJlc2gnKVxuXHRcdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKHBlcmZvcm1Ub2tlblJlZnJlc2gsIG9hdXRoVG9rZW4pXG5cdH1cblx0cmV0dXJuIG9hdXRoVG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiByZXNldERhdGEoKTogU2FnYUl0ZXJhdG9yIHtcblx0eWllbGQgYWxsKHtcblx0XHRjbGVhclVzZXJEYXRhOiBwdXQ8TW9kZWxSZW1vdmVLZXlBY3Rpb24+KHsgdHlwZTogTU9ERUxfUkVNT1ZFX0tFWV9BQ1RJT05fVFlQRSwgbW9kZWxQYXRoOiAndXNlcicgfSksXG5cdFx0Y2xlYXJQZXJzaXN0ZW50VG9rZW46IGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0VG9rZW4sIG51bGwpLFxuXHRcdHJlc2V0UmVmcmVzaDogY2FsbChyZXNldFJlZnJlc2gpXG5cdH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiogcmVmcmVzaExvb3AoKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0bGV0IG9hdXRoVG9rZW46IE9BdXRoVG9rZW5SZXNwb25zZVxuXHRsb2dnZXIuZGVidWcoJ3JlZnJlc2hMb29wIGluaXQnKVxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGlzRXhwaXJpbmdTb29uQWxlcnRWaXNpYmxlID0gZmFsc2Vcblx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLmdldFBlcnNpc3RlZFRva2VuKVxuXG5cdFx0bG9nZ2VyLmRlYnVnKCdyZWZyZXNoTG9vcCBzdGFydCcsIHtcblx0XHRcdG9hdXRoVG9rZW4sXG5cdFx0XHRpc0V4cGlyZWQ6IGlzVG9rZW5FeHBpcmVkKG9hdXRoVG9rZW4pLFxuXHRcdFx0aXNSZWZyZXNoYWJsZTogaXNUb2tlblJlZnJlc2hhYmxlKG9hdXRoVG9rZW4pXG5cdFx0fSlcblxuXHRcdGlmICghaXNUb2tlblJlZnJlc2hhYmxlKG9hdXRoVG9rZW4pKSB7XG5cdFx0XHRpZiAoaXNUb2tlbkV4cGlyZWQob2F1dGhUb2tlbikpIHtcblx0XHRcdFx0bG9nZ2VyLmRlYnVnKCdyZWZyZXNoTG9vcCBicmVhazogdG9rZW4gZXhwaXJlZCBhbmQgbm90IHJlZnJlc2hhYmxlLCB0cmlnZ2VyIGV4cGlyZWQgbG9nIG91dCcpXG5cdFx0XHRcdC8vIHVzZXIgZmFpbGVkIHRvIHJlcXVlc3QgYW4gZXh0ZW5zaW9uIGFuZCB0b2tlbiBpcyBleHBpcmVkXG5cdFx0XHRcdHlpZWxkIHB1dDxBdXRoTG9nT3V0QWN0aW9uPih7IHR5cGU6IEFVVEhfTE9HX09VVF9BQ1RJT05fVFlQRS5MT0dfT1VULCB0b2tlbkV4cGlyZWQ6IHRydWUgfSlcblx0XHRcdFx0Ly8gYnJlYWsgbG9vcFxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdFx0bG9nZ2VyLmRlYnVnKCdyZWZyZXNoTG9vcCBicmVhazogdG9rZW4gbm90IHJlZnJlc2hhYmxlJylcblx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdFx0Y29uc3QgZXhwaXJlc1V0YyA9IG1vbWVudC51dGMob2F1dGhUb2tlblsnLmV4cGlyZXMnXSlcblx0XHRjb25zdCBub3dVdGMgPSBtb21lbnQudXRjKGdldFNlcnZlck5vd1V0YygpLnRvSVNPU3RyaW5nKCkpXG5cdFx0Y29uc3QgdGltZVVudGlsRXhwaXJlcyA9IGV4cGlyZXNVdGMuZGlmZihub3dVdGMpXG5cdFx0Y29uc3QgaXNFeHBpcmluZ1Nvb24gPSB0aW1lVW50aWxFeHBpcmVzIDw9IGFwcENvbmZpZy5TRVNTSU9OX1JFRlJFU0hfVEhSRVNIT0xEXG5cblx0XHRpZiAoIWlzRXhwaXJpbmdTb29uKSB7XG5cdFx0XHRjb25zdCBleHBpcmVzU29vblV0YyA9IGV4cGlyZXNVdGMuc3VidHJhY3QoYXBwQ29uZmlnLlNFU1NJT05fUkVGUkVTSF9USFJFU0hPTEQsICdtaWxsaXNlY29uZHMnKVxuXHRcdFx0Ly8gdXNlIGEgbWF4IGRlbGF5LCBlLmcuIDEgbWluIGZvciA2MCBtaW4gdG9rZW4sIDEgc2VjIGZvciA2MCBzZWMgdG9rZW5cblx0XHRcdC8vIHRvIGhlbHAgcmVkdWNlIHRpbWVyIGRyaWZ0IHdoZW4gdGFiIGlzIGluIHRoZSBiYWNrZ3JvdW5kXG5cdFx0XHRjb25zdCBtYXhEZWxheSA9IChvYXV0aFRva2VuLmV4cGlyZXNfaW4gKiAxMDAwKSAvIDYwXG5cdFx0XHRjb25zdCBleHBpcmVzU29vbkRlbGF5ID0gTWF0aC5taW4obWF4RGVsYXksIGV4cGlyZXNTb29uVXRjLmRpZmYobm93VXRjKSlcblx0XHRcdGxvZ2dlci5kZWJ1ZyhgcmVmcmVzaExvb3AgZGVsYXk6IHdhaXQgZm9yIHRva2VuIHRvIGJlIGNsb3NlIHRvIGV4cGlyYXRpb24sIGRlbGF5aW5nICR7ZXhwaXJlc1Nvb25EZWxheX0gbXNgKVxuXHRcdFx0eWllbGQgZGVsYXkoZXhwaXJlc1Nvb25EZWxheSlcblx0XHRcdC8vIHJlc3RhcnQgbG9vcCB0byByZWNoZWNrIHRva2VuXG5cdFx0XHRjb25zdCBlbGFwc2VkID0gbW9tZW50LnV0YyhnZXRTZXJ2ZXJOb3dVdGMoKS50b0lTT1N0cmluZygpKS5kaWZmKG5vd1V0Yylcblx0XHRcdGxvZ2dlci5kZWJ1ZyhgcmVmcmVzaExvb3AgZGVsYXk6IGZpbmlzaGVkIGFmdGVyICR7ZWxhcHNlZH0gbXNgKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHRsb2dnZXIuZGVidWcoJ3JlZnJlc2hMb29wIGV4cGlyaW5nIHNvb24nKVxuXG5cdFx0Ly8gTk9URTogdXNlciBjYW4gbmV2ZXIgYmUgaWRsZSBvbiBMT0NBTCwgc28gbG9jYWwgc2Vzc2lvbnMgd2lsbCBzdGF5IGFsaXZlIGluZGVmaW5pdGVseVxuXHRcdGlmICghaXNVc2VySWRsZSgpKSB7XG5cdFx0XHRsb2dnZXIuZGVidWcoJ3JlZnJlc2hMb29wIHVzZXIgbm90IGlkbGUsIHRyaWdnZXIgYXV0by1yZWZyZXNoJylcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgcmVmcmVzaCB0b2tlbiB0byBleHRlbmQgc2Vzc2lvbiBpZiB1c2VyIGlzIG5vdCBpZGxlXG5cdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChwZXJmb3JtVG9rZW5SZWZyZXNoLCBvYXV0aFRva2VuKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cblx0XHRsb2dnZXIuZGVidWcoJ3JlZnJlc2hMb29wIHVzZXIgaWRsZSwgdHJpZ2dlciBleHBpcmluZyBzb29uJylcblxuXHRcdC8vIGlmIHVzZXIgaXMgaWRsZSBhbmQgdG9rZW4gaXMgZXhwaXJpbmcgc29vbiwgc2VuZCBhY3Rpb24gdG8gZGlzcGxheSBFeHBpcmluZ1Nlc3Npb25BbGVydFxuXHRcdHlpZWxkIHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuRVhQSVJJTkdfU09PTiB9KVxuXHRcdC8vIHRyYWNrIGxvY2FsIHN0YXRlIHRvIGJsb2NrIGF1dG8tcmVmcmVzaCBpbiBgZ2V0T0F1dGhUb2tlbmBcblx0XHRpc0V4cGlyaW5nU29vbkFsZXJ0VmlzaWJsZSA9IHRydWVcblxuXHRcdC8vIHdhaXQgZm9yIHVzZXIgdG8gdGFrZSBhbiBhY3Rpb24sIG9yIGZvciB0b2tlbiB0byBleHBpcmVcblx0XHQvLyBpZiB1c2VyIGxvZ3Mgb3V0LCB0aGUgcm9vdCBgYXV0aFNhZ2FgIHdpbGwgY2FuY2VsIHRoaXMgbG9vcFxuXHRcdGNvbnN0IHsgdG9rZW5FeHBpcmVkIH0gPSB5aWVsZCByYWNlKHtcblx0XHRcdGV4dGVuc2lvblJlcXVlc3RlZDogdGFrZShBVVRIX0FDVElPTl9UWVBFLkVYVEVOU0lPTl9SRVFVRVNURUQpLFxuXHRcdFx0dG9rZW5FeHBpcmVkOiBkZWxheSh0aW1lVW50aWxFeHBpcmVzKVxuXHRcdH0pXG5cdFx0aWYgKHRva2VuRXhwaXJlZCkge1xuXHRcdFx0bG9nZ2VyLmRlYnVnKCdyZWZyZXNoTG9vcCB0b2tlbiBleHBpcmVkLCB0cmlnZ2VyIGV4cGlyZWQgbG9nIG91dCcpXG5cdFx0XHQvLyB1c2VyIGZhaWxlZCB0byByZXF1ZXN0IGFuIGV4dGVuc2lvbiBhbmQgdG9rZW4gaXMgZXhwaXJlZFxuXHRcdFx0eWllbGQgcHV0PEF1dGhMb2dPdXRBY3Rpb24+KHsgdHlwZTogQVVUSF9MT0dfT1VUX0FDVElPTl9UWVBFLkxPR19PVVQsIHRva2VuRXhwaXJlZDogdHJ1ZSB9KVxuXHRcdFx0Ly8gYnJlYWsgbG9vcFxuXHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRsb2dnZXIuZGVidWcoJ3JlZnJlc2hMb29wIHVzZXIgdHJpZ2dlciByZWZyZXNoJylcblxuXHRcdC8vIHVzZXIgcmVxdWVzdGVkIGV4dGVuc2lvbiwgdHJpZ2dlciB0b2tlbiByZWZyZXNoXG5cdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwocGVyZm9ybVRva2VuUmVmcmVzaCwgb2F1dGhUb2tlbilcblx0fVxuXG5cdGxvZ2dlci5kZWJ1ZygncmVmcmVzaExvb3AgZG9uZScpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKiBhdXRoU2FnYShcblx0YXV0aFBlcnNpc3RlbmNlU2VydmljZVBhcmFtOiBBdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLFxuXHR0aWNrZXRQcm92aWRlclNlcnZpY2U6IFRpY2tldFByb3ZpZGVyU2VydmljZSxcblx0Y29kZVByb3ZpZGVyU2VydmljZTogQ29kZVByb3ZpZGVyU2VydmljZSxcblx0ZXJyb3JIYW5kbGVyUGFyYW06IEVycm9ySGFuZGxlciB8IHVuZGVmaW5lZCA9IGRlZmF1bHRFcnJvckhhbmRsZXJcbik6IFNhZ2FJdGVyYXRvciB7XG5cdGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UgPSBhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlUGFyYW1cblx0ZXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyUGFyYW1cblx0bG9nZ2VyID0gZ2V0TG9nZ2VyKClcblxuXHQvLyB0cnkgdG8gZ2V0IHBlcnNpc3RlZCB0b2tlbiAobm9ybWFsbHkgaW4gQXN5bmNTdG9yYWdlIG9yIExvY2FsU3RvcmFnZSlcblx0bGV0IG9hdXRoVG9rZW46IE9BdXRoVG9rZW5SZXNwb25zZSA9IHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRQZXJzaXN0ZWRUb2tlbilcblxuXHQvLyBpZiB0b2tlbiBpcyBleHBpcmVkLCB0cnkgdG8gcmVmcmVzaCBpdCBiZWZvcmUgaW5pdGlhbGl6aW5nIGF1dGhcblx0Ly8gaWYgdW5hYmxlIHRvIHJlZnJlc2gsIGNsZWFyIGRhdGEgYW5kIGluaXQgYXV0aCB3aXRoIG5vIHRva2VuXG5cdGlmIChpc1Rva2VuRXhwaXJlZChvYXV0aFRva2VuKSkge1xuXHRcdGlmIChpc1Rva2VuUmVmcmVzaGFibGUob2F1dGhUb2tlbikpIHtcblx0XHRcdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKHBlcmZvcm1Ub2tlblJlZnJlc2gsIG9hdXRoVG9rZW4pXG5cdFx0fSBlbHNlIHtcblx0XHRcdGxvZ2dlci5kZWJ1ZygndG9rZW4gZXhwaXJlZCwgY2xlYXIgcGVyc2lzdGVkIHVzZXIgZGF0YSBhbmQgdG9rZW4nKVxuXHRcdFx0b2F1dGhUb2tlbiA9IG51bGxcblx0XHRcdC8vIGNsZWFyIHRoZSBleHBpcmVkIHRva2VuIGFuZCB1c2VyIGRhdGEgZnJvbSBzdG9yYWdlXG5cdFx0XHR5aWVsZCBjYWxsKHJlc2V0RGF0YSlcblx0XHR9XG5cdH1cblxuXHQvLyBnZXQgYXV0aCBwYXJhbWV0ZXJzXG5cdGNvbnN0IGNhc1RpY2tldCA9IHRpY2tldFByb3ZpZGVyU2VydmljZS5nZXRUaWNrZXQoKVxuXHRjb25zdCBzZXJ2aWNlID0gdGlja2V0UHJvdmlkZXJTZXJ2aWNlLmdldEFwcFNlcnZpY2VOYW1lKClcblx0Y29uc3QgaGFzQ2FzVGlja2V0ID0gISFjYXNUaWNrZXQgJiYgISFzZXJ2aWNlXG5cblx0Y29uc3QgY29kZSA9IGNvZGVQcm92aWRlclNlcnZpY2UuZ2V0Q29kZSgpXG5cdGNvbnN0IHN0YXRlID0gY29kZVByb3ZpZGVyU2VydmljZS5nZXRTdGF0ZSgpXG5cblx0Ly8gYXV0by1sb2dpbiAvIFNTTyBmb3IgUHVyZHVlXG5cdGNvbnN0IHB1cmR1ZUlkZW50aXR5UHJvdmlkZXIgPSB5aWVsZCBjYWxsKGdldFB1cmR1ZUlkZW50aXR5UHJvdmlkZXJGcm9tTG9jYXRpb24pXG5cdGlmIChwdXJkdWVJZGVudGl0eVByb3ZpZGVyKSB7XG5cdFx0Y29uc3QgaXNQdXJkdWVBdXRvTG9naW5SZXF1ZXN0ZWQ6IGJvb2xlYW4gPSB5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0SXNQdXJkdWVBdXRvTG9naW5SZXF1ZXN0ZWQpXG5cblx0XHQvLyBzdGFydCBhdXRvLWxvZ2luIC8gU1NPLCBpZiBub3QgYWxyZWFkeSByZXF1ZXN0ZWQsIG5vdCBhdXRoZW50aWNhdGVkLCBhbmQgaGFzIG5vIHZhbGlkIGF1dGggcGFyYW1ldGVyc1xuXHRcdGlmICghaXNQdXJkdWVBdXRvTG9naW5SZXF1ZXN0ZWQgJiYgIW9hdXRoVG9rZW4gJiYgIWhhc0Nhc1RpY2tldCAmJiAhY29kZSkge1xuXHRcdFx0eWllbGQgY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RJc1B1cmR1ZUF1dG9Mb2dpblJlcXVlc3RlZCwgdHJ1ZSlcblx0XHRcdC8vIHN0b3JlIHBhdGhuYW1lIGZvciBwb3N0LWxvZ2luIHJlZGlyZWN0IGlmIG5vdCBhbHJlYWR5IHNldFxuXHRcdFx0Ly8gY291bGQgaGF2ZSBiZWVuIHNldCBmcm9tIHVzZXIgbG9nZ2luZyBvdXQsIHNlZSBgQXV0aGVudGljYXRlZENvbXBvbmVudGBcblx0XHRcdGNvbnN0IHJldHVyblVybCA9IHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5nZXRSZXR1cm5VcmwpXG5cdFx0XHRpZiAoIXJldHVyblVybCkge1xuXHRcdFx0XHR5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFJldHVyblVybCwgd2luZG93U2VydmljZS5nZXRMb2NhdGlvbigpLnBhdGhuYW1lKVxuXHRcdFx0fVxuXHRcdFx0eWllbGQgY2FsbCh3aW5kb3dTZXJ2aWNlLnJlcGxhY2UsIHB1cmR1ZUlkZW50aXR5UHJvdmlkZXIubG9naW5VcmwpXG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cblx0XHQvLyBmaW5pc2ggYXV0by1sb2dpbiBwcm9jZXNzLCBpZiBpdCB3YXMgcmVxdWVzdGVkIGFuZCBoYXMgYSB2YWxpZCBhdXRoIHBhcmFtZXRlclxuXHRcdGlmIChpc1B1cmR1ZUF1dG9Mb2dpblJlcXVlc3RlZCAmJiAoaGFzQ2FzVGlja2V0IHx8IGNvZGUpKSB7XG5cdFx0XHR5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdElzUHVyZHVlQXV0b0xvZ2luUmVxdWVzdGVkLCBmYWxzZSlcblx0XHRcdC8vIHBlcnNpc3QgUHVyZHVlIGlkZW50aXR5UHJvdmlkZXIgZm9yIGBpZGVudGl0eVByb3ZpZGVyU2FnYWAgbG9nb3V0IGxvZ2ljXG5cdFx0XHR5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdElkZW50aXR5UHJvdmlkZXIsIHB1cmR1ZUlkZW50aXR5UHJvdmlkZXIpXG5cdFx0XHQvLyBjb250aW51ZSB0byBleGNoYW5naW5nIENBUyBgdGlja2V0YCBvciBgY29kZWAgZm9yIHRva2VuXG5cdFx0fVxuXHR9XG5cblx0Ly8gaWYgQ0FTIHRpY2tldCBleGlzdHMgKG5vcm1hbGx5IGluIHRoZSBVUkwpLCB1c2UgaXQgdG8gZ2V0IGEgbmV3IHRva2VuXG5cdGlmIChoYXNDYXNUaWNrZXQpIHtcblx0XHR0aWNrZXRQcm92aWRlclNlcnZpY2UucmVtb3ZlVGlja2V0KClcblxuXHRcdC8vIGNsZWFyIHRoZSBjdXJyZW50IHRva2VuIGFuZCB1c2VyIGRhdGEgaWYgYSBuZXcgdG9rZW4gaXMgYWJvdXQgdG8gYmUgZ2VuZXJhdGVkXG5cdFx0aWYgKG9hdXRoVG9rZW4pIHtcblx0XHRcdHlpZWxkIGNhbGwocmVzZXREYXRhKVxuXHRcdFx0b2F1dGhUb2tlbiA9IG51bGxcblx0XHR9XG5cdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoY2FzVGlja2V0TG9naW5GbG93LCBjYXNUaWNrZXQsIHNlcnZpY2UpXG5cdFx0aWYgKG9hdXRoVG9rZW4pIHtcblx0XHRcdHlpZWxkIGNhbGwoYXV0aFBlcnNpc3RlbmNlU2VydmljZS5wZXJzaXN0VG9rZW4sIG9hdXRoVG9rZW4pXG5cdFx0fVxuXHR9XG5cblx0Ly8gaWYgT0F1dGggQ29kZSBleGlzdHMgKG5vcm1hbGx5IGluIHRoZSBVUkwpLCB1c2UgaXQgdG8gZ2V0IGEgbmV3IHRva2VuXG5cdGlmIChjb2RlKSB7XG5cdFx0Y29kZVByb3ZpZGVyU2VydmljZS5yZW1vdmVDb2RlQW5kU3RhdGUoKVxuXG5cdFx0Ly8gY2xlYXIgdGhlIGN1cnJlbnQgdG9rZW4gYW5kIHVzZXIgZGF0YSBpZiBhIG5ldyB0b2tlbiBpcyBhYm91dCB0byBiZSBnZW5lcmF0ZWRcblx0XHRpZiAob2F1dGhUb2tlbikge1xuXHRcdFx0eWllbGQgY2FsbChyZXNldERhdGEpXG5cdFx0XHRvYXV0aFRva2VuID0gbnVsbFxuXHRcdH1cblxuXHRcdC8vIGlmIE9BdXRoIHN0YXRlIGV4aXN0cyAobm9ybWFsbHkgaW4gdGhlIFVSTCksIHVzZSBpdCBpbiBhZGRpdGlvbiB0byB0aGUgY29kZSBmb3IgUEtDRSBsb2dpbiBmbG93XG5cdFx0aWYgKHN0YXRlKSB7XG5cdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChnZXRUb2tlbkZyb21Db2RlQW5kU3RhdGUsIGNvZGUsIHN0YXRlKVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvYXV0aFRva2VuID0geWllbGQgY2FsbChnZXRUb2tlbkZyb21Db2RlLCBjb2RlKVxuXHRcdH1cblxuXHRcdGlmIChvYXV0aFRva2VuKSB7XG5cdFx0XHR5aWVsZCBjYWxsKGF1dGhQZXJzaXN0ZW5jZVNlcnZpY2UucGVyc2lzdFRva2VuLCBvYXV0aFRva2VuKVxuXHRcdH1cblx0fVxuXG5cdHlpZWxkIHB1dDxBdXRoVG9rZW5BY3Rpb24+KHsgdHlwZTogQVVUSF9UT0tFTl9BQ1RJT05fVFlQRS5BVVRIX0lOSVRJQUxJWkVELCBvYXV0aFRva2VuIH0pXG5cblx0eWllbGQgdGFrZUV2ZXJ5KE1PREVMX0ZFVENIX0VSUk9SX0FDVElPTl9UWVBFLlRSWV9GRVRDSF9GQUlMRUQsIGhhbmRsZUF1dGhGYWlsdXJlKVxuXG5cdGRvIHtcblx0XHRpZiAoIW9hdXRoVG9rZW4pIHtcblx0XHRcdGNvbnN0IHtcblx0XHRcdFx0Y2FzVjFBY3Rpb24sXG5cdFx0XHRcdGxvY2FsTG9naW5BY3Rpb24sXG5cdFx0XHRcdHBrY2VMb2dpbkFjdGlvblxuXHRcdFx0fToge1xuXHRcdFx0XHRjYXNWMUFjdGlvbj86IEF1dGhDYXNWMUxvZ2luUmVxdWVzdEFjdGlvblxuXHRcdFx0XHRsb2NhbExvZ2luQWN0aW9uPzogQXV0aExvY2FsTG9naW5SZXF1ZXN0QWN0aW9uXG5cdFx0XHRcdHBrY2VMb2dpbkFjdGlvbj86IEF1dGhQS0NFTG9naW5SZXF1ZXN0QWN0aW9uXG5cdFx0XHR9ID0geWllbGQgcmFjZSh7XG5cdFx0XHRcdGNhc1YxQWN0aW9uOiB0YWtlKEFVVEhfQ0FTX1YxX0xPR0lOX1JFUVVFU1RfQUNUSU9OX1RZUEUuQ0FTX1YxX0xPR0lOX1JFUVVFU1QpLFxuXHRcdFx0XHRsb2NhbExvZ2luQWN0aW9uOiB0YWtlKEFVVEhfTE9DQUxfTE9HSU5fUkVRVUVTVF9BQ1RJT05fVFlQRS5MT0NBTF9MT0dJTl9SRVFVRVNUKSxcblx0XHRcdFx0cGtjZUxvZ2luQWN0aW9uOiB0YWtlKEFVVEhfUEtDRV9MT0dJTl9SRVFVRVNUX0FDVElPTl9UWVBFLlBLQ0VfTE9HSU5fUkVRVUVTVClcblx0XHRcdH0pXG5cblx0XHRcdHlpZWxkIHB1dDxBdXRoQWN0aW9uPih7IHR5cGU6IEFVVEhfQUNUSU9OX1RZUEUuTE9HSU5fUkVRVUVTVEVEIH0pXG5cdFx0XHRpZiAoY2FzVjFBY3Rpb24pIHtcblx0XHRcdFx0b2F1dGhUb2tlbiA9IHlpZWxkIGNhbGwoY2FzVjFMb2dpbkZsb3csIGNhc1YxQWN0aW9uKVxuXHRcdFx0fSBlbHNlIGlmIChsb2NhbExvZ2luQWN0aW9uKSB7XG5cdFx0XHRcdG9hdXRoVG9rZW4gPSB5aWVsZCBjYWxsKGxvY2FsTG9naW5GbG93LCBsb2NhbExvZ2luQWN0aW9uKVxuXHRcdFx0fSBlbHNlIGlmIChwa2NlTG9naW5BY3Rpb24pIHtcblx0XHRcdFx0Ly8gb2F1dGhUb2tlbiBpcyBub3QgcmV0dXJuZWQgaGVyZSwgYXMgdGhpcyBmbG93IHdpbGwgcmVzdWx0IGluIGEgd2luZG93IHJlZGlyZWN0XG5cdFx0XHRcdHlpZWxkIGNhbGwocGtjZUxvZ2luRmxvdywgcGtjZUxvZ2luQWN0aW9uKVxuXHRcdFx0XHQvLyBicmVhayBleGVjdXRpb25cblx0XHRcdFx0cmV0dXJuXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKG9hdXRoVG9rZW4pIHtcblx0XHRcdHlpZWxkIGFsbCh7XG5cdFx0XHRcdHBlcnNpc3RUb2tlbjogY2FsbChhdXRoUGVyc2lzdGVuY2VTZXJ2aWNlLnBlcnNpc3RUb2tlbiwgb2F1dGhUb2tlbiksXG5cdFx0XHRcdGxvZ2luU3VjY2VzczogcHV0PEF1dGhUb2tlblN1Y2Nlc3NBY3Rpb24+KHtcblx0XHRcdFx0XHR0eXBlOiBBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUuR0VUX1RPS0VOX1NVQ0NFRURFRCxcblx0XHRcdFx0XHRvYXV0aFRva2VuXG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXG5cdFx0XHQvLyBzdGFydCBub24tYmxvY2tpbmcgcmVmcmVzaCBsb29wXG5cdFx0XHRjb25zdCByZWZyZXNoTG9vcFRhc2s6IFRhc2sgPSB5aWVsZCBmb3JrKHJlZnJlc2hMb29wKVxuXG5cdFx0XHQvLyBpZiB1c2VyIGxvZ3Mgb3V0IG9yIHRva2VuIGV4cGlyZXMsIGNhbmNlbCB0aGUgcmVmcmVzaCBsb29wXG5cdFx0XHR5aWVsZCB0YWtlKEFVVEhfTE9HX09VVF9BQ1RJT05fVFlQRS5MT0dfT1VUKVxuXHRcdFx0eWllbGQgY2FuY2VsKHJlZnJlc2hMb29wVGFzaylcblx0XHR9IGVsc2Uge1xuXHRcdFx0eWllbGQgcHV0PEF1dGhBY3Rpb24+KHsgdHlwZTogQVVUSF9BQ1RJT05fVFlQRS5MT0dJTl9GQUlMRUQgfSlcblx0XHR9XG5cblx0XHR5aWVsZCBjYWxsKHJlc2V0RGF0YSlcblx0XHRvYXV0aFRva2VuID0gbnVsbFxuXHR9IHdoaWxlICh0cnVlKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxlQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxLQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxjQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFVQSxJQUFBTSxLQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxLQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxPQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxJQUFBLEdBQUFWLE9BQUE7QUFD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QkFBZ0IsRUFBRSxJQUFBbEosYUFBSSxFQUFDc0osNkNBQW9DLENBQUNDLG1CQUFtQixDQUFDO1VBQ2hGSixlQUFlLEVBQUUsSUFBQW5KLGFBQUksRUFBQ3dKLDRDQUFtQyxDQUFDQyxrQkFBa0I7UUFDN0UsQ0FBQyxDQUFDO1FBRUYsTUFBTSxJQUFBbkssWUFBRyxFQUFhO1VBQUVDLElBQUksRUFBRWdELHlCQUFnQixDQUFDbUg7UUFBZ0IsQ0FBQyxDQUFDO1FBQ2pFLElBQUlULFdBQVcsRUFBRTtVQUNoQi9HLFVBQVUsR0FBRyxNQUFNLElBQUEzQixhQUFJLEVBQUNzRCxjQUFjLEVBQUVvRixXQUFXLENBQUM7UUFDckQsQ0FBQyxNQUFNLElBQUlDLGdCQUFnQixFQUFFO1VBQzVCaEgsVUFBVSxHQUFHLE1BQU0sSUFBQTNCLGFBQUksRUFBQ3VELGNBQWMsRUFBRW9GLGdCQUFnQixDQUFDO1FBQzFELENBQUMsTUFBTSxJQUFJQyxlQUFlLEVBQUU7VUFDM0I7VUFDQSxNQUFNLElBQUE1SSxhQUFJLEVBQUM0RCxhQUFhLEVBQUVnRixlQUFlLENBQUM7VUFDMUM7VUFDQTtRQUNEO01BQ0Q7TUFFQSxJQUFJakgsVUFBVSxFQUFFO1FBQ2YsTUFBTSxJQUFBZSxZQUFHLEVBQUM7VUFDVEQsWUFBWSxFQUFFLElBQUF6QyxhQUFJLEVBQUNqQyxzQkFBc0IsQ0FBQzBFLFlBQVksRUFBRWQsVUFBVSxDQUFDO1VBQ25FeUgsWUFBWSxFQUFFLElBQUFySyxZQUFHLEVBQXlCO1lBQ3pDQyxJQUFJLEVBQUU2Qyx1Q0FBOEIsQ0FBQ3dILG1CQUFtQjtZQUN4RDFIO1VBQ0QsQ0FBQztRQUNGLENBQUMsQ0FBQzs7UUFFRjtRQUNBLE1BQU0ySCxlQUFxQixHQUFHLE1BQU0sSUFBQUMsYUFBSSxFQUFDNUQsV0FBVyxDQUFDOztRQUVyRDtRQUNBLE1BQU0sSUFBQWxHLGFBQUksRUFBQ21ELGlDQUF3QixDQUFDQyxPQUFPLENBQUM7UUFDNUMsTUFBTSxJQUFBMkcsZUFBTSxFQUFDRixlQUFlLENBQUM7TUFDOUIsQ0FBQyxNQUFNO1FBQ04sTUFBTSxJQUFBdkssWUFBRyxFQUFhO1VBQUVDLElBQUksRUFBRWdELHlCQUFnQixDQUFDeUg7UUFBYSxDQUFDLENBQUM7TUFDL0Q7TUFFQSxNQUFNLElBQUF6SixhQUFJLEVBQUN1RixTQUFTLENBQUM7TUFDckI1RCxVQUFVLEdBQUcsSUFBSTtJQUNsQixDQUFDLFFBQVEsSUFBSTtFQUNkLENBQUM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
package/package.json
CHANGED