@quantiya/codevibe-claude-plugin 1.0.8 → 1.0.9
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/.claude-plugin/plugin.json +2 -2
- package/README.md +3 -3
- package/dist/server.d.ts +8 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +27 -20
- package/dist/server.js.map +1 -1
- package/node_modules/@quantiya/codevibe-core/dist/appsync/appsync-client.js +6 -5
- package/node_modules/@quantiya/codevibe-core/dist/auth/auth-service.d.ts +35 -1
- package/node_modules/@quantiya/codevibe-core/dist/auth/auth-service.js +164 -10
- package/node_modules/@quantiya/codevibe-core/dist/auth/fetch-helpers.d.ts +11 -0
- package/node_modules/@quantiya/codevibe-core/dist/auth/fetch-helpers.js +165 -0
- package/node_modules/@quantiya/codevibe-core/package.json +1 -1
- package/package.json +7 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codevibe-claude",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Sync Claude Code sessions with iOS mobile app via AWS backend. Control Claude Code from your
|
|
3
|
+
"version": "1.0.9",
|
|
4
|
+
"description": "Sync Claude Code sessions with iOS mobile app via AWS backend. Control Claude Code from your phone with real-time bidirectional synchronization.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "CodeVibe Team"
|
|
7
7
|
},
|
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# CodeVibe Claude Plugin
|
|
2
2
|
|
|
3
|
-
Control Claude Code from your
|
|
3
|
+
Control Claude Code from your phone with real-time bidirectional synchronization. This plugin enables seamless communication between your desktop Claude Code sessions and the CodeVibe mobile app.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- **Real-time Sync** - See desktop conversations on mobile instantly (~100-500ms latency)
|
|
8
|
-
- **Mobile Control** - Send prompts from your
|
|
8
|
+
- **Mobile Control** - Send prompts from your phone that execute in the correct desktop session
|
|
9
9
|
- **Locked Screen Support** - Works even when your Mac screen is locked (via tmux)
|
|
10
10
|
- **Interactive Prompts** - Answer permission dialogs with numbered options (1=Yes, 2=Yes for project, 3=Reject)
|
|
11
11
|
- **Voice Input** - Dictate prompts using iOS speech-to-text
|
|
@@ -133,7 +133,7 @@ From the iOS app:
|
|
|
133
133
|
|
|
134
134
|
### Responding to Permission Prompts from Mobile
|
|
135
135
|
|
|
136
|
-
When Claude needs permission to edit or write files, you can respond directly from your
|
|
136
|
+
When Claude needs permission to edit or write files, you can respond directly from your phone.
|
|
137
137
|
|
|
138
138
|
**Available Options:**
|
|
139
139
|
|
package/dist/server.d.ts
CHANGED
|
@@ -1,2 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Parse interactive prompt input — exported for testing
|
|
3
|
+
*/
|
|
4
|
+
export declare function parseInteractivePromptInput(content: string, optionCount?: number): {
|
|
5
|
+
action: 'select_option' | 'option_with_followup' | 'send_as_response';
|
|
6
|
+
option?: string;
|
|
7
|
+
followUpText?: string;
|
|
8
|
+
};
|
|
2
9
|
//# sourceMappingURL=server.d.ts.map
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AA4uCA;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,MAAU,GAAG;IACrF,MAAM,EAAE,eAAe,GAAG,sBAAsB,GAAG,kBAAkB,CAAC;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAwBA"}
|
package/dist/server.js
CHANGED
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.parseInteractivePromptInput = parseInteractivePromptInput;
|
|
36
37
|
const fs = __importStar(require("fs"));
|
|
37
38
|
const path = __importStar(require("path"));
|
|
38
39
|
const os = __importStar(require("os"));
|
|
@@ -743,26 +744,7 @@ class McpServer {
|
|
|
743
744
|
* - anything else → send as free-form response
|
|
744
745
|
*/
|
|
745
746
|
parseInteractivePromptInput(content, optionCount = 3) {
|
|
746
|
-
|
|
747
|
-
// Check for exact option number (e.g., "1", "2", "3")
|
|
748
|
-
const exactMatch = trimmed.match(/^(\d+)$/);
|
|
749
|
-
if (exactMatch) {
|
|
750
|
-
const num = parseInt(exactMatch[1]);
|
|
751
|
-
if (num >= 1 && num <= optionCount) {
|
|
752
|
-
return { action: 'select_option', option: exactMatch[1] };
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
// Check for "N <text>", "N,<text>", "N.<text>", "N\n<text>" pattern (option + follow-up)
|
|
756
|
-
// Supports separators: whitespace, comma, period, semicolon, colon, dash, or combinations
|
|
757
|
-
const withTextMatch = trimmed.match(/^(\d+)[,.:;\-\s\n]+(.+)$/s);
|
|
758
|
-
if (withTextMatch) {
|
|
759
|
-
const num = parseInt(withTextMatch[1]);
|
|
760
|
-
if (num >= 1 && num <= optionCount) {
|
|
761
|
-
return { action: 'option_with_followup', option: withTextMatch[1], followUpText: withTextMatch[2].trim() };
|
|
762
|
-
}
|
|
763
|
-
}
|
|
764
|
-
// Anything else — send as free-form response
|
|
765
|
-
return { action: 'send_as_response' };
|
|
747
|
+
return parseInteractivePromptInput(content, optionCount);
|
|
766
748
|
}
|
|
767
749
|
/**
|
|
768
750
|
* Helper to mark an event as EXECUTED
|
|
@@ -1147,6 +1129,31 @@ async function main() {
|
|
|
1147
1129
|
process.exit(1);
|
|
1148
1130
|
}
|
|
1149
1131
|
}
|
|
1132
|
+
/**
|
|
1133
|
+
* Parse interactive prompt input — exported for testing
|
|
1134
|
+
*/
|
|
1135
|
+
function parseInteractivePromptInput(content, optionCount = 3) {
|
|
1136
|
+
const trimmed = content.trim();
|
|
1137
|
+
// Check for exact option number (e.g., "1", "2", "3")
|
|
1138
|
+
const exactMatch = trimmed.match(/^(\d+)$/);
|
|
1139
|
+
if (exactMatch) {
|
|
1140
|
+
const num = parseInt(exactMatch[1]);
|
|
1141
|
+
if (num >= 1 && num <= optionCount) {
|
|
1142
|
+
return { action: 'select_option', option: exactMatch[1] };
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
// Check for "N <text>", "N,<text>", "N.<text>", "N\n<text>" pattern (option + follow-up)
|
|
1146
|
+
// Supports separators: whitespace, comma, period, semicolon, colon, dash, or combinations
|
|
1147
|
+
const withTextMatch = trimmed.match(/^(\d+)[,.:;\-\s\n]+(.+)$/s);
|
|
1148
|
+
if (withTextMatch) {
|
|
1149
|
+
const num = parseInt(withTextMatch[1]);
|
|
1150
|
+
if (num >= 1 && num <= optionCount) {
|
|
1151
|
+
return { action: 'option_with_followup', option: withTextMatch[1], followUpText: withTextMatch[2].trim() };
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
// Anything else — send as free-form response
|
|
1155
|
+
return { action: 'send_as_response' };
|
|
1156
|
+
}
|
|
1150
1157
|
// Start the server
|
|
1151
1158
|
main().catch((error) => {
|
|
1152
1159
|
logger_1.logger.error('Unhandled error in main:', error);
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ const uuid_1 = require("uuid");
|
|
|
15
15
|
const config_1 = require("../config");
|
|
16
16
|
const logger_1 = require("../logger");
|
|
17
17
|
const keychain_1 = require("../keychain");
|
|
18
|
+
const fetch_helpers_1 = require("../auth/fetch-helpers");
|
|
18
19
|
const queries_1 = require("./queries");
|
|
19
20
|
const types_1 = require("../types");
|
|
20
21
|
/**
|
|
@@ -113,11 +114,11 @@ class AppSyncClient {
|
|
|
113
114
|
client_id: config.aws.cognitoClientId,
|
|
114
115
|
refresh_token: tokens.refreshToken,
|
|
115
116
|
});
|
|
116
|
-
const response = await
|
|
117
|
+
const response = await (0, fetch_helpers_1.fetchWithDiagnostics)(tokenUrl, {
|
|
117
118
|
method: 'POST',
|
|
118
119
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
119
120
|
body: params.toString(),
|
|
120
|
-
});
|
|
121
|
+
}, 'Token refresh');
|
|
121
122
|
if (!response.ok) {
|
|
122
123
|
logger_1.logger.error('[AppSyncClient] Token refresh failed', { status: response.status });
|
|
123
124
|
return false;
|
|
@@ -170,11 +171,11 @@ class AppSyncClient {
|
|
|
170
171
|
'Content-Type': 'application/json',
|
|
171
172
|
'Authorization': this.tokens.idToken,
|
|
172
173
|
};
|
|
173
|
-
const response = await
|
|
174
|
+
const response = await (0, fetch_helpers_1.fetchWithDiagnostics)(config.aws.appsyncUrl, {
|
|
174
175
|
method: 'POST',
|
|
175
176
|
headers,
|
|
176
177
|
body: JSON.stringify({ query, variables }),
|
|
177
|
-
});
|
|
178
|
+
}, 'AppSync GraphQL request');
|
|
178
179
|
const result = await response.json();
|
|
179
180
|
// Handle 401 with token refresh
|
|
180
181
|
if (response.status === 401 && !isRetry && this.tokens) {
|
|
@@ -572,4 +573,4 @@ class AppSyncClient {
|
|
|
572
573
|
}
|
|
573
574
|
}
|
|
574
575
|
exports.AppSyncClient = AppSyncClient;
|
|
575
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwc3luYy1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwc3luYy9hcHBzeW5jLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQixnQkFBZ0I7QUFDaEIsRUFBRTtBQUNGLDhEQUE4RDtBQUM5RCxFQUFFOzs7Ozs7QUFFRiw0Q0FBMkI7QUFDM0IsK0JBQW9DO0FBQ3BDLHNDQUFzRDtBQUN0RCxzQ0FBbUM7QUFDbkMsMENBQThDO0FBQzlDLHVDQUE4RDtBQUM5RCxvQ0FVa0I7QUF5QmxCOzs7O0dBSUc7QUFDSCxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLGlCQUFpQixFQUFFLEVBQUU7SUFDckIsV0FBVyxFQUFFLElBQUk7SUFDakIsVUFBVSxFQUFFLEtBQUs7SUFDakIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxZQUFZO0NBQy9DLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQWEsYUFBYTtJQVF4QjtRQVBRLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLGtCQUFhLEdBQWtCLElBQUksQ0FBQztRQUNwQyxpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFDbkMsV0FBTSxHQUFxQixJQUFJLENBQUM7UUFDaEMsd0JBQW1CLEdBQW1DLElBQUksR0FBRyxFQUFFLENBQUM7UUE2akJ4RSxvQkFBb0I7UUFFWixvQkFBZSxHQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBM2pCL0QsMEVBQTBFO1FBQzFFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBQSx1QkFBYyxHQUFFLENBQUM7UUFDcEMsZUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIs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ZSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQzFDLENBQUMsQ0FBQztZQUNILGVBQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0I7UUFDekIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVqQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUEvbkJELHNDQStuQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLy8gYXBwc3luYy1jbGllbnQudHNcbi8vIENvZGVWaWJlIENvcmVcbi8vXG4vLyBHcmFwaFFMIGNsaWVudCBmb3IgQVdTIEFwcFN5bmMgd2l0aCBXZWJTb2NrZXQgc3Vic2NyaXB0aW9uc1xuLy9cblxuaW1wb3J0IFdlYlNvY2tldCBmcm9tICd3cyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGdldENvbmZpZywgZ2V0RW52aXJvbm1lbnQgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IGtleWNoYWluTWFuYWdlciB9IGZyb20gJy4uL2tleWNoYWluJztcbmltcG9ydCB7IHF1ZXJpZXMsIG11dGF0aW9ucywgc3Vic2NyaXB0aW9ucyB9IGZyb20gJy4vcXVlcmllcyc7XG5pbXBvcnQge1xuICBDcmVhdGVFdmVudElucHV0LFxuICBDcmVhdGVTZXNzaW9uSW5wdXQsXG4gIFVwZGF0ZVNlc3Npb25JbnB1dCxcbiAgVXBkYXRlRXZlbnRTdGF0dXNJbnB1dCxcbiAgRXZlbnQsXG4gIFNlc3Npb24sXG4gIEV2ZW50U291cmNlLFxuICBEZXZpY2VLZXksXG4gIFRva2VuRGF0YSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIERvd25sb2FkIFVSTCByZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvd25sb2FkVXJsUmVzcG9uc2Uge1xuICBkb3dubG9hZFVybDogc3RyaW5nO1xuICBleHBpcmVzQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdWJzY3JpcHRpb24gc3RhdGUgZm9yIHJlY29ubmVjdGlvblxuICovXG5pbnRlcmZhY2UgU3Vic2NyaXB0aW9uU3RhdGUge1xuICB3czogV2ViU29ja2V0IHwgbnVsbDtcbiAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIG9uRXZlbnQ6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICByZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyO1xuICByZWNvbm5lY3RUaW1lcj86IE5vZGVKUy5UaW1lb3V0O1xuICBpc1JlY29ubmVjdGluZzogYm9vbGVhbjtcbiAga2VlcEFsaXZlVGltZXI/OiBOb2RlSlMuVGltZW91dDtcbn1cblxuLyoqXG4gKiBSZWNvbm5lY3Rpb24gY29uZmlndXJhdGlvbiDigJQgdHdvLXBoYXNlIHN0cmF0ZWd5OlxuICogUGhhc2UgMSAodXJnZW50KTogRXhwb25lbnRpYWwgYmFja29mZiAxcyDihpIgNjBzIGZvciBmaXJzdCAxMCBhdHRlbXB0c1xuICogUGhhc2UgMiAocGVyc2lzdGVudCk6IFJldHJ5IGV2ZXJ5IDUgbWludXRlcyBpbmRlZmluaXRlbHlcbiAqL1xuY29uc3QgUkVDT05ORUNUX0NPTkZJRyA9IHtcbiAgdXJnZW50TWF4QXR0ZW1wdHM6IDEwLFxuICBiYXNlRGVsYXlNczogMTAwMCxcbiAgbWF4RGVsYXlNczogNjAwMDAsXG4gIGJhY2tvZmZNdWx0aXBsaWVyOiAyLFxuICBwZXJzaXN0ZW50RGVsYXlNczogNSAqIDYwICogMTAwMCwgLy8gNSBtaW51dGVzXG59O1xuXG4vKipcbiAqIEFwcFN5bmMgR3JhcGhRTCBjbGllbnQgd2l0aCBXZWJTb2NrZXQgc3Vic2NyaXB0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgQXBwU3luY0NsaWVudCB7XG4gIHByaXZhdGUgYXV0aGVudGljYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJlbnRVc2VySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1cnJlbnRFbWFpbDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdG9rZW5zOiBUb2tlbkRhdGEgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBhY3RpdmVTdWJzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBTdWJzY3JpcHRpb25TdGF0ZT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgZW52aXJvbm1lbnQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBHZXQgZW52aXJvbm1lbnQgZnJvbSBjZW50cmFsaXplZCBjb25maWcgKHJlYWRzIHByb2Nlc3MuZW52LkVOVklST05NRU5UKVxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBnZXRFbnZpcm9ubWVudCgpO1xuICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gSW5pdGlhbGl6ZWQnLCB7IGVudmlyb25tZW50OiB0aGlzLmVudmlyb25tZW50IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBhdXRoZW50aWNhdGVkIHVzZXIgSURcbiAgICovXG4gIHB1YmxpYyBnZXRDdXJyZW50VXNlcklkKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRVc2VySWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGF1dGhlbnRpY2F0ZWQuIENhbGwgYXV0aGVudGljYXRlV2l0aFN0b3JlZFRva2VucygpIGZpcnN0LicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlcklkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBhdXRoZW50aWNhdGVkIHVzZXIgZW1haWxcbiAgICovXG4gIHB1YmxpYyBnZXRDdXJyZW50VXNlckVtYWlsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRFbWFpbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGUgdXNpbmcgc3RvcmVkIE9BdXRoIHRva2VucyBmcm9tIGtleWNoYWluXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aGVudGljYXRlV2l0aFN0b3JlZFRva2VucygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQga2V5Y2hhaW5NYW5hZ2VyLmdldFRva2Vucyh0aGlzLmVudmlyb25tZW50KTtcbiAgICAgIGlmICghdG9rZW5zKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnW0FwcFN5bmNDbGllbnRdIE5vIHN0b3JlZCB0b2tlbnMgZm91bmQnKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIEZvdW5kIHN0b3JlZCBPQXV0aCB0b2tlbnMnLCB7XG4gICAgICAgIHVzZXJJZDogdG9rZW5zLnVzZXJJZCxcbiAgICAgICAgZW1haWw6IHRva2Vucy5lbWFpbCxcbiAgICAgICAgZXhwaXJlZDoga2V5Y2hhaW5NYW5hZ2VyLmlzVG9rZW5FeHBpcmVkKHRva2VucyksXG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgdG9rZW5zIGFyZSBleHBpcmVkLCB0cnkgdG8gcmVmcmVzaCB0aGVtXG4gICAgICBpZiAoa2V5Y2hhaW5NYW5hZ2VyLmlzVG9rZW5FeHBpcmVkKHRva2VucykpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBUb2tlbnMgZXhwaXJlZCwgYXR0ZW1wdGluZyByZWZyZXNoLi4uJyk7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2Vucyh0b2tlbnMpO1xuICAgICAgICBpZiAoIXJlZnJlc2hlZCkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdbQXBwU3luY0NsaWVudF0gVG9rZW4gcmVmcmVzaCBmYWlsZWQnKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnRVc2VySWQgPSB0aGlzLnRva2VucyEudXNlcklkO1xuICAgICAgdGhpcy5jdXJyZW50RW1haWwgPSB0aGlzLnRva2VucyEuZW1haWw7XG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSB0cnVlO1xuXG4gICAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIEF1dGhlbnRpY2F0ZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICB1c2VySWQ6IHRoaXMuY3VycmVudFVzZXJJZCxcbiAgICAgICAgZW1haWw6IHRoaXMuY3VycmVudEVtYWlsLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tBcHBTeW5jQ2xpZW50XSBBdXRoZW50aWNhdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIGV4cGlyZWQgdG9rZW5zXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hUb2tlbnModG9rZW5zOiBUb2tlbkRhdGEpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICBjb25zdCB0b2tlblVybCA9IGBodHRwczovLyR7Y29uZmlnLmF3cy5jb2duaXRvRG9tYWlufS9vYXV0aDIvdG9rZW5gO1xuXG4gICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICBjbGllbnRfaWQ6IGNvbmZpZy5hd3MuY29nbml0b0NsaWVudElkLFxuICAgICAgICByZWZyZXNoX3Rva2VuOiB0b2tlbnMucmVmcmVzaFRva2VuLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godG9rZW5VcmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH0sXG4gICAgICAgIGJvZHk6IHBhcmFtcy50b1N0cmluZygpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdbQXBwU3luY0NsaWVudF0gVG9rZW4gcmVmcmVzaCBmYWlsZWQnLCB7IHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMge1xuICAgICAgICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgICAgICAgaWRfdG9rZW46IHN0cmluZztcbiAgICAgICAgZXhwaXJlc19pbjogbnVtYmVyO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgdXBkYXRlZFRva2VuczogVG9rZW5EYXRhID0ge1xuICAgICAgICAuLi50b2tlbnMsXG4gICAgICAgIGFjY2Vzc1Rva2VuOiBkYXRhLmFjY2Vzc190b2tlbixcbiAgICAgICAgaWRUb2tlbjogZGF0YS5pZF90b2tlbixcbiAgICAgICAgZXhwaXJlc0F0OiBEYXRlLm5vdygpICsgKGRhdGEuZXhwaXJlc19pbiAqIDEwMDApLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQga2V5Y2hhaW5NYW5hZ2VyLnNldFRva2Vucyh1cGRhdGVkVG9rZW5zLCB0aGlzLmVudmlyb25tZW50KTtcbiAgICAgIHRoaXMudG9rZW5zID0gdXBkYXRlZFRva2VucztcblxuICAgICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBUb2tlbnMgcmVmcmVzaGVkJywge1xuICAgICAgICBleHBpcmVzQXQ6IG5ldyBEYXRlKHVwZGF0ZWRUb2tlbnMuZXhwaXJlc0F0KS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1tBcHBTeW5jQ2xpZW50XSBUb2tlbiByZWZyZXNoIGVycm9yOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYXV0aGVudGljYXRlZFxuICAgKi9cbiAgcHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gb3V0XG4gICAqL1xuICBwdWJsaWMgc2lnbk91dCgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnRva2VucyA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50VXNlcklkID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRFbWFpbCA9IG51bGw7XG4gICAgdGhpcy5jbGVhbnVwU3Vic2NyaXB0aW9ucygpO1xuICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gU2lnbmVkIG91dCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYSBHcmFwaFFMIHJlcXVlc3RcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ3JhcGhxbFJlcXVlc3QocXVlcnk6IHN0cmluZywgdmFyaWFibGVzOiBhbnksIGlzUmV0cnk6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG5cbiAgICBpZiAoIXRoaXMudG9rZW5zPy5pZFRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhdXRoZW50aWNhdGVkLiBSdW4gXCJjb2RldmliZSBsb2dpblwiIGZpcnN0LicpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgJ0F1dGhvcml6YXRpb24nOiB0aGlzLnRva2Vucy5pZFRva2VuLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGNvbmZpZy5hd3MuYXBwc3luY1VybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBxdWVyeSwgdmFyaWFibGVzIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHsgZGF0YT86IGFueTsgZXJyb3JzPzogQXJyYXk8eyBtZXNzYWdlOiBzdHJpbmcgfT4gfTtcblxuICAgIC8vIEhhbmRsZSA0MDEgd2l0aCB0b2tlbiByZWZyZXNoXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmICFpc1JldHJ5ICYmIHRoaXMudG9rZW5zKSB7XG4gICAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIDQwMSBVbmF1dGhvcml6ZWQsIHJlZnJlc2hpbmcgdG9rZW4uLi4nKTtcbiAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2Vucyh0aGlzLnRva2Vucyk7XG4gICAgICBpZiAocmVmcmVzaGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyYXBocWxSZXF1ZXN0KHF1ZXJ5LCB2YXJpYWJsZXMsIHRydWUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUb2tlbiBleHBpcmVkIGFuZCByZWZyZXNoIGZhaWxlZCcpO1xuICAgIH1cblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgR3JhcGhRTCByZXF1ZXN0IGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3VsdC5lcnJvcnM/Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yOiAke3Jlc3VsdC5lcnJvcnNbMF0ubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gTUFSSzogLSBTZXNzaW9uIE9wZXJhdGlvbnNcblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2Vzc2lvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZVNlc3Npb24oaW5wdXQ6IENyZWF0ZVNlc3Npb25JbnB1dCk6IFByb21pc2U8U2Vzc2lvbj4ge1xuICAgIGNvbnN0IHByZXBhcmVkSW5wdXQgPSB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIG1ldGFkYXRhOiBpbnB1dC5tZXRhZGF0YSA/IEpTT04uc3RyaW5naWZ5KGlucHV0Lm1ldGFkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdyYXBocWxSZXF1ZXN0KG11dGF0aW9ucy5jcmVhdGVTZXNzaW9uLCB7IGlucHV0OiBwcmVwYXJlZElucHV0IH0pO1xuICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gU2Vzc2lvbiBjcmVhdGVkJywgeyBzZXNzaW9uSWQ6IHJlc3BvbnNlLmRhdGEuY3JlYXRlU2Vzc2lvbi5zZXNzaW9uSWQgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuY3JlYXRlU2Vzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBzZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdXBkYXRlU2Vzc2lvbihpbnB1dDogVXBkYXRlU2Vzc2lvbklucHV0KTogUHJvbWlzZTxTZXNzaW9uPiB7XG4gICAgY29uc3QgcHJlcGFyZWRJbnB1dCA9IHtcbiAgICAgIC4uLmlucHV0LFxuICAgICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhID8gSlNPTi5zdHJpbmdpZnkoaW5wdXQubWV0YWRhdGEpIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3QobXV0YXRpb25zLnVwZGF0ZVNlc3Npb24sIHsgaW5wdXQ6IHByZXBhcmVkSW5wdXQgfSk7XG4gICAgbG9nZ2VyLmRlYnVnKCdbQXBwU3luY0NsaWVudF0gU2Vzc2lvbiB1cGRhdGVkJywgeyBzZXNzaW9uSWQ6IHJlc3BvbnNlLmRhdGEudXBkYXRlU2Vzc2lvbi5zZXNzaW9uSWQgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEudXBkYXRlU2Vzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8U2Vzc2lvbiB8IG51bGw+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3QocXVlcmllcy5nZXRTZXNzaW9uLCB7IHNlc3Npb25JZCB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5nZXRTZXNzaW9uO1xuICB9XG5cbiAgLy8gTUFSSzogLSBFdmVudCBPcGVyYXRpb25zXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBldmVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUV2ZW50KGlucHV0OiBDcmVhdGVFdmVudElucHV0KTogUHJvbWlzZTxFdmVudD4ge1xuICAgIGNvbnN0IHByZXBhcmVkSW5wdXQgPSB7XG4gICAgICAuLi5pbnB1dCxcbiAgICAgIG1ldGFkYXRhOiBpbnB1dC5tZXRhZGF0YSA/IEpTT04uc3RyaW5naWZ5KGlucHV0Lm1ldGFkYXRhKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdyYXBocWxSZXF1ZXN0KG11dGF0aW9ucy5jcmVhdGVFdmVudCwgeyBpbnB1dDogcHJlcGFyZWRJbnB1dCB9KTtcbiAgICBsb2dnZXIuZGVidWcoJ1tBcHBTeW5jQ2xpZW50XSBFdmVudCBjcmVhdGVkJywge1xuICAgICAgZXZlbnRJZDogcmVzcG9uc2UuZGF0YS5jcmVhdGVFdmVudC5ldmVudElkLFxuICAgICAgdHlwZTogcmVzcG9uc2UuZGF0YS5jcmVhdGVFdmVudC50eXBlLFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmNyZWF0ZUV2ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBldmVudCBzdGF0dXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVFdmVudFN0YXR1cyhpbnB1dDogVXBkYXRlRXZlbnRTdGF0dXNJbnB1dCk6IFByb21pc2U8RXZlbnQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3QobXV0YXRpb25zLnVwZGF0ZUV2ZW50U3RhdHVzLCB7IGlucHV0IH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhLnVwZGF0ZUV2ZW50U3RhdHVzO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3QgZXZlbnRzIGZvciBhIHNlc3Npb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0RXZlbnRzKHNlc3Npb25JZDogc3RyaW5nLCBzb3VyY2U/OiBFdmVudFNvdXJjZSwgbGltaXQ/OiBudW1iZXIpOiBQcm9taXNlPEV2ZW50W10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3QocXVlcmllcy5saXN0RXZlbnRzLCB7IHNlc3Npb25JZCwgc291cmNlLCBsaW1pdCB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5saXN0RXZlbnRzLml0ZW1zO1xuICB9XG5cbiAgLy8gTUFSSzogLSBEZXZpY2UgS2V5IE9wZXJhdGlvbnNcblxuICAvKipcbiAgICogTGlzdCB1c2VyIGRldmljZSBrZXlzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdFVzZXJEZXZpY2VLZXlzKCk6IFByb21pc2U8RGV2aWNlS2V5W10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3QocXVlcmllcy5saXN0VXNlckRldmljZUtleXMsIHt9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5saXN0VXNlckRldmljZUtleXMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgZGV2aWNlIGtleVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZ2lzdGVyRGV2aWNlS2V5KFxuICAgIGRldmljZUlkOiBzdHJpbmcsXG4gICAgcHVibGljS2V5OiBzdHJpbmcsXG4gICAgcGxhdGZvcm06IHN0cmluZyxcbiAgICBkZXZpY2VOYW1lOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5wdXQgPSB7IGRldmljZUlkLCBwdWJsaWNLZXksIHBsYXRmb3JtLCBkZXZpY2VOYW1lIH07XG4gICAgYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdChtdXRhdGlvbnMucmVnaXN0ZXJEZXZpY2VLZXksIHsgaW5wdXQgfSk7XG4gICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBEZXZpY2Uga2V5IHJlZ2lzdGVyZWQnLCB7IGRldmljZUlkLCBwbGF0Zm9ybSB9KTtcbiAgfVxuXG4gIC8vIE1BUks6IC0gQXR0YWNobWVudCBPcGVyYXRpb25zXG5cbiAgLyoqXG4gICAqIEdldCBhdHRhY2htZW50IGRvd25sb2FkIFVSTFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnREb3dubG9hZFVybChzM0tleTogc3RyaW5nKTogUHJvbWlzZTxEb3dubG9hZFVybFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdyYXBocWxSZXF1ZXN0KG11dGF0aW9ucy5nZXRBdHRhY2htZW50RG93bmxvYWRVcmwsIHsgczNLZXkgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuZ2V0QXR0YWNobWVudERvd25sb2FkVXJsO1xuICB9XG5cbiAgLy8gTUFSSzogLSBTdWJzY3JpcHRpb25zXG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byBldmVudHMgZm9yIGEgc2Vzc2lvblxuICAgKi9cbiAgcHVibGljIHN1YnNjcmliZVRvRXZlbnRzKFxuICAgIHNlc3Npb25JZDogc3RyaW5nLFxuICAgIG9uRXZlbnQ6IChldmVudDogRXZlbnQpID0+IHZvaWQsXG4gICAgb25FcnJvcj86IChlcnJvcjogRXJyb3IpID0+IHZvaWRcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBTdWJzY3JpYmluZyB0byBldmVudHMnLCB7IHNlc3Npb25JZCB9KTtcblxuICAgIC8vIENsZWFudXAgZXhpc3Rpbmcgc3Vic2NyaXB0aW9uXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICB0aGlzLmNsZWFudXBTdWJzY3JpcHRpb25TdGF0ZShleGlzdGluZyk7XG4gICAgICB0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGU6IFN1YnNjcmlwdGlvblN0YXRlID0ge1xuICAgICAgd3M6IG51bGwsXG4gICAgICBzdWJzY3JpcHRpb25JZDogdXVpZHY0KCksXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBvbkV2ZW50LFxuICAgICAgb25FcnJvcixcbiAgICAgIHJlY29ubmVjdEF0dGVtcHRzOiAwLFxuICAgICAgaXNSZWNvbm5lY3Rpbmc6IGZhbHNlLFxuICAgIH07XG5cbiAgICB0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMuc2V0KHNlc3Npb25JZCwgc3RhdGUpO1xuICAgIHRoaXMuY3JlYXRlU3Vic2NyaXB0aW9uKHN0YXRlKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFudXBTdWJzY3JpcHRpb25TdGF0ZShzdGF0ZSk7XG4gICAgICB0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMuZGVsZXRlKHNlc3Npb25JZCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBXZWJTb2NrZXQgVVJMXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkUmVhbHRpbWVVcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBjb25zdCByZWFsdGltZVVybCA9IGNvbmZpZy5hd3MuYXBwc3luY1VybFxuICAgICAgLnJlcGxhY2UoJ2h0dHBzOi8vJywgJ3dzczovLycpXG4gICAgICAucmVwbGFjZSgnYXBwc3luYy1hcGknLCAnYXBwc3luYy1yZWFsdGltZS1hcGknKTtcblxuICAgIGNvbnN0IGF1dGhIZWFkZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBob3N0OiBuZXcgVVJMKGNvbmZpZy5hd3MuYXBwc3luY1VybCkuaG9zdCxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMudG9rZW5zPy5pZFRva2VuKSB7XG4gICAgICBhdXRoSGVhZGVyWydBdXRob3JpemF0aW9uJ10gPSB0aGlzLnRva2Vucy5pZFRva2VuO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlckJhc2U2NCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGF1dGhIZWFkZXIpKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgY29uc3QgcGF5bG9hZEJhc2U2NCA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHt9KSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgcmV0dXJuIGAke3JlYWx0aW1lVXJsfT9oZWFkZXI9JHtoZWFkZXJCYXNlNjR9JnBheWxvYWQ9JHtwYXlsb2FkQmFzZTY0fWA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIFdlYlNvY2tldCBzdWJzY3JpcHRpb25cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlU3Vic2NyaXB0aW9uKHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBzdWJzY3JpcHRpb25JZCwgb25FdmVudCwgb25FcnJvciB9ID0gc3RhdGU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgd3NVcmwgPSB0aGlzLmJ1aWxkUmVhbHRpbWVVcmwoKTtcbiAgICAgIGNvbnN0IHdzID0gbmV3IFdlYlNvY2tldCh3c1VybCwgWydncmFwaHFsLXdzJ10pO1xuXG4gICAgICB3cy5vbignb3BlbicsICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBXZWJTb2NrZXQgY29ubmVjdGVkJywgeyBzZXNzaW9uSWQgfSk7XG4gICAgICAgIHdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoeyB0eXBlOiAnY29ubmVjdGlvbl9pbml0JyB9KSk7XG4gICAgICB9KTtcblxuICAgICAgd3Mub24oJ21lc3NhZ2UnLCAoZGF0YTogV2ViU29ja2V0LkRhdGEpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gSlNPTi5wYXJzZShkYXRhLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Nvbm5lY3Rpb25fYWNrJzpcbiAgICAgICAgICAgICAgdGhpcy5zZW5kU3Vic2NyaXB0aW9uU3RhcnQod3MsIHN0YXRlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0X2Fjayc6XG4gICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gU3Vic2NyaXB0aW9uIHN0YXJ0ZWQnLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgICAgICAgICAgc3RhdGUuaXNSZWNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgc3RhdGUucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICAgICAgICAvLyBSZXN1bWUgaGVhcnRiZWF0IOKAlCBzdWJzY3JpcHRpb24gaXMgYWxpdmUgYW5kIGNhbiByZWNlaXZlIG1vYmlsZSBldmVudHNcbiAgICAgICAgICAgICAgdGhpcy5zdGFydEhlYXJ0YmVhdChzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgICAgICAgIHRoaXMucmVzZXRLZWVwQWxpdmVUaW1lcihzdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbWVzc2FnZS5wYXlsb2FkPy5kYXRhPy5vbkV2ZW50Q3JlYXRlZDtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LnNvdXJjZSA9PT0gRXZlbnRTb3VyY2UuTU9CSUxFKSB7XG4gICAgICAgICAgICAgICAgb25FdmVudChldmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2thJzpcbiAgICAgICAgICAgICAgdGhpcy5yZXNldEtlZXBBbGl2ZVRpbWVyKHN0YXRlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBtZXNzYWdlLnBheWxvYWQ/LmVycm9ycz8uWzBdPy5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yJztcbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTdWJzY3JpcHRpb25FcnJvcihzdGF0ZSwgbmV3IEVycm9yKGVycm9yTXNnKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignW0FwcFN5bmNDbGllbnRdIEZhaWxlZCB0byBwYXJzZSBtZXNzYWdlJywgeyBlcnJvcjogZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHdzLm9uKCdlcnJvcicsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdbQXBwU3luY0NsaWVudF0gV2ViU29ja2V0IGVycm9yJywgeyBzZXNzaW9uSWQsIGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICB0aGlzLmhhbmRsZVN1YnNjcmlwdGlvbkVycm9yKHN0YXRlLCBlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgd3Mub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlciwgcmVhc29uOiBCdWZmZXIpID0+IHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBXZWJTb2NrZXQgY2xvc2VkJywgeyBzZXNzaW9uSWQsIGNvZGUgfSk7XG4gICAgICAgIGlmIChzdGF0ZS5rZWVwQWxpdmVUaW1lcikge1xuICAgICAgICAgIGNsZWFyVGltZW91dChzdGF0ZS5rZWVwQWxpdmVUaW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVjb25uZWN0IGlmIHN1YnNjcmlwdGlvbiBpcyBzdGlsbCBhY3RpdmUgKG5vdCBpbnRlbnRpb25hbGx5IHN0b3BwZWQpLlxuICAgICAgICAvLyBJbmNsdWRlcyBjb2RlIDEwMDAg4oCUIEFwcFN5bmMgY2xvc2VzIFdlYlNvY2tldHMgYWZ0ZXIgMjQgaG91cnMgd2l0aFxuICAgICAgICAvLyBjb2RlIDEwMDAsIHdoaWNoIGlzIE5PVCBhbiBpbnRlbnRpb25hbCBzdG9wIGJ5IHRoZSBwbHVnaW4uXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMuaGFzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVN1YnNjcmlwdGlvbkVycm9yKHN0YXRlLCBuZXcgRXJyb3IoYFdlYlNvY2tldCBjbG9zZWQ6ICR7Y29kZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdGF0ZS53cyA9IHdzO1xuICAgICAgdGhpcy5yZXNldEtlZXBBbGl2ZVRpbWVyKHN0YXRlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5oYW5kbGVTdWJzY3JpcHRpb25FcnJvcihzdGF0ZSwgZXJyb3IgYXMgRXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHN1YnNjcmlwdGlvbiBzdGFydCBtZXNzYWdlXG4gICAqL1xuICBwcml2YXRlIHNlbmRTdWJzY3JpcHRpb25TdGFydCh3czogV2ViU29ja2V0LCBzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBjb25zdCB7IHNlc3Npb25JZCwgc3Vic2NyaXB0aW9uSWQgfSA9IHN0YXRlO1xuXG4gICAgY29uc3QgYXV0aEhlYWRlcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIGhvc3Q6IG5ldyBVUkwoY29uZmlnLmF3cy5hcHBzeW5jVXJsKS5ob3N0LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy50b2tlbnM/LmlkVG9rZW4pIHtcbiAgICAgIGF1dGhIZWFkZXJbJ0F1dGhvcml6YXRpb24nXSA9IHRoaXMudG9rZW5zLmlkVG9rZW47XG4gICAgfVxuXG4gICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICBpZDogc3Vic2NyaXB0aW9uSWQsXG4gICAgICB0eXBlOiAnc3RhcnQnLFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgcXVlcnk6IHN1YnNjcmlwdGlvbnMub25FdmVudENyZWF0ZWQsXG4gICAgICAgICAgdmFyaWFibGVzOiB7IHNlc3Npb25JZCB9LFxuICAgICAgICB9KSxcbiAgICAgICAgZXh0ZW5zaW9uczogeyBhdXRob3JpemF0aW9uOiBhdXRoSGVhZGVyIH0sXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBrZWVwLWFsaXZlIHRpbWVyXG4gICAqL1xuICBwcml2YXRlIHJlc2V0S2VlcEFsaXZlVGltZXIoc3RhdGU6IFN1YnNjcmlwdGlvblN0YXRlKTogdm9pZCB7XG4gICAgaWYgKHN0YXRlLmtlZXBBbGl2ZVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc3RhdGUua2VlcEFsaXZlVGltZXIpO1xuICAgIH1cbiAgICBzdGF0ZS5rZWVwQWxpdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVTdWJzY3JpcHRpb25FcnJvcihzdGF0ZSwgbmV3IEVycm9yKCdLZWVwLWFsaXZlIHRpbWVvdXQnKSk7XG4gICAgfSwgNSAqIDYwICogMTAwMCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHN1YnNjcmlwdGlvbiBlcnJvciB3aXRoIHR3by1waGFzZSByZWNvbm5lY3Rpb246XG4gICAqIFBoYXNlIDEgKHVyZ2VudCk6IEV4cG9uZW50aWFsIGJhY2tvZmYgZm9yIGZpcnN0IE4gYXR0ZW1wdHNcbiAgICogUGhhc2UgMiAocGVyc2lzdGVudCk6IEZpeGVkIGludGVydmFsIHJldHJ5IGluZGVmaW5pdGVseVxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTdWJzY3JpcHRpb25FcnJvcihzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGUsIGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBvbkVycm9yIH0gPSBzdGF0ZTtcblxuICAgIGlmIChzdGF0ZS5pc1JlY29ubmVjdGluZyB8fCAhdGhpcy5hY3RpdmVTdWJzY3JpcHRpb25zLmhhcyhzZXNzaW9uSWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhdGUuaXNSZWNvbm5lY3RpbmcgPSB0cnVlO1xuICAgIHN0YXRlLnJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAvLyBQYXVzZSBoZWFydGJlYXQg4oCUIHN1YnNjcmlwdGlvbiBpcyBkb3duLCBpT1Mgc2hvdWxkIG5vdCBzaG93IFwiRGVza3RvcCBjb25uZWN0ZWRcIlxuICAgIHRoaXMuc3RvcEhlYXJ0YmVhdChzZXNzaW9uSWQpO1xuXG4gICAgY29uc3QgaXNVcmdlbnRQaGFzZSA9IHN0YXRlLnJlY29ubmVjdEF0dGVtcHRzIDw9IFJFQ09OTkVDVF9DT05GSUcudXJnZW50TWF4QXR0ZW1wdHM7XG5cbiAgICBsZXQgZGVsYXk6IG51bWJlcjtcbiAgICBpZiAoaXNVcmdlbnRQaGFzZSkge1xuICAgICAgZGVsYXkgPSBNYXRoLm1pbihcbiAgICAgICAgUkVDT05ORUNUX0NPTkZJRy5iYXNlRGVsYXlNcyAqIE1hdGgucG93KFJFQ09OTkVDVF9DT05GSUcuYmFja29mZk11bHRpcGxpZXIsIHN0YXRlLnJlY29ubmVjdEF0dGVtcHRzIC0gMSksXG4gICAgICAgIFJFQ09OTkVDVF9DT05GSUcubWF4RGVsYXlNc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsYXkgPSBSRUNPTk5FQ1RfQ09ORklHLnBlcnNpc3RlbnREZWxheU1zO1xuICAgICAgaWYgKHN0YXRlLnJlY29ubmVjdEF0dGVtcHRzID09PSBSRUNPTk5FQ1RfQ09ORklHLnVyZ2VudE1heEF0dGVtcHRzICsgMSkge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIFN3aXRjaGluZyB0byBwZXJzaXN0ZW50IHJlY29ubmVjdCAoZXZlcnkgNW1pbiknLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIFNjaGVkdWxpbmcgcmVjb25uZWN0Jywge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgYXR0ZW1wdDogc3RhdGUucmVjb25uZWN0QXR0ZW1wdHMsXG4gICAgICBwaGFzZTogaXNVcmdlbnRQaGFzZSA/ICd1cmdlbnQnIDogJ3BlcnNpc3RlbnQnLFxuICAgICAgZGVsYXlNczogZGVsYXksXG4gICAgfSk7XG5cbiAgICBpZiAoc3RhdGUud3MpIHtcbiAgICAgIHRyeSB7IHN0YXRlLndzLmNsb3NlKDEwMDApOyB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICBzdGF0ZS53cyA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmtlZXBBbGl2ZVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc3RhdGUua2VlcEFsaXZlVGltZXIpO1xuICAgIH1cblxuICAgIHN0YXRlLnJlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAvLyBSZXNldCBmbGFnIHNvIG5leHQgZmFpbHVyZSBjYW4gdHJpZ2dlciBhbm90aGVyIHJlY29ubmVjdFxuICAgICAgc3RhdGUuaXNSZWNvbm5lY3RpbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKCF0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMuaGFzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSZWZyZXNoIHRva2VucyBiZWZvcmUgcmVjb25uZWN0aW5nIOKAlCB0aGV5IG1heSBoYXZlIGV4cGlyZWRcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZyZXNoVG9rZW5zID0gYXdhaXQga2V5Y2hhaW5NYW5hZ2VyLmdldFRva2Vucyh0aGlzLmVudmlyb25tZW50KTtcbiAgICAgICAgaWYgKGZyZXNoVG9rZW5zKSB7XG4gICAgICAgICAgaWYgKGtleWNoYWluTWFuYWdlci5pc1Rva2VuRXhwaXJlZChmcmVzaFRva2VucykpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZnJlc2hlZCA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VucyhmcmVzaFRva2Vucyk7XG4gICAgICAgICAgICBpZiAocmVmcmVzaGVkKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gVG9rZW5zIHJlZnJlc2hlZCBiZWZvcmUgcmVjb25uZWN0JywgeyBzZXNzaW9uSWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9rZW5zID0gZnJlc2hUb2tlbnM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdbQXBwU3luY0NsaWVudF0gVG9rZW4gcmVmcmVzaCBmYWlsZWQgYmVmb3JlIHJlY29ubmVjdCwgdXNpbmcgZXhpc3RpbmcgdG9rZW5zJywgeyBzZXNzaW9uSWQgfSk7XG4gICAgICB9XG5cbiAgICAgIHN0YXRlLnN1YnNjcmlwdGlvbklkID0gdXVpZHY0KCk7XG4gICAgICB0aGlzLmNyZWF0ZVN1YnNjcmlwdGlvbihzdGF0ZSk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFudXAgc3Vic2NyaXB0aW9uIHN0YXRlXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXBTdWJzY3JpcHRpb25TdGF0ZShzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICBpZiAoc3RhdGUucmVjb25uZWN0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChzdGF0ZS5yZWNvbm5lY3RUaW1lcik7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5rZWVwQWxpdmVUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHN0YXRlLmtlZXBBbGl2ZVRpbWVyKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLndzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc3RhdGUud3MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgICAgICBzdGF0ZS53cy5zZW5kKEpTT04uc3RyaW5naWZ5KHsgaWQ6IHN0YXRlLnN1YnNjcmlwdGlvbklkLCB0eXBlOiAnc3RvcCcgfSkpO1xuICAgICAgICAgIHN0YXRlLndzLmNsb3NlKDEwMDApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7IC8qIGlnbm9yZSAqLyB9XG4gICAgICBzdGF0ZS53cyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gTUFSSzogLSBIZWFydGJlYXRcblxuICBwcml2YXRlIGhlYXJ0YmVhdFRpbWVyczogTWFwPHN0cmluZywgTm9kZUpTLlRpbWVvdXQ+ID0gbmV3IE1hcCgpO1xuXG4gIC8qKlxuICAgKiBTdGFydCBwZXJpb2RpYyBoZWFydGJlYXQgZm9yIGEgc2Vzc2lvbi5cbiAgICogVXBkYXRlcyBsYXN0SGVhcnRiZWF0QXQgb24gdGhlIHNlc3Npb24gZXZlcnkgaW50ZXJ2YWxNcyAoZGVmYXVsdCAyIG1pbnV0ZXMpLlxuICAgKi9cbiAgcHVibGljIHN0YXJ0SGVhcnRiZWF0KHNlc3Npb25JZDogc3RyaW5nLCBpbnRlcnZhbE1zOiBudW1iZXIgPSAyICogNjAgKiAxMDAwKTogdm9pZCB7XG4gICAgdGhpcy5zdG9wSGVhcnRiZWF0KHNlc3Npb25JZCk7XG5cbiAgICAvLyBTZW5kIGluaXRpYWwgaGVhcnRiZWF0IGltbWVkaWF0ZWx5XG4gICAgdGhpcy5zZW5kSGVhcnRiZWF0KHNlc3Npb25JZCk7XG5cbiAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuc2VuZEhlYXJ0YmVhdChzZXNzaW9uSWQpO1xuICAgIH0sIGludGVydmFsTXMpO1xuXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lcnMuc2V0KHNlc3Npb25JZCwgdGltZXIpO1xuICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gSGVhcnRiZWF0IHN0YXJ0ZWQnLCB7IHNlc3Npb25JZCwgaW50ZXJ2YWxNcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIGhlYXJ0YmVhdCBmb3IgYSBzZXNzaW9uLlxuICAgKi9cbiAgcHVibGljIHN0b3BIZWFydGJlYXQoc2Vzc2lvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0aW1lciA9IHRoaXMuaGVhcnRiZWF0VGltZXJzLmdldChzZXNzaW9uSWQpO1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICB0aGlzLmhlYXJ0YmVhdFRpbWVycy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gSGVhcnRiZWF0IHN0b3BwZWQnLCB7IHNlc3Npb25JZCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIHNpbmdsZSBoZWFydGJlYXQgdXBkYXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZW5kSGVhcnRiZWF0KHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2Vzc2lvbih7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgbGFzdEhlYXJ0YmVhdEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnW0FwcFN5bmNDbGllbnRdIEhlYXJ0YmVhdCBzZW50JywgeyBzZXNzaW9uSWQgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdbQXBwU3luY0NsaWVudF0gSGVhcnRiZWF0IGZhaWxlZCcsIHsgc2Vzc2lvbklkLCBlcnJvciB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW51cCBhbGwgc3Vic2NyaXB0aW9ucyBhbmQgaGVhcnRiZWF0c1xuICAgKi9cbiAgcHVibGljIGNsZWFudXBTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdGF0ZSkgPT4ge1xuICAgICAgdGhpcy5jbGVhbnVwU3Vic2NyaXB0aW9uU3RhdGUoc3RhdGUpO1xuICAgIH0pO1xuICAgIHRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucy5jbGVhcigpO1xuXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lcnMuZm9yRWFjaCgodGltZXIpID0+IGNsZWFySW50ZXJ2YWwodGltZXIpKTtcbiAgICB0aGlzLmhlYXJ0YmVhdFRpbWVycy5jbGVhcigpO1xuICB9XG59XG4iXX0=
|
|
576
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwc3luYy1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwc3luYy9hcHBzeW5jLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsRUFBRTtBQUNGLG9CQUFvQjtBQUNwQixnQkFBZ0I7QUFDaEIsRUFBRTtBQUNGLDhEQUE4RDtBQUM5RCxFQUFFOzs7Ozs7QUFFRiw0Q0FBMkI7QUFDM0IsK0JBQW9DO0FBQ3BDLHNDQUFzRDtBQUN0RCxzQ0FBbUM7QUFDbkMsMENBQThDO0FBQzlDLHlEQUE2RDtBQUM3RCx1Q0FBOEQ7QUFDOUQsb0NBVWtCO0FBeUJsQjs7OztHQUlHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixpQkFBaUIsRUFBRSxFQUFFO0lBQ3JCLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLGlCQUFpQixFQUFFLENBQUM7SUFDcEIsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsWUFBWTtDQUMvQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFReEI7UUFQUSxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDcEMsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLFdBQU0sR0FBcUIsSUFBSSxDQUFDO1FBQ2hDLHdCQUFtQixHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBcWtCeEUsb0JBQW9CO1FBRVosb0JBQWUsR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQW5rQi9ELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUEsdUJBQWMsR0FBRSxDQUFDO1FBQ3BDLGVBQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOztPQUVHO0lBQ0ks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O1lBQ0gsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUN2QixTQUFTO2dCQUNULGVBQWUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUMxQyxDQUFDLENBQUM7WUFDSCxlQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CO1FBQ3pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztDQUNGO0FBdm9CRCxzQ0F1b0JDIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8vIGFwcHN5bmMtY2xpZW50LnRzXG4vLyBDb2RlVmliZSBDb3JlXG4vL1xuLy8gR3JhcGhRTCBjbGllbnQgZm9yIEFXUyBBcHBTeW5jIHdpdGggV2ViU29ja2V0IHN1YnNjcmlwdGlvbnNcbi8vXG5cbmltcG9ydCBXZWJTb2NrZXQgZnJvbSAnd3MnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBnZXRDb25maWcsIGdldEVudmlyb25tZW50IH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBrZXljaGFpbk1hbmFnZXIgfSBmcm9tICcuLi9rZXljaGFpbic7XG5pbXBvcnQgeyBmZXRjaFdpdGhEaWFnbm9zdGljcyB9IGZyb20gJy4uL2F1dGgvZmV0Y2gtaGVscGVycyc7XG5pbXBvcnQgeyBxdWVyaWVzLCBtdXRhdGlvbnMsIHN1YnNjcmlwdGlvbnMgfSBmcm9tICcuL3F1ZXJpZXMnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlRXZlbnRJbnB1dCxcbiAgQ3JlYXRlU2Vzc2lvbklucHV0LFxuICBVcGRhdGVTZXNzaW9uSW5wdXQsXG4gIFVwZGF0ZUV2ZW50U3RhdHVzSW5wdXQsXG4gIEV2ZW50LFxuICBTZXNzaW9uLFxuICBFdmVudFNvdXJjZSxcbiAgRGV2aWNlS2V5LFxuICBUb2tlbkRhdGEsXG59IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBEb3dubG9hZCBVUkwgcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb3dubG9hZFVybFJlc3BvbnNlIHtcbiAgZG93bmxvYWRVcmw6IHN0cmluZztcbiAgZXhwaXJlc0F0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3Vic2NyaXB0aW9uIHN0YXRlIGZvciByZWNvbm5lY3Rpb25cbiAqL1xuaW50ZXJmYWNlIFN1YnNjcmlwdGlvblN0YXRlIHtcbiAgd3M6IFdlYlNvY2tldCB8IG51bGw7XG4gIHN1YnNjcmlwdGlvbklkOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBvbkV2ZW50OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgcmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcbiAgcmVjb25uZWN0VGltZXI/OiBOb2RlSlMuVGltZW91dDtcbiAgaXNSZWNvbm5lY3Rpbmc6IGJvb2xlYW47XG4gIGtlZXBBbGl2ZVRpbWVyPzogTm9kZUpTLlRpbWVvdXQ7XG59XG5cbi8qKlxuICogUmVjb25uZWN0aW9uIGNvbmZpZ3VyYXRpb24g4oCUIHR3by1waGFzZSBzdHJhdGVneTpcbiAqIFBoYXNlIDEgKHVyZ2VudCk6IEV4cG9uZW50aWFsIGJhY2tvZmYgMXMg4oaSIDYwcyBmb3IgZmlyc3QgMTAgYXR0ZW1wdHNcbiAqIFBoYXNlIDIgKHBlcnNpc3RlbnQpOiBSZXRyeSBldmVyeSA1IG1pbnV0ZXMgaW5kZWZpbml0ZWx5XG4gKi9cbmNvbnN0IFJFQ09OTkVDVF9DT05GSUcgPSB7XG4gIHVyZ2VudE1heEF0dGVtcHRzOiAxMCxcbiAgYmFzZURlbGF5TXM6IDEwMDAsXG4gIG1heERlbGF5TXM6IDYwMDAwLFxuICBiYWNrb2ZmTXVsdGlwbGllcjogMixcbiAgcGVyc2lzdGVudERlbGF5TXM6IDUgKiA2MCAqIDEwMDAsIC8vIDUgbWludXRlc1xufTtcblxuLyoqXG4gKiBBcHBTeW5jIEdyYXBoUUwgY2xpZW50IHdpdGggV2ViU29ja2V0IHN1YnNjcmlwdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIEFwcFN5bmNDbGllbnQge1xuICBwcml2YXRlIGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBjdXJyZW50VXNlcklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50RW1haWw6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRva2VuczogVG9rZW5EYXRhIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYWN0aXZlU3Vic2NyaXB0aW9uczogTWFwPHN0cmluZywgU3Vic2NyaXB0aW9uU3RhdGU+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGVudmlyb25tZW50OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gR2V0IGVudmlyb25tZW50IGZyb20gY2VudHJhbGl6ZWQgY29uZmlnIChyZWFkcyBwcm9jZXNzLmVudi5FTlZJUk9OTUVOVClcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnQoKTtcbiAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIEluaXRpYWxpemVkJywgeyBlbnZpcm9ubWVudDogdGhpcy5lbnZpcm9ubWVudCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRlZCB1c2VyIElEXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudFVzZXJJZCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5jdXJyZW50VXNlcklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhdXRoZW50aWNhdGVkLiBDYWxsIGF1dGhlbnRpY2F0ZVdpdGhTdG9yZWRUb2tlbnMoKSBmaXJzdC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXJJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRlZCB1c2VyIGVtYWlsXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudFVzZXJFbWFpbCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RW1haWw7XG4gIH1cblxuICAvKipcbiAgICogQXV0aGVudGljYXRlIHVzaW5nIHN0b3JlZCBPQXV0aCB0b2tlbnMgZnJvbSBrZXljaGFpblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhlbnRpY2F0ZVdpdGhTdG9yZWRUb2tlbnMoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IGtleWNoYWluTWFuYWdlci5nZXRUb2tlbnModGhpcy5lbnZpcm9ubWVudCk7XG4gICAgICBpZiAoIXRva2Vucykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1tBcHBTeW5jQ2xpZW50XSBObyBzdG9yZWQgdG9rZW5zIGZvdW5kJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBGb3VuZCBzdG9yZWQgT0F1dGggdG9rZW5zJywge1xuICAgICAgICB1c2VySWQ6IHRva2Vucy51c2VySWQsXG4gICAgICAgIGVtYWlsOiB0b2tlbnMuZW1haWwsXG4gICAgICAgIGV4cGlyZWQ6IGtleWNoYWluTWFuYWdlci5pc1Rva2VuRXhwaXJlZCh0b2tlbnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHRva2VucyBhcmUgZXhwaXJlZCwgdHJ5IHRvIHJlZnJlc2ggdGhlbVxuICAgICAgaWYgKGtleWNoYWluTWFuYWdlci5pc1Rva2VuRXhwaXJlZCh0b2tlbnMpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gVG9rZW5zIGV4cGlyZWQsIGF0dGVtcHRpbmcgcmVmcmVzaC4uLicpO1xuICAgICAgICBjb25zdCByZWZyZXNoZWQgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbnModG9rZW5zKTtcbiAgICAgICAgaWYgKCFyZWZyZXNoZWQpIHtcbiAgICAgICAgICBsb2dnZXIud2FybignW0FwcFN5bmNDbGllbnRdIFRva2VuIHJlZnJlc2ggZmFpbGVkJyk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50VXNlcklkID0gdGhpcy50b2tlbnMhLnVzZXJJZDtcbiAgICAgIHRoaXMuY3VycmVudEVtYWlsID0gdGhpcy50b2tlbnMhLmVtYWlsO1xuICAgICAgdGhpcy5hdXRoZW50aWNhdGVkID0gdHJ1ZTtcblxuICAgICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBBdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgdXNlcklkOiB0aGlzLmN1cnJlbnRVc2VySWQsXG4gICAgICAgIGVtYWlsOiB0aGlzLmN1cnJlbnRFbWFpbCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdbQXBwU3luY0NsaWVudF0gQXV0aGVudGljYXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCBleHBpcmVkIHRva2Vuc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoVG9rZW5zKHRva2VuczogVG9rZW5EYXRhKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgICAgY29uc3QgdG9rZW5VcmwgPSBgaHR0cHM6Ly8ke2NvbmZpZy5hd3MuY29nbml0b0RvbWFpbn0vb2F1dGgyL3Rva2VuYDtcblxuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgY2xpZW50X2lkOiBjb25maWcuYXdzLmNvZ25pdG9DbGllbnRJZCxcbiAgICAgICAgcmVmcmVzaF90b2tlbjogdG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoV2l0aERpYWdub3N0aWNzKFxuICAgICAgICB0b2tlblVybCxcbiAgICAgICAge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH0sXG4gICAgICAgICAgYm9keTogcGFyYW1zLnRvU3RyaW5nKCksXG4gICAgICAgIH0sXG4gICAgICAgICdUb2tlbiByZWZyZXNoJ1xuICAgICAgKTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1tBcHBTeW5jQ2xpZW50XSBUb2tlbiByZWZyZXNoIGZhaWxlZCcsIHsgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7XG4gICAgICAgIGFjY2Vzc190b2tlbjogc3RyaW5nO1xuICAgICAgICBpZF90b2tlbjogc3RyaW5nO1xuICAgICAgICBleHBpcmVzX2luOiBudW1iZXI7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB1cGRhdGVkVG9rZW5zOiBUb2tlbkRhdGEgPSB7XG4gICAgICAgIC4uLnRva2VucyxcbiAgICAgICAgYWNjZXNzVG9rZW46IGRhdGEuYWNjZXNzX3Rva2VuLFxuICAgICAgICBpZFRva2VuOiBkYXRhLmlkX3Rva2VuLFxuICAgICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyAoZGF0YS5leHBpcmVzX2luICogMTAwMCksXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBrZXljaGFpbk1hbmFnZXIuc2V0VG9rZW5zKHVwZGF0ZWRUb2tlbnMsIHRoaXMuZW52aXJvbm1lbnQpO1xuICAgICAgdGhpcy50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXG4gICAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIFRva2VucyByZWZyZXNoZWQnLCB7XG4gICAgICAgIGV4cGlyZXNBdDogbmV3IERhdGUodXBkYXRlZFRva2Vucy5leHBpcmVzQXQpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignW0FwcFN5bmNDbGllbnRdIFRva2VuIHJlZnJlc2ggZXJyb3I6JywgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhdXRoZW50aWNhdGVkXG4gICAqL1xuICBwdWJsaWMgaXNBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dGhlbnRpY2F0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBvdXRcbiAgICovXG4gIHB1YmxpYyBzaWduT3V0KCk6IHZvaWQge1xuICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgIHRoaXMudG9rZW5zID0gbnVsbDtcbiAgICB0aGlzLmN1cnJlbnRVc2VySWQgPSBudWxsO1xuICAgIHRoaXMuY3VycmVudEVtYWlsID0gbnVsbDtcbiAgICB0aGlzLmNsZWFudXBTdWJzY3JpcHRpb25zKCk7XG4gICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBTaWduZWQgb3V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIEdyYXBoUUwgcmVxdWVzdFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBncmFwaHFsUmVxdWVzdChxdWVyeTogc3RyaW5nLCB2YXJpYWJsZXM6IGFueSwgaXNSZXRyeTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcblxuICAgIGlmICghdGhpcy50b2tlbnM/LmlkVG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBcImNvZGV2aWJlIGxvZ2luXCIgZmlyc3QuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQXV0aG9yaXphdGlvbic6IHRoaXMudG9rZW5zLmlkVG9rZW4sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoRGlhZ25vc3RpY3MoXG4gICAgICBjb25maWcuYXdzLmFwcHN5bmNVcmwsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXMgfSksXG4gICAgICB9LFxuICAgICAgJ0FwcFN5bmMgR3JhcGhRTCByZXF1ZXN0J1xuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgeyBkYXRhPzogYW55OyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U6IHN0cmluZyB9PiB9O1xuXG4gICAgLy8gSGFuZGxlIDQwMSB3aXRoIHRva2VuIHJlZnJlc2hcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgIWlzUmV0cnkgJiYgdGhpcy50b2tlbnMpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gNDAxIFVuYXV0aG9yaXplZCwgcmVmcmVzaGluZyB0b2tlbi4uLicpO1xuICAgICAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5zKHRoaXMudG9rZW5zKTtcbiAgICAgIGlmIChyZWZyZXNoZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JhcGhxbFJlcXVlc3QocXVlcnksIHZhcmlhYmxlcywgdHJ1ZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Rva2VuIGV4cGlyZWQgYW5kIHJlZnJlc2ggZmFpbGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIHJlcXVlc3QgZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKTtcbiAgICB9XG5cbiAgICBpZiAocmVzdWx0LmVycm9ycz8ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgZXJyb3I6ICR7cmVzdWx0LmVycm9yc1swXS5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBNQVJLOiAtIFNlc3Npb24gT3BlcmF0aW9uc1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlU2Vzc2lvbihpbnB1dDogQ3JlYXRlU2Vzc2lvbklucHV0KTogUHJvbWlzZTxTZXNzaW9uPiB7XG4gICAgY29uc3QgcHJlcGFyZWRJbnB1dCA9IHtcbiAgICAgIC4uLmlucHV0LFxuICAgICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhID8gSlNPTi5zdHJpbmdpZnkoaW5wdXQubWV0YWRhdGEpIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3QobXV0YXRpb25zLmNyZWF0ZVNlc3Npb24sIHsgaW5wdXQ6IHByZXBhcmVkSW5wdXQgfSk7XG4gICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBTZXNzaW9uIGNyZWF0ZWQnLCB7IHNlc3Npb25JZDogcmVzcG9uc2UuZGF0YS5jcmVhdGVTZXNzaW9uLnNlc3Npb25JZCB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5jcmVhdGVTZXNzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHNlc3Npb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVTZXNzaW9uKGlucHV0OiBVcGRhdGVTZXNzaW9uSW5wdXQpOiBQcm9taXNlPFNlc3Npb24+IHtcbiAgICBjb25zdCBwcmVwYXJlZElucHV0ID0ge1xuICAgICAgLi4uaW5wdXQsXG4gICAgICBtZXRhZGF0YTogaW5wdXQubWV0YWRhdGEgPyBKU09OLnN0cmluZ2lmeShpbnB1dC5tZXRhZGF0YSkgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdChtdXRhdGlvbnMudXBkYXRlU2Vzc2lvbiwgeyBpbnB1dDogcHJlcGFyZWRJbnB1dCB9KTtcbiAgICBsb2dnZXIuZGVidWcoJ1tBcHBTeW5jQ2xpZW50XSBTZXNzaW9uIHVwZGF0ZWQnLCB7IHNlc3Npb25JZDogcmVzcG9uc2UuZGF0YS51cGRhdGVTZXNzaW9uLnNlc3Npb25JZCB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS51cGRhdGVTZXNzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNlc3Npb25cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdChxdWVyaWVzLmdldFNlc3Npb24sIHsgc2Vzc2lvbklkIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmdldFNlc3Npb247XG4gIH1cblxuICAvLyBNQVJLOiAtIEV2ZW50IE9wZXJhdGlvbnNcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlRXZlbnQoaW5wdXQ6IENyZWF0ZUV2ZW50SW5wdXQpOiBQcm9taXNlPEV2ZW50PiB7XG4gICAgY29uc3QgcHJlcGFyZWRJbnB1dCA9IHtcbiAgICAgIC4uLmlucHV0LFxuICAgICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhID8gSlNPTi5zdHJpbmdpZnkoaW5wdXQubWV0YWRhdGEpIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3QobXV0YXRpb25zLmNyZWF0ZUV2ZW50LCB7IGlucHV0OiBwcmVwYXJlZElucHV0IH0pO1xuICAgIGxvZ2dlci5kZWJ1ZygnW0FwcFN5bmNDbGllbnRdIEV2ZW50IGNyZWF0ZWQnLCB7XG4gICAgICBldmVudElkOiByZXNwb25zZS5kYXRhLmNyZWF0ZUV2ZW50LmV2ZW50SWQsXG4gICAgICB0eXBlOiByZXNwb25zZS5kYXRhLmNyZWF0ZUV2ZW50LnR5cGUsXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuY3JlYXRlRXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGV2ZW50IHN0YXR1c1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUV2ZW50U3RhdHVzKGlucHV0OiBVcGRhdGVFdmVudFN0YXR1c0lucHV0KTogUHJvbWlzZTxFdmVudD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdChtdXRhdGlvbnMudXBkYXRlRXZlbnRTdGF0dXMsIHsgaW5wdXQgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEudXBkYXRlRXZlbnRTdGF0dXM7XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBldmVudHMgZm9yIGEgc2Vzc2lvblxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3RFdmVudHMoc2Vzc2lvbklkOiBzdHJpbmcsIHNvdXJjZT86IEV2ZW50U291cmNlLCBsaW1pdD86IG51bWJlcik6IFByb21pc2U8RXZlbnRbXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdChxdWVyaWVzLmxpc3RFdmVudHMsIHsgc2Vzc2lvbklkLCBzb3VyY2UsIGxpbWl0IH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmxpc3RFdmVudHMuaXRlbXM7XG4gIH1cblxuICAvLyBNQVJLOiAtIERldmljZSBLZXkgT3BlcmF0aW9uc1xuXG4gIC8qKlxuICAgKiBMaXN0IHVzZXIgZGV2aWNlIGtleXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBsaXN0VXNlckRldmljZUtleXMoKTogUHJvbWlzZTxEZXZpY2VLZXlbXT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5ncmFwaHFsUmVxdWVzdChxdWVyaWVzLmxpc3RVc2VyRGV2aWNlS2V5cywge30pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmxpc3RVc2VyRGV2aWNlS2V5cyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBkZXZpY2Uga2V5XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVnaXN0ZXJEZXZpY2VLZXkoXG4gICAgZGV2aWNlSWQ6IHN0cmluZyxcbiAgICBwdWJsaWNLZXk6IHN0cmluZyxcbiAgICBwbGF0Zm9ybTogc3RyaW5nLFxuICAgIGRldmljZU5hbWU6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbnB1dCA9IHsgZGV2aWNlSWQsIHB1YmxpY0tleSwgcGxhdGZvcm0sIGRldmljZU5hbWUgfTtcbiAgICBhd2FpdCB0aGlzLmdyYXBocWxSZXF1ZXN0KG11dGF0aW9ucy5yZWdpc3RlckRldmljZUtleSwgeyBpbnB1dCB9KTtcbiAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIERldmljZSBrZXkgcmVnaXN0ZXJlZCcsIHsgZGV2aWNlSWQsIHBsYXRmb3JtIH0pO1xuICB9XG5cbiAgLy8gTUFSSzogLSBBdHRhY2htZW50IE9wZXJhdGlvbnNcblxuICAvKipcbiAgICogR2V0IGF0dGFjaG1lbnQgZG93bmxvYWQgVVJMXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QXR0YWNobWVudERvd25sb2FkVXJsKHMzS2V5OiBzdHJpbmcpOiBQcm9taXNlPERvd25sb2FkVXJsUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ3JhcGhxbFJlcXVlc3QobXV0YXRpb25zLmdldEF0dGFjaG1lbnREb3dubG9hZFVybCwgeyBzM0tleSB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5nZXRBdHRhY2htZW50RG93bmxvYWRVcmw7XG4gIH1cblxuICAvLyBNQVJLOiAtIFN1YnNjcmlwdGlvbnNcblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGV2ZW50cyBmb3IgYSBzZXNzaW9uXG4gICAqL1xuICBwdWJsaWMgc3Vic2NyaWJlVG9FdmVudHMoXG4gICAgc2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgb25FdmVudDogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCxcbiAgICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZFxuICApOiAoKSA9PiB2b2lkIHtcbiAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIFN1YnNjcmliaW5nIHRvIGV2ZW50cycsIHsgc2Vzc2lvbklkIH0pO1xuXG4gICAgLy8gQ2xlYW51cCBleGlzdGluZyBzdWJzY3JpcHRpb25cbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucy5nZXQoc2Vzc2lvbklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHRoaXMuY2xlYW51cFN1YnNjcmlwdGlvblN0YXRlKGV4aXN0aW5nKTtcbiAgICAgIHRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGUgPSB7XG4gICAgICB3czogbnVsbCxcbiAgICAgIHN1YnNjcmlwdGlvbklkOiB1dWlkdjQoKSxcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIG9uRXZlbnQsXG4gICAgICBvbkVycm9yLFxuICAgICAgcmVjb25uZWN0QXR0ZW1wdHM6IDAsXG4gICAgICBpc1JlY29ubmVjdGluZzogZmFsc2UsXG4gICAgfTtcblxuICAgIHRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucy5zZXQoc2Vzc2lvbklkLCBzdGF0ZSk7XG4gICAgdGhpcy5jcmVhdGVTdWJzY3JpcHRpb24oc3RhdGUpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuY2xlYW51cFN1YnNjcmlwdGlvblN0YXRlKHN0YXRlKTtcbiAgICAgIHRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucy5kZWxldGUoc2Vzc2lvbklkKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIFdlYlNvY2tldCBVUkxcbiAgICovXG4gIHByaXZhdGUgYnVpbGRSZWFsdGltZVVybCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGNvbnN0IHJlYWx0aW1lVXJsID0gY29uZmlnLmF3cy5hcHBzeW5jVXJsXG4gICAgICAucmVwbGFjZSgnaHR0cHM6Ly8nLCAnd3NzOi8vJylcbiAgICAgIC5yZXBsYWNlKCdhcHBzeW5jLWFwaScsICdhcHBzeW5jLXJlYWx0aW1lLWFwaScpO1xuXG4gICAgY29uc3QgYXV0aEhlYWRlcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIGhvc3Q6IG5ldyBVUkwoY29uZmlnLmF3cy5hcHBzeW5jVXJsKS5ob3N0LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy50b2tlbnM/LmlkVG9rZW4pIHtcbiAgICAgIGF1dGhIZWFkZXJbJ0F1dGhvcml6YXRpb24nXSA9IHRoaXMudG9rZW5zLmlkVG9rZW47XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyQmFzZTY0ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoYXV0aEhlYWRlcikpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBwYXlsb2FkQmFzZTY0ID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoe30pKS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgICByZXR1cm4gYCR7cmVhbHRpbWVVcmx9P2hlYWRlcj0ke2hlYWRlckJhc2U2NH0mcGF5bG9hZD0ke3BheWxvYWRCYXNlNjR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgV2ViU29ja2V0IHN1YnNjcmlwdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVTdWJzY3JpcHRpb24oc3RhdGU6IFN1YnNjcmlwdGlvblN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHN1YnNjcmlwdGlvbklkLCBvbkV2ZW50LCBvbkVycm9yIH0gPSBzdGF0ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB3c1VybCA9IHRoaXMuYnVpbGRSZWFsdGltZVVybCgpO1xuICAgICAgY29uc3Qgd3MgPSBuZXcgV2ViU29ja2V0KHdzVXJsLCBbJ2dyYXBocWwtd3MnXSk7XG5cbiAgICAgIHdzLm9uKCdvcGVuJywgKCkgPT4ge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIFdlYlNvY2tldCBjb25uZWN0ZWQnLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgICAgd3Muc2VuZChKU09OLnN0cmluZ2lmeSh7IHR5cGU6ICdjb25uZWN0aW9uX2luaXQnIH0pKTtcbiAgICAgIH0pO1xuXG4gICAgICB3cy5vbignbWVzc2FnZScsIChkYXRhOiBXZWJTb2NrZXQuRGF0YSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBKU09OLnBhcnNlKGRhdGEudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnY29ubmVjdGlvbl9hY2snOlxuICAgICAgICAgICAgICB0aGlzLnNlbmRTdWJzY3JpcHRpb25TdGFydCh3cywgc3RhdGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnc3RhcnRfYWNrJzpcbiAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBTdWJzY3JpcHRpb24gc3RhcnRlZCcsIHsgc2Vzc2lvbklkIH0pO1xuICAgICAgICAgICAgICBzdGF0ZS5pc1JlY29ubmVjdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICBzdGF0ZS5yZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgICAgICAgICAgIC8vIFJlc3VtZSBoZWFydGJlYXQg4oCUIHN1YnNjcmlwdGlvbiBpcyBhbGl2ZSBhbmQgY2FuIHJlY2VpdmUgbW9iaWxlIGV2ZW50c1xuICAgICAgICAgICAgICB0aGlzLnN0YXJ0SGVhcnRiZWF0KHNlc3Npb25JZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdkYXRhJzpcbiAgICAgICAgICAgICAgdGhpcy5yZXNldEtlZXBBbGl2ZVRpbWVyKHN0YXRlKTtcbiAgICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBtZXNzYWdlLnBheWxvYWQ/LmRhdGE/Lm9uRXZlbnRDcmVhdGVkO1xuICAgICAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuc291cmNlID09PSBFdmVudFNvdXJjZS5NT0JJTEUpIHtcbiAgICAgICAgICAgICAgICBvbkV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAna2EnOlxuICAgICAgICAgICAgICB0aGlzLnJlc2V0S2VlcEFsaXZlVGltZXIoc3RhdGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICBjb25zdCBlcnJvck1zZyA9IG1lc3NhZ2UucGF5bG9hZD8uZXJyb3JzPy5bMF0/Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InO1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZVN1YnNjcmlwdGlvbkVycm9yKHN0YXRlLCBuZXcgRXJyb3IoZXJyb3JNc2cpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdbQXBwU3luY0NsaWVudF0gRmFpbGVkIHRvIHBhcnNlIG1lc3NhZ2UnLCB7IGVycm9yOiBlIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgd3Mub24oJ2Vycm9yJywgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1tBcHBTeW5jQ2xpZW50XSBXZWJTb2NrZXQgZXJyb3InLCB7IHNlc3Npb25JZCwgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHRoaXMuaGFuZGxlU3Vic2NyaXB0aW9uRXJyb3Ioc3RhdGUsIGVycm9yKTtcbiAgICAgIH0pO1xuXG4gICAgICB3cy5vbignY2xvc2UnLCAoY29kZTogbnVtYmVyLCByZWFzb246IEJ1ZmZlcikgPT4ge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0FwcFN5bmNDbGllbnRdIFdlYlNvY2tldCBjbG9zZWQnLCB7IHNlc3Npb25JZCwgY29kZSB9KTtcbiAgICAgICAgaWYgKHN0YXRlLmtlZXBBbGl2ZVRpbWVyKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHN0YXRlLmtlZXBBbGl2ZVRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWNvbm5lY3QgaWYgc3Vic2NyaXB0aW9uIGlzIHN0aWxsIGFjdGl2ZSAobm90IGludGVudGlvbmFsbHkgc3RvcHBlZCkuXG4gICAgICAgIC8vIEluY2x1ZGVzIGNvZGUgMTAwMCDigJQgQXBwU3luYyBjbG9zZXMgV2ViU29ja2V0cyBhZnRlciAyNCBob3VycyB3aXRoXG4gICAgICAgIC8vIGNvZGUgMTAwMCwgd2hpY2ggaXMgTk9UIGFuIGludGVudGlvbmFsIHN0b3AgYnkgdGhlIHBsdWdpbi5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucy5oYXMoc2Vzc2lvbklkKSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3Vic2NyaXB0aW9uRXJyb3Ioc3RhdGUsIG5ldyBFcnJvcihgV2ViU29ja2V0IGNsb3NlZDogJHtjb2RlfWApKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHN0YXRlLndzID0gd3M7XG4gICAgICB0aGlzLnJlc2V0S2VlcEFsaXZlVGltZXIoc3RhdGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmhhbmRsZVN1YnNjcmlwdGlvbkVycm9yKHN0YXRlLCBlcnJvciBhcyBFcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgc3Vic2NyaXB0aW9uIHN0YXJ0IG1lc3NhZ2VcbiAgICovXG4gIHByaXZhdGUgc2VuZFN1YnNjcmlwdGlvblN0YXJ0KHdzOiBXZWJTb2NrZXQsIHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBzdWJzY3JpcHRpb25JZCB9ID0gc3RhdGU7XG5cbiAgICBjb25zdCBhdXRoSGVhZGVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgaG9zdDogbmV3IFVSTChjb25maWcuYXdzLmFwcHN5bmNVcmwpLmhvc3QsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnRva2Vucz8uaWRUb2tlbikge1xuICAgICAgYXV0aEhlYWRlclsnQXV0aG9yaXphdGlvbiddID0gdGhpcy50b2tlbnMuaWRUb2tlbjtcbiAgICB9XG5cbiAgICB3cy5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGlkOiBzdWJzY3JpcHRpb25JZCxcbiAgICAgIHR5cGU6ICdzdGFydCcsXG4gICAgICBwYXlsb2FkOiB7XG4gICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBxdWVyeTogc3Vic2NyaXB0aW9ucy5vbkV2ZW50Q3JlYXRlZCxcbiAgICAgICAgICB2YXJpYWJsZXM6IHsgc2Vzc2lvbklkIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBleHRlbnNpb25zOiB7IGF1dGhvcml6YXRpb246IGF1dGhIZWFkZXIgfSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGtlZXAtYWxpdmUgdGltZXJcbiAgICovXG4gIHByaXZhdGUgcmVzZXRLZWVwQWxpdmVUaW1lcihzdGF0ZTogU3Vic2NyaXB0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICBpZiAoc3RhdGUua2VlcEFsaXZlVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChzdGF0ZS5rZWVwQWxpdmVUaW1lcik7XG4gICAgfVxuICAgIHN0YXRlLmtlZXBBbGl2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVN1YnNjcmlwdGlvbkVycm9yKHN0YXRlLCBuZXcgRXJyb3IoJ0tlZXAtYWxpdmUgdGltZW91dCcpKTtcbiAgICB9LCA1ICogNjAgKiAxMDAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc3Vic2NyaXB0aW9uIGVycm9yIHdpdGggdHdvLXBoYXNlIHJlY29ubmVjdGlvbjpcbiAgICogUGhhc2UgMSAodXJnZW50KTogRXhwb25lbnRpYWwgYmFja29mZiBmb3IgZmlyc3QgTiBhdHRlbXB0c1xuICAgKiBQaGFzZSAyIChwZXJzaXN0ZW50KTogRml4ZWQgaW50ZXJ2YWwgcmV0cnkgaW5kZWZpbml0ZWx5XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVN1YnNjcmlwdGlvbkVycm9yKHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSwgZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIG9uRXJyb3IgfSA9IHN0YXRlO1xuXG4gICAgaWYgKHN0YXRlLmlzUmVjb25uZWN0aW5nIHx8ICF0aGlzLmFjdGl2ZVN1YnNjcmlwdGlvbnMuaGFzKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGF0ZS5pc1JlY29ubmVjdGluZyA9IHRydWU7XG4gICAgc3RhdGUucmVjb25uZWN0QXR0ZW1wdHMrKztcblxuICAgIC8vIFBhdXNlIGhlYXJ0YmVhdCDigJQgc3Vic2NyaXB0aW9uIGlzIGRvd24sIGlPUyBzaG91bGQgbm90IHNob3cgXCJEZXNrdG9wIGNvbm5lY3RlZFwiXG4gICAgdGhpcy5zdG9wSGVhcnRiZWF0KHNlc3Npb25JZCk7XG5cbiAgICBjb25zdCBpc1VyZ2VudFBoYXNlID0gc3RhdGUucmVjb25uZWN0QXR0ZW1wdHMgPD0gUkVDT05ORUNUX0NPTkZJRy51cmdlbnRNYXhBdHRlbXB0cztcblxuICAgIGxldCBkZWxheTogbnVtYmVyO1xuICAgIGlmIChpc1VyZ2VudFBoYXNlKSB7XG4gICAgICBkZWxheSA9IE1hdGgubWluKFxuICAgICAgICBSRUNPTk5FQ1RfQ09ORklHLmJhc2VEZWxheU1zICogTWF0aC5wb3coUkVDT05ORUNUX0NPTkZJRy5iYWNrb2ZmTXVsdGlwbGllciwgc3RhdGUucmVjb25uZWN0QXR0ZW1wdHMgLSAxKSxcbiAgICAgICAgUkVDT05ORUNUX0NPTkZJRy5tYXhEZWxheU1zXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxheSA9IFJFQ09OTkVDVF9DT05GSUcucGVyc2lzdGVudERlbGF5TXM7XG4gICAgICBpZiAoc3RhdGUucmVjb25uZWN0QXR0ZW1wdHMgPT09IFJFQ09OTkVDVF9DT05GSUcudXJnZW50TWF4QXR0ZW1wdHMgKyAxKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gU3dpdGNoaW5nIHRvIHBlcnNpc3RlbnQgcmVjb25uZWN0IChldmVyeSA1bWluKScsIHsgc2Vzc2lvbklkIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKCdbQXBwU3luY0NsaWVudF0gU2NoZWR1bGluZyByZWNvbm5lY3QnLCB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBhdHRlbXB0OiBzdGF0ZS5yZWNvbm5lY3RBdHRlbXB0cyxcbiAgICAgIHBoYXNlOiBpc1VyZ2VudFBoYXNlID8gJ3VyZ2VudCcgOiAncGVyc2lzdGVudCcsXG4gICAgICBkZWxheU1zOiBkZWxheSxcbiAgICB9KTtcblxuICAgIGlmIChzdGF0ZS53cykge1xuICAgICAgdHJ5IHsgc3RhdGUud3MuY2xvc2UoMTAwMCk7IH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgIHN0YXRlLndzID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUua2VlcEFsaXZlVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dChzdGF0ZS5rZWVwQWxpdmVUaW1lcik7XG4gICAgfVxuXG4gICAgc3RhdGUucmVjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFJlc2V0IGZsYWcgc28gbmV4dCBmYWlsdXJlIGNhbiB0cmlnZ2VyIGFub3RoZXIgcmVjb25uZWN0XG4gICAgICBzdGF0ZS5pc1JlY29ubmVjdGluZyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXRoaXMuYWN0aXZlU3Vic2NyaXB0aW9ucy5oYXMoc2Vzc2lvbklkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJlZnJlc2ggdG9rZW5zIGJlZm9yZSByZWNvbm5lY3Rpbmcg4oCUIHRoZXkgbWF5IGhhdmUgZXhwaXJlZFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZnJlc2hUb2tlbnMgPSBhd2FpdCBrZXljaGFpbk1hbmFnZXIuZ2V0VG9rZW5zKHRoaXMuZW52aXJvbm1lbnQpO1xuICAgICAgICBpZiAoZnJlc2hUb2tlbnMpIHtcbiAgICAgICAgICBpZiAoa2V5Y2hhaW5NYW5hZ2VyLmlzVG9rZW5FeHBpcmVkKGZyZXNoVG9rZW5zKSkge1xuICAgICAgICAgICAgY29uc3QgcmVmcmVzaGVkID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5zKGZyZXNoVG9rZW5zKTtcbiAgICAgICAgICAgIGlmIChyZWZyZXNoZWQpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBUb2tlbnMgcmVmcmVzaGVkIGJlZm9yZSByZWNvbm5lY3QnLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50b2tlbnMgPSBmcmVzaFRva2VucztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1tBcHBTeW5jQ2xpZW50XSBUb2tlbiByZWZyZXNoIGZhaWxlZCBiZWZvcmUgcmVjb25uZWN0LCB1c2luZyBleGlzdGluZyB0b2tlbnMnLCB7IHNlc3Npb25JZCB9KTtcbiAgICAgIH1cblxuICAgICAgc3RhdGUuc3Vic2NyaXB0aW9uSWQgPSB1dWlkdjQoKTtcbiAgICAgIHRoaXMuY3JlYXRlU3Vic2NyaXB0aW9uKHN0YXRlKTtcbiAgICB9LCBkZWxheSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW51cCBzdWJzY3JpcHRpb24gc3RhdGVcbiAgICovXG4gIHByaXZhdGUgY2xlYW51cFN1YnNjcmlwdGlvblN0YXRlKHN0YXRlOiBTdWJzY3JpcHRpb25TdGF0ZSk6IHZvaWQge1xuICAgIGlmIChzdGF0ZS5yZWNvbm5lY3RUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHN0YXRlLnJlY29ubmVjdFRpbWVyKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmtlZXBBbGl2ZVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQoc3RhdGUua2VlcEFsaXZlVGltZXIpO1xuICAgIH1cbiAgICBpZiAoc3RhdGUud3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzdGF0ZS53cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xuICAgICAgICAgIHN0YXRlLndzLnNlbmQoSlNPTi5zdHJpbmdpZnkoeyBpZDogc3RhdGUuc3Vic2NyaXB0aW9uSWQsIHR5cGU6ICdzdG9wJyB9KSk7XG4gICAgICAgICAgc3RhdGUud3MuY2xvc2UoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogaWdub3JlICovIH1cbiAgICAgIHN0YXRlLndzID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBNQVJLOiAtIEhlYXJ0YmVhdFxuXG4gIHByaXZhdGUgaGVhcnRiZWF0VGltZXJzOiBNYXA8c3RyaW5nLCBOb2RlSlMuVGltZW91dD4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHBlcmlvZGljIGhlYXJ0YmVhdCBmb3IgYSBzZXNzaW9uLlxuICAgKiBVcGRhdGVzIGxhc3RIZWFydGJlYXRBdCBvbiB0aGUgc2Vzc2lvbiBldmVyeSBpbnRlcnZhbE1zIChkZWZhdWx0IDIgbWludXRlcykuXG4gICAqL1xuICBwdWJsaWMgc3RhcnRIZWFydGJlYXQoc2Vzc2lvbklkOiBzdHJpbmcsIGludGVydmFsTXM6IG51bWJlciA9IDIgKiA2MCAqIDEwMDApOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BIZWFydGJlYXQoc2Vzc2lvbklkKTtcblxuICAgIC8vIFNlbmQgaW5pdGlhbCBoZWFydGJlYXQgaW1tZWRpYXRlbHlcbiAgICB0aGlzLnNlbmRIZWFydGJlYXQoc2Vzc2lvbklkKTtcblxuICAgIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5zZW5kSGVhcnRiZWF0KHNlc3Npb25JZCk7XG4gICAgfSwgaW50ZXJ2YWxNcyk7XG5cbiAgICB0aGlzLmhlYXJ0YmVhdFRpbWVycy5zZXQoc2Vzc2lvbklkLCB0aW1lcik7XG4gICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBIZWFydGJlYXQgc3RhcnRlZCcsIHsgc2Vzc2lvbklkLCBpbnRlcnZhbE1zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgaGVhcnRiZWF0IGZvciBhIHNlc3Npb24uXG4gICAqL1xuICBwdWJsaWMgc3RvcEhlYXJ0YmVhdChzZXNzaW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRpbWVyID0gdGhpcy5oZWFydGJlYXRUaW1lcnMuZ2V0KHNlc3Npb25JZCk7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgIHRoaXMuaGVhcnRiZWF0VGltZXJzLmRlbGV0ZShzZXNzaW9uSWQpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1tBcHBTeW5jQ2xpZW50XSBIZWFydGJlYXQgc3RvcHBlZCcsIHsgc2Vzc2lvbklkIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgc2luZ2xlIGhlYXJ0YmVhdCB1cGRhdGUuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNlbmRIZWFydGJlYXQoc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXNzaW9uKHtcbiAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICBsYXN0SGVhcnRiZWF0QXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdbQXBwU3luY0NsaWVudF0gSGVhcnRiZWF0IHNlbnQnLCB7IHNlc3Npb25JZCB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ1tBcHBTeW5jQ2xpZW50XSBIZWFydGJlYXQgZmFpbGVkJywgeyBzZXNzaW9uSWQsIGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnVwIGFsbCBzdWJzY3JpcHRpb25zIGFuZCBoZWFydGJlYXRzXG4gICAqL1xuICBwdWJsaWMgY2xlYW51cFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVTdWJzY3JpcHRpb25zLmZvckVhY2goKHN0YXRlKSA9PiB7XG4gICAgICB0aGlzLmNsZWFudXBTdWJzY3JpcHRpb25TdGF0ZShzdGF0ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5hY3RpdmVTdWJzY3JpcHRpb25zLmNsZWFyKCk7XG5cbiAgICB0aGlzLmhlYXJ0YmVhdFRpbWVycy5mb3JFYWNoKCh0aW1lcikgPT4gY2xlYXJJbnRlcnZhbCh0aW1lcikpO1xuICAgIHRoaXMuaGVhcnRiZWF0VGltZXJzLmNsZWFyKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -7,9 +7,43 @@ export declare class AuthService {
|
|
|
7
7
|
private constructor();
|
|
8
8
|
static getInstance(): AuthService;
|
|
9
9
|
/**
|
|
10
|
-
* Open URL in default browser
|
|
10
|
+
* Open URL in the user's default browser. Cross-platform: macOS, Linux,
|
|
11
|
+
* WSL, Windows. Always prints the URL to stdout first as a fallback —
|
|
12
|
+
* if no browser-opening command is available, the user can copy-paste.
|
|
13
|
+
*
|
|
14
|
+
* On WSL, prefers opening the Windows host browser via WSL interop
|
|
15
|
+
* (wslview → cmd.exe → powershell.exe) before falling back to xdg-open.
|
|
11
16
|
*/
|
|
12
17
|
private openBrowser;
|
|
18
|
+
/**
|
|
19
|
+
* Returns the list of browser-opening commands to try in order, based on
|
|
20
|
+
* the current platform. On WSL, returns WSL interop commands first so the
|
|
21
|
+
* Windows browser opens (which is what users actually want on WSL).
|
|
22
|
+
*/
|
|
23
|
+
private getBrowserCommands;
|
|
24
|
+
/**
|
|
25
|
+
* Detect whether we're running inside WSL (1 or 2). Returns false on
|
|
26
|
+
* any non-Linux platform or if /proc/sys/kernel/osrelease is not readable.
|
|
27
|
+
*/
|
|
28
|
+
private isRunningInWSL;
|
|
29
|
+
/**
|
|
30
|
+
* Try each browser-opening command in order. Advances to the next fallback on:
|
|
31
|
+
* - Spawn failure (ENOENT / the command not being installed)
|
|
32
|
+
* - Synchronous throw from spawn()
|
|
33
|
+
* - Runtime failure where the command spawns but exits with a non-zero
|
|
34
|
+
* code (e.g. wslview when WSL interop is disabled, xdg-open when no
|
|
35
|
+
* default browser is registered, cmd.exe failing to launch start)
|
|
36
|
+
* - Process terminated by signal
|
|
37
|
+
*
|
|
38
|
+
* Stays on the current command when:
|
|
39
|
+
* - Process exits with code 0 (success)
|
|
40
|
+
* - Process is still running after 3 seconds (assumed success — opener
|
|
41
|
+
* is doing real work like launching a slow app, not hung)
|
|
42
|
+
*
|
|
43
|
+
* If all attempts exhaust, logs at debug level — the user still has the
|
|
44
|
+
* sign-in URL printed to stdout as a copy-paste fallback.
|
|
45
|
+
*/
|
|
46
|
+
private tryBrowserCommand;
|
|
13
47
|
/**
|
|
14
48
|
* Generate state for CSRF protection
|
|
15
49
|
*/
|
|
@@ -41,11 +41,13 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
42
|
exports.authService = exports.AuthService = void 0;
|
|
43
43
|
const crypto = __importStar(require("crypto"));
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
44
45
|
const http = __importStar(require("http"));
|
|
45
46
|
const child_process_1 = require("child_process");
|
|
46
47
|
const config_1 = require("../config");
|
|
47
48
|
const keychain_1 = require("../keychain");
|
|
48
49
|
const logger_1 = require("../logger");
|
|
50
|
+
const fetch_helpers_1 = require("./fetch-helpers");
|
|
49
51
|
const CALLBACK_PORT = 8080;
|
|
50
52
|
const CALLBACK_PATH = '/callback';
|
|
51
53
|
const REDIRECT_URI = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
|
|
@@ -61,10 +63,154 @@ class AuthService {
|
|
|
61
63
|
return AuthService.instance;
|
|
62
64
|
}
|
|
63
65
|
/**
|
|
64
|
-
* Open URL in default browser
|
|
66
|
+
* Open URL in the user's default browser. Cross-platform: macOS, Linux,
|
|
67
|
+
* WSL, Windows. Always prints the URL to stdout first as a fallback —
|
|
68
|
+
* if no browser-opening command is available, the user can copy-paste.
|
|
69
|
+
*
|
|
70
|
+
* On WSL, prefers opening the Windows host browser via WSL interop
|
|
71
|
+
* (wslview → cmd.exe → powershell.exe) before falling back to xdg-open.
|
|
65
72
|
*/
|
|
66
73
|
openBrowser(url) {
|
|
67
|
-
|
|
74
|
+
// Always print the URL first so users can copy-paste if automatic
|
|
75
|
+
// browser-opening fails (especially important on headless WSL setups).
|
|
76
|
+
console.log('');
|
|
77
|
+
console.log('Opening your browser for sign-in...');
|
|
78
|
+
console.log('If your browser does not open automatically, visit this URL manually:');
|
|
79
|
+
console.log(` ${url}`);
|
|
80
|
+
console.log('');
|
|
81
|
+
const attempts = this.getBrowserCommands();
|
|
82
|
+
this.tryBrowserCommand(attempts, url, 0);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Returns the list of browser-opening commands to try in order, based on
|
|
86
|
+
* the current platform. On WSL, returns WSL interop commands first so the
|
|
87
|
+
* Windows browser opens (which is what users actually want on WSL).
|
|
88
|
+
*/
|
|
89
|
+
getBrowserCommands() {
|
|
90
|
+
const platform = process.platform;
|
|
91
|
+
if (platform === 'darwin') {
|
|
92
|
+
return [{ cmd: 'open', fixedArgs: [] }];
|
|
93
|
+
}
|
|
94
|
+
if (platform === 'win32') {
|
|
95
|
+
// cmd's start needs an empty title as the first arg so that URLs
|
|
96
|
+
// containing special characters aren't misinterpreted as the title.
|
|
97
|
+
return [{ cmd: 'cmd', fixedArgs: ['/c', 'start', ''] }];
|
|
98
|
+
}
|
|
99
|
+
// Linux or WSL
|
|
100
|
+
const attempts = [];
|
|
101
|
+
if (this.isRunningInWSL()) {
|
|
102
|
+
// Prefer opening the Windows host browser via WSL interop.
|
|
103
|
+
attempts.push({ cmd: 'wslview', fixedArgs: [] });
|
|
104
|
+
attempts.push({ cmd: 'cmd.exe', fixedArgs: ['/c', 'start', ''] });
|
|
105
|
+
attempts.push({
|
|
106
|
+
cmd: 'powershell.exe',
|
|
107
|
+
fixedArgs: ['-NoProfile', '-Command', 'Start-Process'],
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// Fall back to generic Linux openers
|
|
111
|
+
attempts.push({ cmd: 'xdg-open', fixedArgs: [] });
|
|
112
|
+
return attempts;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Detect whether we're running inside WSL (1 or 2). Returns false on
|
|
116
|
+
* any non-Linux platform or if /proc/sys/kernel/osrelease is not readable.
|
|
117
|
+
*/
|
|
118
|
+
isRunningInWSL() {
|
|
119
|
+
if (process.platform !== 'linux')
|
|
120
|
+
return false;
|
|
121
|
+
try {
|
|
122
|
+
const osRelease = fs.readFileSync('/proc/sys/kernel/osrelease', 'utf8');
|
|
123
|
+
return /microsoft|wsl/i.test(osRelease);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Try each browser-opening command in order. Advances to the next fallback on:
|
|
131
|
+
* - Spawn failure (ENOENT / the command not being installed)
|
|
132
|
+
* - Synchronous throw from spawn()
|
|
133
|
+
* - Runtime failure where the command spawns but exits with a non-zero
|
|
134
|
+
* code (e.g. wslview when WSL interop is disabled, xdg-open when no
|
|
135
|
+
* default browser is registered, cmd.exe failing to launch start)
|
|
136
|
+
* - Process terminated by signal
|
|
137
|
+
*
|
|
138
|
+
* Stays on the current command when:
|
|
139
|
+
* - Process exits with code 0 (success)
|
|
140
|
+
* - Process is still running after 3 seconds (assumed success — opener
|
|
141
|
+
* is doing real work like launching a slow app, not hung)
|
|
142
|
+
*
|
|
143
|
+
* If all attempts exhaust, logs at debug level — the user still has the
|
|
144
|
+
* sign-in URL printed to stdout as a copy-paste fallback.
|
|
145
|
+
*/
|
|
146
|
+
tryBrowserCommand(attempts, url, index) {
|
|
147
|
+
if (index >= attempts.length) {
|
|
148
|
+
logger_1.logger.debug('[AuthService] No browser-opening command succeeded. ' +
|
|
149
|
+
'User must open the sign-in URL manually (printed to stdout above).');
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const attempt = attempts[index];
|
|
153
|
+
const args = [...attempt.fixedArgs, url];
|
|
154
|
+
let settled = false;
|
|
155
|
+
// Helper to advance exactly once — guards against both 'error' and 'exit'
|
|
156
|
+
// events firing for the same child, or the timeout racing with an event.
|
|
157
|
+
const advance = (reason) => {
|
|
158
|
+
if (settled)
|
|
159
|
+
return;
|
|
160
|
+
settled = true;
|
|
161
|
+
logger_1.logger.debug(`[AuthService] Browser command '${attempt.cmd}' ${reason}; trying next fallback`);
|
|
162
|
+
this.tryBrowserCommand(attempts, url, index + 1);
|
|
163
|
+
};
|
|
164
|
+
// Helper to mark this attempt as successful so no future event handlers
|
|
165
|
+
// fire tryBrowserCommand on the next index.
|
|
166
|
+
const stopTrying = (reason) => {
|
|
167
|
+
if (settled)
|
|
168
|
+
return;
|
|
169
|
+
settled = true;
|
|
170
|
+
logger_1.logger.debug(`[AuthService] Browser command '${attempt.cmd}' ${reason}`);
|
|
171
|
+
};
|
|
172
|
+
let child;
|
|
173
|
+
try {
|
|
174
|
+
child = (0, child_process_1.spawn)(attempt.cmd, args, {
|
|
175
|
+
detached: true,
|
|
176
|
+
stdio: 'ignore',
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
advance(`threw synchronously: ${err?.message || err}`);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
// Fires when the OS cannot spawn the process at all (most commonly ENOENT
|
|
184
|
+
// for "command not found"). The process never actually ran.
|
|
185
|
+
child.on('error', (err) => {
|
|
186
|
+
advance(`failed to spawn: ${err?.message || err}`);
|
|
187
|
+
});
|
|
188
|
+
// Fires after the spawned process exits. code === 0 is success (opener
|
|
189
|
+
// delegated cleanly and returned). Non-zero code or a signal means the
|
|
190
|
+
// opener failed at runtime — we fall through to the next fallback.
|
|
191
|
+
child.on('exit', (code, signal) => {
|
|
192
|
+
if (code === 0) {
|
|
193
|
+
stopTrying('exited successfully');
|
|
194
|
+
}
|
|
195
|
+
else if (signal) {
|
|
196
|
+
advance(`terminated by signal ${signal}`);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
advance(`exited with code ${code}`);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
// If the opener is still running after 3 seconds, it is almost certainly
|
|
203
|
+
// doing real work (launching a slow browser, waiting for Windows interop)
|
|
204
|
+
// rather than hung. Stop trying more fallbacks so we don't spawn multiple
|
|
205
|
+
// browsers. The child keeps running independently because detached:true.
|
|
206
|
+
const timer = setTimeout(() => {
|
|
207
|
+
stopTrying('still running after 3s, assuming success');
|
|
208
|
+
}, 3000);
|
|
209
|
+
// Don't let the timer itself keep the Node event loop alive.
|
|
210
|
+
timer.unref();
|
|
211
|
+
// Detach the child from the parent's event loop so Node doesn't block
|
|
212
|
+
// on its exit. Exit handler still fires if/when the child actually exits.
|
|
213
|
+
child.unref();
|
|
68
214
|
}
|
|
69
215
|
/**
|
|
70
216
|
* Generate state for CSRF protection
|
|
@@ -98,11 +244,11 @@ class AuthService {
|
|
|
98
244
|
code: code,
|
|
99
245
|
redirect_uri: REDIRECT_URI,
|
|
100
246
|
});
|
|
101
|
-
const response = await
|
|
247
|
+
const response = await (0, fetch_helpers_1.fetchWithDiagnostics)(tokenUrl, {
|
|
102
248
|
method: 'POST',
|
|
103
249
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
104
250
|
body: params.toString(),
|
|
105
|
-
});
|
|
251
|
+
}, 'Token exchange');
|
|
106
252
|
if (!response.ok) {
|
|
107
253
|
const errorText = await response.text();
|
|
108
254
|
throw new Error(`Token exchange failed: ${response.status} ${errorText}`);
|
|
@@ -135,11 +281,11 @@ class AuthService {
|
|
|
135
281
|
client_id: config.aws.cognitoClientId,
|
|
136
282
|
refresh_token: refreshToken,
|
|
137
283
|
});
|
|
138
|
-
const response = await
|
|
284
|
+
const response = await (0, fetch_helpers_1.fetchWithDiagnostics)(tokenUrl, {
|
|
139
285
|
method: 'POST',
|
|
140
286
|
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
141
287
|
body: params.toString(),
|
|
142
|
-
});
|
|
288
|
+
}, 'Token refresh');
|
|
143
289
|
if (!response.ok) {
|
|
144
290
|
throw new Error(`Token refresh failed: ${response.status}`);
|
|
145
291
|
}
|
|
@@ -209,14 +355,22 @@ class AuthService {
|
|
|
209
355
|
}, 500);
|
|
210
356
|
}
|
|
211
357
|
catch (err) {
|
|
358
|
+
// HTML-escape the error message so newlines and special chars
|
|
359
|
+
// render safely. Multi-line diagnostic messages (from
|
|
360
|
+
// fetchWithDiagnostics) need <pre> to preserve formatting.
|
|
361
|
+
const safeMessage = String(err?.message || err)
|
|
362
|
+
.replace(/&/g, '&')
|
|
363
|
+
.replace(/</g, '<')
|
|
364
|
+
.replace(/>/g, '>');
|
|
212
365
|
res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
213
366
|
res.end(`
|
|
214
367
|
<!DOCTYPE html>
|
|
215
368
|
<html>
|
|
216
369
|
<head><title>Error</title></head>
|
|
217
|
-
<body style="font-family: system-ui; max-width:
|
|
218
|
-
<h1 style="color: #ef4444;">✗ Authentication Failed</h1>
|
|
219
|
-
<
|
|
370
|
+
<body style="font-family: system-ui; max-width: 720px; margin: 50px auto; padding: 0 16px;">
|
|
371
|
+
<h1 style="color: #ef4444; text-align: center;">✗ Authentication Failed</h1>
|
|
372
|
+
<pre style="background: #f4f4f5; padding: 16px; border-radius: 8px; white-space: pre-wrap; word-wrap: break-word; font-size: 13px; line-height: 1.5;">${safeMessage}</pre>
|
|
373
|
+
<p style="text-align: center; color: #71717a; margin-top: 24px;">You can close this window and try again in your terminal.</p>
|
|
220
374
|
</body>
|
|
221
375
|
</html>
|
|
222
376
|
`);
|
|
@@ -307,4 +461,4 @@ class AuthService {
|
|
|
307
461
|
}
|
|
308
462
|
exports.AuthService = AuthService;
|
|
309
463
|
exports.authService = AuthService.getInstance();
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvYXV0aC1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxFQUFFO0FBQ0Ysa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixFQUFFO0FBQ0YsK0JBQStCO0FBQy9CLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVGLCtDQUFpQztBQUNqQywyQ0FBNkI7QUFDN0IsaURBQXNDO0FBQ3RDLHNDQUFzRDtBQUN0RCwwQ0FBOEM7QUFDOUMsc0NBQW1DO0FBR25DLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQztBQUMzQixNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUM7QUFDbEMsTUFBTSxZQUFZLEdBQUcsb0JBQW9CLGFBQWEsR0FBRyxhQUFhLEVBQUUsQ0FBQztBQUV6RTs7R0FFRztBQUNILE1BQWEsV0FBVztJQUd0QixnQkFBdUIsQ0FBQztJQUV4QixNQUFNLENBQUMsV0FBVztRQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFCLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNLLFdBQVcsQ0FBQyxHQUFXO1FBQzdCLElBQUEscUJBQUssRUFBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYTtRQUNuQixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FF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LEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsU0FBUztRQUNiLE1BQU0sTUFBTSxHQUFHLE1BQU0sMEJBQWUsQ0FBQyxTQUFTLENBQUMsSUFBQSx1QkFBYyxHQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFFRCxPQUFPO1lBQ0wsYUFBYSxFQUFFLENBQUMsMEJBQWUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ3RELE1BQU07U0FDUCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeFRELGtDQXdUQztBQUVZLFFBQUEsV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vXG4vLyBhdXRoLXNlcnZpY2UudHNcbi8vIENvZGVWaWJlIENvcmVcbi8vXG4vLyBPQXV0aCBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlXG4vL1xuXG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGh0dHAgZnJvbSAnaHR0cCc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgZ2V0Q29uZmlnLCBnZXRFbnZpcm9ubWVudCB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBrZXljaGFpbk1hbmFnZXIgfSBmcm9tICcuLi9rZXljaGFpbic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHsgVG9rZW5EYXRhIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBDQUxMQkFDS19QT1JUID0gODA4MDtcbmNvbnN0IENBTExCQUNLX1BBVEggPSAnL2NhbGxiYWNrJztcbmNvbnN0IFJFRElSRUNUX1VSSSA9IGBodHRwOi8vbG9jYWxob3N0OiR7Q0FMTEJBQ0tfUE9SVH0ke0NBTExCQUNLX1BBVEh9YDtcblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBzZXJ2aWNlIGZvciBPQXV0aCBmbG93c1xuICovXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQXV0aFNlcnZpY2U7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc3RhdGljIGdldEluc3RhbmNlKCk6IEF1dGhTZXJ2aWNlIHtcbiAgICBpZiAoIUF1dGhTZXJ2aWNlLmluc3RhbmNlKSB7XG4gICAgICBBdXRoU2VydmljZS5pbnN0YW5jZSA9IG5ldyBBdXRoU2VydmljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gQXV0aFNlcnZpY2UuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBVUkwgaW4gZGVmYXVsdCBicm93c2VyXG4gICAqL1xuICBwcml2YXRlIG9wZW5Ccm93c2VyKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgc3Bhd24oJ29wZW4nLCBbdXJsXSwgeyBkZXRhY2hlZDogdHJ1ZSwgc3RkaW86ICdpZ25vcmUnIH0pLnVucmVmKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgc3RhdGUgZm9yIENTUkYgcHJvdGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZVN0YXRlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0by5yYW5kb21CeXRlcygzMikudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGF1dGhvcml6YXRpb24gVVJMXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQXV0aFVybChzdGF0ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIGNsaWVudF9pZDogY29uZmlnLmF3cy5jb2duaXRvQ2xpZW50SWQsXG4gICAgICByZXNwb25zZV90eXBlOiAnY29kZScsXG4gICAgICBzY29wZTogJ2VtYWlsIG9wZW5pZCBwcm9maWxlJyxcbiAgICAgIHJlZGlyZWN0X3VyaTogUkVESVJFQ1RfVVJJLFxuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGBodHRwczovLyR7Y29uZmlnLmF3cy5jb2duaXRvRG9tYWlufS9vYXV0aDIvYXV0aG9yaXplPyR7cGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhdXRob3JpemF0aW9uIGNvZGUgZm9yIHRva2Vuc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGNoYW5nZUNvZGVGb3JUb2tlbnMoY29kZTogc3RyaW5nKTogUHJvbWlzZTx7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICBpZFRva2VuOiBzdHJpbmc7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gICAgZXhwaXJlc0luOiBudW1iZXI7XG4gIH0+IHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBjb25zdCB0b2tlblVybCA9IGBodHRwczovLyR7Y29uZmlnLmF3cy5jb2duaXRvRG9tYWlufS9vYXV0aDIvdG9rZW5gO1xuXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgIGNsaWVudF9pZDogY29uZmlnLmF3cy5jb2duaXRvQ2xpZW50SWQsXG4gICAgICBjb2RlOiBjb2RlLFxuICAgICAgcmVkaXJlY3RfdXJpOiBSRURJUkVDVF9VUkksXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRva2VuVXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH0sXG4gICAgICBib2R5OiBwYXJhbXMudG9TdHJpbmcoKSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVG9rZW4gZXhjaGFuZ2UgZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtlcnJvclRleHR9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7XG4gICAgICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgICAgIGlkX3Rva2VuOiBzdHJpbmc7XG4gICAgICByZWZyZXNoX3Rva2VuOiBzdHJpbmc7XG4gICAgICBleHBpcmVzX2luOiBudW1iZXI7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY2Nlc3NUb2tlbjogZGF0YS5hY2Nlc3NfdG9rZW4sXG4gICAgICBpZFRva2VuOiBkYXRhLmlkX3Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuOiBkYXRhLnJlZnJlc2hfdG9rZW4sXG4gICAgICBleHBpcmVzSW46IGRhdGEuZXhwaXJlc19pbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZSBKV1QgcGF5bG9hZFxuICAgKi9cbiAgcHJpdmF0ZSBkZWNvZGVKd3QodG9rZW46IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBKV1QnKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShwYXJ0c1sxXSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGYtOCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRva2Vuc1xuICAgKi9cbiAgYXN5bmMgcmVmcmVzaFRva2VucyhyZWZyZXNoVG9rZW46IHN0cmluZyk6IFByb21pc2U8e1xuICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gICAgaWRUb2tlbjogc3RyaW5nO1xuICAgIGV4cGlyZXNJbjogbnVtYmVyO1xuICB9PiB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgdG9rZW5VcmwgPSBgaHR0cHM6Ly8ke2NvbmZpZy5hd3MuY29nbml0b0RvbWFpbn0vb2F1dGgyL3Rva2VuYDtcblxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgY2xpZW50X2lkOiBjb25maWcuYXdzLmNvZ25pdG9DbGllbnRJZCxcbiAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbixcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godG9rZW5VcmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICAgIGJvZHk6IHBhcmFtcy50b1N0cmluZygpLFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiByZWZyZXNoIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyB7XG4gICAgICBhY2Nlc3NfdG9rZW46IHN0cmluZztcbiAgICAgIGlkX3Rva2VuOiBzdHJpbmc7XG4gICAgICBleHBpcmVzX2luOiBudW1iZXI7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBhY2Nlc3NUb2tlbjogZGF0YS5hY2Nlc3NfdG9rZW4sXG4gICAgICBpZFRva2VuOiBkYXRhLmlkX3Rva2VuLFxuICAgICAgZXhwaXJlc0luOiBkYXRhLmV4cGlyZXNfaW4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dpbiB2aWEgT0F1dGggYnJvd3NlciBmbG93XG4gICAqL1xuICBhc3luYyBsb2dpbigpOiBQcm9taXNlPFRva2VuRGF0YSB8IG51bGw+IHtcbiAgICAvLyBDaGVjayBpZiBhbHJlYWR5IGxvZ2dlZCBpblxuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQga2V5Y2hhaW5NYW5hZ2VyLmdldFRva2VucyhnZXRFbnZpcm9ubWVudCgpKTtcbiAgICBpZiAoZXhpc3RpbmcgJiYgIWtleWNoYWluTWFuYWdlci5pc1Rva2VuRXhwaXJlZChleGlzdGluZykpIHtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2VuZXJhdGVTdGF0ZSgpO1xuICAgIGNvbnN0IGF1dGhVcmwgPSB0aGlzLmJ1aWxkQXV0aFVybChzdGF0ZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGlmICghcmVxLnVybD8uc3RhcnRzV2l0aChDQUxMQkFDS19QQVRIKSkge1xuICAgICAgICAgIHJlcy53cml0ZUhlYWQoNDA0KTtcbiAgICAgICAgICByZXMuZW5kKCdOb3QgZm91bmQnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCwgYGh0dHA6Ly9sb2NhbGhvc3Q6JHtDQUxMQkFDS19QT1JUfWApO1xuICAgICAgICAgIGNvbnN0IGNvZGUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnY29kZScpO1xuICAgICAgICAgIGNvbnN0IHJldHVybmVkU3RhdGUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnc3RhdGUnKTtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KCdlcnJvcicpO1xuXG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9BdXRoIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZXR1cm5lZFN0YXRlICE9PSBzdGF0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGF0ZSBtaXNtYXRjaCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghY29kZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhdXRob3JpemF0aW9uIGNvZGUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCB0aGlzLmV4Y2hhbmdlQ29kZUZvclRva2Vucyhjb2RlKTtcbiAgICAgICAgICBjb25zdCBpZFBheWxvYWQgPSB0aGlzLmRlY29kZUp3dCh0b2tlbnMuaWRUb2tlbik7XG5cbiAgICAgICAgICBjb25zdCB0b2tlbkRhdGE6IFRva2VuRGF0YSA9IHtcbiAgICAgICAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbnMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgICBpZFRva2VuOiB0b2tlbnMuaWRUb2tlbixcbiAgICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArICh0b2tlbnMuZXhwaXJlc0luICogMTAwMCksXG4gICAgICAgICAgICB1c2VySWQ6IGlkUGF5bG9hZC5zdWIsXG4gICAgICAgICAgICBlbWFpbDogaWRQYXlsb2FkLmVtYWlsIHx8ICd1bmtub3duJyxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgYXdhaXQga2V5Y2hhaW5NYW5hZ2VyLnNldFRva2Vucyh0b2tlbkRhdGEsIGdldEVudmlyb25tZW50KCkpO1xuXG4gICAgICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHsgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgnIH0pO1xuICAgICAgICAgIHJlcy5lbmQoYFxuICAgICAgICAgICAgPCFET0NUWVBFIGh0bWw+XG4gICAgICAgICAgICA8aHRtbD5cbiAgICAgICAgICAgIDxoZWFkPjx0aXRsZT5TdWNjZXNzPC90aXRsZT48L2hlYWQ+XG4gICAgICAgICAgICA8Ym9keSBzdHlsZT1cImZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7IG1heC13aWR0aDogNjAwcHg7IG1hcmdpbjogNTBweCBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgIDxoMSBzdHlsZT1cImNvbG9yOiAjMjJjNTVlO1wiPiYjMTAwMDM7IEF1dGhlbnRpY2F0aW9uIFN1Y2Nlc3NmdWw8L2gxPlxuICAgICAgICAgICAgICA8cD5Zb3UgY2FuIGNsb3NlIHRoaXMgd2luZG93LjwvcD5cbiAgICAgICAgICAgIDwvYm9keT5cbiAgICAgICAgICAgIDwvaHRtbD5cbiAgICAgICAgICBgKTtcblxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2VydmVyLmNsb3NlKCgpID0+IHJlc29sdmUodG9rZW5EYXRhKSk7XG4gICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICByZXMud3JpdGVIZWFkKDQwMCwgeyAnQ29udGVudC1UeXBlJzogJ3RleHQvaHRtbDsgY2hhcnNldD11dGYtOCcgfSk7XG4gICAgICAgICAgcmVzLmVuZChgXG4gICAgICAgICAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICAgICAgICAgIDxodG1sPlxuICAgICAgICAgICAgPGhlYWQ+PHRpdGxlPkVycm9yPC90aXRsZT48L2hlYWQ+XG4gICAgICAgICAgICA8Ym9keSBzdHlsZT1cImZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7IG1heC13aWR0aDogNjAwcHg7IG1hcmdpbjogNTBweCBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgIDxoMSBzdHlsZT1cImNvbG9yOiAjZWY0NDQ0O1wiPiYjMTAwMDc7IEF1dGhlbnRpY2F0aW9uIEZhaWxlZDwvaDE+XG4gICAgICAgICAgICAgIDxwPiR7ZXJyLm1lc3NhZ2V9PC9wPlxuICAgICAgICAgICAgPC9ib2R5PlxuICAgICAgICAgICAgPC9odG1sPlxuICAgICAgICAgIGApO1xuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIub24oJ2Vycm9yJywgKGVycjogYW55KSA9PiB7XG4gICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VBRERSSU5VU0UnKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUG9ydCAke0NBTExCQUNLX1BPUlR9IGlzIGluIHVzZWApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5saXN0ZW4oQ0FMTEJBQ0tfUE9SVCwgJ2xvY2FsaG9zdCcsICgpID0+IHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ1tBdXRoU2VydmljZV0gQ2FsbGJhY2sgc2VydmVyIHN0YXJ0ZWQnKTtcbiAgICAgICAgdGhpcy5vcGVuQnJvd3NlcihhdXRoVXJsKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUaW1lb3V0XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2VydmVyLmNsb3NlKCgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0xvZ2luIHRpbWVvdXQnKSkpO1xuICAgICAgfSwgMiAqIDYwICogMTAwMCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9nb3V0XG4gICAqL1xuICBhc3luYyBsb2dvdXQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IGtleWNoYWluTWFuYWdlci5kZWxldGVUb2tlbnMoZ2V0RW52aXJvbm1lbnQoKSk7XG5cbiAgICBpZiAoZGVsZXRlZCkge1xuICAgICAgLy8gU3RhcnQgdGVtcG9yYXJ5IHNlcnZlciB0byBoYW5kbGUgc2lnbm91dCBjYWxsYmFja1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKChyZXEsIHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXEudXJsPy5zdGFydHNXaXRoKCcvc2lnbm91dCcpKSB7XG4gICAgICAgICAgICByZXMud3JpdGVIZWFkKDIwMCwgeyAnQ29udGVudC1UeXBlJzogJ3RleHQvaHRtbDsgY2hhcnNldD11dGYtOCcgfSk7XG4gICAgICAgICAgICByZXMuZW5kKGBcbiAgICAgICAgICAgICAgPCFET0NUWVBFIGh0bWw+XG4gICAgICAgICAgICAgIDxodG1sPlxuICAgICAgICAgICAgICA8aGVhZD48dGl0bGU+U2lnbmVkIE91dDwvdGl0bGU+PC9oZWFkPlxuICAgICAgICAgICAgICA8Ym9keSBzdHlsZT1cImZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7IG1heC13aWR0aDogNjAwcHg7IG1hcmdpbjogNTBweCBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPGgxIHN0eWxlPVwiY29sb3I6ICMyMmM1NWU7XCI+JiMxMDAwMzsgU2lnbmVkIE91dDwvaDE+XG4gICAgICAgICAgICAgICAgPHA+WW91IGNhbiBjbG9zZSB0aGlzIHdpbmRvdy48L3A+XG4gICAgICAgICAgICAgIDwvYm9keT5cbiAgICAgICAgICAgICAgPC9odG1sPlxuICAgICAgICAgICAgYCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMud3JpdGVIZWFkKDQwNCk7XG4gICAgICAgICAgICByZXMuZW5kKCdOb3QgZm91bmQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlcnZlci5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTsgLy8gU3RpbGwgcmV0dXJuIHRydWUgc2luY2UgdG9rZW5zIHdlcmUgZGVsZXRlZFxuICAgICAgICB9KTtcblxuICAgICAgICBzZXJ2ZXIubGlzdGVuKENBTExCQUNLX1BPUlQsICdsb2NhbGhvc3QnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nb3V0VXJsID0gYGh0dHBzOi8vJHtjb25maWcuYXdzLmNvZ25pdG9Eb21haW59L2xvZ291dD9gICtcbiAgICAgICAgICAgIGBjbGllbnRfaWQ9JHtjb25maWcuYXdzLmNvZ25pdG9DbGllbnRJZH0mYCArXG4gICAgICAgICAgICBgbG9nb3V0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChSRURJUkVDVF9VUkkucmVwbGFjZSgnL2NhbGxiYWNrJywgJy9zaWdub3V0JykpfWA7XG5cbiAgICAgICAgICB0aGlzLm9wZW5Ccm93c2VyKGxvZ291dFVybCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRpbWVvdXQgYWZ0ZXIgMzAgc2Vjb25kc1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XG4gICAgICAgIH0sIDMwICogMTAwMCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBhdXRoIHN0YXR1c1xuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8eyBhdXRoZW50aWNhdGVkOiBib29sZWFuOyB0b2tlbnM/OiBUb2tlbkRhdGEgfT4ge1xuICAgIGNvbnN0IHRva2VucyA9IGF3YWl0IGtleWNoYWluTWFuYWdlci5nZXRUb2tlbnMoZ2V0RW52aXJvbm1lbnQoKSk7XG4gICAgaWYgKCF0b2tlbnMpIHtcbiAgICAgIHJldHVybiB7IGF1dGhlbnRpY2F0ZWQ6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGF1dGhlbnRpY2F0ZWQ6ICFrZXljaGFpbk1hbmFnZXIuaXNUb2tlbkV4cGlyZWQodG9rZW5zKSxcbiAgICAgIHRva2VucyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhdXRoU2VydmljZSA9IEF1dGhTZXJ2aWNlLmdldEluc3RhbmNlKCk7XG4iXX0=
|
|
464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvYXV0aC1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxFQUFFO0FBQ0Ysa0JBQWtCO0FBQ2xCLGdCQUFnQjtBQUNoQixFQUFFO0FBQ0YsK0JBQStCO0FBQy9CLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVGLCtDQUFpQztBQUNqQyx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGlEQUFzQztBQUN0QyxzQ0FBc0Q7QUFDdEQsMENBQThDO0FBQzlDLHNDQUFtQztBQUVuQyxtREFBdUQ7QUFFdkQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzNCLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQztBQUNsQyxNQUFNLFlBQVksR0FBRyxvQkFBb0IsYUFBYSxHQUFHLGFBQWEsRUFBRSxDQUFDO0FBRXpFOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBR3RCLGdCQUF1QixDQUFDO0lBRXhCLE1BQU0sQ0FBQyxXQUFXO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzNDLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyxXQUFXLENBQUMsR0FBVztRQUM3QixrRUFBa0U7UUFDbEUsdUVBQXVFO1FBQ3ZFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsdUVBQXVFLENBQUMsQ0FBQztRQUNyRixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN4QixPQUFP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Q0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxTQUFTO1FBQ2IsTUFBTSxNQUFNLEdBQUcsTUFBTSwwQkFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFBLHVCQUFjLEdBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUVELE9BQU87WUFDTCxhQUFhLEVBQUUsQ0FBQywwQkFBZSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDdEQsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE1ZUQsa0NBNGVDO0FBRVksUUFBQSxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy9cbi8vIGF1dGgtc2VydmljZS50c1xuLy8gQ29kZVZpYmUgQ29yZVxuLy9cbi8vIE9BdXRoIGF1dGhlbnRpY2F0aW9uIHNlcnZpY2Vcbi8vXG5cbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBnZXRDb25maWcsIGdldEVudmlyb25tZW50IH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGtleWNoYWluTWFuYWdlciB9IGZyb20gJy4uL2tleWNoYWluJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBUb2tlbkRhdGEgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBmZXRjaFdpdGhEaWFnbm9zdGljcyB9IGZyb20gJy4vZmV0Y2gtaGVscGVycyc7XG5cbmNvbnN0IENBTExCQUNLX1BPUlQgPSA4MDgwO1xuY29uc3QgQ0FMTEJBQ0tfUEFUSCA9ICcvY2FsbGJhY2snO1xuY29uc3QgUkVESVJFQ1RfVVJJID0gYGh0dHA6Ly9sb2NhbGhvc3Q6JHtDQUxMQkFDS19QT1JUfSR7Q0FMTEJBQ0tfUEFUSH1gO1xuXG4vKipcbiAqIEF1dGhlbnRpY2F0aW9uIHNlcnZpY2UgZm9yIE9BdXRoIGZsb3dzXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBBdXRoU2VydmljZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogQXV0aFNlcnZpY2Uge1xuICAgIGlmICghQXV0aFNlcnZpY2UuaW5zdGFuY2UpIHtcbiAgICAgIEF1dGhTZXJ2aWNlLmluc3RhbmNlID0gbmV3IEF1dGhTZXJ2aWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBBdXRoU2VydmljZS5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIFVSTCBpbiB0aGUgdXNlcidzIGRlZmF1bHQgYnJvd3Nlci4gQ3Jvc3MtcGxhdGZvcm06IG1hY09TLCBMaW51eCxcbiAgICogV1NMLCBXaW5kb3dzLiBBbHdheXMgcHJpbnRzIHRoZSBVUkwgdG8gc3Rkb3V0IGZpcnN0IGFzIGEgZmFsbGJhY2sg4oCUXG4gICAqIGlmIG5vIGJyb3dzZXItb3BlbmluZyBjb21tYW5kIGlzIGF2YWlsYWJsZSwgdGhlIHVzZXIgY2FuIGNvcHktcGFzdGUuXG4gICAqXG4gICAqIE9uIFdTTCwgcHJlZmVycyBvcGVuaW5nIHRoZSBXaW5kb3dzIGhvc3QgYnJvd3NlciB2aWEgV1NMIGludGVyb3BcbiAgICogKHdzbHZpZXcg4oaSIGNtZC5leGUg4oaSIHBvd2Vyc2hlbGwuZXhlKSBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHhkZy1vcGVuLlxuICAgKi9cbiAgcHJpdmF0ZSBvcGVuQnJvd3Nlcih1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEFsd2F5cyBwcmludCB0aGUgVVJMIGZpcnN0IHNvIHVzZXJzIGNhbiBjb3B5LXBhc3RlIGlmIGF1dG9tYXRpY1xuICAgIC8vIGJyb3dzZXItb3BlbmluZyBmYWlscyAoZXNwZWNpYWxseSBpbXBvcnRhbnQgb24gaGVhZGxlc3MgV1NMIHNldHVwcykuXG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIGNvbnNvbGUubG9nKCdPcGVuaW5nIHlvdXIgYnJvd3NlciBmb3Igc2lnbi1pbi4uLicpO1xuICAgIGNvbnNvbGUubG9nKCdJZiB5b3VyIGJyb3dzZXIgZG9lcyBub3Qgb3BlbiBhdXRvbWF0aWNhbGx5LCB2aXNpdCB0aGlzIFVSTCBtYW51YWxseTonKTtcbiAgICBjb25zb2xlLmxvZyhgICAke3VybH1gKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG5cbiAgICBjb25zdCBhdHRlbXB0cyA9IHRoaXMuZ2V0QnJvd3NlckNvbW1hbmRzKCk7XG4gICAgdGhpcy50cnlCcm93c2VyQ29tbWFuZChhdHRlbXB0cywgdXJsLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGJyb3dzZXItb3BlbmluZyBjb21tYW5kcyB0byB0cnkgaW4gb3JkZXIsIGJhc2VkIG9uXG4gICAqIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBPbiBXU0wsIHJldHVybnMgV1NMIGludGVyb3AgY29tbWFuZHMgZmlyc3Qgc28gdGhlXG4gICAqIFdpbmRvd3MgYnJvd3NlciBvcGVucyAod2hpY2ggaXMgd2hhdCB1c2VycyBhY3R1YWxseSB3YW50IG9uIFdTTCkuXG4gICAqL1xuICBwcml2YXRlIGdldEJyb3dzZXJDb21tYW5kcygpOiBBcnJheTx7IGNtZDogc3RyaW5nOyBmaXhlZEFyZ3M6IHN0cmluZ1tdIH0+IHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm07XG5cbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgICByZXR1cm4gW3sgY21kOiAnb3BlbicsIGZpeGVkQXJnczogW10gfV07XG4gICAgfVxuXG4gICAgaWYgKHBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAvLyBjbWQncyBzdGFydCBuZWVkcyBhbiBlbXB0eSB0aXRsZSBhcyB0aGUgZmlyc3QgYXJnIHNvIHRoYXQgVVJMc1xuICAgICAgLy8gY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlbid0IG1pc2ludGVycHJldGVkIGFzIHRoZSB0aXRsZS5cbiAgICAgIHJldHVybiBbeyBjbWQ6ICdjbWQnLCBmaXhlZEFyZ3M6IFsnL2MnLCAnc3RhcnQnLCAnJ10gfV07XG4gICAgfVxuXG4gICAgLy8gTGludXggb3IgV1NMXG4gICAgY29uc3QgYXR0ZW1wdHM6IEFycmF5PHsgY21kOiBzdHJpbmc7IGZpeGVkQXJnczogc3RyaW5nW10gfT4gPSBbXTtcblxuICAgIGlmICh0aGlzLmlzUnVubmluZ0luV1NMKCkpIHtcbiAgICAgIC8vIFByZWZlciBvcGVuaW5nIHRoZSBXaW5kb3dzIGhvc3QgYnJvd3NlciB2aWEgV1NMIGludGVyb3AuXG4gICAgICBhdHRlbXB0cy5wdXNoKHsgY21kOiAnd3NsdmlldycsIGZpeGVkQXJnczogW10gfSk7XG4gICAgICBhdHRlbXB0cy5wdXNoKHsgY21kOiAnY21kLmV4ZScsIGZpeGVkQXJnczogWycvYycsICdzdGFydCcsICcnXSB9KTtcbiAgICAgIGF0dGVtcHRzLnB1c2goe1xuICAgICAgICBjbWQ6ICdwb3dlcnNoZWxsLmV4ZScsXG4gICAgICAgIGZpeGVkQXJnczogWyctTm9Qcm9maWxlJywgJy1Db21tYW5kJywgJ1N0YXJ0LVByb2Nlc3MnXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byBnZW5lcmljIExpbnV4IG9wZW5lcnNcbiAgICBhdHRlbXB0cy5wdXNoKHsgY21kOiAneGRnLW9wZW4nLCBmaXhlZEFyZ3M6IFtdIH0pO1xuXG4gICAgcmV0dXJuIGF0dGVtcHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCB3aGV0aGVyIHdlJ3JlIHJ1bm5pbmcgaW5zaWRlIFdTTCAoMSBvciAyKS4gUmV0dXJucyBmYWxzZSBvblxuICAgKiBhbnkgbm9uLUxpbnV4IHBsYXRmb3JtIG9yIGlmIC9wcm9jL3N5cy9rZXJuZWwvb3NyZWxlYXNlIGlzIG5vdCByZWFkYWJsZS5cbiAgICovXG4gIHByaXZhdGUgaXNSdW5uaW5nSW5XU0woKTogYm9vbGVhbiB7XG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICdsaW51eCcpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3NSZWxlYXNlID0gZnMucmVhZEZpbGVTeW5jKCcvcHJvYy9zeXMva2VybmVsL29zcmVsZWFzZScsICd1dGY4Jyk7XG4gICAgICByZXR1cm4gL21pY3Jvc29mdHx3c2wvaS50ZXN0KG9zUmVsZWFzZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSBlYWNoIGJyb3dzZXItb3BlbmluZyBjb21tYW5kIGluIG9yZGVyLiBBZHZhbmNlcyB0byB0aGUgbmV4dCBmYWxsYmFjayBvbjpcbiAgICogICAtIFNwYXduIGZhaWx1cmUgKEVOT0VOVCAvIHRoZSBjb21tYW5kIG5vdCBiZWluZyBpbnN0YWxsZWQpXG4gICAqICAgLSBTeW5jaHJvbm91cyB0aHJvdyBmcm9tIHNwYXduKClcbiAgICogICAtIFJ1bnRpbWUgZmFpbHVyZSB3aGVyZSB0aGUgY29tbWFuZCBzcGF3bnMgYnV0IGV4aXRzIHdpdGggYSBub24temVyb1xuICAgKiAgICAgY29kZSAoZS5nLiB3c2x2aWV3IHdoZW4gV1NMIGludGVyb3AgaXMgZGlzYWJsZWQsIHhkZy1vcGVuIHdoZW4gbm9cbiAgICogICAgIGRlZmF1bHQgYnJvd3NlciBpcyByZWdpc3RlcmVkLCBjbWQuZXhlIGZhaWxpbmcgdG8gbGF1bmNoIHN0YXJ0KVxuICAgKiAgIC0gUHJvY2VzcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbFxuICAgKlxuICAgKiBTdGF5cyBvbiB0aGUgY3VycmVudCBjb21tYW5kIHdoZW46XG4gICAqICAgLSBQcm9jZXNzIGV4aXRzIHdpdGggY29kZSAwIChzdWNjZXNzKVxuICAgKiAgIC0gUHJvY2VzcyBpcyBzdGlsbCBydW5uaW5nIGFmdGVyIDMgc2Vjb25kcyAoYXNzdW1lZCBzdWNjZXNzIOKAlCBvcGVuZXJcbiAgICogICAgIGlzIGRvaW5nIHJlYWwgd29yayBsaWtlIGxhdW5jaGluZyBhIHNsb3cgYXBwLCBub3QgaHVuZylcbiAgICpcbiAgICogSWYgYWxsIGF0dGVtcHRzIGV4aGF1c3QsIGxvZ3MgYXQgZGVidWcgbGV2ZWwg4oCUIHRoZSB1c2VyIHN0aWxsIGhhcyB0aGVcbiAgICogc2lnbi1pbiBVUkwgcHJpbnRlZCB0byBzdGRvdXQgYXMgYSBjb3B5LXBhc3RlIGZhbGxiYWNrLlxuICAgKi9cbiAgcHJpdmF0ZSB0cnlCcm93c2VyQ29tbWFuZChcbiAgICBhdHRlbXB0czogQXJyYXk8eyBjbWQ6IHN0cmluZzsgZml4ZWRBcmdzOiBzdHJpbmdbXSB9PixcbiAgICB1cmw6IHN0cmluZyxcbiAgICBpbmRleDogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGlmIChpbmRleCA+PSBhdHRlbXB0cy5sZW5ndGgpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgJ1tBdXRoU2VydmljZV0gTm8gYnJvd3Nlci1vcGVuaW5nIGNvbW1hbmQgc3VjY2VlZGVkLiAnICtcbiAgICAgICAgICAnVXNlciBtdXN0IG9wZW4gdGhlIHNpZ24taW4gVVJMIG1hbnVhbGx5IChwcmludGVkIHRvIHN0ZG91dCBhYm92ZSkuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRlbXB0ID0gYXR0ZW1wdHNbaW5kZXhdO1xuICAgIGNvbnN0IGFyZ3MgPSBbLi4uYXR0ZW1wdC5maXhlZEFyZ3MsIHVybF07XG4gICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcblxuICAgIC8vIEhlbHBlciB0byBhZHZhbmNlIGV4YWN0bHkgb25jZSDigJQgZ3VhcmRzIGFnYWluc3QgYm90aCAnZXJyb3InIGFuZCAnZXhpdCdcbiAgICAvLyBldmVudHMgZmlyaW5nIGZvciB0aGUgc2FtZSBjaGlsZCwgb3IgdGhlIHRpbWVvdXQgcmFjaW5nIHdpdGggYW4gZXZlbnQuXG4gICAgY29uc3QgYWR2YW5jZSA9IChyZWFzb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHNldHRsZWQpIHJldHVybjtcbiAgICAgIHNldHRsZWQgPSB0cnVlO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgW0F1dGhTZXJ2aWNlXSBCcm93c2VyIGNvbW1hbmQgJyR7YXR0ZW1wdC5jbWR9JyAke3JlYXNvbn07IHRyeWluZyBuZXh0IGZhbGxiYWNrYFxuICAgICAgKTtcbiAgICAgIHRoaXMudHJ5QnJvd3NlckNvbW1hbmQoYXR0ZW1wdHMsIHVybCwgaW5kZXggKyAxKTtcbiAgICB9O1xuXG4gICAgLy8gSGVscGVyIHRvIG1hcmsgdGhpcyBhdHRlbXB0IGFzIHN1Y2Nlc3NmdWwgc28gbm8gZnV0dXJlIGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gZmlyZSB0cnlCcm93c2VyQ29tbWFuZCBvbiB0aGUgbmV4dCBpbmRleC5cbiAgICBjb25zdCBzdG9wVHJ5aW5nID0gKHJlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgc2V0dGxlZCA9IHRydWU7XG4gICAgICBsb2dnZXIuZGVidWcoYFtBdXRoU2VydmljZV0gQnJvd3NlciBjb21tYW5kICcke2F0dGVtcHQuY21kfScgJHtyZWFzb259YCk7XG4gICAgfTtcblxuICAgIGxldCBjaGlsZDtcbiAgICB0cnkge1xuICAgICAgY2hpbGQgPSBzcGF3bihhdHRlbXB0LmNtZCwgYXJncywge1xuICAgICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgICAgc3RkaW86ICdpZ25vcmUnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGFkdmFuY2UoYHRocmV3IHN5bmNocm9ub3VzbHk6ICR7ZXJyPy5tZXNzYWdlIHx8IGVycn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGaXJlcyB3aGVuIHRoZSBPUyBjYW5ub3Qgc3Bhd24gdGhlIHByb2Nlc3MgYXQgYWxsIChtb3N0IGNvbW1vbmx5IEVOT0VOVFxuICAgIC8vIGZvciBcImNvbW1hbmQgbm90IGZvdW5kXCIpLiBUaGUgcHJvY2VzcyBuZXZlciBhY3R1YWxseSByYW4uXG4gICAgY2hpbGQub24oJ2Vycm9yJywgKGVycjogYW55KSA9PiB7XG4gICAgICBhZHZhbmNlKGBmYWlsZWQgdG8gc3Bhd246ICR7ZXJyPy5tZXNzYWdlIHx8IGVycn1gKTtcbiAgICB9KTtcblxuICAgIC8vIEZpcmVzIGFmdGVyIHRoZSBzcGF3bmVkIHByb2Nlc3MgZXhpdHMuIGNvZGUgPT09IDAgaXMgc3VjY2VzcyAob3BlbmVyXG4gICAgLy8gZGVsZWdhdGVkIGNsZWFubHkgYW5kIHJldHVybmVkKS4gTm9uLXplcm8gY29kZSBvciBhIHNpZ25hbCBtZWFucyB0aGVcbiAgICAvLyBvcGVuZXIgZmFpbGVkIGF0IHJ1bnRpbWUg4oCUIHdlIGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBmYWxsYmFjay5cbiAgICBjaGlsZC5vbignZXhpdCcsIChjb2RlOiBudW1iZXIgfCBudWxsLCBzaWduYWw6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgIHN0b3BUcnlpbmcoJ2V4aXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIH0gZWxzZSBpZiAoc2lnbmFsKSB7XG4gICAgICAgIGFkdmFuY2UoYHRlcm1pbmF0ZWQgYnkgc2lnbmFsICR7c2lnbmFsfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWR2YW5jZShgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBJZiB0aGUgb3BlbmVyIGlzIHN0aWxsIHJ1bm5pbmcgYWZ0ZXIgMyBzZWNvbmRzLCBpdCBpcyBhbG1vc3QgY2VydGFpbmx5XG4gICAgLy8gZG9pbmcgcmVhbCB3b3JrIChsYXVuY2hpbmcgYSBzbG93IGJyb3dzZXIsIHdhaXRpbmcgZm9yIFdpbmRvd3MgaW50ZXJvcClcbiAgICAvLyByYXRoZXIgdGhhbiBodW5nLiBTdG9wIHRyeWluZyBtb3JlIGZhbGxiYWNrcyBzbyB3ZSBkb24ndCBzcGF3biBtdWx0aXBsZVxuICAgIC8vIGJyb3dzZXJzLiBUaGUgY2hpbGQga2VlcHMgcnVubmluZyBpbmRlcGVuZGVudGx5IGJlY2F1c2UgZGV0YWNoZWQ6dHJ1ZS5cbiAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3RvcFRyeWluZygnc3RpbGwgcnVubmluZyBhZnRlciAzcywgYXNzdW1pbmcgc3VjY2VzcycpO1xuICAgIH0sIDMwMDApO1xuICAgIC8vIERvbid0IGxldCB0aGUgdGltZXIgaXRzZWxmIGtlZXAgdGhlIE5vZGUgZXZlbnQgbG9vcCBhbGl2ZS5cbiAgICB0aW1lci51bnJlZigpO1xuXG4gICAgLy8gRGV0YWNoIHRoZSBjaGlsZCBmcm9tIHRoZSBwYXJlbnQncyBldmVudCBsb29wIHNvIE5vZGUgZG9lc24ndCBibG9ja1xuICAgIC8vIG9uIGl0cyBleGl0LiBFeGl0IGhhbmRsZXIgc3RpbGwgZmlyZXMgaWYvd2hlbiB0aGUgY2hpbGQgYWN0dWFsbHkgZXhpdHMuXG4gICAgY2hpbGQudW5yZWYoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzdGF0ZSBmb3IgQ1NSRiBwcm90ZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlU3RhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYXV0aG9yaXphdGlvbiBVUkxcbiAgICovXG4gIHByaXZhdGUgYnVpbGRBdXRoVXJsKHN0YXRlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgY2xpZW50X2lkOiBjb25maWcuYXdzLmNvZ25pdG9DbGllbnRJZCxcbiAgICAgIHJlc3BvbnNlX3R5cGU6ICdjb2RlJyxcbiAgICAgIHNjb3BlOiAnZW1haWwgb3BlbmlkIHByb2ZpbGUnLFxuICAgICAgcmVkaXJlY3RfdXJpOiBSRURJUkVDVF9VUkksXG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYGh0dHBzOi8vJHtjb25maWcuYXdzLmNvZ25pdG9Eb21haW59L29hdXRoMi9hdXRob3JpemU/JHtwYXJhbXMudG9TdHJpbmcoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2hhbmdlIGF1dGhvcml6YXRpb24gY29kZSBmb3IgdG9rZW5zXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4Y2hhbmdlQ29kZUZvclRva2Vucyhjb2RlOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAgIGlkVG9rZW46IHN0cmluZztcbiAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICBleHBpcmVzSW46IG51bWJlcjtcbiAgfT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGNvbnN0IHRva2VuVXJsID0gYGh0dHBzOi8vJHtjb25maWcuYXdzLmNvZ25pdG9Eb21haW59L29hdXRoMi90b2tlbmA7XG5cbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgY2xpZW50X2lkOiBjb25maWcuYXdzLmNvZ25pdG9DbGllbnRJZCxcbiAgICAgIGNvZGU6IGNvZGUsXG4gICAgICByZWRpcmVjdF91cmk6IFJFRElSRUNUX1VSSSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hXaXRoRGlhZ25vc3RpY3MoXG4gICAgICB0b2tlblVybCxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH0sXG4gICAgICAgIGJvZHk6IHBhcmFtcy50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgICdUb2tlbiBleGNoYW5nZSdcbiAgICApO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUb2tlbiBleGNoYW5nZSBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke2Vycm9yVGV4dH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHtcbiAgICAgIGFjY2Vzc190b2tlbjogc3RyaW5nO1xuICAgICAgaWRfdG9rZW46IHN0cmluZztcbiAgICAgIHJlZnJlc2hfdG9rZW46IHN0cmluZztcbiAgICAgIGV4cGlyZXNfaW46IG51bWJlcjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2Vzc1Rva2VuOiBkYXRhLmFjY2Vzc190b2tlbixcbiAgICAgIGlkVG9rZW46IGRhdGEuaWRfdG9rZW4sXG4gICAgICByZWZyZXNoVG9rZW46IGRhdGEucmVmcmVzaF90b2tlbixcbiAgICAgIGV4cGlyZXNJbjogZGF0YS5leHBpcmVzX2luLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlIEpXVCBwYXlsb2FkXG4gICAqL1xuICBwcml2YXRlIGRlY29kZUp3dCh0b2tlbjogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBwYXJ0cyA9IHRva2VuLnNwbGl0KCcuJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpXVCcpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKHBhcnRzWzFdLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04JykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdG9rZW5zXG4gICAqL1xuICBhc3luYyByZWZyZXNoVG9rZW5zKHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTx7XG4gICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICBpZFRva2VuOiBzdHJpbmc7XG4gICAgZXhwaXJlc0luOiBudW1iZXI7XG4gIH0+IHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBjb25zdCB0b2tlblVybCA9IGBodHRwczovLyR7Y29uZmlnLmF3cy5jb2duaXRvRG9tYWlufS9vYXV0aDIvdG9rZW5gO1xuXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG4gICAgICBjbGllbnRfaWQ6IGNvbmZpZy5hd3MuY29nbml0b0NsaWVudElkLFxuICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhEaWFnbm9zdGljcyhcbiAgICAgIHRva2VuVXJsLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICAgICAgYm9keTogcGFyYW1zLnRvU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgJ1Rva2VuIHJlZnJlc2gnXG4gICAgKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVG9rZW4gcmVmcmVzaCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMge1xuICAgICAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gICAgICBpZF90b2tlbjogc3RyaW5nO1xuICAgICAgZXhwaXJlc19pbjogbnVtYmVyO1xuICAgIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWNjZXNzVG9rZW46IGRhdGEuYWNjZXNzX3Rva2VuLFxuICAgICAgaWRUb2tlbjogZGF0YS5pZF90b2tlbixcbiAgICAgIGV4cGlyZXNJbjogZGF0YS5leHBpcmVzX2luLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTG9naW4gdmlhIE9BdXRoIGJyb3dzZXIgZmxvd1xuICAgKi9cbiAgYXN5bmMgbG9naW4oKTogUHJvbWlzZTxUb2tlbkRhdGEgfCBudWxsPiB7XG4gICAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBsb2dnZWQgaW5cbiAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IGtleWNoYWluTWFuYWdlci5nZXRUb2tlbnMoZ2V0RW52aXJvbm1lbnQoKSk7XG4gICAgaWYgKGV4aXN0aW5nICYmICFrZXljaGFpbk1hbmFnZXIuaXNUb2tlbkV4cGlyZWQoZXhpc3RpbmcpKSB7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdlbmVyYXRlU3RhdGUoKTtcbiAgICBjb25zdCBhdXRoVXJsID0gdGhpcy5idWlsZEF1dGhVcmwoc3RhdGUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZlciA9IGh0dHAuY3JlYXRlU2VydmVyKGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcS51cmw/LnN0YXJ0c1dpdGgoQ0FMTEJBQ0tfUEFUSCkpIHtcbiAgICAgICAgICByZXMud3JpdGVIZWFkKDQwNCk7XG4gICAgICAgICAgcmVzLmVuZCgnTm90IGZvdW5kJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwsIGBodHRwOi8vbG9jYWxob3N0OiR7Q0FMTEJBQ0tfUE9SVH1gKTtcbiAgICAgICAgICBjb25zdCBjb2RlID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoJ2NvZGUnKTtcbiAgICAgICAgICBjb25zdCByZXR1cm5lZFN0YXRlID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoJ3N0YXRlJyk7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgnZXJyb3InKTtcblxuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPQXV0aCBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmV0dXJuZWRTdGF0ZSAhPT0gc3RhdGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3RhdGUgbWlzbWF0Y2gnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWNvZGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aG9yaXphdGlvbiBjb2RlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQgdGhpcy5leGNoYW5nZUNvZGVGb3JUb2tlbnMoY29kZSk7XG4gICAgICAgICAgY29uc3QgaWRQYXlsb2FkID0gdGhpcy5kZWNvZGVKd3QodG9rZW5zLmlkVG9rZW4pO1xuXG4gICAgICAgICAgY29uc3QgdG9rZW5EYXRhOiBUb2tlbkRhdGEgPSB7XG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5zLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgaWRUb2tlbjogdG9rZW5zLmlkVG9rZW4sXG4gICAgICAgICAgICByZWZyZXNoVG9rZW46IHRva2Vucy5yZWZyZXNoVG9rZW4sXG4gICAgICAgICAgICBleHBpcmVzQXQ6IERhdGUubm93KCkgKyAodG9rZW5zLmV4cGlyZXNJbiAqIDEwMDApLFxuICAgICAgICAgICAgdXNlcklkOiBpZFBheWxvYWQuc3ViLFxuICAgICAgICAgICAgZW1haWw6IGlkUGF5bG9hZC5lbWFpbCB8fCAndW5rbm93bicsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGF3YWl0IGtleWNoYWluTWFuYWdlci5zZXRUb2tlbnModG9rZW5EYXRhLCBnZXRFbnZpcm9ubWVudCgpKTtcblxuICAgICAgICAgIHJlcy53cml0ZUhlYWQoMjAwLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JyB9KTtcbiAgICAgICAgICByZXMuZW5kKGBcbiAgICAgICAgICAgIDwhRE9DVFlQRSBodG1sPlxuICAgICAgICAgICAgPGh0bWw+XG4gICAgICAgICAgICA8aGVhZD48dGl0bGU+U3VjY2VzczwvdGl0bGU+PC9oZWFkPlxuICAgICAgICAgICAgPGJvZHkgc3R5bGU9XCJmb250LWZhbWlseTogc3lzdGVtLXVpOyBtYXgtd2lkdGg6IDYwMHB4OyBtYXJnaW46IDUwcHggYXV0bzsgdGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgICAgICAgICAgICA8aDEgc3R5bGU9XCJjb2xvcjogIzIyYzU1ZTtcIj4mIzEwMDAzOyBBdXRoZW50aWNhdGlvbiBTdWNjZXNzZnVsPC9oMT5cbiAgICAgICAgICAgICAgPHA+WW91IGNhbiBjbG9zZSB0aGlzIHdpbmRvdy48L3A+XG4gICAgICAgICAgICA8L2JvZHk+XG4gICAgICAgICAgICA8L2h0bWw+XG4gICAgICAgICAgYCk7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNlcnZlci5jbG9zZSgoKSA9PiByZXNvbHZlKHRva2VuRGF0YSkpO1xuICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICAgICAgLy8gSFRNTC1lc2NhcGUgdGhlIGVycm9yIG1lc3NhZ2Ugc28gbmV3bGluZXMgYW5kIHNwZWNpYWwgY2hhcnNcbiAgICAgICAgICAvLyByZW5kZXIgc2FmZWx5LiBNdWx0aS1saW5lIGRpYWdub3N0aWMgbWVzc2FnZXMgKGZyb21cbiAgICAgICAgICAvLyBmZXRjaFdpdGhEaWFnbm9zdGljcykgbmVlZCA8cHJlPiB0byBwcmVzZXJ2ZSBmb3JtYXR0aW5nLlxuICAgICAgICAgIGNvbnN0IHNhZmVNZXNzYWdlID0gU3RyaW5nKGVycj8ubWVzc2FnZSB8fCBlcnIpXG4gICAgICAgICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcblxuICAgICAgICAgIHJlcy53cml0ZUhlYWQoNDAwLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JyB9KTtcbiAgICAgICAgICByZXMuZW5kKGBcbiAgICAgICAgICAgIDwhRE9DVFlQRSBodG1sPlxuICAgICAgICAgICAgPGh0bWw+XG4gICAgICAgICAgICA8aGVhZD48dGl0bGU+RXJyb3I8L3RpdGxlPjwvaGVhZD5cbiAgICAgICAgICAgIDxib2R5IHN0eWxlPVwiZm9udC1mYW1pbHk6IHN5c3RlbS11aTsgbWF4LXdpZHRoOiA3MjBweDsgbWFyZ2luOiA1MHB4IGF1dG87IHBhZGRpbmc6IDAgMTZweDtcIj5cbiAgICAgICAgICAgICAgPGgxIHN0eWxlPVwiY29sb3I6ICNlZjQ0NDQ7IHRleHQtYWxpZ246IGNlbnRlcjtcIj4mIzEwMDA3OyBBdXRoZW50aWNhdGlvbiBGYWlsZWQ8L2gxPlxuICAgICAgICAgICAgICA8cHJlIHN0eWxlPVwiYmFja2dyb3VuZDogI2Y0ZjRmNTsgcGFkZGluZzogMTZweDsgYm9yZGVyLXJhZGl1czogOHB4OyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMS41O1wiPiR7c2FmZU1lc3NhZ2V9PC9wcmU+XG4gICAgICAgICAgICAgIDxwIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzcxNzE3YTsgbWFyZ2luLXRvcDogMjRweDtcIj5Zb3UgY2FuIGNsb3NlIHRoaXMgd2luZG93IGFuZCB0cnkgYWdhaW4gaW4geW91ciB0ZXJtaW5hbC48L3A+XG4gICAgICAgICAgICA8L2JvZHk+XG4gICAgICAgICAgICA8L2h0bWw+XG4gICAgICAgICAgYCk7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNlcnZlci5jbG9zZSgoKSA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5vbignZXJyb3InLCAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRUFERFJJTlVTRScpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBQb3J0ICR7Q0FMTEJBQ0tfUE9SVH0gaXMgaW4gdXNlYCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmxpc3RlbihDQUxMQkFDS19QT1JULCAnbG9jYWxob3N0JywgKCkgPT4ge1xuICAgICAgICBsb2dnZXIuaW5mbygnW0F1dGhTZXJ2aWNlXSBDYWxsYmFjayBzZXJ2ZXIgc3RhcnRlZCcpO1xuICAgICAgICB0aGlzLm9wZW5Ccm93c2VyKGF1dGhVcmwpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRpbWVvdXRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignTG9naW4gdGltZW91dCcpKSk7XG4gICAgICB9LCAyICogNjAgKiAxMDAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dvdXRcbiAgICovXG4gIGFzeW5jIGxvZ291dCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBjb25zdCBkZWxldGVkID0gYXdhaXQga2V5Y2hhaW5NYW5hZ2VyLmRlbGV0ZVRva2VucyhnZXRFbnZpcm9ubWVudCgpKTtcblxuICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAvLyBTdGFydCB0ZW1wb3Jhcnkgc2VydmVyIHRvIGhhbmRsZSBzaWdub3V0IGNhbGxiYWNrXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3Qgc2VydmVyID0gaHR0cC5jcmVhdGVTZXJ2ZXIoKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcS51cmw/LnN0YXJ0c1dpdGgoJy9zaWdub3V0JykpIHtcbiAgICAgICAgICAgIHJlcy53cml0ZUhlYWQoMjAwLCB7ICdDb250ZW50LVR5cGUnOiAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JyB9KTtcbiAgICAgICAgICAgIHJlcy5lbmQoYFxuICAgICAgICAgICAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICAgICAgICAgICAgPGh0bWw+XG4gICAgICAgICAgICAgIDxoZWFkPjx0aXRsZT5TaWduZWQgT3V0PC90aXRsZT48L2hlYWQ+XG4gICAgICAgICAgICAgIDxib2R5IHN0eWxlPVwiZm9udC1mYW1pbHk6IHN5c3RlbS11aTsgbWF4LXdpZHRoOiA2MDBweDsgbWFyZ2luOiA1MHB4IGF1dG87IHRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICA8aDEgc3R5bGU9XCJjb2xvcjogIzIyYzU1ZTtcIj4mIzEwMDAzOyBTaWduZWQgT3V0PC9oMT5cbiAgICAgICAgICAgICAgICA8cD5Zb3UgY2FuIGNsb3NlIHRoaXMgd2luZG93LjwvcD5cbiAgICAgICAgICAgICAgPC9ib2R5PlxuICAgICAgICAgICAgICA8L2h0bWw+XG4gICAgICAgICAgICBgKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHNlcnZlci5jbG9zZSgoKSA9PiByZXNvbHZlKHRydWUpKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcy53cml0ZUhlYWQoNDA0KTtcbiAgICAgICAgICAgIHJlcy5lbmQoJ05vdCBmb3VuZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2VydmVyLm9uKCdlcnJvcicsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRydWUpOyAvLyBTdGlsbCByZXR1cm4gdHJ1ZSBzaW5jZSB0b2tlbnMgd2VyZSBkZWxldGVkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNlcnZlci5saXN0ZW4oQ0FMTEJBQ0tfUE9SVCwgJ2xvY2FsaG9zdCcsICgpID0+IHtcbiAgICAgICAgICBjb25zdCBsb2dvdXRVcmwgPSBgaHR0cHM6Ly8ke2NvbmZpZy5hd3MuY29nbml0b0RvbWFpbn0vbG9nb3V0P2AgK1xuICAgICAgICAgICAgYGNsaWVudF9pZD0ke2NvbmZpZy5hd3MuY29nbml0b0NsaWVudElkfSZgICtcbiAgICAgICAgICAgIGBsb2dvdXRfdXJpPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFJFRElSRUNUX1VSSS5yZXBsYWNlKCcvY2FsbGJhY2snLCAnL3NpZ25vdXQnKSl9YDtcblxuICAgICAgICAgIHRoaXMub3BlbkJyb3dzZXIobG9nb3V0VXJsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVGltZW91dCBhZnRlciAzMCBzZWNvbmRzXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHNlcnZlci5jbG9zZSgoKSA9PiByZXNvbHZlKHRydWUpKTtcbiAgICAgICAgfSwgMzAgKiAxMDAwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IGF1dGggc3RhdHVzXG4gICAqL1xuICBhc3luYyBnZXRTdGF0dXMoKTogUHJvbWlzZTx7IGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47IHRva2Vucz86IFRva2VuRGF0YSB9PiB7XG4gICAgY29uc3QgdG9rZW5zID0gYXdhaXQga2V5Y2hhaW5NYW5hZ2VyLmdldFRva2VucyhnZXRFbnZpcm9ubWVudCgpKTtcbiAgICBpZiAoIXRva2Vucykge1xuICAgICAgcmV0dXJuIHsgYXV0aGVudGljYXRlZDogZmFsc2UgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYXV0aGVudGljYXRlZDogIWtleWNoYWluTWFuYWdlci5pc1Rva2VuRXhwaXJlZCh0b2tlbnMpLFxuICAgICAgdG9rZW5zLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGF1dGhTZXJ2aWNlID0gQXV0aFNlcnZpY2UuZ2V0SW5zdGFuY2UoKTtcbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wraps fetch() and rewrites "fetch failed" errors to include the underlying
|
|
3
|
+
* cause and a user-actionable diagnostic tip when possible. Non-network errors
|
|
4
|
+
* and HTTP error responses (non-2xx) are not affected — the caller still
|
|
5
|
+
* handles response.ok checks themselves.
|
|
6
|
+
*
|
|
7
|
+
* @param url The URL to fetch
|
|
8
|
+
* @param init Standard fetch init options
|
|
9
|
+
* @param context Optional short label (e.g. "token exchange") for the error message
|
|
10
|
+
*/
|
|
11
|
+
export declare function fetchWithDiagnostics(url: string, init?: any, context?: string): Promise<Response>;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//
|
|
3
|
+
// fetch-helpers.ts
|
|
4
|
+
// CodeVibe Core
|
|
5
|
+
//
|
|
6
|
+
// Wrapper around Node's built-in fetch() that surfaces the underlying cause
|
|
7
|
+
// of "fetch failed" errors with platform-specific diagnostic tips.
|
|
8
|
+
//
|
|
9
|
+
// Background: Node 18+'s built-in fetch (via undici) throws a generic
|
|
10
|
+
// TypeError with message "fetch failed" for all network-level errors (DNS
|
|
11
|
+
// failures, timeouts, TLS issues, etc.). The real cause is buried in the
|
|
12
|
+
// error's .cause property. This wrapper unpacks that cause and returns a
|
|
13
|
+
// detailed, actionable error message — critical for WSL users where fetch
|
|
14
|
+
// failures are common and usually fixable with known workarounds.
|
|
15
|
+
//
|
|
16
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
19
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
20
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
21
|
+
}
|
|
22
|
+
Object.defineProperty(o, k2, desc);
|
|
23
|
+
}) : (function(o, m, k, k2) {
|
|
24
|
+
if (k2 === undefined) k2 = k;
|
|
25
|
+
o[k2] = m[k];
|
|
26
|
+
}));
|
|
27
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
28
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
29
|
+
}) : function(o, v) {
|
|
30
|
+
o["default"] = v;
|
|
31
|
+
});
|
|
32
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
33
|
+
var ownKeys = function(o) {
|
|
34
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
35
|
+
var ar = [];
|
|
36
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37
|
+
return ar;
|
|
38
|
+
};
|
|
39
|
+
return ownKeys(o);
|
|
40
|
+
};
|
|
41
|
+
return function (mod) {
|
|
42
|
+
if (mod && mod.__esModule) return mod;
|
|
43
|
+
var result = {};
|
|
44
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
45
|
+
__setModuleDefault(result, mod);
|
|
46
|
+
return result;
|
|
47
|
+
};
|
|
48
|
+
})();
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.fetchWithDiagnostics = fetchWithDiagnostics;
|
|
51
|
+
const dns = __importStar(require("dns"));
|
|
52
|
+
const fs = __importStar(require("fs"));
|
|
53
|
+
// Node 17+ changed the default DNS result order from 'ipv4first' to
|
|
54
|
+
// 'verbatim' (RFC-compliant but problematic for hosts with broken IPv6).
|
|
55
|
+
// On WSL Ubuntu specifically, the kernel often advertises IPv6 addresses
|
|
56
|
+
// via getaddrinfo even though the WSL network namespace has no route to
|
|
57
|
+
// the IPv6 internet — causing every IPv6 connection attempt to fail with
|
|
58
|
+
// EHOSTUNREACH. curl handles this via Happy Eyeballs fallback, but undici
|
|
59
|
+
// (Node's built-in fetch) does not, and throws "fetch failed" without
|
|
60
|
+
// ever trying IPv4.
|
|
61
|
+
//
|
|
62
|
+
// We apply 'ipv4first' ONLY when running inside WSL. On macOS, native
|
|
63
|
+
// Linux, and Windows we leave Node's default ('verbatim') alone — those
|
|
64
|
+
// platforms have healthy dual-stack networking and the current behavior
|
|
65
|
+
// is correct. Narrowly scoping the override to WSL means zero behavioral
|
|
66
|
+
// change for non-WSL users (including IPv6-only networks where ipv4first
|
|
67
|
+
// would add first-connection latency).
|
|
68
|
+
//
|
|
69
|
+
// This runs as a side effect of importing codevibe-core's fetch-helpers,
|
|
70
|
+
// which happens early in every plugin's startup path. Documented here
|
|
71
|
+
// so future maintainers understand why there's a side effect on import.
|
|
72
|
+
if (isRunningInWSL()) {
|
|
73
|
+
try {
|
|
74
|
+
dns.setDefaultResultOrder('ipv4first');
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Older Node versions (< 18.6) don't expose setDefaultResultOrder;
|
|
78
|
+
// skip silently. Users on those versions can still set the
|
|
79
|
+
// NODE_OPTIONS="--dns-result-order=ipv4first" environment variable
|
|
80
|
+
// manually if they hit IPv6 issues.
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Detect whether we're running inside WSL (1 or 2). Returns false on any
|
|
85
|
+
* non-Linux platform or if /proc/sys/kernel/osrelease is not readable.
|
|
86
|
+
* Duplicated from auth-service.ts as a module-level helper so it can run
|
|
87
|
+
* at import time, before any class is instantiated.
|
|
88
|
+
*/
|
|
89
|
+
function isRunningInWSL() {
|
|
90
|
+
if (process.platform !== 'linux')
|
|
91
|
+
return false;
|
|
92
|
+
try {
|
|
93
|
+
const osRelease = fs.readFileSync('/proc/sys/kernel/osrelease', 'utf8');
|
|
94
|
+
return /microsoft|wsl/i.test(osRelease);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Wraps fetch() and rewrites "fetch failed" errors to include the underlying
|
|
102
|
+
* cause and a user-actionable diagnostic tip when possible. Non-network errors
|
|
103
|
+
* and HTTP error responses (non-2xx) are not affected — the caller still
|
|
104
|
+
* handles response.ok checks themselves.
|
|
105
|
+
*
|
|
106
|
+
* @param url The URL to fetch
|
|
107
|
+
* @param init Standard fetch init options
|
|
108
|
+
* @param context Optional short label (e.g. "token exchange") for the error message
|
|
109
|
+
*/
|
|
110
|
+
async function fetchWithDiagnostics(url, init, context) {
|
|
111
|
+
try {
|
|
112
|
+
return await fetch(url, init);
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
// Node's undici wraps real errors in err.cause
|
|
116
|
+
const causeCode = err?.cause?.code;
|
|
117
|
+
const causeMessage = err?.cause?.message;
|
|
118
|
+
const causeSummary = causeCode || causeMessage || err?.message || 'unknown';
|
|
119
|
+
const tip = getDiagnosticTip(causeCode);
|
|
120
|
+
const contextLabel = context ? `${context}: ` : '';
|
|
121
|
+
const platformInfo = `Node ${process.version} on ${process.platform}`;
|
|
122
|
+
const detailLines = [
|
|
123
|
+
`${contextLabel}Cannot reach ${url}`,
|
|
124
|
+
` Underlying error: ${causeSummary}`,
|
|
125
|
+
];
|
|
126
|
+
if (tip) {
|
|
127
|
+
detailLines.push(` Suggested fix: ${tip}`);
|
|
128
|
+
}
|
|
129
|
+
detailLines.push(` Platform: ${platformInfo}`);
|
|
130
|
+
const detailedError = new Error(detailLines.join('\n'));
|
|
131
|
+
// Preserve the original error as cause so callers can still inspect it
|
|
132
|
+
detailedError.cause = err;
|
|
133
|
+
throw detailedError;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Map common Node network error codes to user-actionable diagnostic hints.
|
|
138
|
+
* Returns null if the code isn't one we recognize.
|
|
139
|
+
*/
|
|
140
|
+
function getDiagnosticTip(errorCode) {
|
|
141
|
+
if (!errorCode)
|
|
142
|
+
return null;
|
|
143
|
+
switch (errorCode) {
|
|
144
|
+
case 'ENOTFOUND':
|
|
145
|
+
case 'EAI_AGAIN':
|
|
146
|
+
return 'DNS resolution failed. On WSL Ubuntu, check /etc/resolv.conf, or try running with NODE_OPTIONS="--dns-result-order=ipv4first".';
|
|
147
|
+
case 'ETIMEDOUT':
|
|
148
|
+
case 'ECONNREFUSED':
|
|
149
|
+
case 'ECONNRESET':
|
|
150
|
+
case 'EHOSTUNREACH':
|
|
151
|
+
case 'ENETUNREACH':
|
|
152
|
+
return 'Network unreachable. On WSL Ubuntu, try NODE_OPTIONS="--dns-result-order=ipv4first" (WSL\'s IPv6 is often broken). If behind a corporate proxy, set HTTPS_PROXY.';
|
|
153
|
+
case 'CERT_HAS_EXPIRED':
|
|
154
|
+
case 'CERT_NOT_YET_VALID':
|
|
155
|
+
return 'TLS certificate time error — likely system clock drift. On WSL, run `sudo hwclock -s`, or shut down WSL from PowerShell with `wsl --shutdown` and restart.';
|
|
156
|
+
case 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY':
|
|
157
|
+
case 'SELF_SIGNED_CERT_IN_CHAIN':
|
|
158
|
+
case 'UNABLE_TO_VERIFY_LEAF_SIGNATURE':
|
|
159
|
+
case 'DEPTH_ZERO_SELF_SIGNED_CERT':
|
|
160
|
+
return 'Corporate HTTPS proxy detected — the TLS cert is not trusted by Node. Set NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem, or configure HTTPS_PROXY if a proxy is required.';
|
|
161
|
+
default:
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2gtaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2ZldGNoLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLEVBQUU7QUFDRixtQkFBbUI7QUFDbkIsZ0JBQWdCO0FBQ2hCLEVBQUU7QUFDRiw0RUFBNEU7QUFDNUUsbUVBQW1FO0FBQ25FLEVBQUU7QUFDRixzRUFBc0U7QUFDdEUsMEVBQTBFO0FBQzFFLHlFQUF5RTtBQUN6RSx5RUFBeUU7QUFDekUsMEVBQTBFO0FBQzFFLGtFQUFrRTtBQUNsRSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTZERixvREErQkM7QUExRkQseUNBQTJCO0FBQzNCLHVDQUF5QjtBQUV6QixvRUFBb0U7QUFDcEUseUVBQXlFO0FBQ3pFLHlFQUF5RTtBQUN6RSx3RUFBd0U7QUFDeEUseUVBQXlFO0FBQ3pFLDBFQUEwRTtBQUMxRSxzRUFBc0U7QUFDdEUsb0JBQW9CO0FBQ3BCLEVBQUU7QUFDRixzRUFBc0U7QUFDdEUsd0VBQXdFO0FBQ3hFLHdFQUF3RTtBQUN4RSx5RUFBeUU7QUFDekUseUVBQXlFO0FBQ3pFLHVDQUF1QztBQUN2QyxFQUFFO0FBQ0YseUVBQXlFO0FBQ3pFLHNFQUFzRTtBQUN0RSx3RUFBd0U7QUFDeEUsSUFBSSxjQUFjLEVBQUUsRUFBRSxDQUFDO0lBQ3JCLElBQUksQ0FBQztRQUNILEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsbUVBQW1FO1FBQ25FLDJEQUEyRDtRQUMzRCxtRUFBbUU7UUFDbkUsb0NBQW9DO0lBQ3RDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGNBQWM7SUFDckIsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU87UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMvQyxJQUFJLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0ksS0FBSyxVQUFVLG9CQUFvQixDQUN4QyxHQUFXLEVBQ1gsSUFBVSxFQUNWLE9BQWdCO0lBRWhCLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFBQyxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ2xCLCtDQUErQztRQUMvQyxNQUFNLFNBQVMsR0FBdUIsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUM7UUFDdkQsTUFBTSxZQUFZLEdBQXVCLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO1FBQzdELE1BQU0sWUFBWSxHQUFHLFNBQVMsSUFBSSxZQUFZLElBQUksR0FBRyxFQUFFLE9BQU8sSUFBSSxTQUFTLENBQUM7UUFFNUUsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsTUFBTSxZQUFZLEdBQUcsUUFBUSxPQUFPLENBQUMsT0FBTyxPQUFPLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV0RSxNQUFNLFdBQVcsR0FBYTtZQUM1QixHQUFHLFlBQVksZ0JBQWdCLEdBQUcsRUFBRTtZQUNwQyx1QkFBdUIsWUFBWSxFQUFFO1NBQ3RDLENBQUM7UUFDRixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsV0FBVyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQyxlQUFlLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFaEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hELHVFQUF1RTtRQUN0RSxhQUFxQixDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDbkMsTUFBTSxhQUFhLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFNBQWtCO0lBQzFDLElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFNUIsUUFBUSxTQUFTLEVBQUUsQ0FBQztRQUNsQixLQUFLLFdBQVcsQ0FBQztRQUNqQixLQUFLLFdBQVc7WUFDZCxPQUFPLGdJQUFnSSxDQUFDO1FBRTFJLEtBQUssV0FBVyxDQUFDO1FBQ2pCLEtBQUssY0FBYyxDQUFDO1FBQ3BCLEtBQUssWUFBWSxDQUFDO1FBQ2xCLEtBQUssY0FBYyxDQUFDO1FBQ3BCLEtBQUssYUFBYTtZQUNoQixPQUFPLGtLQUFrSyxDQUFDO1FBRTVLLEtBQUssa0JBQWtCLENBQUM7UUFDeEIsS0FBSyxvQkFBb0I7WUFDdkIsT0FBTyw0SkFBNEosQ0FBQztRQUV0SyxLQUFLLG1DQUFtQyxDQUFDO1FBQ3pDLEtBQUssMkJBQTJCLENBQUM7UUFDakMsS0FBSyxpQ0FBaUMsQ0FBQztRQUN2QyxLQUFLLDZCQUE2QjtZQUNoQyxPQUFPLDJLQUEySyxDQUFDO1FBRXJMO1lBQ0UsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvL1xuLy8gZmV0Y2gtaGVscGVycy50c1xuLy8gQ29kZVZpYmUgQ29yZVxuLy9cbi8vIFdyYXBwZXIgYXJvdW5kIE5vZGUncyBidWlsdC1pbiBmZXRjaCgpIHRoYXQgc3VyZmFjZXMgdGhlIHVuZGVybHlpbmcgY2F1c2Vcbi8vIG9mIFwiZmV0Y2ggZmFpbGVkXCIgZXJyb3JzIHdpdGggcGxhdGZvcm0tc3BlY2lmaWMgZGlhZ25vc3RpYyB0aXBzLlxuLy9cbi8vIEJhY2tncm91bmQ6IE5vZGUgMTgrJ3MgYnVpbHQtaW4gZmV0Y2ggKHZpYSB1bmRpY2kpIHRocm93cyBhIGdlbmVyaWNcbi8vIFR5cGVFcnJvciB3aXRoIG1lc3NhZ2UgXCJmZXRjaCBmYWlsZWRcIiBmb3IgYWxsIG5ldHdvcmstbGV2ZWwgZXJyb3JzIChETlNcbi8vIGZhaWx1cmVzLCB0aW1lb3V0cywgVExTIGlzc3VlcywgZXRjLikuIFRoZSByZWFsIGNhdXNlIGlzIGJ1cmllZCBpbiB0aGVcbi8vIGVycm9yJ3MgLmNhdXNlIHByb3BlcnR5LiBUaGlzIHdyYXBwZXIgdW5wYWNrcyB0aGF0IGNhdXNlIGFuZCByZXR1cm5zIGFcbi8vIGRldGFpbGVkLCBhY3Rpb25hYmxlIGVycm9yIG1lc3NhZ2Ug4oCUIGNyaXRpY2FsIGZvciBXU0wgdXNlcnMgd2hlcmUgZmV0Y2hcbi8vIGZhaWx1cmVzIGFyZSBjb21tb24gYW5kIHVzdWFsbHkgZml4YWJsZSB3aXRoIGtub3duIHdvcmthcm91bmRzLlxuLy9cblxuaW1wb3J0ICogYXMgZG5zIGZyb20gJ2Rucyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5cbi8vIE5vZGUgMTcrIGNoYW5nZWQgdGhlIGRlZmF1bHQgRE5TIHJlc3VsdCBvcmRlciBmcm9tICdpcHY0Zmlyc3QnIHRvXG4vLyAndmVyYmF0aW0nIChSRkMtY29tcGxpYW50IGJ1dCBwcm9ibGVtYXRpYyBmb3IgaG9zdHMgd2l0aCBicm9rZW4gSVB2NikuXG4vLyBPbiBXU0wgVWJ1bnR1IHNwZWNpZmljYWxseSwgdGhlIGtlcm5lbCBvZnRlbiBhZHZlcnRpc2VzIElQdjYgYWRkcmVzc2VzXG4vLyB2aWEgZ2V0YWRkcmluZm8gZXZlbiB0aG91Z2ggdGhlIFdTTCBuZXR3b3JrIG5hbWVzcGFjZSBoYXMgbm8gcm91dGUgdG9cbi8vIHRoZSBJUHY2IGludGVybmV0IOKAlCBjYXVzaW5nIGV2ZXJ5IElQdjYgY29ubmVjdGlvbiBhdHRlbXB0IHRvIGZhaWwgd2l0aFxuLy8gRUhPU1RVTlJFQUNILiBjdXJsIGhhbmRsZXMgdGhpcyB2aWEgSGFwcHkgRXllYmFsbHMgZmFsbGJhY2ssIGJ1dCB1bmRpY2lcbi8vIChOb2RlJ3MgYnVpbHQtaW4gZmV0Y2gpIGRvZXMgbm90LCBhbmQgdGhyb3dzIFwiZmV0Y2ggZmFpbGVkXCIgd2l0aG91dFxuLy8gZXZlciB0cnlpbmcgSVB2NC5cbi8vXG4vLyBXZSBhcHBseSAnaXB2NGZpcnN0JyBPTkxZIHdoZW4gcnVubmluZyBpbnNpZGUgV1NMLiBPbiBtYWNPUywgbmF0aXZlXG4vLyBMaW51eCwgYW5kIFdpbmRvd3Mgd2UgbGVhdmUgTm9kZSdzIGRlZmF1bHQgKCd2ZXJiYXRpbScpIGFsb25lIOKAlCB0aG9zZVxuLy8gcGxhdGZvcm1zIGhhdmUgaGVhbHRoeSBkdWFsLXN0YWNrIG5ldHdvcmtpbmcgYW5kIHRoZSBjdXJyZW50IGJlaGF2aW9yXG4vLyBpcyBjb3JyZWN0LiBOYXJyb3dseSBzY29waW5nIHRoZSBvdmVycmlkZSB0byBXU0wgbWVhbnMgemVybyBiZWhhdmlvcmFsXG4vLyBjaGFuZ2UgZm9yIG5vbi1XU0wgdXNlcnMgKGluY2x1ZGluZyBJUHY2LW9ubHkgbmV0d29ya3Mgd2hlcmUgaXB2NGZpcnN0XG4vLyB3b3VsZCBhZGQgZmlyc3QtY29ubmVjdGlvbiBsYXRlbmN5KS5cbi8vXG4vLyBUaGlzIHJ1bnMgYXMgYSBzaWRlIGVmZmVjdCBvZiBpbXBvcnRpbmcgY29kZXZpYmUtY29yZSdzIGZldGNoLWhlbHBlcnMsXG4vLyB3aGljaCBoYXBwZW5zIGVhcmx5IGluIGV2ZXJ5IHBsdWdpbidzIHN0YXJ0dXAgcGF0aC4gRG9jdW1lbnRlZCBoZXJlXG4vLyBzbyBmdXR1cmUgbWFpbnRhaW5lcnMgdW5kZXJzdGFuZCB3aHkgdGhlcmUncyBhIHNpZGUgZWZmZWN0IG9uIGltcG9ydC5cbmlmIChpc1J1bm5pbmdJbldTTCgpKSB7XG4gIHRyeSB7XG4gICAgZG5zLnNldERlZmF1bHRSZXN1bHRPcmRlcignaXB2NGZpcnN0Jyk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE9sZGVyIE5vZGUgdmVyc2lvbnMgKDwgMTguNikgZG9uJ3QgZXhwb3NlIHNldERlZmF1bHRSZXN1bHRPcmRlcjtcbiAgICAvLyBza2lwIHNpbGVudGx5LiBVc2VycyBvbiB0aG9zZSB2ZXJzaW9ucyBjYW4gc3RpbGwgc2V0IHRoZVxuICAgIC8vIE5PREVfT1BUSU9OUz1cIi0tZG5zLXJlc3VsdC1vcmRlcj1pcHY0Zmlyc3RcIiBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgIC8vIG1hbnVhbGx5IGlmIHRoZXkgaGl0IElQdjYgaXNzdWVzLlxuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0IHdoZXRoZXIgd2UncmUgcnVubmluZyBpbnNpZGUgV1NMICgxIG9yIDIpLiBSZXR1cm5zIGZhbHNlIG9uIGFueVxuICogbm9uLUxpbnV4IHBsYXRmb3JtIG9yIGlmIC9wcm9jL3N5cy9rZXJuZWwvb3NyZWxlYXNlIGlzIG5vdCByZWFkYWJsZS5cbiAqIER1cGxpY2F0ZWQgZnJvbSBhdXRoLXNlcnZpY2UudHMgYXMgYSBtb2R1bGUtbGV2ZWwgaGVscGVyIHNvIGl0IGNhbiBydW5cbiAqIGF0IGltcG9ydCB0aW1lLCBiZWZvcmUgYW55IGNsYXNzIGlzIGluc3RhbnRpYXRlZC5cbiAqL1xuZnVuY3Rpb24gaXNSdW5uaW5nSW5XU0woKTogYm9vbGVhbiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnbGludXgnKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3NSZWxlYXNlID0gZnMucmVhZEZpbGVTeW5jKCcvcHJvYy9zeXMva2VybmVsL29zcmVsZWFzZScsICd1dGY4Jyk7XG4gICAgcmV0dXJuIC9taWNyb3NvZnR8d3NsL2kudGVzdChvc1JlbGVhc2UpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcyBmZXRjaCgpIGFuZCByZXdyaXRlcyBcImZldGNoIGZhaWxlZFwiIGVycm9ycyB0byBpbmNsdWRlIHRoZSB1bmRlcmx5aW5nXG4gKiBjYXVzZSBhbmQgYSB1c2VyLWFjdGlvbmFibGUgZGlhZ25vc3RpYyB0aXAgd2hlbiBwb3NzaWJsZS4gTm9uLW5ldHdvcmsgZXJyb3JzXG4gKiBhbmQgSFRUUCBlcnJvciByZXNwb25zZXMgKG5vbi0yeHgpIGFyZSBub3QgYWZmZWN0ZWQg4oCUIHRoZSBjYWxsZXIgc3RpbGxcbiAqIGhhbmRsZXMgcmVzcG9uc2Uub2sgY2hlY2tzIHRoZW1zZWx2ZXMuXG4gKlxuICogQHBhcmFtIHVybCBUaGUgVVJMIHRvIGZldGNoXG4gKiBAcGFyYW0gaW5pdCBTdGFuZGFyZCBmZXRjaCBpbml0IG9wdGlvbnNcbiAqIEBwYXJhbSBjb250ZXh0IE9wdGlvbmFsIHNob3J0IGxhYmVsIChlLmcuIFwidG9rZW4gZXhjaGFuZ2VcIikgZm9yIHRoZSBlcnJvciBtZXNzYWdlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFdpdGhEaWFnbm9zdGljcyhcbiAgdXJsOiBzdHJpbmcsXG4gIGluaXQ/OiBhbnksXG4gIGNvbnRleHQ/OiBzdHJpbmdcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZmV0Y2godXJsLCBpbml0KTtcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAvLyBOb2RlJ3MgdW5kaWNpIHdyYXBzIHJlYWwgZXJyb3JzIGluIGVyci5jYXVzZVxuICAgIGNvbnN0IGNhdXNlQ29kZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZXJyPy5jYXVzZT8uY29kZTtcbiAgICBjb25zdCBjYXVzZU1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGVycj8uY2F1c2U/Lm1lc3NhZ2U7XG4gICAgY29uc3QgY2F1c2VTdW1tYXJ5ID0gY2F1c2VDb2RlIHx8IGNhdXNlTWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ3Vua25vd24nO1xuXG4gICAgY29uc3QgdGlwID0gZ2V0RGlhZ25vc3RpY1RpcChjYXVzZUNvZGUpO1xuICAgIGNvbnN0IGNvbnRleHRMYWJlbCA9IGNvbnRleHQgPyBgJHtjb250ZXh0fTogYCA6ICcnO1xuICAgIGNvbnN0IHBsYXRmb3JtSW5mbyA9IGBOb2RlICR7cHJvY2Vzcy52ZXJzaW9ufSBvbiAke3Byb2Nlc3MucGxhdGZvcm19YDtcblxuICAgIGNvbnN0IGRldGFpbExpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIGAke2NvbnRleHRMYWJlbH1DYW5ub3QgcmVhY2ggJHt1cmx9YCxcbiAgICAgIGAgIFVuZGVybHlpbmcgZXJyb3I6ICR7Y2F1c2VTdW1tYXJ5fWAsXG4gICAgXTtcbiAgICBpZiAodGlwKSB7XG4gICAgICBkZXRhaWxMaW5lcy5wdXNoKGAgIFN1Z2dlc3RlZCBmaXg6ICR7dGlwfWApO1xuICAgIH1cbiAgICBkZXRhaWxMaW5lcy5wdXNoKGAgIFBsYXRmb3JtOiAke3BsYXRmb3JtSW5mb31gKTtcblxuICAgIGNvbnN0IGRldGFpbGVkRXJyb3IgPSBuZXcgRXJyb3IoZGV0YWlsTGluZXMuam9pbignXFxuJykpO1xuICAgIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBlcnJvciBhcyBjYXVzZSBzbyBjYWxsZXJzIGNhbiBzdGlsbCBpbnNwZWN0IGl0XG4gICAgKGRldGFpbGVkRXJyb3IgYXMgYW55KS5jYXVzZSA9IGVycjtcbiAgICB0aHJvdyBkZXRhaWxlZEVycm9yO1xuICB9XG59XG5cbi8qKlxuICogTWFwIGNvbW1vbiBOb2RlIG5ldHdvcmsgZXJyb3IgY29kZXMgdG8gdXNlci1hY3Rpb25hYmxlIGRpYWdub3N0aWMgaGludHMuXG4gKiBSZXR1cm5zIG51bGwgaWYgdGhlIGNvZGUgaXNuJ3Qgb25lIHdlIHJlY29nbml6ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RGlhZ25vc3RpY1RpcChlcnJvckNvZGU/OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFlcnJvckNvZGUpIHJldHVybiBudWxsO1xuXG4gIHN3aXRjaCAoZXJyb3JDb2RlKSB7XG4gICAgY2FzZSAnRU5PVEZPVU5EJzpcbiAgICBjYXNlICdFQUlfQUdBSU4nOlxuICAgICAgcmV0dXJuICdETlMgcmVzb2x1dGlvbiBmYWlsZWQuIE9uIFdTTCBVYnVudHUsIGNoZWNrIC9ldGMvcmVzb2x2LmNvbmYsIG9yIHRyeSBydW5uaW5nIHdpdGggTk9ERV9PUFRJT05TPVwiLS1kbnMtcmVzdWx0LW9yZGVyPWlwdjRmaXJzdFwiLic7XG5cbiAgICBjYXNlICdFVElNRURPVVQnOlxuICAgIGNhc2UgJ0VDT05OUkVGVVNFRCc6XG4gICAgY2FzZSAnRUNPTk5SRVNFVCc6XG4gICAgY2FzZSAnRUhPU1RVTlJFQUNIJzpcbiAgICBjYXNlICdFTkVUVU5SRUFDSCc6XG4gICAgICByZXR1cm4gJ05ldHdvcmsgdW5yZWFjaGFibGUuIE9uIFdTTCBVYnVudHUsIHRyeSBOT0RFX09QVElPTlM9XCItLWRucy1yZXN1bHQtb3JkZXI9aXB2NGZpcnN0XCIgKFdTTFxcJ3MgSVB2NiBpcyBvZnRlbiBicm9rZW4pLiBJZiBiZWhpbmQgYSBjb3Jwb3JhdGUgcHJveHksIHNldCBIVFRQU19QUk9YWS4nO1xuXG4gICAgY2FzZSAnQ0VSVF9IQVNfRVhQSVJFRCc6XG4gICAgY2FzZSAnQ0VSVF9OT1RfWUVUX1ZBTElEJzpcbiAgICAgIHJldHVybiAnVExTIGNlcnRpZmljYXRlIHRpbWUgZXJyb3Ig4oCUIGxpa2VseSBzeXN0ZW0gY2xvY2sgZHJpZnQuIE9uIFdTTCwgcnVuIGBzdWRvIGh3Y2xvY2sgLXNgLCBvciBzaHV0IGRvd24gV1NMIGZyb20gUG93ZXJTaGVsbCB3aXRoIGB3c2wgLS1zaHV0ZG93bmAgYW5kIHJlc3RhcnQuJztcblxuICAgIGNhc2UgJ1VOQUJMRV9UT19HRVRfSVNTVUVSX0NFUlRfTE9DQUxMWSc6XG4gICAgY2FzZSAnU0VMRl9TSUdORURfQ0VSVF9JTl9DSEFJTic6XG4gICAgY2FzZSAnVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSc6XG4gICAgY2FzZSAnREVQVEhfWkVST19TRUxGX1NJR05FRF9DRVJUJzpcbiAgICAgIHJldHVybiAnQ29ycG9yYXRlIEhUVFBTIHByb3h5IGRldGVjdGVkIOKAlCB0aGUgVExTIGNlcnQgaXMgbm90IHRydXN0ZWQgYnkgTm9kZS4gU2V0IE5PREVfRVhUUkFfQ0FfQ0VSVFM9L3BhdGgvdG8vY29ycG9yYXRlLWNhLnBlbSwgb3IgY29uZmlndXJlIEhUVFBTX1BST1hZIGlmIGEgcHJveHkgaXMgcmVxdWlyZWQuJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quantiya/codevibe-claude-plugin",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Mobile companion for Claude Code - monitor and control your Claude Code sessions from your
|
|
3
|
+
"version": "1.0.9",
|
|
4
|
+
"description": "Mobile companion for Claude Code - monitor and control your Claude Code sessions from your phone with CodeVibe",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"codevibe-claude": "./bin/codevibe-claude"
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"dev": "ts-node src/server.ts",
|
|
23
23
|
"start": "node dist/server.js",
|
|
24
24
|
"watch": "tsc --watch",
|
|
25
|
-
"test": "
|
|
25
|
+
"test": "jest --config jest.config.js --forceExit"
|
|
26
26
|
},
|
|
27
27
|
"repository": {
|
|
28
28
|
"type": "git",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"darwin"
|
|
54
54
|
],
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@quantiya/codevibe-core": "^1.0.
|
|
56
|
+
"@quantiya/codevibe-core": "^1.0.3",
|
|
57
57
|
"dotenv": "^16.6.1",
|
|
58
58
|
"express": "^5.1.0",
|
|
59
59
|
"graphql": "^16.12.0",
|
|
@@ -70,9 +70,12 @@
|
|
|
70
70
|
],
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@types/express": "^5.0.5",
|
|
73
|
+
"@types/jest": "^30.0.0",
|
|
73
74
|
"@types/node": "^24.10.1",
|
|
74
75
|
"@types/uuid": "^10.0.0",
|
|
75
76
|
"@types/ws": "^8.18.1",
|
|
77
|
+
"jest": "^30.3.0",
|
|
78
|
+
"ts-jest": "^29.4.9",
|
|
76
79
|
"ts-node": "^10.9.2",
|
|
77
80
|
"typescript": "^5.9.3"
|
|
78
81
|
},
|