@dollhousemcp/mcp-server 2.0.30 → 2.0.32
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/CHANGELOG.md +9 -0
- package/data/ensembles/welcome-to-the-dollhouse.md +94 -0
- package/data/personas/dollhouse-expert.md +242 -14
- package/data/skills/research-to-elements.md +136 -0
- package/dist/elements/agents/AgentManager.d.ts +8 -1
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +49 -9
- package/dist/elements/ensembles/EnsembleManager.d.ts +36 -0
- package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -1
- package/dist/elements/ensembles/EnsembleManager.js +94 -5
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/MCPAQLHandler.js +31 -2
- package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/OperationSchema.js +8 -7
- package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -1
- package/dist/handlers/mcp-aql/evaluatePermission.js +6 -3
- package/dist/server/tools/MCPAQLTools.js +21 -5
- package/dist/services/BuildInfoService.d.ts +3 -1
- package/dist/services/BuildInfoService.d.ts.map +1 -1
- package/dist/services/BuildInfoService.js +27 -5
- package/dist/utils/permissionHookShared.d.ts +39 -0
- package/dist/utils/permissionHookShared.d.ts.map +1 -1
- package/dist/utils/permissionHookShared.js +38 -1
- package/dist/utils/permissionHookStatus.d.ts.map +1 -1
- package/dist/utils/permissionHookStatus.js +6 -2
- package/dist/utils/permissionHooks.d.ts +1 -1
- package/dist/utils/permissionHooks.d.ts.map +1 -1
- package/dist/utils/permissionHooks.js +2 -2
- package/dist/web/public/app.js +213 -12
- package/dist/web/public/index.html +16 -7
- package/dist/web/public/styles.css +229 -30
- package/dist/web/routes/healthRoutes.d.ts.map +1 -1
- package/dist/web/routes/healthRoutes.js +3 -1
- package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
- package/dist/web/routes/permissionRoutes.js +10 -2
- package/package.json +1 -1
- package/scripts/pretooluse-dollhouse.sh +157 -39
- package/server.json +2 -2
|
@@ -62,18 +62,27 @@ export class BuildInfoService {
|
|
|
62
62
|
: { isDocker: false, info: undefined };
|
|
63
63
|
const permissionHookInfo = results[2].status === 'fulfilled'
|
|
64
64
|
? results[2].value
|
|
65
|
-
: {
|
|
65
|
+
: {
|
|
66
|
+
installedHosts: [],
|
|
67
|
+
currentHosts: [],
|
|
68
|
+
repairedHosts: [],
|
|
69
|
+
needsRepairHosts: [],
|
|
70
|
+
diagnosticsPath: '',
|
|
71
|
+
lastDiagnostic: null,
|
|
72
|
+
lastStartupRepair: null,
|
|
73
|
+
};
|
|
66
74
|
const permissionHookHealth = summarizePermissionHookHealth(permissionHookInfo);
|
|
75
|
+
const formatSettledReason = (reason) => (reason instanceof Error ? `${reason.name}: ${reason.message}` : String(reason));
|
|
67
76
|
// Log any failures for diagnostics
|
|
68
77
|
const failures = [];
|
|
69
78
|
if (results[0].status === 'rejected') {
|
|
70
|
-
failures.push(`git info: ${results[0].reason}`);
|
|
79
|
+
failures.push(`git info: ${formatSettledReason(results[0].reason)}`);
|
|
71
80
|
}
|
|
72
81
|
if (results[1].status === 'rejected') {
|
|
73
|
-
failures.push(`docker info: ${results[1].reason}`);
|
|
82
|
+
failures.push(`docker info: ${formatSettledReason(results[1].reason)}`);
|
|
74
83
|
}
|
|
75
84
|
if (results[2].status === 'rejected') {
|
|
76
|
-
failures.push(`permission hook audit: ${results[2].reason}`);
|
|
85
|
+
failures.push(`permission hook audit: ${formatSettledReason(results[2].reason)}`);
|
|
77
86
|
}
|
|
78
87
|
if (failures.length > 0) {
|
|
79
88
|
logger.debug(`Build info collection had ${failures.length} failure(s): ${failures.join('; ')}`);
|
|
@@ -206,9 +215,22 @@ export class BuildInfoService {
|
|
|
206
215
|
.join('; ')
|
|
207
216
|
: '';
|
|
208
217
|
lines.push('', '## 🔐 Permission Hooks', `- **Health**: ${info.permissionHooks.health.status.toUpperCase()} — ${info.permissionHooks.health.message}`, `- **Installed Hosts**: ${installedHosts}`, `- **Current Assets**: ${currentHosts}`, `- **Needs Repair**: ${needsRepairHosts}`);
|
|
218
|
+
if (info.permissionHooks.diagnosticsPath) {
|
|
219
|
+
lines.push(`- **Diagnostics Log**: ${info.permissionHooks.diagnosticsPath}`);
|
|
220
|
+
}
|
|
209
221
|
if (lastStartupRepair) {
|
|
210
222
|
lines.push(`- **Last Startup Audit**: ${lastStartupRepair.completedAt} (${lastStartupRepair.durationMs}ms)`, `- **Startup Repairs Applied**: ${lastStartupRepair.repairedCount}`, `- **Startup Repair Issues**: ${startupRepairIssues || 'None'}`);
|
|
211
223
|
}
|
|
224
|
+
if (info.permissionHooks.lastDiagnostic) {
|
|
225
|
+
const lastDiagnostic = info.permissionHooks.lastDiagnostic;
|
|
226
|
+
const diagnosticOutcome = lastDiagnostic.outcome
|
|
227
|
+
? `${lastDiagnostic.event} / ${lastDiagnostic.outcome}`
|
|
228
|
+
: lastDiagnostic.event;
|
|
229
|
+
lines.push(`- **Last Diagnostic Event**: ${lastDiagnostic.timestamp} (${diagnosticOutcome})`, `- **Last Diagnostic Stage**: ${lastDiagnostic.stage}`, `- **Last Diagnostic Input Bytes**: ${lastDiagnostic.rawInputLength ?? 0}`, `- **Last Diagnostic Normalized Bytes**: ${lastDiagnostic.normalizedResponseLength ?? 0}`, `- **Last Diagnostic Emitted Bytes**: ${lastDiagnostic.emittedResponseLength ?? 0}`);
|
|
230
|
+
if (lastDiagnostic.reason) {
|
|
231
|
+
lines.push(`- **Last Diagnostic Reason**: ${lastDiagnostic.reason}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
212
234
|
}
|
|
213
235
|
// Issue #706: Startup timing
|
|
214
236
|
if (info.startup) {
|
|
@@ -305,4 +327,4 @@ export class BuildInfoService {
|
|
|
305
327
|
return `${mb.toFixed(1)} MB`;
|
|
306
328
|
}
|
|
307
329
|
}
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVpbGRJbmZvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsR0FHOUIsTUFBTSw2QkFBNkIsQ0FBQztBQXFEckMsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLFNBQVMsQ0FBTztJQUNoQixjQUFjLENBQXlCO0lBQ3hELHFFQUFxRTtJQUM3RCxZQUFZLEdBQXdCLElBQUksQ0FBQztJQUNqRCwyREFBMkQ7SUFDbkQsb0JBQW9CLEdBQTJCLElBQUksQ0FBQztJQUU1RCxZQUFZLGNBQXNDO1FBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFDLE9BQXNCO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixrRkFBa0Y7UUFDbEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENB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QUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFFM0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnVpbGRJbmZvU2VydmljZSAtIFByb3ZpZGVzIGJ1aWxkIGFuZCBydW50aW1lIGluZm9ybWF0aW9uXG4gKiBTZXBhcmF0ZWQgZnJvbSBtYWluIGluZGV4LnRzIHRvIGF2b2lkIG1ha2luZyB0aGF0IGZpbGUgbGFyZ2VyXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWCAoUFIgIzYxNCk6XG4gKiAxLiBETUNQLVNFQy0wMDQ6IEZBTFNFIFBPU0lUSVZFIFNVUFBSRVNTSU9OIC0gTm8gdXNlciBpbnB1dCBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gKiAgICBUaGlzIHNlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChnaXQsIHBhY2thZ2UuanNvbiwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICogICAgVGhlIE1DUCB0b29sICdnZXRfYnVpbGRfaW5mbycgdGFrZXMgTk8gcGFyYW1ldGVycyAoZW1wdHkgaW5wdXRTY2hlbWEpXG4gKiAgICBObyB1c2VyLXByb3ZpZGVkIGRhdGEgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UgdGhhdCByZXF1aXJlcyBVbmljb2RlIG5vcm1hbGl6YXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVkVSU0lPTiwgQlVJTERfVElNRVNUQU1QLCBCVUlMRF9UWVBFIH0gZnJvbSAnLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwVGltZXIsIFN0YXJ0dXBSZXBvcnQgfSBmcm9tICcuLi90ZWxlbWV0cnkvU3RhcnR1cFRpbWVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkgfSBmcm9tICcuL3Nlc3Npb25JZGVudGl0eS5qcyc7XG5pbXBvcnQge1xuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgc3VtbWFyaXplUGVybWlzc2lvbkhvb2tIZWFsdGgsXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tIZWFsdGhTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnksXG59IGZyb20gJy4uL3V0aWxzL3Blcm1pc3Npb25Ib29rcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRJbmZvIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTZXNzaW9uSWQ6IHN0cmluZztcbiAgc2Vzc2lvblNvdXJjZTogJ2VudicgfCAnZGVyaXZlZCc7XG4gIHBhY2thZ2U6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICB9O1xuICBidWlsZDoge1xuICAgIHRpbWVzdGFtcD86IHN0cmluZztcbiAgICB0eXBlOiAnZ2l0JyB8ICducG0nIHwgJ3Vua25vd24nO1xuICAgIGdpdENvbW1pdD86IHN0cmluZztcbiAgICBnaXRCcmFuY2g/OiBzdHJpbmc7XG4gIH07XG4gIHJ1bnRpbWU6IHtcbiAgICBub2RlVmVyc2lvbjogc3RyaW5nO1xuICAgIHBsYXRmb3JtOiBzdHJpbmc7XG4gICAgYXJjaDogc3RyaW5nO1xuICAgIHVwdGltZTogbnVtYmVyO1xuICAgIG1lbW9yeVVzYWdlOiBOb2RlSlMuTWVtb3J5VXNhZ2U7XG4gIH07XG4gIGVudmlyb25tZW50OiB7XG4gICAgbm9kZUVudj86IHN0cmluZztcbiAgICBpc1Byb2R1Y3Rpb246IGJvb2xlYW47XG4gICAgaXNEZXZlbG9wbWVudDogYm9vbGVhbjtcbiAgICBpc0RlYnVnOiBib29sZWFuO1xuICAgIGlzRG9ja2VyOiBib29sZWFuO1xuICAgIGRvY2tlckluZm8/OiBzdHJpbmc7XG4gIH07XG4gIHNlcnZlcjoge1xuICAgIHN0YXJ0VGltZTogRGF0ZTtcbiAgICB1cHRpbWU6IG51bWJlcjtcbiAgICBtY3BDb25uZWN0aW9uOiBib29sZWFuO1xuICB9O1xuICBwZXJtaXNzaW9uSG9va3M/OiB7XG4gICAgaGVhbHRoOiBQZXJtaXNzaW9uSG9va0hlYWx0aFN1bW1hcnk7XG4gICAgaW5zdGFsbGVkSG9zdHM6IHN0cmluZ1tdO1xuICAgIGN1cnJlbnRIb3N0czogc3RyaW5nW107XG4gICAgcmVwYWlyZWRIb3N0czogc3RyaW5nW107XG4gICAgbmVlZHNSZXBhaXJIb3N0czogc3RyaW5nW107XG4gICAgbGFzdFN0YXJ0dXBSZXBhaXI6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsO1xuICB9O1xuICAvKiogSXNzdWUgIzcwNjogU3RhcnR1cCB0aW1pbmcgYW5kIHJlYWRpbmVzcyBzdGF0dXMuICovXG4gIHN0YXJ0dXA/OiB7XG4gICAgc3RhdHVzOiAncmVhZHknIHwgJ2luaXRpYWxpemluZyc7XG4gICAgZGVmZXJyZWRTZXR1cENvbXBsZXRlOiBib29sZWFuO1xuICAgIHVwdGltZU1zOiBudW1iZXI7XG4gICAgc3RhcnR1cFRpbWluZ01zPzogU3RhcnR1cFJlcG9ydDtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkSW5mb1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0VGltZTogRGF0ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlT3BlcmF0aW9uczogSUZpbGVPcGVyYXRpb25zU2VydmljZTtcbiAgLyoqIElzc3VlICM3MDY6IE9wdGlvbmFsIHN0YXJ0dXAgdGltZXIgZm9yIHRpbWluZyBpbnN0cnVtZW50YXRpb24uICovXG4gIHByaXZhdGUgc3RhcnR1cFRpbWVyOiBTdGFydHVwVGltZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIElzc3VlICM3MDY6IENhbGxiYWNrIHRvIGNoZWNrIGRlZmVycmVkIHNldHVwIHN0YXR1cy4gKi9cbiAgcHJpdmF0ZSBkZWZlcnJlZFNldHVwQ2hlY2tlcjogKCgpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UpIHtcbiAgICB0aGlzLnN0YXJ0VGltZSA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5maWxlT3BlcmF0aW9ucyA9IGZpbGVPcGVyYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gc3RhcnR1cCBpbnN0cnVtZW50YXRpb24gYWZ0ZXIgREkgaXMgcmVhZHkuXG4gICAqIENhbGxlZCBmcm9tIENvbnRhaW5lciB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IGF0IHJlZ2lzdHJhdGlvbiB0aW1lLlxuICAgKi9cbiAgc2V0U3RhcnR1cFRpbWVyKHRpbWVyOiBTdGFydHVwVGltZXIpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0dXBUaW1lciA9IHRpbWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlICM3MDY6IFdpcmUgaW4gZGVmZXJyZWQgc2V0dXAgc3RhdHVzIGNoZWNrZXIuXG4gICAqL1xuICBzZXREZWZlcnJlZFNldHVwQ2hlY2tlcihjaGVja2VyOiAoKSA9PiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kZWZlcnJlZFNldHVwQ2hlY2tlciA9IGNoZWNrZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbXByZWhlbnNpdmUgYnVpbGQgaW5mb3JtYXRpb25cbiAgICogU0VDVVJJVFkgTk9URTogVGhpcyBtZXRob2QgcHJvY2Vzc2VzIG9ubHkgc3lzdGVtLWdlbmVyYXRlZCBkYXRhXG4gICAqIE5vIHVzZXIgaW5wdXQgaXMgaW52b2x2ZWQgLSBhbGwgZGF0YSBjb21lcyBmcm9tIGZpbGVzeXN0ZW0sIGdpdCwgYW5kIE5vZGUuanMgcHJvY2Vzc1xuICAgKlxuICAgKiBVc2VzIFByb21pc2UuYWxsU2V0dGxlZCB0byBjb2xsZWN0IHBhcnRpYWwgcmVzdWx0cyBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsLFxuICAgKiBwcm92aWRpbmcgbWF4aW11bSBpbmZvcm1hdGlvbiBhdmFpbGFiaWxpdHkgd2l0aCBncmFjZWZ1bCBkZWdyYWRhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRCdWlsZEluZm8oKTogUHJvbWlzZTxCdWlsZEluZm8+IHtcbiAgICAvLyBVc2UgUHJvbWlzZS5hbGxTZXR0bGVkIHRvIGNvbGxlY3QgYWxsIGF2YWlsYWJsZSBpbmZvLCBldmVuIGlmIHNvbWUgc291cmNlcyBmYWlsXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICB0aGlzLmdldEdpdEluZm8oKSxcbiAgICAgIHRoaXMuZ2V0RG9ja2VySW5mbygpLFxuICAgICAgZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkoKSxcbiAgICBdKTtcblxuICAgIC8vIFBhY2thZ2UgaW5mbyBjb21lcyBmcm9tIGJ1aWxkLXRpbWUgZ2VuZXJhdGVkIGNvbnN0YW50c1xuICAgIGNvbnN0IHBhY2thZ2VJbmZvID0geyBuYW1lOiBQQUNLQUdFX05BTUUsIHZlcnNpb246IFBBQ0tBR0VfVkVSU0lPTiB9O1xuXG4gICAgY29uc3QgZ2l0SW5mbyA9IHJlc3VsdHNbMF0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzBdLnZhbHVlXG4gICAgICA6IHsgY29tbWl0OiB1bmRlZmluZWQsIGJyYW5jaDogdW5kZWZpbmVkIH07XG5cbiAgICBjb25zdCBkb2NrZXJJbmZvID0gcmVzdWx0c1sxXS5zdGF0dXMgPT09ICdmdWxmaWxsZWQnXG4gICAgICA/IHJlc3VsdHNbMV0udmFsdWVcbiAgICAgIDogeyBpc0RvY2tlcjogZmFsc2UsIGluZm86IHVuZGVmaW5lZCB9O1xuICAgIGNvbnN0IHBlcm1pc3Npb25Ib29rSW5mbyA9IHJlc3VsdHNbMl0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzJdLnZhbHVlXG4gICAgICA6IHsgaW5zdGFsbGVkSG9zdHM6IFtdLCBjdXJyZW50SG9zdHM6IFtdLCByZXBhaXJlZEhvc3RzOiBbXSwgbmVlZHNSZXBhaXJIb3N0czogW10sIGxhc3RTdGFydHVwUmVwYWlyOiBudWxsIH07XG4gICAgY29uc3QgcGVybWlzc2lvbkhvb2tIZWFsdGggPSBzdW1tYXJpemVQZXJtaXNzaW9uSG9va0hlYWx0aChwZXJtaXNzaW9uSG9va0luZm8pO1xuXG4gICAgLy8gTG9nIGFueSBmYWlsdXJlcyBmb3IgZGlhZ25vc3RpY3NcbiAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAocmVzdWx0c1swXS5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGZhaWx1cmVzLnB1c2goYGdpdCBpbmZvOiAke3Jlc3VsdHNbMF0ucmVhc29ufWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0c1sxXS5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGZhaWx1cmVzLnB1c2goYGRvY2tlciBpbmZvOiAke3Jlc3VsdHNbMV0ucmVhc29ufWApO1xuICAgIH1cbiAgICBpZiAocmVzdWx0c1syXS5zdGF0dXMgPT09ICdyZWplY3RlZCcpIHtcbiAgICAgIGZhaWx1cmVzLnB1c2goYHBlcm1pc3Npb24gaG9vayBhdWRpdDogJHtyZXN1bHRzWzJdLnJlYXNvbn1gKTtcbiAgICB9XG5cbiAgICBpZiAoZmFpbHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBCdWlsZCBpbmZvIGNvbGxlY3Rpb24gaGFkICR7ZmFpbHVyZXMubGVuZ3RofSBmYWlsdXJlKHMpOiAke2ZhaWx1cmVzLmpvaW4oJzsgJyl9YCk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgdGltZXN0YW1wIGNvbWVzIGZyb20gYnVpbGQtdGltZSBnZW5lcmF0ZWQgY29uc3RhbnRzXG4gICAgY29uc3QgYnVpbGRUaW1lc3RhbXAgPSBCVUlMRF9USU1FU1RBTVA7XG5cbiAgICAvLyBJc3N1ZSAjNzA2OiBTdGFydHVwIHRpbWluZyBhbmQgcmVhZGluZXNzXG4gICAgY29uc3QgZGVmZXJyZWRDb21wbGV0ZSA9IHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIgPyB0aGlzLmRlZmVycmVkU2V0dXBDaGVja2VyKCkgOiB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0dXBJbmZvOiBCdWlsZEluZm9bJ3N0YXJ0dXAnXSA9IHtcbiAgICAgIHN0YXR1czogZGVmZXJyZWRDb21wbGV0ZSA/ICdyZWFkeScgOiAnaW5pdGlhbGl6aW5nJyxcbiAgICAgIGRlZmVycmVkU2V0dXBDb21wbGV0ZTogZGVmZXJyZWRDb21wbGV0ZSxcbiAgICAgIHVwdGltZU1zOiBEYXRlLm5vdygpIC0gdGhpcy5zdGFydFRpbWUuZ2V0VGltZSgpLFxuICAgICAgc3RhcnR1cFRpbWluZ01zOiB0aGlzLnN0YXJ0dXBUaW1lcj8uZ2V0UmVwb3J0KCksXG4gICAgfTtcbiAgICBjb25zdCBzZXNzaW9uSWRlbnRpdHkgPSByZXNvbHZlU2Vzc2lvbklkZW50aXR5KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWRlbnRpdHkuc2Vzc2lvbklkLFxuICAgICAgcnVudGltZVNlc3Npb25JZDogc2Vzc2lvbklkZW50aXR5LnJ1bnRpbWVTZXNzaW9uSWQsXG4gICAgICBzZXNzaW9uU291cmNlOiBzZXNzaW9uSWRlbnRpdHkuc291cmNlLFxuICAgICAgcGFja2FnZTogcGFja2FnZUluZm8sXG4gICAgICBidWlsZDoge1xuICAgICAgICB0aW1lc3RhbXA6IGJ1aWxkVGltZXN0YW1wLFxuICAgICAgICB0eXBlOiBCVUlMRF9UWVBFLFxuICAgICAgICBnaXRDb21taXQ6IGdpdEluZm8uY29tbWl0LFxuICAgICAgICBnaXRCcmFuY2g6IGdpdEluZm8uYnJhbmNoLFxuICAgICAgfSxcbiAgICAgIHJ1bnRpbWU6IHtcbiAgICAgICAgbm9kZVZlcnNpb246IHByb2Nlc3MudmVyc2lvbixcbiAgICAgICAgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgICAgIGFyY2g6IHByb2Nlc3MuYXJjaCxcbiAgICAgICAgdXB0aW1lOiBwcm9jZXNzLnVwdGltZSgpLFxuICAgICAgICBtZW1vcnlVc2FnZTogcHJvY2Vzcy5tZW1vcnlVc2FnZSgpXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbm9kZUVudjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG4gICAgICAgIGlzUHJvZHVjdGlvbjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyxcbiAgICAgICAgaXNEZXZlbG9wbWVudDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcsXG4gICAgICAgIGlzRGVidWc6IHByb2Nlc3MuZW52LkRFQlVHID09PSAndHJ1ZScgfHwgcHJvY2Vzcy5lbnYuREVCVUcgPT09ICcxJyxcbiAgICAgICAgaXNEb2NrZXI6IGRvY2tlckluZm8uaXNEb2NrZXIsXG4gICAgICAgIGRvY2tlckluZm86IGRvY2tlckluZm8uaW5mb1xuICAgICAgfSxcbiAgICAgIHNlcnZlcjoge1xuICAgICAgICBzdGFydFRpbWU6IHRoaXMuc3RhcnRUaW1lLFxuICAgICAgICB1cHRpbWU6IERhdGUubm93KCkgLSB0aGlzLnN0YXJ0VGltZS5nZXRUaW1lKCksXG4gICAgICAgIG1jcENvbm5lY3Rpb246IHRydWUgLy8gV2UncmUgY29ubmVjdGVkIGlmIHRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxlZCB2aWEgTUNQXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbkhvb2tzOiB7XG4gICAgICAgIC4uLnBlcm1pc3Npb25Ib29rSW5mbyxcbiAgICAgICAgaGVhbHRoOiBwZXJtaXNzaW9uSG9va0hlYWx0aCxcbiAgICAgIH0sXG4gICAgICBzdGFydHVwOiBzdGFydHVwSW5mbyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBidWlsZCBpbmZvIGFzIHVzZXItZnJpZW5kbHkgbWFya2Rvd25cbiAgICogU0VDVVJJVFkgTk9URTogT25seSBmb3JtYXRzIHN5c3RlbS1nZW5lcmF0ZWQgZGF0YSAtIG5vIHVzZXIgaW5wdXQgcHJvY2Vzc2luZ1xuICAgKiBBbGwgaW5wdXQgZGF0YSBjb21lcyBmcm9tIGdldEJ1aWxkSW5mbygpIHdoaWNoIG9ubHkgcmVhZHMgc3lzdGVtIGluZm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0QnVpbGRJbmZvKGluZm86IEJ1aWxkSW5mbyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgbGluZXMucHVzaCgnIyDwn5SnIEJ1aWxkIEluZm9ybWF0aW9uXFxuJyk7XG4gICAgXG4gICAgLy8gUGFja2FnZSBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg8J+TpiBQYWNrYWdlJyk7XG4gICAgbGluZXMucHVzaChgLSAqKk5hbWUqKjogJHtpbmZvLnBhY2thZ2UubmFtZX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVmVyc2lvbioqOiAke2luZm8ucGFja2FnZS52ZXJzaW9ufWApO1xuICAgIGxpbmVzLnB1c2goJycpO1xuXG4gICAgY29uc3QgaWRlbnRpdHlTb3VyY2VMYWJlbCA9IGluZm8uc2Vzc2lvblNvdXJjZSA9PT0gJ2VudidcbiAgICAgID8gJ0V4cGxpY2l0IGVudmlyb25tZW50J1xuICAgICAgOiAnRGVyaXZlZCBmcm9tIHdvcmtzcGFjZSBjb250ZXh0JztcbiAgICBjb25zdCBzZXNzaW9uTGluZXMgPSBbXG4gICAgICAnIyMg8J+qqiBTZXNzaW9uJyxcbiAgICAgIGAtICoqU2Vzc2lvbiBJRCoqOiAke2luZm8uc2Vzc2lvbklkfWAsXG4gICAgICBgLSAqKklkZW50aXR5IFNvdXJjZSoqOiAke2lkZW50aXR5U291cmNlTGFiZWx9YCxcbiAgICBdO1xuICAgIGlmIChpbmZvLnJ1bnRpbWVTZXNzaW9uSWQgIT09IGluZm8uc2Vzc2lvbklkKSB7XG4gICAgICBzZXNzaW9uTGluZXMuc3BsaWNlKDIsIDAsIGAtICoqUnVudGltZSBTZXNzaW9uIElEKio6ICR7aW5mby5ydW50aW1lU2Vzc2lvbklkfWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKC4uLnNlc3Npb25MaW5lcywgJycpO1xuICAgIFxuICAgIC8vIEJ1aWxkIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn4+X77iPIEJ1aWxkJyk7XG4gICAgbGluZXMucHVzaChgLSAqKlR5cGUqKjogJHtpbmZvLmJ1aWxkLnR5cGV9YCk7XG4gICAgaWYgKGluZm8uYnVpbGQudGltZXN0YW1wKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqVGltZXN0YW1wKio6ICR7aW5mby5idWlsZC50aW1lc3RhbXB9YCk7XG4gICAgfVxuICAgIGlmIChpbmZvLmJ1aWxkLmdpdENvbW1pdCkge1xuICAgICAgbGluZXMucHVzaChgLSAqKkdpdCBDb21taXQqKjogXFxgJHtpbmZvLmJ1aWxkLmdpdENvbW1pdH1cXGBgKTtcbiAgICB9XG4gICAgaWYgKGluZm8uYnVpbGQuZ2l0QnJhbmNoKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqR2l0IEJyYW5jaCoqOiAke2luZm8uYnVpbGQuZ2l0QnJhbmNofWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBSdW50aW1lIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn5K7IFJ1bnRpbWUnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTm9kZS5qcyoqOiAke2luZm8ucnVudGltZS5ub2RlVmVyc2lvbn1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqUGxhdGZvcm0qKjogJHtpbmZvLnJ1bnRpbWUucGxhdGZvcm19YCk7XG4gICAgbGluZXMucHVzaChgLSAqKkFyY2hpdGVjdHVyZSoqOiAke2luZm8ucnVudGltZS5hcmNofWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipQcm9jZXNzIFVwdGltZSoqOiAke3RoaXMuZm9ybWF0VXB0aW1lKGluZm8ucnVudGltZS51cHRpbWUpfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipNZW1vcnkgVXNhZ2UqKjogJHt0aGlzLmZvcm1hdE1lbW9yeShpbmZvLnJ1bnRpbWUubWVtb3J5VXNhZ2UuaGVhcFVzZWQpfSAvICR7dGhpcy5mb3JtYXRNZW1vcnkoaW5mby5ydW50aW1lLm1lbW9yeVVzYWdlLmhlYXBUb3RhbCl9YCk7XG4gICAgbGluZXMucHVzaCgnJyk7XG4gICAgXG4gICAgLy8gRW52aXJvbm1lbnQgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIOKame+4jyBFbnZpcm9ubWVudCcpO1xuICAgIGxpbmVzLnB1c2goYC0gKipOT0RFX0VOVioqOiAke2luZm8uZW52aXJvbm1lbnQubm9kZUVudiB8fCAnbm90IHNldCd9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1vZGUqKjogJHtpbmZvLmVudmlyb25tZW50LmlzUHJvZHVjdGlvbiA/ICdQcm9kdWN0aW9uJyA6IGluZm8uZW52aXJvbm1lbnQuaXNEZXZlbG9wbWVudCA/ICdEZXZlbG9wbWVudCcgOiAnVW5rbm93bid9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKkRlYnVnKio6ICR7aW5mby5lbnZpcm9ubWVudC5pc0RlYnVnID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJ31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqRG9ja2VyKio6ICR7aW5mby5lbnZpcm9ubWVudC5pc0RvY2tlciA/ICdZZXMnIDogJ05vJ31gKTtcbiAgICBpZiAoaW5mby5lbnZpcm9ubWVudC5kb2NrZXJJbmZvKSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqQ29udGFpbmVyKio6ICR7aW5mby5lbnZpcm9ubWVudC5kb2NrZXJJbmZvfWApO1xuICAgIH1cbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBTZXJ2ZXIgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfmoAgU2VydmVyJyk7XG4gICAgbGluZXMucHVzaChgLSAqKlN0YXJ0ZWQqKjogJHtpbmZvLnNlcnZlci5zdGFydFRpbWUudG9JU09TdHJpbmcoKX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVXB0aW1lKio6ICR7dGhpcy5mb3JtYXRVcHRpbWUoaW5mby5zZXJ2ZXIudXB0aW1lIC8gMTAwMCl9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1DUCBDb25uZWN0aW9uKio6ICR7aW5mby5zZXJ2ZXIubWNwQ29ubmVjdGlvbiA/ICfinIUgQ29ubmVjdGVkJyA6ICfinYwgRGlzY29ubmVjdGVkJ31gKTtcblxuICAgIGlmIChpbmZvLnBlcm1pc3Npb25Ib29rcykge1xuICAgICAgY29uc3QgaW5zdGFsbGVkSG9zdHMgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5pbnN0YWxsZWRIb3N0cy5sZW5ndGggPiAwXG4gICAgICAgID8gaW5mby5wZXJtaXNzaW9uSG9va3MuaW5zdGFsbGVkSG9zdHMuam9pbignLCAnKVxuICAgICAgICA6ICdOb25lJztcbiAgICAgIGNvbnN0IGN1cnJlbnRIb3N0cyA9IGluZm8ucGVybWlzc2lvbkhvb2tzLmN1cnJlbnRIb3N0cy5sZW5ndGggPiAwXG4gICAgICAgID8gaW5mby5wZXJtaXNzaW9uSG9va3MuY3VycmVudEhvc3RzLmpvaW4oJywgJylcbiAgICAgICAgOiAnTm9uZSc7XG4gICAgICBjb25zdCBuZWVkc1JlcGFpckhvc3RzID0gaW5mby5wZXJtaXNzaW9uSG9va3MubmVlZHNSZXBhaXJIb3N0cy5sZW5ndGggPiAwXG4gICAgICAgID8gaW5mby5wZXJtaXNzaW9uSG9va3MubmVlZHNSZXBhaXJIb3N0cy5qb2luKCcsICcpXG4gICAgICAgIDogJ05vbmUnO1xuICAgICAgY29uc3QgbGFzdFN0YXJ0dXBSZXBhaXIgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5sYXN0U3RhcnR1cFJlcGFpcjtcbiAgICAgIGNvbnN0IHN0YXJ0dXBSZXBhaXJJc3N1ZXMgPSBsYXN0U3RhcnR1cFJlcGFpclxuICAgICAgICA/IGxhc3RTdGFydHVwUmVwYWlyLmhvc3RSZXN1bHRzXG4gICAgICAgICAgLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQub3V0Y29tZSA9PT0gJ25lZWRzX3JlcGFpcicgfHwgcmVzdWx0Lm91dGNvbWUgPT09ICdlcnJvcicpXG4gICAgICAgICAgLm1hcCgocmVzdWx0KSA9PiByZXN1bHQucmVwYWlyRXJyb3IgPyBgJHtyZXN1bHQuaG9zdH0gKCR7cmVzdWx0LnJlcGFpckVycm9yfSlgIDogcmVzdWx0Lmhvc3QpXG4gICAgICAgICAgLmpvaW4oJzsgJylcbiAgICAgICAgOiAnJztcblxuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgJycsXG4gICAgICAgICcjIyDwn5SQIFBlcm1pc3Npb24gSG9va3MnLFxuICAgICAgICBgLSAqKkhlYWx0aCoqOiAke2luZm8ucGVybWlzc2lvbkhvb2tzLmhlYWx0aC5zdGF0dXMudG9VcHBlckNhc2UoKX0g4oCUICR7aW5mby5wZXJtaXNzaW9uSG9va3MuaGVhbHRoLm1lc3NhZ2V9YCxcbiAgICAgICAgYC0gKipJbnN0YWxsZWQgSG9zdHMqKjogJHtpbnN0YWxsZWRIb3N0c31gLFxuICAgICAgICBgLSAqKkN1cnJlbnQgQXNzZXRzKio6ICR7Y3VycmVudEhvc3RzfWAsXG4gICAgICAgIGAtICoqTmVlZHMgUmVwYWlyKio6ICR7bmVlZHNSZXBhaXJIb3N0c31gLFxuICAgICAgKTtcblxuICAgICAgaWYgKGxhc3RTdGFydHVwUmVwYWlyKSB7XG4gICAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgICAgYC0gKipMYXN0IFN0YXJ0dXAgQXVkaXQqKjogJHtsYXN0U3RhcnR1cFJlcGFpci5jb21wbGV0ZWRBdH0gKCR7bGFzdFN0YXJ0dXBSZXBhaXIuZHVyYXRpb25Nc31tcylgLFxuICAgICAgICAgIGAtICoqU3RhcnR1cCBSZXBhaXJzIEFwcGxpZWQqKjogJHtsYXN0U3RhcnR1cFJlcGFpci5yZXBhaXJlZENvdW50fWAsXG4gICAgICAgICAgYC0gKipTdGFydHVwIFJlcGFpciBJc3N1ZXMqKjogJHtzdGFydHVwUmVwYWlySXNzdWVzIHx8ICdOb25lJ31gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nXG4gICAgaWYgKGluZm8uc3RhcnR1cCkge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICBsaW5lcy5wdXNoKCcjIyDij7HvuI8gU3RhcnR1cCcpO1xuICAgICAgbGluZXMucHVzaChgLSAqKlN0YXR1cyoqOiAke2luZm8uc3RhcnR1cC5zdGF0dXMgPT09ICdyZWFkeScgPyAn4pyFIFJlYWR5JyA6ICfij7MgSW5pdGlhbGl6aW5nJ31gKTtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBTZXR1cCoqOiAke2luZm8uc3RhcnR1cC5kZWZlcnJlZFNldHVwQ29tcGxldGUgPyAnQ29tcGxldGUnIDogJ0luIFByb2dyZXNzJ31gKTtcbiAgICAgIGlmIChpbmZvLnN0YXJ0dXAuc3RhcnR1cFRpbWluZ01zKSB7XG4gICAgICAgIGNvbnN0IHRpbWluZyA9IGluZm8uc3RhcnR1cC5zdGFydHVwVGltaW5nTXM7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipDcml0aWNhbCBQYXRoKio6ICR7dGltaW5nLmNyaXRpY2FsUGF0aE1zfW1zYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBXb3JrKio6ICR7dGltaW5nLmRlZmVycmVkTXN9bXNgKTtcbiAgICAgICAgbGluZXMucHVzaChgLSAqKlRvdGFsIFN0YXJ0dXAqKjogJHt0aW1pbmcudG90YWxNc31tc2ApO1xuICAgICAgICBpZiAodGltaW5nLmNvbm5lY3RBdE1zICE9PSBudWxsKSB7XG4gICAgICAgICAgbGluZXMucHVzaChgLSAqKlRpbWUgdG8gQ29ubmVjdCoqOiAke3RpbWluZy5jb25uZWN0QXRNc31tc2ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1pbmcucGhhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKCctICoqUGhhc2VzKio6Jyk7XG4gICAgICAgICAgZm9yIChjb25zdCBwaGFzZSBvZiB0aW1pbmcucGhhc2VzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBwaGFzZS5jcml0aWNhbCA/ICdjcml0aWNhbCcgOiAnZGVmZXJyZWQnO1xuICAgICAgICAgICAgbGluZXMucHVzaChgICAtICR7cGhhc2UubmFtZX06ICR7cGhhc2UuZHVyYXRpb25Nc31tcyAoJHt0YWd9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTRUNVUklUWSBOT1RFOiBObyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkIC0gZXhlY3V0ZXMgc3lzdGVtIGdpdCBjb21tYW5kc1xuICAgKiBEYXRhIHNvdXJjZTogR2l0IENMSSBvdXRwdXQgKHN5c3RlbS1jb250cm9sbGVkKSwgbm8gdXNlciBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRHaXRJbmZvKCk6IFByb21pc2U8eyBjb21taXQ/OiBzdHJpbmc7IGJyYW5jaD86IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNFQ1VSSVRZIE5PVEU6IEdpdCBjb21tYW5kcyByZXR1cm4gc3lzdGVtLWNvbnRyb2xsZWQgZGF0YSAtIG5vdCB1c2VyIGlucHV0XG4gICAgICAvLyBHaXQgY29tbWl0IGhhc2hlcyBhbmQgYnJhbmNoIG5hbWVzIGFyZSBjb250cm9sbGVkIGJ5IGdpdCwgbm8gVW5pY29kZSBub3JtYWxpemF0aW9uIG5lZWRlZFxuICAgICAgY29uc3QgY29tbWl0ID0gY2hpbGRfcHJvY2Vzcy5leGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoJ2dpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgY29tbWl0LCBicmFuY2ggfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBhIGdpdCByZXBvc2l0b3J5IG9yIGdpdCBub3QgYXZhaWxhYmxlXG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIE5PVEU6IE5vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgLSByZWFkcyBjb250YWluZXIgcnVudGltZSBmaWxlc1xuICAgKiBEYXRhIHNvdXJjZTogU3lzdGVtIGNncm91cCBmaWxlcyAoY29udGFpbmVyLWNvbnRyb2xsZWQpLCBubyB1c2VyIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERvY2tlckluZm8oKTogUHJvbWlzZTx7IGlzRG9ja2VyOiBib29sZWFuOyBpbmZvPzogc3RyaW5nIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU0VDVVJJVFkgTk9URTogUmVhZGluZyBzeXN0ZW0gY2dyb3VwIGZpbGUgLSBjb250cm9sbGVkIGJ5IGNvbnRhaW5lciBydW50aW1lLCBub3QgdXNlciBpbnB1dFxuICAgICAgLy8gQ29udGFpbmVyIHJ1bnRpbWUgZ2VuZXJhdGVzIHRoaXMgZmlsZSBjb250ZW50LCBubyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gICAgICBjb25zdCBjZ3JvdXBDb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5yZWFkRmlsZSgnL3Byb2MvMS9jZ3JvdXAnLCB7XG4gICAgICAgIHNvdXJjZTogJ0J1aWxkSW5mb1NlcnZpY2UuZ2V0RG9ja2VySW5mbydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNEb2NrZXIgPSBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdkb2NrZXInKSB8fCBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdjb250YWluZXJkJyk7XG4gICAgICBcbiAgICAgIGlmIChpc0RvY2tlcikge1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IGNvbnRhaW5lciBJRFxuICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IGNncm91cENvbnRlbnRcbiAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgLmZpbmQobGluZSA9PiBsaW5lLmluY2x1ZGVzKCdkb2NrZXInKSlcbiAgICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgICAucG9wKClcbiAgICAgICAgICA/LnN1YnN0cmluZygwLCAxMik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzRG9ja2VyOiB0cnVlLFxuICAgICAgICAgIGluZm86IGNvbnRhaW5lcklkID8gYENvbnRhaW5lciBJRDogJHtjb250YWluZXJJZH1gIDogJ1J1bm5pbmcgaW4gRG9ja2VyJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4geyBpc0RvY2tlcjogZmFsc2UgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBEb2NrZXIgb3IgL3Byb2Mgbm90IGF2YWlsYWJsZVxuICAgICAgcmV0dXJuIHsgaXNEb2NrZXI6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVcHRpbWUoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gODY0MDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGF5cyA+IDApIHBhcnRzLnB1c2goYCR7ZGF5c31kYCk7XG4gICAgaWYgKGhvdXJzID4gMCkgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIGlmIChzZWNzID4gMCB8fCBwYXJ0cy5sZW5ndGggPT09IDApIHBhcnRzLnB1c2goYCR7c2Vjc31zYCk7XG4gICAgXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TWVtb3J5KGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1iID0gYnl0ZXMgLyAxMDI0IC8gMTAyNDtcbiAgICByZXR1cm4gYCR7bWIudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQnVpbGRJbmZvU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9CdWlsZEluZm9TZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sS0FBSyxhQUFhLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUNMLDZCQUE2QixFQUU3Qiw2QkFBNkIsR0FHOUIsTUFBTSw2QkFBNkIsQ0FBQztBQXVEckMsTUFBTSxPQUFPLGdCQUFnQjtJQUNWLFNBQVMsQ0FBTztJQUNoQixjQUFjLENBQXlCO0lBQ3hELHFFQUFxRTtJQUM3RCxZQUFZLEdBQXdCLElBQUksQ0FBQztJQUNqRCwyREFBMkQ7SUFDbkQsb0JBQW9CLEdBQTJCLElBQUksQ0FBQztJQUU1RCxZQUFZLGNBQXNDO1FBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEtBQW1CO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QixDQUFDLE9BQXNCO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixrRkFBa0Y7UUFDbEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENB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LE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXRDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksR0FBRyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxHQUFHLENBQUM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7UUFFM0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBYTtRQUNoQyxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnVpbGRJbmZvU2VydmljZSAtIFByb3ZpZGVzIGJ1aWxkIGFuZCBydW50aW1lIGluZm9ybWF0aW9uXG4gKiBTZXBhcmF0ZWQgZnJvbSBtYWluIGluZGV4LnRzIHRvIGF2b2lkIG1ha2luZyB0aGF0IGZpbGUgbGFyZ2VyXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWCAoUFIgIzYxNCk6XG4gKiAxLiBETUNQLVNFQy0wMDQ6IEZBTFNFIFBPU0lUSVZFIFNVUFBSRVNTSU9OIC0gTm8gdXNlciBpbnB1dCBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gKiAgICBUaGlzIHNlcnZpY2Ugb25seSBwcm9jZXNzZXMgc3lzdGVtIGluZm9ybWF0aW9uIChnaXQsIHBhY2thZ2UuanNvbiwgZW52aXJvbm1lbnQgdmFyaWFibGVzKVxuICogICAgVGhlIE1DUCB0b29sICdnZXRfYnVpbGRfaW5mbycgdGFrZXMgTk8gcGFyYW1ldGVycyAoZW1wdHkgaW5wdXRTY2hlbWEpXG4gKiAgICBObyB1c2VyLXByb3ZpZGVkIGRhdGEgZmxvd3MgdGhyb3VnaCB0aGlzIHNlcnZpY2UgdGhhdCByZXF1aXJlcyBVbmljb2RlIG5vcm1hbGl6YXRpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IElGaWxlT3BlcmF0aW9uc1NlcnZpY2UgfSBmcm9tICcuL0ZpbGVPcGVyYXRpb25zU2VydmljZS5qcyc7XG5pbXBvcnQgeyBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVkVSU0lPTiwgQlVJTERfVElNRVNUQU1QLCBCVUlMRF9UWVBFIH0gZnJvbSAnLi4vZ2VuZXJhdGVkL3ZlcnNpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwVGltZXIsIFN0YXJ0dXBSZXBvcnQgfSBmcm9tICcuLi90ZWxlbWV0cnkvU3RhcnR1cFRpbWVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkgfSBmcm9tICcuL3Nlc3Npb25JZGVudGl0eS5qcyc7XG5pbXBvcnQge1xuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va0RpYWdub3N0aWNSZWNvcmQsXG4gIHN1bW1hcml6ZVBlcm1pc3Npb25Ib29rSGVhbHRoLFxuICB0eXBlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5LFxufSBmcm9tICcuLi91dGlscy9wZXJtaXNzaW9uSG9va3MuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkSW5mbyB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBydW50aW1lU2Vzc2lvbklkOiBzdHJpbmc7XG4gIHNlc3Npb25Tb3VyY2U6ICdlbnYnIHwgJ2Rlcml2ZWQnO1xuICBwYWNrYWdlOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgfTtcbiAgYnVpbGQ6IHtcbiAgICB0aW1lc3RhbXA/OiBzdHJpbmc7XG4gICAgdHlwZTogJ2dpdCcgfCAnbnBtJyB8ICd1bmtub3duJztcbiAgICBnaXRDb21taXQ/OiBzdHJpbmc7XG4gICAgZ2l0QnJhbmNoPzogc3RyaW5nO1xuICB9O1xuICBydW50aW1lOiB7XG4gICAgbm9kZVZlcnNpb246IHN0cmluZztcbiAgICBwbGF0Zm9ybTogc3RyaW5nO1xuICAgIGFyY2g6IHN0cmluZztcbiAgICB1cHRpbWU6IG51bWJlcjtcbiAgICBtZW1vcnlVc2FnZTogTm9kZUpTLk1lbW9yeVVzYWdlO1xuICB9O1xuICBlbnZpcm9ubWVudDoge1xuICAgIG5vZGVFbnY/OiBzdHJpbmc7XG4gICAgaXNQcm9kdWN0aW9uOiBib29sZWFuO1xuICAgIGlzRGV2ZWxvcG1lbnQ6IGJvb2xlYW47XG4gICAgaXNEZWJ1ZzogYm9vbGVhbjtcbiAgICBpc0RvY2tlcjogYm9vbGVhbjtcbiAgICBkb2NrZXJJbmZvPzogc3RyaW5nO1xuICB9O1xuICBzZXJ2ZXI6IHtcbiAgICBzdGFydFRpbWU6IERhdGU7XG4gICAgdXB0aW1lOiBudW1iZXI7XG4gICAgbWNwQ29ubmVjdGlvbjogYm9vbGVhbjtcbiAgfTtcbiAgcGVybWlzc2lvbkhvb2tzPzoge1xuICAgIGhlYWx0aDogUGVybWlzc2lvbkhvb2tIZWFsdGhTdW1tYXJ5O1xuICAgIGluc3RhbGxlZEhvc3RzOiBzdHJpbmdbXTtcbiAgICBjdXJyZW50SG9zdHM6IHN0cmluZ1tdO1xuICAgIHJlcGFpcmVkSG9zdHM6IHN0cmluZ1tdO1xuICAgIG5lZWRzUmVwYWlySG9zdHM6IHN0cmluZ1tdO1xuICAgIGRpYWdub3N0aWNzUGF0aDogc3RyaW5nO1xuICAgIGxhc3REaWFnbm9zdGljOiBQZXJtaXNzaW9uSG9va0RpYWdub3N0aWNSZWNvcmQgfCBudWxsO1xuICAgIGxhc3RTdGFydHVwUmVwYWlyOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5IHwgbnVsbDtcbiAgfTtcbiAgLyoqIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nIGFuZCByZWFkaW5lc3Mgc3RhdHVzLiAqL1xuICBzdGFydHVwPzoge1xuICAgIHN0YXR1czogJ3JlYWR5JyB8ICdpbml0aWFsaXppbmcnO1xuICAgIGRlZmVycmVkU2V0dXBDb21wbGV0ZTogYm9vbGVhbjtcbiAgICB1cHRpbWVNczogbnVtYmVyO1xuICAgIHN0YXJ0dXBUaW1pbmdNcz86IFN0YXJ0dXBSZXBvcnQ7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZEluZm9TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFydFRpbWU6IERhdGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU9wZXJhdGlvbnM6IElGaWxlT3BlcmF0aW9uc1NlcnZpY2U7XG4gIC8qKiBJc3N1ZSAjNzA2OiBPcHRpb25hbCBzdGFydHVwIHRpbWVyIGZvciB0aW1pbmcgaW5zdHJ1bWVudGF0aW9uLiAqL1xuICBwcml2YXRlIHN0YXJ0dXBUaW1lcjogU3RhcnR1cFRpbWVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJc3N1ZSAjNzA2OiBDYWxsYmFjayB0byBjaGVjayBkZWZlcnJlZCBzZXR1cCBzdGF0dXMuICovXG4gIHByaXZhdGUgZGVmZXJyZWRTZXR1cENoZWNrZXI6ICgoKSA9PiBib29sZWFuKSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGZpbGVPcGVyYXRpb25zOiBJRmlsZU9wZXJhdGlvbnNTZXJ2aWNlKSB7XG4gICAgdGhpcy5zdGFydFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZmlsZU9wZXJhdGlvbnMgPSBmaWxlT3BlcmF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjNzA2OiBXaXJlIGluIHN0YXJ0dXAgaW5zdHJ1bWVudGF0aW9uIGFmdGVyIERJIGlzIHJlYWR5LlxuICAgKiBDYWxsZWQgZnJvbSBDb250YWluZXIgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBhdCByZWdpc3RyYXRpb24gdGltZS5cbiAgICovXG4gIHNldFN0YXJ0dXBUaW1lcih0aW1lcjogU3RhcnR1cFRpbWVyKTogdm9pZCB7XG4gICAgdGhpcy5zdGFydHVwVGltZXIgPSB0aW1lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJc3N1ZSAjNzA2OiBXaXJlIGluIGRlZmVycmVkIHNldHVwIHN0YXR1cyBjaGVja2VyLlxuICAgKi9cbiAgc2V0RGVmZXJyZWRTZXR1cENoZWNrZXIoY2hlY2tlcjogKCkgPT4gYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIgPSBjaGVja2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb21wcmVoZW5zaXZlIGJ1aWxkIGluZm9ybWF0aW9uXG4gICAqIFNFQ1VSSVRZIE5PVEU6IFRoaXMgbWV0aG9kIHByb2Nlc3NlcyBvbmx5IHN5c3RlbS1nZW5lcmF0ZWQgZGF0YVxuICAgKiBObyB1c2VyIGlucHV0IGlzIGludm9sdmVkIC0gYWxsIGRhdGEgY29tZXMgZnJvbSBmaWxlc3lzdGVtLCBnaXQsIGFuZCBOb2RlLmpzIHByb2Nlc3NcbiAgICpcbiAgICogVXNlcyBQcm9taXNlLmFsbFNldHRsZWQgdG8gY29sbGVjdCBwYXJ0aWFsIHJlc3VsdHMgZXZlbiBpZiBzb21lIHNvdXJjZXMgZmFpbCxcbiAgICogcHJvdmlkaW5nIG1heGltdW0gaW5mb3JtYXRpb24gYXZhaWxhYmlsaXR5IHdpdGggZ3JhY2VmdWwgZGVncmFkYXRpb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QnVpbGRJbmZvKCk6IFByb21pc2U8QnVpbGRJbmZvPiB7XG4gICAgLy8gVXNlIFByb21pc2UuYWxsU2V0dGxlZCB0byBjb2xsZWN0IGFsbCBhdmFpbGFibGUgaW5mbywgZXZlbiBpZiBzb21lIHNvdXJjZXMgZmFpbFxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgdGhpcy5nZXRHaXRJbmZvKCksXG4gICAgICB0aGlzLmdldERvY2tlckluZm8oKSxcbiAgICAgIGdldFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5KCksXG4gICAgXSk7XG5cbiAgICAvLyBQYWNrYWdlIGluZm8gY29tZXMgZnJvbSBidWlsZC10aW1lIGdlbmVyYXRlZCBjb25zdGFudHNcbiAgICBjb25zdCBwYWNrYWdlSW5mbyA9IHsgbmFtZTogUEFDS0FHRV9OQU1FLCB2ZXJzaW9uOiBQQUNLQUdFX1ZFUlNJT04gfTtcblxuICAgIGNvbnN0IGdpdEluZm8gPSByZXN1bHRzWzBdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCdcbiAgICAgID8gcmVzdWx0c1swXS52YWx1ZVxuICAgICAgOiB7IGNvbW1pdDogdW5kZWZpbmVkLCBicmFuY2g6IHVuZGVmaW5lZCB9O1xuXG4gICAgY29uc3QgZG9ja2VySW5mbyA9IHJlc3VsdHNbMV0uc3RhdHVzID09PSAnZnVsZmlsbGVkJ1xuICAgICAgPyByZXN1bHRzWzFdLnZhbHVlXG4gICAgICA6IHsgaXNEb2NrZXI6IGZhbHNlLCBpbmZvOiB1bmRlZmluZWQgfTtcbiAgICBjb25zdCBwZXJtaXNzaW9uSG9va0luZm8gPSByZXN1bHRzWzJdLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCdcbiAgICAgID8gcmVzdWx0c1syXS52YWx1ZVxuICAgICAgOiB7XG4gICAgICAgIGluc3RhbGxlZEhvc3RzOiBbXSxcbiAgICAgICAgY3VycmVudEhvc3RzOiBbXSxcbiAgICAgICAgcmVwYWlyZWRIb3N0czogW10sXG4gICAgICAgIG5lZWRzUmVwYWlySG9zdHM6IFtdLFxuICAgICAgICBkaWFnbm9zdGljc1BhdGg6ICcnLFxuICAgICAgICBsYXN0RGlhZ25vc3RpYzogbnVsbCxcbiAgICAgICAgbGFzdFN0YXJ0dXBSZXBhaXI6IG51bGwsXG4gICAgICB9O1xuICAgIGNvbnN0IHBlcm1pc3Npb25Ib29rSGVhbHRoID0gc3VtbWFyaXplUGVybWlzc2lvbkhvb2tIZWFsdGgocGVybWlzc2lvbkhvb2tJbmZvKTtcblxuICAgIGNvbnN0IGZvcm1hdFNldHRsZWRSZWFzb24gPSAocmVhc29uOiB1bmtub3duKTogc3RyaW5nID0+IChcbiAgICAgIHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gYCR7cmVhc29uLm5hbWV9OiAke3JlYXNvbi5tZXNzYWdlfWAgOiBTdHJpbmcocmVhc29uKVxuICAgICk7XG5cbiAgICAvLyBMb2cgYW55IGZhaWx1cmVzIGZvciBkaWFnbm9zdGljc1xuICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChyZXN1bHRzWzBdLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgZmFpbHVyZXMucHVzaChgZ2l0IGluZm86ICR7Zm9ybWF0U2V0dGxlZFJlYXNvbihyZXN1bHRzWzBdLnJlYXNvbil9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHRzWzFdLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgZmFpbHVyZXMucHVzaChgZG9ja2VyIGluZm86ICR7Zm9ybWF0U2V0dGxlZFJlYXNvbihyZXN1bHRzWzFdLnJlYXNvbil9YCk7XG4gICAgfVxuICAgIGlmIChyZXN1bHRzWzJdLnN0YXR1cyA9PT0gJ3JlamVjdGVkJykge1xuICAgICAgZmFpbHVyZXMucHVzaChgcGVybWlzc2lvbiBob29rIGF1ZGl0OiAke2Zvcm1hdFNldHRsZWRSZWFzb24ocmVzdWx0c1syXS5yZWFzb24pfWApO1xuICAgIH1cblxuICAgIGlmIChmYWlsdXJlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEJ1aWxkIGluZm8gY29sbGVjdGlvbiBoYWQgJHtmYWlsdXJlcy5sZW5ndGh9IGZhaWx1cmUocyk6ICR7ZmFpbHVyZXMuam9pbignOyAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aW1lc3RhbXAgY29tZXMgZnJvbSBidWlsZC10aW1lIGdlbmVyYXRlZCBjb25zdGFudHNcbiAgICBjb25zdCBidWlsZFRpbWVzdGFtcCA9IEJVSUxEX1RJTUVTVEFNUDtcblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nIGFuZCByZWFkaW5lc3NcbiAgICBjb25zdCBkZWZlcnJlZENvbXBsZXRlID0gdGhpcy5kZWZlcnJlZFNldHVwQ2hlY2tlciA/IHRoaXMuZGVmZXJyZWRTZXR1cENoZWNrZXIoKSA6IHRydWU7XG4gICAgY29uc3Qgc3RhcnR1cEluZm86IEJ1aWxkSW5mb1snc3RhcnR1cCddID0ge1xuICAgICAgc3RhdHVzOiBkZWZlcnJlZENvbXBsZXRlID8gJ3JlYWR5JyA6ICdpbml0aWFsaXppbmcnLFxuICAgICAgZGVmZXJyZWRTZXR1cENvbXBsZXRlOiBkZWZlcnJlZENvbXBsZXRlLFxuICAgICAgdXB0aW1lTXM6IERhdGUubm93KCkgLSB0aGlzLnN0YXJ0VGltZS5nZXRUaW1lKCksXG4gICAgICBzdGFydHVwVGltaW5nTXM6IHRoaXMuc3RhcnR1cFRpbWVyPy5nZXRSZXBvcnQoKSxcbiAgICB9O1xuICAgIGNvbnN0IHNlc3Npb25JZGVudGl0eSA9IHJlc29sdmVTZXNzaW9uSWRlbnRpdHkoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZGVudGl0eS5zZXNzaW9uSWQsXG4gICAgICBydW50aW1lU2Vzc2lvbklkOiBzZXNzaW9uSWRlbnRpdHkucnVudGltZVNlc3Npb25JZCxcbiAgICAgIHNlc3Npb25Tb3VyY2U6IHNlc3Npb25JZGVudGl0eS5zb3VyY2UsXG4gICAgICBwYWNrYWdlOiBwYWNrYWdlSW5mbyxcbiAgICAgIGJ1aWxkOiB7XG4gICAgICAgIHRpbWVzdGFtcDogYnVpbGRUaW1lc3RhbXAsXG4gICAgICAgIHR5cGU6IEJVSUxEX1RZUEUsXG4gICAgICAgIGdpdENvbW1pdDogZ2l0SW5mby5jb21taXQsXG4gICAgICAgIGdpdEJyYW5jaDogZ2l0SW5mby5icmFuY2gsXG4gICAgICB9LFxuICAgICAgcnVudGltZToge1xuICAgICAgICBub2RlVmVyc2lvbjogcHJvY2Vzcy52ZXJzaW9uLFxuICAgICAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICAgICAgYXJjaDogcHJvY2Vzcy5hcmNoLFxuICAgICAgICB1cHRpbWU6IHByb2Nlc3MudXB0aW1lKCksXG4gICAgICAgIG1lbW9yeVVzYWdlOiBwcm9jZXNzLm1lbW9yeVVzYWdlKClcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBub2RlRW52OiBwcm9jZXNzLmVudi5OT0RFX0VOVixcbiAgICAgICAgaXNQcm9kdWN0aW9uOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nLFxuICAgICAgICBpc0RldmVsb3BtZW50OiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyxcbiAgICAgICAgaXNEZWJ1ZzogcHJvY2Vzcy5lbnYuREVCVUcgPT09ICd0cnVlJyB8fCBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJzEnLFxuICAgICAgICBpc0RvY2tlcjogZG9ja2VySW5mby5pc0RvY2tlcixcbiAgICAgICAgZG9ja2VySW5mbzogZG9ja2VySW5mby5pbmZvXG4gICAgICB9LFxuICAgICAgc2VydmVyOiB7XG4gICAgICAgIHN0YXJ0VGltZTogdGhpcy5zdGFydFRpbWUsXG4gICAgICAgIHVwdGltZTogRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRUaW1lLmdldFRpbWUoKSxcbiAgICAgICAgbWNwQ29ubmVjdGlvbjogdHJ1ZSAvLyBXZSdyZSBjb25uZWN0ZWQgaWYgdGhpcyBtZXRob2QgaXMgYmVpbmcgY2FsbGVkIHZpYSBNQ1BcbiAgICAgIH0sXG4gICAgICBwZXJtaXNzaW9uSG9va3M6IHtcbiAgICAgICAgLi4ucGVybWlzc2lvbkhvb2tJbmZvLFxuICAgICAgICBoZWFsdGg6IHBlcm1pc3Npb25Ib29rSGVhbHRoLFxuICAgICAgfSxcbiAgICAgIHN0YXJ0dXA6IHN0YXJ0dXBJbmZvLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGJ1aWxkIGluZm8gYXMgdXNlci1mcmllbmRseSBtYXJrZG93blxuICAgKiBTRUNVUklUWSBOT1RFOiBPbmx5IGZvcm1hdHMgc3lzdGVtLWdlbmVyYXRlZCBkYXRhIC0gbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nXG4gICAqIEFsbCBpbnB1dCBkYXRhIGNvbWVzIGZyb20gZ2V0QnVpbGRJbmZvKCkgd2hpY2ggb25seSByZWFkcyBzeXN0ZW0gaW5mb3JtYXRpb25cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRCdWlsZEluZm8oaW5mbzogQnVpbGRJbmZvKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICBsaW5lcy5wdXNoKCcjIPCflKcgQnVpbGQgSW5mb3JtYXRpb25cXG4nKTtcbiAgICBcbiAgICAvLyBQYWNrYWdlIGluZm9cbiAgICBsaW5lcy5wdXNoKCcjIyDwn5OmIFBhY2thZ2UnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTmFtZSoqOiAke2luZm8ucGFja2FnZS5uYW1lfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipWZXJzaW9uKio6ICR7aW5mby5wYWNrYWdlLnZlcnNpb259YCk7XG4gICAgbGluZXMucHVzaCgnJyk7XG5cbiAgICBjb25zdCBpZGVudGl0eVNvdXJjZUxhYmVsID0gaW5mby5zZXNzaW9uU291cmNlID09PSAnZW52J1xuICAgICAgPyAnRXhwbGljaXQgZW52aXJvbm1lbnQnXG4gICAgICA6ICdEZXJpdmVkIGZyb20gd29ya3NwYWNlIGNvbnRleHQnO1xuICAgIGNvbnN0IHNlc3Npb25MaW5lcyA9IFtcbiAgICAgICcjIyDwn6qqIFNlc3Npb24nLFxuICAgICAgYC0gKipTZXNzaW9uIElEKio6ICR7aW5mby5zZXNzaW9uSWR9YCxcbiAgICAgIGAtICoqSWRlbnRpdHkgU291cmNlKio6ICR7aWRlbnRpdHlTb3VyY2VMYWJlbH1gLFxuICAgIF07XG4gICAgaWYgKGluZm8ucnVudGltZVNlc3Npb25JZCAhPT0gaW5mby5zZXNzaW9uSWQpIHtcbiAgICAgIHNlc3Npb25MaW5lcy5zcGxpY2UoMiwgMCwgYC0gKipSdW50aW1lIFNlc3Npb24gSUQqKjogJHtpbmZvLnJ1bnRpbWVTZXNzaW9uSWR9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goLi4uc2Vzc2lvbkxpbmVzLCAnJyk7XG4gICAgXG4gICAgLy8gQnVpbGQgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfj5fvuI8gQnVpbGQnKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqVHlwZSoqOiAke2luZm8uYnVpbGQudHlwZX1gKTtcbiAgICBpZiAoaW5mby5idWlsZC50aW1lc3RhbXApIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipUaW1lc3RhbXAqKjogJHtpbmZvLmJ1aWxkLnRpbWVzdGFtcH1gKTtcbiAgICB9XG4gICAgaWYgKGluZm8uYnVpbGQuZ2l0Q29tbWl0KSB7XG4gICAgICBsaW5lcy5wdXNoKGAtICoqR2l0IENvbW1pdCoqOiBcXGAke2luZm8uYnVpbGQuZ2l0Q29tbWl0fVxcYGApO1xuICAgIH1cbiAgICBpZiAoaW5mby5idWlsZC5naXRCcmFuY2gpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipHaXQgQnJhbmNoKio6ICR7aW5mby5idWlsZC5naXRCcmFuY2h9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIFxuICAgIC8vIFJ1bnRpbWUgaW5mb1xuICAgIGxpbmVzLnB1c2goJyMjIPCfkrsgUnVudGltZScpO1xuICAgIGxpbmVzLnB1c2goYC0gKipOb2RlLmpzKio6ICR7aW5mby5ydW50aW1lLm5vZGVWZXJzaW9ufWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipQbGF0Zm9ybSoqOiAke2luZm8ucnVudGltZS5wbGF0Zm9ybX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqQXJjaGl0ZWN0dXJlKio6ICR7aW5mby5ydW50aW1lLmFyY2h9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKlByb2Nlc3MgVXB0aW1lKio6ICR7dGhpcy5mb3JtYXRVcHRpbWUoaW5mby5ydW50aW1lLnVwdGltZSl9YCk7XG4gICAgbGluZXMucHVzaChgLSAqKk1lbW9yeSBVc2FnZSoqOiAke3RoaXMuZm9ybWF0TWVtb3J5KGluZm8ucnVudGltZS5tZW1vcnlVc2FnZS5oZWFwVXNlZCl9IC8gJHt0aGlzLmZvcm1hdE1lbW9yeShpbmZvLnJ1bnRpbWUubWVtb3J5VXNhZ2UuaGVhcFRvdGFsKX1gKTtcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBFbnZpcm9ubWVudCBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg4pqZ77iPIEVudmlyb25tZW50Jyk7XG4gICAgbGluZXMucHVzaChgLSAqKk5PREVfRU5WKio6ICR7aW5mby5lbnZpcm9ubWVudC5ub2RlRW52IHx8ICdub3Qgc2V0J31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTW9kZSoqOiAke2luZm8uZW52aXJvbm1lbnQuaXNQcm9kdWN0aW9uID8gJ1Byb2R1Y3Rpb24nIDogaW5mby5lbnZpcm9ubWVudC5pc0RldmVsb3BtZW50ID8gJ0RldmVsb3BtZW50JyA6ICdVbmtub3duJ31gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqRGVidWcqKjogJHtpbmZvLmVudmlyb25tZW50LmlzRGVidWcgPyAnRW5hYmxlZCcgOiAnRGlzYWJsZWQnfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipEb2NrZXIqKjogJHtpbmZvLmVudmlyb25tZW50LmlzRG9ja2VyID8gJ1llcycgOiAnTm8nfWApO1xuICAgIGlmIChpbmZvLmVudmlyb25tZW50LmRvY2tlckluZm8pIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipDb250YWluZXIqKjogJHtpbmZvLmVudmlyb25tZW50LmRvY2tlckluZm99YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICAgIFxuICAgIC8vIFNlcnZlciBpbmZvXG4gICAgbGluZXMucHVzaCgnIyMg8J+agCBTZXJ2ZXInKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqU3RhcnRlZCoqOiAke2luZm8uc2VydmVyLnN0YXJ0VGltZS50b0lTT1N0cmluZygpfWApO1xuICAgIGxpbmVzLnB1c2goYC0gKipVcHRpbWUqKjogJHt0aGlzLmZvcm1hdFVwdGltZShpbmZvLnNlcnZlci51cHRpbWUgLyAxMDAwKX1gKTtcbiAgICBsaW5lcy5wdXNoKGAtICoqTUNQIENvbm5lY3Rpb24qKjogJHtpbmZvLnNlcnZlci5tY3BDb25uZWN0aW9uID8gJ+KchSBDb25uZWN0ZWQnIDogJ+KdjCBEaXNjb25uZWN0ZWQnfWApO1xuXG4gICAgaWYgKGluZm8ucGVybWlzc2lvbkhvb2tzKSB7XG4gICAgICBjb25zdCBpbnN0YWxsZWRIb3N0cyA9IGluZm8ucGVybWlzc2lvbkhvb2tzLmluc3RhbGxlZEhvc3RzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBpbmZvLnBlcm1pc3Npb25Ib29rcy5pbnN0YWxsZWRIb3N0cy5qb2luKCcsICcpXG4gICAgICAgIDogJ05vbmUnO1xuICAgICAgY29uc3QgY3VycmVudEhvc3RzID0gaW5mby5wZXJtaXNzaW9uSG9va3MuY3VycmVudEhvc3RzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBpbmZvLnBlcm1pc3Npb25Ib29rcy5jdXJyZW50SG9zdHMuam9pbignLCAnKVxuICAgICAgICA6ICdOb25lJztcbiAgICAgIGNvbnN0IG5lZWRzUmVwYWlySG9zdHMgPSBpbmZvLnBlcm1pc3Npb25Ib29rcy5uZWVkc1JlcGFpckhvc3RzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBpbmZvLnBlcm1pc3Npb25Ib29rcy5uZWVkc1JlcGFpckhvc3RzLmpvaW4oJywgJylcbiAgICAgICAgOiAnTm9uZSc7XG4gICAgICBjb25zdCBsYXN0U3RhcnR1cFJlcGFpciA9IGluZm8ucGVybWlzc2lvbkhvb2tzLmxhc3RTdGFydHVwUmVwYWlyO1xuICAgICAgY29uc3Qgc3RhcnR1cFJlcGFpcklzc3VlcyA9IGxhc3RTdGFydHVwUmVwYWlyXG4gICAgICAgID8gbGFzdFN0YXJ0dXBSZXBhaXIuaG9zdFJlc3VsdHNcbiAgICAgICAgICAuZmlsdGVyKChyZXN1bHQpID0+IHJlc3VsdC5vdXRjb21lID09PSAnbmVlZHNfcmVwYWlyJyB8fCByZXN1bHQub3V0Y29tZSA9PT0gJ2Vycm9yJylcbiAgICAgICAgICAubWFwKChyZXN1bHQpID0+IHJlc3VsdC5yZXBhaXJFcnJvciA/IGAke3Jlc3VsdC5ob3N0fSAoJHtyZXN1bHQucmVwYWlyRXJyb3J9KWAgOiByZXN1bHQuaG9zdClcbiAgICAgICAgICAuam9pbignOyAnKVxuICAgICAgICA6ICcnO1xuXG4gICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAnJyxcbiAgICAgICAgJyMjIPCflJAgUGVybWlzc2lvbiBIb29rcycsXG4gICAgICAgIGAtICoqSGVhbHRoKio6ICR7aW5mby5wZXJtaXNzaW9uSG9va3MuaGVhbHRoLnN0YXR1cy50b1VwcGVyQ2FzZSgpfSDigJQgJHtpbmZvLnBlcm1pc3Npb25Ib29rcy5oZWFsdGgubWVzc2FnZX1gLFxuICAgICAgICBgLSAqKkluc3RhbGxlZCBIb3N0cyoqOiAke2luc3RhbGxlZEhvc3RzfWAsXG4gICAgICAgIGAtICoqQ3VycmVudCBBc3NldHMqKjogJHtjdXJyZW50SG9zdHN9YCxcbiAgICAgICAgYC0gKipOZWVkcyBSZXBhaXIqKjogJHtuZWVkc1JlcGFpckhvc3RzfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAoaW5mby5wZXJtaXNzaW9uSG9va3MuZGlhZ25vc3RpY3NQYXRoKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEaWFnbm9zdGljcyBMb2cqKjogJHtpbmZvLnBlcm1pc3Npb25Ib29rcy5kaWFnbm9zdGljc1BhdGh9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0U3RhcnR1cFJlcGFpcikge1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgIGAtICoqTGFzdCBTdGFydHVwIEF1ZGl0Kio6ICR7bGFzdFN0YXJ0dXBSZXBhaXIuY29tcGxldGVkQXR9ICgke2xhc3RTdGFydHVwUmVwYWlyLmR1cmF0aW9uTXN9bXMpYCxcbiAgICAgICAgICBgLSAqKlN0YXJ0dXAgUmVwYWlycyBBcHBsaWVkKio6ICR7bGFzdFN0YXJ0dXBSZXBhaXIucmVwYWlyZWRDb3VudH1gLFxuICAgICAgICAgIGAtICoqU3RhcnR1cCBSZXBhaXIgSXNzdWVzKio6ICR7c3RhcnR1cFJlcGFpcklzc3VlcyB8fCAnTm9uZSd9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZm8ucGVybWlzc2lvbkhvb2tzLmxhc3REaWFnbm9zdGljKSB7XG4gICAgICAgIGNvbnN0IGxhc3REaWFnbm9zdGljID0gaW5mby5wZXJtaXNzaW9uSG9va3MubGFzdERpYWdub3N0aWM7XG4gICAgICAgIGNvbnN0IGRpYWdub3N0aWNPdXRjb21lID0gbGFzdERpYWdub3N0aWMub3V0Y29tZVxuICAgICAgICAgID8gYCR7bGFzdERpYWdub3N0aWMuZXZlbnR9IC8gJHtsYXN0RGlhZ25vc3RpYy5vdXRjb21lfWBcbiAgICAgICAgICA6IGxhc3REaWFnbm9zdGljLmV2ZW50O1xuICAgICAgICBsaW5lcy5wdXNoKFxuICAgICAgICAgIGAtICoqTGFzdCBEaWFnbm9zdGljIEV2ZW50Kio6ICR7bGFzdERpYWdub3N0aWMudGltZXN0YW1wfSAoJHtkaWFnbm9zdGljT3V0Y29tZX0pYCxcbiAgICAgICAgICBgLSAqKkxhc3QgRGlhZ25vc3RpYyBTdGFnZSoqOiAke2xhc3REaWFnbm9zdGljLnN0YWdlfWAsXG4gICAgICAgICAgYC0gKipMYXN0IERpYWdub3N0aWMgSW5wdXQgQnl0ZXMqKjogJHtsYXN0RGlhZ25vc3RpYy5yYXdJbnB1dExlbmd0aCA/PyAwfWAsXG4gICAgICAgICAgYC0gKipMYXN0IERpYWdub3N0aWMgTm9ybWFsaXplZCBCeXRlcyoqOiAke2xhc3REaWFnbm9zdGljLm5vcm1hbGl6ZWRSZXNwb25zZUxlbmd0aCA/PyAwfWAsXG4gICAgICAgICAgYC0gKipMYXN0IERpYWdub3N0aWMgRW1pdHRlZCBCeXRlcyoqOiAke2xhc3REaWFnbm9zdGljLmVtaXR0ZWRSZXNwb25zZUxlbmd0aCA/PyAwfWAsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsYXN0RGlhZ25vc3RpYy5yZWFzb24pIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKGAtICoqTGFzdCBEaWFnbm9zdGljIFJlYXNvbioqOiAke2xhc3REaWFnbm9zdGljLnJlYXNvbn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElzc3VlICM3MDY6IFN0YXJ0dXAgdGltaW5nXG4gICAgaWYgKGluZm8uc3RhcnR1cCkge1xuICAgICAgbGluZXMucHVzaCgnJyk7XG4gICAgICBsaW5lcy5wdXNoKCcjIyDij7HvuI8gU3RhcnR1cCcpO1xuICAgICAgbGluZXMucHVzaChgLSAqKlN0YXR1cyoqOiAke2luZm8uc3RhcnR1cC5zdGF0dXMgPT09ICdyZWFkeScgPyAn4pyFIFJlYWR5JyA6ICfij7MgSW5pdGlhbGl6aW5nJ31gKTtcbiAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBTZXR1cCoqOiAke2luZm8uc3RhcnR1cC5kZWZlcnJlZFNldHVwQ29tcGxldGUgPyAnQ29tcGxldGUnIDogJ0luIFByb2dyZXNzJ31gKTtcbiAgICAgIGlmIChpbmZvLnN0YXJ0dXAuc3RhcnR1cFRpbWluZ01zKSB7XG4gICAgICAgIGNvbnN0IHRpbWluZyA9IGluZm8uc3RhcnR1cC5zdGFydHVwVGltaW5nTXM7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipDcml0aWNhbCBQYXRoKio6ICR7dGltaW5nLmNyaXRpY2FsUGF0aE1zfW1zYCk7XG4gICAgICAgIGxpbmVzLnB1c2goYC0gKipEZWZlcnJlZCBXb3JrKio6ICR7dGltaW5nLmRlZmVycmVkTXN9bXNgKTtcbiAgICAgICAgbGluZXMucHVzaChgLSAqKlRvdGFsIFN0YXJ0dXAqKjogJHt0aW1pbmcudG90YWxNc31tc2ApO1xuICAgICAgICBpZiAodGltaW5nLmNvbm5lY3RBdE1zICE9PSBudWxsKSB7XG4gICAgICAgICAgbGluZXMucHVzaChgLSAqKlRpbWUgdG8gQ29ubmVjdCoqOiAke3RpbWluZy5jb25uZWN0QXRNc31tc2ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1pbmcucGhhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKCctICoqUGhhc2VzKio6Jyk7XG4gICAgICAgICAgZm9yIChjb25zdCBwaGFzZSBvZiB0aW1pbmcucGhhc2VzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBwaGFzZS5jcml0aWNhbCA/ICdjcml0aWNhbCcgOiAnZGVmZXJyZWQnO1xuICAgICAgICAgICAgbGluZXMucHVzaChgICAtICR7cGhhc2UubmFtZX06ICR7cGhhc2UuZHVyYXRpb25Nc31tcyAoJHt0YWd9KWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTRUNVUklUWSBOT1RFOiBObyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkIC0gZXhlY3V0ZXMgc3lzdGVtIGdpdCBjb21tYW5kc1xuICAgKiBEYXRhIHNvdXJjZTogR2l0IENMSSBvdXRwdXQgKHN5c3RlbS1jb250cm9sbGVkKSwgbm8gdXNlciBpbnB1dFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBnZXRHaXRJbmZvKCk6IFByb21pc2U8eyBjb21taXQ/OiBzdHJpbmc7IGJyYW5jaD86IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNFQ1VSSVRZIE5PVEU6IEdpdCBjb21tYW5kcyByZXR1cm4gc3lzdGVtLWNvbnRyb2xsZWQgZGF0YSAtIG5vdCB1c2VyIGlucHV0XG4gICAgICAvLyBHaXQgY29tbWl0IGhhc2hlcyBhbmQgYnJhbmNoIG5hbWVzIGFyZSBjb250cm9sbGVkIGJ5IGdpdCwgbm8gVW5pY29kZSBub3JtYWxpemF0aW9uIG5lZWRlZFxuICAgICAgY29uc3QgY29tbWl0ID0gY2hpbGRfcHJvY2Vzcy5leGVjU3luYygnZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIGNvbnN0IGJyYW5jaCA9IGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoJ2dpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQUQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRyaW0oKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgY29tbWl0LCBicmFuY2ggfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBhIGdpdCByZXBvc2l0b3J5IG9yIGdpdCBub3QgYXZhaWxhYmxlXG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNFQ1VSSVRZIE5PVEU6IE5vIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBuZWVkZWQgLSByZWFkcyBjb250YWluZXIgcnVudGltZSBmaWxlc1xuICAgKiBEYXRhIHNvdXJjZTogU3lzdGVtIGNncm91cCBmaWxlcyAoY29udGFpbmVyLWNvbnRyb2xsZWQpLCBubyB1c2VyIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERvY2tlckluZm8oKTogUHJvbWlzZTx7IGlzRG9ja2VyOiBib29sZWFuOyBpbmZvPzogc3RyaW5nIH0+IHtcbiAgICB0cnkge1xuICAgICAgLy8gU0VDVVJJVFkgTk9URTogUmVhZGluZyBzeXN0ZW0gY2dyb3VwIGZpbGUgLSBjb250cm9sbGVkIGJ5IGNvbnRhaW5lciBydW50aW1lLCBub3QgdXNlciBpbnB1dFxuICAgICAgLy8gQ29udGFpbmVyIHJ1bnRpbWUgZ2VuZXJhdGVzIHRoaXMgZmlsZSBjb250ZW50LCBubyBVbmljb2RlIG5vcm1hbGl6YXRpb24gbmVlZGVkXG4gICAgICBjb25zdCBjZ3JvdXBDb250ZW50ID0gYXdhaXQgdGhpcy5maWxlT3BlcmF0aW9ucy5yZWFkRmlsZSgnL3Byb2MvMS9jZ3JvdXAnLCB7XG4gICAgICAgIHNvdXJjZTogJ0J1aWxkSW5mb1NlcnZpY2UuZ2V0RG9ja2VySW5mbydcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXNEb2NrZXIgPSBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdkb2NrZXInKSB8fCBjZ3JvdXBDb250ZW50LmluY2x1ZGVzKCdjb250YWluZXJkJyk7XG4gICAgICBcbiAgICAgIGlmIChpc0RvY2tlcikge1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IGNvbnRhaW5lciBJRFxuICAgICAgICBjb25zdCBjb250YWluZXJJZCA9IGNncm91cENvbnRlbnRcbiAgICAgICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgLmZpbmQobGluZSA9PiBsaW5lLmluY2x1ZGVzKCdkb2NrZXInKSlcbiAgICAgICAgICA/LnNwbGl0KCcvJylcbiAgICAgICAgICAucG9wKClcbiAgICAgICAgICA/LnN1YnN0cmluZygwLCAxMik7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzRG9ja2VyOiB0cnVlLFxuICAgICAgICAgIGluZm86IGNvbnRhaW5lcklkID8gYENvbnRhaW5lciBJRDogJHtjb250YWluZXJJZH1gIDogJ1J1bm5pbmcgaW4gRG9ja2VyJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4geyBpc0RvY2tlcjogZmFsc2UgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE5vdCBpbiBEb2NrZXIgb3IgL3Byb2Mgbm90IGF2YWlsYWJsZVxuICAgICAgcmV0dXJuIHsgaXNEb2NrZXI6IGZhbHNlIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRVcHRpbWUoc2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXlzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gODY0MDApO1xuICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDg2NDAwKSAvIDM2MDApO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKChzZWNvbmRzICUgMzYwMCkgLyA2MCk7XG4gICAgY29uc3Qgc2VjcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAlIDYwKTtcbiAgICBcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoZGF5cyA+IDApIHBhcnRzLnB1c2goYCR7ZGF5c31kYCk7XG4gICAgaWYgKGhvdXJzID4gMCkgcGFydHMucHVzaChgJHtob3Vyc31oYCk7XG4gICAgaWYgKG1pbnV0ZXMgPiAwKSBwYXJ0cy5wdXNoKGAke21pbnV0ZXN9bWApO1xuICAgIGlmIChzZWNzID4gMCB8fCBwYXJ0cy5sZW5ndGggPT09IDApIHBhcnRzLnB1c2goYCR7c2Vjc31zYCk7XG4gICAgXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TWVtb3J5KGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1iID0gYnl0ZXMgLyAxMDI0IC8gMTAyNDtcbiAgICByZXR1cm4gYCR7bWIudG9GaXhlZCgxKX0gTUJgO1xuICB9XG59XG4iXX0=
|
|
@@ -20,6 +20,38 @@ export interface PermissionHookStatus {
|
|
|
20
20
|
settingsPath?: string;
|
|
21
21
|
additionalPaths?: string[];
|
|
22
22
|
}
|
|
23
|
+
/** Latest JSONL diagnostic event emitted by a local permission hook wrapper. */
|
|
24
|
+
export interface PermissionHookDiagnosticRecord {
|
|
25
|
+
timestamp: string;
|
|
26
|
+
invocationId: string;
|
|
27
|
+
event: string;
|
|
28
|
+
platform: string;
|
|
29
|
+
stage: string;
|
|
30
|
+
outcome?: string;
|
|
31
|
+
reason?: string;
|
|
32
|
+
hookPath?: string;
|
|
33
|
+
diagnosticsLogPath?: string;
|
|
34
|
+
sessionId?: string;
|
|
35
|
+
toolName?: string;
|
|
36
|
+
toolInput?: string;
|
|
37
|
+
rawInput?: string;
|
|
38
|
+
authorityHost?: string;
|
|
39
|
+
authorityMode?: string;
|
|
40
|
+
endpoint?: string;
|
|
41
|
+
port?: string;
|
|
42
|
+
payload?: string;
|
|
43
|
+
response?: string;
|
|
44
|
+
normalizedResponse?: string;
|
|
45
|
+
emittedResponse?: string;
|
|
46
|
+
attempt?: string;
|
|
47
|
+
maxRetries?: string;
|
|
48
|
+
timeoutSeconds?: string;
|
|
49
|
+
curlExit?: string;
|
|
50
|
+
rawInputLength?: number;
|
|
51
|
+
normalizedResponseLength?: number;
|
|
52
|
+
emittedResponseLength?: number;
|
|
53
|
+
responseLength?: number;
|
|
54
|
+
}
|
|
23
55
|
export interface InstallPermissionHookResult {
|
|
24
56
|
supported: boolean;
|
|
25
57
|
installed: boolean;
|
|
@@ -43,13 +75,17 @@ export interface ReconcilePermissionHookOptions {
|
|
|
43
75
|
sourceScriptPath?: string;
|
|
44
76
|
autoRepair?: boolean;
|
|
45
77
|
}
|
|
78
|
+
/** Aggregate health and repair state for all managed local hook hosts. */
|
|
46
79
|
export interface PermissionHookAuditSummary {
|
|
47
80
|
installedHosts: string[];
|
|
48
81
|
currentHosts: string[];
|
|
49
82
|
repairedHosts: string[];
|
|
50
83
|
needsRepairHosts: string[];
|
|
84
|
+
diagnosticsPath: string;
|
|
85
|
+
lastDiagnostic: PermissionHookDiagnosticRecord | null;
|
|
51
86
|
lastStartupRepair: PermissionHookStartupRepairSummary | null;
|
|
52
87
|
}
|
|
88
|
+
/** Condensed health view surfaced in setup, permissions, and build info. */
|
|
53
89
|
export interface PermissionHookHealthSummary {
|
|
54
90
|
status: 'ok' | 'warning' | 'error';
|
|
55
91
|
message: string;
|
|
@@ -61,6 +97,7 @@ export interface PermissionHookStartupRepairHostResult extends PermissionHookSta
|
|
|
61
97
|
host: string;
|
|
62
98
|
outcome: 'current' | 'repaired' | 'needs_repair' | 'not_installed' | 'error';
|
|
63
99
|
}
|
|
100
|
+
/** Result summary for the most recent startup-time hook asset repair pass. */
|
|
64
101
|
export interface PermissionHookStartupRepairSummary {
|
|
65
102
|
startedAt: string;
|
|
66
103
|
completedAt: string;
|
|
@@ -91,6 +128,7 @@ export declare const AUTO_REPAIRABLE_HOOK_HOSTS: readonly ["claude-code", ...("c
|
|
|
91
128
|
export declare function isMissingFileError(error: unknown): boolean;
|
|
92
129
|
export declare function detectIndent(raw: string): number | string;
|
|
93
130
|
export declare function getPermissionHookScriptPath(homeDir?: string): string;
|
|
131
|
+
export declare function getPermissionHookDiagnosticsPath(homeDir?: string): string;
|
|
94
132
|
export declare function normalizeHookHost(host: string): string;
|
|
95
133
|
export declare function readHostSpecificHookStatus(homeDir: string, host: string): PermissionHookStatus;
|
|
96
134
|
export declare function collectHookMarkerPaths(homeDir: string): Set<string>;
|
|
@@ -101,6 +139,7 @@ export declare function getHookWrapperPath(host: string, homeDir?: string): stri
|
|
|
101
139
|
export declare function getHookSourcePath(host: string): string;
|
|
102
140
|
export declare function supportsManagedHookAssets(host: string): boolean;
|
|
103
141
|
export declare function getPrimaryHookScriptPath(host: string, homeDir?: string): string;
|
|
142
|
+
export declare function readLastPermissionHookDiagnostic(homeDir?: string): Promise<PermissionHookDiagnosticRecord | null>;
|
|
104
143
|
export declare function getManagedHookAssets(host: string, homeDir?: string, sourceScriptPath?: string): HookAssetDescriptor[];
|
|
105
144
|
export declare function auditHookAssets(host: string, homeDir?: string, sourceScriptPath?: string): Promise<HookAssetAuditResult>;
|
|
106
145
|
export declare function getPermissionHookMarkerPath(homeDir?: string, host?: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissionHookShared.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHookShared.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"permissionHookShared.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHookShared.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,9 @@ export function getPermissionHookScriptPath(homeDir = homedir()) {
|
|
|
44
44
|
function getPermissionHookRunDir(homeDir = homedir()) {
|
|
45
45
|
return join(homeDir, '.dollhouse', 'run');
|
|
46
46
|
}
|
|
47
|
+
export function getPermissionHookDiagnosticsPath(homeDir = homedir()) {
|
|
48
|
+
return join(getPermissionHookRunDir(homeDir), 'permission-hook-diagnostics.jsonl');
|
|
49
|
+
}
|
|
47
50
|
export function normalizeHookHost(host) {
|
|
48
51
|
return UnicodeValidator.normalize(host).normalizedContent.trim().toLowerCase();
|
|
49
52
|
}
|
|
@@ -122,6 +125,40 @@ export function supportsManagedHookAssets(host) {
|
|
|
122
125
|
export function getPrimaryHookScriptPath(host, homeDir = homedir()) {
|
|
123
126
|
return getHookWrapperPath(host, homeDir) ?? getPermissionHookScriptPath(homeDir);
|
|
124
127
|
}
|
|
128
|
+
export async function readLastPermissionHookDiagnostic(homeDir = homedir()) {
|
|
129
|
+
const diagnosticsPath = getPermissionHookDiagnosticsPath(homeDir);
|
|
130
|
+
try {
|
|
131
|
+
const raw = await readFile(diagnosticsPath, 'utf-8');
|
|
132
|
+
const lines = raw
|
|
133
|
+
.split('\n')
|
|
134
|
+
.map((line) => line.trim())
|
|
135
|
+
.filter((line) => line.length > 0);
|
|
136
|
+
const lastLine = lines.at(-1);
|
|
137
|
+
if (!lastLine) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
let parsed;
|
|
141
|
+
try {
|
|
142
|
+
parsed = JSON.parse(lastLine);
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
logger.warn(`[PermissionHooks] Failed to parse hook diagnostics JSON from ${diagnosticsPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
149
|
+
logger.warn(`[PermissionHooks] Ignoring malformed hook diagnostics entry from ${diagnosticsPath}: expected JSON object.`);
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
return parsed;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (isMissingFileError(error)) {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
logger.warn(`[PermissionHooks] Failed to read hook diagnostics from ${diagnosticsPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
125
162
|
export function getManagedHookAssets(host, homeDir = homedir(), sourceScriptPath) {
|
|
126
163
|
const normalized = normalizeHookHost(host);
|
|
127
164
|
const hooksDir = dirname(getPermissionHookScriptPath(homeDir));
|
|
@@ -385,4 +422,4 @@ export async function installHookAssetsForHost(client, homeDir, sourceScriptPath
|
|
|
385
422
|
await copyHookAsset(wrapperSourcePath, wrapperTargetPath);
|
|
386
423
|
return { scriptPath: wrapperTargetPath };
|
|
387
424
|
}
|
|
388
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tTaGFyZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGVybWlzc2lvbkhvb2tTaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBOEZyQyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRztJQUM1QyxRQUFRLEVBQUUsc0JBQXNCO0lBQ2hDLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsVUFBVSxFQUFFLHdCQUF3QjtJQUNwQyxZQUFZLEVBQUUsc0JBQXNCO0lBQ3BDLE9BQU8sRUFBRSxxQkFBcUI7Q0FDdEIsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQXVELENBQUM7QUFFcEksTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxrQkFBa0IsQ0FBVSxDQUFDO0FBRTFGLFNBQVMsa0JBQWtCO0lBQ3pCLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMs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QixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjaG1vZCwgY29weUZpbGUsIG1rZGlyLCByZWFkRmlsZSwgcmVhZGRpciwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBob21lZGlyLCBwbGF0Zm9ybSB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tNYXJrZXIge1xuICBob3N0OiBzdHJpbmc7XG4gIHNjcmlwdFBhdGg6IHN0cmluZztcbiAgc2V0dGluZ3NQYXRoPzogc3RyaW5nO1xuICBhZGRpdGlvbmFsUGF0aHM/OiBzdHJpbmdbXTtcbiAgY29uZmlndXJlZD86IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgaW5zdGFsbGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGluc3RhbGxlZDogYm9vbGVhbjtcbiAgY29uZmlndXJlZD86IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgYXNzZXRzQ3VycmVudD86IGJvb2xlYW47XG4gIGF1dG9SZXBhaXJlZD86IGJvb2xlYW47XG4gIG5lZWRzUmVwYWlyPzogYm9vbGVhbjtcbiAgcmVwYWlyRXJyb3I/OiBzdHJpbmc7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIHNjcmlwdFBhdGg/OiBzdHJpbmc7XG4gIHNldHRpbmdzUGF0aD86IHN0cmluZztcbiAgYWRkaXRpb25hbFBhdGhzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbFBlcm1pc3Npb25Ib29rUmVzdWx0IHtcbiAgc3VwcG9ydGVkOiBib29sZWFuO1xuICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIGNvbmZpZ3VyZWQ6IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgaG9zdDogc3RyaW5nO1xuICBzY3JpcHRQYXRoPzogc3RyaW5nO1xuICBzZXR0aW5nc1BhdGg/OiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxQYXRocz86IHN0cmluZ1tdO1xuICBtYXJrZXJQYXRoPzogc3RyaW5nO1xuICBiYWNrdXBQYXRoPzogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbFBlcm1pc3Npb25Ib29rT3B0aW9ucyB7XG4gIGhvbWVEaXI/OiBzdHJpbmc7XG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmc7XG4gIG5vdz86IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zIHtcbiAgaG9tZURpcj86IHN0cmluZztcbiAgc291cmNlU2NyaXB0UGF0aD86IHN0cmluZztcbiAgYXV0b1JlcGFpcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkge1xuICBpbnN0YWxsZWRIb3N0czogc3RyaW5nW107XG4gIGN1cnJlbnRIb3N0czogc3RyaW5nW107XG4gIHJlcGFpcmVkSG9zdHM6IHN0cmluZ1tdO1xuICBuZWVkc1JlcGFpckhvc3RzOiBzdHJpbmdbXTtcbiAgbGFzdFN0YXJ0dXBSZXBhaXI6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSB7XG4gIHN0YXR1czogJ29rJyB8ICd3YXJuaW5nJyB8ICdlcnJvcic7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcmVwYWlyZWRDb3VudDogbnVtYmVyO1xuICBuZWVkc1JlcGFpckNvdW50OiBudW1iZXI7XG4gIGxhc3RDaGVja2VkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCBleHRlbmRzIFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgaG9zdDogc3RyaW5nO1xuICBvdXRjb21lOiAnY3VycmVudCcgfCAncmVwYWlyZWQnIHwgJ25lZWRzX3JlcGFpcicgfCAnbm90X2luc3RhbGxlZCcgfCAnZXJyb3InO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkge1xuICBzdGFydGVkQXQ6IHN0cmluZztcbiAgY29tcGxldGVkQXQ6IHN0cmluZztcbiAgZHVyYXRpb25NczogbnVtYmVyO1xuICByZXBhaXJlZENvdW50OiBudW1iZXI7XG4gIG5lZWRzUmVwYWlyQ291bnQ6IG51bWJlcjtcbiAgaG9zdFJlc3VsdHM6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpckhvc3RSZXN1bHRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb29rQXNzZXREZXNjcmlwdG9yIHtcbiAga2luZDogJ2JyaWRnZScgfCAncG9ydC1oZWxwZXInIHwgJ2NvbmZpZy1oZWxwZXInIHwgJ3dyYXBwZXInO1xuICBzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIHRhcmdldFBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb29rQXNzZXRBdWRpdFJlc3VsdCB7XG4gIGFzc2V0c1ByZXBhcmVkOiBib29sZWFuO1xuICBhc3NldHNDdXJyZW50OiBib29sZWFuO1xuICBzdGFsZUFzc2V0czogSG9va0Fzc2V0RGVzY3JpcHRvcltdO1xufVxuXG5leHBvcnQgY29uc3QgTUFOQUdFRF9IT09LX1dSQVBQRVJfQkFTRU5BTUVTID0ge1xuICAndnNjb2RlJzogJ3ByZXRvb2x1c2UtdnNjb2RlLnNoJyxcbiAgJ2N1cnNvcic6ICdwcmV0b29sdXNlLWN1cnNvci5zaCcsXG4gICd3aW5kc3VyZic6ICdwcmV0b29sdXNlLXdpbmRzdXJmLnNoJyxcbiAgJ2dlbWluaS1jbGknOiAncHJldG9vbHVzZS1nZW1pbmkuc2gnLFxuICAnY29kZXgnOiAncHJldG9vbHVzZS1jb2RleC5zaCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgV1JBUFBFUl9IT09LX0hPU1RTID0gT2JqZWN0LmtleXMoTUFOQUdFRF9IT09LX1dSQVBQRVJfQkFTRU5BTUVTKSBhcyBBcnJheTxrZXlvZiB0eXBlb2YgTUFOQUdFRF9IT09LX1dSQVBQRVJfQkFTRU5BTUVTPjtcblxuZXhwb3J0IGNvbnN0IEFVVE9fUkVQQUlSQUJMRV9IT09LX0hPU1RTID0gWydjbGF1ZGUtY29kZScsIC4uLldSQVBQRVJfSE9PS19IT1NUU10gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIHJlcG9Sb290RnJvbU1vZHVsZSgpOiBzdHJpbmcge1xuICBjb25zdCBjdXJyZW50RmlsZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbiAgcmV0dXJuIGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKGN1cnJlbnRGaWxlKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGVycm9yXG4gICAgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0J1xuICAgICYmICdjb2RlJyBpbiBlcnJvclxuICAgICYmIChlcnJvciBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSA9PT0gJ0VOT0VOVCcsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RJbmRlbnQocmF3OiBzdHJpbmcpOiBudW1iZXIgfCBzdHJpbmcge1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3LnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCB8fCBsaW5lLnN0YXJ0c1dpdGgoJ3snKSB8fCBsaW5lLnN0YXJ0c1dpdGgoJ30nKSkgY29udGludWU7XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnXFx0JykpIHJldHVybiAnXFx0JztcbiAgICBpZiAobGluZS5zdGFydHNXaXRoKCcgJykpIHtcbiAgICAgIGNvbnN0IHNwYWNlcyA9IGxpbmUubGVuZ3RoIC0gbGluZS50cmltU3RhcnQoKS5sZW5ndGg7XG4gICAgICBpZiAoc3BhY2VzID49IDIpIHJldHVybiBzcGFjZXM7XG4gICAgfVxuICB9XG4gIHJldHVybiAyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmRvbGxob3VzZScsICdob29rcycsICdwcmV0b29sdXNlLWRvbGxob3VzZS5zaCcpO1xufVxuXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZURpciwgJy5kb2xsaG91c2UnLCAncnVuJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIb29rSG9zdChob3N0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoaG9zdCkubm9ybWFsaXplZENvbnRlbnQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGlzSG9va01hcmtlckZpbGVuYW1lKGVudHJ5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVudHJ5LnN0YXJ0c1dpdGgoJ2hvb2staW5zdGFsbGVkLScpICYmIGVudHJ5LmVuZHNXaXRoKCcuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEhvc3RTcGVjaWZpY0hvb2tTdGF0dXMoaG9tZURpcjogc3RyaW5nLCBob3N0OiBzdHJpbmcpOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIb29rSG9zdChob3N0KTtcbiAgY29uc3Qgc3RhdHVzID0gcmVhZE1hcmtlclN0YXR1cyhnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgoaG9tZURpciwgbm9ybWFsaXplZCkpO1xuICBpZiAoc3RhdHVzLmluc3RhbGxlZCB8fCBzdGF0dXMuYXNzZXRzUHJlcGFyZWQpIHtcbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG4gIGlmIChub3JtYWxpemVkID09PSAnY2xhdWRlLWNvZGUnKSB7XG4gICAgcmV0dXJuIHJlYWRNYXJrZXJTdGF0dXMoZ2V0UGVybWlzc2lvbkhvb2tNYXJrZXJQYXRoKGhvbWVEaXIpKTtcbiAgfVxuICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0SG9va01hcmtlclBhdGhzKGhvbWVEaXI6IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgbWFya2VyUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oW2dldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aChob21lRGlyKV0pO1xuICBjb25zdCBydW5EaXIgPSBnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyKTtcbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRkaXJTeW5jKHJ1bkRpcikpIHtcbiAgICAgIGlmIChpc0hvb2tNYXJrZXJGaWxlbmFtZShlbnRyeSkpIHtcbiAgICAgICAgbWFya2VyUGF0aHMuYWRkKGpvaW4ocnVuRGlyLCBlbnRyeSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTm8gcnVuIGRpciB5ZXQg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGZhbHNlLlxuICB9XG4gIHJldHVybiBtYXJrZXJQYXRocztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RIb29rTWFya2VyUGF0aHNBc3luYyhob21lRGlyOiBzdHJpbmcpOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gIGNvbnN0IG1hcmtlclBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgoaG9tZURpcildKTtcbiAgY29uc3QgcnVuRGlyID0gZ2V0UGVybWlzc2lvbkhvb2tSdW5EaXIoaG9tZURpcik7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBhd2FpdCByZWFkZGlyKHJ1bkRpcikpIHtcbiAgICAgIGlmIChpc0hvb2tNYXJrZXJGaWxlbmFtZShlbnRyeSkpIHtcbiAgICAgICAgbWFya2VyUGF0aHMuYWRkKGpvaW4ocnVuRGlyLCBlbnRyeSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTm8gcnVuIGRpciB5ZXQg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGZhbHNlLlxuICB9XG4gIHJldHVybiBtYXJrZXJQYXRocztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZU1hcmtlclN0YXR1c2VzKG1hcmtlclBhdGhzOiBJdGVyYWJsZTxzdHJpbmc+KTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICBsZXQgZmFsbGJhY2s6IFBlcm1pc3Npb25Ib29rU3RhdHVzID0geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gIGZvciAoY29uc3QgbWFya2VyUGF0aCBvZiBtYXJrZXJQYXRocykge1xuICAgIGNvbnN0IHN0YXR1cyA9IHJlYWRNYXJrZXJTdGF0dXMobWFya2VyUGF0aCk7XG4gICAgaWYgKHN0YXR1cy5pbnN0YWxsZWQpIHJldHVybiBzdGF0dXM7XG4gICAgaWYgKCFmYWxsYmFjay5hc3NldHNQcmVwYXJlZCAmJiBzdGF0dXMuYXNzZXRzUHJlcGFyZWQpIGZhbGxiYWNrID0gc3RhdHVzO1xuICB9XG4gIHJldHVybiBmYWxsYmFjaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tXcmFwcGVyQmFzZW5hbWUoaG9zdDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRIb3N0ID0gbm9ybWFsaXplSG9va0hvc3QoaG9zdCk7XG4gIHJldHVybiBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVNbbm9ybWFsaXplZEhvc3QgYXMga2V5b2YgdHlwZW9mIE1BTkFHRURfSE9PS19XUkFQUEVSX0JBU0VOQU1FU10gPz8gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tXcmFwcGVyUGF0aChob3N0OiBzdHJpbmcsIGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBnZXRIb29rV3JhcHBlckJhc2VuYW1lKGhvc3QpO1xuICByZXR1cm4gYmFzZW5hbWUgPyBqb2luKGhvbWVEaXIsICcuZG9sbGhvdXNlJywgJ2hvb2tzJywgYmFzZW5hbWUpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tTb3VyY2VQYXRoKGhvc3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJvb3QgPSByZXBvUm9vdEZyb21Nb2R1bGUoKTtcbiAgY29uc3QgYmFzZW5hbWUgPSBnZXRIb29rV3JhcHBlckJhc2VuYW1lKGhvc3QpO1xuICByZXR1cm4gYmFzZW5hbWUgPyBqb2luKHJvb3QsICdzY3JpcHRzJywgYmFzZW5hbWUpIDogam9pbihyb290LCAnc2NyaXB0cycsICdwcmV0b29sdXNlLWRvbGxob3VzZS5zaCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNNYW5hZ2VkSG9va0Fzc2V0cyhob3N0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUhvb2tIb3N0KGhvc3QpO1xuICByZXR1cm4gbm9ybWFsaXplZCA9PT0gJ2NsYXVkZS1jb2RlJyB8fCBnZXRIb29rV3JhcHBlckJhc2VuYW1lKG5vcm1hbGl6ZWQpICE9PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJpbWFyeUhvb2tTY3JpcHRQYXRoKGhvc3Q6IHN0cmluZywgaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRIb29rV3JhcHBlclBhdGgoaG9zdCwgaG9tZURpcikgPz8gZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFuYWdlZEhvb2tBc3NldHMoXG4gIGhvc3Q6IHN0cmluZyxcbiAgaG9tZURpciA9IGhvbWVkaXIoKSxcbiAgc291cmNlU2NyaXB0UGF0aD86IHN0cmluZyxcbik6IEhvb2tBc3NldERlc2NyaXB0b3JbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIb29rSG9zdChob3N0KTtcbiAgY29uc3QgaG9va3NEaXIgPSBkaXJuYW1lKGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aChob21lRGlyKSk7XG4gIGNvbnN0IGFzc2V0czogSG9va0Fzc2V0RGVzY3JpcHRvcltdID0gW1xuICAgIHtcbiAgICAgIGtpbmQ6ICdicmlkZ2UnLFxuICAgICAgc291cmNlUGF0aDogc291cmNlU2NyaXB0UGF0aCA/PyBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwcmV0b29sdXNlLWRvbGxob3VzZS5zaCcpLFxuICAgICAgdGFyZ2V0UGF0aDogZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIpLFxuICAgIH0sXG4gICAge1xuICAgICAga2luZDogJ3BvcnQtaGVscGVyJyxcbiAgICAgIHNvdXJjZVBhdGg6IGpvaW4ocmVwb1Jvb3RGcm9tTW9kdWxlKCksICdzY3JpcHRzJywgJ3Blcm1pc3Npb24tcG9ydC1kaXNjb3Zlcnkuc2gnKSxcbiAgICAgIHRhcmdldFBhdGg6IGpvaW4oaG9va3NEaXIsICdwZXJtaXNzaW9uLXBvcnQtZGlzY292ZXJ5LnNoJyksXG4gICAgfSxcbiAgICB7XG4gICAgICBraW5kOiAnY29uZmlnLWhlbHBlcicsXG4gICAgICBzb3VyY2VQYXRoOiBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwZXJtaXNzaW9uLWhvb2stY29uZmlnLnNoJyksXG4gICAgICB0YXJnZXRQYXRoOiBqb2luKGhvb2tzRGlyLCAncGVybWlzc2lvbi1ob29rLWNvbmZpZy5zaCcpLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3Qgd3JhcHBlclRhcmdldFBhdGggPSBnZXRIb29rV3JhcHBlclBhdGgobm9ybWFsaXplZCwgaG9tZURpcik7XG4gIGlmICh3cmFwcGVyVGFyZ2V0UGF0aCkge1xuICAgIGFzc2V0cy5wdXNoKHtcbiAgICAgIGtpbmQ6ICd3cmFwcGVyJyxcbiAgICAgIHNvdXJjZVBhdGg6IGdldEhvb2tTb3VyY2VQYXRoKG5vcm1hbGl6ZWQpLFxuICAgICAgdGFyZ2V0UGF0aDogd3JhcHBlclRhcmdldFBhdGgsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYXNzZXRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkT3B0aW9uYWxVdGY4RmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc01pc3NpbmdGaWxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXVkaXRIb29rQXNzZXRzKFxuICBob3N0OiBzdHJpbmcsXG4gIGhvbWVEaXIgPSBob21lZGlyKCksXG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmcsXG4pOiBQcm9taXNlPEhvb2tBc3NldEF1ZGl0UmVzdWx0PiB7XG4gIGNvbnN0IGFzc2V0cyA9IGdldE1hbmFnZWRIb29rQXNzZXRzKGhvc3QsIGhvbWVEaXIsIHNvdXJjZVNjcmlwdFBhdGgpO1xuICBjb25zdCBzdGFsZUFzc2V0czogSG9va0Fzc2V0RGVzY3JpcHRvcltdID0gW107XG4gIGxldCBhc3NldHNQcmVwYXJlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBhc3NldCBvZiBhc3NldHMpIHtcbiAgICBjb25zdCBzb3VyY2VSYXcgPSBhd2FpdCByZWFkRmlsZShhc3NldC5zb3VyY2VQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCB0YXJnZXRSYXcgPSBhd2FpdCByZWFkT3B0aW9uYWxVdGY4RmlsZShhc3NldC50YXJnZXRQYXRoKTtcbiAgICBpZiAodGFyZ2V0UmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2V0c1ByZXBhcmVkID0gZmFsc2U7XG4gICAgICBzdGFsZUFzc2V0cy5wdXNoKGFzc2V0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0UmF3ICE9PSBzb3VyY2VSYXcpIHtcbiAgICAgIHN0YWxlQXNzZXRzLnB1c2goYXNzZXQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNzZXRzUHJlcGFyZWQsXG4gICAgYXNzZXRzQ3VycmVudDogc3RhbGVBc3NldHMubGVuZ3RoID09PSAwLFxuICAgIHN0YWxlQXNzZXRzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGVybWlzc2lvbkhvb2tNYXJrZXJQYXRoKGhvbWVEaXIgPSBob21lZGlyKCksIGhvc3Q/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWhvc3QpIHtcbiAgICByZXR1cm4gam9pbihnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyKSwgJ2hvb2staW5zdGFsbGVkLmpzb24nKTtcbiAgfVxuICByZXR1cm4gam9pbihnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyKSwgYGhvb2staW5zdGFsbGVkLSR7bm9ybWFsaXplSG9va0hvc3QoaG9zdCl9Lmpzb25gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXVkZUhvb2tTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY2xhdWRlJywgJ3NldHRpbmdzLmpzb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZzQ29kZUhvb2tTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY29waWxvdCcsICdob29rcycsICdkb2xsaG91c2UtcGVybWlzc2lvbnMuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VnNDb2RlVXNlclNldHRpbmdzUGF0aChob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgY29uc3QgY3VycmVudFBsYXRmb3JtID0gcGxhdGZvcm0oKTtcbiAgaWYgKGN1cnJlbnRQbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gam9pbihob21lRGlyLCAnTGlicmFyeScsICdBcHBsaWNhdGlvbiBTdXBwb3J0JywgJ0NvZGUnLCAnVXNlcicsICdzZXR0aW5ncy5qc29uJyk7XG4gIH1cbiAgaWYgKGN1cnJlbnRQbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IGFwcERhdGEgPSBwcm9jZXNzLmVudi5BUFBEQVRBIHx8IGpvaW4oaG9tZURpciwgJ0FwcERhdGEnLCAnUm9hbWluZycpO1xuICAgIHJldHVybiBqb2luKGFwcERhdGEsICdDb2RlJywgJ1VzZXInLCAnc2V0dGluZ3MuanNvbicpO1xuICB9XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY29uZmlnJywgJ0NvZGUnLCAnVXNlcicsICdzZXR0aW5ncy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHZW1pbmlIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmdlbWluaScsICdzZXR0aW5ncy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJzb3JIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmN1cnNvcicsICdob29rcy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaW5kc3VyZkhvb2tTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY29kZWl1bScsICd3aW5kc3VyZicsICdob29rcy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2RleEhvb2tTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY29kZXgnLCAnaG9va3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29kZXhDb25maWdQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvZGV4JywgJ2NvbmZpZy50b21sJyk7XG59XG5cbmZ1bmN0aW9uIHRvUGVybWlzc2lvbkhvb2tTdGF0dXMocmF3OiBQZXJtaXNzaW9uSG9va01hcmtlcik6IFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgaWYgKFxuICAgIHR5cGVvZiByYXcuaG9zdCAhPT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2YgcmF3LnNjcmlwdFBhdGggIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiB7IGluc3RhbGxlZDogZmFsc2UgfTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdFJlYWR5ID0gZXhpc3RzU3luYyhyYXcuc2NyaXB0UGF0aCk7XG4gIGNvbnN0IHNldHRpbmdzUmVhZHkgPSAhcmF3LnNldHRpbmdzUGF0aCB8fCBleGlzdHNTeW5jKHJhdy5zZXR0aW5nc1BhdGgpO1xuICBjb25zdCBhZGRpdGlvbmFsUGF0aHNSZWFkeSA9ICFyYXcuYWRkaXRpb25hbFBhdGhzIHx8IHJhdy5hZGRpdGlvbmFsUGF0aHMuZXZlcnkoKHBhdGgpID0+IGV4aXN0c1N5bmMocGF0aCkpO1xuICBjb25zdCBhc3NldHNQcmVwYXJlZCA9IChyYXcuYXNzZXRzUHJlcGFyZWQgPz8gcmF3LmNvbmZpZ3VyZWQgPz8gdHJ1ZSkgJiYgc2NyaXB0UmVhZHk7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSAocmF3LmNvbmZpZ3VyZWQgPz8gdHJ1ZSkgJiYgc2NyaXB0UmVhZHkgJiYgc2V0dGluZ3NSZWFkeSAmJiBhZGRpdGlvbmFsUGF0aHNSZWFkeTtcblxuICByZXR1cm4ge1xuICAgIGluc3RhbGxlZDogY29uZmlndXJlZCxcbiAgICBjb25maWd1cmVkLFxuICAgIGFzc2V0c1ByZXBhcmVkLFxuICAgIGhvc3Q6IHJhdy5ob3N0LFxuICAgIHNjcmlwdFBhdGg6IHJhdy5zY3JpcHRQYXRoLFxuICAgIHNldHRpbmdzUGF0aDogcmF3LnNldHRpbmdzUGF0aCxcbiAgICBhZGRpdGlvbmFsUGF0aHM6IHJhdy5hZGRpdGlvbmFsUGF0aHMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXJrZXJTdGF0dXMobWFya2VyUGF0aDogc3RyaW5nKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IHJlYWRGaWxlU3luYyhtYXJrZXJQYXRoLCAndXRmLTgnKTtcbiAgICByZXR1cm4gdG9QZXJtaXNzaW9uSG9va1N0YXR1cyhKU09OLnBhcnNlKHJhdykgYXMgUGVybWlzc2lvbkhvb2tNYXJrZXIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFtQZXJtaXNzaW9uc10gRmFpbGVkIHRvIHJlYWQgaG9vayBtYXJrZXIgYXQgJHttYXJrZXJQYXRofTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUhvb2tzUm9vdChwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPiB7XG4gIGNvbnN0IGhvb2tzVmFsdWUgPSBwYXJzZWQuaG9va3M7XG4gIGlmICghaG9va3NWYWx1ZSB8fCB0eXBlb2YgaG9va3NWYWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShob29rc1ZhbHVlKSkge1xuICAgIHBhcnNlZC5ob29rcyA9IHt9O1xuICB9XG4gIHJldHVybiBwYXJzZWQuaG9va3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bltdPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbW1hbmRIb29rKFxuICBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBldmVudE5hbWU6IHN0cmluZyxcbiAgY29tbWFuZDogc3RyaW5nLFxuICBtYXRjaGVyOiBzdHJpbmcsXG4gIGV4dHJhSG9va0ZpZWxkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbik6IHsgY2hhbmdlZDogYm9vbGVhbjsgcGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgY29uc3QgaG9va3NSb290ID0gbm9ybWFsaXplSG9va3NSb290KHBhcnNlZCk7XG4gIGNvbnN0IGV4aXN0aW5nRW50cmllczogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gQXJyYXkuaXNBcnJheShob29rc1Jvb3RbZXZlbnROYW1lXSlcbiAgICA/IGhvb2tzUm9vdFtldmVudE5hbWVdLmZpbHRlcigoZW50cnkpOiBlbnRyeSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnICYmIGVudHJ5ICE9PSBudWxsKVxuICAgIDogW107XG4gIGhvb2tzUm9vdFtldmVudE5hbWVdID0gZXhpc3RpbmdFbnRyaWVzO1xuXG4gIGNvbnN0IGNvbW1hbmRFeGlzdHMgPSBleGlzdGluZ0VudHJpZXMuc29tZSgoZW50cnkpID0+IHtcbiAgICBjb25zdCBob29rcyA9IEFycmF5LmlzQXJyYXkoZW50cnk/Lmhvb2tzKSA/IGVudHJ5Lmhvb2tzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA6IFtdO1xuICAgIHJldHVybiBob29rcy5zb21lKChob29rKSA9PiBob29rPy50eXBlID09PSAnY29tbWFuZCcgJiYgaG9vaz8uY29tbWFuZCA9PT0gY29tbWFuZCk7XG4gIH0pO1xuICBpZiAoY29tbWFuZEV4aXN0cykge1xuICAgIHJldHVybiB7IGNoYW5nZWQ6IGZhbHNlLCBwYXJzZWQgfTtcbiAgfVxuXG4gIGNvbnN0IHdpbGRjYXJkRW50cnkgPSBleGlzdGluZ0VudHJpZXMuZmluZCgoZW50cnkpOiBlbnRyeSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PlxuICAgIChlbnRyeT8ubWF0Y2hlciA9PT0gbWF0Y2hlciB8fCBlbnRyeT8ubWF0Y2hlciA9PT0gdW5kZWZpbmVkKSAmJiBBcnJheS5pc0FycmF5KGVudHJ5Py5ob29rcyksXG4gICk7XG5cbiAgaWYgKHdpbGRjYXJkRW50cnkpIHtcbiAgICBjb25zdCBob29rcyA9IHdpbGRjYXJkRW50cnkuaG9va3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAgIGhvb2tzLnB1c2goe1xuICAgICAgdHlwZTogJ2NvbW1hbmQnLFxuICAgICAgY29tbWFuZCxcbiAgICAgIC4uLmV4dHJhSG9va0ZpZWxkcyxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBleGlzdGluZ0VudHJpZXMucHVzaCh7XG4gICAgICBtYXRjaGVyLFxuICAgICAgaG9va3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb21tYW5kJyxcbiAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgIC4uLmV4dHJhSG9va0ZpZWxkcyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyBjaGFuZ2VkOiB0cnVlLCBwYXJzZWQgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weUhvb2tBc3NldChzb3VyY2VQYXRoOiBzdHJpbmcsIHRhcmdldFBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBhd2FpdCBta2RpcihkaXJuYW1lKHRhcmdldFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBzb3VyY2VSYXcgPSBhd2FpdCByZWFkRmlsZShzb3VyY2VQYXRoLCAndXRmLTgnKTtcblxuICBsZXQgdGFyZ2V0UmF3OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgdGFyZ2V0UmF3ID0gYXdhaXQgcmVhZEZpbGUodGFyZ2V0UGF0aCwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFpc01pc3NpbmdGaWxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2hhbmdlZCA9IHRhcmdldFJhdyA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZVJhdyAhPT0gdGFyZ2V0UmF3O1xuXG4gIGlmIChjaGFuZ2VkKSB7XG4gICAgYXdhaXQgY29weUZpbGUoc291cmNlUGF0aCwgdGFyZ2V0UGF0aCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWNjZXNzKHRhcmdldFBhdGgpO1xuICB9XG5cbiAgYXdhaXQgY2htb2QodGFyZ2V0UGF0aCwgMG83NTUpO1xuICByZXR1cm4gY2hhbmdlZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRPcHRpb25hbFV0ZjgoZmlsZVBhdGg6IHN0cmluZywgZmFsbGJhY2s6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVCYWNrdXBJZlByZXNlbnQoZmlsZVBhdGg6IHN0cmluZywgcmF3OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJhY2t1cFBhdGggPSBgJHtmaWxlUGF0aH0uZG9sbGhvdXNlLmJha2A7XG4gIGF3YWl0IHdyaXRlRmlsZShiYWNrdXBQYXRoLCByYXcsICd1dGYtOCcpO1xuICByZXR1cm4gYmFja3VwUGF0aDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlSG9va01hcmtlcihcbiAgaG9tZURpcjogc3RyaW5nLFxuICBtYXJrZXI6IFBlcm1pc3Npb25Ib29rTWFya2VyLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbWFya2VyUGF0aCA9IGdldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aChob21lRGlyLCBtYXJrZXIuaG9zdCk7XG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUobWFya2VyUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUobWFya2VyUGF0aCwgSlNPTi5zdHJpbmdpZnkobWFya2VyLCBudWxsLCAyKSArICdcXG4nLCAndXRmLTgnKTtcbiAgcmV0dXJuIG1hcmtlclBhdGg7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSG9va0Fzc2V0c0Zvckhvc3QoXG4gIGNsaWVudDogc3RyaW5nLFxuICBob21lRGlyOiBzdHJpbmcsXG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgc2NyaXB0UGF0aDogc3RyaW5nIH0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZENsaWVudCA9IG5vcm1hbGl6ZUhvb2tIb3N0KGNsaWVudCk7XG4gIGNvbnN0IGhvb2tzRGlyID0gZGlybmFtZShnZXRQZXJtaXNzaW9uSG9va1NjcmlwdFBhdGgoaG9tZURpcikpO1xuICBjb25zdCBzaGFyZWRUYXJnZXRQYXRoID0gZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIpO1xuICBjb25zdCBzaGFyZWRTb3VyY2VQYXRoID0gc291cmNlU2NyaXB0UGF0aCA/PyBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwcmV0b29sdXNlLWRvbGxob3VzZS5zaCcpO1xuICBjb25zdCBwb3J0SGVscGVyU291cmNlUGF0aCA9IGpvaW4ocmVwb1Jvb3RGcm9tTW9kdWxlKCksICdzY3JpcHRzJywgJ3Blcm1pc3Npb24tcG9ydC1kaXNjb3Zlcnkuc2gnKTtcbiAgY29uc3QgcG9ydEhlbHBlclRhcmdldFBhdGggPSBqb2luKGhvb2tzRGlyLCAncGVybWlzc2lvbi1wb3J0LWRpc2NvdmVyeS5zaCcpO1xuICBjb25zdCBjb25maWdIZWxwZXJTb3VyY2VQYXRoID0gam9pbihyZXBvUm9vdEZyb21Nb2R1bGUoKSwgJ3NjcmlwdHMnLCAncGVybWlzc2lvbi1ob29rLWNvbmZpZy5zaCcpO1xuICBjb25zdCBjb25maWdIZWxwZXJUYXJnZXRQYXRoID0gam9pbihob29rc0RpciwgJ3Blcm1pc3Npb24taG9vay1jb25maWcuc2gnKTtcblxuICBjb25zdCBzaGFyZWRTdGF0ID0gc3RhdFN5bmMoc2hhcmVkU291cmNlUGF0aCk7XG4gIGlmICghc2hhcmVkU3RhdC5pc0ZpbGUoKSkge1xuICAgIGxvZ2dlci53YXJuKGBbUGVybWlzc2lvbkhvb2tzXSBTaGFyZWQgaG9vayBicmlkZ2UgbWlzc2luZyBmb3IgJHtub3JtYWxpemVkQ2xpZW50fTogJHtzaGFyZWRTb3VyY2VQYXRofWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGVybWlzc2lvbiBob29rIHNvdXJjZSBzY3JpcHQgbm90IGZvdW5kOiAke3NoYXJlZFNvdXJjZVBhdGh9YCk7XG4gIH1cbiAgYXdhaXQgY29weUhvb2tBc3NldChzaGFyZWRTb3VyY2VQYXRoLCBzaGFyZWRUYXJnZXRQYXRoKTtcblxuICBjb25zdCBwb3J0SGVscGVyU3RhdCA9IHN0YXRTeW5jKHBvcnRIZWxwZXJTb3VyY2VQYXRoKTtcbiAgaWYgKCFwb3J0SGVscGVyU3RhdC5pc0ZpbGUoKSkge1xuICAgIGxvZ2dlci53YXJuKGBbUGVybWlzc2lvbkhvb2tzXSBQb3J0IGRpc2NvdmVyeSBoZWxwZXIgbWlzc2luZyBmb3IgJHtub3JtYWxpemVkQ2xpZW50fTogJHtwb3J0SGVscGVyU291cmNlUGF0aH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBlcm1pc3Npb24gaG9vayBoZWxwZXIgc2NyaXB0IG5vdCBmb3VuZDogJHtwb3J0SGVscGVyU291cmNlUGF0aH1gKTtcbiAgfVxuICBhd2FpdCBjb3B5SG9va0Fzc2V0KHBvcnRIZWxwZXJTb3VyY2VQYXRoLCBwb3J0SGVscGVyVGFyZ2V0UGF0aCk7XG5cbiAgY29uc3QgY29uZmlnSGVscGVyU3RhdCA9IHN0YXRTeW5jKGNvbmZpZ0hlbHBlclNvdXJjZVBhdGgpO1xuICBpZiAoIWNvbmZpZ0hlbHBlclN0YXQuaXNGaWxlKCkpIHtcbiAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gQ29uZmlnIGhlbHBlciBtaXNzaW5nIGZvciAke25vcm1hbGl6ZWRDbGllbnR9OiAke2NvbmZpZ0hlbHBlclNvdXJjZVBhdGh9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQZXJtaXNzaW9uIGhvb2sgY29uZmlnIGhlbHBlciBub3QgZm91bmQ6ICR7Y29uZmlnSGVscGVyU291cmNlUGF0aH1gKTtcbiAgfVxuICBhd2FpdCBjb3B5SG9va0Fzc2V0KGNvbmZpZ0hlbHBlclNvdXJjZVBhdGgsIGNvbmZpZ0hlbHBlclRhcmdldFBhdGgpO1xuXG4gIGNvbnN0IHdyYXBwZXJUYXJnZXRQYXRoID0gZ2V0SG9va1dyYXBwZXJQYXRoKG5vcm1hbGl6ZWRDbGllbnQsIGhvbWVEaXIpO1xuICBpZiAoIXdyYXBwZXJUYXJnZXRQYXRoKSB7XG4gICAgcmV0dXJuIHsgc2NyaXB0UGF0aDogc2hhcmVkVGFyZ2V0UGF0aCB9O1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlclNvdXJjZVBhdGggPSBnZXRIb29rU291cmNlUGF0aChub3JtYWxpemVkQ2xpZW50KTtcbiAgY29uc3Qgd3JhcHBlclN0YXQgPSBzdGF0U3luYyh3cmFwcGVyU291cmNlUGF0aCk7XG4gIGlmICghd3JhcHBlclN0YXQuaXNGaWxlKCkpIHtcbiAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gV3JhcHBlciBob29rIHNjcmlwdCBtaXNzaW5nIGZvciAke25vcm1hbGl6ZWRDbGllbnR9OiAke3dyYXBwZXJTb3VyY2VQYXRofWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGVybWlzc2lvbiBob29rIHdyYXBwZXIgc2NyaXB0IG5vdCBmb3VuZDogJHt3cmFwcGVyU291cmNlUGF0aH1gKTtcbiAgfVxuICBhd2FpdCBjb3B5SG9va0Fzc2V0KHdyYXBwZXJTb3VyY2VQYXRoLCB3cmFwcGVyVGFyZ2V0UGF0aCk7XG4gIHJldHVybiB7IHNjcmlwdFBhdGg6IHdyYXBwZXJUYXJnZXRQYXRoIH07XG59XG4iXX0=
|
|
425
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tTaGFyZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGVybWlzc2lvbkhvb2tTaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBb0lyQyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRztJQUM1QyxRQUFRLEVBQUUsc0JBQXNCO0lBQ2hDLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsVUFBVSxFQUFFLHdCQUF3QjtJQUNwQyxZQUFZLEVBQUUsc0JBQXNCO0lBQ3BDLE9BQU8sRUFBRSxxQkFBcUI7Q0FDdEIsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQXVELENBQUM7QUFFcEksTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxrQkFBa0IsQ0FBVSxDQUFDO0FBRTFGLFNBQVMsa0JBQWtCO0lBQ3pCLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMs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QUFNLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBRXBFLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDOUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMscURBQXFELGdCQUFnQixLQUFLLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUMzRyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUNELE1BQU0sYUFBYSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjaG1vZCwgY29weUZpbGUsIG1rZGlyLCByZWFkRmlsZSwgcmVhZGRpciwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBob21lZGlyLCBwbGF0Zm9ybSB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tNYXJrZXIge1xuICBob3N0OiBzdHJpbmc7XG4gIHNjcmlwdFBhdGg6IHN0cmluZztcbiAgc2V0dGluZ3NQYXRoPzogc3RyaW5nO1xuICBhZGRpdGlvbmFsUGF0aHM/OiBzdHJpbmdbXTtcbiAgY29uZmlndXJlZD86IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgaW5zdGFsbGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGluc3RhbGxlZDogYm9vbGVhbjtcbiAgY29uZmlndXJlZD86IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgYXNzZXRzQ3VycmVudD86IGJvb2xlYW47XG4gIGF1dG9SZXBhaXJlZD86IGJvb2xlYW47XG4gIG5lZWRzUmVwYWlyPzogYm9vbGVhbjtcbiAgcmVwYWlyRXJyb3I/OiBzdHJpbmc7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIHNjcmlwdFBhdGg/OiBzdHJpbmc7XG4gIHNldHRpbmdzUGF0aD86IHN0cmluZztcbiAgYWRkaXRpb25hbFBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qKiBMYXRlc3QgSlNPTkwgZGlhZ25vc3RpYyBldmVudCBlbWl0dGVkIGJ5IGEgbG9jYWwgcGVybWlzc2lvbiBob29rIHdyYXBwZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBpbnZvY2F0aW9uSWQ6IHN0cmluZztcbiAgZXZlbnQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgc3RhZ2U6IHN0cmluZztcbiAgb3V0Y29tZT86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICBob29rUGF0aD86IHN0cmluZztcbiAgZGlhZ25vc3RpY3NMb2dQYXRoPzogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHRvb2xOYW1lPzogc3RyaW5nO1xuICB0b29sSW5wdXQ/OiBzdHJpbmc7XG4gIHJhd0lucHV0Pzogc3RyaW5nO1xuICBhdXRob3JpdHlIb3N0Pzogc3RyaW5nO1xuICBhdXRob3JpdHlNb2RlPzogc3RyaW5nO1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgcG9ydD86IHN0cmluZztcbiAgcGF5bG9hZD86IHN0cmluZztcbiAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gIG5vcm1hbGl6ZWRSZXNwb25zZT86IHN0cmluZztcbiAgZW1pdHRlZFJlc3BvbnNlPzogc3RyaW5nO1xuICBhdHRlbXB0Pzogc3RyaW5nO1xuICBtYXhSZXRyaWVzPzogc3RyaW5nO1xuICB0aW1lb3V0U2Vjb25kcz86IHN0cmluZztcbiAgY3VybEV4aXQ/OiBzdHJpbmc7XG4gIHJhd0lucHV0TGVuZ3RoPzogbnVtYmVyO1xuICBub3JtYWxpemVkUmVzcG9uc2VMZW5ndGg/OiBudW1iZXI7XG4gIGVtaXR0ZWRSZXNwb25zZUxlbmd0aD86IG51bWJlcjtcbiAgcmVzcG9uc2VMZW5ndGg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbFBlcm1pc3Npb25Ib29rUmVzdWx0IHtcbiAgc3VwcG9ydGVkOiBib29sZWFuO1xuICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIGNvbmZpZ3VyZWQ6IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgaG9zdDogc3RyaW5nO1xuICBzY3JpcHRQYXRoPzogc3RyaW5nO1xuICBzZXR0aW5nc1BhdGg/OiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxQYXRocz86IHN0cmluZ1tdO1xuICBtYXJrZXJQYXRoPzogc3RyaW5nO1xuICBiYWNrdXBQYXRoPzogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbFBlcm1pc3Npb25Ib29rT3B0aW9ucyB7XG4gIGhvbWVEaXI/OiBzdHJpbmc7XG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmc7XG4gIG5vdz86IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zIHtcbiAgaG9tZURpcj86IHN0cmluZztcbiAgc291cmNlU2NyaXB0UGF0aD86IHN0cmluZztcbiAgYXV0b1JlcGFpcj86IGJvb2xlYW47XG59XG5cbi8qKiBBZ2dyZWdhdGUgaGVhbHRoIGFuZCByZXBhaXIgc3RhdGUgZm9yIGFsbCBtYW5hZ2VkIGxvY2FsIGhvb2sgaG9zdHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5IHtcbiAgaW5zdGFsbGVkSG9zdHM6IHN0cmluZ1tdO1xuICBjdXJyZW50SG9zdHM6IHN0cmluZ1tdO1xuICByZXBhaXJlZEhvc3RzOiBzdHJpbmdbXTtcbiAgbmVlZHNSZXBhaXJIb3N0czogc3RyaW5nW107XG4gIGRpYWdub3N0aWNzUGF0aDogc3RyaW5nO1xuICBsYXN0RGlhZ25vc3RpYzogUGVybWlzc2lvbkhvb2tEaWFnbm9zdGljUmVjb3JkIHwgbnVsbDtcbiAgbGFzdFN0YXJ0dXBSZXBhaXI6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsO1xufVxuXG4vKiogQ29uZGVuc2VkIGhlYWx0aCB2aWV3IHN1cmZhY2VkIGluIHNldHVwLCBwZXJtaXNzaW9ucywgYW5kIGJ1aWxkIGluZm8uICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSB7XG4gIHN0YXR1czogJ29rJyB8ICd3YXJuaW5nJyB8ICdlcnJvcic7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcmVwYWlyZWRDb3VudDogbnVtYmVyO1xuICBuZWVkc1JlcGFpckNvdW50OiBudW1iZXI7XG4gIGxhc3RDaGVja2VkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCBleHRlbmRzIFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgaG9zdDogc3RyaW5nO1xuICBvdXRjb21lOiAnY3VycmVudCcgfCAncmVwYWlyZWQnIHwgJ25lZWRzX3JlcGFpcicgfCAnbm90X2luc3RhbGxlZCcgfCAnZXJyb3InO1xufVxuXG4vKiogUmVzdWx0IHN1bW1hcnkgZm9yIHRoZSBtb3N0IHJlY2VudCBzdGFydHVwLXRpbWUgaG9vayBhc3NldCByZXBhaXIgcGFzcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSB7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICBjb21wbGV0ZWRBdDogc3RyaW5nO1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIHJlcGFpcmVkQ291bnQ6IG51bWJlcjtcbiAgbmVlZHNSZXBhaXJDb3VudDogbnVtYmVyO1xuICBob3N0UmVzdWx0czogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tBc3NldERlc2NyaXB0b3Ige1xuICBraW5kOiAnYnJpZGdlJyB8ICdwb3J0LWhlbHBlcicgfCAnY29uZmlnLWhlbHBlcicgfCAnd3JhcHBlcic7XG4gIHNvdXJjZVBhdGg6IHN0cmluZztcbiAgdGFyZ2V0UGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tBc3NldEF1ZGl0UmVzdWx0IHtcbiAgYXNzZXRzUHJlcGFyZWQ6IGJvb2xlYW47XG4gIGFzc2V0c0N1cnJlbnQ6IGJvb2xlYW47XG4gIHN0YWxlQXNzZXRzOiBIb29rQXNzZXREZXNjcmlwdG9yW107XG59XG5cbmV4cG9ydCBjb25zdCBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVMgPSB7XG4gICd2c2NvZGUnOiAncHJldG9vbHVzZS12c2NvZGUuc2gnLFxuICAnY3Vyc29yJzogJ3ByZXRvb2x1c2UtY3Vyc29yLnNoJyxcbiAgJ3dpbmRzdXJmJzogJ3ByZXRvb2x1c2Utd2luZHN1cmYuc2gnLFxuICAnZ2VtaW5pLWNsaSc6ICdwcmV0b29sdXNlLWdlbWluaS5zaCcsXG4gICdjb2RleCc6ICdwcmV0b29sdXNlLWNvZGV4LnNoJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBXUkFQUEVSX0hPT0tfSE9TVFMgPSBPYmplY3Qua2V5cyhNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVMpIGFzIEFycmF5PGtleW9mIHR5cGVvZiBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVM+O1xuXG5leHBvcnQgY29uc3QgQVVUT19SRVBBSVJBQkxFX0hPT0tfSE9TVFMgPSBbJ2NsYXVkZS1jb2RlJywgLi4uV1JBUFBFUl9IT09LX0hPU1RTXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gcmVwb1Jvb3RGcm9tTW9kdWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IGN1cnJlbnRGaWxlID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuICByZXR1cm4gZGlybmFtZShkaXJuYW1lKGRpcm5hbWUoY3VycmVudEZpbGUpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01pc3NpbmdGaWxlRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZXJyb3JcbiAgICAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnXG4gICAgJiYgJ2NvZGUnIGluIGVycm9yXG4gICAgJiYgKGVycm9yIGFzIHsgY29kZT86IHN0cmluZyB9KS5jb2RlID09PSAnRU5PRU5UJyxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluZGVudChyYXc6IHN0cmluZyk6IG51bWJlciB8IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbGluZSBvZiByYXcuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwIHx8IGxpbmUuc3RhcnRzV2l0aCgneycpIHx8IGxpbmUuc3RhcnRzV2l0aCgnfScpKSBjb250aW51ZTtcbiAgICBpZiAobGluZS5zdGFydHNXaXRoKCdcXHQnKSkgcmV0dXJuICdcXHQnO1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJyAnKSkge1xuICAgICAgY29uc3Qgc3BhY2VzID0gbGluZS5sZW5ndGggLSBsaW5lLnRyaW1TdGFydCgpLmxlbmd0aDtcbiAgICAgIGlmIChzcGFjZXMgPj0gMikgcmV0dXJuIHNwYWNlcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJtaXNzaW9uSG9va1NjcmlwdFBhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuZG9sbGhvdXNlJywgJ2hvb2tzJywgJ3ByZXRvb2x1c2UtZG9sbGhvdXNlLnNoJyk7XG59XG5cbmZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rUnVuRGlyKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmRvbGxob3VzZScsICdydW4nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyKSwgJ3Blcm1pc3Npb24taG9vay1kaWFnbm9zdGljcy5qc29ubCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSG9va0hvc3QoaG9zdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGhvc3QpLm5vcm1hbGl6ZWRDb250ZW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBpc0hvb2tNYXJrZXJGaWxlbmFtZShlbnRyeTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbnRyeS5zdGFydHNXaXRoKCdob29rLWluc3RhbGxlZC0nKSAmJiBlbnRyeS5lbmRzV2l0aCgnLmpzb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRIb3N0U3BlY2lmaWNIb29rU3RhdHVzKGhvbWVEaXI6IHN0cmluZywgaG9zdDogc3RyaW5nKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSG9va0hvc3QoaG9zdCk7XG4gIGNvbnN0IHN0YXR1cyA9IHJlYWRNYXJrZXJTdGF0dXMoZ2V0UGVybWlzc2lvbkhvb2tNYXJrZXJQYXRoKGhvbWVEaXIsIG5vcm1hbGl6ZWQpKTtcbiAgaWYgKHN0YXR1cy5pbnN0YWxsZWQgfHwgc3RhdHVzLmFzc2V0c1ByZXBhcmVkKSB7XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuICBpZiAobm9ybWFsaXplZCA9PT0gJ2NsYXVkZS1jb2RlJykge1xuICAgIHJldHVybiByZWFkTWFya2VyU3RhdHVzKGdldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aChob21lRGlyKSk7XG4gIH1cbiAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEhvb2tNYXJrZXJQYXRocyhob21lRGlyOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IG1hcmtlclBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgoaG9tZURpcildKTtcbiAgY29uc3QgcnVuRGlyID0gZ2V0UGVybWlzc2lvbkhvb2tSdW5EaXIoaG9tZURpcik7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWFkZGlyU3luYyhydW5EaXIpKSB7XG4gICAgICBpZiAoaXNIb29rTWFya2VyRmlsZW5hbWUoZW50cnkpKSB7XG4gICAgICAgIG1hcmtlclBhdGhzLmFkZChqb2luKHJ1bkRpciwgZW50cnkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vIHJ1biBkaXIgeWV0IOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCBmYWxzZS5cbiAgfVxuICByZXR1cm4gbWFya2VyUGF0aHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb2xsZWN0SG9va01hcmtlclBhdGhzQXN5bmMoaG9tZURpcjogc3RyaW5nKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICBjb25zdCBtYXJrZXJQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPihbZ2V0UGVybWlzc2lvbkhvb2tNYXJrZXJQYXRoKGhvbWVEaXIpXSk7XG4gIGNvbnN0IHJ1bkRpciA9IGdldFBlcm1pc3Npb25Ib29rUnVuRGlyKGhvbWVEaXIpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgYXdhaXQgcmVhZGRpcihydW5EaXIpKSB7XG4gICAgICBpZiAoaXNIb29rTWFya2VyRmlsZW5hbWUoZW50cnkpKSB7XG4gICAgICAgIG1hcmtlclBhdGhzLmFkZChqb2luKHJ1bkRpciwgZW50cnkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vIHJ1biBkaXIgeWV0IOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCBmYWxzZS5cbiAgfVxuICByZXR1cm4gbWFya2VyUGF0aHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1tYXJpemVNYXJrZXJTdGF0dXNlcyhtYXJrZXJQYXRoczogSXRlcmFibGU8c3RyaW5nPik6IFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgbGV0IGZhbGxiYWNrOiBQZXJtaXNzaW9uSG9va1N0YXR1cyA9IHsgaW5zdGFsbGVkOiBmYWxzZSB9O1xuICBmb3IgKGNvbnN0IG1hcmtlclBhdGggb2YgbWFya2VyUGF0aHMpIHtcbiAgICBjb25zdCBzdGF0dXMgPSByZWFkTWFya2VyU3RhdHVzKG1hcmtlclBhdGgpO1xuICAgIGlmIChzdGF0dXMuaW5zdGFsbGVkKSByZXR1cm4gc3RhdHVzO1xuICAgIGlmICghZmFsbGJhY2suYXNzZXRzUHJlcGFyZWQgJiYgc3RhdHVzLmFzc2V0c1ByZXBhcmVkKSBmYWxsYmFjayA9IHN0YXR1cztcbiAgfVxuICByZXR1cm4gZmFsbGJhY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb29rV3JhcHBlckJhc2VuYW1lKGhvc3Q6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBub3JtYWxpemVkSG9zdCA9IG5vcm1hbGl6ZUhvb2tIb3N0KGhvc3QpO1xuICByZXR1cm4gTUFOQUdFRF9IT09LX1dSQVBQRVJfQkFTRU5BTUVTW25vcm1hbGl6ZWRIb3N0IGFzIGtleW9mIHR5cGVvZiBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVNdID8/IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb29rV3JhcHBlclBhdGgoaG9zdDogc3RyaW5nLCBob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gZ2V0SG9va1dyYXBwZXJCYXNlbmFtZShob3N0KTtcbiAgcmV0dXJuIGJhc2VuYW1lID8gam9pbihob21lRGlyLCAnLmRvbGxob3VzZScsICdob29rcycsIGJhc2VuYW1lKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb29rU291cmNlUGF0aChob3N0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByb290ID0gcmVwb1Jvb3RGcm9tTW9kdWxlKCk7XG4gIGNvbnN0IGJhc2VuYW1lID0gZ2V0SG9va1dyYXBwZXJCYXNlbmFtZShob3N0KTtcbiAgcmV0dXJuIGJhc2VuYW1lID8gam9pbihyb290LCAnc2NyaXB0cycsIGJhc2VuYW1lKSA6IGpvaW4ocm9vdCwgJ3NjcmlwdHMnLCAncHJldG9vbHVzZS1kb2xsaG91c2Uuc2gnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzTWFuYWdlZEhvb2tBc3NldHMoaG9zdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIb29rSG9zdChob3N0KTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICdjbGF1ZGUtY29kZScgfHwgZ2V0SG9va1dyYXBwZXJCYXNlbmFtZShub3JtYWxpemVkKSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByaW1hcnlIb29rU2NyaXB0UGF0aChob3N0OiBzdHJpbmcsIGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0SG9va1dyYXBwZXJQYXRoKGhvc3QsIGhvbWVEaXIpID8/IGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aChob21lRGlyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRMYXN0UGVybWlzc2lvbkhvb2tEaWFnbm9zdGljKFxuICBob21lRGlyID0gaG9tZWRpcigpLFxuKTogUHJvbWlzZTxQZXJtaXNzaW9uSG9va0RpYWdub3N0aWNSZWNvcmQgfCBudWxsPiB7XG4gIGNvbnN0IGRpYWdub3N0aWNzUGF0aCA9IGdldFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY3NQYXRoKGhvbWVEaXIpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUoZGlhZ25vc3RpY3NQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IHJhd1xuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IGxhc3RMaW5lID0gbGluZXMuYXQoLTEpO1xuICAgIGlmICghbGFzdExpbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBwYXJzZWQ6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UobGFzdExpbmUpIGFzIHVua25vd247XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgW1Blcm1pc3Npb25Ib29rc10gRmFpbGVkIHRvIHBhcnNlIGhvb2sgZGlhZ25vc3RpY3MgSlNPTiBmcm9tICR7ZGlhZ25vc3RpY3NQYXRofTogJHtcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYFtQZXJtaXNzaW9uSG9va3NdIElnbm9yaW5nIG1hbGZvcm1lZCBob29rIGRpYWdub3N0aWNzIGVudHJ5IGZyb20gJHtkaWFnbm9zdGljc1BhdGh9OiBleHBlY3RlZCBKU09OIG9iamVjdC5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQgYXMgUGVybWlzc2lvbkhvb2tEaWFnbm9zdGljUmVjb3JkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc01pc3NpbmdGaWxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihcbiAgICAgIGBbUGVybWlzc2lvbkhvb2tzXSBGYWlsZWQgdG8gcmVhZCBob29rIGRpYWdub3N0aWNzIGZyb20gJHtkaWFnbm9zdGljc1BhdGh9OiAke1xuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIH1gLFxuICAgICk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hbmFnZWRIb29rQXNzZXRzKFxuICBob3N0OiBzdHJpbmcsXG4gIGhvbWVEaXIgPSBob21lZGlyKCksXG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmcsXG4pOiBIb29rQXNzZXREZXNjcmlwdG9yW10ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSG9va0hvc3QoaG9zdCk7XG4gIGNvbnN0IGhvb2tzRGlyID0gZGlybmFtZShnZXRQZXJtaXNzaW9uSG9va1NjcmlwdFBhdGgoaG9tZURpcikpO1xuICBjb25zdCBhc3NldHM6IEhvb2tBc3NldERlc2NyaXB0b3JbXSA9IFtcbiAgICB7XG4gICAgICBraW5kOiAnYnJpZGdlJyxcbiAgICAgIHNvdXJjZVBhdGg6IHNvdXJjZVNjcmlwdFBhdGggPz8gam9pbihyZXBvUm9vdEZyb21Nb2R1bGUoKSwgJ3NjcmlwdHMnLCAncHJldG9vbHVzZS1kb2xsaG91c2Uuc2gnKSxcbiAgICAgIHRhcmdldFBhdGg6IGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aChob21lRGlyKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtpbmQ6ICdwb3J0LWhlbHBlcicsXG4gICAgICBzb3VyY2VQYXRoOiBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwZXJtaXNzaW9uLXBvcnQtZGlzY292ZXJ5LnNoJyksXG4gICAgICB0YXJnZXRQYXRoOiBqb2luKGhvb2tzRGlyLCAncGVybWlzc2lvbi1wb3J0LWRpc2NvdmVyeS5zaCcpLFxuICAgIH0sXG4gICAge1xuICAgICAga2luZDogJ2NvbmZpZy1oZWxwZXInLFxuICAgICAgc291cmNlUGF0aDogam9pbihyZXBvUm9vdEZyb21Nb2R1bGUoKSwgJ3NjcmlwdHMnLCAncGVybWlzc2lvbi1ob29rLWNvbmZpZy5zaCcpLFxuICAgICAgdGFyZ2V0UGF0aDogam9pbihob29rc0RpciwgJ3Blcm1pc3Npb24taG9vay1jb25maWcuc2gnKSxcbiAgICB9LFxuICBdO1xuXG4gIGNvbnN0IHdyYXBwZXJUYXJnZXRQYXRoID0gZ2V0SG9va1dyYXBwZXJQYXRoKG5vcm1hbGl6ZWQsIGhvbWVEaXIpO1xuICBpZiAod3JhcHBlclRhcmdldFBhdGgpIHtcbiAgICBhc3NldHMucHVzaCh7XG4gICAgICBraW5kOiAnd3JhcHBlcicsXG4gICAgICBzb3VyY2VQYXRoOiBnZXRIb29rU291cmNlUGF0aChub3JtYWxpemVkKSxcbiAgICAgIHRhcmdldFBhdGg6IHdyYXBwZXJUYXJnZXRQYXRoLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFzc2V0cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZE9wdGlvbmFsVXRmOEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1ZGl0SG9va0Fzc2V0cyhcbiAgaG9zdDogc3RyaW5nLFxuICBob21lRGlyID0gaG9tZWRpcigpLFxuICBzb3VyY2VTY3JpcHRQYXRoPzogc3RyaW5nLFxuKTogUHJvbWlzZTxIb29rQXNzZXRBdWRpdFJlc3VsdD4ge1xuICBjb25zdCBhc3NldHMgPSBnZXRNYW5hZ2VkSG9va0Fzc2V0cyhob3N0LCBob21lRGlyLCBzb3VyY2VTY3JpcHRQYXRoKTtcbiAgY29uc3Qgc3RhbGVBc3NldHM6IEhvb2tBc3NldERlc2NyaXB0b3JbXSA9IFtdO1xuICBsZXQgYXNzZXRzUHJlcGFyZWQgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgYXNzZXQgb2YgYXNzZXRzKSB7XG4gICAgY29uc3Qgc291cmNlUmF3ID0gYXdhaXQgcmVhZEZpbGUoYXNzZXQuc291cmNlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgdGFyZ2V0UmF3ID0gYXdhaXQgcmVhZE9wdGlvbmFsVXRmOEZpbGUoYXNzZXQudGFyZ2V0UGF0aCk7XG4gICAgaWYgKHRhcmdldFJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhc3NldHNQcmVwYXJlZCA9IGZhbHNlO1xuICAgICAgc3RhbGVBc3NldHMucHVzaChhc3NldCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHRhcmdldFJhdyAhPT0gc291cmNlUmF3KSB7XG4gICAgICBzdGFsZUFzc2V0cy5wdXNoKGFzc2V0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzc2V0c1ByZXBhcmVkLFxuICAgIGFzc2V0c0N1cnJlbnQ6IHN0YWxlQXNzZXRzLmxlbmd0aCA9PT0gMCxcbiAgICBzdGFsZUFzc2V0cyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aChob21lRGlyID0gaG9tZWRpcigpLCBob3N0Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIGpvaW4oZ2V0UGVybWlzc2lvbkhvb2tSdW5EaXIoaG9tZURpciksICdob29rLWluc3RhbGxlZC5qc29uJyk7XG4gIH1cbiAgcmV0dXJuIGpvaW4oZ2V0UGVybWlzc2lvbkhvb2tSdW5EaXIoaG9tZURpciksIGBob29rLWluc3RhbGxlZC0ke25vcm1hbGl6ZUhvb2tIb3N0KGhvc3QpfS5qc29uYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGF1ZGVIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNsYXVkZScsICdzZXR0aW5ncy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWc0NvZGVIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvcGlsb3QnLCAnaG9va3MnLCAnZG9sbGhvdXNlLXBlcm1pc3Npb25zLmpzb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZzQ29kZVVzZXJTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIGNvbnN0IGN1cnJlbnRQbGF0Zm9ybSA9IHBsYXRmb3JtKCk7XG4gIGlmIChjdXJyZW50UGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oaG9tZURpciwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdDb2RlJywgJ1VzZXInLCAnc2V0dGluZ3MuanNvbicpO1xuICB9XG4gIGlmIChjdXJyZW50UGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBhcHBEYXRhID0gcHJvY2Vzcy5lbnYuQVBQREFUQSB8fCBqb2luKGhvbWVEaXIsICdBcHBEYXRhJywgJ1JvYW1pbmcnKTtcbiAgICByZXR1cm4gam9pbihhcHBEYXRhLCAnQ29kZScsICdVc2VyJywgJ3NldHRpbmdzLmpzb24nKTtcbiAgfVxuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvbmZpZycsICdDb2RlJywgJ1VzZXInLCAnc2V0dGluZ3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VtaW5pSG9va1NldHRpbmdzUGF0aChob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZURpciwgJy5nZW1pbmknLCAnc2V0dGluZ3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3Vyc29ySG9va1NldHRpbmdzUGF0aChob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZURpciwgJy5jdXJzb3InLCAnaG9va3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2luZHN1cmZIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvZGVpdW0nLCAnd2luZHN1cmYnLCAnaG9va3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29kZXhIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvZGV4JywgJ2hvb2tzLmpzb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvZGV4Q29uZmlnUGF0aChob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZURpciwgJy5jb2RleCcsICdjb25maWcudG9tbCcpO1xufVxuXG5mdW5jdGlvbiB0b1Blcm1pc3Npb25Ib29rU3RhdHVzKHJhdzogUGVybWlzc2lvbkhvb2tNYXJrZXIpOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGlmIChcbiAgICB0eXBlb2YgcmF3Lmhvc3QgIT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHJhdy5zY3JpcHRQYXRoICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBzY3JpcHRSZWFkeSA9IGV4aXN0c1N5bmMocmF3LnNjcmlwdFBhdGgpO1xuICBjb25zdCBzZXR0aW5nc1JlYWR5ID0gIXJhdy5zZXR0aW5nc1BhdGggfHwgZXhpc3RzU3luYyhyYXcuc2V0dGluZ3NQYXRoKTtcbiAgY29uc3QgYWRkaXRpb25hbFBhdGhzUmVhZHkgPSAhcmF3LmFkZGl0aW9uYWxQYXRocyB8fCByYXcuYWRkaXRpb25hbFBhdGhzLmV2ZXJ5KChwYXRoKSA9PiBleGlzdHNTeW5jKHBhdGgpKTtcbiAgY29uc3QgYXNzZXRzUHJlcGFyZWQgPSAocmF3LmFzc2V0c1ByZXBhcmVkID8/IHJhdy5jb25maWd1cmVkID8/IHRydWUpICYmIHNjcmlwdFJlYWR5O1xuICBjb25zdCBjb25maWd1cmVkID0gKHJhdy5jb25maWd1cmVkID8/IHRydWUpICYmIHNjcmlwdFJlYWR5ICYmIHNldHRpbmdzUmVhZHkgJiYgYWRkaXRpb25hbFBhdGhzUmVhZHk7XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsZWQ6IGNvbmZpZ3VyZWQsXG4gICAgY29uZmlndXJlZCxcbiAgICBhc3NldHNQcmVwYXJlZCxcbiAgICBob3N0OiByYXcuaG9zdCxcbiAgICBzY3JpcHRQYXRoOiByYXcuc2NyaXB0UGF0aCxcbiAgICBzZXR0aW5nc1BhdGg6IHJhdy5zZXR0aW5nc1BhdGgsXG4gICAgYWRkaXRpb25hbFBhdGhzOiByYXcuYWRkaXRpb25hbFBhdGhzLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWFkTWFya2VyU3RhdHVzKG1hcmtlclBhdGg6IHN0cmluZyk6IFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSByZWFkRmlsZVN5bmMobWFya2VyUGF0aCwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIHRvUGVybWlzc2lvbkhvb2tTdGF0dXMoSlNPTi5wYXJzZShyYXcpIGFzIFBlcm1pc3Npb25Ib29rTWFya2VyKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWlzTWlzc2luZ0ZpbGVFcnJvcihlcnJvcikpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbUGVybWlzc2lvbnNdIEZhaWxlZCB0byByZWFkIGhvb2sgbWFya2VyIGF0ICR7bWFya2VyUGF0aH06ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIb29rc1Jvb3QocGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd25bXT4ge1xuICBjb25zdCBob29rc1ZhbHVlID0gcGFyc2VkLmhvb2tzO1xuICBpZiAoIWhvb2tzVmFsdWUgfHwgdHlwZW9mIGhvb2tzVmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoaG9va3NWYWx1ZSkpIHtcbiAgICBwYXJzZWQuaG9va3MgPSB7fTtcbiAgfVxuICByZXR1cm4gcGFyc2VkLmhvb2tzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd25bXT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVDb21tYW5kSG9vayhcbiAgcGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgbWF0Y2hlcjogc3RyaW5nLFxuICBleHRyYUhvb2tGaWVsZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4pOiB7IGNoYW5nZWQ6IGJvb2xlYW47IHBhcnNlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB7XG4gIGNvbnN0IGhvb2tzUm9vdCA9IG5vcm1hbGl6ZUhvb2tzUm9vdChwYXJzZWQpO1xuICBjb25zdCBleGlzdGluZ0VudHJpZXM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IEFycmF5LmlzQXJyYXkoaG9va3NSb290W2V2ZW50TmFtZV0pXG4gICAgPyBob29rc1Jvb3RbZXZlbnROYW1lXS5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gdHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JyAmJiBlbnRyeSAhPT0gbnVsbClcbiAgICA6IFtdO1xuICBob29rc1Jvb3RbZXZlbnROYW1lXSA9IGV4aXN0aW5nRW50cmllcztcblxuICBjb25zdCBjb21tYW5kRXhpc3RzID0gZXhpc3RpbmdFbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBBcnJheS5pc0FycmF5KGVudHJ5Py5ob29rcykgPyBlbnRyeS5ob29rcyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gOiBbXTtcbiAgICByZXR1cm4gaG9va3Muc29tZSgoaG9vaykgPT4gaG9vaz8udHlwZSA9PT0gJ2NvbW1hbmQnICYmIGhvb2s/LmNvbW1hbmQgPT09IGNvbW1hbmQpO1xuICB9KTtcbiAgaWYgKGNvbW1hbmRFeGlzdHMpIHtcbiAgICByZXR1cm4geyBjaGFuZ2VkOiBmYWxzZSwgcGFyc2VkIH07XG4gIH1cblxuICBjb25zdCB3aWxkY2FyZEVudHJ5ID0gZXhpc3RpbmdFbnRyaWVzLmZpbmQoKGVudHJ5KTogZW50cnkgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT5cbiAgICAoZW50cnk/Lm1hdGNoZXIgPT09IG1hdGNoZXIgfHwgZW50cnk/Lm1hdGNoZXIgPT09IHVuZGVmaW5lZCkgJiYgQXJyYXkuaXNBcnJheShlbnRyeT8uaG9va3MpLFxuICApO1xuXG4gIGlmICh3aWxkY2FyZEVudHJ5KSB7XG4gICAgY29uc3QgaG9va3MgPSB3aWxkY2FyZEVudHJ5Lmhvb2tzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgICBob29rcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdjb21tYW5kJyxcbiAgICAgIGNvbW1hbmQsXG4gICAgICAuLi5leHRyYUhvb2tGaWVsZHMsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZXhpc3RpbmdFbnRyaWVzLnB1c2goe1xuICAgICAgbWF0Y2hlcixcbiAgICAgIGhvb2tzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnY29tbWFuZCcsXG4gICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAuLi5leHRyYUhvb2tGaWVsZHMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgY2hhbmdlZDogdHJ1ZSwgcGFyc2VkIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlIb29rQXNzZXQoc291cmNlUGF0aDogc3RyaW5nLCB0YXJnZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZSh0YXJnZXRQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3Qgc291cmNlUmF3ID0gYXdhaXQgcmVhZEZpbGUoc291cmNlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgbGV0IHRhcmdldFJhdzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHRhcmdldFJhdyA9IGF3YWl0IHJlYWRGaWxlKHRhcmdldFBhdGgsICd1dGYtOCcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNoYW5nZWQgPSB0YXJnZXRSYXcgPT09IHVuZGVmaW5lZCB8fCBzb3VyY2VSYXcgIT09IHRhcmdldFJhdztcblxuICBpZiAoY2hhbmdlZCkge1xuICAgIGF3YWl0IGNvcHlGaWxlKHNvdXJjZVBhdGgsIHRhcmdldFBhdGgpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFjY2Vzcyh0YXJnZXRQYXRoKTtcbiAgfVxuXG4gIGF3YWl0IGNobW9kKHRhcmdldFBhdGgsIDBvNzU1KTtcbiAgcmV0dXJuIGNoYW5nZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkT3B0aW9uYWxVdGY4KGZpbGVQYXRoOiBzdHJpbmcsIGZhbGxiYWNrOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzTWlzc2luZ0ZpbGVFcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlQmFja3VwSWZQcmVzZW50KGZpbGVQYXRoOiBzdHJpbmcsIHJhdzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBiYWNrdXBQYXRoID0gYCR7ZmlsZVBhdGh9LmRvbGxob3VzZS5iYWtgO1xuICBhd2FpdCB3cml0ZUZpbGUoYmFja3VwUGF0aCwgcmF3LCAndXRmLTgnKTtcbiAgcmV0dXJuIGJhY2t1cFBhdGg7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUhvb2tNYXJrZXIoXG4gIGhvbWVEaXI6IHN0cmluZyxcbiAgbWFya2VyOiBQZXJtaXNzaW9uSG9va01hcmtlcixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG1hcmtlclBhdGggPSBnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgoaG9tZURpciwgbWFya2VyLmhvc3QpO1xuICBhd2FpdCBta2RpcihkaXJuYW1lKG1hcmtlclBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgd3JpdGVGaWxlKG1hcmtlclBhdGgsIEpTT04uc3RyaW5naWZ5KG1hcmtlciwgbnVsbCwgMikgKyAnXFxuJywgJ3V0Zi04Jyk7XG4gIHJldHVybiBtYXJrZXJQYXRoO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEhvb2tBc3NldHNGb3JIb3N0KFxuICBjbGllbnQ6IHN0cmluZyxcbiAgaG9tZURpcjogc3RyaW5nLFxuICBzb3VyY2VTY3JpcHRQYXRoPzogc3RyaW5nLFxuKTogUHJvbWlzZTx7IHNjcmlwdFBhdGg6IHN0cmluZyB9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDbGllbnQgPSBub3JtYWxpemVIb29rSG9zdChjbGllbnQpO1xuICBjb25zdCBob29rc0RpciA9IGRpcm5hbWUoZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIpKTtcbiAgY29uc3Qgc2hhcmVkVGFyZ2V0UGF0aCA9IGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aChob21lRGlyKTtcbiAgY29uc3Qgc2hhcmVkU291cmNlUGF0aCA9IHNvdXJjZVNjcmlwdFBhdGggPz8gam9pbihyZXBvUm9vdEZyb21Nb2R1bGUoKSwgJ3NjcmlwdHMnLCAncHJldG9vbHVzZS1kb2xsaG91c2Uuc2gnKTtcbiAgY29uc3QgcG9ydEhlbHBlclNvdXJjZVBhdGggPSBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwZXJtaXNzaW9uLXBvcnQtZGlzY292ZXJ5LnNoJyk7XG4gIGNvbnN0IHBvcnRIZWxwZXJUYXJnZXRQYXRoID0gam9pbihob29rc0RpciwgJ3Blcm1pc3Npb24tcG9ydC1kaXNjb3Zlcnkuc2gnKTtcbiAgY29uc3QgY29uZmlnSGVscGVyU291cmNlUGF0aCA9IGpvaW4ocmVwb1Jvb3RGcm9tTW9kdWxlKCksICdzY3JpcHRzJywgJ3Blcm1pc3Npb24taG9vay1jb25maWcuc2gnKTtcbiAgY29uc3QgY29uZmlnSGVscGVyVGFyZ2V0UGF0aCA9IGpvaW4oaG9va3NEaXIsICdwZXJtaXNzaW9uLWhvb2stY29uZmlnLnNoJyk7XG5cbiAgY29uc3Qgc2hhcmVkU3RhdCA9IHN0YXRTeW5jKHNoYXJlZFNvdXJjZVBhdGgpO1xuICBpZiAoIXNoYXJlZFN0YXQuaXNGaWxlKCkpIHtcbiAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gU2hhcmVkIGhvb2sgYnJpZGdlIG1pc3NpbmcgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7c2hhcmVkU291cmNlUGF0aH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBlcm1pc3Npb24gaG9vayBzb3VyY2Ugc2NyaXB0IG5vdCBmb3VuZDogJHtzaGFyZWRTb3VyY2VQYXRofWApO1xuICB9XG4gIGF3YWl0IGNvcHlIb29rQXNzZXQoc2hhcmVkU291cmNlUGF0aCwgc2hhcmVkVGFyZ2V0UGF0aCk7XG5cbiAgY29uc3QgcG9ydEhlbHBlclN0YXQgPSBzdGF0U3luYyhwb3J0SGVscGVyU291cmNlUGF0aCk7XG4gIGlmICghcG9ydEhlbHBlclN0YXQuaXNGaWxlKCkpIHtcbiAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gUG9ydCBkaXNjb3ZlcnkgaGVscGVyIG1pc3NpbmcgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7cG9ydEhlbHBlclNvdXJjZVBhdGh9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQZXJtaXNzaW9uIGhvb2sgaGVscGVyIHNjcmlwdCBub3QgZm91bmQ6ICR7cG9ydEhlbHBlclNvdXJjZVBhdGh9YCk7XG4gIH1cbiAgYXdhaXQgY29weUhvb2tBc3NldChwb3J0SGVscGVyU291cmNlUGF0aCwgcG9ydEhlbHBlclRhcmdldFBhdGgpO1xuXG4gIGNvbnN0IGNvbmZpZ0hlbHBlclN0YXQgPSBzdGF0U3luYyhjb25maWdIZWxwZXJTb3VyY2VQYXRoKTtcbiAgaWYgKCFjb25maWdIZWxwZXJTdGF0LmlzRmlsZSgpKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtQZXJtaXNzaW9uSG9va3NdIENvbmZpZyBoZWxwZXIgbWlzc2luZyBmb3IgJHtub3JtYWxpemVkQ2xpZW50fTogJHtjb25maWdIZWxwZXJTb3VyY2VQYXRofWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGVybWlzc2lvbiBob29rIGNvbmZpZyBoZWxwZXIgbm90IGZvdW5kOiAke2NvbmZpZ0hlbHBlclNvdXJjZVBhdGh9YCk7XG4gIH1cbiAgYXdhaXQgY29weUhvb2tBc3NldChjb25maWdIZWxwZXJTb3VyY2VQYXRoLCBjb25maWdIZWxwZXJUYXJnZXRQYXRoKTtcblxuICBjb25zdCB3cmFwcGVyVGFyZ2V0UGF0aCA9IGdldEhvb2tXcmFwcGVyUGF0aChub3JtYWxpemVkQ2xpZW50LCBob21lRGlyKTtcbiAgaWYgKCF3cmFwcGVyVGFyZ2V0UGF0aCkge1xuICAgIHJldHVybiB7IHNjcmlwdFBhdGg6IHNoYXJlZFRhcmdldFBhdGggfTtcbiAgfVxuXG4gIGNvbnN0IHdyYXBwZXJTb3VyY2VQYXRoID0gZ2V0SG9va1NvdXJjZVBhdGgobm9ybWFsaXplZENsaWVudCk7XG4gIGNvbnN0IHdyYXBwZXJTdGF0ID0gc3RhdFN5bmMod3JhcHBlclNvdXJjZVBhdGgpO1xuICBpZiAoIXdyYXBwZXJTdGF0LmlzRmlsZSgpKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtQZXJtaXNzaW9uSG9va3NdIFdyYXBwZXIgaG9vayBzY3JpcHQgbWlzc2luZyBmb3IgJHtub3JtYWxpemVkQ2xpZW50fTogJHt3cmFwcGVyU291cmNlUGF0aH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBlcm1pc3Npb24gaG9vayB3cmFwcGVyIHNjcmlwdCBub3QgZm91bmQ6ICR7d3JhcHBlclNvdXJjZVBhdGh9YCk7XG4gIH1cbiAgYXdhaXQgY29weUhvb2tBc3NldCh3cmFwcGVyU291cmNlUGF0aCwgd3JhcHBlclRhcmdldFBhdGgpO1xuICByZXR1cm4geyBzY3JpcHRQYXRoOiB3cmFwcGVyVGFyZ2V0UGF0aCB9O1xufVxuIl19
|